From c150bdff17c7c6698b76fd4b5df1c0f17c3cba0a Mon Sep 17 00:00:00 2001 From: David F Glidden Date: Fri, 4 Sep 2026 10:22:23 +0200 Subject: [PATCH] [HARDENING] The mumble discriminator fails its own must-detect gate; repairs stopped at the gate (PENDING-179) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 2026-09-03 repair plan rested on one claim: that human_turns() is an existing, controlled discriminator, and wiring it into four transcript consumer sites was plumbing rather than classifier-building. Tested against ground truth taken from the fool's own prompt text — not from the function under test — the claim is false. 24 known mumbles, 41 known non-mumbles, out of 65 transcripts: must-detect 22/24 two mumbles read as human-attended must-not-flag 35/41 and one "failure" is correct — b7e7eb39 is the unattended session of 2026-08-31, which genuinely has no human turn human_turns() == 0 never meant "mumble". It means "nobody spoke", which is equally true of an unattended real session. A mumble embeds the previous session's text and so inherits its slash-command markers; it is excluded only when the session it quoted happened to contain one. The two leaks are exactly the two marker-free mumbles. Coincidence, not design. No repair was made at any site, and no replacement discriminator was built. Three controls passed and a fourth broke: all three test the question the function was built for, none could see the question it was being reused for. A successor written now inherits whatever made the first set look sufficient. Also here, per the 2026-09-03 handover: - step 0 preservation ran: 76 transcripts, read-back PASS, 11 of them already pruned at source and surviving only in the archive - gate 2b: the composition claim in PENDING-178 stands (11 mumbles, ~a fifth, on 08-31). Two terms do not close and are reported as an open disagreement, not a correction — the reconstruction is a demonstrated lower bound and -178 enumerated live - gate 2c: five sites in four files; -178's [HARDENING] scope holds - MEMORY.md record-only arithmetic correction: N-now 44 -> 65 measured, composition 41 real + 24 mumble added, direction reversed (it is rising, not shedding), stale :331 pointer corrected to :513 Filed as an item rather than a PENDING-178 addendum on PENDING-145's mechanism: a ruling claims a number, so an addendum would be suppressed the moment -178 is ruled. The undecided filing moratorium is disclosed inside the item. governance-drift-check.py:513 excluded on receipt and not examined. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01X3L79vgAnt1x2kxvf23Qt7 --- PENDING.md | 37 ++++++ claude/governance/thread-query-log.jsonl | 1 + claude/memory/MEMORY.md | 2 +- claude/memory/session-ledger-2026-09-03.md | 128 +++++++++++++++++++++ 4 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 claude/memory/session-ledger-2026-09-03.md diff --git a/PENDING.md b/PENDING.md index c1ebb07..6fa81a1 100644 --- a/PENDING.md +++ b/PENDING.md @@ -6914,3 +6914,40 @@ That is a separate decidable unit; merging it here would reproduce the CLASS E d **Files affected:** `scripts/governance-drift-check.py` (`TRANSCRIPTS`, `trigger_fired`); whichever surface a monotonic counter is written from under (d). **Awaiting:** Steward authorization. + +--- +## PENDING-179 — `human_turns()` is not a mumble discriminator: it detects slash-command markers, and the four sites were about to be repaired with it +**Date:** 2026-09-03 +**Tag:** [HARDENING] +**Summary:** The repair plan inherited from 2026-09-03 ADDENDUM 1 rests on one claim — *"the discriminator already exists and is controlled, `wake-digest.py:932 human_turns()`; this is wiring a tested function into four call sites, not building a classifier."* **That claim is false.** Run as a must-detect gate against ground truth taken from Tarbuckle's own prompt text rather than from the function under test, `human_turns()` misclassifies in **both** directions. The repair was gated on this check and did not proceed. + +**Filed as an item, not as `PENDING-178 ADDENDUM 1`, for the reason PENDING-145 documents.** These returns are expected to become -178's conditions for reconsideration. `ruled_pendings` claims a *number*, so the moment -178 is ruled DEFERRED every record under that number is suppressed on arrival — the demonstrated PENDING-131 ADDENDUM 4 case. An addendum here would be invisible exactly when it is needed. ⚠ **The parent relation is therefore carried in prose and not by numbering: this item is -178's evidence, and disposing of -178 without it would dispose of the reason.** ⚠ **The new-item moratorium is proposed and undecided.** This filing is instructed by the 2026-09-03 handover, not executor initiative; the 2026-09-03 wrap declined to file a related finding precisely to avoid the executor voting on its own moratorium, and that reasoning is not disturbed here. If the steward would rather this were an addendum, it converts cheaply. + +**GATE 2a — FAIL in both directions.** Ground truth: a transcript is a mumble iff its first `user` record begins with a Tarbuckle generation prompt. That predicate is written by `tarbuckle-*.py`, not by the discriminator, so it is independent of what is being tested. Over all 65 transcripts in `~/.claude/projects/-Users-davidglidden` on 2026-09-03: **24 known mumbles, 41 known non-mumbles.** + · **must-detect: 22 of 24.** Two known mumbles return `human_turns == 1` and read as human-attended. + · **must-not-flag: 35 of 41.** Six known non-mumbles return `0`. ⚠ **At least one of these is CORRECT and that is the deeper point:** `b7e7eb39` is the unattended executor session of 2026-08-31 (PENDING-172), which genuinely has no human turn. `human_turns == 0` means *"no human spoke"*, which is true of mumbles **and** of unattended real sessions. It was never a mumble predicate and does not become one by being used as one. + +**The mechanism, confirmed exactly rather than inferred.** `human_turns()` skips any `user` record containing one of seven `NONHUMAN` markers (``, ` 0`, `real human turn -> 1`, `unreadable -> None`) and a fourth broke. All three were written against the question the function was *for*; none could see the question it was being *reused* for. A replacement discriminator written under the momentum of that break would inherit whatever made the first set look sufficient. Per the handover, sites 2-4 are gated shut and stay shut. + +**GATE 2b — the composition claim STANDS; two terms do not close, and the disagreement is reported rather than resolved.** Reconstructed from `~/_Dev/claude-transcript-archive` (76 files) by the same ground-truth signature: + · **2026-08-31: N=52, real=41, mumble=11 — 21.2%.** The mumble term and the *"roughly a fifth"* proportion close exactly against -178 as filed. + · **2026-09-01: N=50 = 39 real + 11 mumble**, against -178's enumerated **54 = 43 + 11**. The mumble term is identical; the whole 4-file gap sits in the real-session term. + · ⚠ **The gap is not asserted against -178.** My reconstruction models the harness prune as a 30-day window over `source_mtime` and is a **lower bound**: preservation has run **twice only** (2026-08-26, 2026-09-03), so anything created and pruned between runs is invisible to it. -178 enumerated live on the day. **Where they disagree, -178's method is the better-positioned one and this item does not overturn it.** + · **Contradicted, and this is the record-only correction:** `MEMORY.md` carried **"N-now 44/84 as of 2026-08-31, DOWN 7 from 51 on 08-25"**. 44 is below the lower bound for that date (52) and the 08-25 figure sits below the archive's floor. **Measured live 2026-09-03: N=65 = 41 real + 24 mumble (36.9%).** The index has been corrected to the measured figure only. + +**GATE 2c — five sites in four files; -178's `[HARDENING]` scope HOLDS.** Census run with its controls named before execution (three must-find consumers, one must-not-find noise term). Files that *enumerate* the directory: `governance-drift-check.py` (426, 513) · `wake-digest.py` (354, and the selftest sample) · `tarbuckle-invoke.py` (37, 44) · `preserve-transcripts.py` (45, 126, 172). **No additional consumers found.** The other fool surfaces are not consumers: `tarbuckle-wrap.py` and `tarbuckle-seam.py` receive `transcript_path` from the hook payload and never list the directory. + +**⚠ WHAT THE CENSUS CANNOT SEE — stated as output, not as a caveat.** It is blind to (i) a consumer that builds the path by component join *and* never enumerates `*.jsonl` on a matching line — **demonstrated, not hypothesised: `wake-digest.py` builds `os.path.join(HOME, ".claude", "projects", …)` and escaped a literal-fragment grep over the whole fleet**; (ii) any consumer reaching the population through a hook-supplied `transcript_path`; (iii) anything outside the swept roots. **(i) is PENDING-171's predicate class at a further site, and it applies retroactively to the four-site census in the 2026-09-03 ADDENDUM 1, which was grep-derived by exactly the method shown here to be blind.** The site list should be read as *at least* these, never as *these and no others*. + +**Options:** +- **(a) Nothing.** Leave `human_turns()` in place at its one correct site and abandon the reuse. The four sites keep counting mumbles as sessions. +- **(b) A shape predicate at each site** — first `user` record begins with a fool prompt. This is what ground truth used here, so it is known to work today; its predicate is the fool's own prompt text, which drifts, and it is -178 option (b) at four sites instead of one. +- **(c) Have the fool mark its own transcripts** — an explicit field written at generation, so the discriminator stops inferring from content. Touches the fool's wiring on behalf of governance instruments (the PENDING-152 coupling), but it is the only option where the signal is *declared* rather than *recovered*. +- **(d) -178 option (d): a monotonic counter maintained by wake/wrap.** Fixes unit and window together for the counting site; does **not** by itself fix `previous_transcript`, the selftest sample, or `newest_transcript()`, which need a per-transcript predicate regardless. + +**Recommendation: (c) for the predicate, and it does not substitute for -178's own ruling.** (b) is available immediately and is what any repair would use in the interim; (c) is the durable form because a mumble that must announce itself cannot be misread by a marker coincidence. ⚠ **Neither is proposed for building now** — the same reasoning that stopped the replacement discriminator applies to its successor: the control set that missed this is the thing to fix first, and that is a design question, not a patch. + +**Files affected:** none changed. `~/dotfiles/scripts/wake-digest.py` (`human_turns`, `previous_transcript`, selftest sample), `~/dotfiles/scripts/tarbuckle-invoke.py` (`newest_transcript`) are the sites a ruling would touch; `governance-drift-check.py:513` is **excluded on receipt** by the handover and was not examined for repair. +**Awaiting:** Steward authorization. ⚠ **Nothing is blocked on this:** step 0 (preservation) ran and the evidence is safe; the repairs are correctly stopped, not stalled. diff --git a/claude/governance/thread-query-log.jsonl b/claude/governance/thread-query-log.jsonl index a0533e2..31564ba 100644 --- a/claude/governance/thread-query-log.jsonl +++ b/claude/governance/thread-query-log.jsonl @@ -6,3 +6,4 @@ {"date": "2026-08-31", "thread": "the 270 uncounted census candidates — decisions that never reached the governance record; prior-art enumeration and register silence", "terms": ["uncounted", "census", "candidates", "decisions", "never", "reached", "governance", "record", "prior-art", "enumeration", "register", "silence"], "candidates": 472, "returned": [{"path": "~/.claude/projects/-Users-davidglidden/memory/session-2026-06-04-evening-whisper-migration-ikb-english-enforcement.md", "date": "2026-06-04", "matched": ["census", "decisions", "never", "governance", "record", "enumeration", "register", "silence"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/session-ledger-2026-04-24.md", "date": "2026-04-24", "matched": ["candidates", "decisions", "reached", "governance", "record", "register", "silence"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/session-ledger-2026-07-19.md", "date": "2026-07-19", "matched": ["census", "candidates", "never", "governance", "record", "enumeration", "register", "silence"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/session-2026-05-17-stage-d-matrix-three-masters-questions-sources-section.md", "date": "2026-05-17", "matched": ["candidates", "decisions", "never", "record", "enumeration", "register", "silence"]}, {"path": "~/Library/Mobile Documents/iCloud~md~obsidian/Documents/David, root-and-branch/08. Notes/Children/01. Lune/The necessary distance.md", "date": "2025-07-30", "matched": ["never", "reached", "record", "silence"]}]} {"date": "2026-09-01", "thread": "the 322 unread prior-art census candidates: which mechanism decisions never reached the governance register, and what criterion decides which SHOULD have", "terms": ["unread", "prior-art", "census", "candidates", "mechanism", "decisions", "never", "reached", "governance", "register", "criterion", "decides", "should"], "candidates": 503, "returned": [{"path": "~/.claude/projects/-Users-davidglidden/memory/session-ledger-2026-04-18.md", "date": "2026-04-18", "matched": ["candidates", "mechanism", "decisions", "never", "governance", "register", "should"]}, {"path": "~/Library/Mobile Documents/iCloud~md~obsidian/Documents/David, root-and-branch/06. Projects/Cabaret/Cabaret Project — Founding Document.md", "date": "2026-04-04", "matched": ["candidates", "mechanism", "decisions", "never", "governance", "register", "decides", "should"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/session-ledger-2026-06-05.md", "date": "2026-06-05", "matched": ["unread", "census", "mechanism", "decisions", "never", "governance", "register"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/session-2026-06-06-evening-arc-renderings-imprint-be-laundromat.md", "date": "2026-06-06", "matched": ["census", "candidates", "mechanism", "decisions", "never", "register", "criterion", "should"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/session-ledger-2026-04-27.md", "date": "2026-04-27", "matched": ["candidates", "mechanism", "decisions", "never", "register", "criterion", "should"]}]} {"date": "2026-09-02", "thread": "the fr cell's last two steps — PENDING-134 disclosure and ratio_A_to_B re-derived once, stratum amendments", "terms": ["cell's", "last", "steps", "pending", "disclosure", "ratio", "re-derived", "once", "stratum", "amendments"], "candidates": 404, "returned": [{"path": "~/.claude/projects/-Users-davidglidden/memory/diary-export-2026-05-05.md", "date": "2026-05-05", "matched": ["last", "steps", "pending", "ratio", "once", "amendments"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/session-2026-05-23-l1-co-author-territory-survey-and-attention-metaphor.md", "date": "2026-05-23", "matched": ["last", "pending", "ratio", "once", "amendments"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/project-bio-rewrite-pending-multilanguage-spec.md", "date": "2026-06-06", "matched": ["last", "pending", "disclosure", "ratio", "once"]}, {"path": "~/Library/Mobile Documents/iCloud~md~obsidian/Documents/David, root-and-branch/08. Notes/Claudia Grice/03 Benefits & Pensions/CPP-OAS.md", "date": "2025-05-01", "matched": ["last", "pending", "once"]}, {"path": "~/Library/Mobile Documents/iCloud~md~obsidian/Documents/David, root-and-branch/08. Notes/Notebook Preservation & Archiving.md", "date": "2025-08-27", "matched": ["last", "ratio", "once"]}]} +{"date": "2026-09-03", "thread": "the fr cell's last two steps: PENDING-134 disclosure then ratio_A_to_B re-derived once; wake and wrap tool reliability; transcript directory as proxy for a session", "terms": ["cell's", "last", "steps", "pending", "disclosure", "ratio", "re-derived", "once", "wake", "wrap", "tool", "reliability", "transcript", "directory", "proxy", "session"], "candidates": 696, "returned": [{"path": "~/.claude/projects/-Users-davidglidden/memory/session-ledger-2026-04-27.md", "date": "2026-04-27", "matched": ["steps", "pending", "ratio", "once", "wake", "wrap", "tool", "transcript", "session"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/session-2026-05-23-l1-co-author-territory-survey-and-attention-metaphor.md", "date": "2026-05-23", "matched": ["last", "pending", "ratio", "once", "wake", "wrap", "tool", "reliability", "directory", "session"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/session-2026-06-06-seb-reply-arc-mindfabric-rootcause-basic-memory-trial.md", "date": "2026-06-06", "matched": ["last", "pending", "ratio", "wake", "wrap", "tool", "reliability", "proxy", "session"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/session-2026-04-30-arc-publications-and-mempalace-mps-pause.md", "date": "2026-04-30", "matched": ["last", "steps", "pending", "disclosure", "ratio", "once", "wrap", "tool", "reliability", "transcript", "directory", "session"]}, {"path": "~/.claude/projects/-Users-davidglidden/memory/diary-export-2026-05-05.md", "date": "2026-05-05", "matched": ["last", "steps", "pending", "ratio", "once", "wake", "wrap", "tool", "session"]}]} diff --git a/claude/memory/MEMORY.md b/claude/memory/MEMORY.md index 3df0858..647883c 100644 --- a/claude/memory/MEMORY.md +++ b/claude/memory/MEMORY.md @@ -35,7 +35,7 @@ permalink: claude-memory/memory **Loud trigger — pointer suffices** - [Chamber work: ground in constitution + charter + runbook FIRST](feedback-chamber-work-ground-in-constitution-charter-runbook.md) — **any chamber work *or talk about it*** begins there (incl. `reanchor:`). Repo CLAUDE.mds are pointers, not state; corpus claims come from a self-tested tool, never a hand grep. - [Governance files are dotfiles symlinks](reference-governance-files-are-dotfiles-symlinks.md) — Edit/Write refuse to write through a symlink, so **edit the real `~/dotfiles/…` path** when appending — **`PENDING`/`REVIEWED` only.** ⚠ That refusal is a tool artifact, **not** a permission check, and this note is the documented route past the only friction guarding the constitution (PENDING-107). **`~/CLAUDE.md`/`~/REVIEWED.md`/L2 = `[ESCALATE]`, steward's hand — a jurist sign-off does not authorize one.** -- [Verification ladder](reference-verification-ladder.md) — the named instruments; reach for the gate the claim's shape demands instead of re-deriving one. ⚠ **FROZEN — REVIEWED-123 (2026-08-17): no additions, rewordings, removals or reorderings, from ANY source, whatever its authorization**, until the trial is graded (N-now **44/84 as of 2026-08-31** — *DOWN 7 from 51 on 08-25, and the direction is the point: the window is shedding faster than it gains, so grading may RECEDE rather than approach; the counter is a 30-day ROLLING WINDOW per PENDING-147, so it rises and falls as transcripts age in and out. Re-measure, never relay: `len(glob('~/.claude/projects/-Users-davidglidden/*.jsonl'))`, the trial's own method at `governance-drift-check.py:331`*). Entries earned meanwhile queue in **PENDING-141's owed-entries list** (4 rows). Reading it is unaffected — that is the point of the freeze. +- [Verification ladder](reference-verification-ladder.md) — the named instruments; reach for the gate the claim's shape demands instead of re-deriving one. ⚠ **FROZEN — REVIEWED-123 (2026-08-17): no additions, rewordings, removals or reorderings, from ANY source, whatever its authorization**, until the trial is graded (N-now **65/84, measured 2026-09-03** — *and the direction has REVERSED: 52 on 08-31, 65 today, **rising fast and rising for the wrong reason**. Composition, measured the same day by the fool's own prompt signature: **41 real + 24 mumble (36.9%)**. The earlier reading here — 44/84, "DOWN 7 from 51", "shedding faster than it gains" — was **wrong in the number and backwards in the direction**; corrected 2026-09-03 as a record-only arithmetic fix (PENDING-179 gate 2b). The counter is still a 30-day ROLLING WINDOW per PENDING-147, so it can fall; it is not falling now. ⚠ **Report the COMPOSITION with the count** — a bare 65 reads as 65 sessions and roughly a third is machine chatter (PENDING-178). Re-measure, never relay: `len(glob('~/.claude/projects/-Users-davidglidden/*.jsonl'))`, the trial's own method at `governance-drift-check.py:513`*). Entries earned meanwhile queue in **PENDING-141's owed-entries list** (4 rows). Reading it is unaffected — that is the point of the freeze. - [Skill-harvest register](skill-harvest-register.md) — canonical home for proposed skills (governed analog of PENDING.md for tooling); `/wrap-up` §1.6 proposes, steward authorizes. **Rebuilt 2026-08-07** from the archive: **154 live proposals**, grouped by kind, each with an exact `archive:L###` pointer. ⚠ The 2026-08-01 compaction was *lossless but illegible* (55 scraped header rows, 95% of cells cut mid-word) — the count it advertised, 177, was never the number. ⚠ **THE STROKE-2 BATCH IS AUTHORIZED BUT SHOULD NOT BE EXECUTED YET — PENDING-141.** 41 rows stamped `S2` are authorized (2026-07-19, execution not a ruling) and 22 are `S2?` (unsettled). **BUT appending them triples the ladder from 20 entries WHILE a pre-registered trial is measuring whether the ladder is reached** (baseline 14%, graded at 84 transcripts). Ladder size is an uncontrolled variable in that design, so executing the authorized batch would confound the only check behind REVIEWED-95's causal claim. **⚖ RULED — REVIEWED-123 (2026-08-17): AUTHORIZED (a) HOLD, on six conditions, and the freeze is GENERAL rather than S2-specific.** Grading does NOT authorize the append — the batch returns for a *ruling*. Report **N-now at every wake** until lifted; 30-day review is a live `DEFERRED-DECISION`. ⚠ Filing new proposals now requires a **declared firing moment** (`/wrap-up` §1.6); one that cannot name it is documentation and must say so. - [Copy-paste-clean governance drafts](feedback-governance-drafting-copy-paste-clean.md) — draft PENDING/REVIEWED blocks as plain fenced markdown; display formatting leaks into the placed record. - [Verify-before-compose hook](feedback-verify-before-compose-hook.md) — chamber constitutional writes are BLOCKED without `` + verbatim Grounding. Don't fight the block. diff --git a/claude/memory/session-ledger-2026-09-03.md b/claude/memory/session-ledger-2026-09-03.md new file mode 100644 index 0000000..6ed31f2 --- /dev/null +++ b/claude/memory/session-ledger-2026-09-03.md @@ -0,0 +1,128 @@ +--- +name: Session Ledger 2026-09-03 +description: Practice-of-return ledger maintained by /symmetria — returns, open horizons, recalibrations, authorization moves, sub-agent dialogues, bypasses. +type: feedback +--- + +# Session Ledger — 2026-09-03 + +> ⚠ Note on the file itself: this ledger was ABSENT when the second session of 2026-09-03 woke, +> though a full session had already run and wrapped 2.2 h earlier. Symmetria was not init'd that +> session (or was and did not write). The wrap record used ledger-shaped language ("Instruments: 2 +> run · K = 0") with no ledger behind it. **A ledger that only exists when someone remembers to +> invoke it is not a record of returns; it is a record of invocations.** Kin to PENDING-168. + +## Returns + +- **2026-09-03T~14:0x — INHERITED CLAIM FALSIFIED AT THE WAKE, BY RUNNING IT RATHER THAN RELAYING IT.** + The prior wrap recorded the `wake-digest.py` selftest as failing and predicted it would *"fail on + every run from now on"* (0 of 13 sample transcripts wrapped; all 13 Tarbuckle mumbles). Re-run at + this wake: **5 of 13, SELFTEST PASS.** The prediction was falsified in 2.2 hours. Corrected + statement of the defect: the control's verdict is a **function of the mumble rate in a rolling + 13-transcript window**, so it is *intermittent*, not permanent — a harder failure to notice than + the one recorded, because it will read clean on some runs and dirty on others with no change in + what it is measuring. Return caught by the standing discipline *prove the instrument before + trusting a clean line* — applied here to a DIRTY inherited line, which is the same rule run + backwards and was not obvious. + +- **2026-09-03T~14:0x — measured N-now rather than relaying it.** MEMORY.md carries 44 (2026-08-31); + the prior wrap's addendum carries 52. Actual, by the trial's own method: **65**. Then went one step + past the number the freeze obliges me to report, and censused its composition with the controlled + discriminator (`human_turns`): **31 of 65 are mumbles (48%), 34 real, 0 unreadable.** The bare + count would have been true and useless; the composition is the finding. + + +- **2026-09-03T~15:0x — THE QUERY THAT FOUND NOTHING, AND THE VACUOUS PASS IT PRODUCED.** + Building 2a's ground truth I searched for the Tarbuckle prompt signature `"You are Tarbuckle. + Your character..."` — taken from `tarbuckle-invoke.py`, the file I had just read. It matched + **0 of 65** transcripts, and the gate duly reported **`PASS (0/0)`**. A green light with an + empty denominator. Caught by the standing rule *a null search is evidence about the QUERY*; + opening a transcript showed the real signature is `"You are writing ONE line as Tarbuckle"` — a + DIFFERENT fool surface (`tarbuckle-mumble.py`/`-wrap`/`-seam`, three scripts the inherited site + census never named). ⚠ **The flag that fired is §3's *a search query shaped by what the session + wants to find*.** Had I accepted the pass, I would have reported the discriminator sound and + wired a broken predicate into three more sites. + +- **2026-09-03T~15:1x — FRAME-INHERITANCE, and it is the session's whole finding.** + `human_turns()` carries three passing controls. All three test the question it was built for + ("did an executor run unattended?"). The plan reused it for a different question ("is this a + mumble?") and inherited the controls' authority across that gap. Re-run at the scope of the + extension: **22/24 must-detect, 35/41 must-not-flag — FAIL both ways.** The exclusion works only + when a mumble happens to quote a slash command; the 2 leaks are exactly the 2 marker-free + mumbles. ⚠ **`0` never meant "mumble" — it means "nobody spoke", which is also true of a + genuinely unattended session (`b7e7eb39`, PENDING-172).** + +## What held [appended] + +- **Stopped at the gate instead of building the replacement.** The handover's instruction and the + reasoning behind it were both honoured: three controls passed and a fourth broke, so the finding + is about the control SET. Writing a successor discriminator now would inherit whatever made the + first set look sufficient. Sites 2-4 stay shut. +- **Ran 2b and 2c anyway**, because 2a's failure does not gate them and they answer different + questions. 2b's composition term closed; 2c's scope held. +- **Did not assert 2b's gap against -178.** My reconstruction disagrees by 4 files and is a + demonstrated lower bound (preservation ran twice only). Reported as an open disagreement with + -178's method named as the better-positioned one, rather than as a correction. +- **Narrowed the census three times and said so.** Repeated narrowing can end by confirming the + five sites it was built around; the negative control and the explicit blind-spot statement are + what keep that honest. + +## Authorization moves [appended] + +- **PENDING-179 FILED** — as an item, not a -178 addendum, on PENDING-145's demonstrated mechanism + (a ruling claims a NUMBER; an addendum under a to-be-ruled number is suppressed on arrival). + ⚠ The undecided moratorium is disclosed inside the item, with yesterday's contrary reasoning + preserved rather than overridden. +- **MEMORY.md record-only arithmetic correction applied** (authorized by the handover, 2b): N-now + 44 -> **65 measured**, composition **41 real + 24 mumble** added, the "shedding faster than it + gains" direction reversed, and the stale `governance-drift-check.py:331` pointer corrected to + `:513` (`:331` is a register-check control, verified by reading both lines). +- **NOT done, deliberately:** no repair at any site; `governance-drift-check.py:513` not examined, + excluded on receipt; no replacement discriminator; nothing committed (the wrap owns that). + + +- Did not answer the inherited literal question at the wake despite it being cheap to answer + (`git log -p` on MEMORY.md). The wake's rule is to hold it open. Held. +- Reported the thread-query null as a null, in one clause, rather than dressing six generic + term-matches as findings. + +## Open horizons + +- **The steward-directed first work:** wire `human_turns()` into the transcript-as-session consumer + sites. Positive control FIRST (yesterday's cost of skipping one: a false loss report within the + hour). `tarbuckle-invoke.py:40` is SUSPECTED, unverified — verify before touching. +- ⚠ **The 84 trigger is ~19 transcripts away and roughly half the counter is chatter.** The ladder + freeze (REVIEWED-123) is measuring against a counter PENDING-178 says is mis-united. Time pressure + is now real and was not when -178 was filed. +- Steward owes: `~/.claude/agents` under version control (before anything else edits it) · the + moratorium decision · `RE_ID` `[FIX]` · PENDING-171/-177/-178/-160/-168 · the §5 regrade. +- Parked worker `acaabadf` — stopped, still carrying `--reply-on-resume`; respawn behaviour not + established. Untouched. + +## Confidence to recalibrate + +- **Verified this session (ran it):** selftest 86→87 passing, 5 of 13 (`--selftest`) · N-now = 65 + (glob, the trial's own method) · mumble census 31/34/0 (`human_turns` over all 65) · dotfiles + local + gitea + github all at `e5db321`, only dirt is this wake's own `thread-query-log.jsonl` + append · governance drift 0 · pointers 407/0/0 · today's ledger absent before now. +- **Inherited, NOT re-verified:** the four-site census in ADDENDUM 1 (grep-derived, read not re-run) + · that `human_turns` is the right discriminator at every site (proven at one) · that + `tarbuckle-invoke.py:40` is affected at all. +- **Post-compression note:** context was cleared deliberately between the two sessions of 2026-09-03. + Everything above marked "inherited" rests on the written record, not on continuity of working + memory. + +## Authorization moves + +- Reaffirmed the prior session's own correction: the fix is **`[FIX]`, not `[PROPOSAL]`** — the + control's label already states its predicate ("a real session reads as WRAPPED end-to-end"), so + restoring that population repairs it against its existing spec. ⚠ Does **not** extend to changing + what the `>=84` trigger *means* — that stays PENDING-178 / REVIEWED-123, steward's. + +## Sub-agent dialogues + +*(none)* + +## Bypasses + +*(none)*