crash gate: a fleet step runs the crash gate on any feat commit; a socket timeout says what the socket did

Merged
LA
6d ago
+59-2

Summary

  • New fleet step scripts/measure/crash-gate.sh: it builds a tagged Debug cmux-next app at the step's commit (reload.sh, the same route as scripts/measure/tab-switch.sh) and runs scripts/cmux-next/crash-ends-app-gate.py on it. On a feat-cmux-next push the CI crash gate job is skipped, so no tip has run the gate since #28041 merged (00:35:22Z). This gives the tip the gate without a CI change:
    cmux-ci run --class exclusive --label measure --label gui-session-v1 --script scripts/measure/crash-gate.sh --ref SHA
  • crash-ends-app-gate.py: the message "the app's debug socket never answered" (run 41132712722 attempt 1, the only gate result of #28041) gave no cause. The message now names the socket path, whether it exists, whether the app still runs, and the last reply. A timeout means the main thread did not serve debug.crashes; a refused connect means no listener. The pass and fail rules do not change.

The script must be on feat-cmux-next before the controller runs it (an unlisted scripts/measure script runs only at a commit on a reviewed branch, and the worker checks its bytes against the branch tip).

Changelog

none

Observed / Not run

  • Observed: bash -n and py_compile pass; prepush-gate.py reports no new violations. The CI log of run 41132712722 (job 124327772537, cmuxs-Mac-mini-4): both launches ran 180 s, app-*.log holds only the open-file limit line, both runs end "debug socket never answered".
  • Not run: the fleet step itself (it needs this commit on feat-cmux-next). It runs on the tip right after merge; the result goes in a comment here.

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Adds a fleet step that runs the cmux-next crash gate on a tagged Debug build of any feat commit, since CI skips that gate on feat-cmux-next pushes. The step builds the app via reload.sh (the same route as tab-switch.sh) and runs crash-ends-app-gate.py; pass and fail rules are unchanged. Run it per commit with cmux-ci run --class exclusive --label measure --label gui-session-v1 --script scripts/measure/crash-gate.sh --ref SHA.

The gate's socket-timeout message now says what the socket did: its path, whether it exists, whether the app still runs, and the last reply. A timeout means the main thread never served debug.crashes; a refused connect means no listener.