Record a queued ledger request that was lost between a branch and its squash - #1937
Conversation
PR #1930 (squash a544719) merged claude/viewer-ledger-truth-pass at head 9525dd7. The branch added six inbox requests across three commits; the squash contains five. The missing one, faa4299e, came from commit 648b86a, which `git merge-base --is-ancestor 648b86a9525dd7` 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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N496muQbJVbJW8XvkCgKc7
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in:46 minutes Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (3)
Comment |
This pull request has been ignored for the connected project Preview Branches by Supabase. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:7a8d57da01
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Uh oh!
There was an error while loading. Please reload this page.
Immutable review record for claude/ledger-merge-loss-finding at 7a8d57d. Scope is the single inbox request filed by that PR. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N496muQbJVbJW8XvkCgKc7
Uh oh!
There was an error while loading. Please reload this page.
Queues six immutable inbox requests for the work in this PR. Ordinary branches never edit the canonical ledger, so these reconcile after it lands. - done #313: the dirty-tree refusal shipped. Records the two traps only running it surfaced (the trimmed porcelain that silently disabled the guard, and guard-push's explicit --head), and notes the row's related outstanding-issues.mjs vs issues:done confusion is NOT addressed. - update #211: the plan exists, the migration does not, so the row stays open and stays deprioritised. Carries the 2026-08-12 deprioritisation conclusion forward and corrects the count it rested on — 1,445 across 269 files, not 1,266. - cancel 0e47904b: superseded by that update, which is a strict superset of it. Two pending updates on one row force a cancellation decision at reconcile regardless, so this makes the decision explicit rather than leaving it for whoever reconciles. - update #168 and #258: design and gap documentation landed; neither row is closed, because neither asked only for a document. #258's update records that its cheapest-first option is currently unavailable — checked against all three manifests, not assumed. - add: one new P2 recommendation. Two merge-loss detectors now exist and measure different things — this PR's catches a landing whose content was reverted, PR #1937's concerns a file that never landed at all — and neither covers the other's case. Also carries the undecided scheduling question this PR deliberately left open. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Chrn9bTYFFYzrLZqtpVptW
Summary
One queued inbox request, recording an integrity gap found while checking whether an earlier PR had landed cleanly.
A queued request was committed to a branch, that branch merged, and the request is not on
main. Nothing detected it.a544719a) mergedclaude/viewer-ledger-truth-passat head9525dd7b.faa4299e, added by648b86ad.git merge-base --is-ancestor 648b86ad 9525dd7bconfirms that commit was genuinely part of the merged head.mainentirely: not underdocs/outstanding-issues-inbox/, not underapplied/, and its text appears nowhere indocs/outstanding-issues.md.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 — that seemed more useful to whoever picks it up than a guess dressed as a cause.
Why this instance cost nothing, and why that isn't reassuring
The lost request was a finding whose two remedies — guarding
CLAUDE_ENV_FILEin.claude/hooks/session-start.sh, and havingcheckNodeRuntime's message name that hook — shipped in the same pull request and are onmainnow. The record was lost; the work wasn't.A request carrying something not fixed in its own PR would simply have disappeared. That is the whole point of the intake: requests are documented as immutable and merge-safe precisely so a branch cannot silently drop one.
What noticed it: nothing
check:ledger-write-disciplineproves request files are immutable from the merge base, and audits canonical-ledger edits against moved requests. 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 about what work remained.The row proposes a cheap assertion — for a merge, compare inbox filenames added anywhere in the merged range against inbox filenames present in the resulting tree, and fail on any that vanished. Both sides are just filenames.
Deliberately not re-queued under its old UUID
The obvious move was to restore
faa4299everbatim. Two reasons not to:main, so reconciling it would create a row that is already resolved.So this is a new request about the loss, not a restoration of the lost one. The stop rule in the row says the same, so the next person hitting this does not "helpfully" hand-restore a file into the tree.
Verification
npm run verify:pr-localDocs-only scope, so lint, typecheck, the unit suite, build and the RAG fixture scan were skipped by the gate's own risk routing — confirmed with
--dry-runbefore running, not assumed.verify:ui,verify:release,eval:*,check:production-readiness— not applicable; one JSON file, no source changes.Risk and rollout
cancelrequest.Notes
docs/outstanding-issues.mdis drifting.check:outstanding-issuesreports 76 pending requests against 19 applied. The canonical ledger is described as the durable cross-session memory, and three quarters of the pending mutations against it are unapplied. Reconciliation is deliberately serialised, which is right, but at this ratio the rendered ledger is materially behind reality — including the five document-viewer corrections from Queue five ledger corrections: the document-viewer rows say things that are no longer true #1930, which is why#278still reads as open and crop → page overlay still has no row.claude/ledger-merge-loss-finding. The designatedclaude/document-viewer-phase-3-bj5k5vstill holds dead history from Document viewer Phase 3: page virtualization, rail windowing, keyboard reading mode, and the first canvas gate #1772 and cannot be deleted from this session —git push --deleteand the colon refspec are both refused by the transport, the GitHub MCP surface has no branch-delete tool, and the PAT helper is excluded from agent shells by design. It can be deleted from the GitHub UI; nothing on it is needed.Generated by Claude Code