Skip to content

fix(ci): validate Lighthouse evidence and retain performance audit - #2744

Open
BigSimmo wants to merge 6 commits into
mainfrom
codex/chat-lighthouse-baseline-reliability-7925
Open

fix(ci): validate Lighthouse evidence and retain performance audit#2744
BigSimmo wants to merge 6 commits into
mainfrom
codex/chat-lighthouse-baseline-reliability-7925

Conversation

@BigSimmo

@BigSimmo BigSimmo commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Summary

Consolidates Lighthouse baseline reliability with its performance audit. Required evidence now includes every configured tolerance metric; missing report or baseline metrics fail validation.

Consolidates #2744 (4aed81e), #2723 (7d62215). Original heads are retained as ancestors; absorbed PRs are closed only after publication is verified.

Verification

  • npm run test -- tests/check-lighthouse-budget.test.ts — 75 passed, including missing configured report/baseline metric regressions.

  • npm run format — passed; formatting committed.

  • git diff --check — passed.

  • Verification not run: full local PR/release suites; focused integration checks above were selected, and GitHub remains the merge gate. No live provider evaluation, deployment, migration or production data access was performed.

  • UI verification not run: local browser matrix; applicable hosted UI checks must pass before merge.

  • Current-base CI limitation: Make the outstanding-issues snapshot merge-safe (v2), and record the measured assessment of two other rows #2735 run 34495136858 failed only the aged ranking fixture provenance test (32 days old). clinical(governance): resolve forms permissions, test guards, and alert tiers (Bundle 1) #2763 carries the existing refresh; these bundles must not be merged past failed required checks.

  • Removed the obsolete tolerance binding exposed by hosted lint; focused ESLint on scripts/check-lighthouse-budget.mjs passed without warnings.

Risk and rollout

  • Risk: CI measurement validation; this strengthens evidence completeness and does not refresh or weaken performance budgets.
  • Rollback: revert the consolidated merge commit as one unit; original source branches and heads remain available.
  • Provider or production effects: GitHub branch/PR updates only during consolidation. No deployment or provider write was performed.
  • RAG impact: none

claude and others added 4 commits September 7, 2026 10:09
RB-3 was recorded by a static, code-only pass and deferred its own
verification ("Measurement needed: Chrome DevTools Performance recording
during scroll, hover, and theme toggle"). That measurement has now been
taken in Chromium, and it splits the finding three ways rather than one.

1. `html.theme-transitioning *` was real and worse than its P3 rating:
   1226 concurrent animations and 546ms with no frame presented, leaving a
   half-light/half-dark paint on every theme switch. Fixed in PR #2653.

2. The three stacked backdrop-filter passes are NOT a defect. Over a 4s
   continuous scroll at 1440x900, three runs per condition:

     three passes  mean 17.06/16.81/16.83ms  >32ms 4/3/3
     one pass      mean 16.79/16.70/16.79ms  >32ms 3/3/5
     no blur       mean 16.82/16.75/16.76ms  >32ms 3/3/3

   Removing the blur entirely does not move the numbers out of run-to-run
   noise, so the two extra passes cost nothing worth reclaiming. They are
   not redundant either: dropping them changes 35.59% of the scrim's pixels
   (max channel-sum delta 39/765). Visible design change, no measured gain.
   The scrim is display:none below 640px, so it was never a phone cost.

   A backdrop-root hypothesis was tested and refuted: `.edge-glass-header`
   carries `isolation: isolate`, but the passes are not inert — disabling
   the blur changes 47.50% of scrim pixels (max delta 321).

3. The `box-shadow` entry in the `.answer-footer-search-pill` transition is
   NOT a defect. Toggling the real `-open` state every 200ms for 4s: mean
   16.62/16.66/16.62ms with it versus 16.65/16.67/16.67ms without, and zero
   frames over 32ms in either condition. It is not dead weight either —
   :hover, :focus-within and -open each set a different box-shadow, so
   removing it makes the composer's focus ring and elevation snap.

No source change accompanies this commit on purpose. Two thirds of RB-3
should not be actioned, and the remediation table previously told a reader
to action them. The stale line numbers are corrected in the same block.

Gates: npm run verify:pr-local (docs scope) — 15 checks completed, none
failed, none unreached. Build skipped: no build-affecting changes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mp72U91fKSqD6S12R9ijZd
The measurement block asserted numbers without saying how they were taken,
which this repo's evidence rule does not allow.

Records that the runs were headless Chromium 1194 (this container's build
against the pinned 1234, the #255 drift) driving the DEV server at
1440x900 on cloud hardware, three runs per condition, sampling every
requestAnimationFrame. Absolute frame times are therefore not a production
figure and no production claim is made from them.

The relative comparison is what both closures actually rest on: identical
page, identical hardware, one property changed between conditions. A dev
build is the slower case, so it biases towards exposing a paint cost, and
none appeared.

Also notes that the cited line numbers were re-checked against origin/main
at 0177bed.

Gates: npm run verify:pr-local (docs scope) — 15 checks completed, none
failed, none unreached.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mp72U91fKSqD6S12R9ijZd
… absent

Codex review on PR #2723 was right, and it cited the correct rule
("Evidence and calibration are never compressed"). The first version of
this update read flat 60Hz frame times as proof of no cost. It is not.
requestAnimationFrame deltas are vsync-capped at ~16.7ms, so a condition
that finishes early is indistinguishable from one that finishes just
inside the budget. That method can only show frames were not dropped.

Re-measured with the scrim area scaled up to force the cost above the
vsync floor, everything else held fixed (mean/p95 ms, two runs):

  height   three passes            one pass              no blur
  104px    16.90/16.94 p95 16.9    16.70/16.85 p95 16.9  16.86/16.75
  416px    19.43/19.77 p95 42.4    17.01/17.08 p95 18.2  16.67/16.75
  832px    75.99/77.36 p95 114.5   18.61/19.52 p95 32.8  16.83/16.88

The three-pass stack is emphatically not free: by x8 it is ~4x the frame
budget and an order of magnitude worse than a single pass. The earlier
claim that the extra passes "cannot be costing anything worth reclaiming"
was wrong and is withdrawn.

What survives is narrower and still useful: at the SHIPPED 104px the cost
is below this method's resolution and drops no frames, on a renderer that
turns out to be SwiftShader software rasterisation
(ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero)))) — slower
than any GPU a user will have. So there is no measured problem to fix at
the current size, and flattening the stack on performance grounds is not
justified today. No sub-frame figure is quoted for 104px because none was
measured; extrapolating from x4 would be arithmetic, not evidence.

