Date. 2026-08-12 · CR. change-requests/cr-2026-204-loomworks-chat-provenance-marker-v0_1 · Baselines at Step 0. Engine b4a7881 (moved from the drafted 64610b4 by CR-2026-203 — expected), surface 35a49c9; both trees clean.
Built at. Engine 7c4d270, surface 6175e45 — committed, NOT tagged, NOT pushed, NOT deployed. Halted at Checkpoint A.
operator_converse: _companion_error (the membership-error direct return; also the builder every delegated payload rides through), the suspended/deleted account replies, the exhaustion-choice reply (exhaustion_choice.py), cold-open, completeness-check, delegated re-wrap, orient, path (b), and the 6b blank-reply model_copy. All stamps are explicit; no constructor default; an AST-level suite test walks converse.py + exhaustion_choice.py and fails on any ConverseResponse( call without a composition= kwarg — a missing stamp fails the suite even if no test exercises the branch. Tests were observed failing first (engine: 10 failing pre-fix, including the CHECK test after it was caught passing vacuously against the missing column and tightened per the B-51 lesson; surface: the positive marker test observed failing against the pre-marker component, the three negative tests correctly passing).composition_origin.py (the two-value vocabulary, single source); migration 0107 (nullable TEXT + CHECK, down/up verified); record_turn kwarg with frozenset validation ahead of the DB; every site stamped; history projection. Two edges named and chosen: path (b) stamps by which composer ran (llm_key is None → the server's no-key fallback → server_composed) — a deterministic branch condition, not a detector; and RESPONDER_FALLBACK arrives through the model channel and stamps model_prose (channel, not authorship — its claims hold regardless).composition through types.ts → useConversation (null → undefined, absent never becomes a value; the live bubble carries the same stamp the persisted turn was written with) → the marker in CompanionBubble: a small bordered label beside the Companion name, model_prose only, full-claim sentence as its title; strings in strings.ts.general_conversation persisted composition = model_prose; "What can you do here?" → orient persisted server_composed; both operator turns NULL; E0121's July turns NULL untouched. Full teardown (4 turns deleted, focus pointer restored to E0127, tab closed, dev surface stopped).Nothing in the build needed to decide whether to stamp. Every assignment followed from which branch composed the reply — branch identity, not content. No halt was triggered; the diff contains no reply-content inspection of any kind (gate item 4 holds).
loomworks-dev.dunin7.com and say so — I'll rerun the eye-test there instead.b4a7881 while the gate is open.
Kind C — no contact. Checked across the diff: the stamp reads the pipeline branch; the column is on conversation_turns; the surface reads the wire field. The delegated branch carries seed-derived draft content through it, and the marker reads none of it. A null finding is an entry; recorded either way.
Halted. Awaiting GATE A APPROVED — PROCEED for CR-2026-204 before Step 5 (tag cr-2026-204-chat-provenance-marker, push both repos, watch both runs, redeploy the surface per the recorded procedure, eye-test the marker live).
DUNIN7 — Done In Seven LLC — Miami, Florida — CR-2026-204 Checkpoint A — v0.1 — 2026-08-12