Repository navigation
ci(next): a tip daemon suite gives the base a daemon-test verdict - #28283
Conversation
A feat-cmux-next push never runs daemon-test: its same-tree run has origin push, and a dispatch's tree wait marker is superseded the moment the tip moves, which in a landing burst is always before the tree publishes. So the base had no "cmux-next daemon tests" verdict for hours, and base_red_excuse.py could not compare any pull request's daemon red with it (#27692, #27868). - cmux-next.yml takes tip_daemon_suite (main's tip suite dispatcher asks for it): path routing routes only the daemon tier, and the run is named `cmux-next tip daemon suite · <tested sha>` (same_tree_sha in same-tree mode). - Its tree wait marker carries tip_suite=daemon. cmux_next_tree_notify.py starts it on the recorded sha after the tip moves (like the DEV daily) and passes tip_daemon_suite on, so the same-tree run keeps the name. Only a daemon-only dispatch on feat-cmux-next heads may carry it. - base_red_excuse.py: when its window of the newest 100 base runs holds no verdict for swift test or daemon tests, it reads the base's newest tip suite runs of that job by name (at most 6 job lists). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
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)
web and size checks: green |
|
Found 2 test failures on Blacksmith runners: Failures
|
|
Review (codex gpt-6-astra high, next-review): BLOCK at b0b1b0e
|
…y lane names #27840 registered tests/test_cmux_tui_owned_mini_caches.py as lane "linux-guard" but no ci-guards.yml step ran it, so the execution registry validator fails every pull request into feat-cmux-next ("linux-guard lane is not run by any workflow"). The release-notary group of ci-guards now runs it, beside the other cmux-tui artifact guards. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 43312b4)
|
Head is now tooling-tests (job 124018292337): the registry error was daemon tests (job 124022634651): one failing test,
That gap, no base daemon-test log that ran the suites, is exactly what this PR and #28261 fix. Once a tip daemon suite run completes, |
test_a_dispatch_whose_tree_was_building_gets_its_daemon_tests_later runs the marker step's script with its own env, which has no TIP_DAEMON_SUITE, and the KeyError failed "Checks job structure" on #28283. The script reads it with .get(), and the test now covers the tip daemon suite marker: tip_suite=daemon only for a tip_daemon_suite dispatch on feat-cmux-next. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review: this branch's base predates #27840, so tests/test_cmux_tui_owned_mini_caches.py is not in the branch and the step only passed on the merge commit with the base. The registry error it fixed is a base red (feat-cmux-next fails the same way); its fix goes in its own PR from a branch that has the file. This reverts commit c0c10bc. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ncluded Review of #28283: the fallback read only tip suite runs, so a newer ordinary dispatch that ran daemon-test (or swift-test) green was skipped and an older red tip suite run excused the head. It now reads the base's completed dispatches newest first and the first with a verdict for the job decides, a green one included. DEV daily runs and the other job's tip suite never run the job and are skipped unread; at most 6 job lists. Test: a newer green ordinary dispatch over an older red tip suite refuses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Problem
cmux-next daemon testsnever runs for afeat-cmux-nextpush. Itsif:skipssame_tree_origin == 'push', and a push's own run is superseded before its tree publishes. Soscripts/ci/test_reds.py/base_red_excuse.pyhave had no base log for that job since 04:34Z, and no pull request's daemon red can be compared with the base (#27692 is stuck on 17 red daemon tests, #27868 likewise). Base logs existed only from hand dispatches (41001517417, 41024114885).Even a dispatch did not reliably help. Its tree wait marker (origin
dispatch) was dropped as superseded whenever the tip moved before the tree published, which in a landing burst is every time: 41023525520 and 41022857098 ended with daemon tests skipped.Change
This follows how
tip_swift_suitegives swift-test a base verdict. The dispatcher side is #28261 onmain.cmux-next.ymltakes atip_daemon_suiteinput.refs/heads/feat-cmux-next.cmux-next tip daemon suite · <tested sha>, usingsame_tree_shain same-tree mode.daemon-test's ownif:is unchanged: a dispatch, and its same-tree run with origindispatch, already run it.tip_suite: daemon.cmux_next_tree_notify.pytreats such a marker as current after the tip moves, like the DEV daily's: it tests its recorded sha.tip_daemon_suiteon, so the same-tree run keeps the name.feat-cmux-nextheads may carry it. Anything else is rejected as malformed.base_red_excuse.pylooks up tip suite runs by name. If its window of the 100 newest base runs (up to 40 job reads) holds no verdict forcmux-next swift testorcmux-next daemon tests, it lists the base'sworkflow_dispatchruns and reads the newest tip suite runs of that job by name, at most 6 job lists. Base pushes crowd that window out within a couple of hours.test_reds.classifythen judges per test as before. A crash or a cut-short run is still never a base red.No workflow permission or secret changes.
Performance
Runner minutes added per base push (estimate). The daemon-test job took 9 to 13 minutes in 41024114885 and 41001517417. The base gets about 30 pushes an hour, and the dispatcher (#28261) starts at most 2 daemon suite runs an hour: when the daemon tier changed, or every 20 landings.
tests/test_base_red_excuse.pyTests
These pass on the branch:
tests/test_base_red_excuse.py:tests/test_cmux_next_tree_notify.py:tip_daemon_suiteafter the tip movedtip_suitemarkers are ignoredtests/test_cmux_next_tip_swift_suite.py:tests/test_test_reds.pyandtests/test_cmux_next_generated_fold.pyalso pass.Stop condition: after this and #28261 land, the next base daemon-test result appears without a hand dispatch, and #27692's daemon reds are compared by name against it.
Agent session: agent session
🤖 Generated with Claude Code