Repository navigation
idle-warm: run cmux's UI fuzzer in idle gaps with nothing left to warm (opt-in) - #1343
Merged
Merged
Conversation
…m (opt-in per mini) With ~/.config/glaeda/idle-fuzz.enabled, an idle spell whose roots are all near main's head runs cmux's scripts/fuzz against a staged APFS clone of the newest main build a root keeps, instead of skipping. Same gates and yield as a catch-up, plus an unlocked console owned by this user, no gui token held and no Xcode test running. It holds one capacity unit (and the root's token while it copies) through capacity/idle-warm.json and never the gui token, so every job's admission stops it and no listener is held off; the app is the fuzzer's child in the catch-up's process group and dies with it. --apply --fuzz runs it now. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…oor, bounded runs) - Starts only when every capacity unit is free: a gui-step job takes the gui token later with take-gui, which does not stop a yielding holder, so any admitted job rules the fuzzer out. - Stages without a root token (which would stop a gui runner's listener): clone, then check the root's stamp is unchanged. Partial copies (dot directories, no build.json) never count and are removed. - Refuses under 90 GiB free; keeps at most 30 runs with findings and 10 without. - Uses the hook's console_state (screen lock included); closes a crash dialog it caused. - Run at most 24 minutes (10 fuzzing, 5 per minimized finding); errors return a record. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…t run Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Opt-in idle UI fuzzing for cmux minis, as a preemptible gap fill inside glaeda-idle-warm.
With
~/.config/glaeda/idle-fuzz.enabled, an idle spell with nothing left to warm runs cmux'sscripts/fuzz(manaflow-ai/cmux#15297) from the kept main checkout instead of skipping. It clones (APFScp -Rc) the newest main build a root keeps intofuzz/builds/<sha>while holding that root's token, then fuzzes it for up to 12 minutes and minimizes up to two failures intofuzz/runs/.It never delays a job: same gates as a catch-up, plus an unlocked console owned by this user, the gui token free and no Xcode test process. It holds one capacity unit through
capacity/idle-warm.json, so the hook's existing yield covers it with no hook change: every admission SIGTERMs it, the gate counts what it holds as free, and the app dies with the process group because the fuzzer starts it as its own child. It never takes the gui token, which would stop a gui runner's listener. No runner is pinned.--apply --fuzzruns it now for an operator.Tests: four new cases in
scripts/test-glaeda-idle-warm.py(off unless enabled; stages and fuzzes the main build and releases; refuses beside a gui job or without an engine or a main build; a job's SIGTERM ends the fuzzer and its app within the 5 s yield). The file passes locally (20 tests).Icicle g1 ⚙️ (run_worker_20260927_686a3a99)
🤖 Generated with Claude Code