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]`*.