feat(qa): make GLM QA work end-to-end (scorer isolation + all-harness profile wiring) - #1026
Conversation
…ore) When a run is GLM (WORLDOS_DM_MODEL=glm-5.2), qa/glm_profile.sh exports ANTHROPIC_BASE_URL =z.ai + the GLM key + a fresh CLAUDE_CONFIG_DIR GLOBALLY — so the pinned-sonnet scorer's claude call was routed to z.ai with a Claude model name (Unknown Model) and every GLM run scored empty/errored. Neutralize those vars for the scorer call only (env -u ...), so it uses clean Claude (~/.claude OAuth + api.anthropic.com). NO-OP on normal Claude runs (those vars are unset) → byte-identical. This is the fix that makes GLM QA runs actually scoreable.
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughThe PR isolates the QA scoring subprocess from GLM-related environment variables and applies GLM settings profiles across multiple QA harness scripts. In ChangesQA Environment Configuration
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
Comment |
…laytest if direct) — GLM for all QA harnesses
…block) #1024 added the dm_advanced_time chk() to assert_behavioral.py but never registered it in BEHAVIORAL_GATE_TAXONOMY.json, so the drift-guard (test_taxonomy_matches_real_gate_check_names) is RED on main + every PR (same class as the earlier flat_arc omission). Register it as a WARN-only DM_ADHERENCE check. Folded into this GLM-enablement PR to unblock its gate.
|
Note We couldn't fetch the incremental changes for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
…M model-profile, timing (#1031) * docs(qa): SCORING currency — gate severity (honest measurement), list-arg coercion, timing columns * docs: MODEL-TIERING + RUNBOOK currency — clean GLM model-profile + QA lane + cap-rate finding Post-24h-reorient doc currency, grounded in merged #1026/#1027/#1028/#1030. - docs/MODEL-TIERING-STRATEGY.md: new "GLM as a cheap batch-QA engine" section — the clean model-profile system (single WORLDOS_DM_MODEL flows coherently; no-op for Claude; defensive GLM-env scrub so switch-back to Opus is always clean; mixed-model guard; product play.sh/play_party.sh forced clean-Claude; scorer always isolated Claude). WHEN to use GLM (cheap batch QA, save Anthropic tokens — NOT the release gate). The cap-rate finding: the ~30% GLM cap rate was self-inflicted over-aggressive FATAL gates capping BOTH models (now fixed via #1027 + #1030), NOT a GLM weakness — honest-measurement repair, the opposite of score-gaming. PLACEHOLDER (no invented numbers) for the in-flight honest GLM-vs-Claude re-measure; pre-fix ~3.6/~3.6 marked superseded. - WorldOS-RUNBOOK.md + WorldOS-GUI-RUNBOOK.md: brief "GLM QA lane" notes (WORLDOS_DM_MODEL= glm-5.2 WORLDOS_ACTOR_MODEL=glm-5.2; profile auto-wires endpoint + raised timeouts across run_duo/run_party/run_combat_sprint/ui_playtest; scorer stays Claude), cross-linked to MODEL-TIERING. - qa/SCORING.md: §1a gate-severity contract (FATAL = true integrity only) + §1a.1 list-arg coercion (#1027) + §7 timing observability; north-star measurement-not-target framing. Additive only; Claude paths byte-identical. Anchored on VISION.md (felt session is the product; scores are measurement, never the target — no score-gaming). * docs: fill the honest GLM-vs-Claude numbers (post-fix 1-v-1, all GREEN) 5-run same-SHA 1-v-1 on the fixed engine (43a5ecc): Claude story 4.13/mech 3.67/angry 3.33, GLM story 3.9/mech 3.8/angry 3.4 — all behavioral GREEN (0 RED-caps, vs ~30% pre-fix). GLM is comparable quality (within ~0.2; higher on mech+angry, ~0.2 lower on story); its real cost is LATENCY (cold-opens 604-872s, 3-4x Claude) → cheap overnight/VM batch sweeps, not interactive, not the release gate. Both below the RRI bar (story 4.3/mech 4.5). --------- Co-authored-by: Eva <arncalso@gmail.com>
… + GLM + clean switching) (#1032) NOT a GA: the RRI gameplay gates (story>=4.3, mech>=4.5) are not yet met. This RC hardens the measurement (the behavioral gate stops false-capping good play — #1027/#1030, adversarially verified) and the model architecture (clean GLM<->Claude switching, no leaks — #1026/#1028; GLM measured comparable, latency the real cost) + the timing instrumentation + arc-smoke + the felt-world machinery, so the gameplay work that follows runs on honest signal. Co-authored-by: Eva <arncalso@gmail.com>
Two fixes that together make GLM actually usable for QA across the board (validated overnight: 4 GLM duos completed + scored, story
3.6 / mech3.6 / angry~3.1 vs Claude 4.1/3.8/3.4).1. Scorer isolation (the blocker)
On a GLM run,
qa/glm_profile.shexportsANTHROPIC_BASE_URL=z.ai+ the GLM key + a freshCLAUDE_CONFIG_DIRglobally, so the pinned-sonnet scorer'sclaudecall hit z.ai with a Claude model name (Unknown Model) → every GLM run scored empty.qa/score.shnow neutralizes those vars for the scorer call only (env -u …) → clean Claude (~/.claudeOAuth). No-op on normal Claude runs.2. GLM profile wired into ALL harnesses
Previously only
run_duo.shsourced the GLM profile. Added it (unconditional source + no-op-for-Claude call) torun_party.sh,run_combat_sprint.sh, andui_playtest.shso a GLM model selection applies everywhere, not just the duo. Claude path byte-identical.GLM verdict: reliable QA runner, near-Claude mechanical quality, slightly-below story, ~2-3× slower — a viable cheap batch-sweep engine, not a replacement for Claude on the final quality gate.
Summary by CodeRabbit
dm_advanced_time) to flag sessions where the DM does not advance time tools (warning only).