Skip to content

ci: gallery format edits own only entry problems (no bead) - #19761

Merged
teamleaderleo merged 3 commits into
feat-cmux-nextfrom
op-next-call-keys/gallery-scope-rules
Oct 12, 2026
Merged

teamleaderleo merged 3 commits into
feat-cmux-nextfrom
op-next-call-keys/gallery-scope-rules

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Between 04:23 and 05:20Z, #19699 and #19703 went red in web / react-apps-check on gallery-coverage. The failing finding was pages/settings/components/ThemeFiles.tsx#ThemeFiles has no entry. That gap came from #19688, which neither PR touched. #19572 already limits the check to findings the PR owns. But both PRs edited webviews/src/gallery/format.ts, and that file was in the check's rules, which makes every finding count. format.ts changed in 5 feat PRs in the last three days. So every PR that edited the gallery format inherited every coverage gap on the base branch.

  • Cause: format.ts only provides validateEntries. It, play.ts and the experiments files decide only "the entries are valid".
  • Fix: those files now own only that test's findings. The four coverage tests keep gallery-coverage.test.ts, prScope.ts and scripts/gallery/entries.ts as their rules. Editing the check itself still owns every finding, and a new case pins that.
  • Review follow-up: format.ts also held componentEntry and the other entry constructors, which build the covers and id the coverage tests read. They now live in src/gallery/entry.ts, which is a rule for every gallery test. format.ts re-exports them, so no importer changes. New cases pin both sides: editing entry.ts owns coverage gaps, and editing format.ts still owns entry problems.

This was the largest still-active cause of unrelated reds in the last 12 hours, after same-tree, which #19615/#19616 fixed.

Testing

heavy --mem 4G python3 -m unittest scripts.tests.test_pr_scoped_webviews_checks:

  • Red on b9c2f27: test_coverage_base_gap_warns_on_a_pr_changing_the_gallery_format failed with 1 != 0; every component and page has an entry or an allowlist line failed.
  • Green on the fix: 13 tests OK.

bun test test/gallery-coverage.test.ts passes (6/6), and bun run check passes.

Changelog

none

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Stops gallery coverage checks from flagging unrelated base-branch coverage gaps on PRs that edit webviews/src/gallery/format.ts.

The check previously listed format.ts as owning the whole check, so editing it made every existing base-branch finding (like ThemeFiles missing an entry) count against the PR. The entry constructors moved to the new webviews/src/gallery/entry.ts (format.ts re-exports them), and that file stays a rule for every gallery test, while format.ts edits now own only "the entries are valid" findings. New tests pin that format.ts edits don't own base coverage gaps but do own entry problems, and that editing the check or entry.ts still owns every finding.

Written for commit c1f4b5f. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 2 commits October 12, 2026 00:07
#19699 and #19703 edited webviews/src/gallery/format.ts and went red on
ThemeFiles' missing gallery entry from #19688: format.ts is in the
coverage check's rules, so editing it owned every finding.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The gallery coverage check listed validateEntries and its helpers
(format.ts, play.ts, experiments) as the whole check's own code, so a
pull request editing format.ts owned every base coverage gap. They now
decide only "the entries are valid"; the coverage tests keep the test
file, prScope.ts and entries.ts as their rules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 12, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@coderabbitai

coderabbitai Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 909eea80-2e59-4eee-9e0b-1fd40674a3ba

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

Review: format.ts also held componentEntry and the other entry
constructors, which build the covers and ids the coverage tests read.
They move to src/gallery/entry.ts (format.ts re-exports them, so no
importer changes) and that file stays a rule of every gallery test.
format.ts edits still own entry problems.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 12, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@blacksmith-sh

This comment has been minimized.

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Passes: CI passes on c1f4b5f44b.

CI passes on c1f4b5f44b (run 38216472254 attempt 2).

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

CI fast guards passes on c1f4b5f44b (https://github.com/manaflow-ai/cmux/actions/runs/38216472254). This covers only the fast guards, not CI: CI's result is the ci-status check, and the CI failure attribution comment names any failing test.

@github-actions

Copy link
Copy Markdown
Contributor

Gallery

Review in feed

122 states changed: pages.settings/browser-group-2, pages.settings/keyboard-group-3, pages.settings/browser-group-6, pages.settings/browser-group-7, pages.settings/general-group-9, ... · 2 new states · 38 broken states · 82 play checks failed

Diff page and renders (the run's gallery-pr artifact)

State Before · after
pages.settings/browser-group-2 (Apple System Colors, webkit)
pages.settings/keyboard-group-3 (Apple System Colors, webkit)
pages.settings/browser-group-6 (Apple System Colors, webkit)
pages.settings/browser-group-7 (Apple System Colors Light, webkit)
pages.settings/general-group-9 (Apple System Colors, webkit)
pages.settings/general-group-6 (Apple System Colors Light, webkit)

116 more on the diff page.

Live preview (follows this branch; start it with scripts/gallery-live.sh up <branch> from an hq checkout):

  • pages.settings/browser-group-2: /wt/op-next-call-keys-gallery-scope-rules/?entry=pages.settings#/pages.settings/browser-group-2
  • pages.settings/keyboard-group-3: /wt/op-next-call-keys-gallery-scope-rules/?entry=pages.settings#/pages.settings/keyboard-group-3
  • pages.settings/browser-group-6: /wt/op-next-call-keys-gallery-scope-rules/?entry=pages.settings#/pages.settings/browser-group-6
  • pages.settings/browser-group-7: /wt/op-next-call-keys-gallery-scope-rules/?entry=pages.settings#/pages.settings/browser-group-7
  • pages.settings/general-group-9: /wt/op-next-call-keys-gallery-scope-rules/?entry=pages.settings#/pages.settings/general-group-9
  • pages.settings/general-group-6: /wt/op-next-call-keys-gallery-scope-rules/?entry=pages.settings#/pages.settings/general-group-6
  • 76 more on the diff page

Play checks failed (0 px anchor movement, 0 layout shift, no frame over 33 ms unless the entry gives a reason):

  • agent-pane.artifact-panel/versions (Apple System Colors Light, webkit): play: waitFor did not hold within 5000 ms
  • agent-pane.changes-options-menu/keyboard (Apple System Colors, chromium): play: waitFor did not hold within 5000 ms
  • agent-pane.changes-options-menu/keyboard (Apple System Colors, chromium): play: waitFor did not hold within 5000 ms
  • agent-pane.composer-pickers/effort-menu (Apple System Colors Light, chromium): step 1 click button "Effort": 1 frame(s) over 33 ms (longest 64.7 ms)
  • agent-pane.composer-pickers/effort-press-drag-release (Apple System Colors, chromium): step 3 up text "High": layout shift 0.0001 (limit 0)
  • agent-pane.diff-panel/address-thread (Apple System Colors, chromium): step 2 click text "Branch": layout shift 0.0000 (limit 0) · play: waitFor did not hold within 5000 ms
  • 403 more on the diff page

553 nondeterministic states differed from a second render of the same head (a clock or fixture leak) and are not counted as changes.

6089 unchanged · base 4149074 · head c1f4b5f

@teamleaderleo
teamleaderleo merged commit d2d7b3e into feat-cmux-next Oct 12, 2026
122 of 124 checks passed
@teamleaderleo
teamleaderleo deleted the op-next-call-keys/gallery-scope-rules branch October 12, 2026 08:03
teamleaderleo added a commit that referenced this pull request Oct 12, 2026
Review: the open-ended hold let programmatic scrolls (jump to latest,
previous/next turn) snap back to the match, and padding a border-box row
fires no measure, so the late-measure step proved nothing. Back to the
base reveal; the fold case now runs under 40x CPU throttling, the loaded
runner of #19761's red, where the 600 ms window ends before the fold
and the rows above the match measure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 12, 2026
…19779)

* test: Find keeps its match in view when the rows above measure late

chat-find's fold case failed on #19761's react-apps-check (inView false
after 5 s): Find holds a new match in view for only 600 ms, and on a
loaded runner the opened fold and the rows above it measure later.
Grow a row above the match after that window.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: Find keeps its match in view until the reader scrolls

A new match was held in view for 600 ms after it was drawn. On a slow
machine the fold it opens and the rows above it measure later, so the
match slid out of view. It now stays in view until the reader scrolls
the transcript (outside Find's own bar) or Find moves on, as a pending
jump to latest already does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: Find lands its match in view on a CPU-starved page

Review: the open-ended hold let programmatic scrolls (jump to latest,
previous/next turn) snap back to the match, and padding a border-box row
fires no measure, so the late-measure step proved nothing. Back to the
base reveal; the fold case now runs under 40x CPU throttling, the loaded
runner of #19761's red, where the 600 ms window ends before the fold
and the rows above the match measure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: count Find's reveal window in frames, not milliseconds

Find holds a new match in view while the fold it opens and the rows
above it measure. The 600 ms window ran out on a starved page before
those measures landed, leaving the match out of view. Count 36 animation
frames instead: the same hold on an idle page, and a starved page that
draws fewer frames keeps it until its measures land.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: keep Find's 600 ms floor, cap the hold, own each window

Review: on a 120 Hz display 36 frames are 300 ms, half the base hold;
the hold now ends after 36 frames and 600 ms, or 5 s at most, so a page
hidden mid-reveal (no frames) does not snap a reader back once shown.
Each window owns a number, so a stale loop from an earlier reveal of the
same match cannot end a newer one early.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: drop the 5 s cap on Find's reveal

Under 40x throttling the fold measures after 5 s, so the cap ended the
hold before the match landed (chat-find.test.ts:210 red on 34ddcba).
A page hidden mid-reveal now finishes its remaining frames once shown,
at most 36 frames and 600 ms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant