9.5 KiB
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.tsselects source spell weapon channels and projects equipped-weapon aura and damage contributions.combatStore.tsexposeseffectiveActorAuras; 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.tssupplies the verified native main-hand profile: source baseLevel * 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 for source hashes, neutral unmodeled rate channels, custom-gear limits, and cast prerequisites.enemyAutomaticOffhand.tsreads the pinned creatureflags_extra0x800. 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.combatEvents.tsretainsattackHandandextraAttackSourceSpellIdon 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.cjssubscribes 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:
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.