DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path inspection-briefs/loomworks-cr-2026-180-b13-step-1-findings-v0_1.md

Loomworks — CR-2026-180 Step 1 findings: B-13 is mostly built, and blocked — v0.1

Version. 0.1 Date. 2026-08-07 Author. Claude Code (execution session). Operator: Marvin Percival. Charter. standing-notes/dunin7-standing-authorization-charter-v0_1. Covers. change-requests/cr-2026-180-loomworks-b13-ask-your-engagement-v0_1, Step 1 (read-only). Read against. Engine aefeda6 (post CR-2026-179), clean tree. Nothing was modified. Outcome. CR-2026-180 halts and does not land. B-13 stays open.


1. Bottom line

B-13's machinery is almost entirely built. What blocks it is not the ask — it is one clause in B-13's own wording, "every source shown", which the Tier-2 standing-context block breaks.

A second gap exists (AI origin marking), but it is not B-13's: it entered through a drafting error in the CR itself, recorded at §5.


2. What already exists

B-13, in full (build list v0.7, the last version carrying the description): "A partner asks a plain question and gets a truthful answer with every source shown. When this lands, our rule against demonstrating question-answering lifts."

| B-13 requires | State | Where | |---|---|---| | a plain question against an engagement's Memory | built | ask_about_past_input intent, router.py:1574 | | a truthful answer | built | CR-2026-169 D-1: responder pins temperature=0 | | the boundary stated, not inferred | built | prompt.py:502 appends "the N most recent of M notes on record — not a search of all of them", computed from total_count/retrieval_limit, not left to the model to admit | | sources shown | built | AnswerSource list assembled from exactly the retrieved rows (converse.py:1226) | | sources cannot be fabricated | built + tested | built from operation_data, never from the model's reply; test_sources_cannot_contain_an_identifier_not_retrieved | | the window fits the engagement | built | CR-2026-179: largest in-scope engagement holds 13 committed against 50 |

The ask itself is not the gap. Had the CR been written against the code rather than against the item's age, B-13 would have read as near-satisfied — the same shape B-12 turned out to have.

3. Gap 1 — "every source shown" is not true, and this is the real blocker

AnswerSource's own docstring claims it covers "the same rows spliced into the system prompt as NOTES." That holds for the recall path's block (_format_past_input, prompt.py:480). It does not hold for Tier-2's block (_load_tier_2"RECENT NOTES (most recent first, up to 20)", prompt.py:332), which enters the system prompt on every turn and contributes nothing to sources.

So on a recall turn the model receives two note blocks and only one is cited.

This is the citability item already separated out at scoping-notes/loomworks-recall-window-tier-2-relationship-scoping-note-v0_2 §3. Three consequences:

4. Gap 2 — AI origin marking does not exist, and the seed does not require it

In the code: absent. Searched both repos for ai_generated, ai_origin, authored_by, written_by, machine-generated, and prose variants. Nothing in the engine's schemas, nothing in the surface. ConverseResponse carries companion_message and sources; there is no origin field, and therefore nothing that could be "non-suppressible" — there is nothing to suppress.

In the seed: silent. Read candidate-seeds/loomworks/loomworks-candidate-seed-v0_14.md (highest version, confirmed by version-sort) and its amendment. The seed's AI-related commitments are adjacent but point elsewhere:

| Seed text | What it commits | |---|---| | "Built by AI under operator direction… production by AI. This is foundational and non-negotiable" (:203) | how Loomworks is built | | "The voice of the system is operator-first — everything technical is Claude Code's work, everything intentional is the operator's" (:185) | how Loomworks is built | | "the AI-as-faithful-clerk posture" (:167) | product framing, explicitly deferred"the full articulation lives in the philosophy and architecture document" | | "Operator-authority over artifact state transitions… consonant with the AI-as-faithful-clerk posture" (:205) | who approves state transitions, not how answers are labelled |

None of these commits to marking a model-written answer as model-written. The seed is silent on it.

A near neighbour exists and is probably the source of the recollection. The engine carries a non-suppressible origin marking on conversational turns — input_mode: "text" | "voice" (orchestration/schemas.py:596, :1370), the voice-provenance CR's brass-mic marking. It marks whether the Operator spoke or typed: provenance of the human's input, the opposite direction from provenance of the model's output.

5. The CR's own drafting error, recorded rather than smoothed

CR-2026-180 §2 lists non-suppressible AI origin marking as one of "two settled decisions that are not reopened here", and acceptance criterion 3 requires it.

It is not a settled decision. Operator correction, 2026-08-07: "that criterion was in CR-2026-180 because I put it there from recollection of a settled commitment, not from reading the seed. Do not treat the CR as evidence the seed commits to it."

Recorded because a CR asserting a commitment is exactly the sort of artifact a later session would cite as evidence the commitment exists. CR-2026-180 is not evidence for it. The seed is the authority, and the seed is silent.

Consequence. Marking model-written answers is a seed-level decision and a new item, not part of B-13. It is a new user-visible contract on every answer the system produces, and the CR's own halt condition covers it: "if Step 1 finds the gap needs… a seed-level addition, or anything the seed is silent on, halt and report. Seed-level decisions do not get made inside a CR."

Q-6's split (sources on model-written answers, not on system-assembled ones) is settled and is unaffected by this correction — it is a decision about sources, not about origin labelling.

6. Status and what follows


DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks — CR-2026-180 Step 1 findings — v0.1 — 2026-08-07