Version. 0.1 · Date. 2026-08-11 · Author. Claude Code (drafting, from the extraction scoping) / Marvin Percival (approving).
Target. /Users/dunin7/loomworks-engine, branch main.
Baseline. Engine 64610b4. CC confirms at Step 0.
Companion to. inspection-briefs/loomworks-raw-message-grant-extraction-scoping-v0_1 (record 9fe62ff) and inspection-briefs/loomworks-b86-dependency-remeasurement-v0_1 (record 34c27cc) — where this CR and the briefs disagree, the briefs govern, verified against code.
Charter. Autonomous regime. Status. DRAFT — awaiting the gate. Do not execute.
redirect_orient_recall_misroute shape. The forensic classified_intent is worth more than one Haiku call. Revoke-first ordering.
A. Tighten extract_delegation_grant (delegation/schema.py): adjacency + word boundaries. Today the prefix and the action are matched independently and unanchored, and actions are bare substrings ("render" matches inside "surrender"); the conservatism was living in the classifier gate this CR removes. New matching: the grant prefix must be followed by the action within a short bounded gap (single combined pattern per prefix–action pair, or a distance check between match spans — Step 1 picks the cheaper to test), and every action matches on word boundaries. The tightening applies at every call site deliberately — the CR-2026-200 remember_about_me/add_knowledge branches inherit it; consistency is the point. Measured false-negative cost at drafting: zero — every genuine grant form in the scoping battery and E0127's live sentence has the prefix adjacent.
B. The 4a redirect: redirect_grant_misroute(classified, message) in classifier.py, applied in operator_converse immediately after redirect_orient_recall_misroute. Pure function, no LLM, no DB. Ordering inside it: (1) if the revocation prefixes match (_REVOKE_PREFIXES — "you can't render" matches both grant and revoke prefixes), do not redirect as a grant — fall through unchanged; (2) else if the tightened extract_delegation_grant recognizes a grant and the intent is not already remember_about_me/add_knowledge, redirect to remember_about_me — the CR-200 branch re-runs extraction on the raw message and mints. Forensic tradeoff, named: the stored classified_intent on a redirected turn reads remember_about_me, not what the classifier said — the same tradeoff redirect_orient_recall_misroute already accepted; CR-2026-205's outcome column will record delegation_held, restoring the distinction going forward.
C. Reword the CR-200 ack to tentative composition. Server-composed from the parsed grant as today (capability, scope, approval mode — never the model), but framed as the Companion's reading, pointing at the held card as the confirm: on the shape of "I think you may have granted me standing authority to {action} {scope-phrase} — I've noted it as held. If that's what you meant, commit it from the held card; if not, say so and nothing happens." Exact words are Step 2's; the frame — proposal, not fait accompli — is settled (§0.5).
general_conversation's reply for redirected turns is no longer the responder — the E0127 second half (chat-prose specification after a missed grant) becomes unconstructible for grant sentences. The general bypass remains CR-2026-204's subject.
Matcher: battery fixtures from the scoping brief — clause-separation, distant-prefix, and substring-in-word classes must NOT match post-tightening (fail against the current matcher first); genuine forms (E0127 verbatim, capitalized+period, feel free to take notes whenever with its pre_authorized marker) must still match; mention/question classes pinned as matching-by-ruling; dual-match negation not redirected (revoke-first). Redirect: the re-measurement grid replayed as pure-function cases; intent already remember_about_me/add_knowledge untouched; no grant → untouched. Ack: tentative frame asserted (the words "I think"/held/commit-path present; "you granted" absent). Existing CR-200 grant-branch suites re-run explicitly.
Kind C expected: grant recognition, routing, and delegation assertions touch personal-engagement memory and conversation_turns, not the seed. Checked at Step 1: extract_delegation_grant, the redirect site, and the CR-200 branch read nothing seed-derived. A null finding is an entry; recorded either way.
| Step | What | Mode |
|---|---|---|
| 0 | Pre-flight — baseline 64610b4, tree clean. | Auto |
| 1 | Verify §1 against code (briefs govern); tests written and observed failing; adjacency mechanism picked. | Auto |
| 2 | The tightened matcher, the 4a redirect, the tentative ack. | Auto |
| 3 | Full suite; ruff; mypy; 412-turn corpus sweep re-run and reported. | Auto |
| 4 | Eye-test: E0127's sentence replayed live in a throwaway engagement (standing eye-test discipline: Marvin-Test2, teardown to zero rows, classified_intent captured before teardown, listener start-time verified). | Auto |
| A | Checkpoint. | Checkpoint |
| 5 | Tag cr-2026-203-raw-message-grant-extraction. Push. Watch the CI run and report its result. | Auto |
Execute CR-2026-203 v0.1 at change-requests/cr-2026-203-loomworks-raw-
message-grant-extraction-v0_1.md in loomworks-record. Confirm the CR
number and baseline first.
§0 carries five settled rulings — position 4a, revoke-first, adjacency+
word-boundaries only, mention class chosen-not-missed, tentative ack.
Do not re-raise them.
The scoping briefs govern where this CR disagrees with them, verified
against code. Each test observed failing first. The re-measurement grid
is the fence: all ten cells wired, as a pure function, no LLM.
The blast-radius fact to keep in view: a false capture cannot mint
authority — held is not committed. The ack is the residual; it reads
as the Companion's reading, never as the Operator's act.
DUNIN7 — Done In Seven LLC — Miami, Florida CR-2026-203 — raw-message grant extraction — v0.1 — 2026-08-11 The grant path stops depending on routing; the human commit stays the semantic gate.