From 7a8d57da01b3221c61c87d2f14ace392ab33fb67 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 14 Aug 2026 08:56:56 +0000 Subject: [PATCH 1/3] issues: record a queued request lost between a branch and its squash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #1930 (squash a544719a) merged claude/viewer-ledger-truth-pass at head 9525dd7b. The branch added six inbox requests across three commits; the squash contains five. The missing one, faa4299e, came from commit 648b86ad, which `git merge-base --is-ancestor 648b86ad 9525dd7b` confirms was part of the merged head. It is absent from main entirely — not pending, not applied, and its text appears nowhere in the canonical ledger. The mechanism is not established and the row says so. A GitHub squash does not drop files on its own, so something happened at merge time; the row records what was verified rather than a theory. This instance cost nothing in substance: the lost request was a finding whose two remedies — guarding CLAUDE_ENV_FILE in the session-start hook, and having checkNodeRuntime name that hook — shipped in the same pull request and are on main now. The record was lost, not the work. A request carrying something not fixed in its own PR would simply have vanished. What makes it worth a row is that nothing noticed. check:ledger-write-discipline proves request files are immutable from the merge base and audits canonical edits against moved requests, but no check asserts that a request committed on a branch still exists after that branch merges. This was found by counting five against six by hand, days later, while answering an unrelated question. Deliberately not re-queued under its old UUID: an immutable record that reappears with new provenance is worse than an absent one, and its content is already delivered. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01N496muQbJVbJW8XvkCgKc7 --- .../4b6930e6-fae2-4b4f-9f90-49bf0bcd548c.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 docs/outstanding-issues-inbox/4b6930e6-fae2-4b4f-9f90-49bf0bcd548c.json diff --git a/docs/outstanding-issues-inbox/4b6930e6-fae2-4b4f-9f90-49bf0bcd548c.json b/docs/outstanding-issues-inbox/4b6930e6-fae2-4b4f-9f90-49bf0bcd548c.json new file mode 100644 index 0000000000..677cce8caa --- /dev/null +++ b/docs/outstanding-issues-inbox/4b6930e6-fae2-4b4f-9f90-49bf0bcd548c.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "id": "4b6930e6-fae2-4b4f-9f90-49bf0bcd548c", + "createdOn": "2026-08-14", + "action": "add", + "payload": { + "pri": "P2", + "type": "issue", + "summary": "A queued inbox request was lost between a PR branch and its squash on main, and nothing detected it", + "detail": "**Outcome:** a request that is committed to a branch either reaches main or fails loudly; 'merge-safe' means the loss is impossible or visible, not merely unlikely. **Detail, verified 2026-08-14.** PR #1930 (squash a544719a) merged branch claude/viewer-ledger-truth-pass at head 9525dd7b. That branch added SIX inbox requests across three commits; the squash on main contains FIVE. The missing one is faa4299e-0a68-4747-9509-e3eb2578b64c, added by commit 648b86ad, and 'git merge-base --is-ancestor 648b86ad 9525dd7b' confirms that commit was genuinely part of the merged head. The file is absent from main entirely: not under docs/outstanding-issues-inbox/, not under applied/, and its text appears nowhere in docs/outstanding-issues.md. Mechanism NOT established — a GitHub squash does not drop files on its own, so something happened at merge time; this row records the verified facts rather than a theory. **Why this instance cost nothing, and why that is not reassuring.** The lost request was a finding whose two remedies — guard CLAUDE_ENV_FILE in .claude/hooks/session-start.sh, and have checkNodeRuntime's failure message name that hook — shipped in the SAME pull request and are on main now. So the record was lost, not the work. A request carrying something not fixed in its own PR would simply have disappeared. **Nothing detected it.** check:ledger-write-discipline audits canonical-ledger edits against moved requests and proves request files are immutable from the merge base; no check asserts that requests committed on a branch are still present after it merges. The loss was found by counting 5 against 6 by hand, days later, while answering an unrelated question. **Next:** consider a cheap post-merge assertion — for a merge commit, compare inbox files added anywhere in the merged range against inbox files present in the resulting tree, and fail on any that vanished. Cheap because both sides are just filenames. Alternatively have reconcile report UUIDs referenced in git history but absent from the tree. **Stop:** do not respond by making request files editable or by hand-restoring a lost file into the tree under its old UUID — an immutable record that reappears with a new provenance is worse than an absent one. Queue a fresh request instead, as was done here.", + "source": "session 2026-08-14; PR #1930 squash a544719a vs branch head 9525dd7b; commit 648b86ad" + } +} From f0e0f51171bf78a9809b2cd968d2fb6eb535aa72 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 14 Aug 2026 09:01:46 +0000 Subject: [PATCH 2/3] ledger: record the branch review for PR #1937 Immutable review record for claude/ledger-merge-loss-finding at 7a8d57da. Scope is the single inbox request filed by that PR. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01N496muQbJVbJW8XvkCgKc7 --- ...3f0e2eaf267dfa37b8b633ddae861b6ef0033aebb4e5867f4b4.record.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/branch-review-records/1703bcf7a46123f0e2eaf267dfa37b8b633ddae861b6ef0033aebb4e5867f4b4.record.md diff --git a/docs/branch-review-records/1703bcf7a46123f0e2eaf267dfa37b8b633ddae861b6ef0033aebb4e5867f4b4.record.md b/docs/branch-review-records/1703bcf7a46123f0e2eaf267dfa37b8b633ddae861b6ef0033aebb4e5867f4b4.record.md new file mode 100644 index 0000000000..83fbf2b77b --- /dev/null +++ b/docs/branch-review-records/1703bcf7a46123f0e2eaf267dfa37b8b633ddae861b6ef0033aebb4e5867f4b4.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/ledger-merge-loss-finding | 7a8d57da01b3221c61c87d2f14ace392ab33fb67 | ledger merge-loss finding | PR #1937 — one immutable inbox request (P2 issue) recording that a queued outstanding-issues request was created on a branch and never reached main through that branch's squash. Verified before writing: the request's own remedies had already shipped on main independently (hook guards CLAUDE_ENV_FILE; check:runtime names the hook), so the request was NOT re-queued verbatim — a re-queue would have opened an already-resolved row. The row filed instead is about the undetected loss itself. Docs-only; no source changes. | npm run verify:pr-local — failed: (none), 11 checks completed; ledger inbox check passed: 76 pending request(s), 19 applied | From 63542e569920b7f777ae0eb2ed847871fd8a620c Mon Sep 17 00:00:00 2001 From: BigSimmo <87357024+BigSimmo@users.noreply.github.com> Date: Fri, 14 Aug 2026 17:54:37 +0800 Subject: [PATCH 3/3] issues: cancel false squash-loss finding --- .../63419f06-c12a-4a84-a684-6e177f527365.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 docs/outstanding-issues-inbox/63419f06-c12a-4a84-a684-6e177f527365.json diff --git a/docs/outstanding-issues-inbox/63419f06-c12a-4a84-a684-6e177f527365.json b/docs/outstanding-issues-inbox/63419f06-c12a-4a84-a684-6e177f527365.json new file mode 100644 index 0000000000..4142a352a1 --- /dev/null +++ b/docs/outstanding-issues-inbox/63419f06-c12a-4a84-a684-6e177f527365.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "63419f06-c12a-4a84-a684-6e177f527365", + "createdOn": "2026-08-14", + "action": "cancel", + "payload": { + "requestId": "4b6930e6-fae2-4b4f-9f90-49bf0bcd548c", + "reason": "The final PR #1930 head deliberately removed the resolved queued runtime request during review-and-fix. Comparing all historical additions with the squash therefore creates a false loss. Any future integrity proof must compare the final PR-head inbox tree with the squash tree." + } +}