Skip to content

cmux-runner-hook: classify cmux-next frame-pacing's build and bench - #1383

Merged
teamleaderleo merged 2 commits into
mainfrom
frame-pacing-classes
Oct 1, 2026
Merged

teamleaderleo merged 2 commits into
mainfrom
frame-pacing-classes

Conversation

@teamleaderleo

Copy link
Copy Markdown
Owner

cmux's nightly cmux-next-frame-pacing.yml (manaflow-ai/cmux#16511, merged as f204ade4df3) runs two jobs on the side lane. The hook didn't recognize either of them under that workflow, so both fell back to the compile class. That class takes the persistent-dd token and a canonical root, and neither job uses them.

  • build calls reload-build.yml through workflow_call. Inside a called workflow, GITHUB_WORKFLOW_REF names the caller, so the hook sees (cmux-next-frame-pacing.yml, build). The work is reload-build's Debug build into the workspace, so it is isolated, matching (reload-build.yml, build).
  • bench unpacks the app into $RUNNER_TEMP and drives the console session. Before those steps it takes the gui token itself with glaeda-canonical-root take-gui --wait 900, the same way test-e2e's test does, so it is gui-step. It restores no product into a canonical root. On a one-root mini, gui-step takes gui and the root when the job starts, take-gui is then a no-op, and the workflow accepts exit 0 or 2.

Commits: a71b1d3 adds the failing test, ff9608f adds the classes.

Red (a71b1d3): python3 scripts/test-glaeda-cmux-runner.py HookTest.test_job_class_keys_on_workflow_file_and_job_id failed with ('compile', True) != ('isolated', False).
Green (ff9608f): the same command passes. -k gui_step and NoEmDashTest also pass.

Rollout: job-started.sh runs the staged hook fresh for each job, but the minis only pick up this change after a glaeda-cmux-runner-fleet --apply (or OTA). That rollout is not part of this PR.

🤖 Generated with Claude Code

https://claude.ai/code/session_01RYQHfug1ZVQDp4eWgwVUtD

teamleaderleo and others added 2 commits October 1, 2026 18:20
cmux's nightly cmux-next-frame-pacing.yml (cmux#16511) runs reload-build's
`build` and a `bench` job on the side lane. The hook does not know either
under that workflow, so both fall to the compile class. Fails until the
classes land.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RYQHfug1ZVQDp4eWgwVUtD
cmux-next-frame-pacing.yml (cmux#16511) calls reload-build.yml for its
`build`, which is the same isolated workspace Debug build under the
caller's workflow name. Its `bench` takes the gui token itself with
take-gui before the console steps, so it is gui-step, as test-e2e's
`test` is. Without these, both fell to the compile class and held the
persistent DerivedData and a canonical root they never use.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RYQHfug1ZVQDp4eWgwVUtD
@teamleaderleo

Copy link
Copy Markdown
Owner Author

Subagent review at ff9608f: APPROVE. build resolves to (cmux-next-frame-pacing.yml, build) via the caller's GITHUB_WORKFLOW_REF, like cmux-tui's build; gui-step admission plus the workflow's take-gui 0|2 handling never runs the bench without the gui token, and has no root/gui lock-order deadlock. Non-blocking: on a one-root mini the bench holds the root it doesn't use (nightly, quiet hour); a locked console refuses the job at job-started (red, not skipped).

@teamleaderleo
teamleaderleo merged commit 25ab631 into main Oct 1, 2026
14 checks passed
@teamleaderleo
teamleaderleo deleted the frame-pacing-classes branch October 1, 2026 22:24
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