Date. 2026-08-12 · Author. Claude Code (read-only; classifier probes on the REAL turns, no writes). Operator: Marvin Percival.
Fence. Read-only. Engine read and probed at a367db7; surface read at 6175e45. Classifier as production resolves it: claude-haiku-4-5-20251001, temperature 0, 3 trials per cell — every cell 3/3 identical.
Reported, not decided.
Door 2's seeded block (11 turns) and door 1's talked-through block (7 turns) were loaded from conversation_turns and replayed through classify_intent, project-less, exactly as lived. One synthetic condition added: door 1's history plus the two-path question the create_engagement_active template prescribes at sufficiency ("…Type it up first, or commit it as we have it?").
| History | "Set it up." | "That's everything. Set the project up." | "Commit it as we have it." | "Type it up." | |---|---|---|---|---| | Door 2, real | commit_project_draft 0.95–0.98 | commit_project_draft 0.95 | — | — | | Door 1, real | commit_project_draft 0.92 | commit_project_draft 0.95 | — | — | | Door 1 + the two-path question | commit_project_draft 0.92 | commit_project_draft 0.95 | create_engagement_commit 0.98 | create_engagement_commit 0.98 |
Three findings in one table. (1) The live dead-ends are deterministic — both doors' terminal sentences route to commit_project_draft (the Phase 54 intent whose handler requires an existing candidate; on engagement_id is None it composes exactly the observed reply) every trial. (2) The prescribed question does not save the natural phrasings: even with the menu present, "Set it up." still routes to the wrong sibling — this is not merely a missing-precondition defect. (3) The taxonomy works exactly as written: create_engagement_commit's definition fires on answers that echo its menu ("Type it up" / "commit it as we have it" — 0.98, 3/3), and only on those; every general go-ahead falls to commit_project_draft's looser "satisfied and wants to proceed" description. The success set is the menu's own words, and neither door ever shows the menu.
create_project is wired to no current surface. No door sends it as an intent_hint (the one frontend mention is a comment); it survives as the Phase 40 backward-compat hint value. It never appeared in either live transcript. It is not the missing seam.create_engagement_commit (_route_create_engagement_commit → create-from-conversation — needs no candidate; it creates). From doors 1/2 it is reachable only through the classifier: the surface hints only the FIRST turn (create_engagement_entry); every subsequent turn, including the terminal, is an unconstrained sentence the classifier must route. The intent_hint mechanism the doors already use for entry exists and is not used at the terminal.draft-candidate → file → seed/extract → seed amend), ending at the WebAuthn-gated instantiate._DOOR2_CLOSING_TURN (me_create_engagement.py:883): "…or say the word and I'll set it up." This is a new shape for the family: a server-composed unarmed promise. The CR-199/B-87 remedies assumed server composition makes a claim safe; here the server itself composes a promise the taxonomy cannot honor — the only words that work are the menu's, and the closer omits the menu. Server-composed is necessary, not sufficient: the words must also be armed.create_engagement_active template instructs the model to judge sufficiency and then ask the two-path question; in the live transcript the Operator declared sufficiency first ("That's everything") and the question was never asked. The terminal's precondition lives in the wording layer's judgment — the weakest-guarantee layer deciding when the strongest-consequence turn becomes possible.
The working door's terminal is a control that names its action and dispatches without interpretation; the broken doors' terminal is a classification of an unconstrained sentence whose success set is two menu phrases the Operator was never shown. Every measured cell is consistent with that structure and none contradicts it. This is the same shape CR-2026-203 just closed for grants — an outcome reachable only through routing, where routing is the weakest layer on the path — with one difference worth naming: the grant fix had a deterministic recognizer to move ahead of routing; here the deterministic instrument that already exists is the doors' own intent_hint mechanism, used at entry and unused at the terminal.
(a) Routing/seam (the CR-203 family): project-less commit_project_draft in a creation conversation falls through to _route_create_engagement_commit — the misroute becomes harmless because the wrong sibling lands in the right handler when no candidate exists. Smallest blast radius; leaves the promise unarmed. (b) Arm the promise: compose the two-path menu where the invitation is composed (door 2's closer; door 1's terminal) — though the measurement shows the menu alone does not catch natural phrasings. (c) A terminal control: the surface offers the commit as a control (the door-3 convergence), or sends intent_hint="create_engagement_commit" on a recognized terminal — the entry turn's own mechanism, applied at the exit. These compose; (a) and (c) are deterministic, (b) alone is not.
DUNIN7 — Done In Seven LLC — Miami, Florida — v0.1 — 2026-08-12 The working door ends in a control; the broken doors end in prose asking to be classified.