qa: real known-RED corpus fixture for narration_no_ooc_leak (replaces #977 TODO) - #981
Conversation
…laces TODO) Follow-up to #977, which closed the corpus coverage gap with a TODO placeholder. This replaces it with a faithful minimal fixture so the anti-goalpost corpus actually exercises the check's RED path (a future edit that weakens _NARRATION_LEAK_RE or the n_leak>=3 / dm_text>=MIN_BEATS threshold is now caught here, not just by test_assert_behavioral.py). Fixture: 6 DM text beats (== MIN_BEATS), 4 leaking the exact OOC patterns the gate bans (as-the-player-character / continuity-check / inciting-incident / here's-how-round-N-went), 2 clean in-fiction beats. A clean roll keeps dice_used green; no companion keeps dm_voices inert; baseline state passes the world/xp floors; no chat/moves keeps the facade lane inert; 6<10 beats + no companion keeps structural_completeness inert. Verified ISOLATED: the gate run on the fixture emits exactly RED: 1 behavioral assertion(s) FAILED. [FAIL] narration_no_ooc_leak — 4 player-facing beat(s) leaked ... [pervasive => RED] The builder regeneration is deterministic — zero churn to the other 18 fixtures. Corpus + taxonomy guards: 39 passed (was 38 passed + 1 skipped TODO).
|
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 (4)
📝 WalkthroughWalkthroughPromotes the Changesnarration_no_ooc_leak corpus case
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
Comment |
Follow-up to #977
#977 closed the gate-corpus coverage gap for
narration_no_ooc_leakwith a TODO placeholder (the canonical builder auto-flag). That satisfied the coverage audit but left the anti-goalpost corpus not actually exercising the check's RED path — so a future edit that weakened_NARRATION_LEAK_REor then_leak>=3 / dm_text>=MIN_BEATSfatal threshold would slip past the corpus (onlytest_assert_behavioral.pywould catch it).This replaces the TODO with a faithful minimal known-RED fixture, modeled on the real 2026-06-17 craft audit (#972).
The fixture (
qa/gate_corpus/cases/narration_no_ooc_leak/)6 DM text beats (
== MIN_BEATS), 4 leaking the exact OOC patterns the gate bans, 2 clean in-fiction beats:as the player character·continuity check·inciting incident·here's how round one actually wentIsolation (so the per-case corpus test's
failed == {expected}holds): a cleanrollkeepsdice_usedgreen; no companion keepsdm_voices_charactersinert; baseline state (day=2, 2 visited, xp>0) passes the world/xp floors; no chat/moves keeps the facade lane inert; 6 (<10) beats + no companion keepsstructural_completenessinert.Verification
Gate run directly on the fixture:
Exactly one FATAL, fully isolated.
Builder regeneration is deterministic — zero churn to the other 18 fixtures (diff is the new case dir + the manifest TODO→real-case swap + the generator).
assert_behavioral.pyuntouched.Summary by CodeRabbit