Version. 0.1
Date. 2026-08-06
Author. Claude.ai (drafting) / Marvin Percival (approving).
Target. /Users/dunin7/loomworks, branch main.
Baseline reference. main HEAD 1245f1c7584db19921f430b429f69a844221b4ed (2026-08-05T12:18:21-04:00), confirmed clean tree at Step 0 inspection.
Priority. Standard.
Confidential. Internal DUNIN7.
Companion to. inspection-briefs/loomworks-small-work-sweep-step-0-inspection-brief-v0_1.md; inspection-briefs/loomworks-small-work-sweep-step-0-findings-v0_1.md (the evidence baseline for every item below — file/line citations are not repeated here); current-status/dunin7-status-brief-v0_36; standing-notes/dunin7-build-list-v0_29.
Charter. standing-notes/dunin7-standing-authorization-charter-v0_1. Autonomous regime in effect — this CR does not require a pre-execution Operator halt beyond the checkpoint named in §4.
Status. Ready for CC execution.
CR number. 172 is a best-guess next slot, one past the engine cluster's 171. Claude.ai cannot read the record's CR ledger directly; CC should confirm no collision before filing and renumber if one exists.
Supersedes. None — companion to CR-2026-171, drawn from the same sweep.
Three small, surface-only fixes. No new mechanism, no schema change on either side. B-36's engine route already exists and is already complete — this CR builds only the button and the confirmation it needs.
Fix. src/lib/strings.ts:1200-1205 — add a clarifying clause to composeMemoryCurrent or composeVersionPair naming that the version counter also moves for reasons unrelated to content, so the two sentences stop reading as contradictory. Possibly a one-line JSX adjustment in ManifestationRoom.tsx's StalenessBlock (lines 61-90) if the clause needs to reference both values together. No logic change — the underlying distinction (memory_has_changed vs. the version counter) is already correct and already documented in the component's own comment block.
Test. Component test / snapshot on StalenessBlock asserting the clarified composition.
Fix. RenderingRoom.tsx (lines 154-167, 178-190) — destructure .state from usePagedList instead of loading/error/items directly; replace the three if-blocks with a switch over state.status (four cases), mirroring ShapingRoom.tsx:214-260. Confirmed drop-in, not a behavior change — the hook's own precedence (failed outranks empty/populated; unloaded/loading render identically) matches RenderingRoom's existing check order.
Test. Existing RenderingRoom tests should pass unchanged. Add one test asserting the unloaded/loading render path if not already covered.
Fix. One button plus one confirmation dialog with a required rationale field, wired to the existing, already-complete POST /engagements/{id}/renders/{id}/retire route. No schema change needed — the request body is already just rationale: str.
Test. Component test confirming: the dialog requires a rationale before it will submit; the confirm step is required before the route is called; the button only appears on a render in 'produced' state, matching the endpoint's own irreversibility precondition (no un-retire path exists anywhere in the engine).
Per the findings document's §5 and §6, six items are confirmed but do not belong in this CR:
/auth is hardcoded as the real redirect target in 8+ surface files; retargeting all of them to /signin is a design decision, not an env-guard.None of these six is absorbed here.
| Step | What | Mode |
|---|---|---|
| 0 | Pre-flight — confirm main matches baseline HEAD above; confirm tree clean. | Auto |
| 1 | B-57 fix + test. | Auto |
| 2 | B-38 fix + test. | Auto |
| 3 | B-36 fix + test. | Auto |
| 4 | Full surface sweep — lint, tsc, build, vitest. No regressions. | Auto |
| A | Checkpoint — Operator confirms before tag. | Checkpoint |
| 5 | Tag cr-2026-172-small-work-sweep-surface. Push. | Auto (post-checkpoint) |
eslint / tsc / build / vitest all clean.StalenessBlock no longer reads as self-contradicting.state.status; behavior unchanged from before the fix.Three surface-only fixes. No engine change, no migration. Component test count +2 to +4.
Read the Change Request at the path I supply below. This is CR-2026-172
v0.1, the small-work sweep's surface cluster. You are the executing agent.
Confirm the CR number against the record's ledger before filing; renumber
if 172 collides with something already filed (and confirm CR-2026-171
was filed first, or file this one as a true standalone if not).
CR path: ~/Downloads/cr-2026-172-loomworks-small-work-sweep-surface-v0_1.md
Three small surface fixes: B-57 (staleness screen's two sentences read
as contradictory — string clarification only), B-38 (RenderingRoom
hand-rolls the state branch usePagedList already provides via .state),
B-36 (retire-a-render control — the engine route is already complete;
build the button + confirmation dialog with a rationale field).
Baseline: surface main at 1245f1c7584db19921f430b429f69a844221b4ed,
confirmed clean.
None of the three has an open design decision — implement per the
CR's §2, each mirroring a pattern already proven elsewhere in the
same repo (ShapingRoom.tsx for B-38's switch shape; the existing
retire route's own precondition for B-36's button visibility).
Full lint/tsc/build/vitest sweep at Step 4. Checkpoint before tagging.
DUNIN7 — Done In Seven LLC — Miami, Florida CR-2026-172 — Small-work sweep: surface cluster — v0.1 — 2026-08-06