DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path session-handoffs/cr-2026-199-checkpoint-a-v0_1.md

CR-2026-199 — Checkpoint A — v0.1

Date. 2026-08-10 · Author. Claude Code (execution). Operator: Marvin Percival. CR. change-requests/cr-2026-199-loomworks-truthful-replies-v0_1.md (filed, record c3abef4; number confirmed non-colliding). Baseline confirmed. Engine 4ae5509, tree clean at Step 0. Working tree now holds: orchestration/prompt.py, api/app.py, five prompt assets (add_knowledge.md, request_draft.md, request_revision.md, remember_about_me.md, general_conversation.md, companion_persona.md), and tests/test_cr_2026_199_truthful_replies.py. Nothing committed, tagged, or pushed.


Step 1 — the four members verified; no fifth found

Each member was re-verified at its exact lines rather than trusted from the brief (member 1's error branches, missing placeholder, and discarded formatter re-read directly; members 2–4 verified against the formatter, preamble, and fallback text). The fifth-member scan covered the one surface the sweep had framed narrowly: all ten ConverseSideEffect emissions were checked against their adjacent writes — every one composes from a returned write row (including the seam-error "Started a new project", which is truthful: the row exists). Exactly four members. No halt.

Step 2 — the structural mechanism, stated

A formatter-covered intent whose template lacks {operation_result} is now unconstructible. OPERATION_RESULT_INTENTS (the fifteen intents the dispatcher covers, declared beside it with a coupling note) is validated by validate_intent_templates(), which raises naming every offender. It runs in two places: the FastAPI lifespan — a violating template cannot serve — and the suite — it cannot merge. Chosen over a loud runtime splice because a runtime failure would turn an Operator's turn into a 500; a boot/suite failure reaches the builder instead. The validator itself was observed firing: a test doctors save_filter.md to drop its placeholder and asserts the validator names it.

Step 3 — the members, each test observed failing first

The tests were written before the fixes and run against the pre-fix code: 8 of 8 member/structural assertions failed, including the structural validator failing on the genuine add_knowledge violation (the one MISSING among fifteen templates). After the fixes: 11/11 pass.

  1. add_knowledge.md rewritten action-first (the save_filter/tune_setting shape): an ACTION TAKEN block carries {operation_result} — un-discarding the already-written error formatter — with explicit "Nothing was noted down on this turn" instruction for the error cases and the success voice made conditional.
  2. _format_delegation_action's executed branch now reads execution_result["status"] — mirroring _format_approve_draft — and renders executed_then_failed with the reason verbatim and "do not claim any part of it succeeded." Both request templates carry the matching rule line. A companion test pins that a genuinely completed execution keeps its success instruction (no over-reach). Fixed despite being dormant for the Tier-1 capabilities, per CR §5.4: the dormancy rests on CR-2026-197's per_action_only flag, which that CR's own completion note records as slice-scoped, not permanent.
  3. remember_about_me.md's preamble no longer asserts the substrate acted — it now says the PERSONAL FACT block "reports what the substrate did on this turn — including when it could not act"; the per-action shapes survive unchanged (pinned by test).
  4. general_conversation.md now states no engine operation ran and forbids claiming otherwise — closing B-82 as member 4 of this class.

Step 4 — the persona rule, recorded as insufficient

Added to the NEVER list: "Never claim to have performed an action the system did not report performing…"and recorded per CR §10.3 as necessary, not sufficient: a persona rule is an instruction the model is asked to honour, the weakest guarantee available. The structural fix (Step 2) is what holds.

The §6 wrinkle — how these tests catch a differently-worded false claim

The tests do not assert the absence of a word in a model reply (which a silent reply passes trivially, and which any rewording escapes). They assert the presence of the corrective instruction in the channel we control — the formatter output and the assembled instruction — plus the structural impossibility of that instruction being discarded. The model's wording can vary; what it is told cannot. The wording level itself is covered only by the persona rule, which is why the CR records that rule as the weakest layer.

Step 5 — evidence

Full suite 3640 passed (+11 new), 68 skipped, 0 failed (8m37s). Ruff clean. Mypy 0 new over baseline. Adjacent suites (Phase 45 delegation, CR-2026-197, prompt assembly) explicitly re-run green.

Seed-mutability impact

Kind C — checked, no contact. Prompt formatting and template assets; no seed accessor touched or added. A null finding is an entry.

Out-of-scope items encountered, reported not fixed (per CR §7)

The two latent edge smells from the brief stand as reported: commit_project_draft.md has no failure voice with an empty-rendering placeholder (its formatter branch is absent — note: this is NOT caught by Step 2's validator, which enforces formatter⇒placeholder, deliberately not placeholder⇒formatter, to hold the CR's fence), and forget_about_me.md still carries the dead scripted "Done — I've stopped using that."

Awaiting Step 6

Tag cr-2026-199-truthful-replies. Push. Watch the CI run and report its result.


DUNIN7 — Done In Seven LLC — Miami, Florida CR-2026-199 — Checkpoint A — v0.1 — 2026-08-10 The model's wording can vary; what it is told cannot.