[HARDENING] The mumble discriminator fails its own must-detect gate; repairs stopped at the gate (PENDING-179)

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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3L79vgAnt1x2kxvf23Qt7
This commit is contained in:
David F Glidden
2026-09-04 10:22:23 +02:00
co-authored by Claude Opus 5
parent e5db321d6f
commit c150bdff17
4 changed files with 167 additions and 1 deletions
+37
View File
@@ -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). **Files affected:** `scripts/governance-drift-check.py` (`TRANSCRIPTS`, `trigger_fired`); whichever surface a monotonic counter is written from under (d).
**Awaiting:** Steward authorization. **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 (`<command-name>`, `<local-command-`, `=== WAKE DIGEST`, …). A mumble prompt embeds the *previous session's* material, so it inherits those markers **only when the session it was mumbling about happened to contain a slash command.** Of the 24 known mumbles, 22 embed at least one marker and are excluded; **2 embed none — and those 2 are precisely the 2 that leak.** The correlation is content-dependent coincidence, not design. The function's own docstring says it answers *"did an executor just run unattended?"*; that is what its three controls test, and it does that job correctly.
**⚠ The finding is about the control set, not only the function — which is why no replacement was built in this session.** Three controls passed (`hook-only fixture -> 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.
+1
View File
@@ -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-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-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-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"]}]}
+1 -1
View File
@@ -35,7 +35,7 @@ permalink: claude-memory/memory
**Loud trigger — pointer suffices** **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. - [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.** - [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. - [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. - [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 `<!-- GROUNDED-IN: … -->` + verbatim Grounding. Don't fight the block. - [Verify-before-compose hook](feedback-verify-before-compose-hook.md) — chamber constitutional writes are BLOCKED without `<!-- GROUNDED-IN: … -->` + verbatim Grounding. Don't fight the block.
+128
View File
@@ -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)*