mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-16 08:52:42 +00:00
D&D: class-balance Phase 1 — full 10×30 measurement matrix
Generalizes the Phase 0 spike harness to the full build matrix the class-balance doc plans for. No tuning yet — just measurement. - classBalanceProfile gains Subclass; buildHarnessCharacter sets it on the synthetic DnDCharacter; buildHarnessPlayer now calls applySubclassPassives after class+race passives, matching live order (combat_bridge.go, combat_session_build.go). Subclass="" is a no-op, so L1–L4 pre-unlock rows are unaffected. - buildPhase1Profiles yields 190 rows: 10 classes × 4 pre-subclass levels (L1–L4) + 10 classes × 3 subclasses × 5 post-unlock checkpoints (L5/7/10/15/20). Order is registry order so output reads like the design doc / !class help. - TestClassBalance_Phase1_FullMatrix runs the matrix at 200 trials/cell (~5.5s) and logs every cell plus a per-class tier-mean summary with min/max range. Only harness-broken pathologies fail the test (0% at T1 anywhere, or 100% at T5 for an L1 build); per-tier parity bands land in Phase 2 once we have data to calibrate the tolerance. Phase-2 baseline from this run: at T4 the cross-class spread of mean win rate runs Bard 0.62 → Fighter 0.80 (~18pp); at T5 0.48 → 0.64 (~16pp); casters trail martials at the post-unlock tier (T3) by ~20pp. Phase 0 test (TestClassBalance_Phase0_FighterVsMage) still green with identical numbers — the additional applySubclassPassives call is a no-op for Subclass=="".
This commit is contained in:
@@ -86,9 +86,16 @@ HP-remaining, and near-death-rate are logged as diagnostics, not asserted.
|
||||
- **Phase 0 — spike.** Harness skeleton; equipment + spell-selection policies;
|
||||
run *Fighter vs. Mage only* across tiers and sanity-check plausibility
|
||||
(both win something; casters not at 0%). If the numbers are implausible, fix
|
||||
the policies before trusting anything. **← current**
|
||||
the policies before trusting anything. **Done — commit 0878b4e.**
|
||||
- **Phase 1 — harness + matrix.** Generalize to all 10 classes × 30 subclasses;
|
||||
`TestClassBalance` logs the full report. No tuning yet — just measurement.
|
||||
**Done.** Subclass field plumbed through the harness, `applySubclassPassives`
|
||||
wired in to match live combat order, `buildPhase1Profiles` produces 190 rows
|
||||
(10 × 4 pre-subclass + 10 × 3 × 5 post-subclass), `TestClassBalance_Phase1_FullMatrix`
|
||||
logs the cells plus per-class tier means and ranges. Phase-2 calibration baseline:
|
||||
at T4 the cross-class spread of *mean* win rate runs Bard 0.62 → Fighter 0.80
|
||||
(~18pp); at T5 0.48 → 0.64 (~16pp); casters trail martials at the post-unlock
|
||||
tier (T3) by ~20pp. **← current**
|
||||
- **Phase 2 — tuning pass.** Adjust the levers (class passives → subclass tiers
|
||||
→ spell dice → AC floor → attack bonus, in that order) until the parity band
|
||||
holds. Lock the band into the test assertion.
|
||||
|
||||
Reference in New Issue
Block a user