Skip to content

fix(napkin-math): saturated-gate note + DOOM severity wording + MARGINAL band bucketing#723

Merged
neoneye merged 2 commits into
mainfrom
feat/napkin-math-explain-saturated-gate-exclusion
May 17, 2026
Merged

fix(napkin-math): saturated-gate note + DOOM severity wording + MARGINAL band bucketing#723
neoneye merged 2 commits into
mainfrom
feat/napkin-math-explain-saturated-gate-exclusion

Conversation

@neoneye
Copy link
Copy Markdown
Member

@neoneye neoneye commented May 17, 2026

Summary

Three rendering fixes to summarize_assessment.py, bundled together because ChatGPT's v46 review caught that the v46 assessment regressed two earlier wording fixes (those fixes lived on an unmerged branch, PR #722, so the v46 branch from main lacked them). Folding them in here so the next assessment iteration has all three.

1. Suggested next actions item #1 — sharper severity

ChatGPT: "1 gate(s) currently fail at the 50% pass-rate bar" undersells the actual situation. The worst gate has 0.0% pass rate, which is not just 'below 50%'; it is a structural failure under current bounds.

Distinguishes DOOM count from FRAGILE count and names the worst gate by id + pass rate:

1 declared gate in the DOOM band. Worst: sponsor_profitability_window_margin_days at 0.0% pass rate under current bounds.

(or, for mixed cases: "2 declared gates in the DOOM band; 3 in the FRAGILE band. Worst: ... at X.X% pass rate.")

2. Decision implications MARGINAL bucketing

ChatGPT: "At 79.8%, it barely misses ROBUST. Calling it 'close enough to coin-flip' is too harsh. It is not coin-flip; it is near the ROBUST threshold."

MARGINAL spans 50–80%. Bucketed at 70%:

  • ≥ 70%: "just below the ROBUST band. The gate passes in most runs, but downstream commitments should not treat it as secure."
  • < 70%: keeps the "close to coin-flip" framing.

3. Missing inputs ranking: explain why saturated DOOM gates are absent

ChatGPT v45: "The top missing inputs are all for aml_adjusted_daily_noi_margin_usd, while the worst gate is sponsor_profitability_window_margin_days. A downstream AI might wonder: 'Why are we gathering revenue and cost inputs when the worst gate is the sponsor window?'"

When saturated_doom_gates(mc, params) detects any saturated DOOM gate (DOOM band with no quartile sensitivity), a note now appears above the table:

Note: the saturated DOOM gate sponsor_profitability_window_margin_days is absent from the ranking because no single missing-input restriction can lift its pass rate under current bounds. The inputs below target the next most decision-relevant non-saturated gates; the saturated gate needs a bounds or threshold-definition audit, not a single input fix.

Singular/plural handled. Section unchanged when no saturated DOOM gate exists.

Test plan

  • Smoke 9/9, unit 50/50 green.
  • v46 casino_royale regenerated locally with all three fixes; spot-checked: Suggested-next-actions item fix: Add UTF-8 encoding for markdown file operations #1, MARGINAL row in Decision implications, and the Missing-inputs note all match the desired ChatGPT-specified wordings.

Pure rendering — no schema bump, no manifest field change. PR #722 (the older branch with only the first two fixes) will be closed as superseded.

🤖 Generated with Claude Code

neoneye added 2 commits May 17, 2026 04:32
…ssing inputs ranking

ChatGPT v45 review: a downstream consumer reading the Missing inputs ranked by impact table sees inputs targeting one set of gates (whichever non-saturated gates have the largest sensitivity) while the worst declared gate is the SATURATED DOOM gate — which is absent from the ranking entirely (no input is its worst-affected gate, by construction, because no quartile movement shifts a saturated failure).

When the consumer asks 'why are we ranking inputs for the second-worst gate?' the answer is structural, not a bug, but the table doesn't say so. Adding an explicit note removes the ambiguity:

Note: the saturated DOOM gate `sponsor_profitability_window_margin_days` is absent from the ranking because no single missing-input restriction can lift its pass rate under current bounds. The inputs below target the next most decision-relevant non-saturated gates; the saturated gate needs a bounds or threshold-definition audit, not a single input fix.

New saturated_doom_gates(mc, params) helper detects them using the existing is_saturated_failure rule. render_missing_inputs_ranked() now takes params so it can run that detection; the note grammars singular/plural correctly and lists all saturated gates by id. Section is omitted entirely when no missing_value_priority exists (unchanged). Pure rendering; no schema bump. Smoke 9/9, unit 50/50.
…+ MARGINAL bucketing

ChatGPT v44 review: two wording fixes.

Suggested next actions item #1 previously said 'N gate(s) currently fail at the 50% pass-rate bar' regardless of whether the worst pass rate was 0% or 49%. That phrasing understated DOOM failures: '1 gate fails at the 50% bar' reads identically whether the gate is FRAGILE-48% or DOOM-0%. Now distinguishes DOOM vs FRAGILE counts and names the worst gate by id + pass rate: '1 declared gate in the DOOM band. Worst: sponsor_profitability_window_margin_days at 0.0% pass rate under current bounds.' (or '2 in the DOOM band; 3 in the FRAGILE band. Worst: ... at X.X% pass rate.' for mixed cases).

Decision implications MARGINAL wording was 'close enough to coin-flip' across the full 50-80% band. At 79.8% that reads as a misdiagnosis — the gate is one slip from ROBUST, not coin-flip. Bucketed at 70%: at-or-above 70% uses 'just below the ROBUST band. The gate passes in most runs, but downstream commitments should not treat it as secure.'; below 70% keeps the 'close to coin-flip' framing.

No schema bump (manifest unchanged; pure rendering). Smoke 9/9, unit 50/50.
@neoneye neoneye changed the title fix(napkin-math): explain saturated DOOM gate's absence from Missing inputs ranking fix(napkin-math): saturated-gate note + DOOM severity wording + MARGINAL band bucketing May 17, 2026
@neoneye neoneye merged commit caf7e38 into main May 17, 2026
3 checks passed
@neoneye neoneye deleted the feat/napkin-math-explain-saturated-gate-exclusion branch May 17, 2026 02:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant