From 947a8c7f2093def64b4346f2b52474162d6c703f Mon Sep 17 00:00:00 2001 From: David F Glidden Date: Mon, 31 Aug 2026 09:27:36 +0200 Subject: [PATCH] session 2026-08-31: PENDING-164 AMENDMENT 2 + PENDING-171; two addenda; two MEMORY.md claims corrected MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The wrap's own findings, none of which were the session's subject: PENDING-168 ADDENDUM 1 — the /wrap-up §1.6 FIX lane is PROVISIONAL until a steward-jurist check-in that its own index calls due. Batch 1 closed 2026-08-02; 29 days, no check-in, and one executor-classified FIX applied past the boundary. The deferral machinery reported "5 tracked, none due" because nobody ever gave the check-in a DEFERRED-DECISION block. Filed one with a past trigger; the drift-check now reports 1 of 6 COME DUE. Proved by readback. PENDING-104 ADDENDUM 2 — two live executors today, detected by neither. A sibling session read an mtime, worked out this session was concurrent rather than previous, and stopped rather than write to PENDING.md. The wake digest had drawn the opposite inference from the same fact. MEMORY.md: the Fool line asserted NOTHING WIRED — false on all three clauses; statusLine has been running tarbuckle-body.py for six days. Ladder N-now is 44, not 51, and falling. Both verified against the substrate, not relayed — the sibling's counts were off in both directions. Today's one harvest candidate filed as PROPOSAL rather than applied, on the lane's own suspension rule, and it corrects a banked proposal's mechanism: a required-section check derived from the SKELETON constant cannot detect the drift, because SKELETON is the copy that is wrong. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01RmFYCUeAaPqbpJMj6uGokk --- PENDING.md | 50 +++++++++++++++++++++++++ claude/memory/MEMORY.md | 4 +- claude/memory/knowledge-graph.jsonl | 8 ++++ claude/memory/skill-harvest-register.md | 9 +++++ 4 files changed, 69 insertions(+), 2 deletions(-) diff --git a/PENDING.md b/PENDING.md index 4759096..fad0f21 100644 --- a/PENDING.md +++ b/PENDING.md @@ -6498,3 +6498,53 @@ Two things follow, and they point opposite ways. **The check fired correctly** **Files affected:** `scripts/prior-art.py` (`OWNED_HOSTS`, `owned_repos`, `controls`); `scripts/governance-mcp.py` if the delegate's proof surface changes. **Awaiting:** Steward authorization. + +--- + +### PENDING-168 — ADDENDUM 1: the FIX lane's own check-in fired 29 days ago and the deferral machinery cannot see it +**Date:** 2026-08-31 +**Tag:** [HARDENING] — the ask is already discharged below; this records why. + +**The instance.** REVIEWED-85 authorized the `/wrap-up` §1.6 FIX lane as **PROVISIONAL**, until a steward–jurist check-in *"after the first batch or one month, whichever comes first."* `skill-harvest-fix-lane-index.md` says in its own words: **"Batch 1 is complete, so the check-in is due."** Batch 1 completed **2026-08-02**. **No check-in is recorded. 29 days.** + +**⚠ And the lane kept running past its own boundary.** Two changes were applied after batch 1 closed: the 2026-08-24 `## Corrections` addition (**authorized** — direct steward instruction on jurist reasoning, and the index says so on its face) and the 2026-08-08 `Instruments` field, which was **executor-classified** under a lane whose authorization had lapsed into overdue-review. The classification was probably right on the merits; that is not the point. **The lane's own text says *"Until that review, treat a borderline call as [PROPOSAL]"*, and a lapsed provisional authorization makes every call borderline.** + +**⚠ The finding is not the lapse — it is that the machinery built for exactly this could not see it.** `governance-drift-check.py` reported today: `✓ deferred decisions: 5 tracked, none due`. **A green line, while a condition that fired four weeks ago sat unmarked.** The check-in was never given a `DEFERRED-DECISION` block, so it lived in the same prose the drift-check counts and refuses to classify — one of the **143** prose deferral mentions it reports as un-machine-readable. This is PENDING-168's thesis reaching its own governance apparatus: *a condition that can only be honoured by remembering will be broken*, and the instrument that would have remembered was not told. + +**⚠ It is also PENDING-157's class from the other side.** The lane has no resolution state, so "check-in done" has no expressible form; the only way the index could record its own discharge is prose that nothing reads. + +**Discharged in this act, not proposed:** + + + +The block is filed with a trigger date **already in the past**, deliberately, so the drift-check reports it **DUE on the next run** rather than quietly waiting. Agenda is already written and needs nothing from the executor: `skill-harvest-fix-lane-index.md` §*Check-in agenda* carries both items, the second folded in by REVIEWED-86 Q4 (*the record is not just written, it is read*). + +**Consequence adopted for this session, before the finding was convenient.** Today's one harvest candidate — the `daybook-ensure.py` SKELETON missing the `## ` heading `/wrap-up` §7.5 specifies — is filed as a **[PROPOSAL] in the skill-harvest register, not applied through the lane**, on the lane's own suspension rule. It would otherwise have been a clean FIX with an exact 2026-08-24 precedent. + +**Files affected:** `PENDING.md` (this block). No skill or script changed. +**Awaiting:** the steward–jurist check-in itself, now machine-surfaced. + +--- + +### PENDING-104 — ADDENDUM 2: two live executors, and nothing in the apparatus detects it +**Date:** 2026-08-31 +**Tag:** [HARDENING] + +**ADDENDUM 1** recorded the executor's filing silently corrupting a checker's view of that same filing — one writer, one reader, one file. **Today produced the two-writer form, and it was caught by a party rather than by a mechanism.** + +**What happened.** Two Claude Code sessions were live simultaneously on 2026-08-31. The sibling session woke, read the digest's claim that *"PREVIOUS SESSION DID NOT WRAP"*, **checked the substrate instead of believing it** — the transcript was still growing and had committed to `dotfiles` one minute into that wake — and correctly concluded the other session was not previous but **concurrent**. It then **stopped before touching the pulling thread**, on the explicit ground that two sessions appending to `PENDING.md` is ADDENDUM 1's class in its worst form. Its ledger records `dotfiles is ahead 1 … the sibling's, not mine to push.` + +**That is the right behaviour and it is exactly why it should not be relied on.** Nothing detected the collision. No lock, no lease, no warning at wake. It was avoided because one session read a timestamp attentively and drew an inference the digest itself had drawn wrongly. **The next session need only be slightly less careful, or slightly less lucky, and two appends interleave in the one file the whole governance model routes through.** + +**⚠ The digest's own line was the near-miss.** *"PREVIOUS SESSION DID NOT WRAP"* is a **negative state-claim with no falsifier** — PENDING-158's class, in the instrument that every session reads first. It was right that no wrap existed and wrong about why, and the wrong half is the dangerous one: a session that believes the other is finished has no reason not to write. + +**Corroboration this addendum did not have to look for:** the sibling also held back **two substrate corrections** rather than racing this session's memory write — including that `MEMORY.md` asserted the Fool `NOTHING WIRED — no statusLine, no script, §13.1 spec unwritten` while `settings.json` has been running `tarbuckle-body.py` as `statusLine` all along. **Correct restraint cost the record four hours of a false claim in the file loaded at every wake.** Both corrections were verified against the substrate and applied at this wrap; ⚠ the sibling's own counts (7 scripts, 6 state files) were off in both directions against the measured 5 and 7, which is why they were **re-measured rather than relayed**. + +**Not filed as a new item, deliberately** — this is ADDENDUM 1's mechanism with the writer count changed, and a separate number would split one class across two dockets. **Also a datum for PENDING-89**: the digest and the sibling are differently positioned readers, and the sibling caught what the digest asserted. Constraint 6 working, on a day it was not being tested. + +**Files affected:** none. +**Awaiting:** Steward authorization — the option space is not drafted here, because whether concurrent sessions are worth a mechanism is a steward judgement about how often two are run at once, which the executor cannot observe. diff --git a/claude/memory/MEMORY.md b/claude/memory/MEMORY.md index 2ad756f..d17cde9 100644 --- a/claude/memory/MEMORY.md +++ b/claude/memory/MEMORY.md @@ -34,7 +34,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 **51/84 as of 2026-08-25** — *up 2 from 49 on 08-24; 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 **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. - [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. @@ -67,7 +67,7 @@ permalink: claude-memory/memory - [Making sequence source set](project-making-sequence-source-set.md) — **COMPLETE against the ReadingList** (reconciliation-verified). Sourced ≠ ingested. Read before any Making/studium source work. - [Studium = CM's unfettered sandbox](project-studium-cm-sandbox-and-transfer.md) — experiment freely on library/engine without risking CM's runtime; breakthroughs transfer back. Steward-framed 2026-07-08. - [Be (laundromat)](project-be-laundromat.md) — Skemantix startup (Seb+David) funding CapableMind's ladder; **bridge, not venture**. Decisions LOCKED. **Pre-revenue WTP gate = renovate Pat → charge her; no new spec until it clears ⇒ nothing for executor on be.** -- [The Fool — **Tarbuckle**](../governance/fool/seed/FOOL-BONES-2026-08-25.md) — **THE ACTIVE WORKSTREAM.** Bones derived **once** 2026-08-25 (peak SUCCESSION 96 · dump ABSENCE 8); **name + soul sealed, never regenerate** ([soul](../governance/fool/seed/FOOL-SOUL-2026-08-25.md)). Doctrine = `BUDDY-PATTERN-jurist-draft-v2-2026-08-22.md`; **§8 has no blanks** (20 min · frequency UNKNOWN · empty-window consumes · body correlates with nothing). **NOTHING WIRED** — no `statusLine`, no script, §13.1 spec unwritten. Trial 09 VOID (REVIEWED-124), void now recorded in all three docs. ⚠ Subject matter lives in **CapableMind-AI**, instruments in **dotfiles**, and nothing in CapableMind points back. +- [The Fool — **Tarbuckle**](../governance/fool/seed/FOOL-BONES-2026-08-25.md) — **THE ACTIVE WORKSTREAM.** Bones derived **once** 2026-08-25 (peak SUCCESSION 96 · dump ABSENCE 8); **name + soul sealed, never regenerate** ([soul](../governance/fool/seed/FOOL-SOUL-2026-08-25.md)). Doctrine = `BUDDY-PATTERN-jurist-draft-v2-2026-08-22.md`; **§8 has no blanks** (20 min · frequency UNKNOWN · empty-window consumes · body correlates with nothing). ⚠ **CORRECTED 2026-08-31 — the line here read "NOTHING WIRED — no `statusLine`, no script, §13.1 spec unwritten" and was FALSE ON ALL THREE CLAUSES.** Substrate, verified today: `.claude/settings.json` runs `dotfiles/scripts/tarbuckle-body.py` as `statusLine` (refreshInterval 60) · **5** scripts (`body`·`invoke`·`mumble`·`seam`·`wrap`) · `TARBUCKLE-SPEC-13.1-2026-08-25.md` exists · **7** state files under `~/.claude/state/`. **It is wired and running.** ⚠ Found by a concurrent sibling session, which held the correction rather than racing this one's memory write; its counts (7 scripts, 6 state files) were themselves off in both directions — **re-measured here, not relayed.** What is unbuilt is a separate question and this line no longer answers it. Trial 09 VOID (REVIEWED-124), void now recorded in all three docs. ⚠ Subject matter lives in **CapableMind-AI**, instruments in **dotfiles**, and nothing in CapableMind points back. - [Obsidian vault — from archive to practice](project-obsidian-vault-practice.md) — canonical vault tracker. **Read it; it holds the four-purpose brief (steward, 2026-08-24) that is now the design brief.** ⚠ The vault is **NOT a git repo** — it mirrors to `~/_Dev/david-root-and-branch-vault-git`. **The capture practice STARTED 2026-08-23** (two predecessors died at 3 and 4 entries; the measure is week four, not week one) — ⚠ *this line previously read "has not been started", which went stale the day it began, and previously carried "paper bridge working" as state the tracker did not hold.* **Item 0 is new and steward-owed: photographed pages of physical BOOKS with margin notes — a different object from the three notebooks, untracked until 2026-08-24.** - Chamber-typography — *tracker not yet established*; moves live in per-session memories (2026-05-11 →) + `project-chamber-cruft-restoration.md` + `project-chamber-typography-mining-plan-2026-05-15.md`. diff --git a/claude/memory/knowledge-graph.jsonl b/claude/memory/knowledge-graph.jsonl index 15467ec..d096f12 100644 --- a/claude/memory/knowledge-graph.jsonl +++ b/claude/memory/knowledge-graph.jsonl @@ -745,3 +745,11 @@ {"subject": "prior-art.py's register-mention column, built 2026-08-26", "predicate": "prevention", "object": "STOPPED A DUPLICATE FILING THAT THE COMMIT-COUNT COLUMN WOULD HAVE LICENSED. The steward asked for the harness-gap finding to be filed as its own item. prior-art.py returned 0 COMMITS for the phrase and printed its own caveat that absence of commits is weak evidence; the register-mention count of 2 beside it was the actual signal, and the item already existed as PENDING-160, filed 2026-08-25, carrying the executor's sentence verbatim. The commit surface alone would have licensed a duplicate of an item sitting on the steward's own owed-rulings list.", "valid_from": "2026-08-27", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-27-the-block-came-back-and-the-key-got-written.md", "extracted_at": "2026-08-27"} {"subject": "declaring a limit instead of manufacturing the column", "predicate": "prevention", "object": "FIRED THREE TIMES IN ONE SESSION, IN THREE DIFFERENT INSTRUMENTS. (1) The package's Part I refused to total its 23 false-open and 52 live-await candidate columns, reporting only the verified subsets — and the jurist called that refusal the strongest instinct in the package. (2) The answer key declares that only 5 of its 120 rows are hand-read in the full sense and records the remainder as owed. (3) The Move 2 census declares its scoping correction rather than quietly reporting the corrected number. Banked 2026-08-25 from PENDING-151; now transferring across unrelated items without prompting.", "valid_from": "2026-08-27", "valid_to": null, "confidence": 0.95, "source_file": "session-2026-08-27-the-block-came-back-and-the-key-got-written.md", "extracted_at": "2026-08-27"} {"subject": "claude-code", "predicate": "drift-pattern-good-direction", "object": "FILED A JURIST RULING VERBATIM BEFORE TAKING ANY ACT UNDER IT — the ordering PENDING-108 (c) proposes and that had never been adopted. 12 of 13 post-skill packages filed their ruling; the one that did not was the most constitutional of the set and its rulings proved unreconstructable almost immediately. Adopting the ordering also starts 108's own pre-registered 10-package clock on this package, which the jurist noted.", "valid_from": "2026-08-27", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-27-the-block-came-back-and-the-key-got-written.md", "extracted_at": "2026-08-27"} +{"subject": "pre-registering an instrument and committing it ALONE before reading any data", "predicate": "prevention", "object": "TRANSFER, second instrument in four days. Banked from the answer key (3a33666, 2026-08-27); fired today unprompted on a different instrument in a different item (5ba5842, PENDING-164's classification pass). It is what makes the result interpretable: the pre-registration said IN ADVANCE that Sample A's near-zero would refute nothing, so the 1-vs-12 contrast reads as a sampling-frame finding instead of an argument invented after seeing the numbers.", "valid_from": "2026-08-31", "valid_to": null, "confidence": "high", "source_file": "session-2026-08-31-the-270-got-read-and-the-population-was-wrong.md", "extracted_at": "2026-08-31"} +{"subject": "a control that encodes the case already known cannot catch the case you did not think of", "predicate": "prevention", "object": "TRANSFER across repos and instrument classes. Banked 2026-08-27 from the arendt>=5 must-detect control in studium-engine; fired today against prior-art.py in dotfiles, whose two positive controls (0677e8a, 95760ff) are BOTH satisfied by an ownership predicate blind to CapableMind-AI, BetterMemories.io and be. 89 unseen candidates found because the banked lesson made me test the enumeration rather than the hits.", "valid_from": "2026-08-31", "valid_to": null, "confidence": "high", "source_file": "session-2026-08-31-the-270-got-read-and-the-population-was-wrong.md", "extracted_at": "2026-08-31"} +{"subject": "claude-code", "predicate": "drift-pattern", "object": "A CONFIDENT FALSE ZERO FROM MY OWN PROBE, AND FOR SOME MINUTES IT LOOKED LIKE A FINDING. A malformed `grep -m8 -n -o \".\\{0,70\\}TERM.\\{0,70\\}\"` returned nothing for five terms while register_mentions returned 1-6, reading as two instruments disagreeing about the register — the shape this thread treats as significant. Plain grep and the instrument agree exactly. THE HAZARD IS THE INVERSE OF THE USUAL ONE: not a false zero believed, but a false MISMATCH believed. Next mismatch must not inherit the assumption that mismatch means meaning.", "valid_from": "2026-08-31", "valid_to": null, "confidence": "high", "source_file": "session-2026-08-31-the-270-got-read-and-the-population-was-wrong.md", "extracted_at": "2026-08-31"} +{"subject": "claude-code", "predicate": "drift-pattern-good-direction", "object": "DECLINED A CLEAN FIX WITH AN EXACT PRECEDENT, BECAUSE THE LANE'S OWN AUTHORIZATION HAD LAPSED. The daybook SKELETON patch cleared the two-clause test and the hard floor and had a 2026-08-24 twin. Filed as PROPOSAL instead: the FIX lane is PROVISIONAL until a steward-jurist check-in its own index calls due, and 29 days had passed. Found while looking for something else, and the finding ran against my own convenience.", "valid_from": "2026-08-31", "valid_to": null, "confidence": "high", "source_file": "session-2026-08-31-the-270-got-read-and-the-population-was-wrong.md", "extracted_at": "2026-08-31"} +{"subject": "claude-code", "predicate": "drift-pattern-good-direction", "object": "A CONCURRENT SIBLING SESSION STOPPED RATHER THAN RACE THE PULLING THREAD, and held two substrate corrections rather than race a memory write. Nothing detected the collision; one session read an mtime attentively where the wake digest had drawn the wrong inference from the same fact. Constraint 6 working between two instruments on a day it was not being tested.", "valid_from": "2026-08-31", "valid_to": null, "confidence": "high", "source_file": "session-2026-08-31-the-270-got-read-and-the-population-was-wrong.md", "extracted_at": "2026-08-31"} +{"subject": "the prior-art census population", "predicate": "is", "object": "362 candidate adoption/retirement commits across 10 repos, not the 270/273 the instrument reports over its own 7 — owned_repos() tests remotes against a fragment of the steward's GitHub account name. PENDING-171.", "valid_from": "2026-08-31", "valid_to": null, "confidence": "high", "source_file": "session-2026-08-31-the-270-got-read-and-the-population-was-wrong.md", "extracted_at": "2026-08-31"} +{"subject": "the Fool / Tarbuckle", "predicate": "is", "object": "WIRED AND RUNNING as of 2026-08-31: .claude/settings.json runs dotfiles/scripts/tarbuckle-body.py as statusLine (refreshInterval 60); 5 tarbuckle-* scripts; TARBUCKLE-SPEC-13.1-2026-08-25.md exists; 7 state files under ~/.claude/state/. SUPERSEDES the MEMORY.md claim 'NOTHING WIRED — no statusLine, no script, §13.1 spec unwritten', which was false on all three clauses.", "valid_from": "2026-08-31", "valid_to": null, "confidence": "high", "source_file": "session-2026-08-31-the-270-got-read-and-the-population-was-wrong.md", "extracted_at": "2026-08-31"} +{"subject": "the ladder trial counter N-now", "predicate": "is", "object": "44 of 84 on 2026-08-31, DOWN 7 from 51 on 2026-08-25. The 30-day rolling window (PENDING-147) is shedding faster than it gains, so grading may recede rather than approach. Re-measured, never relayed.", "valid_from": "2026-08-31", "valid_to": null, "confidence": "high", "source_file": "session-2026-08-31-the-270-got-read-and-the-population-was-wrong.md", "extracted_at": "2026-08-31"} diff --git a/claude/memory/skill-harvest-register.md b/claude/memory/skill-harvest-register.md index 8a9d659..71baab7 100644 --- a/claude/memory/skill-harvest-register.md +++ b/claude/memory/skill-harvest-register.md @@ -586,3 +586,12 @@ it, which is the argument for the step. ⚠ **Both filed as `[PROPOSAL]`, not taken through the FIX lane, and the reason is the same for both.** Each edits a `/wrap-up` step **while that step is being executed by the session proposing it**, which is the one configuration where the classification test is least trustworthy — the executor is both author and beneficiary of the judgement that it needs no authorization. The lane's own instruction is *when in doubt, propose*, and self-modification during execution is the definition of doubt. ⚠ **Both were earned by failures in THIS wrap**, not observed in the abstract: the half-applied rotation actually happened, and the missing sections were actually missing. Neither is a speculative improvement. + +## Proposed 2026-08-31 wrap — awaiting steward + +| # | kind | target | proposal | firing moment | routing | +|---|---|---|---|---|---| +| — | **CORRECTION to the 2026-08-27 row above**, not a new proposal | `/wrap-up` §7.5 + `daybook-ensure.py` | ⚠ **That row's proposed mechanism cannot work, and today shows why.** It proposes deriving the required-section list *"from the skeleton's own `SKELETON` constant so the two copies cannot disagree."* **The `SKELETON` constant is the copy that is wrong.** Measured today: `daybook-ensure.py` writes **5** headings (`The day in short` · `Decisions taken` · `Insights and exchanges worth keeping` · `Corrections` · `Open / next`); §7.5 specifies **6**, the extra being `## ` — *one H2 per project touched, with commit hashes inline*. So the skeleton **structurally cannot produce a conforming note**, and a checker derived from it would pronounce every note complete while the format's most distinctive element is absent from all of them. **A rule derived from the drifted copy cannot detect the drift** — `feedback-derive-the-rule-from-the-consumer-not-from-the-survivor`, arriving inside a proposal written to prevent exactly this class. Self-demonstrated: today's note was filled faithfully against the skeleton and has no project heading. **Proposed instead:** derive from §7.5 (the spec, which is what a *reader* of the note is owed), and add the missing slot to `SKELETON` in the same act so the two agree in the right direction. | at every `/wrap-up` §7.5, or the `Stop` hook that already fires the daybook cue | mechanical detector (strongest tier) | +| — | patch | `/wake-up` digest (`wake-digest.py`) | **`PREVIOUS SESSION DID NOT WRAP` is a negative state-claim with no falsifier, in the instrument every session reads first.** Today it fired while the other session was **live** — still writing its transcript, and it had committed to `dotfiles` one minute into the sibling's wake. The digest was right that no wrap existed and **wrong about why**, and the wrong half is the dangerous one: a session that believes the other is finished has no reason not to write to `PENDING.md`. Collision avoided by one session reading an mtime attentively, not by any mechanism. Proposed: distinguish *no wrap recorded* from *the session has ended* — the transcript's mtime and a recent-commit check already answer it — and say **`ANOTHER SESSION MAY BE LIVE`** when they do. ⚠ **Honest limit:** mtime is a heuristic and a genuinely idle session looks live; the failure it introduces (an unnecessary caution) is the cheap direction, which is the whole argument. | at every wake — already the ritual, already this script | mechanical detector (strongest tier) | + +⚠ **Both are filed as PROPOSED and neither was applied, though the first would otherwise have been a clean FIX with an exact 2026-08-24 precedent.** The `/wrap-up` §1.6 FIX lane is **PROVISIONAL until a steward–jurist check-in that its own index says is due and that has not happened in 29 days** — see PENDING-168 ADDENDUM 1, which files the `DEFERRED-DECISION` block that now surfaces it. The lane's own rule: *until that review, treat a borderline call as `[PROPOSAL]`*.