Repository navigation
base autofix: finish each run and land it on the newest tip - #22004
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every base-autofix run since 05:27 was cancelled by the next push (39 in a row): the Mac export takes ten minutes or more and feat-cmux-next takes a push every minute or two, and the push step refused any tip but the run's own. The settings export stamp went stale and defaults-snapshot turned red on most open pull requests. - Neither the export job nor autofix cancels in progress; only the newest push waits behind a running one. - base-autofix-push.sh replays the repair onto the newest tip when no newer commit wrote a file it writes, and refuses otherwise (the next run repairs). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
|
Bead |
…h, refuses a deleted directory Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r orphaned pushes The next queued run checks out a tip without the previous run's replayed repair, regenerates the same files, and was refused by that bot commit, so every second run failed under steady pushes. Earlier base autofix commits no longer count as newer edits; the repaired files are written onto the tip instead of cherry-picked, an already-landed repair pushes nothing, and a file added in a directory a newer commit removed is refused. Errors also reach the step summary. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review findings addressed in d078080, with the failing tests committed first (42dbd9e):
All 6 test cases pass, and actionlint is clean. |
- regenerated Packages/macOS/CmuxNext/ci-target-graph.json - vp fmt webviews/src/agent-session/acpmux/replyHref.ts - vp fmt webviews/src/pages/markdown/README.md - vp fmt webviews/src/pages/markdown/links.ts - vp fmt webviews/test/markdown-cmux-app-links.test.ts Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39211430716
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Pending: CI is running on Last result: Passes: CI passes on Written by web and size checks: green
|
|
Orphaned: no activity for 14 h, and no lane holds a lease on it. The orphan sweep could not merge |
|
Owned by land-and-ci-a8 on huge-blue · session |
…on-moved-tip Conflicts: the stale PR-autofix files (replyHref.ts, markdown links, ci-target-graph.json) take base. cmux-next-base-autofix.yml takes base's version (it already lets running jobs finish and re-applies a repair on a moved tip); the PR's push fix is re-applied on top in the next commit. cmux-next.yml takes base's concurrent check list plus base-autofix-push.test.sh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue
…ack only what a newer commit wrote Red on the merged base: the workflow's Push the repairs step leaves the settings exports to the next run whenever the tip changed CmuxNextSettings (run 39553409406), and the push script refuses the whole repair over one newer file, lets an older run overwrite a newer repair, and copies the defaults snapshot from the stale tree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue
…of leaving it to the next run The Push the repairs step left every repaired file whose area's inputs moved to the next run and failed. CmuxNextSettings moves with nearly every merge and the Mac export takes ten minutes, so the settings exports never landed (run 39553409406: pushed part, left docs/mdm, the schema, the stamp and the snapshot). The step now calls base-autofix-push.sh, which lands them on the moved tip: each export carries its stamp, so what changed since is still flagged and the newer run regenerates it. Only a file a newer commit wrote waits (a pull request's regeneration, or a repair made from a newer tree; an older repair is replaced); an export waits whole, with the files built from it, and the run then fails so the next run's since stays older. The defaults snapshot is derived again on the tip. Pushes retry a bounded number of times. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue
This comment has been minimized.
This comment has been minimized.
…fix-push.sh The base suite (#22038, #22474) drove the inline push loop, which this branch moves into scripts/cmux-next/base-autofix-push.sh; it now drives the script. Its cases stand, including that an export whose inputs moved on the tip is left to the newer run. The script's own suite now expects that too, and a fail-closed read of BASE..tip and a rejection with no move. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue
…l closed on unreadable history Keeps #22474's invariant: a file made at BASE_SHA never lands as-is when BASE..tip touched its input areas (autofix-areas.sh), unknown outputs never land, and the defaults snapshot never lands beside a file that waits. Failing to read BASE..tip now stops the run instead of reading as no newer writes, and a rejected push with no move fails at once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c6d-a1d2-7fc2-9458-92c6bdcb7b4d&host=huge-blue
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Review (subagent, correctness first): SHIP at 9f1ec6a scripts/cmux-next/base-autofix-push.sh follows the hold rules in the body and fails when history can't be read. The push step runs under Agent session: huge-blue |
|
Shipped in:
|
This moves base autofix's push step on feat-cmux-next into
scripts/cmux-next/base-autofix-push.shand tightens what it lands on a moved tip. It no longer fixes the settings-export livelock by itself (see Not fixed here).Background: base already stops cancelling runs in progress (#22038), and it already re-applies a repair file by file when the tip has moved (#22474). When the newer tip changed any input of a repaired file, the "Push the repairs" step leaves that file out and fails the run. That is the right thing to do: an export made at the old head could be wrong at the tip (a revert in between, say). This PR keeps that rule.
What changes
scripts/cmux-next/base-autofix-push.sh. It reads the same input areas (autofix-areas.sh) and holds every file whose areas BASE..tip touched, along with any output no area is known to build. A file that comes from a moved input never lands as it was made.defaults_guard.py snapshot, and only when nothing else waits.CMUX_BASE_AUTOFIX_PUSH_ATTEMPTStimes (5). If the tip already has the repair, nothing is pushed.Not fixed here: the settings inputs include
CmuxNextSettings/Localizable.xcstrings, which changes with almost every merge, and the Mac export plus autofix take about 18 minutes. So most runs still hold the settings exports, as on base (for example, run 39553409406 left them out after the tip moved to 3e0b1c2). The way out is to regenerate on the newest tip, or to have the settings area stop counting string-catalog-only changes. That is follow-up work.Tests
python3 tests/test_cmux_next_base_autofix_finishes.pyis base's suite from ci(cmux-next): base autofix lets a running repair finish and re-applies it on a moved base #22038/ci(base autofix): land the files of untouched areas when another area moved #22474, now driving the script instead of slicing the inline loop. Three of its cases were reworded:attempt 2 ofwhere the old loop reachedattempt 3, because the script reads the tip before its first push.bash scripts/cmux-next/tests/base-autofix-push.test.shruns in a shallow bot clone. Its cases:Observed / Not run
actionlinton the base autofix workflow is clean.prepush-gate.pyreports no new violations.defaults_guard.py snapshoton a moved tip is covered only by a stand-in. shellcheck isn't installed on huge-blue.Changelog
none
Agent session: huge-blue
🤖 Generated with Claude Code