Repository navigation
ci(next): a stale action export fails a change only when the change left it stale - #26803
Conversation
…eft it stale The action catalog checks failed every pull request on a base whose action exports were stale, for drift the base autofix regenerates after the next push. scripts/cmux-next/judge-action-exports.sh wraps check-action-surfaces.sh with the settings export check's rule: when the checks fail only for stale exports, each one is judged against the base parent. The base's drift (its fresh export over its committed file) is applied to this commit's committed file; if that gives this commit's fresh export, the staleness is the base's (a warning). Anything else is the change's own and fails, with the fresh export left for the regenerate step. A catalog failure that regeneration does not fix still fails. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
|
Owned by an agent session · session |
|
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)
|
|
Found 4 test failures on Blacksmith runners: Failures
|
|
Bead |
…judge only the generated files Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
|
Review (codex gpt-6-astra high, next-review): SHIP at 009f6c9 No blocking findings. The bundled |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40675011262 at c0d504c failed: cmux-next checks (god files, concurrency, crash safety, l10n). |
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
The action catalog freshness check failed every pull request whose base had stale action exports (
plans/cmux-next/action-surfaces.json,actions.md). That drift is the base's: direct pushes to feat-cmux-next change the catalog without regenerating, and the base autofix regenerates it afterwards (for example 573430f, c73892b). Until then,cmux-next generated filesandcmux-next generated files (shared build)(#26687) went red on PRs that hadn't caused it. The settings export check already called this the base's; the action check didn't.What changes
The
actionsstep in swift-test, daemon-test and generated-files now runsscripts/cmux-next/judge-action-exports.sh, which wrapscheck-action-surfaces.sh:HEAD^1):git merge-file).base driftwarning and puts the committed file back so nothing collects the base's repair.Where the base's fresh export comes from:
Packages,plans/cmux-next, the regenerate script), it is this commit's own fresh export. No rebuild.HEAD^1in place, rebuilt and exported. Then HEAD's inputs go back and are rebuilt. If that rebuild fails,.buildis removed so later--skip-buildsuites can't test base binaries. This is the same restore discipline ascheck-settings-exports.sh.Step outcomes are unchanged: the step still fails exactly when the change's own exports are stale or the catalog is broken, so the regenerate, upload and verdict steps behave as before.
Tests
scripts/cmux-next/tests/judge-action-exports.test.shis wired into the checks job. It uses a fake package whose generator reads the built product, so the base export really comes from a base rebuild. Each case is a merge commit, like a PR checkout:base driftwarning; checkout and products are HEAD'sRun on Linux CI: the bash test passes, shellcheck is clean, and
test_cmux_next_generated_fold,test_cmux_next_checks_workflow,test_job_input_fingerprint,test_cmux_next_route,test_ci_workflow_guards_are_wiredandtest_check_pathspass (260 tests).Why the drift keeps coming back
Direct pushes to feat-cmux-next get no PR checks. The base autofix is the self-heal for that, and branch protection on direct pushes is left as it is. This PR stops that drift from turning other PRs red.
Risk
The risk is a false pass, where a change's own stale export is called base drift. The 3-way comparison passes only when HEAD's fresh export is exactly the base's drift applied to HEAD's committed file. A merge conflict or any leftover difference fails. If the base doesn't build, the stale export counts as the change's.
Agent session: agent session
🤖 Generated with Claude Code