149 lines
9.5 KiB
Markdown
149 lines
9.5 KiB
Markdown
# Weapon parity follow-up — 2026-10-05
|
||
|
||
This pass connects source-bound Disarm contributions for players and generated
|
||
party members, adds verified native RoM unarmed inputs, imports intrinsic enemy
|
||
offhand flags, and records actual hand results between route checkpoints.
|
||
The level cap remains 80. Loot and readiness policies are unchanged.
|
||
|
||
## Runtime ownership
|
||
|
||
- `enemyDisarmRuntime.ts` selects source spell weapon channels and projects
|
||
equipped-weapon aura and damage contributions. `combatStore.ts` exposes
|
||
`effectiveActorAuras`; the player and party paths consume that view. Passive
|
||
weapon auras stay in authoritative storage and resume when Disarm expires.
|
||
Nonpassive aura storage and other usable hands remain intact. Feral forms
|
||
retain their weapon-independent behavior. Original gear and nonweapon stats
|
||
remain available to attribute/AP derivation.
|
||
- `romNativeCombatAmount.ts` supplies the verified native main-hand profile:
|
||
source base `Level * 2`, native speed 30 (3 seconds), residual nonweapon damage,
|
||
and the tracked physical damage multiplier. Main-hand-consuming direct and
|
||
periodic formulas accept this profile; ranged fields remain independent.
|
||
Player and party schedulers consume the actor's native snapshot. See
|
||
[the native source audit](ROM_NATIVE_DISARM_2026-10-05.md) for source hashes,
|
||
neutral unmodeled rate channels, custom-gear limits, and cast prerequisites.
|
||
- `enemyAutomaticOffhand.ts` reads the pinned creature `flags_extra` 0x800.
|
||
Five generated templates carry the flag; their capability survives encounter
|
||
lifecycle resets and their hand clocks rearm on engagement. Native enemies,
|
||
summons, and character defenders stay outside this creature contract.
|
||
The item-class AUTO predicate is available, but equipment mappings are not
|
||
bound: the backup tables do not match the pinned world source. See
|
||
[the offhand audit](ENEMY_AUTOMATIC_OFFHAND_2026-10-05.md).
|
||
- `combatEvents.ts` retains `attackHand` and `extraAttackSourceSpellId` on actual
|
||
supported enemy swing results. Ordinary main-hand, offhand, and queued Thrash
|
||
results are distinguishable; unrelated special melee abilities and periodic
|
||
ticks do not receive invented hand labels. Player, party, summon, and online
|
||
recipient event writers share the same source classifier.
|
||
- `scripts/weapon-evidence-recorder.cjs` subscribes read-only to committed combat
|
||
state. It copies events, weapon state changes, and global source utility aura
|
||
changes, including party debuffs. It audits event-ID gaps and capacity loss.
|
||
This is a committed-state recorder, not a guarantee that uncommitted transient
|
||
state is visible. The existing bounded HUD history remains unchanged.
|
||
|
||
## Source limits
|
||
|
||
The WoW source contract does not invent native item eligibility or unknown
|
||
ability channels. Native custom equipment provenance, seven unmodeled weapon
|
||
rate channels, broader proc-specific formulas, and unsourced cast prerequisites
|
||
remain explicit boundaries. The source Thrash fallback cadence remains
|
||
simulator policy. The mismatched equipment backup is evidence for an unresolved
|
||
import requirement, not an equipment mapping used by combat.
|
||
|
||
## Validation
|
||
|
||
The final 17-file focused run passes 102 Vitest checks, covering the source
|
||
helpers, actual player and party Disarm paths, aura projection, weapon AP/DPS
|
||
contributions, native direct/periodic resolution, enemy hands/queues, and event
|
||
subscriptions. The selected files are `enemyWeaponEvents.integration`,
|
||
`enemyExtraAttacks.integration`, `enemyAutomaticOffhand`,
|
||
`enemyAutomaticOffhand.integration`, `enemyDisarmRuntime`,
|
||
`enemyDisarmRuntime.integration`, `enemyDisarmApplication.integration`,
|
||
`enemyWeaponDebuffs`, `playerDisarmContributions.integration`, `romNativeDisarm`,
|
||
`romNativeCombatAmount.integration`, `romNativeDamage`, `romNativePeriodicDamage`,
|
||
`romNativeCombatResolution.integration`, `partyAbilityAi`, `combatAuras`, and
|
||
`combatEventsSubscription`, all under `src/game` with `.test.ts` suffixes.
|
||
|
||
`npm run test:ready-five` passes 7 Vitest and 20 Python checks. Avatar validation
|
||
passes all 56 checks. The recorder's Node tests pass 3 checks; syntax and the
|
||
transformed wrapper's `--prepare-only` check pass. No full suite or all-class
|
||
balance sweep was run. The non-Ready shaman/feral fixtures are isolated source
|
||
exception checks; native active-five diagnostics do not promote readiness.
|
||
|
||
The final `npm run build` passes the standard prebuild, 8GB TypeScript, Vite,
|
||
precompression and release-bundle verification. Existing chunk-size and mixed
|
||
static/dynamic-import warnings remain. Review found and corrected a disabled
|
||
offhand/ranged default-speed AP contribution before this final build; its new
|
||
regression preserves independent scripted AP while removing that speed term.
|
||
|
||
The corrected build freeze is
|
||
`artifacts/weapon-parity-followup-2026-10-05/corrected-build-20261006-035420760`:
|
||
build SHA-256 `fcdde36bbd63ac711453a57562a38d7a1aa7ff2e8cafd4acb0e65a7a4dc27efe`.
|
||
It reuses the unchanged isolated content copy from
|
||
`frozen-20261006-034444784/content`, manifest SHA-256
|
||
`ac0fa2a867ba0a495c172de2b89532d69b32d56d032482b26020ce2d189f074b`.
|
||
That original freeze copied and verified all 27,571 referenced objects
|
||
(6,489,632,021 bytes; 21,597 logical files). The corrected freeze rechecked both
|
||
content manifests and hashed the complete source/copied build before and after;
|
||
it records the original object-verification evidence rather than claiming to
|
||
rehash every unchanged object a second time. The live wrapper separately
|
||
verifies the objects actually served.
|
||
|
||
The first-build route `playtest-artifacts/stockade-weapon-utilities/20261006-034834217`
|
||
cleared Bazil Thredd (1716) and recorded 740 post-baseline events, 44 source
|
||
main-hand results, one offhand result, positive hand timers, party Disarm and
|
||
Infected Wound. The recorder had zero gaps, errors, or capacity loss. This is
|
||
historical first-build evidence: the corrected build receives a separate final
|
||
run below. Source/helper diagnostics are recorded in the linked worker audits.
|
||
|
||
## Corrected-build Cellblock Rush
|
||
|
||
`playtest-artifacts/stockade-weapon-utilities/20261006-035524177` completes the
|
||
one-boss variant with seeded Hamhock, entry 1717, live actor `creature-79098`,
|
||
run ID `b40105fb-bf4e-435b-9c08-00d3f9feda75`. The native results screenshot
|
||
shows Hamhock defeated, 1/1 bosses and 03:15.1. This is Cellblock Rush completion,
|
||
not a five-boss Stockade campaign. The route uses a normal offline Discipline
|
||
Priest and four Ready NPCs. The UI-created profile receives isolated pre-entry
|
||
level-30 progression preparation; gameplay uses ordinary controls and read-only
|
||
telemetry, with no combat state seeding or forced utility casts.
|
||
|
||
The recorder retains 842 consecutive post-baseline events (IDs 9–850), with zero
|
||
gaps, sampling errors or retention loss. It identifies 73 actual source NPC
|
||
main-hand results, 528 combined weapon-state observations, and source Bloodlust,
|
||
Disarm and Infected Wound aura snapshots (15, 3 and 49 respectively). Targets
|
||
include player-party NPCs and source enemies. No offhand or queued Thrash result
|
||
is observed in this seeded route. Those paths have deterministic runtime tests;
|
||
the earlier Bazil first-build route additionally contains one blocked offhand
|
||
result. Absence here does not establish that the capability never operates.
|
||
Coverage describes committed post-baseline state, not every uncommitted instant.
|
||
The route has no player/party hand-tagged events, so it does not directly prove
|
||
outgoing Disarm suppression; focused player/party runtime tests establish that
|
||
consumer behavior separately.
|
||
|
||
The run record verifies unchanged complete build/content fingerprints and
|
||
manifest-backed objects actually loaded. Page/route console error arrays are
|
||
empty; the outer browser log contains only a favicon 404. Root inspected the
|
||
final-build roster, entrance/equipment, mid-route and results screenshots:
|
||
player and several party bodies and staff/shield/weapon silhouettes are visible.
|
||
Clustering limits a complete per-companion equipment audit. The results UI is
|
||
readable and agrees with the seeded boss identity.
|
||
|
||
The independent audit rehashes all 2,124 loaded content object paths
|
||
(77,019,550 bytes), all 185 observed asset URLs (69 frozen build files and 116
|
||
manifest-backed logical assets), and all seven critical loaded build chunks,
|
||
with zero failures. It verifies backing immutable source bytes; complete HTTP
|
||
response body digests were not captured for every asset request.
|
||
|
||
Evidence:
|
||
|
||
- [Final run record](../playtest-artifacts/stockade-weapon-utilities/20261006-035524177/run-record.json)
|
||
- [Weapon evidence](../playtest-artifacts/stockade-weapon-utilities/20261006-035524177/weapon-utilities-evidence.json)
|
||
- [Independent audit](../playtest-artifacts/stockade-weapon-utilities/20261006-035524177/root-weapon-recorder-review.json)
|
||
- [Roster](../playtest-artifacts/stockade-weapon-utilities/20261006-035524177/campaign/final-build-20261006-035526744/roster-discipline-priest-level-30.png)
|
||
- [Party silhouettes](../playtest-artifacts/stockade-weapon-utilities/20261006-035524177/campaign/final-build-20261006-035526744/bite-sized-stormwind-stockade-boss-route-50.png)
|
||
- [Native results](../playtest-artifacts/stockade-weapon-utilities/20261006-035524177/campaign/final-build-20261006-035526744/bite-sized-stormwind-stockade-boss-arrival.png)
|
||
|
||
The final `npm run release:check` passes, including untracked files. Separate
|
||
game/vault diffs and vault text hygiene are reviewed; no stage, commit or deploy.
|
||
The root audit is retained with the run. The task began October 5 and completed
|
||
October 6 local time. Source equipment mappings and native limits above remain open;
|
||
this pass makes no loot, level-cap or readiness promotion.
|