Skip to content

Spine split increment 3 (enemy phase) + offensive-parity de-risking findings#10

Merged
ackness merged 1 commit into
masterfrom
refactor/spine-split-3
Jun 28, 2026
Merged

Spine split increment 3 (enemy phase) + offensive-parity de-risking findings#10
ackness merged 1 commit into
masterfrom
refactor/spine-split-3

Conversation

@ackness

@ackness ackness commented Jun 28, 2026

Copy link
Copy Markdown
Owner

Summary

Third spine-split increment + de-risking findings for the offensive-parity work.

Spine split — extract enemy phase (refactor, behavior-preserving)

Extract the enemy-config phase (5/5a/5b — setup_enemy + config enemy-mod bucket + player-applied elemental exposure) into inject_enemy with explicit (session, build, options, enemy_tier, resolved_config) params. Pure grouping, zero behavior change. 8 injection phases now extracted across PR #8/#9/#10.

Roadmap — record two de-risking findings (docs)

Verification

  • cargo fmt --check — clean
  • cargo clippy -p pobr-build --all-targets -- -D warnings — clean
  • cargo test -p pobr-build272 passed / 0 failed
  • parity — zero drift: def25 84.2% / defcore 91.7% / off 76.2% / dot 54.1% @5%

 #3/landing-order findings

Spine split increment 3: extract the enemy-config phase (5/5a/5b — setup_enemy + config
enemy-mod bucket + player-applied elemental exposure) into inject_enemy with explicit
(session, build, options, enemy_tier, resolved_config) params. Pure grouping, zero
behavior change.

Also records two de-risking findings in the offensive-parity roadmap:
- Fix #3 (Essence Drain): mod-dump confirms phantom hit (ChaosDamageMin/Max 62/115) and
  DoT (ChaosDot 179.56) come from separate stats → clean hit-only suppression possible;
  blocked on DealNoChaos gating both → needs pob2-oracle to confirm vendor mechanism.
- Landing-order: Fix #2 (DistanceRamp) alone regresses the gate (flicker false-hit flips
  to a miss); must bundle with #1/#5/#8. Only #3 is standalone metric-improving.

Verified: cargo test -p pobr-build = 272 passed/0 failed; fmt + clippy clean; parity
zero-drift (def25 84.2 / defcore 91.7 / off 76.2 / dot 54.1 @5%).
@ackness
ackness merged commit b6c3c0b into master Jun 28, 2026
@ackness
ackness deleted the refactor/spine-split-3 branch June 28, 2026 10:10
ackness added a commit that referenced this pull request Jul 17, 2026
- Baselines re-pinned to the post-#10 dashboard: offensive 76->78/80 @5%
  and @10% (deadeye AverageDamage+TotalDPS enter the band), dot 31->34 @5%
  / 34->36 @10% (deadeye ignite chain follows the Point Blank fix;
  smith/titan dot back in band after the local-adds leak removal).
- POBR_ONLY_BUILD=<substring> filter for the ninja dashboard so POBR_DBG_*
  channels stay readable on a single build (never set in CI).
- POBR_DBG_BASES now also dumps generic-bucket MORE contributions
  (POBR_POOL_MORE), symmetric with the existing INC dump.
ackness added a commit that referenced this pull request Jul 18, 2026
What changed
- item_rolled_defence: when the base item is known, all three defence
  components (armour/evasion/energy shield) are recomputed as
  round((base + localFlat) * (1 + localInc/100) * (1 + quality/100))
  (Item.lua:1994-1996), instead of ES only. Display-line fallback remains
  for unknown bases.

Why
- titan Armour 0.985x: three 0.5.4b-buffed Runeforged bases whose item-text
  'Armour:' lines lag the base DB (gloves 96 vs 101, helmet 192 vs 284,
  boots 58 vs 100; oracle ArmourOn<Slot> pins each; helmet recompute
  169*1.40*1.20 = 284 exact). Same family as the earlier ES-only fix
  (c705fe4). Note the #10 'shield 1736 vs 1725' hypothesis was wrong -
  oracle armourData.Armour is exactly 1736.

Validation
- titan Armour 39545.68 vs 39546 (0.99x -> 1.00x), ES/ESRecoveryCap 55
  exact, Phys/Fire/Cold/Light/Chaos MaxHit exact. Per-item round() also
  lands pathfinder Evasion 0.98x -> 1.00x and twister DeflectChance
  0.97x -> 1.00x exact. No cell regresses fleet-wide.
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