Files
healer-man/docs/STORMWIND_STOCKADE_PLAYTEST_2026-10-04.md
2026-10-06 22:25:34 -04:00

25 KiB
Raw Permalink Blame History

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.

This dated run explicitly selected full Stormwind Stockade (stormwind-stockade) and completed its five-boss campaign. The generated definition ends at Dextren Ward. The route harness now defaults to Cellblock Rush for routine checks; use --route=stormwind-stockade for an explicit full-source route. Wailing Caverns remains historical-only and requires both --route=wailing-caverns and --historical-wailing; this run did 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:

New-Item -ItemType Directory -Force playtest-artifacts/campaign-boss-pass | Out-Null
node_modules/.bin/vite-node --script scripts/campaign-boss-route-probe.ts stormwind-stockade > 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.