Repository navigation
ci(ios): listperf, the list frame-rate rig as a fleet simulator step - #29487
Conversation
…ep (base and head on one simulator) A listperf mode runs ListStressRig cases (verify/listperf/final.sh labels) on the Demo app and keeps each framelog.jsonl with its summarize.py lines; base=SHA also builds that commit in a worktree of the checkout and runs every case on both apps, base then head, on the same simulator, reps=N times. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
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)
Shipped in:
|
|
Review (codex gpt-6.1-sol xhigh, next-review): BLOCK at b93df69 BLOCK at b93df69 Visual verdict: no images; Leo tries the build
Follow-ups:
|
…e step on a failed run A head or base without ListStressRig would launch the ordinary app and time out on every case; refuse it before any build. A launch that exits non-zero (the 300 s bound) or a run with no measured windows now fails the step, with its evidence still kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review (codex gpt-6.1-sol xhigh): SHIP at 6145c08
Shell syntax validation and all eight existing entrypoint tests passed. Follow-ups:
router-review: SHIP at 6145c08 (gpt-6.1-sol xhigh); 2 follow-up(s) to file as issues Follow-up issues: 1 is #28278 (the rig lands with it); 2 is #29565. |
Adds a
listperfmode toscripts/ci/cmux-next-ios-sim.sh: the iOS list frame-rate rig (ListStressRig,cmux-next-ios/verify/listperf/) as a fleet simulator step. Base and head build and run on one simulator for a same-harness before/after.Why: #28278 (every iOS vertical list at full frame rate) needs before/after frame-rate numbers measured at its head. The rig's
rig.shdrives an AWS Mac over ssh that agent hosts no longer reach. The fleet step is the reviewed route, but no existing mode can run the rig:shotsstops the app after 5 s and keeps no frame log.What the mode does:
builddoes.base=SHA(40 hex) also builds that commit in a git worktree of the step's checkout. It reuses the head's Rust FFI build when the FFI inputs match, otherwise builds it. Base and head must have the same bundle id.final.shlabel (screen and settings asfinal.shruns them). For each case and side, base then head,reps=Ntimes (1–5, default 2), the step:CMUX_MOBILE_LIST_SCREENand its settings, capped at 300 s;framelog.jsonland the rig's log lines;verify/feedperf/summarize.py, and adds one SUMMARY.md row per window (POOLED and each-open).cases=A,Bpicks labels. The default is ws-200-live4, chat-40-stream, chat-40, diff-2400 and tabs-30-stream.base=when one is given. Without it the step refuses at once, before any build, rather than launching the plain app and timing out on every case.Cleanup: the base worktree is removed in the step's existing
cleanuptrap, and the base build lives under the step's work dir. No timer or observer is added; each launch is bounded byalarm 300.This PR changes no app code. The controller allowlist needs the matching HQ change before the step can be submitted (
iosNextSimModes, withbase=,reps=andcases=checks); that is manaflow-ai/cmuxterm-hq#5683.Prior art read: #29265 (Chief layout benchmark modes, kept beside this), #27072, #27642, #27379.
Agent session: agent session
🤖 Generated with Claude Code