docs(issues): capture the H5a residual and the ledger id-scheme test gap - #2080
Conversation
Two immutable inbox requests from the packet G1 session (PR #2053, merged), applied by a later `npm run issues:reconcile`. - P3 issue — G1 closed the legibility half of the H5a residual: the fabricated `similarity: 1` on document-summary rows is now tagged `document_context` and no longer indistinguishable from a perfect cosine. The governance question underneath it was deferred, not answered: may a score nobody measured contribute to the confidence label a clinician reads? Because G1 also closes the paired question row `#J912J9`, that knowledge would otherwise survive only in `docs/clinical-hazard-analysis.md` and drop out of the queue anyone reads. - P3 rec — `issueRowFingerprint` was broken for every Crockford-id row from the ULID migration until PR #2053, making `issues:done`/`issues:update` unusable for any row minted in that window. The bug is fixed; what is captured here is why it survived. The ledger writer's self-tests and fixtures use legacy `#5`-style ids almost throughout, so nothing ever drove a Crockford id through that path. Includes the adjacent trap: Crockford's alphabet contains 0-9, so a display locator can be entirely digits and is indistinguishable from a legacy id by pattern. Both rows record the next action rather than only the finding. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHxUr5eyRwrBiXKMoqoARq
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHxUr5eyRwrBiXKMoqoARq
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This pull request has been ignored for the connected project Preview Branches by Supabase. |
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in:20 minutes Limit details: You’ve used all 1 included review currently available under your plan. You completed 100 included PR reviews in the past 7 days; at that activity level, included reviews refill at 1 review per hour. 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 |
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Uh oh!
There was an error while loading. Please reload this page.
Summary
Two immutable outstanding-issues inbox requests from the packet G1 session (PR #2053, merged). No product code, no canonical-ledger edit —
npm run issues:reconcileapplies them later from a serialized ledger branch.similarity: 1on document-summary rows is now taggeddocument_context, so it is no longer indistinguishable from a perfect cosine at any surface that reads a row. The governance question underneath was deferred, not answered — may a score nobody measured contribute to the confidence label a clinician reads? Because G1 also closes the paired question row#J912J9, that knowledge would otherwise survive only indocs/clinical-hazard-analysis.mdand drop out of the queue anyone actually reads. The row records that no action is required unless a measured signal appears, and that the tag is what makes a future gate cheap.issueRowFingerprintmatched only/^#(\d+)$/and keyed onentry.number, which isnullon ULID-backed rows, soissues:doneandissues:updatewere unusable for every row minted since that migration — failing with "#J912J9is not in Open items" about a row plainly in Open items. Fixed in PR feat(rag): tag document-summary rows with a document_context provenance origin #2053; what is captured here is the survival cause: the ledger writer's self-tests and fixtures use legacy#005-style ids almost throughout, so nothing ever drove a Crockford id through that path. The row also records the adjacent trap — Crockford's alphabet includes0-9, so a display locator can be entirely digits (#041061) and is indistinguishable from a legacy id by pattern.Both rows state the next action, not just the finding.
Verification
npm run verify:pr-localThe risk router selected light docs scope, so build and the unit suite were correctly skipped — this diff is two inbox JSON files plus a review record. The two gates that actually bear on it both passed:
npm run formatrun and committed; whole-treeprettier --check .reportsAll matched files use Prettier code style!.Request content was inspected after generation rather than assumed: both payloads parse, carry no unescaped
|, and the regex in the second row renders as/^#(\d+)$/. An earlier generation of that request stored a double-escaped/^#(\\d+)$/; it was regenerated before commit rather than shipped, since these rows are read by people.npm run verify:ui— not run: no UI, routing, styling, or browser-behaviour file is touched.npm run verify:release— not run: ordinary handoff, not a release-confidence claim, and it is provider-backed.npm run eval:retrieval:quality/eval:rag/eval:quality— not run: no retrieval, ranking, generation, or answer-contract code is touched. All are provider-backed and unauthorized here.npm run check:production-readiness— not run: no clinical workflow, privacy, environment, Supabase, source-governance, or deployment behaviour changed. This PR adds two JSON request files.npm run check:deployment-readiness— not run: no deployment, startup, hosting, or rollout behaviour changed.Risk and rollout
issues:reconcileapplies them; the canonicaldocs/outstanding-issues.mdis untouched by this PR.addrequests allocate a fresh ULID at reconcile time and carry nobaseRowFingerprint, so they cannot go stale the way adone/updaterequest can.git reverteither commit independently, or simply delete the two request files before reconcile.Notes
main(#J912J9,#0MSNT8) still have matchingbaseRowFingerprintvalues against the current ledger, so they will apply cleanly at the next reconcile. I had flagged them as a possible staleness risk during the G1 session; that risk did not materialise.#324/#330): G1 landed correctly onmain—similarity_origin?: "cosine" | "synthetic_text" | "document_context"insrc/lib/types.tsand thedocument_contextstamp inrag-row-contracts.ts.5c9b69a, the commit carrying the reviewed content; the record commit itself adds no reviewable change, so no superseding record is needed.🤖 Generated with Claude Code
https://claude.ai/code/session_01VHxUr5eyRwrBiXKMoqoARq
Generated by Claude Code