The genuinely actionable finding is new: the cost scales superlinearly
with area, and scrim height is max(6.5rem, safe-area-top + 5.5rem).
Anyone enlarging it, raising the blur radii, or reusing the three-pass
recipe on a taller surface must re-measure. The summary bullet and both
tables are re-scoped to say that instead of "non-defect".

The same vsync caveat is now stated for the box-shadow item. Its
conclusion is unchanged: one small pill animating only on hover, so area
sensitivity does not apply, and removing it is a certain interaction
regression against an unmeasured gain.

The benchmark harness is retained inline in the RB-3 block, per the review
request, so the tables can be reproduced rather than taken on trust.

Gates: npm run verify:pr-local (docs scope) — 15 checks completed, none
failed, none unreached.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mp72U91fKSqD6S12R9ijZd
@supabase

supabase Bot commented Sep 8, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project sjrfecxgysukkwxsowpy because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: a7aace12-d162-417f-89f1-17a52c299319


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 8, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-08T14:12:52.693137Z 4aed81e Manual request
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@cursor

cursor Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_7d4ef37f-e4a2-4d3d-a0eb-1766f6ff3c30)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4aed81e482

ℹ️ 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".

Comment thread scripts/check-lighthouse-budget.mjs Outdated
@BigSimmo

BigSimmo commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

@codex resolve actionable Codex review findings for this pull request and current head using the repository instructions. This is the pull request's single automatic repair pass: do not perform a fresh review, create new standalone findings, or request another review. Work only the existing unresolved Codex threads on the current head. The only repository destination is BigSimmo/Database, and the only branch destination is the pull request head branch codex/chat-lighthouse-baseline-reliability-7925 at starting commit 4aed81e; never publish fixes to a detached or synthetic work branch and never create a stacked pull request. Use the authenticated GitHub connector to commit each approved fix to BigSimmo/Database:codex/chat-lighthouse-baseline-reliability-7925, then verify that the pull request head contains the published commit before reporting success. Always fix P0 and P1 findings. For P2 and lower findings, fix only clear, scoped, low-risk issues; otherwise disposition them with a concise reason. For a fixed thread, reply with as the first line and as the second line. For a no-code disposition, use followed by . These result markers authorize the workflow to close that exact thread only after it verifies a fixed commit is the pull request head; a local-only commit is not a fix. If publication or verification fails, do not use either result marker, do not claim success, and leave the thread open with the blocker. If human input or new authorization is required, do the same. Finish only after every actionable thread is fixed or dispositioned and closed, or explicitly left open for a human decision. Do not update the branch from main, address unrelated reviews, broaden scope, or create more than one scoped fix commit. Do not use external APIs, paid services, credentials, dependency changes, or broad refactors unless explicitly authorized. Add targeted tests where behavior changes and run the narrowest relevant validation.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

CI triage

CI failed on this PR. Automated classification of the 2 failed job(s):

  • Unit coverageneeds investigation: inspect the failing step and uploaded diagnostics; rerun only after classifying the cause.
  • PR requiredneeds investigation: inspect the failing step and uploaded diagnostics; rerun only after classifying the cause.

Compared with main CI run #16436 (failure).

Classification is evidence routing, not permission to ignore a failure. Exact quarantined Playwright identities remain governed by the flake ledger.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Hooray!

Reviewed commit: 4aed81e482

ℹ️ 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".

@BigSimmo BigSimmo changed the title Validate Lighthouse baselines before comparison fix(ci): validate Lighthouse evidence and retain performance audit Sep 10, 2026
@cursor

cursor Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_e85aa888-50d1-4fc1-ac6f-a3c66e846327)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants