Skip to content

cmux-next: size the composer plus menu to content - #17534

Merged
teamleaderleo merged 24 commits into
feat-cmux-nextfrom
codex/cx-next-plus-menu
Oct 6, 2026
Merged

teamleaderleo merged 24 commits into
feat-cmux-nextfrom
codex/cx-next-plus-menu

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

The composer + button opened its attachment menu as a narrow, tall capsule. Its percentage width limits resolved against the 32px picker, so menu rows wrapped into a full-height scrollbar.

Change

  • Size composer picker menus to their intrinsic content width with a viewport max width.
  • Keep the menu height capped and prevent horizontal overflow.
  • Add the composer + case to the popover alignment harness with natural-size bounds.

Validation

  • git diff --check
  • Targeted Bun tests were attempted, but the checkout's test preload could not resolve @base-ui/utils/useIsoLayoutEffect; fleet and PR CI remain required.

Changelog

Fixed composer attachment menu sizing.

🤖 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

Fixes popover and menu alignment so composer pickers and AppKit menus open against their triggers instead of drifting off the anchor.

  • Sizes composer picker menus to their intrinsic content width, capped to the viewport, so the + menu no longer renders as a narrow, tall capsule with a full-height scrollbar; horizontal overflow is clipped.
  • Adds shared positioning helpers — useUiAnchor on web and CmuxPopoverAnchor on macOS — that flip sides when space is tight, clamp to the viewport, and translate through zoomed or flipped containers.
  • Migrates the composer pickers, changes/handoff/summary menus, and AppKit toolbar, bookmark, and browser anchors to the helpers with a shared 6px gap.
  • Covers every anchored menu with a JSDOM harness plus AppKit unit tests, including a composer-plus natural-size check.
  • Includes a formatting-only pass over webviews sources and the regenerated agent-pane stylesheet and bundle.

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

Review in cubic Turn on auto-fix

teamleaderleo and others added 12 commits October 5, 2026 20:35
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…xt-popover-anchor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…xt-popover-anchor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…xt-popover-anchor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…xt-popover-anchor

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

cursor Bot commented Oct 6, 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 6, 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: b6e64e7b-8fc5-49fc-8e2d-e3b60b4a93a6

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
  • Autopilot · 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.

@blacksmith-sh

This comment has been minimized.

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Unclear: web / react-apps-check failed: no known signature; failed step: Test webviews.

CI failed on aa8671b946 (run 37502256705 attempt 1): 1 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

Job Verdict Why
web / react-apps-check unknown no known signature; failed step: Test webviews

Not re-run automatically: web / react-apps-check is not a machine failure.

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.

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

