Version. 0.1 · Date. 2026-08-11 · Author. Claude Code (read-only scoping). Operator: Marvin Percival. Fence. Read-only. Nothing built. The rulings applied. B-87: split the sentence, not the turn — a claim whose truth depends on facts only the server holds gets server-composed; the conversation around it stays model prose. B-86: scope it, ranked higher than filed — routing depends on the one layer that just got weaker.
The test explains the denial cleanly, as the Operator said: its whole sentence was the claim, so there was nothing to split. Against the seven:
approval_card outcome (both request intents). "I've proposed the draft — it's in your notifications to approve or decline." The entire reply is the claim (a card exists and awaits a decision) plus its pointer; the per_action_forced note is likewise a server fact. Nothing conversational is lost by composing it — and this is the highest-traffic claim in the delegation flow.executed / executed_then_failed (both request intents). The fait-accompli report — or the it-did-not-happen report with its reason — is the sentence. Server holds the ref and the reason verbatim. (Dormant for Tier-1 under per_action_only; live code.)approve_draft's three outcomes. "Done — X executed" / "approved, but it failed: reason" / "nothing is waiting." All three are whole-sentence server facts.remember_about_me's error branch (no personal engagement). A pure misconfiguration report; tiny; all-claim.save_filter. Claim: "Saved NAME" / "Not saved — that name is taken." (server holds the name, the parsed predicate, the action). Surround: the criteria restatement and the refine invitation — genuinely conversational, tied to the Operator's own phrasing. Noted: unlike tune_setting, save_filter has no structured side-channel today — its claim lives in prose only.tune_setting. Claim: "X set to Y." — already dual-carried: the structured setting_changes field is rendered by the surface independently of prose. The split mechanism exists here natively; the residual exposure is prose contradicting the chip.add_knowledge's error branches. Claim prefix: "Nothing was noted down" (+ which blocker — server facts). Surround: the ask ("which project?" / "could you restate?") — the ask benefits from model phrasing against the actual message.remember_about_me's no_personal_fact. Same shape as 7: server claim prefix, conversational restate-ask.commit_project_draft. Claim: "committed; induction is running" (a server fact currently not delivered to the model at all — the CR-2026-199 empty-slot smell). Surround: the warm let-me-set-this-up. Splits cleanly, but the split's prerequisite is wiring the missing fact — the latent smell becomes load-bearing here.
The nearest category is real but different: no-claim replies — pure elicitations (no_project "which project?", missing_shape_type, missing_target). They assert nothing; there is nothing to hoist; they are correctly model prose and need no treatment.
Two split shapes exist in the codebase today, with different properties: (a) prefix-composition — a server claim sentence with model continuation — which needs a new composition mechanism (today delegated_response is all-or-nothing); and (b) the structured side-channel — setting_changes is the working precedent (with side_effects, held_items, sources as the family) — where the claim is safe at the surface even if prose drifts, at the cost of a possible prose-vs-chip contradiction the Operator can see. The categorization above holds under either; choosing per surface is the CR's design work.
The classifier's history is prose only: _build_user_prompt renders each turn as a ROLE: content line (classifier.py:199-231) — nothing structural reaches it. Yet the structural facts largely exist: conversation_turns durably records classified_intent per companion turn and a kind-discriminated structured_data payload for many. The one missing structural fact is the operation outcome (denied / approval_card / executed …) — it is not persisted on the turn; today it survives only inside the prose. (Post-B-87, for denials, that prose is at least deterministic.)
The same sentence, three routings by history state: in a clean conversation with the denial's prose present, "You can draft specifications." classified remember_about_me first try; in the outage-polluted conversation it classified general_conversation twice — including the "Remember about me:" phrasing that probes at 0.82–0.92 in isolation. Post-B-85, prior companion prose is unpinned on the responder seam: the same input can produce different history, and different history routes differently. The structural signals are pinned; the prose is not. That is the raised rank, in the Operator's words: not a robustness nicety — a dependency on the one layer that just got weaker.
COMPANION [request_draft → denied]: … — the smallest change, using what classified_intent already holds; it wants the outcome persisted too (a turn column or a structured_data kind), which is the one schema-shaped piece.The risk to respect: any classifier-prompt change shifts classification globally — the blast radius is the 32-intent taxonomy, not one arc. The available instruments are the probe harness used in the B-81 scoping and transcript replays; the CR should demand a before/after classification sweep, not a single-intent check.
DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks — B-87 split-test scoping + B-86 scoping — v0.1 — 2026-08-11 The server knows what happened; the model is guessing at it fluently.