issues: close #122, record #098 delivery and #130 pre-paint guard design - #1455
Conversation
Three related ledger items, each independently revertible. Close#122 (`ci/circleci: verify` fails on every branch). Its outcome allowed either "trustworthy signal again, or it stops reporting"; the second happened. `.circleci/config.yml` was deleted by 9779828 (PR #1412), and PR #1452's head reported 21 check runs with none named `ci/circleci: verify`, so the status no longer reports on new PRs. No operator log read is needed and the quota hypothesis is retired unproven. Capture #145: the remote container ships Chromium 1194 while the repo's Playwright pin wants 1234, so every browser test dies at launch and zero assertions run while the output reads like product breakage. This has cost time twice — the 2026-07-30 handoff records 13 launch failures read as a code defect, and #120 was filed on a gate reading taken under the same condition. The row gives the start-of-session check and keeps the existing "never run npx playwright install" stop rule. Fix a stale rule found while verifying #122: AGENTS.md cited `ci/circleci: verify` as a check that fails on unformatted files. It cannot report again, so the rule now names `Static PR checks` and records the CircleCI failures as history. The outstanding-issues diff is 4 insertions / 3 deletions ignoring whitespace; the rest is Prettier re-padding the archive table, because #122's original summary is wider than that column and was kept verbatim. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018K7sEKH35KZkWxvCnQcNN2
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:47 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 (2)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:6f00b494cb
ℹ️ 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.
Codex review was right: #121 ("Container Playwright browser build lags the pinned client") already tracks this exact condition — client 1234 versus container 1194, every browser test failing at launch — so #145 created a second canonical action for one problem. The row was allocated without first searching the open table, which is the dedupe step the issues skill requires. #145 is removed and its distinct content folded into #121: the reproduction on main at c5c1a86, the fact that the condition has now been misread twice (the handoff's 13 launch failures, and #120 filed as a gate defect under it), the detection command to run before trusting a browser gate, and the stop rule against filing a gate defect from a run whose tests never launched. #121's own workaround, PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD note and open Next decision are unchanged. The id marker rolls back 146 -> 145 because #145 was never used by a live row. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018K7sEKH35KZkWxvCnQcNN2
Sync main, then update two rows against evidence rather than adding new ones. #98: PR #1450 landed the counting proxy and answer-path budgets while this branch was open. Verified rather than assumed — the helper counts on execution not construction, tests/rag-round-trip-budget.test.ts pins two answer-path scenarios plus three counter self-tests, and it is registered in the offline contract fixture so it runs there. Ran it: Test Files 1 passed (1), Tests 5 passed (5). The row stays open with its Next narrowed to the two real gaps: /api/search has no budget, and eval-rag-offline/test-rag-offline were not wired. Also records the helper's own blind spot — it sees only traffic through the wrapped client. #130: already owns the unfiled pre-paint/cold-load guard, so its design goes there instead of a new row. Records what the guard must test (the pre-paint reserve seed, sampled before and after hydration rather than once after), why a zero-inset profile is required for it to be able to fail at all, and that it must be proven against the broken shape first. Also records the environment blocker: browser gates cannot launch here per #121, and the symlink bridge writes under /opt, which the sandbox refuses. No new ids allocated; both are updates to rows that already own the work. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018K7sEKH35KZkWxvCnQcNN2
…t-steps-tvxuin # Conflicts: # docs/outstanding-issues.md
Uh oh!
There was an error while loading. Please reload this page.
Second real conflict on docs/outstanding-issues.md, this time in the archive table: main's #1455 archived #122 while this branch archived #105. Kept both rows and took main's separator width. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01361jh3eYVjJCzXWjAhdZiF
…and #146 Conflict was docs/outstanding-issues.md only. Took main's copy wholesale (it carries #122's closure and the #98/#130 records from #1455) and re-applied the two one-line relocation notes, rather than hand-editing the conflict region. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JHLPEV4o1rzipPDqshCSHY
Summary
Ledger maintenance, bundled per
AGENTS.md"PR bundling" — all append-only docs plus one rule-wording fix, each listed on its own bullet. The body was rewritten after review: an earlier version advertised a new row#145, which was withdrawn as a duplicate (see the fourth bullet), so no new id is allocated by this PR.Close
#122(ci/circleci: verifyfails on every branch and its log needs operator access). Its outcome allowed either branch — "trustworthy signal again, or it stops reporting" — and the second is what happened, so the operator log read is withdrawn rather than still owed..circleci/config.ymlwas deleted by9779828("chore: remove CircleCI from repo", PR chore: remove CircleCI from repo #1412), andls -d .circlecionmainreturnsNo such file or directory. Confirmed live rather than only from the tree: PR issues: close #120 as not reproducible on current main #1452's head reported 21 check runs and not one namedci/circleci: verify. The row's quota hypothesis is archived retired unproven — never confirmable without a CircleCI token, and nothing remains to confirm it against.Fix a stale rule in
AGENTS.md, found while verifying#122. Line 171 citedci/circleci: verifyas a check that fails on unformatted files. It cannot report again, so the rule now namesStatic PR checksalone and keeps the CircleCI failures as history. This is the only item here a session acts on directly, and it makes the rule more accurate, not more permissive.Update
#098(offline round-trip budget harness). PR test(rag): pin Supabase round-trip budgets on the answer path #1450 landed the substance while this branch was open, so the row is corrected rather than left advertising completed work as pending. Verified rather than inferred from filenames:tests/helpers/supabase-round-trip-counter.tscounts on execution, not construction;tests/rag-round-trip-budget.test.tspins two offline answer-path scenarios plus three counter self-tests; it is registered inscripts/fixtures/rag-offline-contract-tests.jsonso it runs inside the offline contract. The row stays open with its Next narrowed to the two genuine gaps —/api/searchhas no budget, andeval-rag-offline/test-rag-offlinewere not wired — and records the helper's own blind spot: it sees only traffic through the wrapped client, so a budget is evidence about that client, not total request cost.Update
#130with the pre-paint/cold-load guard's design, instead of filing it as a new row.#130's Next already owns that guard, and a separate row would repeat the duplication Codex caught on this PR. Recorded: the value under test is the pre-paint reserve seedcalc(max(0.5rem, var(--safe-area-top)) + var(--shell-header-h)); the test must sample content top before and after hydration rather than once after, since a single post-hydration read passes on the broken shape; it must run on a zero-inset profile, because themax()under-reserves bymax(0, 0.5rem − inset)— zero on a notched iPhone, 8px on Android and Playwright's default emulation — so on a notched profile the assertion cannot fail; and it must be proven against the broken shape before being trusted.Withdrawn during review: Codex raised a P2 that a newly added
#145duplicated the existing#121("Container Playwright browser build lags the pinned client"). Verified against the file — same condition, client1234versus container1194— so the finding was correct.#145was removed, its distinct evidence folded into#121, and the id marker rolled back146→145since it was never live. The thread is answered with the resolution marker.Verification
npm run verify:pr-localwas not run and is not the right gate: two docs files, no source, test, script, or config content. What does cover this diff was run, after the finalmainsync:npm run check:outstanding-issues—Outstanding-issues guard passed: 142 rows (68 open, 74 archived), unique ids, next-id=145 above the highest, no merge driver.npm run format:check(whole tree, not per-file) —All matched files use Prettier code style!npm run docs:check-links—docs link check passed: 1405 repo path references resolve.#098's delivery re-verified by running it, not by reading test(rag): pin Supabase round-trip budgets on the answer path #1450's file list:node scripts/run-vitest.mjs run tests/rag-round-trip-budget.test.ts→Test Files 1 passed (1),Tests 5 passed (5), provider-free.#122's premise re-verified before closing: deleting commit located withgit log --diff-filter=D, absence confirmed on currentmain, live check-run list read from PR issues: close #120 as not reproducible on current main #1452.UI verification not run, and could not be: browser gates cannot launch in this container —
npx playwright install --dry-run chromiumwantschromium v1234while/opt/pw-browsersholds1194(ledger#121). The documented symlink bridge writes under/opt/pw-browsers, which this session's sandbox refuses, so no browser evidence exists here and none is claimed. That constraint is now recorded on#130as a blocker for the guard it describes.Verification not run: every provider-backed gate (
eval:*,verify:release,check:supabase-project,test:live) is unimplicated and unauthorized; no OpenAI, Supabase, or hosted-CI call was made.check:production-readinessdoes not apply — no clinical workflow, privacy, environment, Supabase, source-governance, or deployment behaviour is touched.Risk and rollout
#122is guarded by two independent confirmations that the provider is gone, and#098and#130are updated, not closed, so neither drops work from the open queue.git revertthe relevant commit; rows return to their prior state.Notes
scripts/pr-policy.mjsclassifies this diffclinicalRisk: false,operationalRisk: false,ragRanking: false, so no Clinical Governance Preflight orRAG impact:line is required. Both sections are omitted deliberately rather than left as unchecked boxes.PR requiredreds on superseded heads (3b54fb05,6f00b494) were each read from the job log rather than assumed: both areSTATIC_RESULT: cancelled/CANCELLED with no failing job: static-pr, thecancel-in-progresscase#095was resolved to distinguish. Neither describes the diff.origin/mainafter PR issues: close #120 as not reproducible on current main #1452 squash-merged, per the repo's merged-branch rule; no commits are stacked on already-merged history.🤖 Generated with Claude Code
https://claude.ai/code/session_018K7sEKH35KZkWxvCnQcNN2