Files
gogobee/sim_results/h4_findings.md
prosolis d225fc8185 H4: bump Uncommon/Rare harvest MaxCharges 1→2
53 resources affected in dnd_resource_registry.go; Common (mostly already
2), VeryRare, and Legendary untouched. Calibration sim (15k rows, 10
classes × L3/7/12 × 5 zones) lands cleared-run yield deltas at −2.5% to
+4.7% vs the J2b baseline — well within the ±10% DoD band, but with much
less leverage than the plan anticipated.

The finding (sim_results/h4_findings.md): per-room yield is gated by
non-Noise interrupt truncation, not charge count. The Common consolation
bracket (delta ≥ -4 yields +1) already absorbs most of the Josie nerf.
Future yield tuning should reach for resolveCombatInterrupt, not charges
— parked as out-of-scope for this branch.

H4 closes; the phase-H branch can now soak H1/H2/H3/H5 + this bump.
2026-05-17 16:49:18 -07:00

4.9 KiB
Raw Blame History

H4 — Charge calibration findings

Date: 2026-05-17 Corpus: h4_calibration_v1_all10.jsonl (15k rows, 10 classes × L3/7/12 × 5 zones × n=100). Summary: h4_calibration_v1_summary.txt. Baseline for comparison: baseline_j2a_v2_all10.jsonl (post-J2b picker, current shipped state). Change under test: every RarityUncommon and RarityRare resource bumped from MaxCharges: 1MaxCharges: 2 in dnd_resource_registry.go (53 resources). Commons (already mostly 2), VeryRare/Legendary (trophy tier) untouched.

TL;DR

Charge counts are not the binding constraint on yield. The bump from 1 → 2 charges on every Uncommon and Rare resource produces a tiny net change in cleared-run yield, ranging from 2.5% (forest) to +4.7% (goblin). The H4 DoD (±10% yield parity) is satisfied trivially because the lever has almost no leverage.

zone cleared mean yield (J2b) cleared mean yield (H4) Δ%
goblin_warrens 5.99 6.27 +4.7
forest_shadows 8.17 7.97 2.5
manor_blackspire 5.50 5.37 2.4
underdark 6.30 6.16 2.2
dragons_lair

All deltas are within n=100 noise (~±5% on these means).

Why charge counts don't move the needle

Two compounding mechanics cap per-room yield well below "all charges spent":

  1. Standard/Elite/Patrol interrupts abort the entire room harvest pass. autoHarvestRoom returns immediately on any non-Noise interrupt (internal/plugin/dnd_expedition_autopilot_harvest.go:160-175). Bumping charges adds more interrupt rolls per room, which slightly increases the chance the room ends before higher-rarity actions even fire — the Forage action runs first, so its extra charges can squander the room budget before Fish/Essence/Commune get a swing.
  2. The Common consolation bracket (resolveHarvestOutcome, delta -1 to -4) already softens the Josie nerf: even a "failed" roll within 4 below DC yields +1. P(Nothing) is only 0-50% across the realistic DC×modifier range, so the Josie penalty per charge was ~25-50%, not 100%.

Net effect: doubling charges roughly doubles the potential yield ceiling per resource, but the per-room interrupt-truncation budget is fixed. Yield reshuffles between resources within a room (Fey Bloom +55% in forest, Darkwood 36%, Biolum Fungi 35% — see mean_yields_by_name slice) without changing the per-run total.

What this means for the H4 DoD

The plan's DoD reads:

Monte Carlo shows yield parity within ±10% across tiers; rare nodes feel rare (success rate visibly < 50%) but not punishing across a full expedition.

Both legs are met:

  • Parity: all four sampled zones land within ±5% of the J2b baseline.
  • Rare-feel: charge bumps don't change DCs; success rate per attempt is unchanged. A 1→2 MC bump only means "two swings instead of one" on the same DC, so rares still take two attempts on average to land.

The implicit goal — restore pre-Josie yields — is not met. We don't have a pre-Josie sim corpus to compare against (H1 shipped before the sim was built). Analytically, pre-Josie yields would be ~1.3× (low DC) to 2× (high DC) the post-Josie per-charge expectation. H4 closes maybe 5-30% of that gap depending on zone, because of the interrupt cap.

Recommendation

Ship the bump as-is. It's a narrative/feel win (more swings, longer node depletion arcs) and a small yield lift in goblin_warrens — the entry zone. The cost is zero (registry-only change, no code touched, all tests green).

Do not chase the rest of the gap by tuning interrupts. The difficulty memo (feedback_difficulty_target) says lift trailers without pushing monster scaling, and harvest-interrupt frequency is part of the per-zone threat economy. Reducing interrupt rate would lift yield universally but also weaken the threat-loop feedback (§4.2 Combat Interrupt). Out of scope for this branch.

Document the finding so a future tuner doesn't reach for the charge knob again expecting big swings.

Files

  • dnd_resource_registry.go — 53 resources bumped.
  • h4_calibration_v1_all10.jsonl / .err — sim corpus.
  • h4_calibration_v1_summary.txt — per-cell summary.

Open items rolled forward

  • Interrupt-frequency tune (not H4): if harvest yields ever need to lift another 20-30%, the right lever is resolveCombatInterrupt rates in dnd_expedition_harvest.go, not charge counts. Park as a future tuning option.
  • Pre-Josie baseline corpus (not needed): a one-shot git revert of H1 + sim run would give the true target. Skipping unless someone disputes the "interrupt-cap is the real ceiling" finding.