DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path change-requests/cr-2026-186-loomworks-b55-type-names-v0_1.md

DUNIN7-M4 — INFRASTRUCTURE CHANGE REQUEST

CR-2026-186 — B-55: "of its type" names no type (v0.1)

Version. 0.1 · Date. 2026-08-07 · Author. Claude.ai (drafting) / Marvin Percival (approving). Target. /Users/dunin7/loomworks-engine and /Users/dunin7/loomworks. Baseline. Post CR-2026-185. CC confirms both repos at Step 0. Companion to. inspection-briefs/loomworks-small-work-sweep-step-0-findings-v0_1.md §6. Charter. Autonomous regime. Status. Ready for CC execution. Independent of 183/184/185 — may run in parallel.


1. Summary

Where the surface says "of its type," it names no type. The wire carries a type id, never a name, on both renders and shapes — so the phrase renders incomplete or blank wherever it appears.

Design decision, settled in advance: resolve the type name server-side, batch-joined, in the same request. The engine already holds the type table; this is a join, not new data. A client-side lookup would be N+1 for a display string.


2. Scope

Engine.

  1. Resolve type names on the render and shape responses — batch-joined, not per-row.
  2. Both the single-read and list paths. CR-2026-171's B-44 found the same class of omission where a list route and a single route diverged; check for that shape here rather than assuming they share a builder.

Surface.

  1. Use the resolved name wherever the phrase appears. Find every occurrence — the Step 0 sweep found this on both renders and shapes, so a single fix site is unlikely to be complete.
  2. Plain terms. A type name shown to an Operator is operator-facing text, not codebase shorthand — if the stored name is shorthand, report it rather than displaying it raw.

3. The case worth getting right

A type id that resolves to nothing — deleted type, unknown id, null column — must not render as an empty phrase. "of its type" followed by nothing is the current defect; "of its " followed by nothing is the same defect with extra steps.

CC decides what unresolvable renders as and reports it. Only-show-what-is-available applies: if the type cannot be named, the phrase should not appear at all rather than appearing incomplete.


4. Out of scope

Any change to what types exist, how they are declared, or the declared shape-types and render-types themselves — those are seed-level. This CR displays what is already there.


5. Build steps

| Step | What | Mode | |---|---|---| | 0 | Pre-flight, both repos. | Auto | | 1 | Read: enumerate every surface occurrence of the phrase and every response that would need to carry a name. Report before building. | Auto | | 2 | Engine batch-join on render + shape, single-read and list paths + tests. | Auto | | 3 | Surface consumption at every occurrence found + tests. | Auto | | 4 | Unresolvable-type case per §3 + test. | Auto | | 5 | Both suites; ruff 0; mypy at/below baseline. | Auto | | A | Checkpoint. | Checkpoint | | 6 | Tag cr-2026-186-b55-type-names. Push. | Auto |


6. Acceptance gate

  1. Every occurrence of the phrase names a type, or does not appear.
  2. Resolution is batch-joined server-side — no per-row lookup, no client-side resolution.
  3. Single-read and list paths both covered, verified rather than assumed to share a builder.
  4. Unresolvable case handled explicitly and reported.
  5. Both suites green, both gates clean.

7. Kickoff prompt


Execute CR-2026-186 v0.1 at ~/Downloads/cr-2026-186-loomworks-b55-
type-names-v0_1.md. Confirm the CR number first.

B-55: the wire carries a type id, never a name, so "of its type" names
nothing. Remedy is pre-decided — resolve server-side, batch-joined, same
request. Don't reopen it.

Step 1 is a read: enumerate EVERY occurrence of the phrase on the
surface and every response that needs to carry a name. The sweep found
this on both renders and shapes, so one fix site is unlikely to be
complete.

Check the single-read and list paths separately rather than assuming
they share a builder — CR-2026-171's B-44 was exactly that shape.

§3 matters: an unresolvable type must not render as an empty phrase.
Only-show-what-is-available — if it can't be named, the phrase doesn't
appear. Report what you chose.

Independent of CRs 183-185; can run in parallel if you have capacity.

DUNIN7 — Done In Seven LLC — Miami, Florida CR-2026-186 — B-55 type names — v0.1 — 2026-08-07