fix(qa): #1040 — Angry-DM scorer 'hang' was a too-short timeout (lens is SLOW, ~400s) - #1080
Conversation
… just SLOW ROOT CAUSE (confirmed by a detached single-call probe): the Angry-DM 5e-fidelity lens (rubric_angry_dm.md ~32 KB, ~3x tolkien) LEGITIMATELY takes ~400s to grade a COMBAT-DENSE transcript — a single-turn generation, MEASURED 402s on csmed-1 (num_turns=1, valid 7.7 KB scorecard, EXIT=0). The default 300s score.sh timeout KILLED it mid-generation -> empty stdout that LOOKED like a hang. The 'combat-scorer hang' (#1040) was the timeout, not a stuck stream. Concurrency made it worse, not caused it: run_duo.sh scored all 3 lenses with '&', so the heavy angrydm shared API throughput with the 2 light lenses and ran even slower -> blew past 300s every time on combat runs (the RRI just lost its mech lens this way). Social transcripts score fine (<300s of analysis), which is why only combat-dense runs 'hung'. FIX (both halves): - score.sh: default WORLDOS_SCORE_TIMEOUT 300 -> 600 (covers the ~400s + headroom; the fast lenses finish in ~60-150s so the looser bound only matters for the heavy lens / a genuine stuck call). - run_duo.sh: score the 2 LIGHT lenses (mechanical, tolkien) in parallel, WAIT, THEN score Angry-DM ALONE -> full API throughput, lands near the ~400s baseline, comfortably under 600s. Validated: syntax + guard-only mode OK; the 402s probe proves the lens completes given the timeout. This unblocks clean MECH measurement on combat-heavy runs (was n/a on the opus RRI duo).
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThe scoring phase in ChangesAngry-DM Lens Isolation and Timeout Fix
Estimated code review effort🎯 2 (Simple) | ⏱️ ~8 minutes Possibly related issues
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
Comment |
Root cause (confirmed, not guessed)
A detached single
claude -pprobe (csmed-1 angrydm, no concurrency, 580s timeout) completed:EXIT=0,duration_ms=401324(~402s),num_turns=1(single-turn generation — no tool loop), valid 7.7 KB scorecard.So the "#1040 combat-scorer hang" is the Angry-DM 5e-fidelity lens being SLOW, not stuck:
rubric_angry_dm.mdis ~32 KB (~3× tolkien, ~8× the mechanical rubric), and grading a combat-dense transcript against every 5e rule legitimately takes ~400s. The default 300sscore.shtimeout killed it mid-generation → empty stdout that looked like a hang.Concurrency made it worse, not caused it:
run_duo.shscored all 3 lenses with&, so the heavy angrydm shared API throughput with the 2 light lenses and ran even slower → exceeded 300s every combat run (the opus RRI lost its mech lens exactly this way:angrydm overall=blank whiletolkien=4.0scored). Social transcripts score in <300s, which is why only combat-dense runs "hung."This corrects my earlier concurrency hypothesis — the clean (no-concurrency) probe still "hung" at a 240s timeout, which refuted concurrency-as-cause and pointed straight at slow-vs-timeout.
Fix (both halves)
score.sh: defaultWORLDOS_SCORE_TIMEOUT300 → 600 (covers ~400s + headroom). Fast lenses finish in ~60–150s, so the looser bound only matters for the heavy lens or a genuinely stuck call. Also updated the error-message default + the rationale comment.run_duo.sh: score the 2 light lenses (mechanical, tolkien) in parallel,wait, then score Angry-DM alone → full API throughput, lands near the ~400s baseline.Validation
bash -nboth +score.shguard-only mode (offline) OK.score.shre-score of csmed-1 angrydm with the new 600s default is running to confirm the wrapper path.Impact
Unblocks clean mechanical measurement on combat-heavy runs (was
n/aon the opus RRI duo). No engine/product change; QA-infra only.Summary by CodeRabbit