CI fast guards failed on f8e40b2756 (https://github.com/manaflow-ai/cmux/actions/runs/37418140885). It does not block the merge; a red guard merged into main breaks it for every open PR.

Run canonical CMUX CI guard profile

these jobs use a bare GitHub-hosted runner; route them through vars.LINUX_RUNNER / vars.MACOS_RUNNER_IOS so Blacksmith<->overflow stays a repo-variable flip:

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Run canonical CMUX CI guard profile'

Validate local hook trust boundary

Test: python3 tests/test_preflight_trust.py

  • PreflightTrustTests.test_hook_installation_has_no_candidate_code_runner
AssertionError: True is not false

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate local hook trust boundary'

Check that push and pull_request path filters agree

Test: python3 tests/test_ci_workflow_path_filter_parity.py

Traceback (most recent call last):
  File "/home/runner/work/cmux/cmux/tests/test_ci_workflow_path_filter_parity.py", line 247, in <module>
    test_every_push_only_pattern_is_still_needed()
  File "/home/runner/work/cmux/cmux/tests/test_ci_workflow_path_filter_parity.py", line 183, in test_every_push_only_pattern_is_still_needed
    assert not stale, (
           ^^^^^^^^^
AssertionError: cmux-next.yml: Packages/Shared/**, Packages/iOS/** is no longer push-only. Remove it from PUSH_ONLY_PATTERNS.

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Check that push and pull_request path filters agree'

Validate package test selection

Test: python3 tests/test_ci_select_package_tests.py

    result, count = run_package_step("CmuxUpdater", [(startup, 1), (passed, 0)])
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/cmux/cmux/tests/test_ci_select_package_tests.py", line 102, in run_package_step
    count = int((root / "calls").read_text())
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/pathlib.py", line 1029, in read_text
    with self.open(mode='r', encoding=encoding, errors=errors) as f:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/pathlib.py", line 1015, in open
    return io.open(self, mode, buffering, encoding, errors, newline)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmp_djqq_kp/calls'

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate package test selection'

Validate the package test lane's single-suite phase

no build of the package: 'swift build --build-tests -c debug --package-path Packages/macOS/Pkg\nswift test -c debug --package-path Packages/macOS/Pkg --skip-build --filter FooTests\n'
no filtered test run: 'swift build --build-tests -c debug --package-path Packages/macOS/Pkg\nswift test -c debug --package-path Packages/macOS/Pkg --skip-build --filter FooTests\n'

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate the package test lane'"'"'s single-suite phase'

Validate side-lane placement onto idle owned runners

  • CmuxNextWiring.test_every_mac_job_reads_the_placement
AssertionError: Items in the first set but not the second:
'generated-files'
'daemon-test'
  • CmuxNextWiring.test_placement_starts_only_where_attempt_1_may_take_the_side_label
AssertionError: False is not true

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate side-lane placement onto idle owned runners'

Validate runner label policy

Test: python3 tests/test_runner_label_policy.py

  • TheReportSeesEveryRunnerVariable.test_every_runner_variable_a_workflow_reads_is_reported
AssertionError: Items in the first set but not the second:
'CI_NIGHTLY_DECIDE_RUNNER' : add to CMUX_CI_RUNNER_VARIABLES in ci-health-report.yml and ci-repo-variables.yml when it is a runs-on label, or to NON_LABEL_RUNNER_VARIABLES here when it holds runner names

Fix: CI_NIGHTLY_DECIDE_RUNNER picks a runs-on: label: add CI_NIGHTLY_DECIDE_RUNNER=${{ vars.CI_NIGHTLY_DECIDE_RUNNER }} to CMUX_CI_RUNNER_VARIABLES in both ci-health-report.yml and ci-repo-variables.yml (the two lists must stay equal).
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate runner label policy'

Validate reusable guard workflow structure

  • Wiring.test_main_full_suite_admission_compiles_on_the_seed_pool_and_xcode
AssertionError: 'blacksmith-6vcpu-macos-15' != 'pool-pr'
- blacksmith-6vcpu-macos-15
+ pool-pr

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate reusable guard workflow structure'

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally. This comment is updated in place on each push.

@cursor

cursor Bot commented Oct 6, 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.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

The remaining red checks are inherited from feat-cmux-next and are outside this two-file change:

  • Fast static checks reports the same 94-catalog localization parity failure on base run 37414989645, including the existing AccountsActions.xcstrings needs_review rows.
  • web / react-apps-check fails the same existing acpmux turn diff test on base run 37414989645.
  • The workflow guard reds are repository-level runner and fixture guard failures, with no changed-file attribution.

The follow-up source diff is limited to composer menu sizing and the anchor harness, and the generated agent-pane index is current via the pinned Bun regeneration check.

teamleaderleo and others added 4 commits October 5, 2026 22:19
…xt-popover-anchor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo force-pushed the codex/cx-next-plus-menu branch from b1c55ad to f8e40b2 Compare October 6, 2026 05:21
Base automatically changed from codex/cx-next-popover-anchor to feat-cmux-next October 6, 2026 05:26
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Fleet dogfood is currently blocked by a controller outage, not by the source change. The durable exact-head build job fc5d750a8b8fede44a424739 is retained for the prior app-equivalent head f8e40b2756e; cmux-ci wait and status both time out. The final test-only head submission returned an unknown outcome with a pending receipt, so I did not duplicate it. I will attach the fleet receipt and capture once the controller recovers.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

The final head 24b6339336 now has green scoped PR checks: 10 passed, 0 failed. The fleet build remains queued as job fc5d750a8b8fede44a424739 for the app-equivalent head f8e40b2756e, currently behind saturated native capacity. The final test-only head submission returned an unknown outcome, so it was not duplicated.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Batch queue: dropped from batch next-batch/20261006 (feat-cmux-next 7cf558be8de1), conflict with feat-cmux-next.

  • webviews/src/agent-session/acpmux/styles.css: both sides changed it
  • webviews/test/anchor.test.ts: added on both sides

Next: merge feat-cmux-next, resolve, push.

…xt-plus-menu

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

Copy link
Copy Markdown
Collaborator Author

Batch queue: pushed bun run check:fix output (web formatting and lint autofix) to this branch; landing once its checks rerun.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Batch queue: green. Batch stack c03ab5ca52f8 on feat-cmux-next 3892c6ce7b55 with #17520 #17527 #17534 #17537 #17541 #17542 #17551 #17552 #17553. Fleet production build: job d1e25b8a9144e8ef3ef2287e (cmux-ci artifact d1e25b8a9144e8ef3ef2287e (job d1e25b8a9144e8ef3ef2287e, tag nb-local-20261006-160146-1)). heavy tier did not run on this branch (run); your PR's own checks are the tests. Validated this PR at 86519577bf6d.

Next: land it yourself with gh-merge-green on this receipt.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Batch queue: green. Batch stack 585c7c73df5a on feat-cmux-next b7cd157736d2 with #17534 #17537 #17551 #17552 #17556 #17582 #17583 #17588 #17590. Fleet production build: job 4a08261515853623d652f844 (cmux-ci artifact 4a08261515853623d652f844 (job 4a08261515853623d652f844, tag nb-local-20261006-162817-1)). heavy tier did not run on this branch (run); your PR's own checks are the tests. Validated this PR at 581e9693eccd.

Next: land it yourself with gh-merge-green on this receipt.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Exact-head validation for aa8671b946664b27d2c83f31fdbaaf84e3576321:

  • cmux-next Release compile (Xcode 26): passed
  • cmux-next swift test: passed
  • cmux-next generated files: passed
  • Fleet DEV build: job 89ab799b4c82d02cfebeeb46, artifact sha256:4aa242e2ed398a9823ba545ba3f4a2baf61b4cdf07794759beb882a6840da0c9
  • The only source red is web / react-apps-check, failing the existing acpmux turn diff test. This is the same failure documented on base run 37414989645, and the PR diff remains limited to composer menu sizing, its anchor test, and the regenerated agent-pane bundle.

@teamleaderleo
teamleaderleo merged commit 022dce4 into feat-cmux-next Oct 6, 2026
61 of 72 checks passed
@teamleaderleo
teamleaderleo deleted the codex/cx-next-plus-menu branch October 6, 2026 17:36
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/37504816847 at 022dce4 failed: cmux-next swift test.
Those jobs last passed at f297f96. This pull request is one of 1 merged since: #17534.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/37508043338 at d405637 failed: cmux-next swift test.
Those jobs last passed at f297f96. This pull request is one of 1 merged since: #17534.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/37505518483 at 220b743 failed: cmux-next swift test.
Those jobs last passed at f297f96. This pull request is one of 1 merged since: #17534.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

teamleaderleo added a commit that referenced this pull request Oct 7, 2026
* test(cmux-next): batch dispatch runs every dispatch-gated job (red)

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

* ci(cmux-next): run every tier when dispatched on a next-batch branch

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

* test(ci): cmux-next batch queue selection, stacking and bisect (red)

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

* ci(cmux-next): implicit batch queue for feat-cmux-next

Debounced PR events dispatch one batch: stack eligible PRs on
feat-cmux-next, rebuild conflicted generated files, run every cmux-next
tier and a fleet production build on the stack, then land each PR with
gh-merge-green or bisect a red stack to its culprit.

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

* fix(ci): address batch workflows by id, not file name

feat-cmux-next is not the default branch, so the Actions API cannot find
a workflow file that exists only there by its name.

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

* fix(ci): batch keeps one base and never blames a PR for a fleet failure

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

* fix(ci): batch skips workflow changes and stays off until enabled

GitHub refuses the job token's push or merge of a .github/workflows
change, so those PRs land by hand. Debounce dispatches only when
CMUX_NEXT_BATCH_ENABLED is 1.

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

* fix(ci): create batch branches at the base before pushing the stack

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

* fix(ci): batch pushes and merges with an App token; terse bot comments

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

* docs(ci): batch queue App token, off switch and workflow PRs

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

* test(ci): batch queue serve loop, remote regeneration and local fleet build (red)

python3 -m unittest tests.test_next_batch: 14 failures, all in the new
ServeDebounce, RemoteRegeneration, LocalController and regen workflow tests.

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

* feat(ci): serve the batch queue under a gh login; regenerate on runners

next_batch.py serve polls open PRs, debounces like the debounce job and
runs one batch at a time with the operator's gh login, so it runs without
the batch App. Its pushes and merges start CI, so nothing is re-dispatched
after landing; the fleet build uses the host's cmux-ci.

Generators run the stack's code, so they no longer run on the controller:
regen-linux (web, SDK) and regen (Swift) check out the stack with a
read-only token and return a patch that the controller applies and pushes.

python3 -m unittest tests.test_next_batch: 41 pass (14 failed on 552c900).

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

* test(ci): Swift regeneration runs the workflow ref's generator (red)

next-batch/20261006: the regen job ran the stack's own copy of
regenerate-swift-exports.sh, which the stack does not have yet (exit 127).
python3 -m unittest tests.test_next_batch: 1 failure.

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

* fix(ci): run the Swift export generator from the workflow's ref

The stack checkout keeps the stack's code; only the generator script comes
from the trusted ref. python3 -m unittest tests.test_next_batch: OK.

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

* test(ci): retry a mini job that was refused before writing a result (red)

next-batch/20261006: the Swift regen job was refused at runner setup (a
fleet build was waiting for the host) and the batch gave up.
python3 -m unittest tests.test_next_batch: 3 errors.

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

* fix(ci): dispatch a mini job once more when it wrote no result

python3 -m unittest tests.test_next_batch: OK.

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

* test(ci): a production fleet build passes no backend mode (red)

cmux-ci build --production --backend-mode local: "production builds cannot
use offline backend mode". python3 -m unittest tests.test_next_batch: 1 failure.

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

* fix(ci): submit the production fleet build without a backend mode

python3 -m unittest tests.test_next_batch: OK.

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

* test(ci): the queue formats a PR's webviews before landing it (red)

next-batch/20261006: #17527 and #17537 were validated green but
web / react-apps-check failed on formatting and blocked landing.
python3 -m unittest tests.test_next_batch: 5 failing.

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

* fix(ci): format a PR's webviews on a runner before landing it

A PR changing webviews/ whose only red is web formatting stays eligible.
Before landing it, regen-linux runs bun run check:fix (formatter and lint
autofix) on its head and the queue pushes the patch to the PR's branch;
gh-merge-green waits for the rerun. python3 -m unittest tests.test_next_batch: 50 OK.

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

* test(ci): serve posts a receipt for owners instead of merging (red)

Landing from the queue host is not allowed yet; owners land on the
receipt. A receipt names the heavy jobs that ran, since cmux-next.yml
skips them on next-batch/* until this PR is on feat-cmux-next.
python3 -m unittest tests.test_next_batch: 4 failing.

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

* fix(ci): serve posts a receipt and owners land, unless --land

python3 -m unittest tests.test_next_batch: 54 OK.

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

* test(ci): page the open-PR query and retry a gateway timeout (red)

next_batch.py select: gh api graphql failed: gh: HTTP 504 (100 PRs with
files and checks in one query). python3 -m unittest tests.test_next_batch: 2 failing.

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

* fix(ci): page the open-PR query 30 at a time and retry a 5xx once

python3 -m unittest tests.test_next_batch: OK; next_batch.py select: OK.

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

* test(ci): a local run posts receipts unless --land (red)

python3 -m unittest tests.test_next_batch: 1 failing.

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

* fix(ci): a local run posts receipts unless --land

python3 -m unittest tests.test_next_batch: OK.

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

* test(ci): an owner push during formatting waits for the next batch (red)

Batch local-20261006-153816: #17534's owner pushed while its formatting
ran; the report showed a raw git push error. python3 -m unittest tests.test_next_batch: 1 error.

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

* fix(ci): an owner push during formatting leaves the PR for the next batch

python3 -m unittest tests.test_next_batch: OK.

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

* fix(ci): a PR with a green receipt at its head is not validated again

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

* test(ci): the queue never pushes to a branch it does not own (red)

An opted-in PR by another author got the formatting push too.
python3 -m unittest tests.test_next_batch: 1 failure.

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

* fix(ci): push formatting only to batch authors' branches

python3 -m unittest tests.test_next_batch: OK.

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

* test(ci): serve reports a batch author's PR closed by someone else (red)

Detect and alert only: number, actor and time to the coordinator; one
alert for 3 or more within 10 minutes. python3 -m unittest tests.test_next_batch: 4 errors.

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

* feat(ci): serve reports a batch author's PR closed by someone else

The minute poll runs on its own thread, so it keeps going while a batch
runs; a PR leaving the open set costs one lookup. Detect and alert only.
python3 -m unittest tests.test_next_batch: 63 OK.

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

* test(ci): retry a truncated GraphQL reply once (red)

serve log 20:34 and 20:37 UTC: gh api graphql failed: unexpected end of
JSON input. python3 -m unittest tests.test_next_batch: 1 failure.

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

* fix(ci): retry a truncated GraphQL reply once

python3 -m unittest tests.test_next_batch: OK.

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