Update Healer Man server
This commit is contained in:
1 parent
6cc1b9217f
commit
6114a2295f
67 files changed
+6241
-347
No files matched your search
@@ -2,6 +2,8 @@
|
||||
|
||||
Updated 2026-10-04. This document lists unresolved ability and talent mechanics for all ten WoW 3.3.5a classes and all ten RuneWaker primary classes. It excludes completed fixes and all visual or sound review. Some items need source confirmation or simulator support before they can be implemented; do not guess missing values. For RoM conflicts, prefer clearly matching current Chronicles of Arcadia behavior over the RuneWaker snapshot; verify skill identity and class pairing, and document the source and any simulator approximation. See [the full audit](ACTIVE_CLASS_AUDIT.md) for the supporting findings and source conflicts.
|
||||
|
||||
New routine mechanic/browser diagnostics use **Stormwind Stockade** (`stormwind-stockade`), including Hamhock for generic Boss Testing. Import `scripts/playtest-defaults.cjs` and follow [the test policy](TEST_DUNGEON_POLICY.md); historical Wailing findings below do not select future tests.
|
||||
|
||||
## Targeted follow-up (2026-10-04)
|
||||
|
||||
- [x] Correct pinned AzerothCore creature-immunity foreign-key decoding. Lady Anacondra is Fear/Horror immune, not Silence/Interrupt immune; the source-registered Lightning Bolt regression now cancels under Vow of Silence. Actual Silence/Interrupt-immune creatures retain protection. See [the audit](VOW_OF_SILENCE_AUDIT_2026-10-04.md).
|
||||
@@ -10,7 +12,12 @@ Updated 2026-10-04. This document lists unresolved ability and talent mechanics
|
||||
- [x] Audit the Killing Spree representative-signature failure. Spell 51690 is a source periodic-dummy selector with a dedicated player `class-script` handler; the test now checks that exact mechanism while preserving the ten-strike runtime regression. Correct the player damage aura from 1% to the linked DBC child 61851's 20% for two seconds. See [the audit](WOW_KILLING_SPREE_AUDIT_2026-10-04.md).
|
||||
- [x] Implement shared timed player/companion Killing Spree: five assaults at application and 500-ms intervals through two seconds, retained cast-time target pools, owner-local cleanup, linked +20% final-pulse ordering, actual player/NPC relocation, and learned companion AI selection. Seeded target selection, estimated weapon-child damage/teleport coordinates and unverified active-control semantics remain simulator limits. See [the parity report](WOW_KILLING_SPREE_PARITY_2026-10-04.md). This Combat Rogue diagnostic does not expand Ready-five.
|
||||
- [x] Audit the five active native RoM identities and correct Knight/Scout Blood Punishment to current CoA's +15% healing received and +5% Holy damage on the actual Blood Arrow aura. Correct companion RoM direct-hit school selection and no-roll outgoing damage-aura consumption; native and compatibility NPC casts are covered separately. See [the five-class report](ROM_FIVE_MECHANIC_GAPS_2026-10-04.md).
|
||||
- [ ] Reconcile Blood Arrow's current CoA base toggle and per-offensive-ranged-skill cost contract with local 490434. The passive rider is current; the base aura still uses the local 30-second/periodic-HP-cost behavior. Current general and Knight/Scout active identities differ, so do not silently replace one with the other. See the five-class report's remaining base-contract section.
|
||||
- [x] Reconcile Blood Arrow for the verified Scout/Rogue and Knight/Scout owners: indefinite owner-local toggle, recast/right-click cancellation, 10-second cooldown after deactivation, and no legacy idle drain. Knight/Scout offensive ranged-weapon skills charge 2% max HP plus 1% max MP; Scout/Rogue damaging ranged skills and owned NPC ranged auto swings charge 2% max HP without the MP surcharge. Base definitions and resolved ranks are scoped to those pairs; unverified owners retain the RuneWaker behavior. See [the implementation report](ROM_BLOOD_ARROW_TOGGLE_2026-10-04.md).
|
||||
- [ ] Add the missing recurring player RoM ranged auto-attack/Auto Shot path before claiming full Scout/Rogue Blood Arrow auto-attack parity. Player ordinary auto attacks currently use the melee path; activating Auto Shot is not a recurring shot event. Source the cap-80 ranged-damage curve separately; the retained local 10% aura is not a verified current CoA rank curve.
|
||||
- [ ] Correct native-five damage-role companion selection so the player's active pairing is excluded when the remaining active identities can fill the seats. The targeted Stockade Scout/Rogue fixture generated another Scout/Rogue and omitted Mage/Warlock; Knight/Scout's tank-role fixture had the exact complement. See [the live evidence](ROM_BLOOD_ARROW_STOCKADE_PLAYTEST_2026-10-04.md). This finding does not promote other RoM builds or expand the companion pool.
|
||||
- [ ] Propagate Group Heal's sourced area radius to its party-heal effect for both player and NPC recipients. `romAbilityCatalog.ts` derives ability radius 12, but its party heal effect omits radius and `healingRecipientIds` defaults to 30. The final Stockade tank death is a separate timing case: Group Heal resolves 701 ms after the inferred lethal hit. Damage arithmetic implies zero HP when the living-recipient filter would exclude him; the casualty is observed later without a recipient-selection event. This does not prove a range/LOS rejection. Preserve other spells' explicit recipient contracts and add boundary coverage before changing the shared fallback. See [the final continuation evidence](STOCKADE_MECHANICS_CONTINUATION_2026-10-04.md).
|
||||
- [x] Prevent the thirteen audited utility/extra-attack NPC spells from falling back to direct hits. Exact Ascension/Epoch signatures preserve each source profile; the second pass removes another 51 false attack rows and corrects 30 real attack/control rows, including hostile melee range, pure Kick interruption, caster-centered fear/stun and Chain Lightning range. Real damage and mixed-damage Shield Slam remain. Catalog regeneration also refreshes the existing damage-school/kind metadata. See [the source audit](STOCKADE_UTILITY_ATTACK_AUDIT_2026-10-04.md).
|
||||
- [ ] Model the audited NPC stance, haste/AP, block, offhand, extra-attack, disarm and flat damage-taken effects before claiming their full source parity. Their false direct-hit fallback is fixed, but their real utility remains unsupported. Chain Lightning fan-out, separate-target shout triggers, sourced Rend ticks and Enrage damage/haste values remain gaps; keep Ascension/Epoch source contracts distinct. See [the source audit](STOCKADE_UTILITY_ATTACK_AUDIT_2026-10-04.md).
|
||||
|
||||
## Native stat input update (2026-10-03)
|
||||
|
||||
|
||||
@@ -48,7 +48,15 @@ node scripts/runewaker-pipeline/build-population.mjs --recipe scripts/runewaker-
|
||||
The generated import manifest records the source ROS path, source SHA-256,
|
||||
output SHA-256, bounds, and triangle count for each prop. Converted source
|
||||
props retain the RoM socket frame; the WoW-to-RoM procedural fallback rotation
|
||||
must not be applied to them.
|
||||
must not be applied to them on native rigs. The bow retains its native facing
|
||||
on RoM rigs. On the basic human fallback, its source Y axis is aligned to the
|
||||
bow socket before applying the inverse socket adaptation, keeping the string
|
||||
toward the archer. Other props retain their source orientation.
|
||||
|
||||
Weapon selection follows RoM class identity even when the optional character
|
||||
pack is absent. The basic human body retains its WoW clothing and shoulders,
|
||||
but its hands receive original RoM props with the inverse socket adaptation.
|
||||
The optional character pack is not required to see authentic RoM weapons.
|
||||
|
||||
## Packaging and validation
|
||||
|
||||
@@ -63,6 +71,7 @@ fallback. Missing item assets cannot hide the body or other equipment.
|
||||
- `npm test -- --run src/avatar`
|
||||
- `npm run build`
|
||||
- `node scripts/playtest-party-equipment.cjs` after building and refreshing content
|
||||
- `node scripts/playtest-party-equipment.cjs --rom-only --basic-only` checks the missing-character-pack path
|
||||
- Review roster and dungeon screenshots in `playtest-artifacts/party-equipment/`
|
||||
- Record visual findings in `PLAYTEST_NOTES.md`
|
||||
- `npm run release:check`
|
||||
@@ -3,6 +3,12 @@
|
||||
Use this runbook for requests to inspect or fix the current dungeon reports.
|
||||
It is intentionally repo-relative except for the production endpoint.
|
||||
|
||||
Routine mechanic/browser QA defaults to **Stormwind Stockade**
|
||||
(`stormwind-stockade`), including Hamhock for generic Boss Testing. See
|
||||
`docs/TEST_DUNGEON_POLICY.md` and `AGENTS.md`. A report tied to a specific dungeon
|
||||
still requires inspecting that source and the user's authorized reproduction;
|
||||
existing Wailing reports do not make it the default test dungeon.
|
||||
|
||||
## 1. Read the live queue first
|
||||
|
||||
The public read endpoint is:
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Mechanic parity and campaign boss pass - 2026-10-04
|
||||
|
||||
> **Future QA default (2026-10-04):** Use Stormwind Stockade for new routine live tests. The Wailing captures and commands in this dated report are historical; follow [the current test policy](TEST_DUNGEON_POLICY.md) and root `AGENTS.md`. A new Wailing reproduction needs an explicit owner request.
|
||||
|
||||
## Outcome
|
||||
|
||||
Timed player/NPC Killing Spree and source-confirmed active-five RoM fixes are implemented. Vow's live counter and full 8.4-second silence pass after correcting the source Nature Thorns cast gate. Normal Barren fully clears in 13:36.9 with one casualty; strict Wailing reaches and defeats Lady with all five actors alive, while full Wailing completion remains unverified. Sampled camera visibility/right-drag checks pass. The final build, 296 focused assertions, Ready-five checks and repository/vault hygiene pass. Blood Arrow's separate base toggle/cost migration remains open.
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Performance check — 2026-10-04
|
||||
|
||||
> **Future QA default (2026-10-04):** Use Stormwind Stockade for new routine live tests. The Wailing captures and commands in this dated report are historical; follow [the current test policy](TEST_DUNGEON_POLICY.md) and root `AGENTS.md`. A new Wailing reproduction needs an explicit owner request.
|
||||
|
||||
## Findings and changes
|
||||
|
||||
- **CPU:** The production CPU profile spent about 925 ms of an eight-second sample inside `filesForContentPack`, which repeatedly scanned and sorted the asset catalog. `src/content/contentManifest.ts` now indexes each immutable file map once through a WeakMap. `src/content/contentManager.ts` caches usable/unavailable pack results until the next content publication; install, removal, validation, and catalog changes invalidate those results.
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# Barren Caves tank death investigation (2026-10-04)
|
||||
|
||||
This is historical incident analysis only. Barren Caves was not replayed. The current default for live dungeon diagnostics is Stormwind Stockade; use a future Stockade run to verify healer behavior after the active fixes land.
|
||||
|
||||
## Evidence reviewed
|
||||
|
||||
- `playtest-artifacts/campaign-boss-pass/final-build-20261004-150021873/barren-caves-campaign-boss-route.json` and its screenshots. The captured build assets were `index-DHQInfBp.js` and `combatStore-Cx06rFzG.js`.
|
||||
- `playtest-artifacts/campaign-boss-pass/final-build-20261004-150021873/results.json`.
|
||||
- The earlier exploratory run at `playtest-artifacts/campaign-boss-pass/exploration-current-dist-20261004-144223345/failure.json` and `failure.png`.
|
||||
- Current combat ownership in `src/game/partyRuntime.ts`, `src/game/partyAbilityAi.ts`, and `src/game/generated/romNativePeriodicDamageBindings.generated.json`.
|
||||
- At the time of the final capture, `scripts/playtest-campaign-boss-pass.cjs` had a 16-entry heal-attempt limit in `stabilizeCampaignPack`. The Stockade migration now removes the arbitrary attempt-count ceiling and retains the 110-second encounter/deadline bounds; this note describes the older capture behavior.
|
||||
|
||||
Both captures show a normal campaign full clear: 13:36.9 in the final build and 10:45.8 in the earlier exploration. The character started as a level-30 RoM Priest/Knight and naturally reached level 36. Rorik was the only fallen party member; the player and three damage companions survived. The final artifact records 46,328.47 effective native healing across the route and `partyDeaths: ["Rorik"]`. The earlier results screen also shows Rorik at 0 HP. Its harness failure happened after the results overlay opened, when the harness tried to click a party frame.
|
||||
|
||||
The final run reached a full-clear overlay before the harness's separate boss handler ran. Treat the final route pack as a normal-play incident trace, not an isolated boss balance trial.
|
||||
|
||||
## Final encounter findings
|
||||
|
||||
The final recorded pack began at 15:12:49.086 and ended at 15:14:24.850. It ran through two Kobold targets and Anglo. In the captured harness version, it recorded exactly 16 healing inputs and then stopped entering the triage branch. Thirteen inputs produced positive healing events; three produced no healing event and no resource change. Eleven positive heals targeted Rorik for 6,365 total effective healing; one healed Veyra and one healed Caelan.
|
||||
|
||||
Rorik's last positive heal completed at 15:13:55.625, raising him from 2,488.69 to 3,284.69 HP out of 3,488.69. The 16th recorded healing input at 15:13:56.628 healed Caelan. There are no later Rorik healing events. The hard 16-input guard therefore suppressed further triage for the rest of this long combined trash-and-boss pack, even if another ally later crossed the 88% threshold.
|
||||
|
||||
The captured casts do not show range as the blocker. The player-to-Rorik distance at healing inputs reached 18.66 m; the bound Urgent Heal range was 25 m, and those casts resolved. Across the 181 samples (which stop before this pack), the maximum player-to-living-party separation was 12.52 m; the pack-end value was 15.56 m. A single line-of-sight rejection occurred earlier in the route at 13.48 m and a later heal resolved. No failed final-pack input records an explicit range or line-of-sight reason, but concurrent combat feedback overwrote the failure message, so those three no-event inputs cannot be classified. Cast waits for resolved Urgent Heal actions were about 1.1–1.3 seconds. The player finished with 3,643/3,747 Mana, so resource exhaustion is not supported by this trace.
|
||||
|
||||
## Blood Arrow self-damage
|
||||
|
||||
The combat log also shows the NPC tank activating Blood Arrow, ability `rom-scout-general-4` (source skill 490434). The generated RoM skill row describes a 30-second effect that reduces the user's HP by 3% every second to raise ranged physical attack. Its periodic binding uses component 500871, a one-second HP drain with `dotBase: -3`.
|
||||
|
||||
Rorik's own runtime actor applied the aura seven times at 15:00:46.945, 15:02:50.840, 15:04:51.240, 15:06:51.332, 15:09:22.430, 15:11:35.425, and 15:14:08.939. The event log records 17,022 total Blood Arrow self-damage across the route. The final application produced eight 105-HP ticks through 15:14:17.022. This is separate from the 9,013.69 effective damage from mobs in the final pack.
|
||||
|
||||
From Rorik's last healed state to the last observed combat event, the log contains 2,218.69 effective mob damage and 840 Blood Arrow self-damage. That leaves about 226 HP by arithmetic if the event and health snapshots are complete; the result endpoint instead reports 0 HP. The exact lethal transition is therefore unresolved.
|
||||
|
||||
## Limits and next ownership
|
||||
|
||||
The route has 181 periodic samples, but the last is at 15:12:47.140, before the final pack started. The trace contains no HP samples for the roughly 96-second final encounter, and the combat event stream ends at 15:14:17.526, 7.3 seconds before the results endpoint. The endpoint proves Rorik was down, but it does not supply the lethal timestamp or a continuous HP curve. Do not treat the event arithmetic as proof of the exact killing blow.
|
||||
|
||||
The evidence identifies two concrete confounders before any encounter tuning: the captured route harness stopped healing after 16 recorded inputs, and the Knight/Scout NPC rotation applied a 30-second, HP-draining Blood Arrow effect. The first belongs to `stabilizeCampaignPack` in `scripts/playtest-campaign-boss-pass.cjs`; the current Stockade migration removes its attempt-count ceiling and samples HP throughout pack handling. Existing encounter/deadline bounds still prevent an unbounded run. The second belongs to the companion ability and periodic-effect lifecycle in `src/game/partyRuntime.ts`, `src/game/partyAbilityAi.ts`, and `src/game/romNativePeriodicDamage.ts`. The Blood Arrow lifecycle is already under a focused follow-up. Do not change Anglo or dungeon damage from this evidence.
|
||||
|
||||
For the next live diagnostic, use Stockade. Capture party HP, player-to-ally distance, selected heal target, cast result, resource, and Blood Arrow aura/tick events throughout the full boss phase. Then compare incoming mob damage with effective healing after the NPC self-drain behavior and harness cap are isolated.
|
||||
|
||||
The subsequent verified-pair implementation now removes legacy idle drain for
|
||||
Knight/Scout and Scout/Rogue and uses owner-local toggle/deactivation cooldown
|
||||
and per-ranged-action costs. Focused native/compatibility player/NPC checks and
|
||||
ordinary Stockade UI evidence are in
|
||||
[the implementation](ROM_BLOOD_ARROW_TOGGLE_2026-10-04.md) and
|
||||
[the live report](ROM_BLOOD_ARROW_STOCKADE_PLAYTEST_2026-10-04.md).
|
||||
This correction does not fill the missing historical lethal sample or establish
|
||||
an exact cause for Rorik's old death.
|
||||
@@ -0,0 +1,104 @@
|
||||
# Stockade Blood Arrow targeted UI proof
|
||||
|
||||
Run `20261004-194732821` completed on the corrected final build in the full
|
||||
Stormwind Stockade (`stormwind-stockade`). It used the normal download and
|
||||
role-selection flow, with Boss Testing off and `gmTestMode` false. The parent
|
||||
build passed TypeScript, Vite, asset audits, compression, and release-bundle
|
||||
verification before capture. The playtest served all five expected frozen
|
||||
chunks and 141 JavaScript asset responses with HTTP 200:
|
||||
|
||||
- `index-CpWq1F33.js`
|
||||
- `GameRuntime-CSfKe7bD.js`
|
||||
- `combatStore-D4Bif_EK.js`
|
||||
- `PartyFrames-BDJ5ssyc.js`
|
||||
- `romAbilityCatalog-Dh-3_mot.js`
|
||||
|
||||
## Fixtures and input
|
||||
|
||||
Both profiles were prepared through the character UI as level-30 RoM
|
||||
characters before entering the dungeon. Telemetry was read-only. Dungeon entry,
|
||||
ability binding, movement, target selection, casts, and right-click aura actions
|
||||
used ordinary UI controls. No combat-time profile, gear, weapon, health, mana,
|
||||
cooldown, or mob-health edits were made.
|
||||
|
||||
| Fixture | Profile identity | Roster |
|
||||
| --- | --- | --- |
|
||||
| Primary | `Bloodarrowks`, `character-3fc723a3-01f2-46d4-81cb-b48125217eec`, level 30 Knight/Scout, RoM | Exact native-five complement verified: Priest/Knight, Knight/Scout player, Rogue/Warrior, Scout/Rogue, Mage/Warlock. |
|
||||
| HP-only | `Bloodarrowsr`, `character-7275636c-ebe2-4d7f-99b9-57f12fce34f9`, level 30 Scout/Rogue, RoM | Ordinary generated party: Knight/Scout, Priest/Knight, Rogue/Warrior and another Scout/Rogue. It duplicates the player's pairing and omits Mage/Warlock from the native-five complement; this composition gap remains open. |
|
||||
|
||||
Blood Arrow was discovered as `rom-scout-general-4` (DBC source 490434; the
|
||||
Knight/Scout alias is 499924). The real in-game primary bindings recorded for
|
||||
the Knight/Scout were face-bottom → Blood Arrow, face-left → Scout `Shot`
|
||||
(`rom-scout-general-0`, DBC 490423), and face-top → Holy Shield. The Scout/Rogue
|
||||
fixture had face-bottom → Blood Arrow, face-left → `Shot`, and face-top → Arrow
|
||||
of Essence. The character/equipment panel showed supplied level-30 ranged gear
|
||||
before combat.
|
||||
|
||||
The on-screen Blood Arrow tooltip labels it permanent and states that each
|
||||
offensive ranged-weapon skill costs 2.0% HP and 1.0% MP. That verifies the
|
||||
displayed rule; the live Knight/Scout sample below does not isolate those exact
|
||||
amounts.
|
||||
|
||||
## Results
|
||||
|
||||
- **Indefinite toggle and idle:** Blood Arrow was active at entry. The harness
|
||||
did not press its toggle while already active; it used the normal right-click
|
||||
path to deactivate it, then activated it again after the cooldown. During the
|
||||
separate 32.094-second Knight/Scout idle window, the aura remained active and
|
||||
the sampled combat log contained no Blood Arrow self-damage event. Incoming
|
||||
enemy damage and party healing were separately present in the sample.
|
||||
- **Player cancellation and cooldown:** Right-clicking the player's Blood Arrow
|
||||
buff removed the aura and set an approximately 9.9-second cooldown. Pressing
|
||||
the bound action while it was recharging produced no Blood Arrow cast event,
|
||||
left the aura absent, and showed “That ability is still recharging.” After
|
||||
readiness, the ordinary bound action restored the aura; using the same toggle
|
||||
again removed it. The final aura counts were 1 after reactivation and 0 after
|
||||
reuse-deactivation.
|
||||
- **Different-buff guard:** Right-clicking Holy Shield on Knight/Scout and Arrow
|
||||
of Essence on Scout/Rogue preserved each owner's Blood Arrow aura. Both
|
||||
checks passed using the actual buff UI.
|
||||
- **NPC owner isolation:** The visible Caelan Scout/Rogue party-frame Blood
|
||||
Arrow icon was right-clicked. Caelan (`party-damage-1-rom-scout`) lost only
|
||||
its own aura and entered a 9.864-second cooldown. The before/after cooldown
|
||||
maps show null for the healer, rogue, and mage both before and after; only
|
||||
Caelan changed from null to a Blood Arrow cooldown. No player AutoShot timer
|
||||
was added or simulated.
|
||||
- **Knight/Scout ranged cast:** The ordinary `Shot` action was accepted against
|
||||
a Stockade Defias inmate; the actual log contains both a `cast` and `damage`
|
||||
event from `__player__` for `rom-scout-general-0`. The pre/post sample was
|
||||
3420.955/3420.955 HP and 1315.028/1315.028 mana to 3206.955 HP and 1304.445
|
||||
mana. This window also records a 146-effective incoming hit from creature
|
||||
`creature-79046`; the HP delta therefore does not isolate Blood Arrow's cost.
|
||||
The mana sample also spans natural resource updates. Neither raw delta is
|
||||
claimed as the exact Blood Arrow cost.
|
||||
- **Scout/Rogue HP-only cast:** The same accepted `Shot` cast recorded HP
|
||||
2293.534 → 2247.534 (−46) with resource remaining 100 → 100 and no other
|
||||
player-directed combat event in the captured cast window. The observed HP
|
||||
change is consistent with the expected rounded 2% max-HP cost for this
|
||||
HP-only fixture.
|
||||
|
||||
The live sample does not isolate a clean Knight/Scout per-cast HP amount, does
|
||||
not expose a separately attributable NPC scheduled ranged-auto cost, and does
|
||||
not test the level-70 rider. The live proof does not quantify the existing
|
||||
hybrid damage modifier or its cap. These RoM fixtures remain targeted Needs
|
||||
Testing diagnostics, not balance certification. The combat segment was bounded;
|
||||
this report does not claim a full Stockade clear.
|
||||
|
||||
## Evidence
|
||||
|
||||
All screenshots and raw snapshots are in
|
||||
[`playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821`](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/).
|
||||
The full telemetry is in
|
||||
[`results.json`](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/results.json);
|
||||
the reusable run harness is [`playtest-stockade-blood-arrow.cjs`](../scripts/playtest-stockade-blood-arrow.cjs).
|
||||
|
||||
| UI state | Evidence |
|
||||
| --- | --- |
|
||||
| Level-30 rosters, Stockade picker/entry and supplied gear | [Knight/Scout roster](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-roster-level-30.png), [entry party](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-stockade-entrance-party.png), [Inventory & Equipment training-gear panel](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-body-and-gear.png), [Scout/Rogue roster](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/scout-rogue-roster-level-30.png) |
|
||||
| Active aura, tooltip/cost text and different-buff preservation | [Knight/Scout Blood Arrow](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-blood-arrow-active.png), [buff tooltip with permanent state and displayed cost](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-blood-arrow-buff-context.png), [other-buff click result](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-after-other-buff-right-click.png), [Scout/Rogue other-buff click result](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/scout-rogue-after-other-buff-right-click.png) |
|
||||
| >30-second idle and accepted ranged casts | [idle window](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-blood-arrow-idle-over-30-seconds.png), [Knight/Scout Shot](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-after-ranged-skill.png), [Scout/Rogue Shot](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/scout-rogue-after-ranged-skill.png) |
|
||||
| Player and NPC cancellation/cooldown | [player cooldown](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-right-click-off-cooldown.png), [activation rejected during cooldown](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-cooldown-activation-rejected.png), [reactivated](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-reactivated-after-cooldown.png), [toggle reused to deactivate](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-reuse-deactivated.png), [NPC owner aura](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-npc-blood-arrow-owner-buff.png), [NPC owner cooldown](../playtest-artifacts/rom-blood-arrow-stockade/20261004-194732821/knight-scout-npc-blood-arrow-owner-off.png) |
|
||||
|
||||
The run recorded zero page errors and zero HTTP errors. Chromium logged one
|
||||
non-blocking 404 for `/favicon.ico`; the expected game chunks were all served
|
||||
successfully.
|
||||
@@ -0,0 +1,25 @@
|
||||
# Blood Arrow toggle and cost contract — 2026-10-04
|
||||
|
||||
## Source identity
|
||||
|
||||
The Scout/Rogue current skill row identifies Scout General **Blood Arrow** as source skill `490434`. The RuneWaker import binds that row to local ability `rom-scout-general-4`. The matching current class page is [Chronicles of Arcadia — Scout/Rogue skills](https://chroniclesofarcadia.com/en/wiki/skills/list/2-3). Knight/Scout **Blood Arrow** is a distinct current source row, `499924`, on the [Knight/Scout skill page](https://chroniclesofarcadia.com/wiki/skills/list/6-2?locale=en). Its passive `499923` and Joint Blow `490420` are separate skills. The Knight/Scout ranged-skill surcharge is not applied to Scout/Rogue.
|
||||
|
||||
The current verified rows describe Blood Arrow as a toggle: recasting it, or right-clicking its buff icon, turns it off and starts a 10-second cooldown for that owner. The local import’s old 30-second expiry and 3% max-HP-per-second drain came from the stale RuneWaker snapshot. The indefinite toggle and removal of the legacy periodic self-damage binding are scoped to the verified Scout/Rogue and Knight/Scout owners; other builds retain the legacy imported effect pending their own source reconciliation. Activation itself has no health, mana, or focus cost for the verified pairs.
|
||||
|
||||
## Runtime behavior
|
||||
|
||||
- Player and owned NPC buff instances are owner-local for the verified pairs. Recast and right-click deactivate only the owner's Blood Arrow, remove its rider, and set the ability ready time to 10 seconds later. The context menu accepts only the clicked Blood Arrow aura with matching owner source and target; right-clicking another self-owned buff leaves Blood Arrow active. The persistent NPC frame keeps this cancelable indefinite icon visible while continuing to filter other long-term clutter. Player Status already displays persistent auras, so its layout is unchanged. Unverified builds do not receive the new toggle/deactivation cooldown handling. Death, removal, and roster synchronization clear the aura and stale cooldown for its owner.
|
||||
- The Knight/Scout source contract charges 2% of max HP and 1% of max MP once when an eligible offensive ranged-weapon skill cast commits. Ordinary Scout General skills and the pair’s own offensive elite rows are considered; Scout Primary-only rows, non-damage control abilities, Blood Arrow itself, melee abilities, and the ongoing Auto Shot mode are excluded. Joint Blow source skill `490420` is included by its source identity even though the local tooltip omits the ranged-weapon wording. An owner without enough resources cannot commit the skill.
|
||||
- Scout/Rogue Blood Arrow charges 2% max HP per ranged attack and no additional mana. The runtime charges eligible damaging Scout Primary/General skill casts and each owned NPC ranged auto swing while its own aura is active. The NPC path skips the swing if its owner cannot afford the health cost. Knight/Scout plain auto attacks do not receive the skill surcharge.
|
||||
- The aura’s existing ranged-damage effect is retained. The local rank-scaling model remains unverified at cap 80; this change does not invent or import a level-105 damage curve.
|
||||
- Blood Punishment’s 15% received-healing and 5% Holy-damage riders remain attached to the active Blood Arrow aura and therefore end with it. There is no separate rider timer.
|
||||
|
||||
Player ordinary auto attacks and repeated Auto Shot are not currently simulated as ranged events, so there is no player auto-attack hook to charge. This implementation does not add a new player ranged auto-attack system; full Scout/Rogue parity for player auto attacks remains open.
|
||||
|
||||
The current source tooltips state percentage HP/MP costs without distinguishing current from maximum pools. The simulator uses maximum HP/MP and rounds each cost to whole points; that percentage basis is a local interpretation. The published +105 damage value is not extrapolated to the project's level-80 cap.
|
||||
|
||||
## Verification
|
||||
|
||||
npx vitest run src/game/romKnightScoutBloodPunishment.integration.test.ts src/ui/AuraStrip.test.ts src/ui/PlayerStatusPanel.test.ts src/ui/partyResurrection.test.ts passes all 32 tests. Coverage includes ROM and WoW player costs and no-idle-drain checks, owned Knight/Scout activation and affordability in both rulesets, player recast/cooldown, Blood Punishment lifetime, and an owned Scout/Rogue ranged auto swing that charges once, keeps party and actor health synchronized, and receives Blood Arrow's ranged damage modifier. It also checks rank-resolved toggle behavior for verified owners, unchanged legacy behavior for an unverified Scout/Warrior, rejection of another buff's right-click, and rendered visibility of an NPC's tagged indefinite aura while unrelated long-term buffs remain filtered.
|
||||
|
||||
No dungeon playtest was run in this slice. Future live QA uses Stormwind Stockade (`stormwind-stockade`) as the default test dungeon; no Wailing Caverns route or test was added.
|
||||
@@ -1,5 +1,7 @@
|
||||
# Campaign boss-route playtest — 2026-10-04
|
||||
|
||||
> **Future QA default (2026-10-04):** Use Stormwind Stockade for new routine live tests. The Wailing captures and commands in this dated report are historical; follow [the current test policy](TEST_DUNGEON_POLICY.md) and root `AGENTS.md`. A new Wailing reproduction needs an explicit owner request.
|
||||
|
||||
## Scope and method
|
||||
|
||||
This pass extends ordinary campaign routes in Barren Caves and Wailing Caverns through their normal boss encounters. The scoped Playwright harness creates an isolated Priest through the UI, prepares the permitted level-30/Knight-secondary fixture before entry, enters the normal Dungeons picker as healer, and uses ordinary WASD, Tab, F1/F2, party-frame selection, learned bound abilities, and the visible resurrection control. Source navigation paths are movement guidance only. During the live campaign, game position, health, mana, cooldowns, combat targets, party positions, and dungeon results are read-only telemetry; no loot was taken and no level-cap or readiness setting was changed.
|
||||
|
||||
@@ -10,15 +10,17 @@ The owned-party direct-damage adapter also had two gaps that hid this rider in N
|
||||
|
||||
## Blood Punishment source and identity
|
||||
|
||||
The generated RuneWaker catalog identifies `499923` as the learnable level-70 Knight/Scout passive Blood Punishment, with prerequisite Blood Arrow `490420`; the source general active is Scout Blood Arrow `490434` (the current CoA corresponding active is `499924`). The local `learnmagic.db`, `magiccollectobject.db`, and `magicobject.db` SHA-256 values match the generated catalog's recorded hashes. Local component `623167` links its one-second `onTimeMagicId` to `499910` for 30 seconds. `Resource/luascript/02708.lua`'s `lua_bico_kni_sco_es_70_blood` checks owner buff `500871` and cancels `623167` when that Blood Arrow marker is absent; this is the old child-timer behavior.
|
||||
The generated RuneWaker catalog identifies `499923` as the learnable level-70 Knight/Scout passive Blood Punishment, with raw prerequisite ID `490420` (Joint Blow, not Blood Arrow); the source general active is Scout Blood Arrow `490434`. Current CoA publishes the Knight/Scout class variant as `499924`. The local `learnmagic.db`, `magiccollectobject.db`, and `magicobject.db` SHA-256 values match the generated catalog's recorded hashes. Local component `623167` links its one-second `onTimeMagicId` to `499910` for 30 seconds. `Resource/luascript/02708.lua`'s `lua_bico_kni_sco_es_70_blood` checks owner buff `500871` and cancels `623167` when that Blood Arrow marker is absent; this is the old child-timer behavior.
|
||||
|
||||
The [current CoA Knight/Scout skill list](https://chroniclesofarcadia.com/wiki/skills/list/6-2?locale=ar) still identifies Blood Punishment as Knight/Scout `499923`, Blood Arrow as Scout-general `499924`, and says Blood Arrow increases received healing by 15% and Light damage by 5% while active. The [10.2.1 patch history](https://chroniclesofarcadia.com/ru/patch/10-2-1-1000) records the 15% healing-received reduction for Knight/Scout Blood Punishment. The exact skill IDs and pairing match the local rows, so the current CoA rider replaces the stale local 50%/30-second child. The current page's level-105 examples do not change Healer Man's level-80 cap.
|
||||
The [current CoA Knight/Scout skill list](https://chroniclesofarcadia.com/wiki/skills/list/6-2?locale=ar) still identifies Blood Punishment as Knight/Scout `499923`, the Knight/Scout variant of Blood Arrow as `499924`, and says Blood Arrow increases received healing by 15% and Light damage by 5% while active. The [10.2.1 patch history](https://chroniclesofarcadia.com/ru/patch/10-2-1-1000) records the 15% healing-received reduction for Knight/Scout Blood Punishment. The passive identity and pairing match the local row, so the current CoA rider replaces the stale local 50%/30-second child. The current page's level-105 examples do not change Healer Man's level-80 cap.
|
||||
|
||||
The runtime attaches both modifiers directly to the existing caster aura tagged `rom-self-health-drain` for source skill `490434`. That keeps the rider actor-local and ties its lifetime to the active Blood Arrow aura already modeled by the simulator. The simulator still models the local Blood Arrow 30-second lifetime and 3%-of-maximum-HP periodic cost; this change does not claim full CoA toggle, deactivation cooldown, or per-ranged-skill HP/MP cost parity. The local 623167/499910 timer is intentionally not layered onto the current CoA rider.
|
||||
|
||||
### Remaining Blood Arrow base-contract work
|
||||
### Blood Arrow base-contract work at the time of this pass
|
||||
|
||||
This is source-confirmed but intentionally not implemented by the passive-rider fix. The [current CoA Scout general-skill page](https://chroniclesofarcadia.com/en/wiki/skills/list/1-2) documents Blood Arrow as a toggle that can be deactivated from its buff, with a ten-second cooldown on deactivation and an HP cost on physical attacks. The [10.7.0 patch notes](https://chroniclesofarcadia.com/en/patch/10-7-0-1000) also describe Blood Arrow's per-tick Mana cost. Healer Man's local `490434` instead remains a 30-second aura with a 3%-maximum-HP periodic drain and has no player toggle, deactivation cooldown, or per-offensive-attack HP/Mana charge. The general page's Blood Arrow row is `499998`, while the Knight/Scout page identifies the passive's active as `499924`; this audit does not assume those rows have an identical current cost contract. Keep these base-skill differences open and do not describe the pair as fully CoA-parity complete.
|
||||
**Identity correction from the subsequent continuation:** CoA list `1-2` is Warrior/Scout, and its Blood Arrow `499998` must not be treated as the Scout general skill. Scout/Rogue list `2-3` identifies `490434`; Knight/Scout list `6-2` identifies its variant `499924`. The local prerequisite `490420` is Joint Blow. See `docs/ROM_BLOOD_ARROW_TOGGLE_2026-10-04.md` for the subsequent pair-aware toggle/cost work and its current limits. The paragraph below records the earlier pending base-contract state.
|
||||
|
||||
This is source-confirmed but intentionally not implemented by the passive-rider fix. The [current CoA Warrior/Scout skill page](https://chroniclesofarcadia.com/en/wiki/skills/list/1-2) documents Blood Arrow as a toggle that can be deactivated from its buff, with a ten-second cooldown on deactivation and an HP cost on physical attacks. The [10.7.0 patch notes](https://chroniclesofarcadia.com/en/patch/10-7-0-1000) also describe Blood Arrow's per-tick Mana cost. Healer Man's local `490434` instead remains a 30-second aura with a 3%-maximum-HP periodic drain and has no player toggle, deactivation cooldown, or per-offensive-attack HP/Mana charge. The Warrior/Scout page's Blood Arrow row is `499998`, while the Knight/Scout page identifies the passive's active as `499924`; this audit does not assume those rows have an identical current cost contract. Keep these base-skill differences open and do not describe the pair as fully CoA-parity complete.
|
||||
|
||||
## Other active identities
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# RoM Native Party Campaign Route Playtest — 2026-10-04
|
||||
|
||||
> **Future QA default (2026-10-04):** Use Stormwind Stockade for new routine live tests. The Wailing captures and commands in this dated report are historical; follow [the current test policy](TEST_DUNGEON_POLICY.md) and root `AGENTS.md`. A new Wailing reproduction needs an explicit owner request.
|
||||
|
||||
## Scope and build
|
||||
|
||||
Tested bounded entrance-to-encounter segments in Barren Caves and Wailing Caverns using the ordinary campaign picker. Each run used a UI-created level-30 RoM Priest / Knight healer and four active RoM NPC companions. Both dungeons entered in healer role with `gameMode=dungeon`, `gmTestMode=false`, and no Boss Testing state. Only initial profile level and secondary class were prepared for the isolated test profile. Dungeon entry, WASD movement, Tab targeting, party commands, ability keys, and ally selection used the game UI and normal inputs. Combat health, mana, damage, positions, cooldowns, enemy health, and targets were not changed by the harness.
|
||||
@@ -52,4 +54,4 @@ Both route runs reported zero browser page exceptions. Each recorded one console
|
||||
|
||||
## Harness
|
||||
|
||||
`node scripts/playtest-native-routes.cjs --route=<barren-caves|wailing-caverns> --route-seconds=90` runs an independent UI-created profile and one bounded segment. The default records both routes sequentially and carries natural level progression into later entry. Run and review each route independently to control its starting profile at level 30.
|
||||
The current `node scripts/playtest-native-routes.cjs --route-seconds=90` default runs an independent UI-created profile and one bounded **Stormwind Stockade** segment. An explicitly requested Barren reproduction uses `--route=barren-caves`. Historical Wailing reproduction requires the owner's explicit request and `--historical-wailing --route=wailing-caverns`; it is no longer the default. The captures above used the older two-route harness. Run and review each authorized route independently to control its starting profile at level 30.
|
||||
@@ -1,5 +1,7 @@
|
||||
# RoM Vow of Silence live Boss Testing evidence — 2026-10-04
|
||||
|
||||
> **Future QA default (2026-10-04):** Use Stormwind Stockade for new routine live tests. The Wailing captures and commands in this dated report are historical; follow [the current test policy](TEST_DUNGEON_POLICY.md) and root `AGENTS.md`. A new Wailing reproduction needs an explicit owner request.
|
||||
|
||||
## Corrected final-build replay
|
||||
|
||||
The corrected production build passed the dedicated live Boss Testing replay. A UI-bound RoM Priest/Knight used Vow of Silence on Lady Anacondra's actual source-scheduled Lightning Bolt. The Bolt ended before its scheduled completion, the boss held the 8.4-second silence status for its full duration, and no nonphysical active cast or cast start was observed while that status was active. Lady naturally resumed casting Nature Lightning Bolt 61 ms after the status expired. The final harness recorded 39 active-status samples.
|
||||
|
||||
@@ -0,0 +1,199 @@
|
||||
# Stockade mechanics continuation — 2026-10-04
|
||||
|
||||
The owner replaced Wailing Caverns with Stormwind Stockade for new routine QA while authorizing the pending Blood Arrow and Barren tank-death work. Independent GPT-6 Luna extra-high subprocesses cover the mechanic, full Stockade route, separate live toggle proof, historical incident analysis and read-only reviews.
|
||||
|
||||
## Scope and documentation
|
||||
|
||||
Root `AGENTS.md`, `README.md`, `docs/TEST_DUNGEON_POLICY.md`, report triage, dungeon-pipeline guidance, the mechanics backlog and canonical Obsidian workflows now direct future agents to the full `stormwind-stockade` dungeon. Shared constants/UI download helpers live in `scripts/playtest-defaults.cjs`. Reusable UI, camera, performance, party, healing, native-stat, Hunter and generic Boss Testing harness defaults use Stockade/Hamhock. Dedicated Lady/Vow and old native-combat live reproductions require an explicit historical flag; their old results keep their original labels. No-selector native routes now use Stockade.
|
||||
|
||||
Existing Wailing import assets, source unit fixtures, bundled starter content and dated evidence remain valid in their original scope. No new Wailing live run is part of this task. Level cap 80, existing-save WoW compatibility, actor-local stat mode, Needs Testing policy and no-new-loot-wiring remain in force.
|
||||
|
||||
## Evidence owners
|
||||
|
||||
- `docs/ROM_BLOOD_ARROW_TOGGLE_2026-10-04.md`: source identity, pair-aware toggle/cost implementation and focused coverage.
|
||||
- `docs/ROM_BARREN_TANK_DEATH_2026-10-04.md`: historical final-pack incident and capture limits.
|
||||
- `docs/STORMWIND_STOCKADE_PLAYTEST_2026-10-04.md`: actual final-build route, boss objectives, mechanic, camera and screenshot proof.
|
||||
- `docs/ROM_BLOOD_ARROW_STOCKADE_PLAYTEST_2026-10-04.md`: separate ordinary-UI Knight/Scout and Scout/Rogue toggle/cost proof.
|
||||
- `docs/STOCKADE_UTILITY_ATTACK_AUDIT_2026-10-04.md`: exact source and live-event evidence for non-damaging stance/shout spells incorrectly compiled as attacks.
|
||||
|
||||
## Mechanic and incident findings
|
||||
|
||||
Blood Arrow's current contract applies only to the verified Knight/Scout and Scout/Rogue owners, including every rank selected by `abilityAtLevel`. Its aura stays active until removed, has no legacy idle self-drain, and recast or right-click deactivation starts an owner-local ten-second cooldown. Knight/Scout offensive ranged-weapon skills cost 2% max HP plus 1% max MP; Scout/Rogue damaging ranged skills and owned NPC ranged auto swings cost 2% max HP. The Blood Punishment rider ends with its aura. Unverified pairings retain their previous imported behavior.
|
||||
|
||||
Player recurring ranged Auto Shot is still absent, and the retained local 10% ranged damage aura is not a sourced current cap-80 curve. These remain explicit backlog items. No new loot system, level-cap change or readiness promotion was introduced.
|
||||
|
||||
The separate live run `20261004-194732821` passed both owners' ordinary buff cancellation, cooldown rejection/reactivation/reuse and unrelated-buff protection, plus owner-only NPC cancellation. Scout/Rogue's isolated Shot lost 46 HP with no MP cost; Knight/Scout's HP sample overlapped an enemy hit and its resource sample included natural updates, so that live window does not prove exact cost amounts. Focused integration covers those amounts, scheduled NPC auto costs and the level-70 rider. Root inspected the actual final screenshots and raw roster telemetry. The Knight/Scout fixture has the exact native-five complement; the optional Scout/Rogue fixture duplicates Scout/Rogue and omits Mage/Warlock, now recorded as an open companion-selection gap.
|
||||
|
||||
The historical Barren tank death is confounded by the old harness's sixteen-attempt heal ceiling and Blood Arrow's periodic self-cost. The last lethal transition was not sampled, so the report does not assign an exact cause or justify encounter damage tuning. The current Stockade harness removes that arbitrary heal ceiling and samples health throughout encounters.
|
||||
|
||||
The first Stockade route failed near Kam. Actual combat events exposed Defensive/Battle Stance and two Demoralizing Shouts dealing damage despite their pinned DBC rows containing only unsupported utility auras. The first correction omitted IDs 7164, 7165, 16244 and 13730 when their audited signatures matched; their actual utility effects remain unmodeled. Seventeen entity attack rows across ten definitions were removed, with supported Shield Slam/Rend and both affected bosses' real mechanics preserved. Regeneration also caught up existing compiler school/kind metadata: 2,392 each of `schoolMask`, `damageOrigin`, `damageClass` and 1,751 `attackKind` fields. Structural normalization found no other catalog drift or encounter scalar changes.
|
||||
|
||||
The failed route also had a run-store discovery omission and insufficient cast-readiness/LOS telemetry. The retry asserts progress-store discovery, waits for zero remaining GCD/personal cooldown, records actual cast starts and whole-log healing, and uses ordinary Recall plus one measured retry for an explicit blocked heal. Those capture limits and the source defect do not establish a sole cause of the old death.
|
||||
|
||||
The utility-corrected retry `20261004-202642234` reached checkpoint 122 of 481, about 263.1 of 759.31 route metres, before player defeat near Kam. The actual run store records Targorr as the only completed boss (1/5); this is a failed diagnostic, not a full clear. It contains 134 Urgent Heal cast events, 71 effective healing events and 43,738.6 effective healing. All four omitted utility IDs are absent from the combat log. Of 73 attempted inputs without a recorded cast start, 28 had explicit line-of-sight rejection and 33 were blocked by an enemy control effect; the remaining 12 had overwritten feedback. This does not identify the source of every control or a sole cause of defeat.
|
||||
|
||||
That retry exposed further import and harness defects. Battle Shout 9128 and Improved Blocking 3419 still produced damage despite utility-only source effects; Backhand 6253 and mixed-damage Shield Slam 8242 had incorrect delivery/target/range. The second source correction removes 51 more verified utility/extra-attack rows across 20 definitions and corrects 30 supported attack/control rows. An independent structural comparison found only those changes and corresponding mechanic-ID removals on 15 bosses, with no additions or unrelated encounter changes. Group Heal was already learned and bound to Alt+Digit2, but the planner scanned only primary bindings. The corrected harness scans every binding layer, captures owned-party selection and enemy control state, and supports ordinary death-checkpoint recovery.
|
||||
|
||||
The expanded source audit confirms additional utility-only stance, haste, dual-wield, extra-attack, disarm and debuff spells that must not become direct hits. Real hostile melee damage/control and source-centered fear/stun effects are preserved with verified targets and ranges. The compiler uses separate Ascension and Epoch spell sources by recipe, with exact profile-specific signatures. In particular, the pinned Epoch Kick 11978 has real damage plus a six-second interrupt, while Stockade's Ascension row is a pure four-second interrupt. Epoch's missing duration/radius tables use the compiler's existing patch-S fallback. This is a local source contract, not a claim of pristine Epoch timings. Real utility effects, Chain Lightning fan-out, secondary-target shout triggers, sourced Rend ticks and Enrage values remain explicit gaps.
|
||||
|
||||
Independent harness review confirmed that ordinary checkpoint respawn needs ordered corridor replay rather than movement straight to the interrupted waypoint. The corrected driver records replay separately, allows new boss kills during recovery while requiring prior progress to remain, and distinguishes early native completion from completed replay. Production spell-school discovery matches and retains the actual pure helper function; chunk export aliases are minified and can collide, so a bare alias is insufficient. The reviewed campaign cast window already counted Group Heal recipients; explicit recipient sets improve attribution and fix the separate entrance-segment aggregation rather than correcting a proven campaign event-count defect.
|
||||
|
||||
## Verification
|
||||
|
||||
The final owner-scope regression selection passed 187/187 across five files (including 15 Blood Arrow integration checks). The UI correction selection passed 32/32 across four files: those same 15 integration checks plus 17 aura/status/party rendering checks. Stockade navigation passed 16/16; the current shared workspace avatar checks passed 56/56 across eleven files. Ready-five passed 7 Vitest and 20 Python checks. This totals 283 distinct Vitest and 20 Python checks, without a full-suite or all-class balance run. Concurrent avatar edits are preserved and are not attributed to this task.
|
||||
|
||||
The refreshed enemy attack/casting/damage-type/content checks passed another 24 checks, and the final source-aware campaign catalog passed 33/33. These add 57 distinct checks, for **340 Vitest and 20 Python** across the task. Root independently reran this 57-check selection and Ready-five after the second regeneration, verified JSON/compressed catalog equality, and reproduced the exact 51-removal/30-correction structural diff. A stale registry-total assertion (92 versus the existing 98) was corrected with source-snapshot coverage for the six additional RuneWaker definitions; the new SmartAI fixture lookup also received a typed key after the first build caught its JSON-index error.
|
||||
|
||||
Nineteen root-owned default/helper harnesses passed Node syntax checks; that does not claim all migrated legacy harnesses were rerun. The separate new Blood Arrow harness and coordinated campaign harness also pass syntax checks. A final independent default audit found one future Wailing slice-playtest prompt; it now explicitly defers that dungeon until an owner request. `npm run build` passed TypeScript, Vite, asset audits, static compression and release-bundle verification. The normal prebuild catalog generation is existing build behavior, not new loot wiring.
|
||||
|
||||
Blood Arrow live-test chunks: `index-CpWq1F33.js`, `GameRuntime-CSfKe7bD.js`, `combatStore-D4Bif_EK.js`, `PartyFrames-BDJ5ssyc.js`, `romAbilityCatalog-Dh-3_mot.js`. An intermediate build caught a missing UI import; it was restored before this successful build. Earlier setup captures are labeled pre-correction exploration.
|
||||
|
||||
The subsequent utility-corrected build passed TypeScript, Vite, asset audits, compression and release-bundle verification. Frozen route-test chunks are `index-Cnzz9c5G.js`, `GameRuntime-BeKkNayj.js`, `combatStore-CtB1A5Sm.js`, `PartyFrames-CoDzf_mJ.js`, `romAbilityCatalog-BZyh1vZY.js`, and `dungeonSession-Bct86pfr.js`. The build's module report maps the actual progress-store owner to `dungeonWorldInteraction-DRqE4yxE.js`; its relocation between builds requires source-owner discovery from that report. The first retry's guard stopped before route inputs when the old guessed owner was absent. That intermediate build produced only partial exploratory route evidence; the final source-aware result follows below. Aggregate campaign results now distinguish a completed diagnostic from a verified full clear and include actual `fullClearStatus`, blocked-route status and boss progress.
|
||||
|
||||
The final source-aware build also passed TypeScript, Vite, asset audits,
|
||||
compression and release-bundle verification. Current frozen assets are
|
||||
`index-CM5EW2MK.js`, `GameRuntime-aKrUucEK.js`, `combatStore-o8tawtxY.js`,
|
||||
`PartyFrames-Bm7f0aVD.js`, `romAbilityCatalog-D-lLBXpt.js`, and
|
||||
`dungeonSession-BeNxGHr9.js`; the module report identifies the run-store owner
|
||||
as `dungeonWorldInteraction-coBQV5ap.js`. An independent read-only subprocess
|
||||
decoded all 22 pinned spell IDs from both DBC inputs and found no concrete
|
||||
source/implementation issue. Smoke Bomb's raw range is self-only; runtime
|
||||
range 5 is the existing hostile-target gate adapted to its sourced radius 5,
|
||||
not a raw SpellRange claim.
|
||||
|
||||
## Final ordinary Stockade result
|
||||
|
||||
The frozen source-aware build cleared Stormwind Stockade through ordinary
|
||||
campaign input in `playtest-artifacts/campaign-boss-pass/final-build-20261004-214255695/`.
|
||||
Root independently checked the raw route JSON and inspected the actual native
|
||||
results screenshot, `stormwind-stockade-boss-arrival.png`: **FULL DUNGEON CLEAR,
|
||||
5/5 bosses, 17:37.7**, difficulty 1 / Easy / Normal. The persistent run store
|
||||
contains Targorr, Kam, Hamhock, Bazil and Dextren's five required IDs. This is a
|
||||
verified clear, not an inference from route position or the area HUD.
|
||||
|
||||
The Priest/Knight player and all four named NPCs use native RoM stats. The
|
||||
player naturally advances from level 30 to 39. All five survive at the endpoint;
|
||||
Rorik dies once and returns through the ordinary **Rez dead members** control.
|
||||
There is no observed player death, checkpoint respawn or corridor replay in
|
||||
this successful run, so the reviewed player-recovery path is not live-proven by
|
||||
this capture. The native results screen stops further route inputs at waypoint
|
||||
462/481, before Dextren's source anchor; natural earlier boss kills count.
|
||||
|
||||
Whole-log player healing contains 424 events, 203 with positive healing,
|
||||
totaling **158,465.20 effective healing** and 423,321.80 overheal. Distinct input
|
||||
windows separately record 169 attempts, 166 matching cast starts and 160
|
||||
effective windows. All 34 ordinary Alt+Digit2 Group Heal inputs start and heal,
|
||||
totaling 66,939.01 effective healing across recipients. Player damage has 53
|
||||
positive events totaling 99,019. These counters do not use the ordinary
|
||||
entrance-segment summary schema. The route owner corrected the initially zero
|
||||
aggregate counters using this saved raw evidence, without rerunning gameplay.
|
||||
Only `results.json` derived metadata changed; the detailed route JSON and
|
||||
screenshots remain intact. It now separates the configured entrance-segment
|
||||
duration from the 1,058,913 ms observed campaign evidence span and native time.
|
||||
|
||||
An independent read-only tank audit found a strongly supported final hit from
|
||||
Defias Inmate `creature-79108`. Rorik's last living sample has 1,524.18 HP;
|
||||
the following five logged hits total that amount, ending in a 209.18 effective
|
||||
basic attack. The next sample confirms zero HP. There is no dedicated combat
|
||||
death event, so this is damage arithmetic with a sample-bounded transition.
|
||||
His last direct heal restores 868 HP. A subsequent three-second Group Heal
|
||||
heals Caelan but resolves 701 ms after Rorik's inferred lethal hit. The damage
|
||||
arithmetic implies he is already at zero, and the living-recipient filter
|
||||
would exclude him. The casualty observation is 139 ms after heal resolution;
|
||||
there is no dedicated death or recipient-selection event. Earlier direct heals
|
||||
succeed at 14.207 m and player control is unblocked. This does not establish
|
||||
a range or LOS failure. The deeper source check corrected the initial radius
|
||||
inference: Group Heal's ability radius is 12, but its party-heal effect omits
|
||||
radius and the shared player/NPC recipient resolver defaults to 30. Adjacent
|
||||
samples put Rorik within 30 while alive. That separate fidelity gap is now in
|
||||
the mechanics backlog; the frozen tested build is unchanged.
|
||||
No Rorik Blood Arrow activation or cost is recorded before the death; unlike
|
||||
the historical Barren capture, there is no evidence of a legacy self-drain
|
||||
contribution. Per-recipient alive/range/LOS telemetry would improve future
|
||||
attribution; this one trace does not justify enemy damage tuning.
|
||||
|
||||
Hamhock dies during an earlier pack, before the named boss checkpoint. His log
|
||||
contains actual Nature Chain Lightning damage, but no Vow attempt; Vow
|
||||
cancellation remains unverified in this run. Root inspected entry, roster,
|
||||
25/50/75-percent and result images: loaded bodies and equipped silhouettes are
|
||||
visible, with party overlap at some samples. The entrance camera probe records
|
||||
held right-drag yaw -0.378 radians, zero released yaw change and null pointer
|
||||
lock. There are no page errors; the aggregate console capture contains only
|
||||
the local favicon 404. No new loot wiring or loot-menu action was introduced.
|
||||
|
||||
The scoped live report retains the failed exploratory runs, exact build assets,
|
||||
capture limitations and ordinary revival evidence. The final release-check
|
||||
transcript for the saved repository changes is
|
||||
`playtest-artifacts/campaign-boss-pass/release-check-final-20261004.txt`.
|
||||
|
||||
## Bounded interrupt diagnostic
|
||||
|
||||
The separate `--stockade-vow-diagnostic` campaign mode watches Hamhock during
|
||||
ordinary pack triage, selects him through Tab and uses the UI-bound Vow key.
|
||||
It requires a living target and the same live attack/start/end tuple at input,
|
||||
then a completed player Vow cast on Hamhock, the actual owned
|
||||
`rom-priest-vow-of-silence` CombatAura with refreshed `appliedAt`/`expiresAt`,
|
||||
and disappearance before scheduled release without matching Chain Lightning
|
||||
damage. A mob-status owner tuple is insufficient: aura control uses an
|
||||
`aura:` source-ability marker without a player owner. Vow's silence applies
|
||||
before its interrupt effect, so school-lock advancement is supplemental.
|
||||
|
||||
Independent Luna review passed after correcting the aura observation and
|
||||
deadline guard. The driver checks readiness, range, control, school locks,
|
||||
player life and overlays, and stops input on proof, target death or its
|
||||
900-second deadline. Targeted results remain separate from full-clear status.
|
||||
The existing production build stays frozen; only the driver and evidence
|
||||
reports change. Actual diagnostic outcome belongs to the live report.
|
||||
|
||||
The first targeted capture, `final-build-20261004-224251892`, ends at
|
||||
Hamhock's natural defeat with three recorded boss IDs and all five actors alive.
|
||||
It observes five interruptible Chain Lightning windows and five normal
|
||||
Shift+Digit5 presses, but no completed Vow cast or owned Vow aura. Two windows
|
||||
retain explicit "You must face that target" feedback; a separate window
|
||||
records Chain Lightning damage at its scheduled release. Cancellation is
|
||||
unverified, not evidence of a Vow runtime failure. Root inspected the actual
|
||||
endpoint image, which shows Hamhock's existing boss-card notification rather
|
||||
than a full-clear panel. The capture remains intact. A narrow driver retry
|
||||
uses ordinary right-drag input to face the observed target and records the
|
||||
actual camera yaw used by the player's combat spatial actor.
|
||||
|
||||
The paced retry, `final-build-20261004-230719179`, observes six live cast
|
||||
windows but issues zero Vow inputs. Its canvas guard rejects every fixed
|
||||
mid-height drag: the first two path points hit the visible boss notification,
|
||||
while the remaining points hit the canvas. Hamhock is naturally defeated,
|
||||
three boss IDs are recorded and all five survive. This capture does not test
|
||||
Vow. The follow-up correction selects an actually clear canvas row through
|
||||
read-only hit tests, retaining the paced input, release and cast guards.
|
||||
|
||||
The final targeted capture, `final-build-20261004-232722030`, **confirms one
|
||||
live player Vow cancellation** from four watched Hamhock cast windows and one
|
||||
ordinary Shift+Digit5 input. Root independently checked the raw route events,
|
||||
owned aura, facing evidence and actual endpoint screenshot. It uses the same
|
||||
frozen `index-CM5EW2MK.js` build as the full clear.
|
||||
|
||||
Chain Lightning starts at `1791157080692` and would release at
|
||||
`1791157082192`. A paced normal right-drag changes yaw by 1.600262 radians,
|
||||
leaving a 1.25-radian heading error inside the hostile arc. The original cast
|
||||
remains live throughout the turn; player displacement is effectively zero,
|
||||
mouse look ends on release and pointer lock stays null. The chosen clear
|
||||
canvas row is 60% of viewport height, verified from live DOM hit tests.
|
||||
|
||||
The player Vow completes on Hamhock at `1791157081779`; the owned
|
||||
`rom-priest-vow-of-silence` aura has that application time and expires at
|
||||
`1791157090179`. At `1791157081834`, Hamhock remains alive at 55,483 HP and
|
||||
the watched cast is gone, 358 ms before its scheduled release. Seven
|
||||
read-only follow-through samples continue through `1791157082310`, 118 ms
|
||||
past release, with no matching Chain Lightning damage. The last sample still
|
||||
shows the living boss at 54,974 HP and no active cast. School-lock advancement
|
||||
is not observed; silence-first cancellation supplies the proof.
|
||||
|
||||
This diagnostic stops gameplay input at checkpoint 213, with Targorr and Kam
|
||||
as its two recorded boss IDs. It is separate from the verified 5/5 full clear.
|
||||
Rorik, Durnik and Caelan each die once and return through the normal **Rez dead
|
||||
members** control; all five are alive at the endpoint. The native-stat player
|
||||
advances from 30 to 35. There is no player death or corridor replay, so that
|
||||
recovery path still lacks live proof. The inspected endpoint image shows
|
||||
Hamhock alive and loaded equipped bodies, with party overlap and a wall
|
||||
occupying much of the view. No page errors occur; the only console error is
|
||||
the local favicon 404. No runtime, catalog or build changes are made for the
|
||||
three targeted captures.
|
||||
@@ -0,0 +1,154 @@
|
||||
# Stockade utility attack source audit — 2026-10-04
|
||||
|
||||
**Finding:** The flagged entries were real NPC damage packets in the failed route artifact, not damage caused by the adjacent player actions. The route’s old generated attacks lacked explicit effects, so the runtime treated them as direct damage. Two source corrections now omit thirteen audited utility/extra-attack IDs and preserve supported damage/control with verified delivery, targets and ranges; no runtime aura values or encounter damage were guessed.
|
||||
|
||||
## First correction and failed-route evidence
|
||||
|
||||
| Stockade source | Failed-route generated attack | Captured route events |
|
||||
| --- | --- | --- |
|
||||
| Kam Deepfury, entry 1666 / actor `creature-79088`; spell 7164 Defensive Stance | `smart-1666-0-defensive-stance`, primary target, projectile, damage multiplier 1.35 | 14 records, 12 landed, 6,079.14 effective damage; 10 records hit Durnik for 4,991.14 total |
|
||||
| Defias Inmate, entry 1708; spell 7165 Battle Stance | `spell-7165`, primary target, projectile, damage multiplier 1.12 | 11 records, 10 landed, 2,577.78 effective damage |
|
||||
| Defias Convict, entry 1711; spell 16244 Demoralizing Shout | `spell-16244`, primary target, projectile, damage multiplier 1.12 | 27 records, 24 landed, 5,115 effective damage |
|
||||
| Defias Insurgent, entry 1715; spell 13730 Demoralizing Shout | `spell-13730`, primary target, projectile, damage multiplier 1.12 | 17 records, 16 landed, 4,620.29 effective damage |
|
||||
|
||||
These four IDs account for 69 recorded events, 62 landed, and 18,392.20 effective damage in the failed artifact. They contributed damage during the attempt, but the known LOS and GCD harness problems prevent assigning them as the sole cause of any death or route failure. The refreshed campaign catalog contains none of these four as direct-damage attacks.
|
||||
|
||||
## Source contract
|
||||
|
||||
The compiler’s default 3.3.5a Ascension source is `../LadiksMPQEditor/client-current/area-52/patch-D/DBFilesClient/Spell.dbc` (`ASCENSION_SPELL_DBC` can override it). Its SHA-256 is `2f77f18b91ffbae32a19568e4bc05ec78ee384b6ba8dd2a6e05f0e97abbb2dce`, matching the local pin in `src/game/ascensionCustomEncounterCatalog.ts`. The DBC effect rows show:
|
||||
|
||||
- 7164 Defensive Stance and 7165 Battle Stance each contain only effect 6 (`APPLY_AURA`), aura 36 (`MOD_SHAPESHIFT`), caster target A 1, and target B 0. Their misc values are 18 and 17. Neither has a damage opcode.
|
||||
- 16244 contains only `APPLY_AURA`, aura 79 (`MOD_DAMAGE_PERCENT_DONE`), target A 22 (`TARGET_SRC_CASTER`), target B 15 (`TARGET_UNIT_SRC_AREA_ENEMY`), misc value 1, and no damage opcode.
|
||||
- 13730 contains only `APPLY_AURA`, aura 166 (`MOD_ATTACK_POWER_PCT`), with the same source-centered enemy-area target pair, misc value 0, and no damage opcode.
|
||||
|
||||
The generated `azerothCoreWorldAi.json` identifies the AzerothCore world SQL snapshot as commit `4d9d1d4b5723e819c5c390f6ca1177283dbfb8e3`. Its exact rows agree with the read-only historical SQL reference under `../wow-pvt-server-backups-2/azerothcore-wotlk/data/sql/base/db_world/`:
|
||||
|
||||
- Entry 1666, row 0 casts 7164 in combat with `target_type=1` (`SMART_TARGET_SELF`).
|
||||
- Entry 1708, row 0 casts 7165 out of combat with `target_type=1` (self). The creature spell list also includes 7165, which is why the generic spell-list path had incorrectly emitted an in-combat attack.
|
||||
- Entry 1715, row 1 casts 13730 in combat with `target_type=1` (self). The DBC specifies the source-centered enemy area.
|
||||
- Entry 1711’s creature spell list includes 16244; its SmartAI rows do not declare it as a primary-target damage action.
|
||||
|
||||
## Owning boundary and correction
|
||||
|
||||
The defect belonged to `scripts/dungeon-pipeline/compile-campaign-catalog.mjs`: `spellSemantic()` did not support these aura families, and `spellAttack()` filled the missing semantics with an inferred direct-damage attack. The generic creature-spell path also lost the Inmate’s out-of-combat phase; the SmartAI path could turn a self target into primary when constructing an attack.
|
||||
|
||||
The first source pass recognized only the four audited spell IDs and their pinned aura opcode, aura type, source target pair, and misc value. With no supported semantic or direct-damage opcode, each attack was omitted. A signature change failed generation explicitly. Null results were filtered from both creature-spell and SmartAI paths.
|
||||
|
||||
The runtime’s generic aura effect does not faithfully model shapeshift form 36 or the outgoing damage / attack-power modifiers here. Omitting unsupported utility spells keeps them from becoming damage while avoiding invented aura magnitudes. No runtime schema change was needed. The first compiler refresh removed these four IDs from 17 generated entity rows across 10 dungeon definitions; no other spell IDs were suppressed in that pass. At the end of that pass, Kam retained Shield Slam 8242 and Improved Blocking 3419, and Houndmaster Grebmar retained 21049 and 15615 without a fallback surge. The second pass below removes 3419 and retargets 8242. Stockade Rend 6547 / 16509 remain, and mixed-damage Shield Slam 8242 remains a control effect with its supported damage multiplier.
|
||||
|
||||
The generated catalog had additional pre-existing drift: the committed compiler already emitted `schoolMask`, `damageOrigin`, and `damageClass` (plus `attackKind` where applicable), but the committed generated JSON had none of these fields on 3,762 attacks. The first refresh added 2,392 `schoolMask`, 2,392 `damageOrigin`, 2,392 `damageClass`, and 1,751 `attackKind` fields. Its structural comparison confirmed that, after removing those four already-supported metadata fields and the four first-pass utility attack IDs from the pre-refresh catalog, the result exactly matched the refreshed JSON; only the corresponding two `mechanicIds` entries were also removed. No health, damage multiplier, or encounter scalar changed in that pass.
|
||||
|
||||
The earlier completed backlog item about preserving enemy damage class and school
|
||||
covers damage typing, not non-damaging NPC aura semantics or SmartAI self/phase
|
||||
handling. No narrower item covered these rows at audit start. The four-spell
|
||||
damage-fallback correction now has its own completed item in
|
||||
`docs/ACTIVE_CLASS_MECHANICS_BACKLOG.md`; full utility aura modeling remains open.
|
||||
|
||||
Verification: `node --check scripts/dungeon-pipeline/compile-campaign-catalog.mjs` passed; the catalog generator refreshed `src/game/generated/dungeonCampaignCatalog.json` and its compressed TypeScript output; the focused `dungeonCampaignCatalog.test.ts` Stockade utility regression passed. No full suite, production build, browser QA, or route retest was run.
|
||||
|
||||
The coordinating parent subsequently passed the corrected campaign catalog at
|
||||
32/32, enemy attack/casting/damage-type/content checks at 24/24, Ready-five at
|
||||
7 Vitest plus 20 Python checks, and the utility-corrected production build.
|
||||
The registry-total regression now verifies the six existing additional
|
||||
RuneWaker definitions from their committed source snapshots rather than retaining
|
||||
the stale 92-entry total; the current registry has 98 definitions. The normal
|
||||
Stockade campaign retry uses this new build and is documented separately in
|
||||
`docs/STORMWIND_STOCKADE_PLAYTEST_2026-10-04.md`.
|
||||
|
||||
## Source-semantic pass two
|
||||
|
||||
The corrected route exposed more Stockade contract errors: Backhand 6253 was a
|
||||
random-party projectile instead of a victim stun at melee range; Shield Slam
|
||||
8242 was self-targeted despite combining victim stun and damage; and Battle
|
||||
Shout 9128 plus Improved Blocking 3419 were emitted as damage packets. The
|
||||
same source review found wrong targeting or range for Kick 11978, Strike 11976,
|
||||
Backstab 15657, Chain Lightning 421, Intimidating Shout 5246, Frightening
|
||||
Shout 19134, and Smoke Bomb 7964.
|
||||
|
||||
The compiler tags parsed spells with the recipe's DBC profile and validates an
|
||||
exact ordered signature for every audited ID: range index, school mask, damage
|
||||
class, duration, effect type/aura/base/mechanic/targets/radius/misc, and period.
|
||||
An unmatched profile or changed signature fails generation. Unsupported
|
||||
utilities are omitted only after the selected profile signature matches and
|
||||
has no supported semantic or direct/mixed damage effect.
|
||||
|
||||
| Utility/extra-attack ID | Removed rows | Affected definitions |
|
||||
| --- | ---: | --- |
|
||||
| 674 Dual Wield | 1 | Stormwind Stockade |
|
||||
| 2457 Battle Stance | 4 | Shadowfang Keep, Stormwind Stockade, Uldaman |
|
||||
| 3391 Thrash | 26 | Blackrock Depths, Blackrock Spire, Blood Furnace, Deadmines, Dire Maul, Maraudon, Razorfen Downs, Scarlet Monastery, Scholomance, Shadow Labyrinth, Shattered Halls, Stormwind Stockade, Stratholme, Sunken Temple, Uldaman, Zul'Farrak |
|
||||
| 3419 Improved Blocking | 1 | Stormwind Stockade |
|
||||
| 6713 Disarm | 7 | Hellfire Ramparts, Scarlet Monastery, Shadowfang Keep, Steamvault, Stormwind Stockade, Stratholme, Uldaman |
|
||||
| 6742 Bloodlust | 4 | Blackrock Spire, Scarlet Monastery, Stormwind Stockade, Uldaman |
|
||||
| 9128 Battle Shout | 6 | Blackrock Depths, Dire Maul, Razorfen Downs, Razorfen Kraul, Stormwind Stockade |
|
||||
| 17230 Infected Wound | 1 | Stormwind Stockade |
|
||||
| 29651 Dual Wield | 1 | Stormwind Stockade |
|
||||
|
||||
These nine exact signatures remove 51 false direct-hit rows across 20
|
||||
definitions. Dual Wield is an offhand capability; Thrash adds two extra
|
||||
attacks; the remaining IDs are non-damaging stance, buff, block, disarm, or
|
||||
target-debuff effects. Those unsupported behaviors remain documented gaps.
|
||||
|
||||
| Preserved/corrected ID | Updated rows and definitions | Generated contract |
|
||||
| --- | --- | --- |
|
||||
| 6253 Backhand | 5: Stockade, Blackrock Spire | Stun remains; primary victim, melee, range 5. |
|
||||
| 8242 Shield Slam | 3: Stockade, Ragefire Chasm | Mixed stun/damage remains; primary victim, melee, range 5. Existing damage multipliers remain 1.12 for mobs and 1.35 for bosses. |
|
||||
| 11976 Strike | 6: Stockade, Blackrock Depths, Stratholme, Ragefire Chasm, Underbog | Weapon damage remains; primary melee, range 5. |
|
||||
| 15657 Backstab | 2: Stockade, Maraudon | Direct damage remains; primary melee, range 5. |
|
||||
| 11978 Kick | 5: Stockade, Scarlet Monastery, Blackrock Depths, Stratholme, Blood Furnace | Ascension's pure interrupt is primary melee for 4 seconds; the compiler's former synthetic direct hit is removed. The pinned Epoch variant adds source damage and a 6-second interrupt; its damage remains represented with the prior scalar. |
|
||||
| 421 Chain Lightning | 1: Stockade | Direct damage remains; range is corrected from 28 to the sourced 30 yards. The runtime still resolves one target, so DBC chain fan-out is unsupported. |
|
||||
| 5246 Intimidating Shout | 3: Stockade, Dire Maul, Slave Pens | Fear remains caster-centered at radius 8; effective source range 8. |
|
||||
| 19134 Frightening Shout | 3: Stockade, Dire Maul, The Nexus | Fear remains caster-centered at radius 8; source range 10. Duration follows the selected profile. |
|
||||
| 7964 Smoke Bomb | 2: Stockade, Maraudon | Stun remains caster-centered at radius 5; effective cast range 5. |
|
||||
|
||||
The shouts' triggered secondary effects remain unsupported because they require
|
||||
different target sets from the caster-centered fear. Stockade controls use
|
||||
`nearby-party`, preserving all eligible party actors in the sourced radius.
|
||||
Rend 6547/16509 and Enrage 8599 were not changed. Rend's periodic damage and
|
||||
Enrage's buff values remain existing approximation gaps rather than being
|
||||
reclassified as direct damage.
|
||||
|
||||
The second-pass structural comparison used
|
||||
`playtest-artifacts/campaign-boss-pass/catalog-before-second-source-pass.json`.
|
||||
It found exactly the nine utility/extra-attack removals above (51 rows), 30
|
||||
corrected attack rows, and corresponding mechanic-ID removals on 15 bosses. No
|
||||
attack was added, no other entity or encounter field changed, and no boss
|
||||
gained fallback surge mechanics. Damage scalars stayed unchanged except that
|
||||
the five pure Ascension 11978 interrupt rows no longer carry the former
|
||||
synthetic direct-hit multiplier.
|
||||
|
||||
The Ascension source is
|
||||
`../LadiksMPQEditor/client-current/area-52/patch-D/DBFilesClient/Spell.dbc`
|
||||
(SHA-256 `2f77f18b91ffbae32a19568e4bc05ec78ee384b6ba8dd2a6e05f0e97abbb2dce`).
|
||||
The Epoch source used by the catalog is
|
||||
`../HealerMan-Storage/pipeline-work/dungeons/epoch-client/DBFilesClient/Spell.dbc`
|
||||
(SHA-256 `D5CCE1A83550DCFA9EB2F0251DBB11FD24C272534B2B1A9B230924A44D817AB3`).
|
||||
Epoch has no sibling `SpellDuration.dbc` or `SpellRadius.dbc`, so the compiler
|
||||
uses its established shared patch-S fallback tables (SHA-256
|
||||
`EEAE44EF0185924F3D6EC57AB2701C66566DB86E51AB0BAE017A9449126EB3A0` and
|
||||
`DBA6ED2F165F75C84DDA5F32AE46B1A01FE562EFD88FA51FD19365705C3E6A44`). These
|
||||
are the exact duration/radius inputs used for Epoch imports, not pristine
|
||||
Epoch-client support tables. Profile differences are pinned separately:
|
||||
Epoch's three shouts use aura 99 (`MOD_ATTACK_POWER`); its Battle Stance and
|
||||
Disarm signatures have fewer aura rows; Shield Slam and Backstab use different
|
||||
direct-damage bases/effects; Kick includes a small damage effect and lasts 6
|
||||
seconds; and 421, 5246, and 19134 have different damage or control-duration
|
||||
values. No Ascension-only signature suppresses an unmatched Epoch spell.
|
||||
|
||||
The focused test checks Stockade as an Ascension fixture and The Nexus
|
||||
Frightening Shout as an Epoch fixture: both receive the same sourced area
|
||||
target/radius, while the fallback-backed durations remain 4 seconds and 6
|
||||
seconds respectively. Verification: `node --check
|
||||
scripts/dungeon-pipeline/compile-campaign-catalog.mjs`; the catalog compiler
|
||||
completed for 54 definitions; and `npx vitest run
|
||||
src/game/dungeonCampaignCatalog.test.ts` passed all 33 tests. The generated JSON
|
||||
and compressed TypeScript were refreshed. No build, browser QA, encounter
|
||||
tuning, or full test suite was run by this audit.
|
||||
|
||||
The parent independently reran 57 catalog/enemy checks and Ready-five (7 Vitest
|
||||
and 20 Python), verified raw/compressed catalog equality, and reproduced the
|
||||
exact second-pass structural diff. A separate reviewer decoded all 22 pins
|
||||
from both live DBC inputs and found no concrete issue. Smoke Bomb's raw range
|
||||
is self-only: runtime range 5 is a hostile-target gate adapted to its sourced
|
||||
caster-area radius 5. The final source-aware production build passed under
|
||||
`index-CM5EW2MK.js`; full-route live evidence belongs to the Stockade report.
|
||||
@@ -0,0 +1,119 @@
|
||||
# Stormwind Stockade campaign playtest — 2026-10-04
|
||||
|
||||
## Status
|
||||
|
||||
The final source-aware build completed a normal five-boss Stormwind Stockade campaign route and displayed the native **FULL DUNGEON CLEAR** result with all five required boss IDs present. The successful route used the ordinary level-30 Priest/Knight test identity and the native five-member party; the player leveled to 39 during the run. A separate bounded Vow of Silence diagnostic is being prepared because Hamhock's Chain Lightning was observed during the full clear, but the boss was killed before the route reached its Vow handler.
|
||||
|
||||
Stormwind Stockade (`stormwind-stockade`) is the routine testing fixture for this campaign route. The generated definition has five required bosses, ending at Dextren Ward. The route harness uses the shared exact-title Stockade picker helper when no route selector is supplied. Wailing Caverns is guarded as historical-only and requires both `--route=wailing-caverns` and `--historical-wailing`; this run does not use that path.
|
||||
|
||||
## Generated route and geometry
|
||||
|
||||
The source is `src/game/generated/dungeonCampaignCatalog.json`: map 34, level range 20–30, five required bosses, 11 creature entries, and 93 static spawns. The guide is emitted by `scripts/campaign-boss-route-probe.ts` to `playtest-artifacts/campaign-boss-pass/navigation-guidance.jsonl`.
|
||||
|
||||
The probe reads the generated Stockade definition and the shipping navigation asset at `/assets/game/manastorm/34-stormwindjail/navigation.glb`. It expands normalized quantized vertex attributes with their normalized flag, applies the GLB node world transform, and calls the shipping `preparePartyNavigationGraph` path with the Stockade navigation links and traversal ramps. The waypoints are a route guide for subsequent ordinary WASD input; they do not move the player or skip obstacles.
|
||||
|
||||
| Order | Boss | Source id | Guide waypoint | Segment distance | Surface snap |
|
||||
| --- | --- | --- | ---: | ---: | ---: |
|
||||
| 1 | Targorr the Dread | `creature-84027` | 86 | 129.40 m | 0.164 m |
|
||||
| 2 | Kam Deepfury | `creature-79088` | 180 | 142.52 m | 0.042 m |
|
||||
| 3 | Hamhock | `creature-79098` | 235 | 83.71 m | 0.036 m |
|
||||
| 4 | Bazil Thredd | `creature-79124` | 255 | 43.97 m | 0.083 m |
|
||||
| 5 | Dextren Ward | `creature-79116` | 481 | 359.72 m | 0.132 m |
|
||||
|
||||
The prepared path contains 482 waypoints and 759.31 m of navigation-graph travel. Entrance snap distance is 0.185 m. These figures validate the geometry-derived guide only; live traversal and line of sight are still verified through normal game input and the engine.
|
||||
|
||||
## Normal campaign run
|
||||
|
||||
From the repository root, regenerate the guide and start the full-route attempt after the coordinated final build is ready:
|
||||
|
||||
```powershell
|
||||
New-Item -ItemType Directory -Force playtest-artifacts/campaign-boss-pass | Out-Null
|
||||
node_modules/.bin/vite-node --script scripts/campaign-boss-route-probe.ts > playtest-artifacts/campaign-boss-pass/navigation-guidance.jsonl
|
||||
node scripts/playtest-campaign-boss-pass.cjs --campaign-boss-route --route=stormwind-stockade --camera-diagnostic --max-campaign-seconds=2400
|
||||
```
|
||||
|
||||
The harness creates a Priest through the normal character-creation UI, applies the allowed isolated level-30/secondary-class fixture before entry, enters through the normal Dungeons picker and healer-role choice, and requires the native active five-player party. It uses normal keyboard movement, target cycling, party Attack/Defend commands, selected party frames, and the player’s currently bound healing and damage abilities. Range and game feedback are recorded; collision, targeting, line of sight, and cast resolution remain game-owned. A dedicated Stockade entrance screenshot records the player’s equipped silhouette alongside the native party, in addition to the roster-creation screenshots.
|
||||
|
||||
At each source boss anchor the harness records the encounter checkpoint, normal commands, player casts, heal/damage distances, party health, visible caster state, encounter progress, and the native `killedBossIds` snapshots. Bosses defeated naturally before their route checkpoint count as observed progress. Hamhock’s source AI includes Chain Lightning (spell 421) and Bloodlust (spell 6742); if the test identity normally exposes Vow of Silence (DBC spell 490275), the harness assigns it through Ability Controls and attempts it only against a live observed Chain Lightning cast at the Hamhock checkpoint. In the completed full-route capture, Hamhock was engaged and six Chain Lightning damage events were recorded before the guide reached his authored checkpoint, but the campaign boss handler did not issue a Vow input during the earlier pack triage. The Vow result is therefore still unverified by that full clear; a separate targeted watch is required.
|
||||
|
||||
The party may die naturally during a route encounter; each observed casualty and recovery transition is retained separately from final survivors, and visible UI resurrection actions are summarized independently. A pack with no observed engaged mobs is explicitly recorded as `no-engaged-mobs-observed; clear-not-credited`. There is no heal-attempt-count cutoff; each pack is bounded by the route deadline and a 110-second encounter window, with repeated failed inputs and end-of-window outcomes retained. One-second health, party, and live-mob samples continue during packs. Once the dungeon-results overlay opens, the route and encounter handlers stop issuing inputs. Only the native full-dungeon-clear overlay is reported as a full clear; boss progress alone does not imply full completion.
|
||||
|
||||
The route artifact records the ordered boss coverage and full-clear status under `playtest-artifacts/campaign-boss-pass/<run>/stormwind-stockade-campaign-boss-route.json`. The results summary derives healing and player-damage counts from the campaign's raw source-attributed combat events and keeps its campaign timing separate from the configured direct-segment duration. Screenshots include the normal campaign picker and entrance, the equipped player silhouette with native party, route progress, the held right-drag/released-camera probe with pointer-lock state, route boss checkpoints, and the result view when reached. The camera probe is performed at the entrance; it verifies that a held right drag changes camera yaw without moving the player, that pointer lock remains null, and that subsequent unheld movement leaves yaw stable.
|
||||
|
||||
## Final source-aware five-boss route
|
||||
|
||||
The frozen production run is `playtest-artifacts/campaign-boss-pass/final-build-20261004-214255695/`. The selected dungeon ID and title were `stormwind-stockade` / `Stormwind Stockade`; the generated definition and route result contain these ordered IDs: Targorr the Dread (`creature-84027`), Kam Deepfury (`creature-79088`), Hamhock (`creature-79098`), Bazil Thredd (`creature-79124`), and Dextren Ward (`creature-79116`). The live module report identified `dungeonWorldInteraction-coBQV5ap.js` as the `dungeonRunStore` owner, and read-only entry discovery found the store before movement began.
|
||||
|
||||
The native result overlay showed **FULL DUNGEON CLEAR**, “Bosses defeated · 5/5,” and all five names as Defeated. The run store's `killedBossIds` contained all five required IDs. The final overlay opened at navigation checkpoint 462/481 and stopped further route input, as required; the route did not fabricate a boss arrival or a 100% waypoint screenshot. The native panel reported 17:37.7 to final boss. Recorded route evidence spans about 17:38.9 from the segment start to the last captured pack state. The full clear remains verified from the overlay and run-store IDs even though the final authored boss waypoint was not reached before the overlay appeared.
|
||||
|
||||
The level-30 Priest/Knight player reached level 39. One companion casualty was recorded: Rorik died once and returned through the ordinary “Rez dead members” UI. The player had no death transition; all five party members were alive at the result overlay. Of 25 pack-triage records, 23 ended with observed clear and party consolidation, one reached its 110-second encounter window, and the final triage record ended when the native results overlay opened. Those pack outcomes are reported separately from the authoritative full-clear status.
|
||||
|
||||
The read-only fatal-window audit found Rorik at 1,524.1798 HP in the last living sample 3,751 ms before his down transition. The next five logged hits summed to exactly 1,524.1798; the final effective hit was 209.1798 from `creature-79108`, observed 840 ms before the down transition, and the next pack sample showed 0 HP 31 ms later. His last Urgent Heal completed 3,843 ms before the down transition. A Group Heal began at `1791151066769` and resolved at `1791151069828`; Rorik's 209.1798 effective damage hit was at `1791151069127`, 701 ms before the Group Heal resolved. The hit arithmetic implies his HP had reached zero by the Group Heal resolution, and the living-recipient filter would exclude a dead member. The trace has no dedicated death or recipient-selection event, so it does not directly show that exclusion. This timing does not support a range or line-of-sight explanation for his death. A separate source-fidelity audit found that the Group Heal catalog advertises a 12 m radius while the shared runtime recipient helper defaults to 30 m for player and NPC healing; that mismatch is documented independently and was not changed in the frozen build.
|
||||
|
||||
The source-attributed healing log contains 424 player-source healing events, 203 with positive effective healing, totaling 158,465.20 effective healing and 423,321.80 overhealing. Those event totals differ from scripted healing-input windows: 172 windows contained 169 attempted inputs, 166 accepted cast starts, 160 windows with an effective heal, three attempted keys without a matching cast start, and three windows skipped without input. Urgent Heal had 135 attempts, 132 accepted cast starts, and 126 effective windows. Group Heal was normally assigned to the tertiary `Alt+Digit2` binding and had 34 attempted and accepted starts; all 34 windows observed a positive healing event on at least one eligible party recipient, for 66,939.01 effective healing within those windows. The action-school helper was uniquely discovered from the frozen `combatStore-o8tawtxY.js` function source and supplied the recorded action schools.
|
||||
|
||||
The entrance camera probe recorded a yaw change of −0.378 radians during the held right drag, only 0.00264 m player displacement during the drag, null pointer lock throughout, and zero unheld yaw change after release. The actual screenshots present in the run directory are the two roster views, campaign-picker, entrance, equipped player/native-party appearance, Vow binding UI, three entrance camera frames, route checkpoints at 25%, 50%, and 75%, and `stormwind-stockade-boss-arrival.png` showing the native full-clear panel. There is no route-100 or endpoint screenshot because the overlay ended route input first.
|
||||
|
||||
The route JSON recorded no browser page exceptions or campaign console errors. The outer results summary captured one initial `favicon.ico` 404; required game chunks and asset URLs are recorded in `actualAssetUrls` and `frozenBuildAssetUrls`. This static icon miss did not affect the run.
|
||||
|
||||
## Exploratory corrected-Blood-Arrow route and heal-input diagnosis
|
||||
|
||||
The first full-route attempt on the corrected Blood Arrow build is preserved at `playtest-artifacts/campaign-boss-pass/final-build-20261004-192248412/`. It loaded the corrected Blood Arrow chunks and reached Stockade. The player died while stabilizing the live engaged pack at checkpoint 149/481 near the Kam Deepfury approach. The source mob for Targorr the Dread was observed dead, but the route did not reach the other four boss checkpoints, Hamhock/Vow proof, or the native results overlay. The `stormwind-stockade-boss-route-25.png` view shows the spread-out native party and equipped bodies during the route; entrance and UI screenshots are also retained. Do not treat this as a clear.
|
||||
|
||||
That run reported `dungeonRunStoreFoundAtEntry: false` because the harness's read-only module discovery omitted the store's owner chunk; its empty `killedBossIds` snapshots therefore say nothing about whether the game registered Targorr's death. At the time, `dungeonSession-*.js` was only a guessed owner and was not established by that run. The build's module report later identified `dungeonWorldInteraction-*.js` as the actual owner; the current harness discovers it from the report and stops before route execution if the store is unavailable.
|
||||
|
||||
The last 62.6-second pack recorded 47 key-5 Urgent Heal input windows, six with an effective-heal event and 41 without one. Those 41 are not the route's total healing: across the full route the combat log contains 118 Urgent Heal cast events and 111 source-`__player__` healing events, totaling 38,741.29 effective healing and 45,021.71 overhealing. The 111 event rows break down as follows; Life Link also accounts for the separate self-recipient rows.
|
||||
|
||||
| Source | Ability | Recipient | Healing events | Effective healing | Overheal |
|
||||
| --- | --- | --- | ---: | ---: | ---: |
|
||||
| `__player__` | Urgent Heal | Rorik | 37 | 25,152.62 | 2,486.38 |
|
||||
| `__player__` | Urgent Heal | Caelan | 12 | 6,416.09 | 2,485.91 |
|
||||
| `__player__` | Urgent Heal | Veyra | 2 | 1,046.99 | 353.01 |
|
||||
| `__player__` | Urgent Heal | Durnik | 4 | 3,236.00 | 0.00 |
|
||||
| `__player__` | Urgent Heal | player self | 56 | 2,889.58 | 39,696.42 |
|
||||
|
||||
Within the last-pack input windows, eight matching Urgent Heal cast-start events were observed: six completed with positive healing, and two began but did not produce a positive healing event. The other 39 keypresses had no matching cast start in their action window. This distinction comes from key-window correlation; the old harness only saved the latest feedback after its wait, which was often a later mob hit and could not explain a rejected input. All 47 presses reached the page key listener. Their recorded party distances ranged from 12.90 to 21.56 m against Urgent Heal’s 25 m range, but five windows ended with explicit `That target is not in line of sight.` feedback. Mana stayed full through the repeated non-effective attempts. The old capture omitted GCD readiness and selected-friendly-target state, so it cannot identify the rejection cause of each no-start window.
|
||||
|
||||
The route harness now captures the bound key, focused UI element, selected friendly actor, active cast, personal/global cooldown timing, feedback before/immediately after/through the input window, player/target health and resource, and cast-start/effective events. Healing keys wait for live readiness. An explicit party-heal LOS rejection can trigger one measured normal F4 Recall and one retry; already learned, UI-bound Group Heal is eligible when at least two injured allies are in its documented radius. No ability or stat is added and no combat state is written by the harness. The refreshed source-attributed event summary is kept separate from its distinct ordinary-key input-window summary.
|
||||
|
||||
The first exploratory build emitted physical damage for Kam Deepfury Defensive Stance (7164) and trash Battle Stance (7165) / Demoralizing Shout (16244, 13730), despite the source-only utility entries having no damage opcode. The utility correction was included in the later build: exact `spell-7164`, `spell-7165`, `spell-16244`, and `spell-13730` damage events were absent from that capture. That later run did, however, contain 32 physical damage events attributed to `spell-9128` (15,648 raw, 9,232.59 effective) across all five party targets. The subsequent source audit classified that additional case as unsupported utility and omitted it in the final source-aware build. See `docs/STOCKADE_UTILITY_ATTACK_AUDIT_2026-10-04.md`; this is an import correction rather than an encounter-balance finding, and the harness made no damage or runtime changes.
|
||||
|
||||
## Utility-corrected exploratory route and harness repair
|
||||
|
||||
The newer utility-corrected-build capture is `playtest-artifacts/campaign-boss-pass/final-build-20261004-202642234/`. The dynamically discovered dungeon-run store owner was `dungeonWorldInteraction-DRqE4yxE.js`, so the store was present and its progress is authoritative. The route observed Targorr the Dread (`creature-84027`) defeated, then stopped in a seven-mob pack containing Kam Deepfury at route checkpoint 122/481 (263.10 m of the 759.31 m guide). The player died after 23.785 seconds in the pack; the native results overlay never appeared. The final party was Veyra alive at 759.90/2,781.90, with Rorik, Durnik, and Caelan down. Rorik had also died and recovered once earlier. The capture is a partial diagnostic, not a clear.
|
||||
|
||||
The capture contains 134 source-attributed player healing events: 71 with positive effective healing, totaling 43,738.60 effective and 52,884.40 overheal. These event totals are separate from 147 Urgent Heal keypress windows: 74 had a matching cast start and 67 produced an effective-healing window. The remaining 73 windows had no cast start. Their immediate feedback classified 28 as line-of-sight rejections and 33 as enemy-control rejections; feedback for 12 was overwritten by subsequent combat messages. All 73 had an observed key event, the correct binding, zero GCD and personal cooldown remaining, no active cast, and an in-range living target. The earlier `selectedFriendlyActorId`-only diagnostic was misleading because native party-frame targeting is held by `partyStore.selectedMemberId` / `selfSelected`.
|
||||
|
||||
The source-attributed heal event breakdown is:
|
||||
|
||||
| Recipient | Healing events | Effective healing | Overheal |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| Rorik | 47 | 31,575.41 | 2,037.59 |
|
||||
| Player self | 67 | 1,569.61 | 47,104.39 |
|
||||
| Caelan | 16 | 7,661.58 | 3,742.42 |
|
||||
| Durnik | 3 | 2,188.00 | 0.00 |
|
||||
| Veyra | 1 | 744.00 | 0.00 |
|
||||
|
||||
The recorded Group Heal is already assigned to `tertiary:face-left` (`rom-priest-primary-8`, `Alt+Digit2`) in the ordinary action bindings; it was omitted because the earlier route planner inspected only primary slots. The route harness now scans primary, secondary, and tertiary bindings and records the modifier state on actual key events. Group Heal input windows retain all eligible native-party recipient IDs and report their individual source-attributed healing events. The harness records `partyStore.selectedMemberId` / `selfSelected`, `controlledUntil`, `controlMechanic`, and the derived action-block gate alongside cooldown, active-cast, target, feedback, health, resource, range, and cast-start telemetry. It waits for action-blocking control to expire instead of sending a rejected cast. Because production minifies the helper export name, the harness discovers the pure `abilityDamageSchool` helper from its unique ability-name literals and source/school-rule shape, records the discovery and selected school source per action, and waits for the relevant school lock. If that helper is unavailable and an active school lock exists while the action school is unknown, the input is withheld.
|
||||
|
||||
Normal player recovery is available through the in-game Defeated prompt. Its checkpoint list consists of the entrance and completed/dead required-boss positions. Clicking the prompt's respawn button uses an authored checkpoint; if a party fight is still active, it respawns only the player and leaves the encounter running. The harness records the visible checkpoint choices, selects the most recently killed boss checkpoint when available (otherwise the latest authored boss option or entrance), clicks the normal UI button, and verifies restored health. Recovery evidence checks that all previously killed boss IDs remain present, compares dungeon/run identity when those fields are available, and separately records any bosses companions kill during the recovery interval. After respawn, route movement rewinds to the selected checkpoint's source waypoint and replays ordered waypoints through the interruption. Replay visits are recorded separately so they do not replace first-pass verification; this also applies to approach-pack and auxiliary final-boss recovery. A replay counts as complete only after its actual interrupted checkpoint is verified; an intervening native results overlay is recorded as such, and a deadline or movement block leaves replay incomplete. Companion resurrection remains a separate visible UI action and can be unavailable while a live boss is engaged. No player position, health, cast, or encounter state is written by these recovery steps.
|
||||
|
||||
## Harness checks
|
||||
|
||||
- `node --check scripts/playtest-campaign-boss-pass.cjs` passes. `git diff --check` passes for the harness and this report.
|
||||
- The navigation probe completed against the generated catalog and shipping geometry; it reproduced the 482-waypoint, 759.31 m guide with all five authored boss anchors.
|
||||
- The coordinating parent reported `src/game/stockadesNavigation.test.ts` passing 16/16 focused checks, including corridor/resurrection behavior and Stockade wall/stair/line-of-sight cases.
|
||||
- The stopped pre-correction setup evidence is preserved at `playtest-artifacts/campaign-boss-pass/final-build-20261004-190619118/`. It contains the UI-created desktop and compact Priest/Knight roster screenshots and the exact Stockade picker screenshot; the aura issue was found before dungeon entry.
|
||||
- The initial capture had a run-store discovery failure and is retained only as setup evidence; the later exploratory capture had a confirmed store and one-of-five boss progress. The source-aware final build has since completed and produced the verified full clear documented above. A separate bounded Vow diagnostic is recorded below; it is not another full-clear attempt.
|
||||
|
||||
## Targeted Hamhock Vow cancellation diagnostic
|
||||
|
||||
The separate ordinary-campaign diagnostic is preserved at `playtest-artifacts/campaign-boss-pass/final-build-20261004-232722030/`. It used the same frozen source-aware production assets as the full-clear capture and dynamically discovered `dungeonWorldInteraction-coBQV5ap.js` as the dungeon-run-store owner. Vow of Silence was learned and assigned through the normal Ability Controls UI to `Shift+Digit5`. The route observed four live Hamhock Chain Lightning windows and made one Vow input; this single attempt confirmed cancellation. The route stopped gameplay inputs immediately after that proof and did not attempt a full clear.
|
||||
|
||||
The watched cast was Hamhock (`creature-79098`) Chain Lightning (`smart-1717-0-chain-lightning`, spell 421), started at `1791157080692` with scheduled release at `1791157082192`. Before the input, the player was 18.996 m from the living target, but camera yaw left a 2.8503-radian heading error. The harness used ordinary held right-mouse camera drag on a hit-tested canvas row: eight paced increments, each at most 100 px with a rendered frame between increments. It verified mouse-look activation, null pointer lock, and that the same cast remained active throughout. Measured yaw change matched the requested turn within 0.000001 radians, leaving a 1.25-radian heading error inside the hostile facing arc with effectively zero player displacement.
|
||||
|
||||
At `1791157081779`, the normal `Shift+Digit5` input completed a player-source Vow cast on Hamhock. The owned `rom-priest-vow-of-silence` aura was applied by `__player__` to Hamhock at that time and expired at `1791157090179`. At `1791157081834`, before the original cast’s scheduled release, Hamhock was still alive, the watched cast had disappeared, and no matching Chain Lightning damage event had occurred. The harness then issued no gameplay inputs and sampled through 100 ms after scheduled release; all seven follow-through samples showed no active cast and no matching damage event for that cast. The target’s health changed during this period from other damage, so the evidence is cast-specific rather than a claim that target health stayed constant. The school lock did not advance; Vow’s silence aura provides the cancellation, so a school-lock change is not required proof.
|
||||
|
||||
This diagnostic stopped at route checkpoint 213 with two authoritative boss IDs recorded: Targorr (`creature-84027`) and Kam Deepfury (`creature-79088`). The remaining bosses were not credited and the native full-clear overlay was not reached. Rorik, Durnik, and Caelan each had one recorded casualty and returned through the ordinary “Rez dead members” UI; all five party members were alive at the diagnostic endpoint. The artifact also contains the binding UI, campaign picker, entrance, equipped-party view, 25% route view, and boss-arrival screenshot. Its route JSON reports `confirmed-live-chain-lightning-cancellation` and explicitly records `full-clear-not-attempted`.
|
||||
|
||||
The earlier failed diagnostics remain unchanged as driver evidence: `final-build-20261004-224251892` recorded two facing rejections, while `final-build-20261004-230719179` made no Vow input because every tested drag path crossed a HUD element. The reviewed harness now scans candidate canvas rows, records hit-test identities, spaces normal drag increments across frames, gates the ability key on the measured facing arc and same live cast, and preserves a read-only follow-through through the watched cast’s scheduled release. No runtime, catalog, game-balance, or build files were changed for these diagnostics.
|
||||
@@ -0,0 +1,83 @@
|
||||
# Default test dungeon — Stormwind Stockade
|
||||
|
||||
The project owner selected **Stormwind Stockade** on 2026-10-04 as the default
|
||||
for new routine gameplay, mechanics, healing, party, camera, input, performance
|
||||
and browser diagnostics. The runtime ID is `stormwind-stockade`; the UI title is
|
||||
`Stormwind Stockade`. This replaces Wailing Caverns as the routine test dungeon.
|
||||
|
||||
Mode-specific Bite-Sized spawn/Race diagnostics use `bite-sized-stormwind-stockade`
|
||||
as their default Stockade fixture. They remain distinct from the full dungeon
|
||||
required for ordinary mechanics and campaign-route proof.
|
||||
|
||||
## Agent workflow
|
||||
|
||||
1. Read `AGENTS.md` and the relevant canonical vault notes.
|
||||
2. Use the full Stockade dungeon from **Dungeons → WoW → Stormwind Stockade**.
|
||||
Install and verify its content through the normal entry/download flow when
|
||||
required. Do not fall back to bundled Wailing content.
|
||||
3. For reusable harnesses, import `scripts/playtest-defaults.cjs`. Its exports
|
||||
are `DEFAULT_TEST_DUNGEON_ID`, `DEFAULT_TEST_DUNGEON_TITLE`, and
|
||||
`DEFAULT_TEST_DUNGEON_BOSS` (Hamhock for generic Boss Testing).
|
||||
`selectDefaultTestDungeon(page)` selects the exact full-dungeon row;
|
||||
`openSelectedDungeonRoles(page)` handles both installed content and the normal
|
||||
download confirmation before waiting for role selection.
|
||||
4. Use ordinary movement/casting for live mechanic and route proof. Read-only
|
||||
telemetry may inspect casts, resources, actor positions and run progress.
|
||||
Label any isolated pre-entry profile preparation or synthetic unit fixture.
|
||||
5. Record loaded build assets, source boss identity, actual mechanic outcome,
|
||||
screenshots, runtime errors and limitations in `PLAYTEST_NOTES.md` and the
|
||||
scoped report. Inspect the screenshots before claiming a visual fix.
|
||||
|
||||
## Source and completion
|
||||
|
||||
The authored recipe is `dungeon-pipeline/recipes/stormwind-stockade.json`;
|
||||
`dungeon-pipeline/runtime-overrides/stormwind-stockade.json` owns runtime
|
||||
overrides. The catalog is generated by the dungeon pipeline; do not hand-edit
|
||||
its JSON or compressed TypeScript. The existing Stockade navigation regressions
|
||||
are in `src/game/stockadesNavigation.test.ts`.
|
||||
|
||||
The current full-dungeon objective order is Targorr the Dread, Kam Deepfury,
|
||||
Hamhock, Bazil Thredd and Dextren Ward. Dextren Ward is the final objective.
|
||||
A normal full-clear claim requires all five objectives and the native results
|
||||
screen; reaching an anchor or clearing a Bite-Sized variant is separate proof.
|
||||
Record persistent killed-boss/run progress so natural earlier kills survive
|
||||
endpoint despawning. A zero-engaged pack attempt does not establish a pack kill.
|
||||
|
||||
Hamhock's source list includes Nature Chain Lightning 421 and Bloodlust 6742.
|
||||
Chain Lightning is a real damaging cast with sourced range 30; its chain fan-out
|
||||
remains unsupported. Bloodlust is a haste buff, and its unsupported utility
|
||||
effect is omitted rather than emitted as damage. Use the actual imported
|
||||
timing/control/immunity data for live interrupt proof; do not carry Lady
|
||||
Anacondra's IDs or casts into a Stockade test.
|
||||
|
||||
For a focused ordinary-campaign Vow check, use
|
||||
`node scripts/playtest-campaign-boss-pass.cjs --campaign-boss-route --route=stormwind-stockade --stockade-vow-diagnostic`.
|
||||
This bounded diagnostic is separate from full-clear proof. Tab selection does
|
||||
not face the target: player combat facing follows `cameraYaw`. Use ordinary
|
||||
right-mouse drag, verify the actual facing arc and keep pointer lock null.
|
||||
Pace large turns across frames to respect the input manager's delta limits.
|
||||
Hit-test a clear canvas path; boss notifications can cover a fixed starting
|
||||
point even when the game canvas fills the viewport.
|
||||
Credit cancellation only from the same watched live cast, a completed player
|
||||
Vow cast, its owned target aura and disappearance before scheduled release
|
||||
without matching Chain Lightning damage while the target remains alive.
|
||||
Stop gameplay inputs and retain read-only samples through scheduled release
|
||||
plus 100 ms to check that interval directly.
|
||||
|
||||
## Earlier fixtures and scope
|
||||
|
||||
Keep Wailing's existing import/source regressions and dated reports as historical
|
||||
evidence. They do not select the dungeon for future routine live QA. Dedicated
|
||||
legacy Wailing/Lady harnesses are historical reproductions, and a new live run
|
||||
requires the owner's explicit request for that dungeon. Do not relabel their
|
||||
old screenshots or results as Stockade evidence.
|
||||
|
||||
Incident analysis may read Barren or another dungeon's captured evidence and
|
||||
source. Generic follow-up validation uses Stockade; encounter-specific live
|
||||
reproduction follows the user's explicitly requested dungeon. This policy
|
||||
replaces the previously proposed additional Wailing clear with a Stockade
|
||||
full-route/full-clear attempt.
|
||||
|
||||
Ready-five balance scope, RoM Needs Testing status, saved-profile compatibility,
|
||||
level cap 80 and the no-new-loot-wiring constraint continue to apply. The test
|
||||
fixture choice does not change the game's bundled content or playable dungeons.
|
||||
@@ -4,6 +4,11 @@
|
||||
|
||||
This is a first-pass design audit of the 51 standard WoW dungeons already imported by Healer Man (Classic through Wrath of the Lich King). The map atlas and campaign catalog are the project source of truth for the layouts and encounter names. Three additional imported definitions are Healer Man / Ascension custom dungeons, so they are not part of this WoW pass.
|
||||
|
||||
The owner's current routine test default is the full **Stormwind Stockade**
|
||||
(`stormwind-stockade`); see [the test policy](TEST_DUNGEON_POLICY.md). The
|
||||
Wailing-specific slice questions below remain deferred until the owner explicitly
|
||||
requests that dungeon. They do not authorize a new routine Wailing playtest.
|
||||
|
||||
A good slice should feel like a complete short outing: a clear reason to enter, one strong visual space or route, a handful of combat beats, and one satisfying final encounter. The closest existing model is **Stormwind Stockade: Cellblock Rush**: keep the original environment, retain one route, wall off the side wings, and finish on one seeded boss. Some source dungeons have a scripted event that makes an even better slice, but that event also raises implementation cost.
|
||||
|
||||
Ratings:
|
||||
@@ -16,7 +21,7 @@ The three first-pass candidates below are registered as derived Bite-Sized dunge
|
||||
|
||||
| Prototype | Implemented slice | Open playtest question |
|
||||
| --- | --- | --- |
|
||||
| Wailing Caverns — Verdan’s Lair | Starts inside Verdan’s chamber at a navigation-surface point. Three source cave mobs spawn in the room; defeating all three activates Verdan. Naralex and Mutanus remain only in the full dungeon. | Confirm the room population, Verdan activation, party targeting, and completion in play. |
|
||||
| Wailing Caverns — Verdan’s Lair | Starts inside Verdan’s chamber at a navigation-surface point. Three source cave mobs spawn in the room; defeating all three activates Verdan. Naralex and Mutanus remain only in the full dungeon. | Deferred until an explicit Wailing request: confirm room population, Verdan activation, party targeting, and completion in play. |
|
||||
| The Deadmines — Take the Ship | Starts at Mr. Smite’s source floor position, clears the ship population, gates VanCleef behind Captain Greenskin, then ends in the cabin. | Confirm the new start is grounded and the ship route remains walkable. |
|
||||
| Utgarde Pinnacle — Skadi’s Gauntlet | Starts on the grounded source wave corridor. Defeating three first-wave guards along that corridor activates Skadi at its far end. The long waves and harpoons are omitted from this short run. | Confirm Skadi appears after the guard clear and the fight completes without an interaction. |
|
||||
|
||||
@@ -26,7 +31,7 @@ Each derived ID resolves to its source dungeon’s content pack and map asset di
|
||||
|
||||
| Rank | Dungeon slice | Why it fits | Main implementation question |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | **Wailing Caverns — Verdan’s Lair:** clear the chamber mobs, then fight Verdan the Everliving. | One navigable cave room and a clear boss reveal keep the run short. The Naralex escort remains a future, more complex candidate. | Verify the room floor, combat spacing, and boss activation in play. [Dungeon overview](https://warcraft.wiki.gg/wiki/Wailing_Caverns) |
|
||||
| 1 | **Wailing Caverns — Verdan’s Lair:** clear the chamber mobs, then fight Verdan the Everliving. | One navigable cave room and a clear boss reveal keep the run short. The Naralex escort remains a future, more complex candidate. | Deferred until an explicit Wailing request: verify room floor, combat spacing, and boss activation in play. [Dungeon overview](https://warcraft.wiki.gg/wiki/Wailing_Caverns) |
|
||||
| 2 | **The Deadmines — Take the Ship:** enter at Mr. Smite’s deck position, clear the ship, fight Captain Greenskin, then finish Edwin VanCleef in the cabin. | One strong visual set piece, a straightforward forward route, and a natural boss finale. The optional Cookie detour can be left out. [Classic guide](https://warcraft.wiki.gg/wiki/Deadmines_%28Classic%29) |
|
||||
| 3 | **Zul’Farrak — The Staircase:** start at the pyramid event, survive Sergeant Bly’s descending waves, and finish at Chief Ukorz’s chamber. | The stair defense is already a compact wave encounter with a clear spatial progression; it could be a bite-sized run by itself or a short prelude into a boss. | Choose whether Bly and his group are protected participants or replace the event with a controlled wave sequence; the event’s outcome opens the Ukorz route. [Instance map and event guide](https://ptgmedia.pearsoncmg.com/imprint_downloads/brady/wow/zulfarrak/zulfarrak_lr.pdf) |
|
||||
| 4 | **The Blood Furnace — Broggok’s Breakout:** begin at the prison cells, release the waves, then push through the final corridor to Keli’dan. | A tight industrial route with a built-in escalation and a boss payoff. The map is compact and the three encounters already form a clean progression. [Dungeon overview](https://warcraft.wiki.gg/wiki/Blood_Furnace) |
|
||||
|
||||
Reference in new issue
Block a user