Equipment and the pure combat-resolution foundation have landed. This follow-on
connects them into equipment-aware attack and defense selection, persisted hostile
S.D.C. exchanges, armor routing, and the live combat UI.
Foundation retained
combatResolutionRules load-validates the page-stamped RUE p.346 constants.
resolveStrike(input) resolves a completed strike roll against an optional
caller-authorized parry, dodge, or automatic dodge and returns the outcome,
reason, critical state, damage multiplier, and S.D.C./M.D. type.
- The derived combat profile preserves raw Hand-to-Hand bonuses and exposes named
maneuver totals.
- Equipment content and character inventory/worn-armor state remain the source of
equipped combat capability and protection.
Rendered rules correction
Rendered Rifts Ultimate Edition p.339 explicitly says Natural A.R. does not apply
in Rifts. This issue therefore does not implement a Natural A.R. branch. Artificial
S.D.C. armor keeps its distinct printed routing: a successful strike at or below
A.R. damages the armor, a strike above A.R. reaches the wearer, and depleted armor
stops protecting future hits.
Delivered S.D.C. scope
- Derive supported owned S.D.C. melee and firearm attacks without leaking P.P. or
general Hand-to-Hand bonuses into firearm math.
- Persist a two-phase server-rolled exchange: immediate misses finalize at
declaration, while potential hits wait for an engine-authorized parry, dodge,
automatic dodge, or take-the-hit response.
- Record the submitted combat context, server-owned rolls, action-cost metadata,
routed result, and immutable incoming/outgoing/recent history.
- Re-derive both characters inside mutations, reject state drift, and atomically
finalize the exchange with the target pool update exactly once.
- Route unprotected hits through body S.D.C. before Hit Points.
- Pure-test artificial S.D.C. armor equality, penetration, depletion, ablation,
and final-hit no-spill behavior. Persistence is ready when page-stamped S.D.C.
armor content is added; the production catalog currently has no such suit.
- Reset combat drafts, feeds, telemetry, and late mutation results when a dossier
route changes.
Explicit boundary and follow-up
M.D. weapons and targets wearing nondepleted M.D.C. protection are refused before
dice or exchange insertion. Full M.D.C. interaction remains separate follow-up
work: damage-tier interaction and conversion exceptions, final-point/final-blast
armor absorption, depleted protection, M.D. against an unprotected mortal, and any
injury/coma/death state the current schema cannot represent.
Tracked in #51. That follow-up must reverify rendered RUE pp.288 and 355-359 and
extend this issue's persisted exchange ledger rather than inventing Mega-Damage
behavior from memory.
Verification snapshot
Fresh evidence on 2026-07-20 (Asia/Singapore), through commit a44f193:
- rules: 17/17 files and 308/308 tests passed;
- backend: 3/3 files and 82/82 tests passed;
- web: 2/2 files and 27/27 tests passed;
- root: 22/22 files and 417/417 tests passed; and
- all six package gates ran with task caches disabled; root
vp check and both working-tree and branch diff checks were clean.
Live two-dossier acceptance covered an immediate miss; a melee defense with
unchanged pools; a ranged exchange with no parry option; body S.D.C. depletion and
a later critical Hit Point hit; matching persisted history in both dossiers; M.D.
weapon and M.D.C.-protection refusal; A-to-B route isolation; labelled keyboard and
screen-reader operation; clean consoles; and a narrow command rail without internal
overflow. The observed page-level 500 px minimum predates this branch.
Still out of scope
Called shots, hit locations, paired weapons, bursts, payload tracking, thrown
weapon modes, a generic spell-effect interpreter, initiative/round/action-budget
enforcement, authentication/ownership/GM permissions, and VTT geometry remain
separately designed work.
Cubic review hardening snapshot
Fresh evidence on 2026-07-20 (Asia/Singapore), through commit a9a0fde:
- Cubic's recent-history disclosure finding was validated;
aria-controls now targets the exact history list ID.
- Cubic's take-the-hit ledger finding was validated; the shared schema rejects nonzero defense modifiers for
none, and the web omits modifier fields for that response.
- rules: 17/17 files and 309/309 tests passed;
- backend: 3/3 files and 83/83 tests passed;
- web: 2/2 files and 29/29 tests passed;
- root: 22/22 files and 421/421 tests passed; and
- all six no-cache package gates, root
vp check, and git diff --check passed.
Live two-dossier acceptance additionally proved modifier-free take-the-hit persistence and the disclosure/list association. Full M.D.C. remains tracked separately in #51.
Cubic re-review status
Commit a9a0fde is published, CI passed, and both findings have evidence-backed inline replies. A fresh Cubic review was requested, but the bot reported that the workspace had consumed 40,345 of its 40,000 monthly review lines and cannot review again until 2026-08-01. PR #52 remains ready for review and unmerged; this external gate is still open.
Equipment and the pure combat-resolution foundation have landed. This follow-on
connects them into equipment-aware attack and defense selection, persisted hostile
S.D.C. exchanges, armor routing, and the live combat UI.
Foundation retained
combatResolutionRulesload-validates the page-stamped RUE p.346 constants.resolveStrike(input)resolves a completed strike roll against an optionalcaller-authorized parry, dodge, or automatic dodge and returns the outcome,
reason, critical state, damage multiplier, and S.D.C./M.D. type.
maneuver totals.
equipped combat capability and protection.
Rendered rules correction
Rendered Rifts Ultimate Edition p.339 explicitly says Natural A.R. does not apply
in Rifts. This issue therefore does not implement a Natural A.R. branch. Artificial
S.D.C. armor keeps its distinct printed routing: a successful strike at or below
A.R. damages the armor, a strike above A.R. reaches the wearer, and depleted armor
stops protecting future hits.
Delivered S.D.C. scope
general Hand-to-Hand bonuses into firearm math.
declaration, while potential hits wait for an engine-authorized parry, dodge,
automatic dodge, or take-the-hit response.
routed result, and immutable incoming/outgoing/recent history.
finalize the exchange with the target pool update exactly once.
and final-hit no-spill behavior. Persistence is ready when page-stamped S.D.C.
armor content is added; the production catalog currently has no such suit.
route changes.
Explicit boundary and follow-up
M.D. weapons and targets wearing nondepleted M.D.C. protection are refused before
dice or exchange insertion. Full M.D.C. interaction remains separate follow-up
work: damage-tier interaction and conversion exceptions, final-point/final-blast
armor absorption, depleted protection, M.D. against an unprotected mortal, and any
injury/coma/death state the current schema cannot represent.
Tracked in #51. That follow-up must reverify rendered RUE pp.288 and 355-359 and
extend this issue's persisted exchange ledger rather than inventing Mega-Damage
behavior from memory.
Verification snapshot
Fresh evidence on 2026-07-20 (Asia/Singapore), through commit
a44f193:vp checkand both working-tree and branch diff checks were clean.Live two-dossier acceptance covered an immediate miss; a melee defense with
unchanged pools; a ranged exchange with no parry option; body S.D.C. depletion and
a later critical Hit Point hit; matching persisted history in both dossiers; M.D.
weapon and M.D.C.-protection refusal; A-to-B route isolation; labelled keyboard and
screen-reader operation; clean consoles; and a narrow command rail without internal
overflow. The observed page-level 500 px minimum predates this branch.
Still out of scope
Called shots, hit locations, paired weapons, bursts, payload tracking, thrown
weapon modes, a generic spell-effect interpreter, initiative/round/action-budget
enforcement, authentication/ownership/GM permissions, and VTT geometry remain
separately designed work.
Cubic review hardening snapshot
Fresh evidence on 2026-07-20 (Asia/Singapore), through commit
a9a0fde:aria-controlsnow targets the exact history list ID.none, and the web omits modifier fields for that response.vp check, andgit diff --checkpassed.Live two-dossier acceptance additionally proved modifier-free take-the-hit persistence and the disclosure/list association. Full M.D.C. remains tracked separately in #51.
Cubic re-review status
Commit
a9a0fdeis published, CI passed, and both findings have evidence-backed inline replies. A fresh Cubic review was requested, but the bot reported that the workspace had consumed 40,345 of its 40,000 monthly review lines and cannot review again until 2026-08-01. PR #52 remains ready for review and unmerged; this external gate is still open.