DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path change-requests/cr-2026-207-loomworks-candidate-ceremony-home-v0_1.md

DUNIN7-M4 — INFRASTRUCTURE CHANGE REQUEST

CR-2026-207 — The ceremony's durable home: the candidate's page renders it, and the persisted sentence describes state (v0.1)

Version. 0.1 · Date. 2026-08-12 · Author. Claude Code (drafting, from the E0128 walk findings) / Marvin Percival (approving). Target. /Users/dunin7/loomworks-engine AND /Users/dunin7/loomworks, both main. Baseline. Engine cd91176, surface 7ac3cb2. CC confirms at Step 0. Companion to. inspection-briefs/loomworks-e0128-walk-findings-v0_1 (record da86274) and the truthfulness standing note v0.3 (record aacfa4e) — the brief governs, verified against code. Charter. Autonomous regime. Status. DRAFT — awaiting the gate. Do not execute.


0. Settled — the Operator's ruling, 2026-08-12. Do not re-raise.

  1. Both, not either. The candidate's own page renders the ceremony (the state is derivable — a candidate engagement IS the pending-commit state, no new persistence), AND the persisted sentence becomes state-honest ("drafted, not yet committed"), because a persisted imperative is a promise that outlives its context.
  2. The standing note v0.3 records the general shape: an armed promise that survives its own arming; composition-time truth is not persistence-time truth. This CR is that member's remedy.
  3. E0128's live tab is not a test fixture. It stays open; if its ceremony state dies before this CR deploys, that it can die is part of the finding and gets said. Post-deploy, E0128 commits from its own page like any candidate.

1. The changes

A. The durable home (surface). The in-engagement page, for an engagement whose state == "candidate" viewed by its creator, renders the existing CommitCeremony (shared component, no new ceremony code) in a standing candidate banner: the state sentence + the ceremony. Always present on the candidate's page — the affordance is derived from state on every render, never from a response. Step 1 verifies what the page's engagement fetch carries today (the DB has state and created_by_person_id; the surface fetch does not yet read them) and extends that projection minimally. Non-creators and non-candidates render nothing new.

B. The state-honest sentence (engine). The step-up branch's persisted reply recomposes from imperative to state + durable pointer: on the shape of "Your project is drafted, not yet committed. You can make it official from the project's page whenever you're ready." — true forever, and naming an affordance that is durable because §1A ships in the same CR (the standing-note rule: composed against the wiring that fulfills it). The live request_action="commit_step_up" stays — the in-flow ceremony on the creation surface remains the immediate path; the persisted sentence stops being the stranded imperative.

C. Existing stranded turns (E0128's imperative, and any like it) are corrected by supersession-in-effect, not rewritten: the page now honors what they promise. No transcript edits — descriptions of state are not state, and the page rendering the ceremony makes the old sentence's act performable again.

2. Consequences named, so they are chosen

3. Tests — each observed failing first

Surface: banner + ceremony render for creator-viewed candidates; absent for active engagements, absent for non-creators (fence); the projection carries state/creator. Engine: the recomposed sentence asserted (imperative absent, state sentence present — source and wire); request_action still fires live; the double-commit guard pinned. Eye-test: E0128 committed from its own page — the walk that failed, repeated and passing (the passkey act itself is the Operator's; the eye-test reaches the ceremony rendered where the instruction strands the reader, and the Operator finishes it).

4. seed-mutability impact

Kind C expected: state projection, a banner, a recomposed sentence; the commit endpoint itself is untouched. Checked at Step 1; a null finding is an entry.

5. Build steps

| Step | What | Mode | |---|---|---| | 0 | Pre-flight — baselines, clean trees. | Auto | | 1 | Verify the fetch projection, the commit endpoint's state guard, the banner's data needs; tests written, observed failing. | Auto | | 2 | Engine sentence + surface banner/ceremony + projection. | Auto | | 3 | Both suites; ruff; mypy (verdicts read in full); tsc. | Auto | | 4 | Eye-test: candidate page renders the ceremony (E0128 — without committing it; the commit is the Operator's). | Auto | | A | Checkpoint. | Checkpoint | | 5 | Tag cr-2026-207-candidate-ceremony-home; push both; watch both runs; redeploy; post-deploy: the Operator's walk repeated. | Auto |

6. Acceptance gate

  1. The candidate page renders the ceremony for its creator; fences hold (non-candidate, non-creator).
  2. The persisted sentence describes state, names only the durable affordance; the imperative is gone from new composition (source-asserted).
  3. Double-commit fails cleanly (pinned).
  4. Suites green; gates clean; runs watched; redeployed; the Operator's E0128 walk succeeds where it failed.
  5. seed-mutability recorded.

7. Kickoff prompt


Execute CR-2026-207 v0.1 at change-requests/cr-2026-207-loomworks-
candidate-ceremony-home-v0_1.md in loomworks-record. Confirm CR number
and both baselines. Two repos: engine + /Users/dunin7/loomworks.

§0: both halves, not either — the page renders the ceremony from
DERIVED state; the persisted sentence describes state, never instructs.
The E0128 tab is not a fixture; if it died, say so.

The walk that failed is the acceptance test: the Operator lands on the
candidate's page and the ceremony is there.

DUNIN7 — Done In Seven LLC — Miami, Florida CR-2026-207 — the ceremony's durable home — v0.1 — 2026-08-12 The affordance derives from state; the sentence stays true forever.