DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path change-requests/cr-2026-241-save-offer-assent-classifier-independence-v0_1.md

CR-2026-241 — The Save-Offer "Yes" Stops Depending on the Classifier — v0.1

Version: v0.1 Date: 2026-08-26 Status: Drafted in-session under completion-program P-1 (ruled: yes). Occasion: B-108 (standing-notes/dunin7-build-list-v1_07), rank 9 of the completion program's Wave 1, clause 2. Filed 2026-08-16 per the Operator from CR-2026-220's Step 3 verification, with the fix shape named in the filing: a deterministic pre-dispatch ROUTE to commit_assertion (classifier-independence in the CR-203 sense) — and the constraint recorded verbatim: any fix must not break commit_assertion's designed acceptance; an engagement "yes" after a save-offer legitimately COMMITS. Cites: CR-2026-220 (the personal held-assent redirect this is the engagement-side sibling of — sibling, not port: that one answers, this one commits); CR-2026-127 R1 (the deterministic last-turn save-offer binding inside _route_commit_assertion, which this route lands in unchanged); CR-2026-203 (the classifier-independence shape).


Plain-language summary

When the Companion offers to save a note and the Operator says "yes", the right thing happens today only because an LLM files the "yes" under the right label first. Everything after that first hop is already deterministic — CR-127's net commits exactly the just-offered note. One misfile and the "yes" lands in unpinned model prose instead, the exact lane B-107 documented on the personal side.

This CR removes the LLM from the first hop: a bare assent whose immediately-preceding turn was a save-offer routes to the commit handler deterministically, whatever label the classifier produced. The handler is unchanged — the "yes" still commits, per the recorded constraint. Two smaller residues from the same filing ride along: the delegation-grant ack joins the personal redirect's condition, and the two assent word-lists become one.

1. Step 0, read at 482631c

  1. The downstream net is already deterministic. _route_commit_assertion (CR-127 R1): _is_bare_affirmative(message) + _last_save_offer_number(recent_turns) — the offer must be the LAST turn (an intervening exchange voids the binding), the number comes from the persisted structured_data kind="save_offer", never from prose. Only the dispatch INTO that handler depends on the classifier.
  2. Detection evidence exists on the turn. The save-offer turn persists structured_data kind="save_offer" (the CR-138 channel); ConverseTurn carries it into route_intent's history. Its operation_outcome is NULL (the offer branch computes no discriminator), so detection keys on the structured-data kind — the same fact the R1 net binds with.
  3. The personal redirect's insertion point is the template. CR-220's check runs ahead of intent dispatch in route_intent; its condition (prior intent remember_about_me + outcome held/refined) is disjoint from the save-offer condition (structured-data kind, outcome NULL), so order between the two checks cannot matter — but personal-first is kept, matching the existing block.
  4. The two ride-alongs, from the filing's own scope: (a) add_knowledge's grant branch persists outcome delegation_held — a personal held write reached via the engagement-labeled intent, excluded from CR-220's detector by its intent fence; a bare assent after it deserves the same held-card redirect (the grant's confirm IS the held card). (b) _ASSENT_PHRASES (held_assent) and _BARE_AFFIRMATIVE_TOKENS (router) are two hand-kept lists that already disagree ("do it" vs "please do"/"sounds good"); they become one vocabulary with two consumers.

2. The change

orchestration/held_assent.py:

orchestration/router.py:

3. Tests

4. What this does not do


DUNIN7 — Done In Seven LLC — Miami, Florida CR-2026-241 — The Save-Offer "Yes" Stops Depending on the Classifier — v0.1 — 2026-08-26