Files
healer-man/docs/LEGACY_BOSS_PACING_FIX_2026-10-03.md
2026-10-04 13:13:35 -04:00

54 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Legacy Boss Pacing Fix — 2026-10-03
## Change
The existing 25-second ordinary-boss and 45-second final-boss minimums now hold for the measured legacy cohorts without changing those assertions or reducing encounter timing thresholds.
The Stockades WoW starter health anchors are now 1,800 at enemy level 2 and 2,600 at enemy level 4. Those replace 1,050 and 1,500, respectively. At level 1, the measured Priest plus four Ready companions now clear the ordinary and final bosses in 25.3 and 45.7 seconds. At level 3, they clear in 25.6 and 48.1 seconds.
The compatibility retune documented here uses a separate player-level multiplier only when `characterSource === "rom"` and `statRuleset === "wow"`: 1.0 through level 7, 1.12 at level 8 through 70, then a linear increase to 2.3 at level 80. This applies to boss health floors only. This compatibility retune did not change trash health, the native RoM health bands, native damage-budget bands, enemy damage, loot, cap 80, actor mode defaults, or Ready policy.
## Why the RoM compatibility branch stays separate
The pacing harness calls `dungeonEnemyScaling` for RoM parties without passing `statRuleset`, so it intentionally exercises the legacy `wow` ruleset default for those RoM characters. Generated RoM NPCs still use their native snapshots by default. This is a supported mixed-mode cohort; the harness calls and actor mode defaults remain unchanged.
The compatibility multiplier is gated on that existing legacy `statRuleset: "wow"` path. At the time of this compatibility retune, native-mode RoM boss health remained exactly 8,330.293333 at player level 8 and 1,312,656 at level 80 for the Stockades regression fixture; `nativeDamageBudgetScale` remained 1 and 40. A later, independently measured native level-one boss calibration changes the interpolated level-8 value to 7,983.197778 while preserving the level-80 value and both damage-budget values. See [the native level-one boss pacing addendum](ROM_NATIVE_LEVEL_ONE_BOSS_PACING_2026-10-03.md). The compatibility retune did not edit either native table; the later calibration changes only the level-1 boss-health anchor and leaves `ROM_NATIVE_DAMAGE_BANDS` untouched.
The equipment completion added optional off-hand and bow damage/speed/range values to native NPC snapshots. Those snapshot fields are available to future consumers; they do not make the shared enemy action scheduler emit additional off-hand or bow swings, and they do not automatically increase its shared enemy damage budget. This pacing change does not add extra enemy attacks or claim that the live swing path consumes those channels.
## Before and after evidence
The untouched baseline was captured with `BOSS_BALANCE_REPORT=1` and `NODE_OPTIONS=--max-old-space-size=8192` before retuning. Its 65 samples are archived at `artifacts/rom-enemy-followup/before-compatibility-pacing.json`. The test suite stopped at the first failing assertion within each affected test, so the baseline has only the first seed for the failures below.
| Cohort and level | Before ordinary / final (health) | After ordinary / final (health) |
| --- | --- | --- |
| WoW Stockades, level 1 | 14.6s / 27.1s (1,050 / 1,995) | 25.3s / 45.7s (1,800 / 3,420) |
| WoW Stockades, level 3 | 15.1s / 28.6s (1,500 / 2,850) | 25.6s / 48.1s (2,600 / 4,940) |
| RoM damage Mage, level 8 | 23.6s / 46.3s (15,619 / 29,677) | 26.8s / 52.9s (17,494 / 33,238) |
| RoM party, level 80 | 11.3s / 23.6s (273,470 / 519,593) | 27.1–28.1s / 53.3–57.1s (628,981 / 1,195,064) |
After retuning, the report contains 83 samples: all three WoW seeds at levels 1, 3, 8, 20, 40, and 80; all five damage-Mage levels; and all 12 standard RoM party seeds at levels 1, 8, 20, 40, and 80. The complete report is archived at `artifacts/rom-enemy-followup/after-compatibility-pacing.json`.
Across the post-change samples, ordinary/final clear-time ranges were:
| Cohort | Level | Ordinary boss | Final boss |
| --- | ---: | ---: | ---: |
| WoW party | 1 | 25.3s | 45.7s |
| WoW party | 3 | 25.6s | 48.1s |
| WoW party | 8 | 33.1s | 61.0s |
| WoW party | 20 | 48.1–49.0s | 93.8–97.0s |
| WoW party | 40 | 40.8–45.4s | 78.4–81.3s |
| WoW party | 80 | 95.3–100.1s | 191.7–193.7s |
| RoM damage Mage | 1 | 42.1s | 109.3s |
| RoM damage Mage | 8 | 26.8s | 52.9s |
| RoM damage Mage | 20 | 30.1s | 62.6s |
| RoM damage Mage | 40 | 35.1s | 69.1s |
| RoM damage Mage | 80 | 27.1s | 57.1s |
| RoM party | 1 | 81.1–92.5s | 191.2–199.4s |
| RoM party | 8 | 41.2–42.6s | 103.7–106.9s |
| RoM party | 20 | 36.6–40.3s | 73.6–75.1s |
| RoM party | 40 | 38.1–42.1s | 78.1–79.6s |
| RoM party | 80 | 27.1–28.1s | 53.3–57.1s |
The full `dungeonBossScaling.test.ts` suite passed all 18 tests. The additional focused regressions passed all 6 tests across `romNativeDungeonPacing.test.ts` and `biteSizedBossBalance.test.ts`. The real-mechanics Priest test also passed its boss-attack, incoming-damage, healing, and survival assertions; its helper does not add that run to the timing report.