Files
healer-man/PLAYTEST_NOTES.md

401 KiB
Raw Permalink Blame History

Healer Man playtest notes

This file is the durable record of runtime behavior, regressions, and the evidence required before calling a visual bug fixed. Update it whenever scene, camera, input, physics, mob-rendering, or asset-loading code changes.

New routine live tests use Stormwind Stockade: Cellblock Rush (bite-sized-stormwind-stockade) under the current test policy and shared defaults in scripts/playtest-defaults.cjs. Each run selects one Stockade boss from its shared run ID; record the boss actually observed. Full Stockade campaigns below remain dated evidence and require explicit selection for future runs. Dated Wailing Caverns captures remain historical evidence.

Hunter Deterrence and source hit inputs — 2026-10-07

Selected level-60 Hunter Deterrence now grants the exact five-aura self package for players and learned companions. Source attributes, linked cleanup, pacify cast distinctions, defensive NPC use, hit exclusions and guaranteed-deflect rider suppression are fixture-backed. The final focused run passes 110 checks in fifteen files, with two selected catalog checks, one exporter Node test, Ready-five seven Vitest/twenty Python checks and 56 avatar checks. TypeScript, normal prebuild hooks, isolated Vite build, precompression and bundle verification pass. See the integration report.

The one frozen Cellblock Rush run 20261007-161404213 selects Hamhock 1717, creature-79098, and clears native 1/1 in 03:13.6 without deaths. Six player Lesser Heal events provide 1,952 effective healing, zero overheal. The routine Ready-only party starts at 30, so level-60 Deterrence remains actual player/NPC store-fixture evidence. Raw event IDs 9–753 are continuous (745 events), with no recorder loss or errors. Page exceptions are zero; only favicon 404 is recorded.

The frozen build is a30787cafc7e1421e872cb37f883147177981b6627dc4238bf89f46ffb850ec2 (5,967 files). The fresh content manifest is 40d5c9e16d8045b8c240d57ca52017aaf95e423c44f96507aceb02285dca693c; all 27,587 referenced objects verify before entry. Root rehashes the build, seven loaded chunks and 2,124 served manifest objects with zero failures and unchanged fingerprints. This matches successful recorded URLs/status to local immutable bytes and captured manifest references; raw network bodies are not retained or independently hashed.

Root visually reviews the real roster, equipped entrance, route-50 and results PNGs. Bodies and visible equipment render; overlap and partly offscreen companions limit complete gear/race review. bite-sized-stormwind-stockade-boss-arrival.png is the results capture, not an arrival image. No camera proof is credited. Evidence is under playtest-artifacts/stockade-weapon-utilities/20261007-161404213/ and artifacts/deterrence-continuation-2026-10-07/. No gameplay edit or extra live run follows the freeze; source hit-table/native/loot/readiness boundaries remain. Independent Luna extra-high review confirms the captured fingerprints, events and native clear. Results end traversal at checkpoint 75/86 before the dedicated boss handler (bossClearAttempted:false); captured death/native kill progress provide the boss evidence. Full scripted route/handler coverage is not claimed.

Lichborne, utility blocks and pacify — 2026-10-06

Exact source-bound Lichborne player/companion escape, Kick/Pummel ordinary-NPC full blocking and player/owned ranged-auto pacify gates are implemented. Kick keeps its public ID and imported five-second interrupt, without prototype damage or a duplicate interrupt. Deterrence's 19263/67801 aura link is audited; its full playable deflect remains gated by missing per-hit source inputs. See the continuation report.

One final frozen Cellblock Rush run, UTC ID 20261007-033835372 (October 6 locally), selects Targorr the Dread 1696, source/live creature-84027. Native progress/results agree on 1/1 in 03:05.6, Easy/Normal, with no deaths and 2,301.8 effective player healing. The normal UI-created Discipline Priest has isolated pre-entry level 30 preparation and four Ready companions. This is the one-boss slice. The recorder retains consecutive IDs 9–770, 762 events, with zero gaps/errors/discards. Two actual companion Kick casts (496/765) have zero damage, and no Kick damage event is recorded. Shield Bash 536/706 immediately precedes Daze grants 537/707. No active Targorr cast is captured, so Kick's live interruption is not proven; Daze duration/slow remains fixture evidence. Pummel, source control escape, pacify and utility full blocks remain focused-fixture evidence in this seed.

Root views real roster, equipped-party, route-50 and native results PNGs: bodies, staff and shield silhouette render, with overlap/HUD occlusion limiting complete gear review. Nine PNGs exist; no camera-drag proof is credited. No page exceptions; only favicon 404. The harness cleans up its helper/server/ browser. No gameplay source change or further live run follows the freeze.

All 138 focused checks across 19 files, 11 selected existing checks and Ready-five (7 Vitest/20 Python) pass. Prebuild hooks and final 8 GB compilation pass. A locked shared dist/assets prevents the default output build; a fresh isolated Vite build plus normal precompression/bundle verification succeeds. The frozen 5,967-file aggregate is 00b7c1b19b0c8e64aba05732c24c7f3f65fa92c5260b4b3dee55391d5af2a2e4; fresh content manifest 91b22f898ddabb4d20f1331f682852c33e5a6781c75caec9b1e435ebc60a0e39. Both stay unchanged. All 27,587 referenced objects verify before QA. The labeled root audit rehashes the build, seven loaded chunks and 2,124 served manifest objects with zero integrity failures; raw response bodies are unavailable. The report preserves failed build/fixture attempts and remaining source gates. The final Luna extra-high evidence review completes independently, agrees with event continuity/native result/fingerprints and finds no Disarm discrepancy: seven mainhand swings inside four windows use raw 57, versus 68/70 outside. It does not rehash content or credit unobserved mechanic applications.

NPC utility/control completion — 2026-10-06

Guarded ordinary-Creature Critical Block self-imports, exact WoW335 Shield Bash 72 player/party utility blocking and source shout speed/fear immunity are implemented. No real Critical Block NPC assignment is invented. Shield Bash's trigger 29703 remains in the parent descriptor, but its Daze child is absent from the runtime catalog. General shout Magic hit/resist/deflect and exact fear locomotion remain gaps. Source audit leaves Ascension stance DUMMY +42 and Targorr Thrash timing gated. See the completion report.

One final routine run uses the frozen build and Stormwind Stockade: Cellblock Rush, playtest-artifacts/stockade-weapon-utilities/20261006-141251022/. The normal UI-created Discipline Priest profile receives isolated pre-entry level 30 preparation and four Ready companions. The actual seeded boss is Targorr 1696, source/live creature-84027; native progress/results agree on 1/1 in 03:09.2, no deaths and 2,337 effective player healing. This is the one-boss slice. Committed evidence retains 749 consecutive events (IDs 9–757), with zero gaps/errors/capacity loss: 56 source mainhand, four offhand, two Thrash extra-mainhand outcomes and 172 player/party hand results. Three Disarm windows contain seven actual hand results. Block/shout/Bloodlust auras are unobserved; focused fixtures provide their bounded coverage.

Root visually checks roster, equipped silhouette, mid-route and results: character bodies and staff/shield/blade silhouettes are present. Overlap/HUD occlusion limits complete per-companion gear review. There are no page exceptions; only favicon 404. The one helper/server/browser is cleaned up by the harness. No production source changes follow the frozen live run.

Build SHA-256 8cf9513613aa3ef6a0a64de392e90521b0349d85311f930ba8808e868d6867d9 covers 5,967 files. Reused isolated content manifest SHA-256 ac0fa2a867ba0a495c172de2b89532d69b32d56d032482b26020ce2d189f074b remains unchanged; 2,124 served manifest-referenced objects verify with zero integrity failures. Raw response bodies are not retained. Ninety-six focused runtime/helper tests across 15 files, six source-pin Node tests, Ready-five (7 Vitest/20 Python), avatar 56, final TypeScript and production build pass. No loot wiring, level-cap or readiness change is made. Subprocesses use only GPT-6 Luna extra-high; root completes the utility runtime tests after Luna capacity prevents that follow-up from running.

The evidence-audit follow-up also encounters Luna capacity. Root's clearly labeled root-evidence-audit.cjs/.json rehashes all 5,967 build files, seven loaded chunks and 2,124 served manifest objects (77,019,550 bytes), and recomputes event-ID continuity and native completion. It passes with zero integrity failures. This is root verification, not a completed independent subprocess audit.

Final release check passes 478 changed paths including untracked files; game and vault diffs are checked separately and all 13 task documents pass EOF/ whitespace checks. The task worklog is closed.

2026-10-05 CoA Brewing companion and Splash integration

  • Brewing healer companions now prepare learned Frog Bones during healing downtime through normal AI selection/payment. An existing brew, injured party, insufficient Mana, cooldown, resurrection/dispel demand or enemy cast blocks preparation. Preparation uses an authored 90% health threshold and does not claim an optimal live-server rotation. Ordinary healing scoring uses the caster's projected ingredient state and excludes ingredient casts.
  • Splash Potion now uses friendly ground targeting and a shared destination for its heal and sourced Frog Bones absorb. The importer no longer grants inactive ingredients or unresolved SLS combos unconditionally. Actual player/NPC tests cover range, nearby/distant recipients and naturally prepared Potion Toss.
  • Guardian formation actions are absent from the promoted runtime catalog; Footman's Calling cannot use an assumed active formation. Paragon's August builder and July DBC payload conflict. Exact next integration boundaries and remaining Brewing rider evidence are in docs/COA_FIRST_PARTY_MILESTONE.md.
  • 37 focused tests and Ready-five checks pass. The five chosen level-60/seed-1 Stockade/Hamhock seat diagnostics record no deaths; Barbarian defeats at 13.6s and Pyromancer at 24.8s, other seats reach 30s. The Guardian-seat Brewing NPC records one naturally selected Frog Bones cast. Low pressure limits healing and tank conclusions. Raw evidence is under artifacts/coa-first-party/stockade-integration-2026-10-05/. All five remain Needs Testing; no live browser playtest was performed in this integration.
  • Final production build and release checks pass, including source/runtime/UI targeting parity and preservation of unrelated CoA records. The canonical CoA vault note records the new owners and source boundaries.

2026-10-05 CoA first-party mechanics and rotation follow-up

  • The selected Guardian/Vanguard, Witch Doctor/Brewing, Barbarian/Brutality, Ranger/Archery and Pyromancer/Incineration remain Needs Testing. Source evidence comes from the cached August Vol'Jin capture and global DBC; no new crawling or downloads were needed. See docs/COA_FIRST_PARTY_MILESTONE.md for ownership, source IDs, exact limits and the next mechanics work.
  • Guardian Vanguard now gains actor-owned stacks on normal swings and blocks, caps at ten, refreshes for 60 seconds and reduces each magic school by 2% per stack. Player and companion tests use real incoming blocks and Hamhock's imported Chain Lightning: two stacks reduce the hit by 4% before one stack is consumed. Ordinary melee abilities do not add stacks. Periodic consumption remains unspecified and excluded.
  • Brewing stores actor-owned ingredients, gates one/two capacity before payment and adds Frog Bones' sourced eight-second shield to Potion Toss's selected ally. Actual player and companion cast paths are checked, including removal of the bogus caster shield, foreign/absent marker rejection and unchanged resources/cooldowns on a full-cap rejection. The companion Toss test primes its ingredient; default healthy AI ingredient preparation remains unfinished. Other ingredient riders and unspecified replacement/removal remain gaps.
  • Learned Beheader restores maximum Energy after an effective Decapitate kill for a player or companion. Nonlethal, rejected and unrelated kills do not refund. Additional-Energy conversion and generic weapon-damage projection remain separate work.
  • Ignite now uses its sourced unit target rather than spreading its burn via effect-radius metadata. Unit periodic maintenance compares ability, caster, recipient and remaining time; another target's effect does not block the new cast. Mojo Beam's incidental caster aura no longer redirects the friendly unit-heal decision to the caster. No optimal priority list or clipping window was inferred. An actual companion Mojo Beam test checks authoritative Mana payment and its first pulse healing the injured Vanguard ally, not the caster; the full duration conflict remains unresolved.
  • Earlier three-cast Ranger/Pyromancer companion counts were a reporting defect, not observed inactivity. The collector now counts party releases and dedupes channels. Final level-60 seed-1 Hamhock diagnostics run only this explicit party, with every active-player seat and a 30-second limit. All finish without deaths; Barbarian defeats at 13.6 seconds and Pyromancer at 27.8, while the other seats reach the limit. Healer-seat companion counts are Ranger 19 and Pyromancer 16; Ranger still records 32.3% Focus starvation. Outcomes and low pressure do not establish tank/healer coverage or balance. Raw ignored runs are artifacts/coa-first-party/stockade-2026-10-05/seat-1-after.json through seat-5-after.json; two/four also retain before runs.
  • This is automated mechanics/diagnostic evidence. No live browser playtest, readiness promotion, full repository suite or broader class sweep occurred.
  • Focused checks pass 126 tests in 19 directly affected files, plus the existing seven Ready-five Vitest and twenty Python checks. Both generated Ignite actions are unit-targeted; the other twenty class records, resources and triggered payloads are preserved.
  • Final production build passes TypeScript, asset audits, bundling, compression and bundle verification. Final release hygiene includes untracked files and passes; the canonical CoA vault note is updated in its separate repository.

2026-10-05 Enemy stances and NPC blocking

  • NPC Defensive/Battle Stance now use the pinned form and linked passive data, replace each other, and clean up on expiry/reset/evade. Defensive multiplies all-school damage taken by 0.9 and dealt by 0.95. Improved Blocking adds 75 percentage points for six seconds. Reviewed Stockade Inmates prepare Battle Stance after one idle second; Kam's combat self auras retain source timing.
  • Player and companion melee/ranged autos share ordinary source-backed WoW creature blocking: base chance 5%, block value floor(level / 2), one skill adjustment, actual facing and source NO_BLOCK/cast/control/evade gates. Spell and periodic blocking attributes, hostile outgoing threat and Ascension's unsupported stance DUMMY rider remain separate gaps. Native RoM defenders retain their existing model. The extra incapacitation labels are documented simulator approximations; plain root still permits blocking.
  • All 102 affected Vitest checks, seven Ready-five Vitest/twenty Python checks, seven importer cases and the production build pass. The source comparison preserves unrelated encounter health, placement and attacks. No selected imported template sets NO_BLOCK; its evidence is the importer/helper fixture. See docs/ENEMY_STANCES_BLOCKING_2026-10-05.md and the scoped live report.
  • Normal full Stockade run 20261005-184333429 confirms all five exact boss IDs and the native full-clear screen, Easy/Normal, at 24:25.4. The level-30 Discipline Priest/four Ready companions finish alive without observed deaths or resurrection recoveries. Natural progression ends at player 40 / party 39. Frozen SHA-256 remains 1fcd021af0ef90c8d994cf1ab853ef0e62f4d4767fa3acaab698b14121194310.
  • Live aura state contains both NPC stances and Kam's Improved Blocking. There are eight party-to-hostile and 141 hostile-to-party block outcomes. Only 33 outcomes have a sampled latest-result/raw-amount match for blocked amount; unmatched values remain unknown. Melee/player/native-RoM attacker cases and exact timing boundaries use deterministic integration evidence.
  • Root visually reviewed the 25/50/75-percent captures and full-clear screen: bodies and equipment silhouettes render, with existing overlap/edge occlusion still present. No visual or race-model fix is claimed. Page errors are zero; the console has one missing-favicon 404. All 2,124 fetched hash-addressed objects verify, but the broad source content manifest changed during QA; whole-content immutability is not claimed. The scoped report records that limit and retains the superseded observability-limited first attempt.

2026-10-05 Stockade enemy mechanics and Chronomancer

  • Enemy Chain Lightning 421 now selects three distinct living visible targets with nearest-target jumps, profile-specific decay and geometry independent from home-leash aggro. Source Rend 6547/16509 applies five three-second bleed pulses, restarts its ordinary refresh phase and snapshots caster damage-done modifiers while keeping recipient damage-taken modifiers dynamic.
  • Verified Enrage and shouts now use shared auras, source duration/radius, physical damage or attack-power channels, source stacking and melee swing scheduling. Stance forms and Improved Blocking were unsupported at this stage; the later stance/blocking continuation above resolves their ordinary NPC paths. Chrono Sorcery's structured +12% Mana restores the existing exact 414 Mana expectation; source power identity keeps Rage/Runic Power riders separate from Mana.
  • Required checks pass: 135 affected Vitest, two selected original combat regressions, seven Ready-five Vitest and twenty Ready-five Python checks. The production build passes all hooks and the final standalone TypeScript check passes. Final release hygiene and game/vault diff checks pass. No full suite or expanded balance sweep was run.
  • Live QA uses the immutable frozen-dist-20261005-153220 copy: all 5,964 files aggregate to SHA-256 296f26c1a58d096b925977f8a0f4aebc5a2de20ba4ce804592188a87102f99e0. It contains index-D-xYtSuF.js and combatStore-BmIrp-s1.js. The server's content source remains the read-only project catalog; downloaded objects and account data use a disposable browser/server profile.
  • Final normal full Stockade run 20261005-160913676 verifies all five boss IDs and the native full-clear screen at 21:32.5, Easy/Normal. All five party actors finish alive; the tank has three observed casualties followed by normal resurrection UI recoveries, with no observed player death. The results overlay ends route input at checkpoint 462/481. This is not balance certification.
  • Live evidence contains four unique Hamhock Chain Lightning cast windows, including a three-recipient Nature damage group of 579/347/208 raw damage; 359 Rend damage events across both spell IDs; Targorr's source Enrage and Battle Shout applications to hostile allies. Demoralizing Shout has 44 unique sampled cast windows; its recipient effects and the unobserved source-profile/refresh/expiry boundaries use deterministic proof. Source-aura coverage includes shared combat-aura telemetry even when the legacy mob.auras field is empty.
  • Root visually inspects equipped-entry, 50%, 75% and final-results captures from campaign/final-build-20261005-160915922/ under that run. Bodies, HUD and full-clear results render. Actor overlap and partial occlusion persist; no visual fix is claimed. Frozen-build/content-manifest fingerprints are stable and all 2,124 served content objects match their hash addresses. Page errors are empty; the console contains only the optional favicon 404.
  • Preserve the superseded-before-entry, content-source 404, one-boss movement overshoot and serializer-failure attempts. Their harness issues are corrected in the final wrapper; the scoped report retains their original evidence.
  • See the coordinated report and the scoped live report.

2026-10-05 RoM healing, party complements and player Auto Shot

  • Group Heal's party-heal effect now carries its sourced 12 m radius for both player and NPC resolution. Generated native-five parties exclude the active player's ordered identity when the other four can fill the requested roles. Scout/Rogue recurring Auto Shot uses 80% ranged weapon DPS, native or shared weapon cadence, owner Blood Arrow costs and ordinary start/stop bindings. It uses the existing resolved Training Gear bow with empty inventory and supports compatible custom-item overrides.
  • Required checks pass: 96 affected Vitest plus 7 Ready-five Vitest and 20 Ready-five Python checks. The production build and its pre/post hooks pass. Supplemental generic combat checks pass 110/111; the Chronomancer resource mismatch (expected 414, actual 369) also reproduces with committed HEAD versions of the changed production modules. See the source-only replay in artifacts/rom-healing-ranged-baseline/README.md. The enemy-mechanics follow-up above corrects that resource mismatch without changing the original assertion.
  • Bounded full Stockade run 20261005-042203897 passes the three required live criteria in 61.051 seconds on index-Cvmh-YKE.js. Its recursive 123-JS manifest remains unchanged throughout: ed3cb65752426810c84be15184306114fdf36d3804a23f917213fc854f4651d4. Both normally generated rosters are the exact native-stat complement of the Priest/Knight and Scout/Rogue players. Profiles are disposable and their level 30/secondary class are prepared only before entry; combat uses normal UI input with read-only telemetry.
  • Normal Attack party order produces natural injuries. A player Group Heal starts/completes and heals Caelan for 92 effective HP; its full-health self event has zero effective healing. NPC recipient position is unavailable in that capture, so it does not establish the 12 m boundary live. Deterministic player/NPC integration owns distance, living and LOS proof.
  • Normal Auto Shot input produces two distinct Physical enemy hits of 37 effective damage, 2,612 ms apart. Stop input clears the mode and its observed window has no player Auto Shot hit. The captured restart is inconclusive as the target dies. Owned Blood Arrow is active; aggregate HP samples overlap combat/recovery and do not prove exact self-cost. Focused integration proves the once-per-attempt 2% max-HP cost with no MP or separate self-damage event.
  • Root inspected priest-knight-group-heal-after-observation.png, scout-rogue-auto-shot-target-1.png and scout-rogue-auto-shot-cancel-restart.png from that run. Bodies, equipped silhouettes and HUD render; doorway/party overlap and camera occlusion persist. No page or asset HTTP errors occur; the console has a favicon 404. This is a bounded mechanic diagnostic, not a new full-clear or balance proof.
  • Preserve initial run 20261005-040846797 (fixture name casing) and 20261005-040932648 (inconclusive combat). The latter exposed the corrected explicit-assignment-only guard and selection-only Defend encounter setup. Earlier Stockade captures retain their original build identities. Current Blood Arrow cap-80 scaling remains unverified at the retained 10% fallback; Auto Shot's unquantified last-offensive-skill bonus remains omitted. See the coordinated report and the live report.
  • Supplemental same-build run 20261005-042845955 passes all required criteria again in 61.658 seconds, with 92 effective Group Heal HP and two Physical Auto Shot hits of 36 each. Ordinary Stop party order precedes cancellation; no shot occurs in the observed stop window, but target death again prevents restart. Deterministic integration verifies stop-window silence/no cost and a fresh full-interval deadline after reactivation without an immediate or catch-up hit. The original Defend order is restored. Root also inspects that run's scout-rogue-auto-shot-cancel-party-stopped.png and scout-rogue-auto-shot-cancel-restart.png; the same overlap/occlusion remains.

2026-10-04 Stockade default and Blood Arrow toggle

  • Root contributor rules, shared playtest helpers, routine script defaults and canonical vault notes now select full Stormwind Stockade. Mode-specific Bite-Sized spawn checks use its Stockade variant. An independent audit found no remaining routine Wailing script default; old source fixtures and dated captures retain their dungeon labels.
  • Blood Arrow's verified Knight/Scout and Scout/Rogue base definitions and ranks now use an indefinite owner-local toggle with no legacy idle drain. Recast or right-click removal starts a ten-second cooldown; unrelated buff clicks leave Blood Arrow active. Permanent NPC Blood Arrow icons remain visible without exposing every long-term buff. Exact costs and rider lifetime have focused integration coverage; player recurring ranged Auto Shot was still open at this captured build and is implemented in the 2026-10-05 follow-up above.
  • Corrected-build ordinary Stockade run 20261004-194732821 passed both owners' cancellation, cooldown rejection/reactivation/reuse and unrelated-buff guards, plus owner-only NPC cancellation. Scout/Rogue's isolated Shot consumed 46 HP and no MP. Knight/Scout's cost sample overlaps an incoming hit and regeneration; it is not exact-cost live proof. Root inspected actual screenshots: bodies and equipped silhouettes render, with party overlap at the entry/combat sample. The image named knight-scout-body-and-gear.png shows the training-gear panel.
  • The primary Knight/Scout roster has all five active identities. The optional Scout/Rogue damage-role roster instead duplicates Scout/Rogue and omits Mage/Warlock; that captured selection gap is fixed in the 2026-10-05 follow-up.
  • The first full route exposed unsupported NPC utility spells dealing damage. Two source corrections now omit thirteen verified utility/extra-attack IDs. The second pass removes 51 more false damage rows and corrects 30 real attack/control rows for source melee range, interruption and caster-area targeting. Exact Ascension/Epoch pins preserve profile-specific effects; real utility, chain fan-out and separate-target shout effects remain gaps. Regeneration also refreshes existing school/kind metadata. Independent normalization found no unrelated encounter change or added attack.
  • Final source-aware catalog/enemy checks passed 57/57; Ready-five passed 7 Vitest and 20 Python checks, for 340 distinct Vitest checks across this task. Both catalog forms match. Independent review checked all 22 pinned spell IDs against both DBC inputs. Production build index-CM5EW2MK.js passed its TypeScript/Vite, asset, compression and release-bundle checks.
  • Final ordinary Stockade run 20261004-214255695 verifies the native FULL DUNGEON CLEAR screen and all five persistent killed-boss IDs in 17:37.7 (difficulty 1 / Easy / Normal). Native-stat Priest/Knight naturally reaches level 39 from 30; all five survive at the endpoint. Rorik dies once and is revived through the normal Rez dead members control; no player respawn or corridor replay occurs. Root inspected actual roster, entrance, route and results images: loaded bodies and equipped silhouettes render, with overlap at some party samples. The results image is stormwind-stockade-boss-arrival.png.
  • Whole-log player healing is 158,465.20 effective across 203 positive events; 34 ordinary Alt+Digit2 Group Heal inputs all start and heal, totaling 66,939.01. The entrance right-drag changes yaw by -0.378, released yaw remains unchanged and pointer lock stays null. No page errors occur; only a local favicon 404 appears in console capture. Hamhock dies before his named checkpoint, so that full clear contains no Vow attempt. Player checkpoint recovery remains unverified live.
  • Separate bounded Stockade diagnostic 20261004-232722030 confirms one player Vow cancellation on living Hamhock: completed cast, owned silence aura, disappearance before release and seven read-only samples through release plus 118 ms without matching Chain Lightning damage. Normal right-drag uses a hit-tested canvas row, paced deltas and measured hostile facing; pointer lock stays null. Root checked raw proof and the actual endpoint image showing Hamhock at 54,974/80,135 HP and loaded equipped bodies, with overlap and a large wall in view. Targorr and Kam are its only credited bosses. Rorik, Durnik and Caelan die once and return through normal UI revival; all five finish alive. There is no player death or full-clear attempt in this capture. Earlier facing/HUD-blocked diagnostics remain uncredited. No page errors occur; only the favicon 404 appears in console capture.
  • The reviewed campaign harness discovers learned Group Heal on Alt+Digit2, waits for actual control/school locks and records owned-party targets. Ordinary death recovery replays the authored corridor and keeps progress and replay evidence distinct. Production helper discovery retains the matched function reference because minified export aliases may collide.
  • Evidence and remaining source/runtime limits are in the live report and the parent continuation report.

2026-10-04 Timed mechanics and campaign bosses

  • Shared Killing Spree now schedules five player/companion assaults over two seconds, including the application pulse. Companion AI selects the learned action; actual scene relocation and owner-local cleanup have focused coverage. This supersedes the immediate-player/NPC-gap limitation in the older entry. Child weapon amounts, seeded target choice and teleport geometry retain the documented simulator approximations.
  • The exact five native builds were audited. Knight/Scout Blood Punishment now grants +15% received healing and +5% Holy damage on Blood Arrow. Actual NPC casts use combat effect schools and consume outgoing aura modifiers once on their respective native/compatibility paths. The separate current-CoA Blood Arrow base-toggle/cost migration was still open in that capture; the Stockade continuation above supersedes it for the two verified pairs. No loot or cap change.
  • The player and spectator follow cameras share physical terrain and visible wall/pillar obstruction queries. Final-build Wailing screenshots near the formerly clipped pose show loaded character bodies and equipped silhouettes, right-drag rotation, and a stable released view. The old foreground obstruction is absent at this nearby sample. Other cave viewpoints remain partially framed by rock; this does not certify universal camera visibility.
  • Normal final-build Barren Caves clears Anglo 1/1 in 13:36.9. The rendered FULL DUNGEON CLEAR panel agrees with dead/zero-HP boss telemetry. The initially level-30 Priest/Knight naturally reaches 36; Rorik dies and the other four actors survive. Effective healing totals 46,328.47. Living-party separation peaks at 12.52 m in periodic route samples and 15.56 m after packs. The native overlay stops further input; no loot action is taken. Evidence: playtest-artifacts/campaign-boss-pass/final-build-20261004-150021873/.
  • Strict Wailing movement reaches Lady's anchor without the earlier fall: 433.96 m traveled, all 284 movement vertices checked and five actors surviving. Lady fights and is defeated during pack stabilization before the endpoint; actual source Bolt/player damage events and captured "already defeated" feedback establish that result. The old endpoint-only classifier misses this earlier fight after the boss leaves active state. Full Wailing clear and its remaining seven bosses/Naralex event are unverified. Effective healing totals 28,587.81. Empty guard-attempt records are not guard-clear proof. Evidence: playtest-artifacts/campaign-boss-pass/final-build-20261004-151549020/.
  • At both sampled Wailing camera probes, held right-drag changes yaw by -0.378 radians; pointer lock stays null and released/unheld movement changes yaw by zero. Player displacement during either drag is below 0.001 m. The early probe is 5.18 m from the old clipped pose, so the screenshots establish nearby visual improvement, not an exact-pose boom measurement.
  • Ordinary final-build Boss Testing confirms Vow cancels a real source Lightning Bolt 9532 and applies the 8,400-ms Silence status to source creature 3671, without staging enemy casts or editing live combat state. The aura cancels the cast before the explicit interrupt effect, so no Nature school lock is set. Source immunities are Fear/Horror only. A longer observation then reveals Nature Thorns casts starting during silence, requiring a separate cast-gate correction; that pre-correction run establishes initial cancellation only. Evidence: playtest-artifacts/vow-live-final/final-build-20261004-151736260/.
  • Production build and 266 focused assertions across eleven files pass, plus Ready-five's seven game/twenty Python tests. Route assets are index-DHQInfBp.js, combatStore-Cx06rFzG.js, GameRuntime-D87YWi4Q.js, PartyFrames-5jlxKxxK.js, romAbilityCatalog-CHjYfHkT.js, and index-499eecpe.css. Browser results on later assets must be labeled separately.
  • The corrected final-build Vow replay passes full suppression: the real Bolt is canceled before release, no nonphysical cast is observed during the actual 8,400-ms Silence status, and source Nature Bolt resumes naturally 61 ms after expiry. Lady is defeated with all five actors alive, no XP/loot and no readiness change. Pre/post cast and boss-defeated images were visually inspected; bodies and equipped silhouettes render. No cast-cancel presentation event is claimed. Evidence: playtest-artifacts/vow-live-final/final-build-20261004-153859692/. Corrected assets: index-Cm7Olrd2.js, combatStore-1B4KOVhS.js, GameRuntime-hM1AaOYR.js, PartyFrames-BfZEkXH5.js, romAbilityCatalog-DjRUCJbs.js, and index-499eecpe.css. The preceding campaign runs retain their recorded earlier assets. Final build and 30 additional cast/Vow/source assertions pass (296 focused total across fourteen files); Ready-five's seven game/twenty Python tests are rechecked after the correction.

See docs/MECHANIC_PARITY_CAMPAIGN_PASS_2026-10-04.md and its scoped reports for source limits, normal-campaign outcomes and the independent live Vow evidence.

2026-10-04 First CoA party kickoff diagnostic

  • The selected party is Guardian/Vanguard, Witch Doctor/Brewing, Barbarian/Brutality, Ranger/Archery, and Pyromancer/Incineration. Offline preparation fixes those five build identities and writes a source/mechanic inventory plus five explicit active-player configurations.
  • Exposed 124 sourced active Talent actions across these five classes, retaining their learned-rank gates and passive exclusions. Verified Potion Toss's base heal and Mana payment on a player and companion, Decapitate's strictly below 35% target-health gate, and Ranger primary Focus spending/recovery. Ingredient riders, execute Energy conversion, and full class state remain pending.
  • Automated targeted runs use level 60, seed 1, and Taragaman the Hungerer only, capped at 30 seconds. Guardian/Witch Doctor/Ranger/Pyromancer active seats reach the time limit with 80,065/79,292/12,782/14,724 boss health remaining; Barbarian's active seat defeats the boss in 12.6 seconds. All five runs record zero deaths. Raw evidence is under artifacts/coa-first-party/level-60/.
  • Companion casts remain sparse and player-seat results differ substantially. The healer-seat Ranger companion casts three times and records 32.3% Focus starvation after its primary-pool correction. This baseline identifies work; it does not establish class correctness, tank/healer pressure coverage, or balance. No live browser/visual playtest was performed in this kickoff.
  • Validation: 87 focused game tests across 15 files; Ready-five seven game and twenty Python tests; production TypeScript/build/asset audits/compression and bundle verification pass. Readiness and ordinary Ready-only pools are unchanged.

See docs/COA_FIRST_PARTY_MILESTONE.md for the source anchors, evidence gaps, repeatable commands, and completion gate.

2026-10-04 Interrupt, sustain and campaign follow-up

  • Correct the pinned AzerothCore creature-immunity importer: CreatureImmunitiesId is a foreign key. Lady Anacondra's row -93 supplies Fear/Horror only; the source-registered Lightning Bolt regression now cancels under Vow of Silence. True Silence/Interrupt immunity remains protected. This supersedes the source interpretation of the older failed browser attempt below; that full fight was not rerun after the correction.
  • The native Knight player plus owned Priest/Rogue/Scout/Mage party clears three consecutive Anglo pulls at levels 60 and 80, preserving resources, effects and cooldowns through 10-second/90-second rests. Six clears, zero deaths, no empty Priest Mana pools. Delivered overheal is 63.9%/30.6%; direct heals start on injured snapshots even with Regenerate active. Recovery and healing AI are unchanged. Actual owned-NPC telemetry is separate from player pressure data.
  • Killing Spree's representative signature now checks its source class-script selector, while preserving the ten-strike player regression. The linked child 61851 damage aura is corrected from 1% to 20% for two seconds. Companions still lack this script; immediate player assaults and deterministic selection remain approximations. This supersedes the earlier 30/31 test result below.
  • The floating Roster details toggle intercepted Continue at 1440x900. The single-screen roster now reserves footer space. Normal pointer hit checks and screenshots show clearance at 1440x900 and 390x844; body/staff remain visible. Other compact layout details and dual-display layouts are not certified here.
  • Original campaign entry plus 90-second entrance/encounter segments are checked independently. Barren records 69.34 accumulated travel units, 41 keyboard steps, 15 effective player heals (~6,155), seven player damage events (549), and no deaths; earned XP naturally raises the player from 30 to 31. Its valid phase is in playtest-artifacts/native-routes/final-20261004-051413627/.
  • Corrected Wailing records 23.76 travel units, 15 keyboard steps, 11 effective heals (~6,831), three observed entrance enemy deaths and no party deaths. Player DPS is zero and remains unverified there. Normal Attack/Defend inputs keep the entrance fight near the healer. Evidence: playtest-artifacts/native-routes/final-20261004-052623521/.
  • Preserve the first longer Wailing trace in final-20261004-051737171/: the tank died after repeated out-of-range heals while automated steering fell behind. The harness now follows actual companion positions, prefers a bound ranged attack and waits for casts. Game balance/recovery are unchanged. Final phases have no page errors; the logged 404 URL is favicon.ico.
  • Campaign midpoint/endpoint images were visually inspected. Midpoints show Urgent Heal on an injured native tank and loaded bodies/equipment. Endpoint views are partially occluded by cave geometry. Full dungeon completion, route-guide accuracy, camera visibility and complete mobile QA remain unproven.
  • Final production build passes TypeScript, asset audits, bundling, compression and bundle verification. Chunks: index-CAMDJqEC.js, combatStore-t7bO4yKt.js, GameRuntime-otPnJCWI.js, PartyFrames-BsBsesPR.js, and index-499eecpe.css with the roster clearance. Focused checks pass 40 interrupt/enemy cases, five importer cases, 81 Rogue/catalog/rotation cases and the six-pull sustain diagnostic; the final Vow-only rerun passes eight. Ready-five remains seven Vitest/twenty Python.

See docs/ROM_INTERRUPT_SUSTAIN_ROUTE_FOLLOWUP_2026-10-04.md and its linked source, sustain, Rogue and campaign reports for attribution and scope limits.

2026-10-03 Selectable RoM native stats

Source recovery, equipment completion and full selected fights

  • The final build passes app TypeScript, production bundling, asset audits, compression and bundle verification. Exact chunks: index-DzLgXnx0.js, combatStore-Dh-12M9R.js, GameRuntime-C95Du8PI.js, PartyFrames-Cf7FSiBA.js. Source/recovery/resource checks pass 156 tests; native pacing passes five; legacy pacing passes 18 with all 83 timing samples; the unchanged 80-pull native cohort has zero deaths/invalid casts.
  • Native player/owned-NPC HP and Mana now use source ReHP/ReMP pulses, retaining per-actor compatibility choices. All 440 imported NPC equipment defaults and 11,000 candidate pairs resolve supported snapshots. Extra off-hand/bow swings are not scheduled. Source recovery required early native boss calibration: level-one boss factor 0.30 becomes 0.20, with trash/later anchors unchanged. Holy Strike keeps its Holy amount while starting physical auto-attacks; early native Priest healers reserve one learned direct heal before hostile spending.
  • --full-fights creates a native level-30 Priest/Knight healer and the other four native identities, then completes original-cooldown Boss Testing scenes on this exact build. Anglo clears in 39.9s, Lady Anacondra in 16.5s; all five actors survive and there are no page errors. Player Mana ends at 88.9%/91.0%. These testing-room health pools are separate from campaign durability.
  • Anglo Physical Trample/Bash cancellations are observed before completion alongside resolved healer counter inputs. Gulp clears from the tank 1.85s before expiry after a resolved cleanse; a Rogue's separate Gulp expires naturally. Lady retains Nature-school Lightning Bolt; her Mage's Slumber clears 4.74s before expiry after cleanse. A single Vow of Silence attempt does not cancel Lightning Bolt, so that particular cross-source counter is unproven.
  • Full fights record zero movement inputs. Separate labeled same-build fixtures retain Trample's source 1.8s warning/radius five/effect. Real W movement carries the player 2.75 units from distance 3.93 to 6.69 while the cast stays live: player damage is zero, nearby Rogue damage 262. Trample, Bash and Gulp each release once; source attack selection/readiness, repeat cooldown, positions, threat and companion pause are fixture setup.
  • Roster body/staff, loaded player/party bodies and held weapon/shield/staff/bow silhouettes at mid-fight, native recovery/Training gear UI, defeated-boss results and Trample warning/movement images were visually inspected. Early NPC loading placeholders resolve by mid-fight. Evidence: playtest-artifacts/native-combat/full-fights-20261004-024033763/ and the same-build fixture playtest-artifacts/native-combat/results.json.
  • Ready-five passes seven Vitest/twenty Python cases; avatar checks pass 47. An additional shared rotation selection passes 30/31, with the existing unsupported Rogue Killing Spree signature check still failing. High-level native healer Mana remains comfortable. No all-class sweep, loot wiring, cap change, readiness submission or deployment. This is selected desktop scene evidence, not full navigation/mobile/every-encounter certification.

See docs/ROM_NATIVE_RECOVERY_EQUIPMENT_PACING_PASS_2026-10-03.md for source ownership, measured pressure, test boundaries and pre/post evidence.

Five-class scaling follow-up

  • The subsequent final build passed with index-Ba_szGct.js, combatStore-BGky6YlB.js, and PartyFrames-CcpsvWIi.js. Exact-dist Edge QA passed after native NPC level/cap reconciliation and Training gear label fixes. scripts/playtest-stat-rulesets.cjs used an isolated temporary account/server.
  • RoM Equipment slots and fallback names display Training gear, with the automatic level-79 cap note. Native player tabs and Durnik's native Mage NPC Attributes panel passed; desktop and 390-pixel layouts remained readable. Legacy profiles, independent stat choices, switching locks, build/checkpoint preservation, and both native/compatibility dungeon runs passed again.
  • Roster and both dungeon captures visibly show character bodies and held starter staffs. Dungeon overlays and loading intro were closed for those captures. Native player/NPC HP and MP displays remained whole and readable.
  • No page errors, HTTP failures, or failed application-resource responses occurred; the only console response error was the optional favicon 404.
  • Latest evidence supersedes the shared artifact path below: playtest-artifacts/stat-rulesets/results.json and its eleven screenshots, including 05-native-npc-stats-attributes-desktop.png, 04-native-dungeon-gameplay-overlays-closed.png, 08-wow-compatibility-dungeon-gameplay-overlays-closed.png, and 07-native-stats-attributes-mobile.png.
  • Final focused validation passed 176 tests across twelve files; Ready-five passed seven Vitest and twenty Python checks. Avatar validation passed 47 tests before the subsequent party-only fixes. The targeted Barren Caves diagnostic recorded uneven pacing, including slow low-level bosses and brief high-level trash; no enemy HP, loot, or readiness policy was changed. Full diagnostic and remaining boundaries: docs/ROM_FIVE_NATIVE_SCALING_2026-10-03.md.

Original stat-ruleset implementation

  • scripts/playtest-stat-rulesets.cjs passed against the final production build in Edge with an isolated temporary offline account/server. Checked chunks: index-CGkT8hBz.js, combatStore-CVXgxk1Z.js, and PartyFrames-BeW5_TCA.js.
  • Creating a RoM character through the UI selected Native RoM. A synthetic legacy profile with its mode removed migrated to WoW compatibility. Choices persisted independently across reloads, and switching preserved equipment, inventory, class build, and a checkpoint created during the dungeon run. Synthetic engaged-mob and online-activity fixtures blocked the actual menu switch control; these guard checks do not certify a real multiplayer session.
  • Both native and compatibility characters entered Wailing Caverns. The roster preview and both dungeon captures showed full character bodies and held starter staffs. Dungeon captures had overlays closed so bodies, equipment silhouettes, and HUD counters could be inspected together.
  • Native Attributes, Offense, and Defense tabs showed their source labels and the shared-combat caption. HP/MP agreed with runtime pools and accessible meters. Whole-value HP/MP display prevents fractional native caps from overflowing HUD counters; accessible maxima and runtime pools retain precision.
  • Desktop and 390-pixel menu selectors fit without label overlap or field overflow. The narrow native Attributes panel remained readable and in bounds; the existing owner row retains horizontal scrolling.
  • No page errors, HTTP 5xx responses, or application-resource response errors occurred. The only console response error was the optional favicon 404.
  • Evidence: playtest-artifacts/stat-rulesets/results.json and its ten referenced screenshots, including 01-roster-native-rom.png, 04-native-dungeon-gameplay-overlays-closed.png, 04-native-stats-{attributes,offense,defense}-desktop.png, 07-native-stats-attributes-mobile.png, and 08-wow-compatibility-dungeon-gameplay-overlays-closed.png.
  • Focused validation passed 219 tests across 22 files with four existing skips; Ready-five passed seven Vitest and twenty Python checks, avatar validation passed 47 tests, and the full production build passed. This verifies selectable stat inputs and shared-runtime integration, not complete native healing, native combat balance, or a RoM readiness promotion.

2026-09-30 Dungeon graphics options

  • scripts/playtest-graphics-options.cjs entered WoW Wailing Caverns and RoM Forsaken Abbey in headless Edge with an isolated temporary database. It changed render resolution to 200%, texture filtering to 16×, shadows to High, and ambient fill to High through the Options panel. No browser page errors occurred.
  • The canvas measured 1.38× pixel density under adaptive scaling and 2× after the fixed setting, including after switching dungeons. The High setting rendered both dungeon scenes without missing world geometry or textures.
  • Evidence: artifacts/playtest/graphics-options/{wow-default,wow-high,rom-high,graphics-options,graphics-options-thor}.png and results.json. The screenshots show visual operation, not a controlled lighting fidelity or frame-rate benchmark. Higher-resolution source textures and original client lightmaps are not shipped as alternate runtime tiers.

2026-09-27 Bite-Sized editor movement regression

  • The original edit-mode action blocker also suppressed continuous movement and input snapshots, so WASD did nothing even after returning focus to the world. Movement/jump gating is now separate from combat-action gating. Panel controls and overlays still pause movement; Walk in scene or clicking the world returns keyboard focus while keeping the panel open.
  • A focused headless Edge check with BITE_SIZED_EDITOR_INPUT_ONLY=1 moved the player in all four WASD directions on the Stockades entrance stairs. Focusing a coordinate field stopped W movement, and clicking the world restored it. The character remained grounded after walking. An ability key started no cast in edit mode. Right drag changed yaw, pointer lock stayed null, and release stopped camera changes; no page errors occurred.
  • Evidence: playtest-artifacts/bite-sized-editor/editor-movement.png and movement-observations.json. All 33 focused input tests, the production build, and release candidate check passed. The earlier authoring playtest verified input suppression and camera drag but missed actual walking; its script now includes this movement regression check.

2026-09-27 Bite-Sized spot editor

  • scripts/playtest-bite-sized-editor.cjs used the real app in headless Edge with an isolated temporary API database and GM account. It created a named Stockades spot, added an imported Forsaken Abbey Carrion Spider, duplicated and removed an individual placement, captured anchors, and published through the GM API. The scene showed textured imported mobs and selectable placement rings; the collapsible scrolling panel kept its publish controls accessible.
  • WoW Stockades and RoM Forsaken Abbey editing loaded grounded players, normal dungeon geometry and textures, mob previews, and five party-seat markers. Evidence: playtest-artifacts/bite-sized-editor/wow-editor.png, cross-dungeon-preview.png, and rom-editor.png.
  • In draft test runs, the after-mobs boss stayed inactive until the trash died; the present-from-start boss was active immediately. Injected lethal combat damage exercised encounter completion, and the editor displayed Test complete with an untimed run. This verifies activation/completion, not encounter balance or a manually played full clear. Evidence: boss-after-mobs.png and boss-present.png in the same directory.
  • Focusing the spot-name field prevented W movement. After collapsing the panel, right drag changed camera yaw, pointer lock stayed null, and releasing the button stopped camera changes. No mouse-capture prompt or page error occurred.
  • Randomized runs entered both the Stockades and Forsaken Abbey parent maps with ready assets and pinned creature assignments. Evidence: randomized-stormwind-stockade.png, randomized-forsaken-abbey.png, and observations.json. These are local isolated runs; no production layouts were published by this check.

2026-09-27 Shadowfiend summon visibility

  • The dedicated scripts/combat-effects/shadowfiend-preview.html page cast the level-80 priest spell and displayed Shadowfiend summon active. The live CombatSummonPopulation renderer loaded creature 19668's textured client FleshBeast model, with its feet near the purple ground marker after placement adjustment. Evidence: playtest-artifacts/shadowfiend/summon-preview.png.
  • The isolated model preview also loaded the same graph as one mesh layer. The combat test verified a fiend-owned damage event and 5% maximum-mana return from the successful hit. Full dungeon entry was not part of this check.
  • After moving model preparation into the Priest gameplay transition, the preview waited for the same shared media cache before casting. In a fresh Edge session, the graph and texture requests completed before the cast (15165.5 ms and 15251.5 ms versus cast at 15265.5 ms); no page errors or frame gap over 50 ms occurred after the cast. The source model remained visible in playtest-artifacts/shadowfiend/warmup-check.png. This isolated preview does not establish the full dungeon frame rate.

2026-09-26 RuneWaker dungeon minimap and M-key map

  • Created a fresh RoM Rogue, downloaded Forsaken Abbey, entered as damage, and waited for the boss preview to finish. The minimap displayed the extracted client map; moving backward changed the live player-marker coordinates.
  • Pressing M opened the full map with the same artwork, player heading, entrance, and eight numbered encounters. Pressing M again closed it. No browser page errors were reported.
  • Inspected artifacts/playtest/runewaker-maps/forsaken-minimap.png and forsaken-full-map.png. The map was readable and did not cover the normal playfield until opened. Navigation floorplans were checked by generated-image inspection and catalog tests, not by live dungeon entry.
  • Validation: 24 focused map/UI tests, TypeScript, production build, content publication, and release candidate check passed.

2026-09-15 Reported Warder Stilgiss and Zereketh issues

  • Reproduced the two submitted production reports in isolated Boss Testing sessions. Warder Stilgiss's imported Frostbolt and Frost Nova were damage-only, and Zereketh's extrapolated level-two health was low enough for the opening party volley to trigger his native rising death effect immediately.
  • Warder now applies an eight-second 40% movement slow with Frostbolt and an eight-second movement-only root with Frost Nova. Both retain their original damage, create visible magic debuffs, and apply to the player/party movement paths without blocking actions while slowed or rooted.
  • Zereketh now enters a level-one Boss Testing room at 540 health instead of using the tiny extrapolated native value. The browser scene retained him at 540/540 after its three-second settle window; the native death effect appeared only after the playtest deliberately dealt 540 lethal damage.
  • Evidence: playtest-artifacts/reported-boss-fixes-2026-09-15/results.json, warder-stilgiss-rooted.png, zereketh-living.png, and zereketh-death-350ms.png. The desktop scene showed the frost impact/root presentation and a living Zereketh, with no browser runtime errors.
  • Validation: the complete 1,762-test Vitest suite passed (six skipped), along with TypeScript, the production asset audits/build/bundle verification, and the isolated two-boss browser playtest.

2026-09-14 New-character PC bars and missing-spell borders

  • A temporary browser fixture used the real desktop bars, ability controls, spellbook, combat store, and character UI activation with memory-only saves. Fresh Priest and Mage profiles populated their PC bars automatically. The Mage started with Frostbolt, Fire Blast, Frost Nova, and Arcane Intellect.
  • Clearing Lesser Heal gave its spellbook entry and ability-picker entry a visible light blue border, including the icon border. Both computed border colors were rgb(146, 213, 255). Assigned and locked spells kept their usual borders. Reassigning Lesser Heal removed the missing-spell border.
  • Switching to the fresh Mage and back retained the Priest's cleared slot. Screenshots of both missing-spell menus were inspected during the playtest. The temporary fixture was removed afterward.
  • Validation: 62 focused tests, TypeScript, production build including bundle verification, and the release-candidate check passed. Full-game verification was limited by a persistent opening-expedition loading screen in both local development and production; menu visuals were verified in the fixture.

2026-09-14 Ability hover tooltips

  • Entered Stormwind Stockade with the existing offline level-17 Priest through the normal roster, dungeon, and role screens. Hovering Smite on the controller bar displayed its description, Mana cost, cast time, cooldown, range, and target. Leaving the button removed the tooltip.
  • Opened Ability controls and its ability picker. Hovering Shadow Word: Pain displayed its own description without assigning it. Flash Heal was readable by hover and keyboard focus despite its level-20 lock. Switching from keyboard inspection to another hovered ability left exactly one tooltip visible.
  • Checked the picker at the default 650 x 490 viewport and at 1280 x 800. Tooltip DOM bounds remained inside the viewport. The in-app screenshot scales unusually with a viewport override; reset the override afterward.
  • Enabled desktop bars in an unsaved UI-layout draft. Hovering the leftmost Smite button showed the tooltip above the bar, clamped to the left edge and outside the HUD's transformed layout container. Discarded the layout draft.
  • A temporary Flash Heal assignment during input testing was restored to the original Smite assignment. No character or template was created or deleted.
  • Screenshot evidence: playtest-artifacts/ability-tooltips/desktop-bar.png and playtest-artifacts/ability-tooltips/locked-picker.png.
  • Automated verification: all 64 UI tests passed, including nine tooltip content, unavailable-control, and viewport-placement regression tests. TypeScript, the production build, and the release candidate check passed.

2026-09-10 Personal UI templates and desktop action bars

  • Opened Wailing Caverns through the normal offline roster, dungeon, and role selection screens, then opened Pause > Edit UI & templates.
  • Verified five bars containing 12 buttons each, including 2 x 6 and 3 x 4 arrangements. Default stacking accounts for each bar's height. The editor can collapse or dock on either side so drag handles remain reachable.
  • Clicked Renew and pressed Shift+Q in keybind edit mode. Reassigned Shift+Q to bar 5/button 12 and verified the previous keybind cleared. Assigned Renew to that button through the ability picker; after saving, Shift+Q cast it and displayed its cooldown. No spell fired during key capture.
  • Dragged the minimap, hid party frames, saved/renamed/overwrote PC slot 1, loaded it, and round-tripped all layouts through export text and import. The imported JSON retained the minimap position, hidden party, bar geometry, ability assignment, key chord, and template name. Restoring a hidden widget works, and Cancel discards that visibility edit.
  • At a 390 x 844 viewport, the editor remained within the viewport and the Save UI button was visible and 36 CSS pixels high. The in-app browser's screenshot preview scales the page unusually at this override; DOM bounds confirmed the editor was 310 CSS pixels wide. This was responsive browser verification, not an Android hardware playtest.
  • Evidence: playtest-artifacts/ui-layout-desktop.png and playtest-artifacts/ui-layout-phone-viewport.png. Restored the offline UI to defaults and removed the temporary template via import after testing.
  • Automated coverage includes migration to six slots, owner isolation, cloud upload/hydration into a separate device cache with a mocked endpoint, malformed imports, key conflicts, and input precedence. No production account credentials were used for the cloud round-trip test.
  • npm run build and the focused 67-test suite passed. The development server was restarted after an existing watcher hit EBUSY on generated web-bootstrap assets during a concurrent build; no runtime UI error was logged in the subsequent playtest.

2026-08-18 GM Manastorm administration - COMPLETE

  • Server-authorized Phenom access, revisioned SQLite configuration, safe all-Needs-tested defaults, public/offline caching, optimistic conflicts, and denial/revision logging were exercised through the production HTTP surface.
  • The GM hub exposed all 406 deduplicated boss records, readiness and runnable state, pool filters, six global switches, dungeon entry, placement editing, and GM tests. A fresh revision correctly reported zero Ready bosses.
  • Live Wailing Caverns authoring captured and nudged the shared group anchor, displayed derived party, boss, portal, and exact linked-mob data, and saved a three-mob / two-kill Chaotic Link stage. The desktop Save control was moved above the Tactical control after the playtest found their hit targets overlapping; a normal semantic click then published the next revision.
  • Promoting an imported encounter directly to Ready initially exposed missing stage materialization at the server boundary. The readiness transition now persists its complete inherited stage. Cross-mode duplicates also merge their mode memberships, so a boss imported for both leveling and end-game is represented once and remains eligible in both modes.
  • Live pool acceptance promoted Lady Anacondra and Burning Felguard, entered a level-1 public Manastorm, then marked the active Lady Anacondra record Not ready from a parallel GM client. The existing run retained Lady Anacondra and its two-stack Chaotic Link snapshot; after reload, the next run selected only Burning Felguard. This verified new-run publication and active-run immutability together.
  • Desktop and Thor-preview passes rendered the DOM editor over the dungeon, retained camera/game separation while the panel was open, and exposed the GM pause-menu entry. Console inspection found no errors and only the existing third-party initialization deprecation warning.
  • Verification passed: server 7/7, full Vitest 121 files / 699 tests, TypeScript, production build, and the KTX2 audit of 11,839 compressed textures with zero fallbacks. The build retained the existing informational large-chunk advisory.
  • Evidence: playtest-artifacts/2026-08-18-gm-manastorm-admin/desktop-admin-hub.png, desktop-world-editor-final.png, and thor-world-editor.png.

2026-08-17 authentic combat VFX and audio - COMPLETE

  • Player, party, and enemy combat actions now publish transient presentation phases without changing combat resolution. The scene consumes those events through bounded pooled effects (High: 64 systems / 8,192 particles; Low: 24 systems / 2,048 particles with no effect lights), while Off skips visual spawning. Actor-group switches clear live systems and voices immediately.
  • The generated source catalog covers 6,383 runtime spell/skill IDs: 5,144 resolve to preserved WoW/Ascension/RuneWaker descriptors and the remaining 1,239 are explicit school/delivery fallbacks. All 38 referenced source sound paths resolve to 32 deduplicated packaged clips (6,365,096 bytes); the audit reports no missing packaged assets.
  • Owner settings migrated to local profile database v3 and remain independent of character gameplay settings. Options exposed High/Low/Off, independent Player/Party/Enemy visual switches, and independent audio mute/volume rows. The existing master volume also controls combat and Manastorm cues.
  • Live Wailing Caverns verification entered through the offline roster as a Human Priest healer. The entrance fight visibly presented party melee/ranged effects and enemy actions. A High-quality Smite capture showed the player cast system alongside party effects; Low-quality Lesser Heal showed the reduced healing system; Off-quality Shadow Word: Pain showed combat state, aura/combat text, and damage continuing without spawned VFX. Defaults were restored to High after the pass.
  • At a 390 x 844 mobile viewport, the Options dialog measured 362 px wide with 345 px of scroll content and no document overflow. Player frame, party list, minimap, and action bar all remained inside the viewport. A discovered narrow Options text/control overflow was fixed by allowing grid labels to shrink and moving combat-audio controls onto a full-width narrow-screen row.
  • Verification passed: combat-effects parser/coverage audit 4/4, focused persistence/event/cue/UI suites 68/68, full Vitest 118 files / 674 tests, TypeScript, production build, and Android web build. Both builds retained the existing informational large-chunk advisory; the browser console had no errors and one existing third-party initialization deprecation warning.
  • Evidence: playtest-artifacts/2026-08-17-combat-presentation/desktop-high-combat.png, desktop-player-smite.png, desktop-low-heal.png, desktop-off-combat.png, desktop-options.png, mobile-combat-controls.png, and mobile-high-combat.png.
  • Coverage limit: browser automation exercised Web Audio creation, group routing, mute, volume, and authentic clip loading but cannot judge perceived loudness or spatial balance; that final acoustic judgment still requires a listening pass on physical desktop/mobile speakers.

2026-08-17 dungeon proximity aggro and range overlay - COMPLETE

  • Idle dungeon enemies now check the living player and party positions during the low-frequency combat tick. Crossing a mob's radius engages its complete linked pack through the normal threat path, anchors each member at its pull position, and seeds initial threat on the nearest actor who crossed the line.
  • Normal enemies default to a 16-unit aggro radius and bosses to 20 units; creature definitions can override either value. Proximity uses full 3D distance so vertically overlapping dungeon floors do not pull one another, while the existing planar combat leash continues to support uneven terrain.
  • Options now includes Mob aggro ranges, defaulting to Off and persisting with the rest of the account gameplay settings. When enabled, idle dungeon mobs render restrained orange world-space boundaries above uneven terrain. Rings disappear once their mob engages and are never rendered in Manastorm.
  • Focused verification passed: src/game/combatStore.test.ts and src/game/mobAi.test.ts, 2 files / 60 tests. npx tsc -b --pretty false passed, and npx vite build passed with 960 transformed modules.
  • Live browser verification entered Wailing Caverns as a healer through the offline roster. With the party left in Defend and no player attack issued, the entrance pack automatically acquired and damaged Garrick. The Options dialog showed the new setting Off by default; matched scene captures then confirmed visible range rings when On and their removal when toggled Off.
  • The browser console contained no errors and one existing third-party initialization deprecation warning. The local Vite host separately recorded the known optional /content/manifest.json proxy refusal because the content server on port 4173 was not running; packaged dungeon play was unaffected.

2026-08-17 Kresh cliff-pull aggro regression - COMPLETE

  • Reproduced the reported reset with a deterministic combat-store regression: Kresh registers at one end of his long patrol, moves to a later patrol point, takes damage while the player is falling well above him, and advances combat after the player reaches the lower grotto.
  • Roaming mobs now anchor their leash at their runtime position when a new pull starts instead of retaining the position where their model first mounted. Aggro leash eligibility uses planar dungeon distance, matching the existing mob-AI rule, while attack reach still includes vertical separation. A real horizontal leash break continues to evade and restore the encounter.
  • Focused verification passed: src/game/combatStore.test.ts and src/game/mobAi.test.ts, 2 files / 58 tests. npm run build also passed, including TypeScript, 956 transformed Vite modules, and the KTX2 audit of 11,839 compressed textures with zero fallbacks.
  • Production-preview smoke testing entered Wailing Caverns through the offline roster, rendered the full dungeon/HUD/party view, issued the Attack order, and observed live enemy damage on the tank. This checkout lacks the optional local playable-character and creature model packs, so the documented procedural fallbacks and their asset warnings were visible during this pass.
  • Coverage limit: the exact cliff jump was validated by the deterministic combat-state regression rather than by manually traversing from the entrance to Kresh during the browser smoke test.

2026-08-16 responsive jump and natural teammate movement - COMPLETE

  • Added the grounded single-jump path for Space and controller L3, including a 7.2 m/s launch, 100 ms coyote time, 120 ms input buffering, landing lockout, upward-normal ground filtering, and blocked-input cancellation. Player physics and the latest grounded navigation anchor are now reported separately, so party breadcrumbs and recalls do not follow an airborne player position.
  • Player locomotion now presents rising, falling, and landing phases. The live WoW human used its native jump pose while preserving the visible body and equipped weapon; RuneWaker and fallback clip selection is covered by the focused animation suite.
  • Party members now derive stable movement personalities from member ID and living-party rank. The runtime applies personalized trail distance, lateral offset, comfort slack, speed, slow sway, stop/start hysteresis, combat bearing, preferred range, and ally separation only when the candidate path passes collision and floor-continuity checks. Breadcrumb centerline routing, Stop, stuck recovery, role decisions, and blocked-route reporting remain the fallback behavior.
  • Focused verification passed 17 files / 117 tests: playerJump, inputManager, inputMath, store, combatAnimation, partyMovement, partyNavigation, partyPathing, partyRuntime, and the complete src/avatar suite. The first full-suite attempts exposed a pre-existing load-sensitive 30 s timeout in the heavyweight RuneWaker animation audit; the isolated test passed in 6.5 s. Its two asset-audit cases now use 60 s, matching their actual full-suite workload more closely.
  • Final npm test: 114 files / 656 tests passed. Final npm run build: passed, including TypeScript, 954 transformed Vite modules, and the KTX2 audit of 11,839 compressed textures with zero fallbacks.
  • Production preview was exercised at http://127.0.0.1:4174/. At desktop 1440 x 900, Space produced a visible jump from rest and while moving; the running capture shows the native raised-arm jump pose. Space pressed while paused did not launch on resume. Five rapid Space presses during one airborne cycle returned to a normal grounded pose rather than producing a double jump. The entrance smoke route covered its sloped floor and low cavern roof without visible clipping or a hidden avatar.
  • In Defend, the companions settled at visibly different longitudinal and lateral offsets. In Attack, tank, ranged, and melee actors held distinct bearings; Brynn peeled to the right while the other roles retained separate safe positions. Party health and combat activity continued updating. Stop and Recall were then issued from the Thor companion display and the authoritative command state updated correctly.
  • The browser Thor preview displayed both the 960 x 540 main surface and 620 x 540 companion surface. Entering as healer from the companion display, Attack/Stop/Recall dispatch, Space jumping on the main display, and right-mouse input with no pointer lock all worked. Runtime inspection found one visible canvas, no loading screen, and no scene-error overlay.
  • Console capture contains no errors. It contains two occurrences of the project's existing third-party initialization deprecation warning, one per desktop/Thor runtime load. The Vite preview host separately logged the known optional /content/manifest.json proxy refusal because the auxiliary content server on port 4173 was not running; the packaged dungeon still loaded and played normally.
  • Evidence is under playtest-artifacts/2026-08-16-jump-party/: desktop-running-jump-preview.png, desktop-varied-follow-preview.png, desktop-varied-combat-preview.png, desktop-pause-jump-blocked-preview.png, thor-jump-preview.png, thor-varied-combat-preview.png, thor-repeated-jump-landing-preview.png, and preview-console.txt.
  • Coverage limits: no physical controller was connected, so L3 edge behavior and removal of L3 clear-target are automated-test verified rather than hardware verified. The entrance smoke route did not provide a deterministic walk-off ledge or narrow doorway fixture; exact coyote timing and lateral centerline fallback remain covered by their pure/navigation tests rather than claimed as live edge-case evidence.

2026-08-01 all-dungeon v5 animation acceptance pass - COMPLETE

  • The Blackhorn Silencer and Giant Assassin failures demonstrated that valid files, finite tracks, expected clip names, and green Khronos validation do not prove a correct skeleton pose. The v4 exporter repair changed the reflected-Z quaternion conversion from (x, y, -z, w) to (-x, -y, z, w). The v5 cache identity retains that repair and invalidates the actor cache for complete cast semantics: all exported cast-family clips must be preserved and reachable by the runtime selector.

  • The authoritative scope is 30 dungeon packages, 436 entity templates, 268 base actor configurations, and 322 runtime-referenced namespaced shipping variants. The audit and visual-review unit is the 322 variant paths, not the 268 base configurations. Expected configuration is 321 native variants plus one pose-only Mantarick mapping (Hall of Survivors template 102452, asset judgement-light-pose).

  • demon-stronghold-125 and zurhidon-stronghold-124 are authoritative empty copy zones and require explicit zero-row review entries. Sardo Castle's Rune Warning Device (template 105758, asset rune-device-red) is a native, stationary actor whose missing locomotion clip is an approved source-faithful exception; its other native animation families still require review.

  • Required machine checks, run from D:\Projects\HealerMan, start with:

    npm run runewaker:audit:animation-inventory
    npm run runewaker:audit:runtime-clips
    npm run runewaker:audit:animation-readiness
    npm run runewaker:audit:animations
    

    The exact PowerShell that derives all 322 GLB inputs from runtime-clip-coverage.json, runs Blender, generates contact sheets and review pages, and compiles the human disposition is documented in scripts/runewaker-pipeline/POSE_AUDIT.md.

  • Blender numerically samples the bind pose plus the first, middle, and final frame of every action. This can miss a defect between samples and cannot prove semantics, timing, impact alignment, particles, audio, or encounter mechanics. Every variant contact sheet therefore requires human review; suspicious actors require --render-mode all, and every dungeon still requires an in-browser combat pass covering idle, applicable locomotion, configured attacks/casts, wound, death, transitions, and console/WebGL errors.

  • Rebuild result: All 29 generic population recipes rebuilt green. Forsaken Abbey's separate nine-actor package completed Khronos validation with zero errors and zero warnings across all nine GLBs.

  • Inventory/runtime result: The final inventory is green at 30 dungeons, 436 entity templates, 268 base actor configurations, and 322 runtime-referenced variants with zero blockers. Runtime semantic near misses are zero. The only required-family exceptions are the documented pose-only Mantarick and the native stationary Rune Warning Device with no locomotion.

  • Pose result: artifacts/animation-audit/post-v5/summary.json evaluated 44,305 poses for all 322 variants: 282 numeric passes, 40 accepted-warning candidates, zero errors, zero failures, and 634 flagged samples. Those values exactly match the visually reviewed v4 batch totals, so the v5 cast-semantics rebuild introduced no aggregate numeric pose regression.

  • Offline browser result: The packaged/offline catalog displayed all 30 RuneWaker dungeons as Ready. Pasper's Shrine and Hall of Survivors both loaded their environments. The console contained only an unrelated library deprecation warning; no asset, skeleton, animation, WebGL, or dungeon-load error was observed.

  • Test boundary: All 19 focused RuneWaker animation tests pass. Repo-wide build/test gates remain blocked by the unrelated unfinished RoM class catalog and missing Manastorm fixtures; those failures are not attributed to the v5 animation work.

2026-08-01 Pasper goatman quaternion-basis repair

  • Reproduced the severe animated-pose deformation on Giant Assassin (template 101039), Giant Assassin Captain (101045), and Blackhorn Silencer (101053). The first two use model/character/creature/goatman/act_fog_ferocity_03.ros; the Silencer uses model/character/creature/goatman/act_fog_loster_03.ros.
  • The source-to-HealerMan position conversion reflects Z. The exporter had incorrectly mapped rotations as (x, y, -z, w). Applying the basis transform R' = S R S, with S = diag(1, 1, -1), requires (-x, -y, z, w). The corrected conversion is shared by skeleton bind transforms and every sampled animation frame.
  • Rebuilt Pasper's nine actors and validated all nine shipping GLBs with zero Khronos errors and zero warnings. Then rebuilt all 29 generic dungeon actor packages plus the separately handled Forsaken Abbey package; every package completed its actor and Khronos validation stage green.
  • Blender pose evidence is under artifacts/animation-diagnostics/fog-ferocity-03-runtime-clips and artifacts/animation-diagnostics/fog-loster-03-runtime-clips. The exact runtime-selected one-handed idle, run, 1h_attack01, and 1h_attack02 clips retain coherent bodies, limbs, armor, and weapons at their first, middle, and final samples. The corresponding pre-fix directories preserve the malformed poses for comparison.
  • Pasper's Shrine loaded in the local browser and the party entered combat. The browser console contained no model-load, skeleton, or animation exceptions. The automated camera remained at the entrance while the ordered party moved ahead, so no browser screenshot of these specific goatmen is claimed; the actor-specific Blender renders are the visual regression evidence.
  • Added blender/render-animated-actor.py and documented the required visual pose gate. Clip presence, semantic-family coverage, finite tracks, and Khronos-clean files are not sufficient evidence of correct skeletal motion.

2026-07-31 Pasper's Shrine original skeletal-animation pilot

  • Replaced the nine static Pasper combat packages with skinned GLBs generated from their original GR2 skeletons and ACT-referenced RAS controls.
  • The actors expose 20-24 clips each. Generated entity data marks all 12 Pasper templates as native; combat selection covers attack variations, cast, wound, and death in addition to stand/idle, walk, and run.
  • Khronos validation passed all nine shipping GLBs with zero errors and zero warnings. The focused animation/runtime/pipeline suites passed 19 tests. The final full run passed 513 of 518 tests; its five unrelated failing assertions cover missing Manastorm conversion inputs plus established Forsaken/Kalin availability state, and the unrelated Manastorm compound-import suite still has its pre-existing parser error. The production TypeScript/Vite build passed.
  • The local Vite entry started at http://127.0.0.1:5173/. The in-app browser controller timed out during connection and after a clean reset, before a tab or screenshot could be obtained. No live visual result is claimed in this entry; an interactive Pasper combat pass remains the final visual gate.
  • Reproduction and remaining-dungeon rollout instructions: scripts/runewaker-pipeline/ORIGINAL_ANIMATION_IMPORT.md.

2026-07-31 RuneWaker all-dungeon animation audit

  • Three parallel read-only audits covered all 30 packaged RuneWaker instances.
  • All 239 actor GLBs parsed successfully and contain zero native clips/skins.
  • All 312 static-model entity definitions now select full procedural animation; 132 dynamic-display entities use explicit procedural proxy bodies.
  • Automated coverage opens every referenced GLB, resolves all 4,094 spawn references, and exercises finite idle, movement, attack/cast, wound, and terminal death transforms.
  • The audit exposed and fixed the generalized generator's missing procedural mode and the runtime wrapper's missing wound-revision handoff.
  • Focused command: npm run runewaker:audit:animations.
  • Live Vite boot succeeded at http://127.0.0.1:4173/. The Codex in-app browser connection timed out twice before a tab could be selected, so no new WebGL screenshots were captured in this pass. Do not treat the automated results as screenshot evidence.
  • Detailed matrix: scripts/runewaker-pipeline/RUNEWAKER_ANIMATION_AUDIT.md.

Evidence rules

  • npm test, npm run build, Android compilation, and APK signing prove logic or packaging only. They do not prove that the Three.js Canvas renders a dungeon before or after pointer lock.
  • A pointer-lock fix is not verified without matching screenshots from the running game plus browser console/runtime checks.
  • assetStatus === "ready" is not enough. ProductionDungeon latches that status after an initial frame; a later camera or frame-loop failure can still leave the HUD over the Canvas clear color.
  • The Canvas clear color is #07110d. A nearly uniform dark-green playfield with a normal DOM HUD means the app shell is alive but the 3D view is not producing visible geometry.
  • Record what was actually observed. Mark unavailable platforms and missing screenshots as unverified rather than inferring success from another test.

Source and staging safety

  • Installed game root: C:\Users\phenom\Documents\Healer-Man
  • Current writable mirror: C:\Users\phenom\Documents\wow335a\dungeon-export-work\HealerMan\gameplay-ui-staging
  • Treat .healer-man-staging and dungeon-export-work\HealerMan\runtime-staging as stale historical mirrors. They contain older pointer-input/camera files and must not be bulk-copied over the game.
  • Before the pointer-lock transition patch on 2026-07-21, installed PlayerRig.tsx matched the gameplay UI mirror at SHA-256 B918B24031DD7031F1EEBA75879E8291EABDE9AAB8A08223B9B392A105B4692A. Installed inputManager.ts matched the pre-patch mirror at SHA-256 16D77BF075BD1355A23F81D019B8D34C7427026B113DBD257B4A7BE6FE53BF1F.
  • After the transition patch, the installed and staged hashes match: PlayerRig.tsx is A2CD3D3951D99ECE05D99ACB3CAE53C412B075B01106DBAC0E37EC48B8AFC843 and inputManager.ts is 355A4AD7DE12AF777B4829428B32181F9511A8DF021102932036DAA643C3C716.
  • Compare source and destination hashes before and after every elevated copy. Copy only the files intentionally changed. The installed root currently has no Git history to rescue an accidental stale overwrite.

Pointer-lock invariants that must remain intact

  1. GameScene.tsx requests pointer lock on the Canvas itself.
  2. inputManager.ts rejects non-finite mouse movement, clamps each event and frame, clears the buffer on focus changes, and suppresses the complete 180 ms cursor-recentering burst after pointer lock begins.
  3. PlayerRig.tsx repairs non-finite yaw, pitch, player translation, cast distance, and camera boom state before they reach Three.js or Rapier.
  4. ThirdPersonCamera uses the default useFrame priority. A positive priority takes ownership of React Three Fiber's render loop; without an explicit gl.render(scene, camera) call it produces the exact clear-color-plus-HUD failure.
  5. Errors thrown from a useFrame callback are not reliably surfaced by the DOM SceneErrorBoundary. Browser pageerror and console capture are part of the playtest, especially after adding new frame callbacks.

Deterministic PC setup

Run the latest source, not an old Vite process or stale dist directory:

npm run dev -- --host 127.0.0.1 --port 4173 --strictPort

Open http://127.0.0.1:4173/ at 1440 x 900. For a repeatable offline character, run this in DevTools before reloading:

const now = Date.now();
localStorage.setItem("healer-man.profile-database.v1", JSON.stringify({
  version: 1,
  accounts: [],
  rosters: {
    "offline-roster": [{
      id: "character-playtest",
      ownerId: "offline-roster",
      name: "Remedy",
      raceId: "human",
      classId: "priest",
      gender: "female",
      appearance: { skinColor: 0, face: 0, hairStyle: 0, hairColor: 0, feature: 0 },
      level: 10,
      experience: 0,
      talentRanks: {},
      location: "Wailing Caverns Entrance",
      createdAt: now,
      lastPlayedAt: now,
    }],
  },
}));
sessionStorage.setItem("healer-man.session.v1", JSON.stringify({
  kind: "offline",
  ownerId: "offline-roster",
  displayName: "Offline",
}));
location.reload();

Required pointer-lock visual checklist

Store evidence under playtest-artifacts/2026-07-21/ for this regression.

  1. Select Remedy, click Enter world, and wait until .loading-screen is gone and .scene-shell canvas is visible.
  2. Confirm textured dungeon geometry is visible, not only #07110d.
  3. Record pre-lock state: assetStatus is ready, pointerLocked is false, and playerPosition plus cameraYaw are finite.
  4. Capture the full window as pointer-lock-before.png and the Canvas crop as pointer-lock-before-canvas.png.
  5. Click the center of .scene-shell. Confirm document.pointerLockElement === document.querySelector(".scene-shell canvas").
  6. Wait two animation frames and at least 500 ms. Confirm pointerLocked is true, player/camera values remain finite, the WebGL context exists, and gl.isContextLost() is false.
  7. Capture the same views as pointer-lock-after.png and pointer-lock-after-canvas.png.
  8. Move the mouse, then hold W for about 250 ms. Capture pointer-lock-after-input.png. This is required because a bad recenter event can fail on the first post-lock input rather than on the click itself.
  9. Press Escape, open and close a menu, reacquire pointer lock, and confirm the dungeon remains visible.
  10. Save console output as pointer-lock-console.txt. The pass condition is no console.error, pageerror, pointerlockerror, or webglcontextlost during the transition.

Visual pass criteria: all three full-window images show textured dungeon geometry behind the HUD; the two post-lock images show a reticle; no loading or scene-error overlay is present; the view changes after input without becoming uniform dark green.

After the development-server pass, repeat against a fresh production build:

npm run build
npm run preview -- --host 127.0.0.1 --port 4174 --strictPort

Use filenames ending in -preview for the production screenshots.

Known evidence as of 2026-07-21

Working or previously observed working

  • Login/offline roster, character selection, and entering Wailing Caverns have been observed working by the user.
  • Before this regression, the user could see and navigate the dungeon and give camera-clipping, pop-in, wall-material, mob, and performance feedback. This proves that the extracted dungeon and runtime can render on this PC.
  • The current source contains pointer-delta sanitization tests and finite camera recovery guards.
  • After the transition patch, npm test reported 109/109 tests passing and npm run build completed successfully. An Android APK had been produced by the preceding build, but has not yet been rebuilt from this patch.
  • scripts/probe-entrance.mjs reported finite entrance camera geometry and a visible shell hit. That static probe does not exercise React, pointer lock, or the live frame loop.

Not working or not yet verified

  • User report: after entering Wailing Caverns, clicking the game to take focus changes the 3D view to dark green while the HUD remains visible.
  • No current before/after screenshots have yet demonstrated that the latest source survives pointer lock. Until the required screenshots exist, this regression remains open regardless of tests/build status.
  • Browser console and WebGL context-loss evidence for the failing transition has not yet been captured.
  • The production preview answered HTTP 200 at http://127.0.0.1:4174/, but the visual-test browser was not attached to this session. No screenshot was captured, so the patch must not be called visually verified yet.
  • The pointer-lock regression has not been visually rechecked in production preview, the Android WebView, or the AYN Thor top display.

Regression log

HM-2026-07-21-POINTERLOCK-CLEARCOLOR - PATCHED, VISUAL VERIFICATION REQUIRED

Reported: 2026-07-21

Symptom: The dungeon is visible after character selection. Clicking the game window to take focus leaves a dark-green Canvas with the UI still visible.

Expected: Pointer lock activates mouse look and the textured dungeon remains visible and navigable.

Important history: Two earlier failure classes can create this symptom:

  • A positive useFrame render priority can disable React Three Fiber's automatic render call.
  • A stale or malformed pointer-lock movement event can poison orbit/camera state with non-finite values.

The prior input guard discarded only one transition event. Browsers can emit a burst of recentering events, so later stale deltas could still rotate the camera away from the rendered cavern. The patch discards the full 180 ms transition burst and reads pointerLocked imperatively in the player frame, avoiding a Rapier subtree reconciliation at lock acquisition. This is the leading cause, but it remains a hypothesis until the required screenshots and runtime evidence are captured. Recent mob/combat work also added more high-frequency useFrame paths; an exception or WebGL context loss can create the same visible symptom.

Patch files: src/game/inputManager.ts, src/game/inputManager.test.ts, src/scene/PlayerRig.tsx.

Automated evidence: 17 test files and 109 tests passed. The TypeScript/Vite production build completed with 655 modules transformed. These results validate the patch logic and bundle, not the rendered pointer-lock transition.

Visual evidence status: blocked on an attached visual-test browser. The local production preview is running and ready for the checklist above; no screenshots exist yet.

Fix evidence required: pointer-lock-before.png, pointer-lock-after.png, pointer-lock-after-input.png, their Canvas crops, pointer-lock-console.txt, finite runtime state, and a live WebGL context. Add the exact root cause, changed files, commands, and screenshot hashes here once verified.

HM-2026-07-22-CAVERN-WHITE-CONTEXT - PATCHED, PC DEV/PRODUCTION VISUAL PASS

Reported: 2026-07-22, PC development runtime

Symptom: Wailing Caverns renders correctly, then the screen turns white.

Expected: The textured cavern, player, mobs, and HUD remain visible after the first rendered frame and while pointer lock is active.

Source diagnosis: No application DOM layer, loading state, error state, or Canvas clear color is white. The development root was wrapped in React StrictMode; the installed R3F Canvas teardown schedules a forced WebGL context loss after 500 ms, making the development-only effect replay a strong timing match. No live context-loss event was captured, so this remains the leading code-path diagnosis rather than visual proof. Two independent scene lifecycle gaps were also confirmed: player physics could start while the dungeon collider was still suspended, and the prior ready signal used the renderer-global frame count rather than a post-mount dungeon frame.

Patch: The game root now mounts once in development. GameScene listens for WebGL context loss/restoration, releases pointer lock, pauses simulation, and displays a dark DOM recovery surface instead of leaving a blank Canvas. Three's automatic restoration preserves the current Rapier world. If automatic recovery fails, the explicit restart returns to the entrance and remounts at DPR 1 with antialiasing and shadows disabled. The player and mob assets continue preloading behind the loading surface, but the entire physics world and mob simulation remain paused until the current dungeon/collider instance has completed a rendered frame. This prevents a fall-through race without causing a late GPU-upload burst at the first visible cavern frame.

Files changed: src/main.tsx, src/scene/GameScene.tsx, src/scene/DungeonEnvironment.tsx, src/scene/ProductionDungeon.tsx, and src/styles.css.

Automated evidence: 23 test files and 136 tests passed. The TypeScript/Vite production build completed with 662 modules transformed. The entrance probe reported finite camera geometry, a 6.099 m camera-to-target distance, and no camera-to-target collision. The creature audit validated all 16 GLBs. The live development server returned HTTP 200 for the page and updated scene module and served both the recovery UI and readiness gate.

Visual evidence status (updated 2026-07-22): Edge/Chromium was attached at 1440x900 through Playwright. A fresh offline character entered the development runtime and the rebuilt production preview; both showed textured Wailing Caverns after a 12-second load/stability wait and remained rendered throughout party-command and pause-menu checks. The post-entry captures had no pageerror or console error. The original post-load white frame was not reproduced. Native pointer lock, Android WebView, and the AYN Thor displays remain separate unverified surfaces and must not be inferred from this pass.

HM-2026-07-26-AVATAR-EQUIPMENT-RIGHT-DRAG - FIXED, PC VISUAL PASS

Reported: Playable character models and weapon/gear presentation had stopped appearing as expected. Desktop right-mouse camera look also triggered the browser's jarring Pointer Lock capture transition.

Root cause: The July 25 authentic-equipment integration left starterWeapons.tsx and its tests in place but disconnected StarterWeaponAttachments and ApproximateStarterEquipment from the shared CharacterModel. As a result, valid character rigs rendered bare in the roster and dungeon. Authentic item GLBs were also loaded inside the character's top-level Suspense/error boundary, so one slow or broken optional gear model could temporarily replace its entire wearer. Character-manifest loading used one all-or-nothing Promise.all, allowing one optional race pack failure to prevent every otherwise-valid race from resolving.

The camera transition was intentional browser behavior caused by GameScene.tsx calling requestPointerLock() on every right-button press. The browser controls that transition; it cannot be styled away.

Fix: The shared character renderer once again portals class-appropriate starter weapons into the animated hand bones and supplies approximate gear on loading/error fallbacks. Authentic client item models replace starter gear only for their occupied hand. Each optional item model now owns an independent Suspense and AvatarErrorBoundary, with the matching starter item as its local fallback, so it cannot hide the body or unrelated gear. Character packs load independently and merge whichever valid manifests are available.

Desktop camera look now uses bounded ordinary cursor deltas only while the right button is held. It ends on release, lost pointer capture, blur, overlay opening, or teardown. The normal gameplay path contains no requestPointerLock() call, so no browser mouse-capture transition is invoked. Without Pointer Lock, camera rotation naturally stops at the physical browser window edge; the player can release, reposition the cursor, and continue.

Regression protection: Root AGENTS.md now makes the character/equipment boundaries and popup-free right-drag behavior mandatory. New tests pin the shared renderer integration, independent manifest failure behavior, occupied hand replacement, per-item loading/error isolation, and unlocked right-drag deltas. Existing asset audits still verify every playable rig, hand bone, native equipment GLB, and texture.

Automated evidence: Focused avatar/input/store/respawn coverage passed 11 files and 53 tests. The complete suite passed 81 files and 504 tests. TypeScript and Vite production build passed with 750 modules transformed. Because this workspace is iCloud-synced, Vite now retains old hashed output instead of recursively emptying dist; this avoids iCloud restoring an asset during cleanup and causing ENOTEMPTY.

Visual evidence: The live 1440x720 PC development runtime showed the female Human Priest body and staff in the roster, then the player plus four distinct party character bodies and equipped silhouettes in textured Wailing Caverns. An ordinary right-click produced no Pointer Lock prompt or scene transition, and no application console error, avatar warning, or WebGL context loss was captured. The one console warning was the existing third-party initialization deprecation. Evidence:

  • playtest-artifacts/2026-07-26-model-input/roster-character-staff.png
  • playtest-artifacts/2026-07-26-model-input/dungeon-equipped-party.png
  • playtest-artifacts/2026-07-26-model-input/right-click-no-popup.png

The browser-control surface can issue an atomic right-click but cannot hold the right button while moving. Continuous drag rotation is therefore covered by the input integration test; final feel across long drags remains a short manual PC check.

Entry template

ID / status:
Date and platform:
Source/build identifier:
Observed symptom:
Root cause:
Files changed:
Commands and results:
Screenshots and hashes:
Console/runtime evidence:
Remaining unverified platforms:

Gameplay implementation log

HM-2026-07-21-COMBAT-PARTY-TALENTS - IN PROGRESS

Requested: Replace generic talent text with the local 3.3.5 talent text and make learned talents affect gameplay; make Psychic Scream fear nearby enemies for eight seconds; respawn a defeated player at the dungeon entrance; link pack aggro; add one tank and three DPS companions; and play attack/death animations for creatures.

Authoritative local-data finding: The extracted Spell.dbc contains the talent names and descriptions. The generator was reading the standard string field offsets, but this client uses a custom 239-field schema with six fields inserted before the localized string blocks. The missing names were a parser bug, not missing client assets.

Combat-pool finding: The current health, mana, XP, and combat-power curves are explicitly prototype curves. Mana classes currently use a 100-point percentage-style pool; these numbers are not exact 3.3.5 character-sheet values. The client export was checked for base HP/MP tables, but those server-side character-stat tables are not present in the resolved MPQ view. Replacing the prototype pools accurately will require the matching 3.3.5 server database (class-level and race/class-level stats), plus the eventual gear/stat model; they must not be presented as authentic yet.

Staged and focused-tested so far: Psychic Scream uses an eight-yard radius and eight-second fear; hostile control starts combat; pulling any authored pack:member wakes its surviving packmates; and death exits pointer lock and resets the encounter/player position to the entrance. Full installed-project tests, build, screenshots, and animation/party verification remain required before this entry can be marked complete.

Creature-animation finding: All 16 browser creature GLBs had previously been reduced to Stand and Walk by prepareAnimatedCreatures.mjs; the source files were not generally missing. Eleven source creature exports also contain exact AttackUnarmed (ID 16 variation 0) and Death (ID 1 variation 0) clips, which are now restored in the staged browser assets. The five composite humanoids (druid-of-the-fang, lady-anacondra, lord-cobrahn, lord-pythas, and lord-serpentis) were themselves exported with animation IDs 0 and 4 only, so they use bounded procedural attack and one-shot terminal death poses.

Animation/fear staged behavior: Attack clips resolve while an engaged mob is in its attacking phase. Death has priority, plays once, clamps on its last frame, preserves the corpse's combat position, and stops both mixer and proxy root updates once settled. Active fear suppresses attack visuals and steers the mob away from the player on the dungeon plane; stun/root still lock movement, slows still apply, and the flee position is clamped to the mob's home leash. The existing 95-unit population activation gate remains in place.

Animation automated evidence: The Three.js GLTF loader audit parsed all 16 staged GLBs and found 11 exact combat-clip models plus five explicit fallbacks. The staging TypeScript app/node configurations passed --noEmit; the complete Vitest suite passed 22 files and 131 tests using the staging-safe config loader. This is logic/asset evidence only. Installed-project build, combat screenshots, and live attack/death/fear observation remain required.

Talent-data result: The corrected custom-schema parser regenerated all 829 talent nodes and 2,243 rank spells from this client's DBC files. Visible names and rank descriptions contain no generic fallbacks or unresolved tooltip tokens. The talent panel shows both the learned rank and the next rank; the SpellRadius table resolves values such as Circle of Healing's 15-yard radius. All exact raw rank-effect metadata remains available to runtime systems.

Talent-runtime coverage boundary: 460 of 829 nodes currently yield at least one common scalar modifier (damage, healing, mitigation, pools, regeneration, cost, crit/haste, cast/cooldown, attributes, armor, range, duration, or threat). This is partial coverage, not proof that every conditional clause or proc is simulated. The other 369 nodes require triggered-spell, aura/proc, summon, weapon-event, form, or active-ability systems. There are 151 one-rank active/spell-granting rows. Faithful generic activation also needs DBC cost, cast-time, range, and trigger payload generation plus friendly/party/dual targeting metadata; the baseline action set now distinguishes hostile, friendly, and self targets.

Implemented scalar behavior: Learned scalar modifiers are cached and now feed max health/resource (including Stamina/Intellect), regeneration, costs, direct and periodic damage/healing, shields, incoming mitigation, cast time, cooldowns/groups, haste/GCD, range/AoE, and status/shield duration. Focused tests prove concrete rank changes for Improved Frostbolt, Improved Fire Blast, Twin Disciplines, Divinity, Convection, and Fel Vitality (21/21 passed). Conditional/proc/stance clauses are not statefully triggered yet; crit uses a deterministic expected-value benefit; armor is approximated; threat, flat-point cost reductions, added periodic ticks, and learned active spells remain outside this scalar layer.

Party staged behavior: A stable character-seeded roster now creates exactly four AI companions: one Protection Warrior, Blood Death Knight, or Protection Paladin tank and three unique non-tank DPS specs. All four attack an engaged enemy. While alive, the tank redirects 70% of incoming health damage and can be downed. PC frames are clickable; Thor frames are touch-selectable; D-pad Up/Down cycles living allies. Baseline direct heals and healing-over-time spells now route to a selected living ally, with the player as the no-selection fallback.

Screenshot status (superseded 2026-07-22): The first browser query exposed no in-app backend, but an installed Edge executable was later attached through Playwright. Current party/world evidence is recorded in the entry below. Native pointer-lock, Android, and Thor checks remain outstanding.

Installed-project verification: The integrated project passed 23 test files and 136 tests. The creature audit loaded all 16 GLBs (11 real combat-clip sets, five procedural fallbacks). TypeScript and Vite production build passed with 662 modules transformed, and the live preview returned HTTP 200 for the new bundle. Vite reports existing large-chunk warnings; this is a startup/bundle optimization item, not a failed build.

Thor/Android artifact from the preceding combat build: npm run android:apk completed after a fresh Capacitor sync and 98 Gradle tasks. Artifact: android/app/build/outputs/apk/debug/healer-man-0.1.0-debug.apk, 108,315,663 bytes, SHA-256 77B2BB53BD21FAA799F5BE15FE722399FB03B33983512BE8647694C9B5C5845B. This artifact predates the party-world command changes below.

HM-2026-07-22-PARTY-WORLD-COMMANDS - IMPLEMENTED, PC VISUAL PASS

Requested: Make the four roster allies visible in the world; add Attack, Defend, and Stop orders; make Attack advance toward the next boss while clearing adds, Defend respond only to engaged enemies, and Stop hold the current world positions; add pause-menu party management with current and future talents; keep every ally at the player's level.

Implementation: Party command and boss-objective state now lives in the low-frequency party store. Four procedural world actors keep their positions in a render-loop registry, follow formation in Defend, freeze in Stop, approach active targets at melee/ranged distance, and use the shipped Wailing Caverns navigation GLB plus deterministic A* routing in Attack. A soft player tether keeps the existing player-centric mob activation/leash system coherent; Stop is exempt so it remains a literal hold order. Navigation loading is isolated behind its own Suspense and error boundary, so an optional route-helper failure cannot blank or suspend the dungeon Canvas.

Interface: The PC HUD exposes Attack/Defend/Stop with F1/F2/F3 shortcuts and pressed state. The pause hub opens Party Management, where the four allies, roles, live health/status, current legal talent ranks, and next three automatic level choices are visible. The Thor companion snapshot and tactical panel expose the same commands and named boss objective. World nameplates are hidden while a menu is open, fixed at a small screen size, and stacked beneath the HUD.

Automated evidence: The full suite passed 28 files and 155 tests. New focused coverage includes command acquisition/holding/range, deterministic roster level sync, world-position registry and movement helpers, navigation welding/A*, all 22 supported specialization plans at every level 1-80, F-key mapping, and dual-screen command dispatch. The final TypeScript/Vite build transformed 669 modules and emitted the 1,329.06 kB navigation GLB. The existing large-chunk warning remains informational.

Visual evidence: At 1440x900 in the live development runtime, all four companions and the command bar were visible over textured Wailing Caverns. Attack moved the group into the entrance encounter and party/player health plus mob health changed without pageerror or console errors. Stop appeared as the selected HUD order, and all four members showed HOLDING in Party Management. The level-1 panel showed future level-10/11/12 choices; the seeded level-10 production panel showed the current rank and level-11/12/13 choices. A first capture exposed oversized nameplates leaking over the modal; the nameplates were then reduced, placed below the HUD, hidden while paused, and the corrected dev and production panels were recaptured cleanly. Fresh production entry remained textured after 12 seconds with a Canvas present and zero post-entry console or page errors.

Remaining verification boundary: The entrance encounter and menu flow were visually exercised, but a complete manual walk through every boss route was not. Late-dungeon navigation islands, native pointer lock, Android/Thor rendering, and the full boss-by-boss Attack traversal remain manual follow-up coverage.

HM-2026-07-22-FRIENDLY-TARGETING - IMPLEMENTED, PC INTERACTION PASS

Requested: Let the player mouse-click party members in the world or party frames and use healing/support abilities on the selected teammate.

Implementation: Living world companions now have generous transparent capsule hit targets. Their click handler stops both R3F and native DOM bubbling, so selecting an ally does not also capture the mouse. Hostile and friendly selection are mutually exclusive across world clicks, keyboard/controller cycling, clear-target input, and the Thor companion channel. Party selection is idempotent and clears automatically if the member is downed or removed.

Holy Light, Flash Heal, Healing Wave, and Rejuvenation now use 40-yard friendly targeting. With no ally selected they intentionally target the player. Casts snapshot the chosen recipient, revalidate that member's life, runtime presence, and range on completion, and never put party IDs into hostile-target state. Direct heals and per-recipient HoTs update party health without changing the self-healing behavior of hostile hybrid attacks such as Death Strike.

Interface: A selected teammate gets the existing gold world/party-frame selection treatment plus a green target frame with live health. Friendly action slots carry an ALLY badge and accessible target wording.

Evidence: At 1440x900 in Edge/Playwright, clicking Garrick's party frame selected him and left pointer lock off. Flash Heal displayed its cast bar, restored Garrick from 157/217 to 217/217, and spent mana. Clicking Ash's actual 3D body switched both the target frame and selected party frame to Ash while pointer lock remained off. The textured dungeon Canvas and all four companions remained visible; no page error or white-screen regression occurred. The full suite passed 28 files and 169 tests with a 15-second allowance for the existing performance-heavy talent-plan audit. TypeScript and the production Vite build passed with 669 modules transformed.

HM-2026-07-22-PARTY-AVATARS - IMPLEMENTED, PC VISUAL PASS

Requested: Replace the four lightweight companion pawns with actual characters that have races, genders, and randomized appearances.

Implementation: Every generated party member now owns a flat, serializable raceId, gender, and five-value appearance record. Identity uses a dedicated per-member PRNG stream keyed by the persistent player-character ID, party slot, class, and specialization. It is varied between player characters but stable across rerenders, level synchronization, combat resets, and re-entry. The race selection respects the project's packed race/class catalog.

Party actors now use the same CharacterModel pipeline as the player: shipped race/gender GLBs, skeleton-safe clones, composed skin/face/hair/feature textures, Death Knight eye treatment, and Stand/Run animation. Each ally retains its own Suspense/error boundary and procedural fallback, so one bad avatar cannot blank the dungeon Canvas. Measured metrics for all 20 race/gender rigs drive each nameplate, target ring, and transparent click capsule; this covers the 1.17 m female Gnome through the 3.19 m male Troll. Party frames, target UI, pause-menu management, and the Thor snapshot now expose race/gender identity.

Asset evidence: A direct loader audit covered all 20 character GLBs and 5,072 referenced model/texture URLs with zero missing files. Every rig had finite geometry and animation tracks, matching appearance counts, required material tokens, and valid Stand/Walk/Run clips.

Visual evidence: At 1440x900 in Edge/Playwright, the initial seeded party rendered distinct Draenei, Night Elf, and Dwarf characters with visible body, skin, hair, and feature differences. A second deterministic extreme party rendered a male Troll, male Draenei, male Human, and female Gnome together. There were no avatar loader warnings, page errors, WebGL context-loss reports, or white-screen recurrence. Clicking the real Troll mesh selected Seraphin, updated the green friendly target frame, and left pointer lock off. Party Management displayed all four race/gender identities and preserved talent data.

Automated evidence: TypeScript passed. The full suite passed 28 files and 171 tests, including deterministic identity, valid appearance ranges, reset stability, combat routing, and dual-screen propagation.

Remaining boundary: The shipped playable rigs currently provide the base body/underwear, facial customization, and locomotion clips, but not equipped armor/weapons or skeletal attack/death clips. The existing transform-based attack/down motion remains. Android/Thor GPU performance with five animated character rigs remains a separate native-device verification pass.

HM-2026-07-22-CONTROLLER-ACTION-BINDINGS - IMPLEMENTED, AUTOMATED/NATIVE PASS

Requested: Replace the four-slot action bar with a complete controller layout: Triangle/Circle/Cross/Square in their physical diamond, R1/R2, D-pad Left/Right, L1 and L2 modifier layers, and a player-configurable binding menu.

Implementation: The combat runtime now owns 24 stable action bindings: eight physical controls across Base, L1, and L2. Browser gamepads, the Android controller bridge, and keyboard 1-8 with Shift/Alt all resolve through the same semantic binding model. Modifier press/release ordering prevents a fast L1/L2 transition from casting on a stale layer; native triggers use fallback axes plus press/release hysteresis. Android system Back is distinct from Circle, so it pauses gameplay or backs out of menus without firing a Circle ability.

Interface: Only the active eight-slot layer is shown over the playfield. The four face buttons form the controller diamond, with separate shoulder and horizontal D-pad groups. The pause menu's Ability Controls panel exposes the same diagram, spatial D-pad navigation, current-assignment focus, empty or duplicate bindings, safe reset confirmations, and immediate per-character persistence. Friendly abilities continue to target the selected ally or self; D-pad Up/Down cycles living party members plus the player. The PC and Thor companion surfaces share the active layer and semantic binding commands.

Automated/native evidence: The full suite passed 33 files and 212 tests. Coverage includes all 24 defaults, partial/corrupt save normalization, per-character isolation, custom chord casting, modifier transition ordering, native duplicate suppression, system/menu Back routing, self targeting, and dual-screen dispatch. TypeScript and the production Vite build passed with 672 modules transformed. Android :app:compileDebugJavaWithJavac --no-daemon completed all 43 tasks successfully; only the existing SDK XML/flatDir warnings remained. A fresh production preview on an isolated local port returned HTTP 200 for both / and /?layout=thor-preview, then the preview process was stopped.

Current content boundary: Every class currently exposes four runtime abilities. Defaults therefore fill Cross, Square, Triangle, and Circle while R1, R2, D-pad Left/Right, L1, and L2 slots begin empty. Players can reuse those four abilities anywhere now; distinct assignments for all 24 slots require the separate future expansion of the class ability catalogs and unlock progression. No screenshot-based visual pass was possible in this session because no connected in-app browser backend was available; responsive and accessibility layout received static review, and fresh production entry was HTTP-smoke-tested.

HM-2026-07-22-INPUT-HANDEDNESS - FIXED, AUTOMATED PASS

Reported: Keyboard A/D strafing and horizontal pointer-lock mouse look moved in the opposite direction from the rendered third-person camera.

Cause and fix: Raw keyboard, mouse, and gamepad inputs already used standard positive-right values. The shared +Z camera-relative transform supplied the opposite screen-right vector, and positive horizontal look was added to yaw even though this camera convention turns right by decreasing yaw. The movement basis now uses the rendered camera's actual right vector, and a shared yaw helper applies positive mouse/right-stick look in the matching direction. Vertical look is unchanged. The correction also fixes left-stick strafing and right-stick horizontal look.

Evidence: Focused input coverage passed 15 tests. New regressions verify A/D at zero and nonzero camera yaw plus both horizontal look directions. The full suite passed 33 files and 214 tests, and the production build passed with 672 modules transformed. A manual pointer-lock feel check remains device-side because no connected browser backend was available in this session.

HM-2026-07-22-SPELL-ICONS-STARTER-WEAPONS - IMPLEMENTED, PC VISUAL PASS

Requested: Use each spell's real client icon, equip the player and every party member with a starting weapon, and replace the companions' repeated whole-body thrusting with an attack that reads as an actual strike.

Spell-icon result: All 40 runtime abilities were joined through their dbcSpellId to the local 3.3.5.12340 Spell.dbc and SpellIcon.dbc data. The existing basenames were exact, including several non-obvious stock mappings, but every URL pointed at a nonexistent /assets/ui/spells/*.webp directory. The 39 distinct authoritative BLPs are now decoded into shipped 64x64 PNGs, and the catalog serves those files. scripts/export-spell-icons.mjs provides a dependency-free reproducible exporter for DXT1, DXT3, and DXT5 BLP2 sources. The catalog audit pins all 40 DBC-id mappings and fails when an icon is absent or empty.

Equipment result: No standalone weapon models or playable-character attack clips were present in the browser asset pack; every race/gender rig contains only Stand, Walk, and Run. A shared procedural equipment layer now supplies swords, maces, staves, daggers, bows, and shields. Warriors use sword/shield, Paladins and Shamans use mace/shield, Rogues dual-wield daggers, Hunters use a bow, Death Knights use a runeblade, and cloth/Druid classes use staves. Weapon scale is estimated in avatar-local space. Attachment discovers hands from the named finger pivots instead of numeric bone IDs, which differ by skeleton; the same class loadout is also rendered on the procedural loading/error fallback.

Attack-motion result: Party nextActionAt changes now create one stable presentation pulse per real hit. Tanks no longer animate continuously merely because their status is guarding, and the party wrapper no longer pitches or bobs during attacks. Each pulse layers a short windup/strike/recovery onto the right shoulder after the locomotion mixer, while the equipped weapon layer adds bounded main-hand/off-hand or bow motion and returns exactly to rest. The player receives the same one-shot presentation after a successful completed ability. Combat simulation timing remains outside the render components.

Automated evidence: The focused icon/equipment/attack/party suites passed 4 files and 25 tests. The equipment audit reconstructs every one of the 20 shipped playable GLBs and resolves both hands. The complete suite passed 35 files and 224 tests with the established 15-second allowance for the heavy level-1-through-80 party-talent audit. TypeScript passed. A clean Vite production build transformed 674 modules; the existing large-chunk warnings remain informational.

Visual evidence: At 1440x900 in Edge/Chromium, the roster preview showed the Priest's staff attached to her hand. Fresh dungeon entry showed textured Wailing Caverns, equipped player/party silhouettes, and the real Smite, Shadow Word: Pain, Flash Heal, and Psychic Scream art on the controller action bar. The successful captures are playtest-artifacts/2026-07-22-weapons/roster-staff.png and playtest-artifacts/2026-07-22-weapons/dungeon-equipped-party.png; neither shows a loading/error surface or the prior white-screen failure.

The follow-up 1280x720 Edge/Playwright pass issued the real F1 Attack shortcut and captured 25 frames from the pre-command state through two defeated entrance adds. The sequence shows discrete arm/weapon actions on damage events, upright rest poses between pulses, and no repeated pelvis pitch. Weapons remain bound to moving hands throughout the advance. Evidence is in playtest-artifacts/2026-07-22-weapons/attack-contact-sheet.jpg and the individual attack-frame-*.jpg files. No page error, scene-error overlay, white-screen recurrence, or WebGL context loss appeared. The log contains one generic 404 plus software-WebGL and initialization deprecation warnings; none prevented the dungeon, party, spell art, equipment, or combat from rendering.

Remaining visual boundary: A tank can briefly cross very close to the player camera while the party leaves formation, making its shield dominate the view for several frames. That is a companion separation/formation issue, not a return of the old attack thrust. Native pointer lock, Android/Thor scale and performance, and every race/class equipment silhouette remain separate device-side checks. Re-exported authentic item models and native attack/cast clips would be a future visual-quality upgrade over the current procedural starter gear.

HM-2026-07-22-MAIN-MENU-DUNGEON-BROWSER - IMPLEMENTED, AUTOMATED PASS

Requested: Add a main menu after character selection with Dungeons, Manastorms, Roguelike RPG, Trials, Options, and Player Profile. Only Dungeons needs to work initially and must open a dungeon list.

Result: Confirming a roster character now opens a dedicated mode hub without initializing or resetting gameplay. Dungeons opens a separate browser backed by a manifest-derived catalog. Wailing Caverns is the sole available entry because it is the only complete runtime currently shipped; selecting it activates the character, resets at the entrance, and mounts the 3D game. The other five requested mode cards are visible, disabled, and marked Coming soon. Back navigation follows dungeon browser to main menu to character roster, and the in-game pause exit now returns to the main menu. Narrow PC layouts retain a visible Continue button instead of hiding the only pointer-accessible action.

Controller and companion behavior: A/Enter confirms, directional input navigates, and B/Escape backs out on both new top-screen views. The companion display has explicit main-menu and dungeon states, so these shell phases never fall through to a stale tactical HUD. Its roster Continue, dungeon launch, change-character, and return-to-main-menu commands mirror the authoritative top-screen transitions.

Evidence: Focused shell/catalog/dual-display coverage passed 3 files and 16 tests. The complete suite passed 36 files and 232 tests. TypeScript and the production Vite build passed with 677 modules transformed; existing large chunk warnings remain informational. The local development entry returned HTTP 200. Screenshot automation could not connect to the in-app browser backend in this Windows sandbox, so responsive desktop/compact layouts received static review rather than a claimed visual pass.

HM-2026-08-01-RUNEWAKER-ALL-DUNGEONS - ACTIVE FIDELITY PASS

Reported: Every RuneWaker dungeon unexpectedly displayed Coming Soon, and the imported actors did not consistently retain their original skeletons, animations, appearances, or attacks.

Catalog result: The generated WoW availability refresh had replaced the whole availability document and removed every RuneWaker key. Availability generation now preserves non-campaign keys, and packaged RuneWaker definitions fall back to their validated offline metadata when a key is absent. The live dungeon browser showed all 30 RuneWaker packages as Ready. Evidence: artifacts/playtests/rom-dungeon-catalog-ready.png.

Native animation result: The RuneWaker exporter now selects the largest body GR2 hierarchy instead of a one-bone effects hierarchy, samples the ACT/RAS motion set at 30 Hz, and maps skin weights from original OBJ positions to the vertices Blender reordered or duplicated at seams. A complete audit accounts for every recipe-referenced actor and rejects invalid GLBs or missing required animation families. Dynamic paperdoll appearances are exported as exact image-specific assembled actors instead of generic proxy bodies; the portable appearance snapshot is checked into the build inputs so normal/offline builds never connect to SQL.

For this historical rollout, the contract was expressed at the base-actor level as 267 native actors, one documented pose-only actor, and no combat proxy actors. The newer authoritative acceptance scope is the 322 namespaced shipping variants recorded in the in-progress entry above. Runtime population bindings were 435 native, one pose-only, and zero proxy. The former eight actorless “bosses” were source FX/door controllers (six invisible soul-ball effects and two dungeon doors), not missing creature models; they are now deferred mechanics objects rather than fake combat objectives.

Combat-data result: The portable RuneWaker spell catalog contains the source assignments used by all dungeon population recipes. The generator only executes positively classified direct-HP-damage families; buffs, summons, heals, hooks, and unknown effects remain evidence rather than guessed gameplay. The current cross-dungeon audit counts 388 source-backed executable attacks and zero evidence-only spells entering runtime combat. Every entity still retains a HealerMan basic fallback, so this is not yet a claim of formula-exact boss state machines.

Browser result: Forsaken Abbey loaded from packaged files, rendered its native population, and entered party combat with damage and XP progression; captures are artifacts/playtests/forsaken-abbey-native-population.png and artifacts/playtests/forsaken-abbey-combat.png. Pasper's Shrine initially stopped at Blackhorn Nisorn because the source position was 5.25 meters outside the retained navigation surface. Objective routing now projects a combat approach point within the same six-meter rule used by the audit. The party advanced, fought, took damage, and gained XP without console errors. Evidence: artifacts/playtests/paspers-shrine-route-fixed-combat.png; the original failure is retained as artifacts/playtests/paspers-shrine-route-blocked.png.

Open fidelity boundary: The source audit still reports disconnected ordered boss routes in several packages and evidence for doors, phases, summons, patrols, timers, interactions, and loot that has not been translated into tested encounter state machines. Those items must remain explicit blockers or review work; they must not be represented as a complete original game until implemented and playtested instance by instance.

Final production/offline verification: The production build completed with all 93 packaged paperdoll actor copies present in dist. The temporary HealerMan_RW_Objects_Paperdoll forensic database was dropped and the manual MSSQL$HEALERMAN_RW service was stopped before the browser check. From the packaged production preview, offline login opened the RoM catalog with 30 available, 30 Ready, and zero Coming Soon entries; Forsaken Abbey then launched into the 3D runtime with its population present. Evidence: artifacts/playtests/rom-dungeon-catalog-production-final.png and artifacts/playtests/forsaken-abbey-production-final.png. No browser error was reported during dungeon launch. The log retained two earlier WebGL context-lost messages from page transitions and one non-blocking initialization deprecation warning.

Historical automated scope: TypeScript and the production build passed for that rollout. Its RuneWaker animation audit reported 267 native base actors, one pose-only base actor, and no configured combat proxies; required idle, movement, attack, wound, and death animation-family gates were satisfied under the earlier gate. It is superseded by the completed v5 all-variant verdict above. The gameplay audit covered 30 dungeons, 8,199 source placement rows, 4,086 runtime static spawns, 436 runtime entities, 61 boss objectives, and 824 executable attacks (436 basic fallbacks plus 388 source-backed attacks). The full test run passed 87 files and 522 tests; its remaining three failures are pre-existing Manastorm fixture/parser failures outside this RuneWaker work. The previously stale Forsaken Abbey test was fixed and passes separately.

Remaining source-fidelity work: Thirty-one paperdoll appearances still need their original dye-mask colors composited, although their geometry, base textures, skeletons, skinning, and clips are authentic. Twenty-one optional source RAS references are absent or non-GR2, while every required combat family still passes. The navigation audit records 19 unreachable distance-derived objective legs across eight packages; there are no preserved source-authored orders, so unsafe permanent off-mesh links were not invented. Original coefficient formulas and the evidenced door, phase, summon, patrol, timer, interaction, loot, and modular-room state machines remain the next per-instance implementation pass.

HM-2026-08-01-ARROW-CAMERA-LOOK - PC KEYBOARD CAMERA PASS

Requested: On PC in the browser, make the arrow keys turn the camera when playing with mouse and keyboard instead of a controller.

Result: WASD remains the keyboard movement cluster. Left/right arrows now apply continuous camera yaw, and up/down arrows apply continuous camera pitch. The pause controls and live HUD hint now describe arrows as camera input rather than movement input. Controller left-stick movement and right-stick camera look remain unchanged.

Live browser evidence: Wailing Caverns was launched from the offline roster. Repeated right-arrow input changed the minimap heading from 244 degrees to 242 degrees; repeated left-arrow input then changed it to 247 degrees. Up/down arrow passes visibly changed the vertical camera angle. The exploration counter stayed at 0 m throughout, confirming arrow input did not move the player, and the heading stayed at 247 degrees after a 600 ms release check. The updated camera hint rendered in the dungeon and the browser console contained no errors.

Pointer-lock boundary: The in-app playtest browser does not expose the Pointer Lock API, so document.pointerLockElement is undefined there and a live null assertion or held-right-button automation is not possible on that surface. No capture prompt appeared. The unchanged right-drag path remains covered by inputManager.test.ts, including ordinary drag deltas and a null pointer-lock assertion.

Automated evidence: src/game/inputManager.test.ts and src/game/inputMath.test.ts pass 19 tests. TypeScript and the production Vite build pass with 914 modules transformed; the existing large-chunk warnings remain informational.

HM-2026-08-01-RUNEWAKER-PLAYERS - RACES, CLASSES, AND DUAL CLASS

Result: The WoW/RoM content split is live across character creation, persistence, roster summaries, party generation, Class Hall, the spellbook, and combat. RoM ships Human, Elf, and male-only Dwarf plus the ten released classes. Level 10 permanently fixes a race-eligible secondary; Class Hall swaps the ordered primary/secondary orientation and its independent action bar. Shared XP, automatic ranks, primary stats plus 10% secondary stats, role and resource changes, equipment compatibility, and directional elite unlocks are covered by the application tests. Existing WoW profiles migrate to storage v2 without losing their progression or bindings.

Generator/audit: npm run runewaker:players:refresh completed from the RuneWaker source tables, strings, elite Lua, image metadata, and interface.fdb. The portable catalog records source SHA-256 hashes and contains 269 ordinary skill families plus 660 elite milestones across all 66 valid ordered pairs. All 929 visible skills have an executable or explicit non-combat contract; zero are unresolved. All 929 icon references resolve to 918 unique native PNGs. The independently loadable runewaker-v1 manifest contains five native rigs (Human male/female, Elf male/female, Dwarf male), starter attachments, and native idle/walk/run/attack/cast clip families. Khronos validation reported zero errors and zero warnings for all five GLBs.

Live controller/browser QA: From the production preview, keyboard/controller menu navigation moved from the default WoW Human race to the RoM category and confirmed it with Enter. The draft reset to Taborean Human and exposed the correct six-class pool. Dwarf creation enforced male gender and exposed Warrior, Rogue, Mage, Priest, Warlock, and Champion. A native Dwarf Champion rendered in creator and roster. The level-1 Class Hall showed its level-10 lock; level-10 selection, irreversible confirmation, swapping, and both orientations are covered by automated controller/persistence tests.

The same RoM character could select both the 54-dungeon WoW category and the 30-dungeon RoM category. Wailing Caverns and Forsaken Abbey both launched with the native character, a rage pool, RuneWaker spell icons, and a same-category RoM party. The tactical menu now says Skills, and its RoM view reported Primary 2 / 18, Secondary General 0 / 0, Elite 0 / 0, and automatic rank progression for the pre-secondary level-1 Champion. Browser diagnostics contained no errors. Expected renderer teardown messages and one non-blocking initialization deprecation warning remain.

Evidence:

  • playtest-artifacts/2026-08-01-rom-dual-class/rom-roster-preview.png
  • playtest-artifacts/2026-08-01-rom-dual-class/rom-character-wow-dungeon-preview.png
  • playtest-artifacts/2026-08-01-rom-dual-class/rom-character-rom-dungeon-preview.png
  • scripts/runewaker-pipeline/snapshots/runewaker-player-skill-audit.json

Final verification: npx tsc -b --pretty false passed; Vitest passed all 95 files and all 549 tests; npm run build passed with 921 modules transformed. Vite's existing large-chunk advisory remains informational.

HM-2026-08-01-DUNGEON-ASSET-EVICTION - GLTF AND GPU LIFECYCLE

Result: Regular dungeon sessions now own their environment, collision, navigation, and creature GLB URLs. Switching dungeons or leaving the gameplay runtime clears those URLs from Drei's global useGLTF cache. Scene teardown also deterministically disposes dungeon-owned geometries, cloned materials, textures, creature skeletons, and bone textures, with identity-based deduplication so shared resources are released once. Playable-character and equipment assets remain cached because they are reused across every dungeon.

Live browser evidence: A fresh production-preview renderer loaded Auchenai Crypts at 797.7 MB private / 856.6 MB working set. Returning to the main menu released the outgoing scene and settled at 555.8 MB / 615.1 MB. Blackrock Depths then loaded at 1,033.2 MB / 1,098.6 MB. Chromium initially retained that allocator reservation after the Blackrock teardown, but loading Auchenai again settled at 800.0 MB / 855.6 MB, effectively matching the first Auchenai load instead of stacking both dungeon footprints. Leaving Auchenai a second time settled at 592.5 MB / 651.5 MB. The environment, five-character party, HUD, and minimap rendered correctly throughout. Browser diagnostics contained no GLB, WebGL, or runtime errors; only the existing non-blocking initialization deprecation warning remained.

Verification: The focused dungeon ownership, session-switch, invalid-switch, and shared-resource disposal tests passed all 11 cases. The full Vitest run passed 98 files and 556 tests. TypeScript, the 54-dungeon campaign audit, the five-player import verifier, and npm run build all passed; the production build transformed 923 modules. Vite's existing large-chunk advisory remains informational.

HM-2026-08-01-ROM-ABILITY-PRESENTATION - NATIVE ICONS AND CLIPS

Result: Runtime RoM abilities now consume the native icon path already recorded in romPlayerCatalog.generated.json instead of replacing every skill icon with its class emblem. RoM combat animation events now select native RuneWaker character clips for casting/continuous casting, friendly buffs, bow channel/release, melee weapon variations and specials, wounds, and death. WoW characters retain the existing AnimationData-ID selector.

Live browser evidence: The saved Dwarf Champion rendered in the roster and entered Forsaken Abbey with its body and starter weapon silhouette visible. All eight live action slots resolved to distinct /assets/ui/rom-spells/<id>.png assets (including Heavy Bash 589471.png and Electrocution 589472.png). The ability control was exercised against a selected Ooze; the game correctly reported that the target was out of melee range. Browser diagnostics contained no errors. Native clip reachability for release/cast/bow/melee/wound/death is therefore recorded by the focused automated selector test rather than claimed from the out-of-range screenshot.

Evidence:

  • artifacts/playtest/rom-roster-preview-2026-08-01.png
  • artifacts/playtest/rom-dungeon-heavy-bash-2026-08-01.png

Verification: src/game/combatAnimation.test.ts and src/game/romPlayerCatalog.test.ts passed all 11 tests; npm test -- --run src/avatar passed all 28 avatar tests; npm run build passed with 921 modules transformed. Vite's existing large-chunk advisory remains informational.

HM-2026-08-01-WOW-CREATURE-ANIMATION-MEMORY - RUNTIME CLIP POLICY

Result: Shipped WoW dungeon creature GLBs now contain only animation families requested by MobPopulation: stand, walk, run, and the highest-priority available attack, cast, wound, and death families. Every variation in each selected combat family is retained. The complete source GLBs remain untouched under HealerMan-Storage/pipeline-work/dungeons, and all five-player, Epoch, and Wailing Caverns packaging paths now apply the same policy to future exports.

The migration optimized 1,111 current dungeon creature GLBs. Source inventory fell from 73,191 clips to 8,102 runtime clips. Runtime payload fell from 4,855,010,592 bytes to 2,963,934,636 bytes, saving 1,891,075,956 bytes (39%). The 146-clip Auchenai reference model retained nine gameplay clips and fell from 13,824,072 bytes to 7,650,004 bytes. Generated manifests record the source clip count, runtime count, policy version, checksum, and post-policy semantics.

Live browser evidence: A fresh production-preview session opened the saved Human Priest and entered Auchenai Crypts as healer. The environment and all five character rigs rendered correctly. After moving inside the 95 m population activation radius, the browser resource inventory confirmed optimized creature displays 17932, 17924, and 17942 were loaded. Browser diagnostics contained no errors; the existing initialization deprecation warning remains non-blocking. After creature activation, the renderer settled at about 930 MB private / 989 MB working set and peaked at about 1.03 GB private / 1.09 GB working set. The earlier pre-change two-dungeon pass peaked around 1.15 GB private / 1.2 GB working set, so these measurements are directional rather than an identical scene sequence.

Verification: The policy's four focused Node tests passed. The campaign-wide WoW content test passed all 54 dungeons, the five-player verifier remained green with only its three documented source blockers, mob/combat animation tests passed all 18 cases, and npm run build passed with 921 modules transformed. Vite's existing large-chunk advisory remains informational.

2026-08-14 — local-first content delivery and compact Android client

  • Build under test: fresh full production dist served by server/server.mjs at http://127.0.0.1:4173.
  • Booted to the login screen and entered through Play offline without an account-server request.
  • Roster preview: the saved level 8 human female priest rendered her complete body, hair, and starter staff silhouette. The procedural/error fallback did not replace or hide the character.
  • Downloads screen: the two-column local-first layout rendered without clipping at the test viewport. Its local catalog request returned the expected 404 because no generated content/ volume was mounted for this local smoke test; the screen retained the offline starter-content message.
  • Dungeon smoke: entered Wailing Caverns as healer. The production cavern, player body/equipment silhouette, four companion bodies, HUD, minimap, and action bar were visible. No missing-GLB proxy or scene error appeared.
  • Evidence reviewed during the browser run: login, roster-preview, Downloads, and in-dungeon screenshots. Browser console contained no errors; one existing third-party initialization deprecation warning was present.

2026-08-16 — CoA character-creation category

  • Opened the offline roster and entered character creation in the live Vite client. The header rendered distinct WoW, RoM, and CoA tabs without clipping.
  • The WoW tab showed only the eight standard WoW classes available to Human; no custom CoA class appeared.
  • The CoA tab reused the Azeroth race roster and showed the 16 custom CoA classes available to Human, defaulting to Barbarian. The character body and starter weapon silhouette remained visible while switching categories.
  • In the production preview, the saved Human Priest rendered in the roster with her full body and starter staff silhouette, then entered Wailing Caverns with her body, staff, party, dungeon environment, and HUD visible.
  • Browser diagnostics contained no errors.
  • Evidence: playtest-artifacts/character-create-wow-category-2026-08-16.png playtest-artifacts/character-create-coa-category-2026-08-16.png, playtest-artifacts/character-category-roster-2026-08-16.png, and playtest-artifacts/character-category-dungeon-2026-08-16.png.
  • Verification: 71 focused catalog/store/repository/dungeon/ability/party tests passed, all 28 avatar tests passed, and npm run build completed successfully.

2026-08-16 — Deadmines party terrain following and vertical animation tolerance

  • Entered The Deadmines as the saved Human Priest and selected Attack. The player crossed 43 m of uneven mine-floor and rail terrain; the tank and a damage companion remained visibly beside the player instead of waiting for the 12 m stuck-recall threshold. All four companion world labels remained in the live scene, and no automatic party recall was observed.
  • The character maintained ordinary ground locomotion over small collision height changes. Focused timing coverage confirms that terrain gaps shorter than 100 ms neither enter the falling state nor trigger a landing animation, while intentional jumps and sustained falls still present immediately/after the grace period and land once.
  • The saved roster preview rendered the complete Human body and starter staff; the in-dungeon view rendered the player silhouette, nearby companions, the Deadmines environment, and HUD.
  • Browser diagnostics contained no errors. The existing third-party initialization deprecation warning remained non-blocking.
  • Evidence: playtest-artifacts/party-terrain-roster-2026-08-16.png, playtest-artifacts/deadmines-party-terrain-2026-08-16.png, and playtest-artifacts/deadmines-party-follow-view-2026-08-16.png.
  • Verification: 38 focused party/pathing/jump/animation tests passed, all 28 avatar tests passed, and npm run build completed successfully with 954 modules transformed. The existing large-chunk advisory remains informational.

2026-08-20 — shared online dungeon session with AI fill

  • Ran two signed-in production clients against the local account server on separate browser origins. SharedLeader / Bulwarka invited SharedMember / Mendara; the accepted group roster showed both selected characters and their Tank and Healer roles as ready.
  • The leader launched Wailing Caverns with Fill open slots with AI enabled. Both clients automatically entered the same activity, each rendered the other player through the normal equipped CharacterModel path, and each showed a live, targetable remote party frame. Three AI companions filled the remaining slots, producing the expected five-member party on both clients.
  • The reciprocal scene captures showed Bulwarka and Mendara at the same shared dungeon position with matching environment, objective, AI roster, mob state, and remote role labels. The leader client continued encounter simulation; the member client received the synchronized mob and AI state without running a second competing world simulation.
  • From the member client, selected Bulwarka's online party frame and completed a Lesser Heal cast. The member's mana/resource change propagated to the leader client and both clients retained the same live remote health state. Enemy combat and AI resource/health changes also continued to propagate while the two clients remained connected.
  • Evidence reviewed during the browser run: invitation/group roster DOM, coordinated-launch DOM from both clients, reciprocal full-window dungeon captures, and before/cast-complete remote-healing DOM snapshots. No missing character-body or equipment fallback appeared in either dungeon capture.
  • Verification: server/API tests passed all 11 cases, the complete Vitest suite passed all 755 cases across 132 files (including the 28 avatar cases), and the TypeScript production build completed successfully with 983 modules transformed. The existing large-chunk advisory remains informational.

2026-08-28 — configurable render caps and idle-loop efficiency

  • Opened the saved Human Priest roster after a fresh client reload. The full body and starter staff rendered correctly in the single character-preview canvas, which reported the persisted 30 FPS preview cap and manual frame loop.
  • Entered Wailing Caverns as healer and exercised the gameplay setting live. The performance probe settled at about 30.5 FPS for the 30 FPS option and 60 FPS for the 60 FPS option; combat and fixed-step physics continued normally.
  • Pausing switched the dungeon canvas to demand rendering. Its performance counters remained byte-for-byte unchanged over 1.4 seconds, confirming that the local paused scene did not keep rendering in the background.
  • Returned gameplay rendering to the default 60 FPS and left the character preview at 30 FPS. Evidence reviewed during the browser run included the roster-preview and live dungeon screenshots. The final fresh session emitted no errors; the existing third-party initialization deprecation warning remained non-blocking.
  • Verification: the focused efficiency tests passed all 83 cases, all 28 avatar tests passed, the complete Vitest suite passed all 809 cases across 148 files, and the production build completed with 1,043 modules transformed. KTX2 and environment-performance audits remained green; the existing large-chunk advisory remains informational.

2026-08-30 — authored weapon grips and ready stances

  • Reloaded the offline client and switched a Human female preview directly between Hunter, Warrior, and Priest. The bow, sword/shield, and staff changed immediately to their native HoldBow, Ready1H, and Ready2HL poses; no stale class pose or backward procedural axis remained.
  • Verified RuneWaker Human Warrior and Scout previews against their explicit hand/shield locator frames. The one-hand, shield, and bow silhouettes used the RuneWaker socket-axis adapter and remained proportionate to the character. Also checked the Ascension Human Ranger fallback with its bow visible in a supported ready pose.
  • The saved Human Priest roster preview showed the complete body and staff with both hands aligned to the shaft. In Wailing Caverns, the player and party equipment remained attached through live combat animation without a second local weapon swing or load-time placement jump.
  • Evidence: playtest-artifacts/2026-08-30-weapon-grip/weapon-grip-roster.png, human-hunter-holdbow.png, human-warrior-ready1h.png, human-priest-ready2hl.png, runewaker-warrior-sockets.png, runewaker-scout-bow.png, ascension-ranger-bow.png, and weapon-grip-dungeon.png.
  • Verification: all 41 avatar tests passed, the 37-test focused weapon/stance suite passed, and the production build completed with 1,047 modules transformed. Asset audits remained green with zero KTX2 fallbacks and zero environment-performance regressions; the existing large-chunk advisory remains informational.

2026-08-30 — bounded combat VFX bursts and silent audio default

  • Created a fresh offline Human Priest and confirmed the in-game Options panel opened with Master volume at 0%. Gameplay and preview frame-rate controls, VFX quality, and per-actor VFX/audio controls remained available.
  • Entered Wailing Caverns as healer, sent the party into combat, and captured a live four-effect spell burst. High quality reported four active effect systems and zero combat point lights; additive particles, impacts, melee arcs, the HUD, and combat telegraphs remained visible.
  • The captured burst reported 60 FPS, a 16.7 ms average frame, a 16.8 ms slowest frame, 258 draw calls, and 353,526 triangles at 1.5 pixel ratio. A three-second combat sample reached five concurrent effects, stayed between 54.1 and 60 FPS, and returned to a 16.7 ms frame average.
  • A cold Vite dynamic import failed once while first opening character creation; reloading after compilation resolved it. The final dungeon run had no further errors; the existing third-party initialization deprecation warning remained.
  • Verification: the complete Vitest suite passed all 839 cases across 153 files, the production build completed with 1,047 modules transformed, KTX2 and environment-performance audits remained green, and the release-candidate check passed. The existing large-chunk advisory remains informational.

2026-08-31 — Shadowfang Keep navigation freeze regression

  • Reproduced the reported freeze with the saved Human Priest at the Shadowfang Keep entrance. The visible scene fell to roughly 4–11 FPS with 91–225 ms average frames and repeated 500+ ms slow frames, without a runtime exception.
  • Traced the stall to synchronous construction of the provisional 545,171- triangle party-navigation graph after the dungeon became visible. A direct benchmark blocked the main thread for roughly 8 seconds and consumed about 800 MiB of heap; its subsequent entrance surface/path queries also failed.
  • Added a navigation policy that keeps reviewed, budgeted graphs enabled while unvalidated or over-50,000-triangle graphs use the existing local and breadcrumb party-follow fallback. Shadowfang therefore avoids the unusable graph, while Wailing Caverns retains its reviewed navigation.
  • Re-entered Shadowfang from a clean reload and kept the live scene open beyond the former graph-build window. Eight consecutive samples held 59–60 FPS at about 16.7 ms per frame; the slowest final sampled frame was 25.8 ms. The party, HUD, minimap, combat state, and full environment remained responsive and visible in the reviewed screenshot. No new browser errors were emitted.
  • Verification: all 20 focused navigation cases passed, the complete Vitest suite passed all 844 cases across 154 files, the production build completed with 1,048 modules transformed, KTX2 and environment-performance audits remained green, and the release-candidate check passed. The existing large-chunk advisory remains informational.

2026-08-31 — dungeon-fleet startup freeze audit

  • Audited the complete registered fleet: 84 regular-dungeon navigation assets, all 75 Manastorm package assets, and all 470 published Manastorm stages. Every referenced navigation GLB exists and parses. Under the reviewed 50,000- triangle policy, 31 regular and 41 Manastorm package graphs remain enabled; the other 53 regular and 34 Manastorm packages use breadcrumb following.
  • Added an actual-geometry triangle check before navigation allocations. This prevents stale catalog metadata from bypassing the synchronous-build ceiling; Wailing Caverns metadata was corrected from 32,077 to 45,732 triangles.
  • Found nine zero-length imported patrol routes that could throw during scene render: one in Scholomance, two in Botanica, two in Magister's Terrace, and four in Escape from Durnholde. Catalog generation now preserves those actors as static spawns, and runtime normalization provides the same defense for future malformed imports. All remaining 752 regular patrols and every effective Manastorm stage patrol have usable routes.
  • Live entrance checks loaded Scholomance, Escape from Durnholde, and Forgotten Mine without a scene error or startup freeze. Scholomance settled near 28.5 FPS at 946 draw calls; Durnholde near 29 FPS at 3,663 draw calls; Forgotten Mine near 50 FPS at 1,502 draw calls after staged loading. These identify remaining environment/population throughput work, but are separate from the fixed startup-crash and synchronous-navigation failure modes.
  • Verification: the complete Vitest suite passed all 850 cases across 155 files, the production build completed with 1,048 modules transformed, all 106 environment assets passed their performance audit with no regressions, the KTX2 audit found no fallback textures, and the release-candidate check passed. The existing large-chunk advisory remains informational.

2026-09-04 — optional content offload and basic Human fallback

  • Built and served the production browser output from a clean localhost origin. A fresh Undead female Priest preview rendered with the real bundled Human female rig and default textures while retaining the Undead/Priest identity in the roster. No optional character pack had been installed.
  • Entered Wailing Caverns as healer from a separate clean browser origin. The Undead player, Undead tank, and Goblin party member all rendered through the matching basic Human fallbacks while their saved race, role, class, equipment, and party labels remained intact. The dungeon stayed playable and emitted no new error; only the existing third-party initialization deprecation warning appeared.
  • Exercised the browser Downloads lifecycle with a small local two-revision content fixture. Missing character and original-media packs showed Download; a verified install showed Remove; the changed revision showed Update and Remove together; and applying Update returned the pack to offline-ready state.
  • Reloaded after service-worker activation. The application and lazy JavaScript chunks loaded normally, while the content worker continued to reserve managed character, creature, equipment, game, and UI paths for bundled or verified cached content. The initial broad /assets/ interception found during this playtest was corrected before the final run.
  • In-dungeon Options showed Generated as the active default, kept Original disabled until its optional spell-effects-and-sounds pack is downloaded, and exposed a Download action for that pack.
  • Evidence: playtest-artifacts/2026-09-04-optional-content/roster-undead-priest-basic-human-fallback.png, dungeon-optional-models-basic-human-fallback.png, browser-downloads-optional-packs.png, and browser-downloads-update-and-remove.png.
  • Verification: all 43 avatar tests passed; the complete Vitest suite passed all 896 cases across 164 files; production browser and Android builds completed; both binary inventories contained only the two Human rigs, starter equipment, and Wailing Caverns content; and neither output contained optional character packs, original combat media, or WAV files. KTX2 and environment-performance audits remained green, and the release-candidate check passed. The existing large-chunk advisory remains informational.

2026-09-05 — Power Word: Shield live character anchoring

  • Installed the optional Original Spell Effects & Sounds pack through the production Downloads screen, enabled it, and selected Original spell visuals.
  • Entered Wailing Caverns as a Human Priest and cast Power Word: Shield on both the party tank and the player while exercising party movement and combat. The persistent original aura stayed at the rendered character root instead of following the throttled gameplay-position snapshot, with no inherited camera or character rotation.
  • Reviewed live dungeon screenshots before and during the movement test. The browser emitted no new errors; only the existing third-party initialization deprecation warning remained.
  • Verification: all 899 Vitest cases passed across 165 files, including three new visual-anchor registry cases. The production build completed with 920 modules transformed, and asset audits remained green. The existing large-chunk advisory remains informational.

2026-09-05 — modular RuneWaker boss mechanics

  • Built a temporary local production content feed for Forsaken Abbey and the first two Ystra Labyrinth boss rooms, then installed each pack through the browser Downloads workflow with checksum verification.
  • Loaded the source-backed Specter Guardian Creator encounter. Its mechanic panel appeared below the minimap and buff/debuff strips with Guard Bomb, Transport Magic, and Meteor Shower countdowns. A live Meteor Shower cast showed its one-second cast warning over the boss.
  • The first pass exposed that four countdown rows could crowd the boss's pending 80%, 60%, 40%, and 20% phase triggers out of the panel. The timeline now limits only countdown rows and always retains every pending health threshold. The corrected production build displayed all eight rows without covering the central playfield.
  • Loaded Rune Guardian Leader in Ystra Labyrinth Boss Room 2. Its source-backed Manastorms Duo Lv5 mechanic displayed a large purple circular floor warning while the matching panel row counted down at 0.6 seconds. The area indicator, cast timing, party damage, and effect/debuff presentation all advanced in the live encounter.
  • Browser logs contained no uncaught application errors. The existing third-party initialization deprecation warning remained; WebGL context-lost messages corresponded to intentional production rebuild reloads and opening replacement test tabs.
  • Verification: the full suite passed all 913 cases across 169 files, and the corrected production build completed with 923 modules transformed. KTX2 and environment-performance audits remained green, and the release-candidate check passed.

2026-09-05 — specialization-aware heirlooms and endgame loot

  • Activated the legacy level-10 Priest Rolecheck. The mandatory Class Hall picker appeared before the main menu, offered Discipline, Holy, and Shadow, and presented Cancel, Keep talents, and Reset talents after choosing Holy. Keeping talents returned to the main menu with the specialization saved.
  • Opened Wailing Caverns from Dungeon Finder. Role selection was restricted to Healer, matching the saved Holy specialization; no Tank or DPS override was available.
  • Reviewed the roster preview and a live Wailing Caverns combat scene. The player body, staff, and all four AI party bodies/equipment silhouettes were visible and correctly anchored without obscuring the HUD or playfield.
  • Opened Inventory & Equipment in the dungeon. The player had zero earned items but every applicable slot resolved to a level-10 Priest healer heirloom and reported average item level 10. Morvane, the Blood Death Knight companion, showed a complete tank heirloom loadout with the intended two-handed weapon layout and empty conflicting slots.
  • Browser logs contained no uncaught application errors. Only the existing third-party initialization deprecation warning appeared.
  • Automated coverage validates every classic and CoA specialization, Feral Bear/Cat separation, RoM-derived profiles, player and party scaling caps, same-level catalog dominance at levels 1/40/79, real item-level-85 upgrade availability for every gear archetype, two-hand replacement scoring, fallback reappearance, percentage-preserving stat refreshes, specialization persistence and talent reset behavior, and the item-level-255 save limit.
  • Verification: the complete Vitest suite passed all 928 cases across 171 files, including all 43 avatar cases. All 15 server persistence/API tests passed. The production build completed with 925 modules transformed, KTX2 and environment-performance audits remained green, and the release-candidate check passed. The existing large-chunk advisory remains informational.

2026-09-07 — modular encounter completion and boss guide

  • Entered Wailing Caverns through the live offline roster and verified the 3D dungeon, party HUD, minimap, and buff/debuff strips remained readable. The encounter timeline occupies the same top-right HUD column beneath those elements, keeping timed casts and pending health thresholds out of the central playfield.
  • Opened the new Boss Guide from the in-dungeon pause menu. The three-column field manual listed both WoW and RuneWaker dungeons, their bosses, source provenance, triggers, timings, target/effect descriptions, warning geometry, counterplay, and a concrete test procedure for every listed mechanic.
  • Selected Archaedas in Uldaman and confirmed all four authored mechanics: Awaken Earthen Custodian every 10 seconds, the two-second 18-metre Ground Tremor warning circle, six Earthen Guardians at 70% health, and two Vault Warders at 40% health. Bosses with no sourced special attack are explicitly labelled with zero special mechanics instead of receiving invented behavior.
  • The encounter authoring layer now drives serializable timers, health gates, guards, actions, summon groups, chained signals, stateful world objects, teleports, rewards, checkpoints, and online leader-authoritative interaction validation. Harmful area mechanics use the same geometry for both the world warning and hit resolution.
  • Browser review found no visible layout or interaction regressions. The only previously observed browser message remains Rapier's third-party initialization deprecation warning.
  • Source limitations and the exact remaining RuneWaker evidence, navigation, formula, loot, animation, and asset-fidelity gaps are recorded in the linked deterministic audit reports and authoring documentation rather than silently approximated.
  • Full-WDB environment packages for Raksha Temple and The Origin completed and passed their GLB gates. Treasure Trove's 908-placement visual/collision stage also completed, but its full-resolution 36-tile Recast bake did not terminate after nearly two CPU-hours on the watershed path and more than four CPU-hours on the monotone path. The fail-closed pipeline preserved the prior validated shipping package; this remaining offline bake is documented in ENCOUNTER_AUTHORING.md instead of lowering navigation resolution.
  • Verification passed: the complete Vitest suite passed all 981 cases across 185 files; online authority passed all 4 server cases; RuneWaker gameplay, encounter, environment, navigation, formula/loot, and animation audits passed; and the production build completed with 955 modules transformed. The KTX2 audit covered 12,347 compressed textures with zero fallbacks, and the environment-performance audit found no regressions. The existing large-chunk advisory and Rapier initialization deprecation warning remain informational.

2026-09-08 — WoW dungeon production-functionality audit

  • Audited all 54 WoW five-player catalog entries against live runtime contracts, pinned AzerothCore population/object drafts, and instance-script source. The composed-runtime content audit is green for 1,193 mobs, 273 bosses, 4,026 attacks, 2,572 specials, and 1,275 native models, but the stricter production- fidelity gate remains blocked at 0/54.
  • The audit found 3,943 source game-object spawns, including 2,321 actionable doors, buttons, chests/resources, transports, traps, and related objects. Raw database rows are no longer passed into the typed world-object renderer; all 54 live definitions now have zero malformed world-object records.
  • The follow-up implementation sweep completed source review for all 54 instances. Fifty-one now have runtime-wired instance orchestration and the three genuinely empty stock instance scripts are pinned as source-exact no-ops; there are no unreviewed instance scripts left. Wailing Caverns remains the only entry with a reviewed off-mesh link, and the three Ascension-specific dungeons still lack authoritative server population data.
  • Entered Wailing Caverns from the local browser roster as a Priest healer. The 3D environment, populated combat route, party, objective, minimap, and HUD all loaded; the minimap strip showed one Power Word: Fortitude entry. No uncaught client runtime errors appeared. Rapier's existing initialization deprecation warning remained informational.
  • The local content manager exposed all 54 WoW entries but only Wailing Caverns was installed; the other 53 were marked download required. Those dungeons were therefore checked by source/runtime-contract audit in this pass, not claimed as completed visual traversal playtests.
  • The follow-up world-object compiler converted all 3,943 source rows—including all 2,321 actionable doors, chests/resources, switches, traps, and transports—into stable typed definitions with transformed coordinates, type-aware states, conservative dimensions, and source/template/spawn/type provenance. Wailing Caverns receives its 57 generated records through the authored-definition enrichment path as well.
  • Client GameObjectDisplayInfo metadata resolves a visual display ID for 3,905 records, a native model path for 3,837, and exact bounds for 3,547. The generated export manifest deduplicates those instances into 458 native legacy assets, records 38 intentional no-display spell-focus objects, and isolates the remaining nine missing-model display IDs and 68 no-bounds display IDs for review.
  • An initial live pass exposed colored procedural markers for adapted chests/resources. Unreviewed source objects are now deliberately hidden, non-blocking, and non-interactive so incomplete door scripts cannot soft-lock a dungeon and placeholder art cannot leak into normal play. A second live Wailing Caverns pass confirmed the clean 3D scene, party combat, HUD, minimap, and single Fortitude entry. No uncaught client errors appeared; duplicate KTX2-loader warnings occurred only across deliberate hot-reload cycles.
  • The final runtime audit reports 54/54 reviewed dungeons. Fifty-one dungeons use 52 rule-bearing instance-controller definitions (Blackrock Spire has separate lower- and upper-spire controllers), while three use verified source-exact no-op scripts. Every catalog objective has a completion action, and the audit found zero malformed-object, duplicate-id, or encounter-contract issues. All 51 rule-bearing dungeons retain explicit adaptation/gap notes; native object models and full-route live traversal are not claimed complete.
  • The source-combat follow-up gives every runtime-spawnable boss a sourced kit unless the pinned source really is melee-only. The six deliberate exceptions are Kresh, Deviate Faerie Dragon, Spirestone Battle Lord, Spirestone Butcher, Crystal Fang, and Grubbis. Crystal Fang retains its source-exact 15% rare-spawn behavior and death summon. Trial of the Champion, Utgarde Keep, Hellfire Ramparts, Sethekk Halls, Mana-Tombs, and Slave Pens event bosses now use their pinned spell IDs and timing windows; unsupported vehicle, proc, queue, shared- health, phase, stack, and healing-reduction semantics are explicitly recorded as adaptations instead of being silently invented.
  • Wipe/reset validation exhaustively covered 673,664 reachable encounter states, 180 reset paths, every one of the 68 non-initial reset targets, and all 135 entity-timeout rules. Durable progression now fails closed on a missing entity, legacy snapshots with unordered action history fail closed, and Frozen Reach's Arktos is attempt-scoped so a wipe respawns him and can still advance the duo encounter on the next pull. The two viable post-reset resume states in Scarlet Cathedral and Halls of Stone are intentional, not soft locks.
  • Same-process checkpoint restore and online follower hydration now accept their trusted save/leader snapshots even when a retained local provider has a newer reset revision; ordinary stale imports remain rejected. A renderer restart preserves the current encounter snapshot. Encounter effects use one delivery path at a time, and obsolete headless queues are cleared on reset or dungeon switch instead of retaining already-applied envelopes for the process lifetime.
  • The generated download topology now contains an installable logical pack for every one of the 54 campaign dungeons. The three custom dungeons without their own creature payload are represented by dependency-only packs, while every non-bundled dungeon pulls its exact environment and shared-creature closure. The existing live content feed was not deployed or mutated during this pass; browser traversal therefore still reflects the packs already available there.
  • Installed packs now persist v2 verification receipts containing their exact file set, byte counts, hashes, and dependencies. Browser-cache and native-file presence are revalidated before entry, production dungeon entry fails closed when a pack or dependency is missing or stale, and content:publish validates the complete 54-dungeon dependency graph before any release output is written.
  • Run completion now leaves the final room active so loot can be collected before the player explicitly exits and clears the checkpoint. A wipe returns the party to the saved run spawn while preserving already-cleared bosses and durable run progress; attempt-scoped actors and effects reset for the next pull.
  • The live Priest check used the saved Rolecheck character, which advanced from level 11 to level 12 during the dungeon passes. The latest Wailing Caverns run displayed 677/677 health, one Power Word: Fortitude alongside Arcane Intellect (and Holy Concentration while active), and one Frostbolt plus one Icy Touch debuff. Repeated Frostbolt applications refreshed that one entry from 7.1 to 21 seconds rather than duplicating it. The deterministic geared level-8 check produced 3,285 mana and increased health from 407 to 437 when Fortitude was applied.
  • Verification remains deliberately split: source coverage, runtime contracts, reset reachability, and automated behavior are green, while the combined production-fidelity audit remains 0/54. Its remaining blockers include native object export/collision, explicitly listed source-semantic gaps, and end-to-end traversal evidence for every production pack—not unfinished instance-script review.
  • Final release verification passed all 1,109 Vitest cases across 202 files, TypeScript project compilation, and the production build with 967 modules transformed. The build staged 5,587 browser-bootstrap files, validated all eight arenas, audited 12,347 compressed textures with zero fallbacks, and found no environment-performance regressions. The release-candidate check accepted all 118 changed paths. The existing large-chunk advisory and Rapier initialization deprecation warning remain informational.

2026-09-09 — fixed per-rank classic mana costs

  • Imported WoW mana percentages are now converted into fixed costs at each spell rank's source level. Player level, Intellect, equipment, and maximum-mana modifiers no longer increase the cost of an already learned rank; legitimate talent and aura cost reductions are still applied afterward.
  • Shadow Word: Pain rank 4 now costs 133 mana at every level from 26 through 33, including level 32. Learning rank 5 at level 34 raises the cost to 188 mana.
  • AI companions now use real character-scale mana pools so fixed spell costs do not prevent healing or resurrection. The companion display also resolves the active spell rank and the same final affordability result as the primary HUD.
  • Verification passed all 1,133 Vitest cases across 208 files. The production build completed with 974 modules transformed; arena, KTX2, and environment- performance audits remained green, and the release-candidate check passed.

2026-09-09 — dungeon wall and nameplate performance regressions

  • The 0.1.24 material fallback honored BLEND tags on legacy WoW WMO walls, floors, and ceilings, disabling their depth writes. WoW environments now use their authored material roles again; RuneWaker environments retain their source MASK/BLEND semantics. Shipped Wailing Caverns wall materials, vines, and water are covered by regression tests.
  • The 0.1.25 boss-name occlusion scanned the complete rendered scene with Three.js raycasts. A live Kalin's Shrine CPU profile was dominated by triangle intersection and vertex decoding. Boss names and nearby NPC prompts now use bounded camera-to-label queries against Rapier's existing physical spatial index, at most ten times per second, skipping offscreen labels. Walls, floors, and ceilings occlude labels; actors and trigger sensors do not.
  • In an isolated offline Edge playtest at 1440 x 900 on an AMD RX 9070 XT, Kalin's Shrine improved from about 10 FPS (98.5 ms/frame, 167 draw calls, DPR 1.125) to 55.5-56.1 FPS (17.8-18.0 ms/frame, 168-170 draw calls, DPR 1.5). This is a representative entrance/combat comparison, not an audit of all thirty RoM dungeons. The environment alone took about 0.8 ms CPU and 0.5 ms GPU with 14 draw calls.
  • Wailing Caverns screenshots show continuous opaque cavern walls and ceilings. A controlled toggle of the old material flags reproduced the missing wall sections at the same camera position; restoring depth-writing materials fixed them. Its full scene ran at about 57 FPS. No uncaught client errors appeared.
  • Evidence and repeatable local benchmark helpers are under playtest-artifacts/2026-09-09-dungeon-rendering/: kalin-before.cpuprofile, kalin-after.cpuprofile, kalin-after-metrics.json, kalin-before.png, kalin-after.png, wailing-regression.png, and wailing-restored.png.
  • All 26 focused material, label occlusion, combat sight, aggro visibility, instancing, and NPC-prompt tests passed. Physical-occlusion tests exercise actual Rapier worlds rather than just source-code assertions.

2026-09-09 — campaign rendering audit and Thor performance preparation

  • Audited the actual visual GLB headers for all 54 WoW campaign dungeons: 9,402 materials, including 3,586 legacy BLEND materials restored to opaque rendering by the shared policy. Every WoW package contained affected materials. A permanent shipped-asset test covers all 54 definitions and retains explicit cutout, blend, and additive roles. This is material-policy coverage, not a claim that every room has been visually traversed.
  • Live screenshots checked Wailing Caverns, Shadowfang Keep, Utgarde Pinnacle, the Nexus, and Tinkertech Showdown. The sampled walls, floors, stairs, and ceilings remain solid; authored lighting effects remain transparent. Kalin's Shrine and Forsaken Abbey provided RoM rendering checks. Roster and in-dungeon screenshots show character bodies and equipped weapon silhouettes after the shared character animation change.
  • A controlled Utgarde Pinnacle entrance test found about 1,739 draw calls, 1.95 million triangles, and 30.5 FPS on the desktop GPU. Clipping at the existing full-fog distance reduced this to about 209 calls, 567,000 triangles, and 60 FPS at the same viewpoint. The camera now follows each dungeon's fog distance, including transitions that retain the existing Canvas/camera. The background uses the fog color to avoid a clipping seam at the horizon. All 84 dungeon definitions have render-distance coverage.
  • Static dungeon visual transforms are cached until the root or its parent's world transform changes. Tests verify imported matrices, repeated unchanged frames, root movement, and parent movement. Characters, moving world objects, and physics remain outside this immutable visual cache. The final 63-second Utgarde sample held 60 FPS with 213 draw calls: main-thread work averaged 9.2 ms/frame, renderer CPU averaged 7.5 ms (p95 8.3 ms), and GPU averaged 2.7 ms (p95 4.1 ms). Movement and jump input continued to animate the player while the environment remained stationary.
  • Character locomotion and jump clip selections are cached by animation library and weapon stance. The final Kalin CPU profile contains no sampled per-frame base-clip selection/name parsing. Frame-cap deadlines now tolerate sub-millisecond timestamp rounding without drifting or emitting catch-up frames; tests cover 60 FPS on rounded 60 Hz and 120 Hz callbacks.
  • A 31.5-second Kalin sample with a connected browser companion display held 60 FPS: main-thread work averaged 8.7 ms/frame, renderer CPU averaged 5.4 ms (p95 5.9 ms), and GPU averaged 2.4 ms (p95 3.4 ms). The companion used about 5.1 ms of main-thread time per second. Recent ability-cost snapshot work was not a dominant hotspot in this sample. Startup warmup is bounded to loading; companion snapshots are already limited to ten per second during gameplay.
  • These are isolated offline Edge desktop samples on an AMD RX 9070 XT at 1920 x 1080 CSS pixels, DPR 1.5 (2880 x 1620 renderbuffer). Party composition can change between dungeon entries. They do not certify Android performance or sustained busy-combat headroom. ADB listed no connected Android device.
  • Thor acceptance should use the actual model, both native displays, target resolution, and a sustained 20-minute traversal/combat run after warmup. Provisional headroom target: p95 main-thread and GPU work each at or below 12 ms, with p99 presented frame intervals within the 16.7 ms 60-FPS budget. Test large pulls, boss effects, menus, and repeated dungeon transitions; record thermal behavior and frame-time spikes, not only average FPS. The environment asset audit still has 60 grandfathered budget exceptions; its green result means no new asset regression, not a Thor FPS guarantee.
  • Evidence is in playtest-artifacts/2026-09-09-thor-audit/, including roster, dungeon, and companion screenshots, CPU profiles, and CPU/GPU JSON samples. The full material report is playtest-artifacts/2026-09-09-dungeon-rendering/wow-material-audit.json.
  • Validation passed 227 focused tests covering avatar rendering and animation, camera distances, material policies, frame pacing, static transforms, label visibility, and companion snapshots. The final static-cache change also passed the 105-test scene subset. The production build and release-candidate check passed; the existing large-bundle advisory remains.

2026-09-09 — additional CPU headroom from culling and shared skeletons

  • Prepared dungeon visuals now group static siblings into conservative spatial bounds. One scene hook checks these bounds after the current camera and world matrices update, before Three.js traverses individual meshes. Bounds include complete wall geometry and all instances; lights, animated meshes, and meshes explicitly disabling frustum culling remain outside these groups. The hook supports streamed chunks and restores its predecessor after cleanup.
  • At the same Utgarde Pinnacle entrance, only 16 of 1,383 spatial groups were visible. The renderer examined 108 static meshes instead of 7,002, retaining the same 206 draw calls and 566,913 rendered triangles. Controlled culling toggles produced byte-identical canvas PNGs across eight camera headings.
  • In the same running scene, spatial grouping reduced average main-thread work from 9.45 to 6.83 ms/frame, and renderer CPU from 7.81 to 5.31 ms/frame. Removing containers emptied by static instancing reduced the final fresh-run averages further to 6.49 ms main-thread and 4.85 ms renderer CPU (p95 5.2 ms). The final sample lasted 87.8 seconds and held 60 FPS. Authored empty scene nodes are preserved; only containers emptied by our batching are removed.
  • The shared character renderer still uses SkeletonUtils.clone, then reuses equivalent skeleton palettes within that owned clone. Bone identities, order, and inverse bind matrices must all match; per-mesh bind transforms remain unchanged. Different characters retain independent bones and animations. Owned bone textures are now explicitly disposed during character teardown.
  • A live character audit found 66 skeleton objects for one player palette and 256 objects for four party palettes. A Wailing Caverns toggle removed 309 duplicate skeletons and produced an identical rendered image. Tests verify posed vertices, differing bind transforms, incompatible palettes, independent cloned characters, and redundant texture disposal. In the same Wailing scene, main-thread work fell from 7.40 to 6.70 ms/frame; renderer CPU fell from 5.51 to 4.86 ms/frame, and allocated GPU textures fell from 292 to 217. This measures palette sharing after spatial culling was already enabled. Both samples held 60 FPS.
  • The final built runtime showed a complete roster body and staff with one skeleton for 66 skinned meshes. Kalin's Shrine showed one player palette and four independent party palettes; walking retained the player body and weapon silhouette. Wailing Caverns and Utgarde screenshots retained solid dungeon surfaces. There were no uncaught client errors during these playtests.
  • All 210 targeted avatar, visibility, instancing, material, camera-distance, and label tests passed. The production build and release-candidate check passed. The existing large-bundle advisory remains.
  • Evidence is under playtest-artifacts/2026-09-09-static-culling/: paired PNGs, eight-heading pixel comparisons, profiles, before/after timing JSON, and screenshots. Measurements use the same desktop Edge/RX 9070 XT setup as the preceding audit. These CPU improvements do not certify Thor performance.

2026-09-09 — bundled arena assets blocked by the browser content worker

  • Reproduced the reported collision-matched fallback in the production build with the content worker active. Warnorken's visual.glb?arena-runtime=1 returned 404 even though the file was bundled and directly served with 200. The worker omitted /assets/game/arenas/ from its bundled asset prefixes and incorrectly rejected these files as uninstalled optional content.
  • Added the arena prefix to the worker. Installed updates still take priority; missing optional dungeon content still returns 404. Behavioral worker tests failed for all eight arenas before the fix and now cover visual, collision, and navigation requests with the runtime query parameter.
  • The production build passed. Reloading the same browser session activated the fixed worker without clearing storage or downloading content. Warnorken rendered textured stone geometry and Nagrand rendered its authored arena geometry; neither showed the loading/fallback banner after loading, and no new console errors were recorded. Checks used offline practice in the Codex browser at http://127.0.0.1:4174/, backed by a local test server on port 4173.
  • All 22 content tests and the eight-arena asset validator passed. Screenshots, before/after error logs, asset validation, and build output are saved under playtest-artifacts/2026-09-09-arena-loading/. The existing large-bundle advisory remains. This verifies the local browser build, not a deployment or an Android package.

2026-09-10 - arena character and gameplay integration

  • Replaced the limited arena spell interpreter with a private bundle of the existing character combat engine. Offline practice and server matches share casting, channels, resources, auras, pets, talents and equipment mechanics. Each actor/match keeps its own state; opening panels does not run a second client simulation or overwrite dungeon state.
  • The controlled character uses CharacterModel with saved appearance, gear, class, specialization, talents and bindings. Other participants also use character models. The HUD displays actual resources, runes, combo points, cast/channel status, cooldowns, buffs, pet commands and PC/controller labels. Spellbook, character, talents, bindings, keybinds, map and options work in arena. Equipment and talents remain locked to the entered match loadout.
  • Fixed Keybinds opening with a shortened custom PC bar: missing slots now display as empty instead of crashing the React tree. Live checks opened Keybinds, Character, Talents and Options; the four-slot Q/E/R/T bar cast Flash Heal and Power Word: Shield with resource/cast/aura feedback.
  • Fixed NaN facing, spectator-camera elevation, obstructed starting positions and camera collision. Shared right-button drag ends on release, blur, lost capture, menus and teardown without pointer lock. Movement, jump, targeting, ground placement, feedback, animation and combat effects use arena state.
  • Authority uses all collision chunks and navigation triangles. Removed invisible static proxy walls. All 3v3 starts are grounded, and bots follow connected routes around walls/ramps. Shortcuts stay on level ground to avoid falling below waypoints. Detailed scenes use a shaped support surface; the loading/error fallback now matches collision instead of using a flat box.
  • Black Rook's old navigation/anchors were on terrain above the arena. Rebuilt against restored collision, selected its connected interior component (783 triangles), and placed both starts on the floor near Y=-28.3. Updated the asset metadata and generator to stop restoring the old terrain navigation.
  • Added PvP defender stats, shields, resource drains, pushback, school locks and control diminishing returns. Fixed duplicate control entries counting twice, aligned aura/control duration, and made dispels remove movement restrictions. Dispel Magic supports friends and enemies. Healers can heal allied pets; melee bots start weapon attacks to generate rage.
  • Automated checks: 38 server arena tests and 160 distinct avatar, input, camera, arena character/rules, combat store and ability catalog tests. Coverage includes channels/cancellation, runes, combos, pet orders/damage/ healing, interrupts, absorbs, dispels, DR, ground spells, mana burns, RoM secondary resources, dampening, isolation, matchmaking and match results. Both-direction walks between team starts pass across all eight arenas.
  • Live checks use an isolated in-memory level-80 priest, ArenaPriest, without changing the user's roster. Warnorken showed its interior, the selected character and saved spell labels. Movement changed both actor and camera. Bots traversed, cast spells, reduced health and settled a defeat when idle. No detailed-asset warning appeared. Evidence uses the arena-complete prefix under playtest-artifacts; earlier Nagrand/custom-bar evidence retains the arena-player prefix. The drag probe uses installed input code with scripted right-button events; rotation changes while held, stops after release, and pointerLockElement remains null. This is not a physical-device test.
  • Final screenshots show the Warnorken interior and character/action bar, Black Rook's corrected interior floor, the roster body/staff, and the character/party after returning to Wailing Caverns. Files: arena-complete-warnorken.png, arena-complete-black-rook.png, arena-complete-roster.png, arena-complete-dungeon.png and arena-complete-keybinds.png in playtest-artifacts.
  • Production build and release checks passed, with the existing bundle-size advisory. Run npm run arena:abilities:build after catalog/asset changes; prebuild also regenerates the engine and geometry. Verification is local offline practice plus authoritative server tests. Hosted online PvP, deployment and Android hardware were not exercised.

2026-09-10 — profile keybinds and movement-conflict recovery

  • Added Pause / Options → Keybinds with 133 actions, PC and Controller tabs, search/categories, capture and touch selectors, explicit conflict replacement, clear/reset controls, and Restore movement. Desktop defaults to PC; mobile and native Android default to Controller. Both tabs remain available.
  • Live offline browser check: assigning W to bar 1/button 1 named Move forward in the conflict prompt; cancelling preserved W. Rebinding forward to T, saving, closing, and reopening retained T. Restore movement returned it to W.
  • At 390 × 844, controller selectors assigned L1 + Triangle to Jump, prompted before clearing the old layer-2 ability binding, and retained the saved chord after reopening. Restored the test bindings afterward. The final phone panel starts at (0, 0), has a 443px scrolling action list, and keeps the footer within the viewport. Desktop layout checked at 1280 × 900.
  • Fixed the inherited 610px panel-height cap, mobile backdrop padding, action button accessible names, and companion-toggle overlap found during QA.
  • 89 targeted tests passed across input dispatch, mouse-drag lifecycle, analog remapping, conflict recovery, menus, account isolation, cloud transfer, UI imports, and dual-display synchronization. The full production build and release candidate check passed; the existing bundle-size advisory remains.
  • Controller chord conflicts also cover a modifier button’s standalone action, preventing combinations such as View + A from opening the companion first.
  • Hardware controller / Android APK validation and a physical right-button drag were unavailable through this browser session. Drag lifecycle and null pointer-lock assertions passed in the input tests. Browser viewport screenshots are scaled by the in-app compositor; DOM geometry supplied the viewport checks.

2026-09-10 - Original spell media defaults and visual fallback

  • Original spell visuals and authentic sounds are enabled by default. The original media pack is prepared before gameplay; download failure leaves generated visuals available and missing sounds silent.
  • Saves using the previous generated-only default migrate once to original media while retaining quality, group visibility, mute, and volume settings. Explicit later preferences remain saved.
  • Removed synthesized combat audio. Original mode now uses generated visuals when no original phase is mapped or when all original graphs/textures for that phase fail to load; usable original layers remain preferred.
  • Validation: 64 targeted tests passed, covering defaults, persistence migration, media installation/retry, rendering selection, original audio playback, silence on missing/invalid audio, and existing effect lifecycles. Production TypeScript and Vite build passed after correcting the installer test mock type; prebuild content/asset checks also passed.
  • Browser verification used the production CombatEffects and OriginalCombatEffect components with isolated store/media fixtures and the actual packaged Flash Heal graph/textures. The original case rendered one original emitter and zero generated emitters. Unmapped spell, graph HTTP 404, and texture HTTP 404 cases each rendered zero original emitters and one visible generated effect. Combat reset removed the fallback.
  • Evidence: playtest-artifacts/spell-media-20260910/original.png, bad-graph.png, bad-texture.png, and missing.png. The first Vite preview timed out; the bundled isolated preview completed successfully. This was an effect-focused browser check, not a full dungeon or device audio audition.
  • Final release check: blocked by existing trailing whitespace in server/generated/arena-combat-runtime.mjs. The files changed for spell media pass the whitespace check; the unrelated generated arena file was left intact.

2026-09-10 - All regular dungeons bundled with lossless shared storage

  • Web and Android packaging include all 84 regular dungeons and their asset dependencies. Shared Manastorm maps are stored once while every Manastorm pack keeps its optional install flag. Manastorm-only maps remain outside the initial package.
  • Packaged assets fell from 3,440,440,928 logical bytes to 1,600,690,686 stored bytes, including 179,063,519 bytes saved by sharing exact duplicate files. No source models, texture resolutions, animations, or audio were changed or generated.
  • Gzip representations retain both compressed and original SHA-256/size metadata. Publishing keeps original remote objects for older clients. Browser installs verify both representations, retain compressed shared objects with small aliases, and preserve shared objects until their final pack is removed. Native optional downloads remain resumable and verify their expanded originals before activation.
  • Android's packager automatically expanded and renamed .gz files; final objects use .gzip with noCompress instead. Added an APK verifier to the normal Android build workflow, checking every object, every original hash, exact object inventory, and the 84-dungeon/optional-Manastorm boundary.
  • Final debug APK: 1,622,100,512 bytes. All 9,106 unique objects (9,194 logical asset references) passed verification from inside the actual APK. Verification report and test APK: artifacts/dungeon-texture-audit-20260910/apk-verification.json and healer-man-0.1.28-debug.apk.
  • Validation: production TypeScript/Vite build and asset checks passed; 80 targeted content, Downloads, and avatar tests passed across the final runs, plus nine publisher/server tests. Android Java compilation and assembleDebug passed. Existing bundle-size/import advisories remain.
  • Live production browser check used an isolated offline Gziphealer character. Roster and Deadmines rendered the player body, party bodies, equipped weapon silhouettes, and textured dungeon geometry using the bundled compressed objects. Downloads showed all regular dungeon packs included and 75 Manastorm rows not installed. Evidence: artifacts/dungeon-texture-audit-20260910/roster-final.png, deadmines-final.png, and downloads-dom.txt. No new console errors appeared in the final-format dungeon run.
  • A concurrent build replaced the shared dist directory during the first preview, causing temporary asset 404s. Repeated visual validation against an isolated build completed successfully. Deadmines displayed a route-blocked party status at its entrance; this was a loading/rendering check, not a full dungeon traversal. Physical Android hardware was not exercised.

2026-09-11 - Original WoW visuals for every class

  • Packaged all 378 directly mapped WoW models plus five model dependencies: 4,205/4,205 source phase assets across all ten WoW classes, 260 mesh models, 1,367 particle emitters, 193 ribbon emitters, and 428 original textures. The audit found no missing graph, dependency texture, or mapped sound file.
  • Added source bone animation, skinning, billboards, material/UV animation, layered textures, ribbons, geometry particles, and bounded nested particles to the existing combat event rendering path. Graph URLs include payload hashes so regenerated models do not reuse stale cached graph files.
  • The development preview at scripts/combat-effects/preview.html lists all directly mapped models and uses the combat renderer. Browser screenshots showed Battle Shout, Devotion Aura, Hunter's Mark, Slice and Dice, Priest Shield, Blood Strike, Lightning Bolt, Fireball, Shadow Bolt, and Wrath. Cone of Cold also showed the source geometry particles during playback.
  • Browser QA exposed and fixed the second-texture UV shader declaration and a development media-pack gate: Vite serves original media directly, while release builds still require the verified optional pack. The offline Mage Visualtest rendered with its staff in the roster; player/party bodies and weapon silhouettes also rendered in Wailing Caverns.
  • Evidence is in playtest-artifacts/2026-09-11-wow-effects. The initial dungeon screenshots preceded the development media-gate fix and demonstrate avatar rendering and generated fallback only.
  • After the fix, Options reported Original media ready, and live Fireball casting showed source fire effects on the Mage (dungeon-original-fireball.png). No original-asset load or shader errors appeared. Existing physics-init and duplicate KTX2-loader warnings appeared during dungeon reloads. The party later reported Route blocked at the entrance; full traversal was not tested.
  • Fixed instant-ability phase resolution without adding presentation-bus or audio events. Original mode now overlays mapped source-side cast layers on an instant release and falls back between source impact and aura-start terminal mappings while preserving the selected source phase. This reaches all 1,106 castable instant rank records with packaged source visuals, including all 287 latest-rank instant abilities with source visuals. Three additional source-backed instant records are passive and emit no combat event. The 61 latest-rank instant abilities with no source visual mapping continue to use generated fallback.
  • Live Frost Nova QA reported original/high with two concurrent render systems, showing the source blue ground wave and its root layer instead of the prior generated semicircle. Evidence: dungeon-original-frost-nova-fixed.png. No new original-asset or shader warning/error appeared after the cast.
  • Automated validation passed 20 Node packaging/decoder tests, 47 avatar tests, and 121 combat/media/audio/runtime tests (188 distinct tests across those suites). Source graph tests parse every shipped direct model, sample bone timelines, and check malformed geometry, dependencies, and billboard transforms.
  • Production TypeScript/Vite build, prebuild content/asset checks, asset audit, and the release candidate check passed. Existing bundle-size/import advisories remain.
  • Coverage is for source visual mappings in the current ability catalog. Effects without source mappings retain fallback. This is representative desktop browser QA, not exhaustive spell-by-spell fidelity or a physical Android/GPU performance test. No hosted release was published.

2026-09-12 - Stockades party routing and indoor lighting

  • Fixed quantized navigation preparation: normalized integer positions now expand to floats before the GLB node transform is baked. Previously the Stockades world coordinates clamped into roughly [-1, 1], leaving the live party unable to attach to its graph even when an offline route test passed.
  • Added three reviewed bidirectional links across the 1.537m Recast seams at the entrance/central stairs and the central/north and central/south stairs. The shipping 3,538-triangle graph connects the entrance and all five boss approaches while discarding the remaining small decorative islands.
  • Added navigation-only review state and compiler-preserved runtime overrides. Stockades navigation is green; its wider encounter, wipe/reset, checkpoint, and completion validation remains unvalidated.
  • Leader and follower formation paths now use the graph when a breadcrumb rejoin is blocked. Fallback comfort goals and recalls attach to the reviewed surface, preventing an off-boundary stair target from causing a false stuck loop. Combat approach connectors respect each member's personalized range.
  • Replaced the generic dark expansion palette only for Stockades with warmer, stronger ambient/hemisphere fill and a warm directional light. No dungeon textures or source meshes were changed, and other dungeon palettes remain unchanged pending individual visual review.
  • Live desktop browser check at 1280 x 720 used offline level-15 Priest Rolecheck as healer with Blood DK tank Morvane, Combat Rogue Vale, Unholy DK Thorne, and Frost Mage Ilyra. Fresh Defend mode showed PARTY 5/5, Recall on the entrance stairs recovered without a route warning, and Attack resumed with visible party movement down the stairs. The tank advanced into combat and took Defias Basic Attack/Kick/Backhand aggro; Backstab and Icy Touch events appeared while the player remained at the entrance.
  • Inline task screenshots captured the warm, readable stonework/stairs and equipped party silhouettes in Defend and Recall-to-Attack states. The final runtime produced no new navigation errors; the existing deprecated physics initialization warning remains. Temporary diagnostic logging was removed.
  • Automated validation: all 223 Vitest files passed, 1,373 tests passed, and six existing tests remained skipped. Regressions cover the actual quantized Stockades GLB through the shipping asset-preparation path, normalized integer transforms, formation projection, entrance-to-boss routing, and tank melee approach. This is an entrance/combat smoke pass, not a complete dungeon clear or physical Android test.
  • Production TypeScript/Vite build, texture/performance audits, bundle verification, and the final release candidate check passed. Existing bundle-size/import advisories remain. No hosted release was published.
  • The optional all-dungeon functionality audit was stopped after an extended run without output; its existing report files were not changed. Stockades navigation evidence comes from the actual shipping-asset regressions and the live smoke pass above, not a new fleet-wide functionality certification.

2026-09-12 - Stockades stair-ramp follow-up

  • Follow-up player feedback reported companions still sticking near stairs. Actual collision profiles contain approximately 0.44-0.59m risers, above the party sweep's 0.32m lower-leg clearance. Collision-backed regressions reproduce uphill rejection on the original shipping collision GLB.
  • Added three reviewed package-space traversal proxies for the entrance and both prison-wing stair flights. Collision tread/riser vertices within the reviewed stair relief are reshaped onto smooth ramp planes; upper walls, ceilings, other floors, and geometry outside those footprints remain intact. Source visual/collision GLBs are unchanged. Only prepared walking collision and party navigation use the overrides; the rendered stairs remain steps.
  • Navigation receives the same ramp planes with 0.05m surface clearance and six new triangles stitching the exact source boundary portals. This replaces the three vertex-only connections with filled triangle corridors, allowing mid-stair replans and recalls to project onto the interior walking surface. The reviewed graph now has 3,544 source triangles and 31 components, retaining entrance-to-all-five-boss routes and discarding minor decorative islands.
  • Live QA caught a second issue: terrain queries included the player's kinematic capsule. A failing collision-backed regression confirmed false route blockage through a nearby player. Party direct, route, and grounding queries now exclude dynamic/kinematic actor bodies and sensors; crowd spacing remains a separate party-separation concern. Static walls still block paths.
  • Automated tests exercise shipping normalized/quantized GLBs through runtime preparation, downhill/uphill party capsule checks on all three flights at center and lateral offsets, repeated mid-stair replans, all boss routes with live wall checks, tank melee approach with real collision validation, and player capsule traversal down/back up all three ramps without jumping.
  • Final desktop browser smoke pass at 1280 x 720 used offline level-15 Priest Rolecheck and the same Blood DK/Combat Rogue/Unholy DK/Frost Mage party. Attack began without ROUTE BLOCKED, companions changed position down the entrance staircase, the tank moved out of the entrance view and took aggro, and Backstab/Icy Touch/Plague Strike combat events appeared. Experience rose from 6,576 to 11,098 as the party defeated trash with the player stationary. Recall brought companions back to the entrance stairs. The unattended tank eventually died during continued combat; this was not a healed full clear.
  • Inline task screenshots captured the unchanged visible steps, equipped character bodies, warm lighting, and party movement. Both wing flights have collision-backed automated coverage; live end-to-end wing traversal, a full dungeon clear, wipe/checkpoint behavior, and physical Android QA remain open.
  • Validation: all 224 Vitest files passed, 1,380 tests passed, and six existing tests remained skipped. Production TypeScript/Vite compilation passed using the project's 8GB heap setting; texture/performance audits, static bundle compression, and release-bundle verification passed. Existing build-size advisories and deprecated physics initialization warnings remain. No hosted release was published.

2026-09-12 - Non-blocking players and combat actors

  • Removed party soft separation and crowd-triggered combat repositioning. Companions may overlap or cross one another without push-apart corrections changing their routes. Normal follow formations and role-specific attack ranges remain; a tank already in melee range does not move just because an ally occupies the same position.
  • Added a shared actor collision layer that interacts only with physical terrain. The player capsule uses this layer. Player controller movement, ground probes, camera sweeps, party direct/route validation, party grounding, and combat ground-position queries use terrain-only filters. Actor body type cannot turn an actor into a floor or movement obstruction. Party members, remote players, mobs, and bosses currently render without physical colliders; any future actor capsule must use the shared actor layer.
  • Walls, floors, ceilings, dungeon objects, and the Stockades walking ramps retain their terrain collision. Target-selection meshes, combat visibility, damage, and attack-range checks were not removed.
  • Ten new Rapier regressions cover overlapping actors with no contacts or displacement, movement through fixed/kinematic/dynamic actors (including an overlapped starting position), continued wall/floor collision, and ignoring actors in ground, party-route, and camera queries. A terrain-layer control confirms real actor/terrain contacts are still detected. Stockades shipping- asset regressions now use the live player collision policy and still pass down/up all three ramps without jumping.
  • Browser smoke pass at 1280 x 720 used offline level-15 Priest Rolecheck with Blood DK, Combat Rogue, Unholy DK, and Frost Mage companions. Inline roster and dungeon screenshots show character bodies, weapons, unchanged visible stairs, and the existing warm lighting. Attack moved companions down from the entrance and out of its view without ROUTE BLOCKED; the tank took aggro and melee/caster combat events continued. Experience rose from 11,098 to 13,359. Stop followed by Recall returned the party to the nearby player. Selecting Morvane and casting Power Word: Shield applied the buff successfully.
  • Live QA was an entrance/trash/recall smoke pass, not a full dungeon clear or a manual traversal of both wings. Actor overlap and passage guarantees are backed by the physics regressions; physical Android and multiplayer QA remain open.
  • Validation: all 225 Vitest files passed, 1,390 tests passed, and six existing tests remained skipped. The final focused checks passed again after cleanup. Production TypeScript/Vite build, texture/performance audits, static bundle compression, and release-bundle verification passed. Existing chunk-size advisories and deprecated physics initialization warnings remain. No hosted release was published.

2026-09-12 - Individual companion navigation recovery

  • Replaced the old distant, whole-party stuck Recall with an individual navigation watchdog in a separately tested game module. Two seconds without meaningful waypoint progress invalidates that companion's route; five seconds requests a safe recovery landing. Failed replans do not restart the timer, back-and-forth movement cancels forward progress, and dense waypoint chains still count genuine movement around corners.
  • Recovery prefers a recently visited party/player trail point near the group on the same floor, then falls back to a validated player position. Actual terrain checks require walkable ground, clear companion body space, and a route back to the group. Blocked or invalid landings are not applied. Each companion has an independent ten-second teleport cooldown.
  • Intentional attack-range holds, casting/channeling, crowd control, Stop, death, inactive simulation, and UI pauses do not accumulate stuck time. Automatic recovery changes only the affected companion's position and routing state; it does not heal, resurrect, reset threat, or teleport other companions. Manual Recall keeps its existing whole-party behavior and party order.
  • Added regressions for recovery timing, oscillation, replanning, independent cooldowns and member isolation, exclusions, safe-trail/player selection, wall and ceiling rejection, missing floors, and actor-independent landing checks. Shipping Stockades navigation/collision assets validate recovery landings on all three ramps and along approaches to all five boss objectives.
  • Browser smoke pass at 1280 x 720 used offline Priest Rolecheck and Blood DK, Combat Rogue, Unholy DK, and Frost Mage companions. Inline roster and dungeon screenshots show unchanged character bodies, equipment, stairs, and warm lighting. The first catalog load needed a retry. Attack moved companions down from the entrance without ROUTE BLOCKED, and combat continued with the player stationary. The unattended party eventually died; Stop remained selected after Recall returned the fallen companions without resurrecting them.
  • The intermittent side-room trap and its automatic recovery were not reproduced live. Recovery triggers and terrain safety are backed by automated tests; extended side-room playtesting, a healed full clear, and physical Android QA remain open. This pass did not modify existing ramp or actor-collision policy.
  • Validation: all 227 Vitest files passed, 1,416 tests passed, and six existing tests remained skipped. The final 37 focused checks passed after correcting a test-helper type annotation. Production TypeScript/Vite compilation, texture and performance audits, static compression, and bundle verification passed. Existing chunk-size advisories and deprecated physics initialization warnings remain. No hosted release was published.

2026-09-12 - Wall-aware combat pursuit and individual mob recovery

  • Hostile mob actions now require both attack range and terrain line of sight. Losing either cancels a pending hostile cast so pursuit can resume; companion hostile casts also cancel when sight is lost. Self buffs and friendly heals cannot make an otherwise obstructed mob hold an attack position. Proximity aggro also checks sight instead of pulling enemies through nearby walls.
  • Static enemies, roaming packs, and summoned enemies share separately tested imperative pursuit rules over the already-loaded dungeon navigation surface. Blocked direct approaches use approved routes through doorways. Routes may finish at a reachable attack position only when that position is both in range and visible; off-surface connectors still require body clearance.
  • Two seconds without meaningful waypoint progress requests a replan. After five seconds, a stuck mob within ten meters of its target may recover to a validated nearby landing on the same floor and within its home leash. Ground, body clearance, route connectivity, attack range, and sight must all pass. This teleport preserves health and threat and has a ten-second cooldown.
  • Distant, wrong-floor, out-of-leash, or unsafe near-target recovery requests instead reset only that mob's combat state and restore its health. A validated home landing is preferred; otherwise it evades and navigates home without a blind teleport. Ten seconds of evade prevents immediate proximity, damage, or taunt re-engagement. Dead enemies are never resurrected. Casting, control, pauses, inactive simulation, and non-authoritative online clients do not accumulate navigation failures or trigger automatic recovery.
  • Regression coverage includes range-plus-sight attack/cast gating, immediate cast cancellation, doorway detours, recovery timing and safety, reset/member isolation, cooldown bypass protection, and near-teleport health/threat preservation. Shipping Stockades meshes independently verify real wall occlusion in both directions and clear sight across all three stair ramps. Pursuing mobs traverse each actual ramp uphill and downhill without false teleport/reset recovery. Existing party and player ramp checks still pass.
  • Browser smoke pass at 1280 x 720 used offline level-16 Priest Rolecheck and Blood DK, Combat Rogue, Unholy DK, and Frost Mage companions. Power Word: Shield applied to Morvane; Attack moved companions down from the entrance and out of its view without ROUTE BLOCKED, and Defias melee/cast events and tank damage followed. Stop plus Recall returned all four living companions to the nearby player while retaining Stop. Inline screenshots show character bodies, equipment, unchanged visible steps, and the existing warm lighting. The browser console had no errors and the existing physics initialization deprecation warning only.
  • Live QA was a short entrance/combat/recall smoke test, not a healed full clear or a manually reproduced side-room wall trap. Wall-blocked pursuit and mob recovery triggers are backed by automated tests; extended side-room combat, physical Android, and live multiplayer QA remain open. Existing lighting, ramp assets, and non-blocking actor collision policy were not changed.
  • Validation: all 229 Vitest files passed, 1,444 tests passed, and six existing tests remained skipped. Final production TypeScript/Vite compilation, texture and performance audits, static compression, and bundle verification passed. Existing chunk-size advisories remain. No hosted release was published.

2026-09-12 - HoTs and regeneration cannot heal corpses

  • Reproduced the reported death-with-HoT state through lethal damage followed by overdue Rejuvenation ticks; the original implementation restored health while retaining the death animation. Separate failures confirmed passive spirit/equipment regeneration, ground healing, triggered healing procs, and a lingering damage tick's level-up refill could also restore corpse health.
  • Kept the fix in combat simulation rather than scene movement. Ordinary player healing in mutable combat work now uses a shared living-target guard; passive regeneration preserves zero health. Timed effects validate their target before ticks and procs, discard HoTs on dead targets even before the next tick, and retain HoTs on living allies when their caster dies. Newly applied actor HoTs also reject dead targets. Ground healing skips corpses while continuing to heal living teammates. Experience may still be awarded after death, but its level-up refill no longer implicitly resurrects.
  • Explicit player and actor-based party resurrection remain available and synchronize restored actor health/alive state. Party resurrection also clears the death animation using the existing ability-cancel event. Normal checkpoint respawn still restores health and clears lingering effects. The existing player movement gate remains unchanged and blocks zero health.
  • Fifteen new regressions cover the original self-HoT failure, actual Priest Renew, overdue/future ticks, explicit companion-to-player HoTs and their healing logs, dead allies, regeneration, ground healing, proc healing, post-death level rewards, living-target healing, resurrection, and respawn. The final focused combat/death/support checks passed 101 tests; the full suite passed all 230 files and 1,459 tests with six existing skips.
  • No live corpse-movement replay or physical Android check was performed in this pass. Evidence is combat-state regression coverage, not a new visual claim. Character rendering, camera/input, dungeon assets, lighting, and navigation policy were not modified. No hosted release was published.

2026-09-12 - Selectable resurrection checkpoints and fallen NPC recovery

  • Normal dungeons now offer the entrance plus every defeated boss as named resurrection destinations. Choices use authored boss locations, not corpse coordinates, and unlock from actual defeated actors or durable encounter objective completion. Alive/script-despawned bosses and invalid destination IDs cannot grant a checkpoint. Boss-wipe resets retain completed checkpoints; a fresh dungeon run clears its progress.
  • The player defeat prompt includes a destination chooser. Respawning at the entrance or a cleared boss retains defeated enemies and run progress while resetting the current pull and restoring the party through the existing respawn lifecycle. Legacy callers without a choice retain saved-spawn behavior.
  • A contextual Rez dead members button and matching destination chooser appear below the party frames whenever an NPC teammate is dead. Only fallen NPCs are revived, at full health, into their formation slots at the selected checkpoint. Living NPCs, the player's health/location, current enemies, and party orders are not reset. Lingering timed effects on revived NPCs are removed without removing living allies' HoTs. Manastorm charges and remote human resurrection behavior are unchanged; non-authority online clients cannot mutate NPC revival.
  • Living, engaged bosses disable the NPC chooser/button with an explanation; the same restriction is checked again when the action executes. Trash combat does not block it. Individual return tasks use approved navigation toward the player's current location, including while the party is on Stop, then resume the current order. Returning members do not cast/taunt from the checkpoint or skew the engaged squad's target-selection center. Existing validated stuck recovery remains available. Recall, death, actor unmount, and run reset cancel pending return tasks. Scene relocation clears the corpse animation explicitly.
  • Live localhost Stockades screenshots at 1280x720 showed the panel with a dead Morvane tank, an enabled entrance chooser/button during trash combat, and the tank restored to 1707 health at the entrance after clicking while Stop remained selected. The button disappeared when no NPC was dead; living Thorne continued taking damage rather than receiving a party-wide refill. At 384x844 both native chooser and button remained within the viewport, about 176px wide and 44px high. The narrow screenshot capture was backend-scaled, so DOM bounds supplemented the visual check. Normal viewport sizing was restored and the temporary tab and development server were closed.
  • Twenty-nine new regressions cover checkpoint unlocking/retention, invalid and locked choices, player checkpoint respawn, boss/trash restrictions, selective NPC revival/effect cleanup, authority/Manastorm isolation, Stop/rejoin behavior, wall-aware return navigation, registry lifecycle, and UI visibility/placement. The shipping Stockades navigation/collision test also simulates all four NPC formation slots walking from the entrance and every boss checkpoint back to the entrance through approved corridors, without requiring stuck recovery. Final Vitest validation passed all 234 files and 1,488 tests, with six existing skips. No live boss-kill destination-selection, distant-player return replay, multiplayer session, or physical Android check is claimed in this pass.
  • Browser logs contained no errors; Rapier initialization and KTX2-loader warnings occurred during development hot reloads. Character assets, camera/input, dungeon geometry, and lighting were not edited. Final production TypeScript/Vite compilation, static compression, and release-bundle verification passed; texture and environment-performance audits also passed during prebuild. Existing build chunk advisories remain. No hosted release was published.

Optional DPS meter — September 12, 2026

  • Added a compact party DPS meter with current/last-fight damage, class-colored rankings, and a shared fight timer. It consumes the lossless combat event stream and counts effective damage, including pets/summons under their owner. Completed fights remain visible until the next pull; encounter resets clear the meter. Hiding it does not stop recording. Local menu/background pauses do not dilute DPS.
  • Automatic placement uses the PC lower-left corner and the Thor companion display. The UI editor supports visibility, dragging/keyboard nudges, width, and screen selection. These settings participate in saved layouts, all six template slots, and export/import, including migration of older UI files. Dedicated companion snapshots carry meter data and draft placement; lower display movement commands update the authoritative editor draft.
  • Live localhost Stockades checks at 1280x720 showed increasing party damage and readable bars in the PC lower-left corner. Resizing from 230 to 240 pixels worked; dragging moved the handle from approximately (9, 509) to (269, 400). Saving visibility off hid the meter, and reopening the editor retained that setting while damage continued accumulating. Default position/width and visibility were restored after this check.
  • In Thor preview, the meter appeared only inside the 620x540 companion surface. Populated bars remained clear of the party strip, vital controls, and action bar. With the main editor open, dragging on the bottom screen moved its handle from approximately (526, 322) to (661, 369) within companion bounds. Those preview movement edits were canceled. Screenshots are saved in artifacts/dps-meter/pc-default.png, thor-default.png, and thor-editor-moved.png. Full-page capture scaled incorrectly in the browser backend, so the Thor screenshots use the scrolled normal viewport.
  • All 47 targeted tests passed across seven files, including damage accounting, ownership, reset/pause behavior, UI migration/persistence, and dedicated companion publication/unsubscription. The production build and release checks passed. Browser error logs were empty. Physical Thor hardware and a multiplayer session were not exercised; the new per-party totals consume this client's combat stream. No hosted release was published.

Player-only revival during ongoing party combat — September 12, 2026

  • In normal offline dungeons, a defeated player with living companions and an engaged, living enemy can revive at the entrance or an unlocked boss checkpoint without resetting the pull or relocating/restoring companions. The player-only path advances the relocation revision, not the party or encounter reset signals. Recall remains an explicit, optional command. Full-wipe recovery is unchanged; Manastorm's shared-charge resurrection remains separate.
  • Player recovery restores health/resources, clears corpse animation, casts, control, shields, harmful player auras, and player-targeted periodic effects. It preserves NPC/enemy actor snapshots, positions, health, targets, casts, periodic effects on other actors, and ongoing cooldowns. The existing checkpoint chooser is retained; its defeat-prompt copy explains that companions keep fighting.
  • Nine dedicated regressions cover trash/boss combat, selected checkpoints, unchanged companion/enemy snapshots and Recall revisions, continued simulation, periodic-effect isolation, full-wipe fallback, canonical actor health, and invalid requests. A prompt-rendering regression checks the optional-Recall explanation. Final Vitest validation passed 239 files and 1,511 tests, with six existing skips. Test fixtures use a fixed combat clock and respect surviving crowd-control timers.
  • Localhost Stockades smoke testing at 1280x720 showed the rendered dungeon, party frames, unchanged Recall control, and an active party fight with increasing damage and declining tank health. Session screenshots captured the entrance and combat HUD. Startup navigation initially timed out and recovered after reload; browser error logs were empty after recovery. A live player-death/mid-fight checkpoint-revival replay was not achieved, so spatial proof of that exact sequence is not claimed. Multiplayer and physical Thor hardware were not tested.
  • Production TypeScript/Vite compilation, static compression, release-bundle verification, and prebuild texture/performance audits passed. Existing chunk advisories remain. No hosted release was published. Character rendering, camera/input, dungeon geometry, lighting, and unrelated in-progress party damage changes were not edited for this request.

RoM dungeon entry and level-up crash — September 12, 2026

  • Reproduced in the local PC browser with an offline RoM Human Priest. Stockades loaded at level 1, then the first level-up unmounted the entire app. The console recorded Unsupported party specialization: rom-champion:Primary from partyStore.syncLevel through PartyBridge. Initial party creation already skipped WoW talents for RoM classes; level synchronization did not. The same call also runs during entry when the saved character level replaces the previous combat level.
  • Level synchronization now retains empty, frozen talent ranks for RoM companions, matching party creation. Other classes still receive their existing talent plans. Two regressions failed with the original exception before the fix, then passed. They cover all ten RoM companion classes, all three player roles, levels 1/2/10/70 and downward synchronization, stable identities, fallen companions, and living health/resource ratios.
  • After reload, the same saved level 2 Priest entered Stockades successfully, fought with the RoM party, and reached level 3 without losing the scene. The same character then entered Forsaken Abbey and progressed from level 3 to 6. At the 74-second check after Attack, the scene and HUD remained present, combat continued, and the renderer reported about 60 FPS. No new browser errors or context-loss messages appeared. Rapier initialization and multiple active KTX2-loader warnings occurred during these development sessions.
  • Screenshots and timestamped browser evidence are in artifacts/rom-dungeon-level-sync/. Screenshot capture retained the browser backend's existing scaling issue; DOM progression and renderer counters supplemented the rendered dungeon/body/equipment checks. This was an offline PC smoke test, not full dungeon completion, multiplayer, or physical Android validation. The temporary desktop viewport was restored and test tab closed.
  • All 54 focused party, talent-plan, and RoM combat tests passed. The production TypeScript/Vite build, prebuild texture/performance audits, compression, and release-bundle verification passed with existing chunk advisories. The final release-candidate check includes untracked changes. No hosted release was published. Existing combat, death/respawn, AI, and HUD work was preserved.

NPC party damage — September 12, 2026

  • Reproduced Garrick, Arms, and Fury dealing zero damage in level 5/20 sustained fights: Rage starts at zero, companion Rage regeneration is disabled, and the ability loop had no regular weapon swings. Priests, hunters, and warlocks also dealt zero because they repeatedly refreshed their DoTs before the first tick could fire.
  • Added independent weapon swings for melee companions and hunters, with Rage earned from successful hits. Swings respect range, visibility, line of sight, facing, control, casting, rejoining, and party orders. Maintained DoTs and debuffs now allow other abilities to run between applications; utility taunts/interrupts/control require a useful combat context.
  • Self-centered area attacks now validate their radius and hit around the caster. Companion direct and periodic amounts use the existing spell scaling calculation, including spell base damage and equipment bonuses.
  • The new audit runs 30-second fights for all 26 WoW party templates at levels 1, 3, 5, 20, and 80. Every template produces positive damage from actual abilities, beyond weapon swings, with resources within bounds. Separate regressions cover zero-Rage short pulls, swings during the GCD, Stop, Thunder Clap targeting, and zero-coefficient spell base damage.
  • In an offline PC Stockades run, the saved level 3 Priest commanded Attack without player attacks. Garrick dealt 6 damage in the first three seconds and 80 damage by approximately 20 seconds; Kael dealt 147, Korra 220, and Ash 146 at that check. The party defeated enemies and the player reached level 4. The saved party's Garrick is a Tauren; the class/role fix also applies to Dwarf Garrick. This was a PC combat smoke test, not physical Thor, multiplayer, or a full dungeon completion test.
  • artifacts/npc-damage/stockades-warrior-damage.png shows the rendered dungeon, player body/equipment, and active DPS rows for both warriors. A paused accessibility snapshot records totals. No browser errors were reported. The temporary browser tab was closed after verification.
  • All 310 focused combat, party, death/respawn, and DPS tests passed. The production build, texture/performance audits, compression, bundle verification, and release candidate check passed. Existing concurrent party-level synchronization, death/respawn, catalog, and server changes were preserved.

Dungeon release stages and issue reports — September 12, 2026

  • The complete 84-dungeon browser now sorts Full Release, Beta, then Alpha, alphabetically within each stage. Stormwind Stockade is the only Beta; the other 83 entries are Alpha. WoW/RoM category tabs remain available.
  • Dungeon pause menus can submit a nonempty issue comment of up to 500 characters to the shared SQLite report database. Connected guest players can submit reports too. New reports are stamped Submitted by the server; comments remain in the form after a failed network request.
  • View Reports on the main menu shows all reports, including Closed, by default. Status and Dungeon filters combine, and Clear filters restores the complete list. GM accounts can select Submitted, In-Progress, Testing Fixes, or Closed, use Close report, and reopen closed reports. The server rejects non-GM updates and stale revisions.
  • Dungeon rows with Submitted, In-Progress, or Testing Fixes reports have an orange border and a top-right open-report count. Closing the final open report removes both treatments. Counts refresh when opening the browser, returning to the app, and every 30 seconds while visible.
  • A headless Edge browser exercised an actual Stockades entry, its pause report form, a 500-character submission, whitespace rejection, failed submission/retry, the shared player report list, all GM status changes, combined filters, and badge removal. Keyboard Back and controller filter navigation/GM status changes passed. No browser page errors occurred.
  • Visually inspected the form, orange dungeon badge, player report list, and GM report screens at 1280×800 and 390×844. Long comments wrap and the mobile report screen has no horizontal overflow. Evidence and the test result are in playtest-artifacts/dungeon-reports/. This validates the reporting flow; it is not an exhaustive dungeon completion or physical Android/Thor playtest.
  • All 43 focused report, catalog, store, shell, and display tests passed (five existing shelved-mode tests skipped), along with all 61 server tests. The 32 party AI/store/sustained-damage checks also passed after preserving immutable cast metadata across companion channel updates to resolve three concurrent combat type-check errors. A separate, in-progress expanded class-damage audit failed its level-1 CoA player case for Witch Doctor and Sun Cleric; those combat behaviors are outside the reporting change.
  • The final production TypeScript/Vite build, prebuild texture/performance audits, compression, and release-bundle verification passed with existing chunk advisories. npm run release:check passed after a transient Windows Git crash, including untracked files. No hosted release was published.

CoA and RoM class damage audit — September 12, 2026

  • Ran 342 sustained, 30-second combat scenarios: all 21 CoA classes as player characters and synthetic NPC slots at levels 1, 2, 4, 9, 20, and 80; all 10 RoM classes in both runtimes at levels 1, 20, and 70; and the actual shipped RoM companion templates with their assigned roles and starting resources at those three levels. All scenarios passed. CoA expeditions currently use WoW companion templates, so the synthetic CoA slots exercise class execution without implying that a CoA companion roster has been added.
  • Found and fixed companion spacing based only on WoW class names. RoM and CoA casters now use their class metadata and learned offensive spell ranges; short-range attacks remain reachable. A thrown summon such as Caltrops does not force an early Witch Hunter away from its melee attacks. Hunter aliases also use ranged weapon stats and projectile presentations for ranged swings.
  • Fixed Dawn Blade's melee classification: a five-yard hunter-archetype attack previously counted as ranged and could not initiate the player's weapon swings needed to generate Rage. The companion AI now rejects unlearned CoA tree entries and resolves the rank actually learned.
  • Fixed channel execution in both runtimes. Normal amounts are distributed across five pulses, while guaranteed periodic trigger payloads fire per pulse. Radiant Flame's imported periodic damage now happens during the channel. Focused tests verify five damaging pulses and no duplicate amount on completion. Conditional proc payloads are not treated as guaranteed hits.
  • Corrected the RoM vocation import to use the player's FixArgTableID = 1 record, as selected in the source client's level-up calculation. The previous adjacent table made Champion and Warlock stats grow exponentially; a level-20 Champion weapon hit reached a raw 704 billion damage in the initial audit. The corrected Champion instead sustained attacks and damaging abilities for the full test. Source record sentinels and all ten classes' growth bounds are covered by regression checks; this is a source-table correction, not a balance multiplier adjustment.
  • Corrected tooltip fallback damage on retaliation auras. Drakkari Barrier stays friendly and deals its authored damage through its damage-taken proc. The imported first offensive unlocks are Witch Doctor 9, Sun Cleric 4, and Primalist 2. The player audit requires offensive ability damage once unlocked; these classes have no learned offensive cast at level 1. Their NPC weapon attacks deal damage at level 1. This supersedes the preliminary player failures mentioned in the reporting notes above.
  • Live PC check: created the isolated offline test character Romaudit, entered Forsaken Abbey as a healer, and issued Attack. At 26 seconds the meter showed Ilyen (Mage) 492 damage, Morgha (Warlock) 370, Veya (Rogue) 217, and Bronn (Champion tank) 148. All four NPCs dealt damage; visible enemy effects also confirmed Heavy Bash, Electrocution, Weakening Weave Curse, and Shadowstab. No player healing was applied during this bounded damage check, and the tank eventually died. This was not a dungeon-completion test.
  • Visually verified the loaded roster body/staff and in-dungeon player body/staff. The DPS meter remained readable at the PC bottom-left default. The first attempt used the downloadable shelved preview without its content server; the final captures use the full bundled development asset set and recorded no browser errors. No physical Ayn Thor device was tested here.
  • Evidence: artifacts/class-damage-audit/report.json, level-20-damage.csv, rom-roster.png, rom-dungeon-start.png, rom-party-damage.png, and rom-browser-errors.json. Training-target totals demonstrate execution and sustained damage; they are not class-balance rankings or exhaustive coverage of every talent build and dual-class pair.
  • All 434 focused combat, party, CoA, RoM, DPS-meter, stat, and avatar tests passed, along with the native vocation-import regression. The production TypeScript/Vite build and release-bundle verification passed. The final release candidate check includes the new tests and generated catalogs.

RoM dungeon enemy durability — September 13, 2026

  • Reproduced Barren Caves' low health with a RoM Priest and the four shipped companions. Tested 108 combinations: 12 party seeds at levels 1, 2, 4, 8, 9, 20, 40, 70, and 80. The old fallback had 94 health at level 1 and 1,832 at level 80; kills took 0–1.9 seconds from the first damaging NPC hit.
  • Normal RoM dungeons now use a party-health baseline of 1000 + 100 * enemyLevel + 8 * enemyLevel * enemyLevel, with authored creature/boss multipliers applied separately. This is explicit Healer Man balancing because native RoM creature health tables are not packaged. Barren Caves' Anglo retains his 7.5 multiplier and one-level advantage.
  • Loaded RoM creatures receive the new health when the character levels up. Re-registration preserves wounds as a health percentage and keeps corpses dead. Enemy attack damage also rebases on a level change instead of retaining its original low-level value. Regression checks cover these transitions.
  • With the new health, the 108 isolated party-damage pulls lasted 3–17.5 seconds. A separate pull exercised actual enemy attacks and Priest healing before the enemy died, with all companions surviving. These are opening pulls with baseline equipment, rather than an audit of every geared build.
  • Live PC check at 1280×720: created the offline Human Priest Barrenaudit and entered Barren Caves as Healer. A level-1 Cave Sand Bug had 1,108 health. At 10 seconds it still had 374 health, with 734 party damage on the meter. The completed first fight showed 14 seconds and 1,108 total damage: Morgha 370, Ilyen 369, Maerwen 289, and Cael 80. Urgent Heal then restored Maerwen to 407/407 while the next pull was active. No browser errors were captured during that bounded combat check.
  • Concurrent navigation edits triggered development hot reloads around the playtest; the captures above were taken during uninterrupted combat. This check did not complete the dungeon or use physical Ayn Thor hardware. Restored the original Hudtest roster selection, closed the test tab, and stopped the temporary development servers.
  • Evidence: artifacts/rom-dungeon-health/report.json, barren-caves-health.png, barren-caves-combat.png, barren-caves-healed.png, live-combat-dom.txt, and browser-errors.json.
  • Validation: all 407 focused combat, party, CoA, RoM, DPS-meter, stat, and dungeon-scaling tests passed across 52 files. The final production TypeScript/Vite build and release-bundle verification passed.

2026-09-13 - WoW dungeon lighting and stair fleet pass

  • Applied environment-specific readable lighting to all 54 WoW dungeon entries, using the reviewed Stockades ambient/hemisphere fill as the baseline. Stone, cavern, fire, arcane, crypt, and outdoor profiles preserve distinct coloration. Stockades' existing presentation/three ramps and RuneWaker lighting are unchanged.
  • Scanned every shipped WoW collision package, including authored Wailing Caverns' actual source assets. Added 347 verified walking proxies across 22 other dungeons and eight filled navigation portal bridges in Uldaman. Rendered steps and source visual/collision/navigation GLBs remain unchanged.
  • Added package-identity gates and a compiler-independent shared runtime adapter. Collision preparation spatially indexes flights; rejected candidates cannot supply geometry needed by accepted proxies. Existing navigation validation, content, encounter, and availability gates were not promoted to green.
  • Shipping-asset regressions independently pass all 347 new proxies through prepared collision and the live NPC segment validator uphill/downhill at the center and two interior lateral lanes. Exact portal matching and all existing Stockades player/NPC/wall tests pass.
  • The game-playtest visual viewer uses shipped meshes and runtime lighting and material policies without touching saved character/party state. At 1280x720, Uldaman's old/new-fill comparison showed clearer stonework; Wailing Caverns retained green, readable rock; Mechanar retained cool arcane interiors; Scholomance's visible entrance steps/masonry remained intact and readable. Blood Furnace's dark source textures remained visible at its wall-facing entrance viewpoint. Durnholde's visual load completed without console errors.
  • Zul'Farrak entrance/boss views and Durnholde's exterior boss view showed geometry/terrain/viewpoint gaps, recorded for separate investigation. This is not exhaustive staircase certification: curved/short/heavily-decimated flights, rejected candidates, outer stair edges/landing lips, complete dungeon routes, full clears, and physical Android QA still require individual review.
  • Evidence/coverage: dungeon-pipeline/WOW_ENVIRONMENT_REVIEW.md, src/game/generated/wowDungeonStairs.generated.json, and screenshots in artifacts/wow-dungeon-environment/. No hosted release was published.
  • Validation: 247 Vitest files passed, 1,599 tests passed, six existing tests skipped. Production TypeScript/Vite build, texture/performance audits, bundle compression/verification, and release candidate check passed. Existing physics initialization and bundle-size/import advisories remain.

2026-09-13 - Dungeon completion results and run leaderboards

  • Fixed missing RuneWaker completion bookkeeping for the 21 dungeons with configured bosses. Barren Caves now awards Anglo's objective on his actual death and announces the completed run. Bossless placeholder entries do not fabricate a completion.
  • Run timing starts when the dungeon is playable, survives wipes, pauses, and saved resumes, and freezes at the final-boss objective. Older checkpoints without a recorded start time still announce completion but remain unranked.
  • The results dialog shows the final-boss time, final-clear and full-clear placement, party classes/levels, and defeated bosses. Stay and loot, reopening results, and Return to main menu were verified through the live UI. Returning clears the completed checkpoint.
  • Replaced the dungeon picker's minimap with persistent completion-time leaderboards. Final Boss clears includes all qualifying runs; Full dungeon clears requires every available boss for the selected difficulty. Expanded entries show each party member and boss status. Normal/heroic rankings are separate; disconnected results use an explicitly labeled device leaderboard.
  • An actual combat integration check fought Barren Caves' level-2 Anglo with 9,240 health using NPC ability selection, enemy attacks, and Priest healing. NPCs dealt 9,239 damage after a one-damage player tag; healing totaled 441. The final death awarded completion at 84.1 seconds with all companions alive.
  • Manual browser combat confirmed NPC damage and healing on Barren Caves trash. The live results check restored the integration fight's completed checkpoint through an isolated local QA account: 01:24.1 ranked #1 of three seeded local-server entries in both filters. This was not a manual browser full clear and no production leaderboard entries were published.
  • PC results and expanded final/full leaderboard layouts were visually reviewed at 1280x720. The built-in Thor preview displayed the leaderboard, filters, and role-selection control within its 960x540 main surface. Compact 480x360 DOM bounds kept the dialog footer inside the viewport; the in-app browser's viewport-override screenshot scaled incorrectly, so that capture does not establish compact visual quality. Physical Thor hardware was not used.
  • Evidence: artifacts/dungeon-runs/combat-completion.json, results-world.png, leaderboard-final-expanded.png, leaderboard-full-expanded.png, and leaderboard-thor.png. The bounded final browser check captured no errors.
  • Validation: 70 completion, checkpoint, encounter, catalog, client, and UI tests plus the real-combat integration test passed. The 432-test focused combat/party/class/health/input regression suite and 18 server tests passed. Production build, final TypeScript check, and release candidate check passed.

2026-09-13 - RoM character nameplate class labels

  • RoM overhead nameplates and AI party frames now show the active class alone, or primary/secondary class names joined with /, without race or Primary.
  • An isolated local fixture using the real scene, party frames, and shared character preview verified Warrior, Priest, and Priest/Warrior labels. The two-class dungeon screenshot showed the label above the rendered body and equipped staff silhouettes. The roster preview also retained its body and equipment. The fixture used in-memory identities without saving a roster.
  • Evidence: artifacts/rom-nameplates/dungeon-dual-class.png and artifacts/rom-nameplates/roster-preview.png.
  • Validation: 70 avatar, party-store, and mob-nameplate tests passed. Production build, asset audits, compression/bundle verification, and release check passed.

2026-09-13 - Dungeon boss durability and difficulty leaderboards

  • Campaign bosses now use a level-scaled health floor above their original health when needed. Final bosses receive an additional 1.8 multiplier on that floor. Larger authored health values remain effective.
  • The dungeon browser offers a 1-10 boss difficulty slider, native keyboard adjustment, and controller decrement/increment buttons. Difficulty 1 is Easy; each step adds 25% health and 15% damage to bosses. The selected source Normal/Heroic variant also applies to entry. Trash retains its existing stats.
  • Boss difficulty is fixed at entry, preserved through saves and renderer restarts, and passed from the online group leader to followers. Changing difficulty starts a new run; completed checkpoints also start fresh.
  • Device and world leaderboards isolate each difficulty's final/full-clear records, ranks, and pages. Existing records migrate to a separate legacy bracket. Migration and repeat submissions were verified against SQLite; HTTP tests verify difficulty selection and reject invalid values.
  • Deterministic Ragefire simulations tested 12 RoM party compositions at levels 1, 8, 20, 40, and 80 against the shared runtime scaling function. All ordinary boss samples exceeded 25 seconds and final-boss samples exceeded 45 seconds. Additional damage-role Mage samples passed those bounds; at level 8 the ordinary boss took 29.8 seconds and the final boss took 55 seconds. Timings remain dependent on party composition, player actions, and equipment.
  • A final-boss fight with enemy attacks and Priest healing verified repeated attacks, incoming damage, healing, and party survival before the boss died. Balance evidence: artifacts/boss-difficulty/ragefire-balance.json.
  • Desktop screenshots at 1280x720 verified the Easy and difficulty-10 layouts, stat preview, and matching leaderboard labels. Pointer and keyboard changes were exercised. At 390x844 the slider remained operable and its DOM width stayed within the viewport, but the in-app browser's viewport-override screenshots scaled incorrectly, as in the earlier compact playtest. Those captures do not establish mobile visual quality. The viewport was restored.
  • Validation: 169 focused game/client/UI tests and 20 server tests passed. The production build, asset audits, bundle verification, and release check passed. Existing RoM nameplate changes were retained.

2026-09-13 - Original WoW dungeon atlas

  • Added 107 unique original map images across 51 standard WoW dungeons using the supplied patch-enUS-M archive and existing client archives. A duplicated Trial of the Champion floor record is deduplicated before packaging. The source MPQs and Mapster addon were read without modification; no Lua addon code is installed into HealerMan.
  • Coordinate inverses were checked against 10,342 matching source spawns and the event-driven Trial of the Champion source entrance. Maximum discrepancy is 0.189 yards in authored Wailing Caverns rounding; other imported maps have substantially smaller discrepancies. All 107 image checksums match their local immutable content objects.
  • The production preview at localhost:5174 loaded Wailing Caverns and showed original artwork with the player/camera direction, entrance, numbered encounters, and a 45.7%, 60.5% entrance-position readout. The map was visually reviewed at 1280x720, with the rendered dungeon visible behind it. Pressing M opened it; toggling patrol routes then pressing M closed it despite the checkbox retaining focus. Reopening restores the clean default overlay.
  • Evidence: artifacts/wow-maps/wailing-caverns-atlas.png. No production-preview errors were captured in the bounded console check. Earlier development HMR errors from concurrent equipment edits were not treated as production errors. Testing used the existing offline Hudtest QA character, not a live account.
  • Multi-floor rendering, floor controls, rebound shortcuts, repeat/capture guards, PNG dimensions/checksums, axis projection, shifted/rotated scene transforms, and RuneWaker survey fallback are covered by automated tests. Every dungeon was not individually traversed in the browser. Auto floor selection is horizontal best fit, not WMO-group/height detection; overlapping stacked rooms require manual floor selection. Mobile hardware was not tested.
  • Tinkertech Showdown, Frozen Reach, and Forgotten Mine have no matching artwork records and retain their survey maps. RuneWaker maps are unchanged. Failed artwork loads also retain a correctly reprojected survey fallback.
  • Validation: 50 focused map/UI/input tests and three BLP/tile-layout tests passed. The production build, texture/performance audits, and compressed release-bundle verification passed. Local downloadable packs were published; no online deployment was performed.

2026-09-13 - Boss card collection and leveling loot

  • Boss deaths roll a guaranteed Normal card plus independent Rare (1/10), Epic (1/50), and Legendary (1/100) bonuses. The collection catalogue covers 330 distinct WoW/RoM bosses and 1,320 rarity variants using existing models. Repeated appearances share counts and list every source dungeon.
  • Copies and the latest claim per boss spawn persist per character through the roster/cloud-save path. Shared-world hydration grants the authority's rolls to followers and ignores duplicate/reconnected and older reward snapshots.
  • Equipment drops and bonus equipment are suppressed below player level 80; existing inventory and authored non-equipment drops are preserved. Level-80 equipment loot remains enabled. Bosses without equipment tables award cards.
  • The production browser at 1280x720 verified the main-menu entry, all four Lady Anacondra model portraits, dungeon location, odds, search, All/Earned, dungeon/rarity grouping, and in-dungeon pause-menu access. Roster and dungeon screenshots show player/party bodies and starter weapon/shield silhouettes.
  • At 390x844 the collection switched to two columns, with no horizontal page overflow and dialog bounds within the viewport. The in-app browser again scaled the viewport-override screenshot incorrectly; that capture does not establish mobile visual quality. The viewport was restored.
  • Deterministic tests cover exact odds boundaries, counts, persistence, no-loot-table bosses, loot restrictions, and online replay. Live browser QA did not perform a boss clear; earned-copy display was checked with seeded render tests. Evidence: artifacts/boss-cards/collection-desktop.png, collection-mobile.png, roster.png, and dungeon.png.

WoW and CoA default boss difficulty review — September 13, 2026

  • Reviewed all 10 WoW and 21 CoA classes: 61 canonical class-role builds at levels 8, 20, 40, and 80 with three deterministic companion compositions. The 1,464 durability simulations used live boss scaling, starter heirlooms, legal level-appropriate talents, live companion AI, and the existing baseline player rotation. CoA characters currently use WoW companions.
  • Fixed Death Pact and other instant-kill effects bypassing boss health in the player, triggered-spell, and companion paths. Fixed repeated proc activations across branches, duplicate execution of expanded CoA payloads, invented damage on proc auras and Waterfall, and critical-damage talent bonuses affecting ordinary hits. Regenerated the CoA runtime catalog and shards.
  • Raised the shared health floor by 40% to cover the remaining CoA burst. Every class uses the same boss stats at the same level and difficulty. Fastest sampled kills were 26.2 seconds for an ordinary boss and 48.6 for the final boss. All duration assertions passed. The refreshed RoM regression also passed; its level-eight damage-role Mage sample took 41.8/74.9 seconds.
  • Durability samples disabled enemy attacks and stopped at 60 seconds to isolate damage. Most WoW and CoA samples still had a living boss at the cap; these are lower bounds, not proof of typical 25-30/45-second kill times. Default class throughput is still uneven, especially for WoW parties.
  • An additional 26 final-boss attack samples exercised healer builds at levels 8 and 80. Paladin, Priest, Shaman, and Tinker kept their parties alive in both. Druid and several CoA samples lost companions; Bloodmage also lost the player at 80. This basic policy can refresh HoTs too early or choose self-healing hybrids, so these outcomes need a dedicated healer rotation/playtest pass before treating them as class throughput limits. No live boss clear was performed in this numerical review.
  • Validation: 122 combat/catalog checks, 91 class-damage/avatar checks, eight RoM boss regressions, TypeScript, and the production build passed. All six large-matrix assertions passed, but its progress reporter timed out during CPU-heavy loops. Added worker yields and reran the affected level-40 test; it exited cleanly without the reporter error.
  • Evidence: artifacts/boss-difficulty/wow-coa-balance.json and artifacts/boss-difficulty/wow-coa-review.md. Coverage is a canonical build per role with starter gear, rather than every specialization or later gear combination. npm run release:check is required for handoff.

CoA healer rotation pass — September 13, 2026

  • Corrected base-mana percentage costs, Tinker's secondary mana maximum, imported heal power/AP/spirit scaling, self-healing riders, and party heal recipients. Removed invented instant heals from conditional procs and invented hostile damage from healing/mitigation tooltip text. Regenerated the CoA runtime catalog and all class shards.
  • Companion support AI maintains existing HoTs, covers other injured allies, and avoids redundant shields. The benchmark player policy now prefers effective emergency/area healing, avoids wasteful self-healing, positions ground heals on the injured ally, and funds rage heals through weapon attacks and actual resource generators. Normal gameplay still uses player input.
  • Tested nine canonical CoA healer builds at levels 8, 20, 40, and 80 against final-boss attacks for 60 seconds with three deterministic WoW companion compositions each: 108 samples. Every player survived and every sample delivered effective ally healing. Entire-party survival was 24/27 at eight, 25/27 at twenty, and 27/27 at both forty and eighty.
  • The remaining low-level losses are Primalist companions. Its imported Geode Barrage lacks the server-scripted stone/rage payload; that mechanic still needs implementation. Survival at the time cap does not establish a boss clear, indefinite mana sustainability, or complete CoA mechanic parity.
  • Reran the full WoW/CoA durability and healer-attack suite: all six assertions passed without reporter errors. Fastest sampled ordinary/final kills remain 26.2/48.6 seconds. WoW Druid's comparable eight/eighty attack samples now keep the party alive with the revised HoT policy.
  • Validation: 167 combat/catalog/runtime regressions, four healer matrix assertions, 47 avatar checks, TypeScript, the production build, and release bundle validation passed. The final release hygiene check covers untracked regression tests as well as tracked edits.
  • Live production-preview smoke check at 1280x720 used an offline Human Witch Doctor (Brewing). Roster and Wailing Caverns entrance captures show the player and companion bodies and starter weapon/shield silhouettes. This visual check did not perform a live boss clear or validate manual rotations. Evidence: artifacts/boss-difficulty/coa-healer-smoke/roster.png and artifacts/boss-difficulty/coa-healer-smoke/dungeon.png.
  • Numerical evidence and remaining limitations: artifacts/boss-difficulty/coa-healer-balance.json, artifacts/boss-difficulty/wow-coa-balance.json, and artifacts/boss-difficulty/coa-healer-review.md.

Primalist rage generation follow-up — September 13, 2026

  • Restored Geode Barrage's three physical stone pulses at cast completion, +500ms, and +1000ms, using the ranked parent amount, 23% nature/spell power, and 9% attack power. Each pulse dealing effective damage grants its caster 5 rage, for 15 from a full Barrage. Removed the unscheduled hidden placeholder proc so another periodic event cannot substitute for or duplicate the stones.
  • The 5-rage stone amount is HealerMan's normalization using the related imported Geode spell 804002 payload. Barrage's imported DBC does not expose an exact rage amount; this does not establish exact server-script parity. Dead targets and fully absorbed stones grant no rage. Player and companion grants cap at the source pool maximum and synchronize the actor's pools.
  • Seismic Crash grants 20 rage once per cast and executes its initial damage pulse. Seismic Spike grants 4 per target actually damaged. Primalist energize effects retain their power type and convert internal rage units to displayed points: Primal Rush and passive Protective Roar grant 20 rather than 200. Protective Roar retains beneficial party recipients when its payload fires.
  • Scoped imported power-unit conversion to Primalist. A global conversion caused a Bloodmage survival regression; other classes retain their existing script-payload interpretation pending their own power-record review.
  • The benchmark policy considers all usable rage generators, including Crash and Barrage, before rage heals. Normal gameplay still uses player input. All 108 attacking-final-boss CoA healer samples now keep the entire party alive, including the five previously failing low-level Primalist samples. The regression requires zero companion deaths at every tested level.
  • Validation: 207 combat/catalog/runtime/avatar checks passed, including eight focused Primalist checks for timing, coefficients, capped gains, absorbed and dead targets, companion attribution, passive payloads, and Seismic gains. All four strict healer matrix assertions passed. All six WoW/CoA boss suite assertions passed across 1,464 durability runs and 26 attacking-boss samples; fastest sampled ordinary/final kills remain 26.2/48.6 seconds. TypeScript, the production build, release bundle validation, and release hygiene passed.
  • Live production-preview smoke check at 1280x720 used an offline female Tauren Primalist (Life). Roster and Wailing Caverns entrance captures show a character body with a staff and companion bodies with weapon silhouettes. The Tauren identity rendered a human-looking fallback; the optional content service was unavailable in this static preview. These captures establish body/equipment visibility, not correct Tauren appearance. Entrance trash reached level two with the full party alive. Barrage remained locked until level six, so pulse/rage behavior was checked by deterministic runtime tests, rather than a live manual Barrage cast. No live boss clear was performed.
  • Evidence: artifacts/boss-difficulty/primalist-smoke/roster.png, artifacts/boss-difficulty/primalist-smoke/dungeon.png, artifacts/boss-difficulty/coa-healer-balance.json, artifacts/boss-difficulty/wow-coa-balance.json, and artifacts/boss-difficulty/coa-healer-review.md. Survival at the 60-second cap does not establish a boss clear or indefinite resource sustainability.

WoW action bars in Ability controls — September 13, 2026

  • Added Controller bars / WoW bars selection to Ability controls. On PC, the dialog opens on WoW bars when that UI layout is enabled. The existing three controller layers remain available through the same screen.
  • The WoW editor exposes all five bars and twelve buttons per bar, including inactive bars. Slots show their saved keyboard shortcuts and assigned abilities. Assigning or leaving a slot empty saves immediately through the existing profile UI persistence path and updates the gameplay action bar.
  • Restore Bar resets that bar's abilities to the current character's class defaults; Restore all WoW bars resets all sixty ability slots. Both use a confirmation with cancellation. Keyboard shortcuts, bar geometry, PC/mobile UI templates, and controller bindings remain independent of these resets.
  • Long WoW ability lists scroll inside the picker. Controller navigation keeps the selected control visible. Future abilities retain their unlock-level labels and can be assigned ahead of time; passive abilities are excluded.
  • Live 1280x720 production-preview QA used an isolated offline Human Priest profile at port 5192. Verified first-slot assignment, inactive fifth-bar button-twelve assignment and clearing, canceling a reset, restoring one bar while retaining the fifth-bar assignment, and restoring all WoW bars. Controller Cross retained Smite through the WoW edits and resets.
  • Enabled the WoW layout through Edit UI & templates, confirmed Ability controls opened directly on WoW bars, and changed the first button to Lesser Heal. The gameplay bar updated immediately. After a full page reload and dungeon reentry, both the gameplay bar and editor retained Lesser Heal and key 1. The final picker capture shows access to the late-level abilities and Leave empty while all bar controls stay visible. No browser UI errors were logged.
  • Validation: all 55 UI-layout, action-binding, keybind, profile-sync, input, HUD-layering, and panel-integration tests passed. The production build, including TypeScript with the project's configured 8 GB heap, prebuild asset audits, and postbuild release-bundle validation, passed. A separate manual TypeScript attempt using Node's default heap exhausted memory; the standard build completed successfully. Final release hygiene covers all changed paths.
  • Evidence: artifacts/ability-controls/wow-bars.png, artifacts/ability-controls/controller-bars.png, artifacts/ability-controls/wow-picker.png, and artifacts/ability-controls/wow-picker-end.png. Cloud upload and physical gamepad input were not exercised by this offline browser pass.

Account-wide boss card collections — 2026-09-14

  • Moved boss card counts and reward receipts out of character profiles into one collection per account owner. Gameplay starts with that account collection; menu and in-game collection screens show the same account totals.
  • Migrates existing character logs by summing their rarity counts, retaining the newest reward receipts, and removing the old character fields. Reloading or downloading an old cloud roster again does not repeat the migration.
  • Cloud uploads now include the account collection, including accounts with an empty roster. Migrated cloud logs upload without waiting for another boss kill. Higher cached counts and newer receipts survive an older cloud download.
  • Automated integration checks verified earning on a second character, switching back, account sign-out isolation, character deletion, and restoration into a separate device cache. Collection markup identifies the account scope.
  • Validation: 164 tests passed across 19 files, with six shelved-mode tests skipped. This persistence change did not alter character models or equipment.
  • TypeScript, prebuild asset audits, and release hygiene passed. The first shared-output bundle check encountered a missing staged asset; an isolated production build and complete bundle check passed with all 5,529 objects. Validation output is under artifacts/boss-cards/account-build.

Main-menu talents and controls — 2026-09-14

  • Added Talents, Keybinds, and Button assignments destinations using the existing editors. RoM characters show their automatically ranked Skills instead of a talent-point editor. Closing a panel or using Back returns to the main menu.
  • A menu-only character subscription initializes the selected character and saves talent ranks and controller ability assignments without mounting the dungeon simulation. Level, experience, inventory, and equipment are preserved. Keyboard bindings and WoW bar assignments retain the existing profile saving behavior; keybind drafts require Save changes.
  • Live offline browser QA at 1280x720 opened all three editors for the level-17 Priest Rolecheck. The talent tree showed eight available points, controls showed the character's skill names, and the assignment picker showed current Smite and future unlock levels. Canceling a keybind edit and using Done returned correctly; Escape first canceled the ability picker and then closed the editor. This browser pass did not change the character's build or saved controls.
  • At a 390x844 viewport, the talent dialog's measured bounds fit the screen, with no horizontal content overflow and a visible main-menu Back button. Browser screenshot scaling was unreliable at this override; visual evidence below covers the default desktop viewport. Physical gamepads and cloud saves were not exercised.
  • Persistence tests cover allocation, reset, assignment, reopening, storage failure, and owner/selection/phase/close isolation. UI and profile regressions passed. TypeScript, production bundling, and complete release-bundle validation passed after retrying a shared-output staging race; release hygiene passed.
  • Evidence: playtest-artifacts/main-menu-editors/main-menu.png, playtest-artifacts/main-menu-editors/talents.png, playtest-artifacts/main-menu-editors/keybinds.png, and playtest-artifacts/main-menu-editors/button-assignments.png.

AYN Thor physical-size UI review — 2026-09-14

  • Browser profiles use the Thor's 6-inch 1920x1080 upper panel and 3.92-inch 1240x1080 lower panel. Panel sizes come from AYN's specifications; resolutions are also documented in the Thor manual. Derived physical rectangles are 132.8x74.7 mm and 75.1x65.4 mm. At a common 160 CSS pixels per inch, browser viewports are 837x471 and 473x412, with independent device scale factors. A 44-pixel control represents about 7 mm on either panel. The combined preview uses these relative physical sizes.
  • Dungeon defaults put party/self health, targets, minimap, and encounter information upstairs. Controller actions, cast bar, buffs/debuffs, experience, and DPS meter appear downstairs. Shared HUD components render once on their assigned panel; the old duplicate tactical party-health panel is replaced.
  • Every HUD element has Top / Bottom / Hidden in the mobile UI editor. Touch dragging from the lower page updates the upper page's authoritative draft. Selection raises the widget above overlapping controls. Save, cancel, reset, rapid reopening, and a full reload/dungeon reentry were verified. Legacy templates without a screen field retain their defaults. Single-screen play keeps visible elements on its primary display.
  • Enlarged text, icons, and touch controls; corrected roster, creator, class hall, downloads, and dungeon/role layouts for the actual panel dimensions. Character creation uses the lower model preview. Editor controls scroll with Save and Cancel kept visible. Buff tooltips and the completion banner use readable text; a lower-screen completion banner wraps its buttons below it.
  • Edge browser QA uses two Android/touch-emulated pages in one isolated offline context. BroadcastChannel carries actual snapshots and touch commands between pages. Covered login, empty/populated roster, both creation steps, main menu, class hall, menu talents/keybinds/button assignments, reports, downloads, dungeon/role selection, gameplay, pause, map, party, boss guide, spellbook, talents, ability controls, inventory, boss cards, options, keybinds, issue reporting, UI editor, defeat/respawn, completion/results, and combined preview.
  • Verified lower action casting changes the upper combat cooldown; party frames can move downstairs, hide, save, reload, and select the player remotely. Buff inspection opens by touch. Results open automatically and can reopen from the banner; finishing through the lower banner returns both pages to the main menu. Completion uses an isolated presentation fixture, rather than a live boss clear. Dungeon captures include equipped fallback bodies; this review does not establish authentic race-model loading.
  • All 42 layout, keybind, HUD-layering, display, snapshot, and dual-screen regressions passed. A complete production build with asset audits and release bundle validation passed; final UI edits also passed production compilation. Browser captures have no unscrollable controls clipped outside their panel and no uncaught UI errors. Physical hardware, Android WebView installation, live online grouping, and shelved game modes were not exercised.
  • Reproduce with node scripts/playtest-thor-ui.cjs while Vite runs at port 5176, or set THOR_TEST_URL. Evidence is in playtest-artifacts/thor-ui/results.json and paired PNGs, including 14-final-defaults, 14d-results, 14e-complete-bottom, and 15-combined-preview.png.

Boss Testing (2026-09-14)

  • Main menu now opens a searchable boss catalog with game and readiness filters, selected-boss fights, and random fights. Selecting a boss installs its missing dungeon content pack and dependencies automatically.
  • Testing uses an empty procedural room with one initial boss. Existing combat, encounter phases, summoned adds, and relevant mechanic objects are retained. Tests grant no experience, loot, or boss cards, and do not persist changes to the character's progression or inventory.
  • Pause and victory review offer Ready, Needs testing, and Not ready labels, boss-specific reports, retry, and return to the main menu. Labels persist through the server, with local pending saves retained while offline.
  • Regression checks passed: 98 focused client tests, 19 server tests, and a complete production build with asset audits and release bundle validation.
  • Production Edge playtest passed selection, active Lady Anacondra mechanics, all three readiness labels, report submission, retry, victory review, persistence, random selection, and a 390-pixel mobile layout without horizontal overflow. Victory uses deterministic damage through the combat store; this is not a natural full-fight clear. Experience and saved character data were unchanged, and no uncaught browser errors occurred.
  • Selecting Taragaman the Hungerer from an uninstalled Ragefire Chasm pack downloaded the pack and dependencies, then loaded the boss model and active mechanics in the test room. A second browser page received the testing room snapshot and opened boss review through the lower-display button. Physical dual-screen hardware was not exercised.
  • Reproduce with node scripts/playtest-boss-testing.cjs; the script starts an isolated production server and test database. Evidence is in playtest-artifacts/boss-testing/results.json and screenshots 01-main-menu.png through 12-bottom-display-review.png.

Boss Testing health correction

  • Testing rooms now use the boss's authored health at the scaled enemy level, without the campaign durability floor or final-boss bonus. A lone testing objective previously made every selected boss qualify as a campaign finale. At character level 1 this produced a 10,987 HP minimum instead of Celebras the Cursed's 575 HP from his level-2 native stats and authored multiplier.
  • Regression checks passed: 24 tests covering testing, campaign boss balance, level scaling, asset preparation, and display snapshots. A full production build passed its asset audits and release bundle validation.
  • Production Edge playtest confirmed a level-1 WoW Priest fighting a level-2 Celebras with 575 maximum health. The boss model and active mechanics were visible, and readiness labels, reports, retries, victory review, random selection, mobile layout, automatic downloads, and lower-display review passed without uncaught errors. Victory still uses deterministic damage; natural time to defeat was not measured.
  • Reproduce in PowerShell with $env:BOSS_TEST_BOSS = 'Celebras the Cursed' followed by node scripts/playtest-boss-testing.cjs. Evidence is in playtest-artifacts/boss-testing-scaling/results.json and paired screenshots.

Regular dungeon health correction

  • Regular dungeon scaling now selects the durability minimum using the character's game. WoW uses an interpolated level curve, RoM uses 1.15 times the expanded-class baseline, and CoA uses 1.75 times that baseline. These independently calibrated floors keep every canonical class-role build above the same 25-second ordinary and 45-second final-boss mechanic windows. Native authored health can still exceed the floor. Final-boss and difficulty bonuses remain part of campaign scaling. Boss Testing continues using scaled authored health without a campaign minimum.
  • On Easy, a level-3 WoW Priest now encounters a level-4 Targorr the Dread with 1,300 HP in regular Stockades, compared with the prior shared 10,766 HP minimum. The WoW final boss has a 2,340 HP minimum at that level; equivalent RoM and CoA parties receive 7,074.8 and 10,766 HP ordinary-boss floors.
  • Level-3 WoW Priest simulations with three companion seeds cleared the opening boss in 25.7-43.6 seconds and the final boss in 48.2-79.6 seconds. These timing samples assume companions are in range and omit boss attacks; a separate level-3 test verifies real boss attacks execute during the shortened fight.
  • Validation passed for all 271 application test files: 1,759 tests passed and six were skipped. The shared balance cohort covers every WoW, RoM, and CoA class-role build at levels 8, 20, 40, and 80 with three deterministic seeds.
  • The earlier production Edge capture recorded the intermediate 1,200 HP WoW floor and is superseded by the final 1,300 HP calibration. The browser script now checks the final value; a new live screenshot has not been recorded.
  • Reproduce with node scripts/playtest-dungeon-health.cjs. Browser evidence is in playtest-artifacts/dungeon-health-scaling/results.json and stockades-level-three.png. Run the scaling tests with BOSS_BALANCE_REPORT=1 to record companion timing samples in artifacts/boss-difficulty/ragefire-balance.json; the all-class report is artifacts/boss-difficulty/wow-rom-coa-balance.json.

Boss spell-effect repair (2026-09-15)

  • The dungeon compiler now reads source DBC effect/aura payloads, durations, radii, summon creature entries, and targets instead of treating unknown boss casts as ordinary damage. The repaired set covers control, damage-plus-control, summons, summon-plus-damage, drains, defensive absorbs/reflection/immunity, armor debuffs, persistent vampirism, and teleport-to-caster movement.
  • The source review removed three controller/helper casts from boss loadouts: Noxxion helper 21708, Gortok stasis-orb awaken 47669, and Drakkari Elemental reset visual 54888. The new audit reports 427 explicit boss-effect casts, 424 cast warnings, 61 ground telegraphs, 427 release/impact cues, 332 aura/control HUD indicators, and no high-confidence semantic issues.
  • The media package supplies original source visuals for 375 effect casts and source audio for 377. The remaining 52 visual and 50 audio cases retain the generated school VFX and new short spatial school cue. Media packaging completed with 5,066 of 5,066 referenced phase assets and no failures.
  • Focused validation passed 60 gameplay/audio/catalog tests and all 20 effect packaging tests. The production build, texture/performance audits, and release-bundle verification passed. The complete application suite passed after refreshing the original-model coverage floor for the expanded package.
  • Production Edge Boss Testing passed with The Black Stalker. The screenshot shows the live boss effect, the Mechanics panel including Summon Player, the party/buff/debuff indicators, and the isolated testing room. Report/retry, readiness, victory, automatic content download, mobile selection, and the lower display also completed with no browser runtime errors; XP and the saved profile remained unchanged.
  • Reproduce the data/media audit with npm run dungeon:boss-effects:audit and the browser pass with BOSS_TEST_BOSS="The Black Stalker" plus BOSS_TEST_ARTIFACT_DIR="playtest-artifacts/boss-spell-effects-black-stalker" before node scripts/playtest-boss-testing.cjs. Evidence is in playtest-artifacts/boss-spell-effects-black-stalker/results.json and 03-empty-room.png. Headless automation verified audio node selection and fallback behavior but did not perform a subjective loudspeaker/listening test.

Boss Testing random follow-up (2026-09-16)

  • The Boss Testing review shown after victory now includes Fight another random boss. It excludes the boss just completed, preserves the active party role, downloads missing content through the existing verified pack flow, and enters the new testing room directly. Review controls remain disabled while the next boss is being prepared.
  • All 15 focused Boss Testing, preparation, review, and display-snapshot tests passed. The production build, asset audits, and release-bundle validation passed.
  • Production Edge defeated Lady Anacondra, displayed the new victory action, selected Varos Cloudstrider, and entered his active testing room without returning to the menu. No browser runtime errors occurred. Evidence is in playtest-artifacts/boss-testing/06-victory-review.png, 06b-another-random-boss.png, and results.json.

Eck the Ferocious visibility and healer pressure (2026-09-16)

  • Eck's Oracle GLB used a bind-pose-derived groundOffset of 11.859, which lifted the animated body out of the gameplay camera while the encounter ring remained visible. The Gundrak adapter now keeps the original model but uses a reviewed zero ground offset and a seven-unit nameplate height.
  • Eck no longer repeats Spring Init and Berserk as 135% damage attacks. The runtime now follows boss_eck.cpp: Bite opens at 5 seconds and repeats every 8–12 seconds, Spit opens in 10–37 seconds and repeats every 8–12 seconds, Spring targets one random party member every 10–24 seconds, and Berserk is a one-time non-damaging aura at 90 seconds. The original spell IDs remain bound so release/impact visual and sound presentation plus mechanic indicators are preserved; Spring also retains a target-circle warning.
  • The reusable npm run dungeon:boss-pressure:audit command compares all WoW bosses at level 80 over 60 seconds and writes the complete ranking plus per-attack contribution to dungeon-pipeline/WOW_BOSS_PRESSURE_REPORT.json and a top-30 summary to the adjacent Markdown report.
  • Production Edge rendered Eck, his nameplate, health bar, mechanic timers, and target marker with no browser errors. Evidence is in playtest-artifacts/eck-final-visual/03-empty-room.png and results.json.

Balance Lab run history and analytics (2026-09-16)

  • Server Balance Lab jobs now write private job.json metadata, restore the newest 100 runs after a restart, import completed pre-history reports, and mark interrupted work failed instead of losing it from the GM screen.
  • The selected completed run now has five in-app graphs for boss-to-party pressure, party-to-boss damage, kill time, class/spec boss damage, and class/spec damage taken. Boss, class/spec, and party tabs retain every row and add source, role, search, metric, and direction filtering plus wipe, defeat, death, healing, absorb, and tuning-outlier context.
  • Seven focused server job tests passed, including restart recovery, legacy import, and interrupted-run behavior; the combined Balance Lab/server set passed nine tests. The 8 GB TypeScript check and production Vite build passed.
  • Production Edge automation submitted a real Eck simulation through the GM UI, opened the generated JSON in the dashboard, exercised all tables and filters, and verified the 480×900 layout with no browser errors. Evidence is under playtest-artifacts/balance-lab/, especially 04-run-analytics.png and 05-mobile-analytics.png.

Balance Lab class/spec ability breakdown (2026-09-16)

  • Each simulated member now exports the full learned, level-appropriate, executable ability list in addition to observed combat events. Suite reports aggregate every class/spec ability with active-run coverage, usage rate, casts, hits, casts/minute, raw/effective damage, DPS, damage share, damage per hit, healing, overheal, absorbs, AI categories, and cooldowns. Learned abilities that produce no events remain visible as available · unused.
  • The GM dashboard adds an Abilities tab with class/spec, source, role, usage-state, free-text, metric, and direction filters; an unused-damage view; a damage-contribution graph; a complete horizontally scrollable table; and a downloadable class_abilities_across_parties.csv artifact.
  • Six Python aggregation tests, nine server tests, the 8 GB TypeScript check, and the production Vite build passed. Production Edge automation completed a real Eck run, verified 11 downloadable suite artifacts, exercised the unused ability filter, and passed desktop plus 480×900 overflow checks with no browser errors. Evidence is in playtest-artifacts/balance-lab/04b-ability-breakdown.png and playtest-artifacts/balance-lab/06-mobile-abilities.png.

Balance Lab server Python preflight (2026-09-16)

  • The production failure was a deployment mismatch: the TrueNAS app used the canonical Node-only startup command even though server Balance Lab jobs need the Python controller. The canonical YAML in both DEPLOYMENT.md and the release-runbook appendix now installs python3, prints its version during startup, sets BALANCE_LAB_PYTHON=python3, and includes the queue limits.
  • A GM-authenticated runtime endpoint now probes the configured executable with --version. The Balance Lab setup shows the resolved Python 3 version, and a missing runtime disables Run on server. POST requests independently repeat the preflight and return a dedicated 503 without creating a failed job.
  • Nine focused Balance Lab service tests plus two server integration tests, the 8 GB TypeScript check, and the production Vite build passed. Production Edge displayed Server runtime ready · Python 3.14.0, submitted a real Eck run, generated all reports, and completed desktop/mobile QA without browser errors. Evidence is in playtest-artifacts/balance-lab/02-server-job-config.png.

Party melee animation cadence (2026-09-16)

  • Party character animation now follows authoritative combat-presentation phases instead of treating every nextActionAt retry timestamp as an attack. Auto-attacks produce one ordinary attack event, while real abilities retain their cast-start, release, and cancel identities.
  • Warrior and Paladin auto-attacks now prefer the normal one-handed/two-handed attack clips before special clips. Special/spinning clips remain available to explicitly matched abilities rather than every weapon swing.
  • The focused combat-animation suite passed 10 tests, all 47 avatar tests passed, and the production build plus texture/performance and release-bundle audits passed. The live level-three Stockades pass completed without browser errors; all five bodies and their equipped weapon/staff silhouettes rendered intact. Evidence is in playtest-artifacts/dungeon-health-scaling/stockades-level-three.png.

Balance Lab healing done and received analytics (2026-09-17)

  • Raw Balance Lab member metrics now attribute effective healing to both the caster and the party target. Party and suite reports expose healing done and received per active second plus absolute totals; self-heals count on both sides of the attribution.
  • The GM overview adds separate Healing done by class/spec and Healing received by class/spec graphs. The class/spec table can display and sort both rates and totals. Older saved reports remain readable but show no target healing until they are rerun.
  • All six Python controller tests and the production build passed. A live one-seed, 15-second Eck the Ferocious run recorded the Holy Paladin's 867 effective healing as 57.8 HPS done and the Blood Death Knight's same 867 as 57.8 HPS received. A matching automatic-suite run verified the new JSON and CSV fields under playtest-artifacts/balance-lab-healing-suite/.

Balance Lab deterministic class/spec coverage (2026-09-17)

  • Automatic sweeps now offer Random parties, All specs, and Specific specs. All-spec mode derives the minimum valid 1-tank/1-healer/3-damage party set that covers every available build. Specific mode guarantees every selected build appears and uses distinct compatible fillers for missing roles; selected builds are not reused as fillers when alternatives exist.
  • A real level-20 WoW all-spec sweep against Eck the Ferocious generated eight distinct parties and placed all 31 catalog builds in suite-report.json with zero missing. The combined catalog audit found 70 CoA builds requiring 16 coverage parties and 16 RoM builds requiring four; every source exposes enough tank, healer, and damage builds for valid coverage parties.
  • Eight Python controller tests, nine Balance Lab service tests, two server integration tests, and the production build passed. Production Edge automation verified the All Specs estimate, selected Paladin Holy through the Specific Specs picker, completed the server job, rendered all seven overview graphs, and passed desktop plus 480×900 overflow checks without browser errors. Evidence is in playtest-artifacts/balance-lab/02-server-job-config.png and playtest-artifacts/balance-lab/03-server-job-complete.png.

Balance Lab class/spec ability damage drill-down (2026-09-17)

  • Every class/spec row now exposes View ability damage when ability telemetry exists. It opens the Abilities tab on that exact source/build, clears conflicting search and role filters, and defaults to abilities with positive effective damage sorted highest first.
  • The drill-down graph and table retain ability name/ID, casts, casts per minute, hits, effective/raw damage, damage share, DPS, and damage per hit. Healing, overheal, absorbs, usage, and unused-ability filters remain available.
  • The production build passed. A real five-second level-20 WoW run against Eck the Ferocious opened a Death Knight Unholy row through the new action and verified positive effective ability damage plus the expected cast, damage share, and DPS columns. Desktop and 480×900 checks passed with no browser errors. Evidence is in playtest-artifacts/balance-lab/04b-ability-breakdown.png and playtest-artifacts/balance-lab/06-mobile-abilities.png.

WoW full-spec mechanics and rotation pass (2026-09-18)

  • playerbots-inspired-v3 now gives every one of the 31 Wrath specs a legal, level-scaled talent plan and executable profile. The pass repaired stale talent prerequisites, companion Rage/Runic Power persistence, short melee reach, warrior rage banking, and explicit profile ordering.
  • Scripted payloads now make Bloodthirst, Bloodrage, Execute, Mutilate, Killing Spree, Penance, Feral Spirit, Conflagrate, and Earth Shield mechanically meaningful. Frost/Unholy disease setup, Arms Rend/Mortal Strike order, Arcane Barrage, and healer maintenance behavior have direct regression coverage.
  • The exhaustive level-80 headless audit completed 2,672 fights with no simulation failures under artifacts/balance-fixes-20260918-level80/. The final 40-run Stockades confirmation under artifacts/balance-fixes-20260918-stockade-level80-final/ exercised all 31 specs: Feral Spirit, Bloodrage, and Earth Shield were active in every eligible run, while the repaired damage signatures produced damage in their applicable runs. Low-level boss floors were recalibrated so ordinary/final Stockades encounters still retain their 25/45-second mechanic windows. These are structured combat checks, so no scene screenshot is applicable. Remaining cross-spec DPS/HPS outliers require a separate coefficient-tuning pass.

Balance Lab level batches and parallel workers (2026-09-19)

  • The GM setup now switches between one level and all level brackets. The three schedules expose 9 jobs (level 1 plus every 10), 17 jobs (level 1 plus every 5), or 80 jobs (every level). Every-boss, source-specific boss, and explicit boss selection remain available, and the estimate totals all scheduled jobs.
  • A browser-driven nine-level exploratory submission created nine persisted jobs in one request, started four independent Python/TypeScript processes, and completed the first four level reports before the automation time limit; the test server then stopped the remaining isolated test jobs. Server tests separately prove parallel worker utilization, queued overflow, and all-or- nothing rejection when a complete batch will not fit.
  • The final production-build smoke pass verified the 9/17/80 schedule controls, worker/queue status, specific Paladin Holy and Eck selection, one complete real level-20 report, all report/ability analytics, and 480x900 layout with no browser errors. Evidence is in playtest-artifacts/balance-lab/02-level-batch-config.png, playtest-artifacts/balance-lab/04-server-job-complete.png, and playtest-artifacts/balance-lab/06-mobile-analytics.png.

Balance Lab parallel watcher isolation (2026-09-19)

  • A production all-WoW, every-10-level Stockades batch completed only the level 1 and level 80 jobs. Levels 10 through 70 failed during startup before a party ran. Every failed job recorded ENOSPC: System limit for number of file watchers reached beneath Vite's watcher stack, while the Balance Lab runtime reported zero active jobs and normal queue capacity after the failures.
  • Each parallel Python worker had launched its own vite-node process. The inherited Vite development configuration watched the large shipped public asset tree, so ten simultaneous jobs exhausted the container's Linux watcher allowance. Which two levels completed was a startup resource race, not a class, level, boss, or combat-model failure.
  • The headless bridge now launches with --mode balance-lab. That Vite mode sets publicDir: false and ignores every watch path, eliminating hot-reload watchers that one-shot simulations do not use. Server job failures also translate the known watcher-limit signature into a specific GM-facing error.
  • The Python controller tests, all 14 Balance Lab service tests, the complete 84-test server suite, and the 62-test benchmark/party suite passed. A resolved Vite configuration check returned an empty public directory and watch.ignored: ["**/*"]; a real level-10 WoW catalog invocation completed through the new mode and wrote its 72,723-byte catalog. The production build passed, and the authenticated GM smoke flow completed a real server job, loaded its analytics and ability breakdown, and passed desktop/mobile checks.

Default Git and TrueNAS release path (2026-09-19)

  • The visual release manager now starts with Git + TrueNAS only enabled. This mode retains the candidate check, content/server/application tests, content publication, production build, staged-file review, commit, remote-main verification, and pinned TrueNAS deployment commands.
  • The default path does not bump package or Android versions, request signing credentials, run Android sync, build an APK, or publish a Gitea release. Clearing the toggle restores the existing full APK workflow; Publish Current APK Only remains available for retrying publication from an already versioned and pushed commit.
  • Run test suites is independently enabled by default. Clearing it skips only the content, server, normal-application, and shelved-application test commands. The candidate check, content publication, production build, staged review, Git verification, and selected deployment/APK stages remain. Both the log and final staged review identify the skipped suites.
  • All 12 release-manager unit tests and Python compilation passed. The real Windows Tk smoke launch also initialized the default-on mode and closed cleanly.

Thor character shell redesign (2026-09-20)

  • The 960 x 540 top-display roster now keeps its character stage on the left, a 300-pixel saved-character rail on the right, and the primary Continue action inside a 62-pixel bottom bar. Both creator steps retain the shared live model preview and fit without document overflow.
  • All 47 avatar/rendering tests and the full production build passed. Browser automation created a Human Priest, exercised both creator steps, and verified the roster geometry without page errors. Evidence is in playtest-artifacts/character-shell/01-creator-path.png, playtest-artifacts/character-shell/02-creator-appearance.png, and playtest-artifacts/character-shell/03-character-select.png.
  • A production Wailing Caverns smoke run rendered the player and all four party members with intact bodies and starter weapon silhouettes. Evidence is in playtest-artifacts/character-shell/04-in-dungeon.png.

Thor main-menu redesign (2026-09-20)

  • The 960 x 540 top display now gives the destination grid the wide left pane and uses a 288-pixel right rail for the selected character's level, name, class, and specialization. The character-model preview no longer mounts on this screen; authenticated sessions open the online-group invite panel below the identity card.
  • A live browser pass measured a full 960 x 540 surface with no horizontal or document overflow. The destination pane scrolls independently, the identity card remains fully visible, no character-preview node mounts, and all removed introductory copy is absent. Nineteen focused tests and the production build passed.
  • The destinations are now split into a dedicated Adventures card for Dungeons and Randomized Bite-Sized plus a secondary Character & Collection card. Boss testing, companion readiness, reports, and the authorized GM/server tools now live behind one controller-navigable GM Menu dialog; unauthorized accounts see GM Tools and Balance Lab as locked rather than losing the menu structure.

Discipline Priest Holy Nova (2026-09-22)

  • A level-80 Priest cast Holy Nova in a built Wailing Caverns scene. The live cast restored 770 health to the injured player. At 400 ms, one Nova burst was visible; by 850 ms, it had ended. Screenshots are in playtest-artifacts/holy-nova/holy-nova-100ms.png, playtest-artifacts/holy-nova/holy-nova-400ms.png, and playtest-artifacts/holy-nova/holy-nova-850ms.png.
  • The nearby-enemy damage and nearby-ally healing paths passed the focused combat-store test. The four focused suites, Ready-five certification, TypeScript build, production build, and release candidate check passed.

RoM primary five validation (2026-09-22)

  • A fresh local account created a Human RoM Rogue. Character creation showed level-based skill unlocks. The roster preview rendered the complete character body with a starter weapon silhouette after the 3D canvas loaded.
  • The same Rogue entered a live Wailing Caverns scene as DPS. The player and companions rendered bodies and equipped weapon or staff silhouettes; the browser reported no page errors. The left-hand Rogue dagger is not clear in these camera angles, so this is a body/equipment-presence check rather than visual proof of dual daggers. The resolved virtual loadout test checks both dagger slots.
  • Evidence: artifacts/playtest/rom-five/roster-preview.png and artifacts/playtest/rom-five/dungeon-rogue.png. The in-dungeon Skills and Spellbook panels also showed level unlocks without numbered skill ranks; evidence is skills-no-ranks.png and spellbook-no-ranks.png in that same directory. The repeatable flow is node scripts/playtest-rom-five.cjs.
  • At 1440 x 900 the dual-display "Roster details" toggle overlays the roster Continue button. The playtest used a programmatic click to continue; this existing layout collision should be addressed in the shell UI.

Named RoM class pairs (2026-09-23)

  • A fresh local account created a male RoM Dwarf Mage. Its live creation and roster previews rendered the complete body and starter staff silhouette. Evidence: artifacts/playtest/rom-five/dwarf-mage-creator.png and artifacts/playtest/rom-five/dwarf-mage-roster.png.
  • The same session entered Wailing Caverns with a RoM Rogue. The party frames showed paired-cohort NPC names Serenna, Caelan, and Veyra for that seed; the player and companions rendered bodies and weapon or staff silhouettes in the scene. The browser reported no page errors. Evidence: artifacts/playtest/rom-five/dungeon-rogue.png. The companion pair and race assignments, including Durnik as a dwarf, are covered by src/game/romFiveValidation.test.ts; this level-1 scene does not exercise the level-10 secondary-class unlock or elite-skill mechanics.

RoM leveling loot and package catalog (2026-09-23)

  • Rebuilt the client and reran node scripts/playtest-rom-five.cjs after the leveling boss-loot rule and source package catalog changes. The live Rogue roster preview showed the complete body and starter blade silhouette; the in-dungeon scene showed the player and companion bodies with weapon, shield, and staff silhouettes. No browser page errors occurred. Evidence: artifacts/playtest/rom-five/roster-preview.png and artifacts/playtest/rom-five/dungeon-rogue.png.
  • This level-1 scene checks rendering. Focused boss-card, SQL loot, RuneWaker loot, and RoM class tests check that leveling boss item drops are empty, cards remain granted, and secondary stat growth uses the primary level. Source package contents are cataloged as unverified and were not granted.

RoM heirloom reference atlas (2026-09-23)

  • Rebuilt the client and reran node scripts/playtest-rom-five.cjs after adding the source-backed 1–79 native-stat references. The live Rogue roster showed its body and starter blade; the Dwarf Mage roster showed its body and staff. Wailing Caverns showed the Rogue player and companion bodies with equipped blade, shield, and staff silhouettes. No browser page errors occurred. Evidence: artifacts/playtest/rom-five/roster-preview.png, dwarf-mage-roster.png, and dungeon-rogue.png in the same directory.
  • These references are not equipped by the runtime, so this level-1 visual check confirms the existing character path still renders. The reference suite verifies the five class curves and source IDs at every level 1–79.

Five-class RoM hybrid equipment (2026-09-23)

  • Rebuilt and reran node scripts/playtest-rom-five.cjs after changing the five active heirloom layouts to legal RoM weapon combinations with WoW combat stats. The Rogue and Dwarf Mage roster previews showed complete bodies and starter blade/staff silhouettes. Wailing Caverns showed the player and companion bodies with visible blade, mace, shield, and staff silhouettes; there were no browser page errors. Evidence: artifacts/playtest/rom-five/ roster-preview.png, dwarf-mage-roster.png, and dungeon-rogue.png.
  • At level 1, the screenshot does not confirm each member's full inventory or the level-10 secondary unlock. src/game/romFiveValidation.test.ts checks every hybrid weapon slot for legality and stat growth at levels 1, 20, 40, 60, and 79. Targeted Shadoj reports at levels 20, 60, and 79 are under artifacts/balance-lab/rom-hybrid-l*-shadoj/; they exposed low Mage damage and a level-79 Priest death in each seed, so balance remains Needs Testing.

RoM independent weapon slots (2026-09-23)

  • Rebuilt and ran node scripts/playtest-rom-five.cjs after adding the trained off-hand and ranged heirlooms. The Rogue roster preview and Wailing Caverns scene showed a complete character body and starter blade; companion bodies, shields, and weapons remained visible. The Dwarf Mage roster still showed its body and two-hand staff. The playtest reported no browser page errors. Evidence: artifacts/playtest/rom-five/roster-preview.png, dungeon-rogue.png, and dwarf-mage-roster.png in the same directory.
  • These level-1 screenshots do not show the later training unlocks. Focused equipment tests verify the Knight/Scout bow at level 10, Rogue projectile at level 12, and Scout/Rogue and Rogue off-hand weapons at level 16.

RuneWaker sprite particle pilot (2026-09-24)

  • Opened scripts/combat-effects/rom-preview.html in the in-app browser against Vite and inspected frozen 250 ms frames after regenerating the archive. Knight Charge showed a blue upward spray with orange sparks (3 layers), Whirlwind Shield showed a small gold circular impact (3 layers), and Mage Electric Bolt showed a blue-white projectile with streaks (3 layers). Browser console had no errors or warnings. The preview tab is retained for inspection.
  • These screenshots verify the sprite renderer and packaged textures at the preview camera scale. A level-18 Knight and level-10 Mage were then run in Wailing Caverns with Original visuals on using disposable local QA saves. Whirlwind Shield's impact graph loaded at the caster position, but its 33 ms emission burst could disappear when a frame skipped past the last rate key. Integrating the source rate over each frame restored the burst. A 2.5 presentation scale made the gold shield ring visible around the Knight at the dungeon camera distance during an isolated cast. Electric Bolt cast and resolved in combat with no missing-original warning, though the fast projectile was not visually captured in a still frame. Charge remains to be checked in live movement. The next visual decoder target is the Priest's holy act_casting_c_hand.ros: its only unsupported controller is CRuController_EventTrigger, which the source uses for action callbacks.

RuneWaker Priest holy cast (2026-09-24)

  • The native exporter now records the EventTrigger payload. Source event 43 in holy act_casting_c_hand.ros requests looping 3D playback of sound/fx/skill/holy/act_casting_c_hand.wav; it adds no visual layer. The particle archive validates this exact event and marks the partial graph renderer-ready. The shared combat manifest attaches its three sprite layers and looped cast sound to Priest Urgent Heal, Heal, and Group Heal only.
  • The in-app browser preview rendered the holy model as a gold star and swirling particles with three loaded textures. In a disposable level-14 Priest save in Wailing Caverns, Urgent Heal (2), Heal (6), and Group Heal (Shift+6) each showed the gold cast effect on the isolated player during the cast. Group Heal's longer cast kept the effect visible across successive frames. The browser reported no original-effect load errors; its only warning was an unrelated dependency deprecation warning. Audio loop and release/cancel behavior passed focused unit tests, but the browser pass did not assess sound by listening. The generated map is docs/ROM_SPELL_MEDIA_MAPPING.md.

RoM Priest target and Rising Tide media (2026-09-24)

  • Traced Urgent Heal's MagicObject component 501543 to ImageObject 573048 and its target act_benedictory_heal_t_down.ros. Its explode motion requests a one-shot 3D act_benedictory_heal_t_down.mp3 at the healed target. The browser graph renders two original sprite layers, the emitted 72-triangle rune cylinder, and the animated gold ground decal with source color and alpha tracks. It remains marked partial because the decal is placed on a level ground plane rather than projected onto nearby terrain triangles.
  • Traced Rising Tide's component 620408 to ImageObject 572062 and target act_riptide_t_freeze_hit.ros. Its five-sprite target graph and the act_icecone01_c_hand.ros cast and act_icecone01_f.ros projectile graphs are attached to their respective phases. ROS direct-audio events identify act_icecone01_f.ros.mp3 on projectile release and act_riptide_t_freeze_hit.mp3 on target impact. Impact audio is positioned at the target; release audio remains at the caster.
  • The focused combat audio suite passed 12 tests, including distinct release and target panning. The manifest test checked all three new MP3 paths against the source ROS EventTrigger ID 43 payloads and packaged files.
  • In the in-app RuneWaker preview, Urgent Heal's impact showed gold stars, a green rune cylinder, and a gold target-ground ring at the frozen 250 ms frame. Rising Tide's cast showed a blue ring, its release a bright blue flash, and its target impact a blue and magenta burst. All four graphs loaded without browser errors or warnings. Audio mapping was source and test verified; this browser pass did not assess the sound by listening.
  • Live Priest combat in Wailing Caverns confirmed Urgent Heal's original gold rune circle and sparkles around the selected party target Veyra. In Boss Testing against Verdan the Everliving, Rising Tide showed blue source particles around the Priest during the cast, a blue projectile on release, and a bright blue and magenta burst across Verdan's visible lower body at arrival. The impact presentation now follows the projectile's 180–550 ms travel time; large-target attachment uses visual bounds so the burst remains in view. The browser reported no original-media or WebGL errors. Audio timing and target panning are source and test verified, not listening tested.

RoM primary-five media batch preview (2026-09-24)

  • The batch now follows direct MagicCollect component ImageObjects to their target ExtendACT models, packages 170 unique ROS graphs and source textures, and attaches 74 renderer-ready graphs plus Urgent Heal's partial target graph. The generated class audit counts 84 castable skills with at least one playable original phase. Source audio is packaged for 125 of 129 cohort spell entries.
  • In the in-app RuneWaker preview, frozen at 250 ms, Priest Ice Fog showed a bright ice spray, Knight Holy Seal a blue sigil, Scout Snipe an orange target ring, Rogue Sneak Attack a blue arc, and Mage Electric Explosion a layered blue burst. All five graphs loaded and rendered; each status showed two or three source sprite layers with matching textures.
  • The first exporter pass falsely marked seven graphs ready despite emitter geometry or sprite billboard modes the WebGL renderer rejects. The packager now blocks those modes, and the parser test loads every ready graph. This preview pass did not assess sound by listening or cast the five spells in live combat; those are still needed to confirm placement and phase timing.
  • A shared source alpha track rule then enabled four additional graphs whose alpha anchor covers every sprite layer in the motion. The Mage Fireball cast graph rendered a bright red and gold burst in the preview at 250 ms.
  • RuneWaker audio phases now play all distinct packaged source cues together; the previous weighted selector could drop one of several cast or impact layers. A focused audio test confirms two impact files create two voices. Listening QA is still needed for the balance of these layers.

RoM Priest channel and stacked status icons (2026-09-25)

  • In a disposable level-30 Priest/Knight Wailing Caverns run, scripts/playtest-rom-status-effects.cjs cast Chain of Light at a nearby Deviate Ravager. The cast bar showed Channeling and the rendered scene showed a sustained white-gold beam between the Priest and target. The browser reported no page errors. Evidence: artifacts/playtest/rom-status-effects/chain-of-light-and-stacked-dot.png.
  • Three same-spell damage-over-time applications on that target appeared as one icon with a small 3; the browser assertion also checked the icon count. This exercise checked HUD grouping, while focused combat tests checked four separate channel damage pulses. Source audio was not assessed by listening.

Raksha Temple collision performance (2026-09-26)

  • A production-build offline playtest in headless Edge measured about 0.6 FPS after Raksha Temple loaded. A CPU profile placed nearly all frame time in Rapier character movement and physics. Its collision GLBs use interleaved position buffers; passing the packed float array as XYZ vertices created malformed trimeshes.
  • After unpacking positions, the same 15-second sample recorded 600 frames at 16.67 ms average frame time (60 FPS). The entrance's WDB collision lacks a walkable floor, so Raksha now uses its navigation mesh as physical ground. The final browser pass retained 60 FPS, showed the party at 5/5 instead of ROUTE BLOCKED, and kept the player at the entrance. An eight-second forward movement sample explored 2 m and still held 60 FPS. Screenshots: playtest-artifacts/raksha-final-ground.png and playtest-artifacts/raksha-moved.png. The scene remains very dark; this pass verified frame rate and floor support, not lighting quality.

Scholomance rendering and population performance (2026-09-26)

  • In a production-build offline run in headless Edge, Scholomance's entrance averaged 31.78 ms per frame (about 31 FPS) over 15 seconds. A CPU profile was dominated by Three.js render traversal and matrix updates, while the visual asset audit counted 5,140 raw draw calls and 3,175 mesh nodes. WebGL instrumentation saw about 867 draw calls per rendered frame before the visual batching change.
  • Scholomance had 191 static mob spawns within its former 95 m activation radius at the entrance, across stacked indoor floors. Its 48 m radius and global opaque instancing reduced the 15-second average to about 20.1 ms per frame (about 50 FPS). Holding forward for 12 seconds explored 30 m; the subsequent sample remained near 20.1 ms per frame with the party at 5/5. Entrance and movement screenshots showed intact geometry and no page errors: playtest-artifacts/scholomance-after.png and playtest-artifacts/scholomance-moved.png.

Bite-Sized Dungeon Race (2026-09-26)

  • scripts/playtest-dungeon-race.cjs used headless Edge with a fresh offline character. Practice entered a Bite-Sized dungeon with five player-party seats, displayed the top clock and NPC progress, and kept the game scene active after a forced NPC win showed the “You lose” toast. The NPC roster contained five members. Desktop and 960×540 Thor-size captures are in playtest-artifacts/dungeon-race/.
  • scripts/playtest-dungeon-race-online.cjs created two online accounts in separate browser contexts. Both entered the same human match, dungeon, and seed with each other as opponents. A third account queued alone and received a five-member NPC team after the five-second fallback. Both scripts reported no browser page errors.
  • The practice screenshot check used a time jump to trigger the loss toast, then injected a defeated boss-card fixture into the active combat store. The normal automatic loot action added one Bazil Thredd card after the loss and showed its reward window (05-card-after-loss-fixture.png). It did not traverse and defeat the final boss through live combat. Server tests verify that a losing clear is accepted for the dungeon time board.

Dungeon Race exit regression (2026-09-26)

  • src/app/dungeonRaceStore.test.ts covers immediate cleanup of active and practice races, cancellation during an in-flight queue request, ordered server leave before requeue, and an old preparation response after start.
  • scripts/playtest-dungeon-race-exit.cjs used headless Edge with a fresh online account. It left an NPC race through the pause menu, entered an ordinary Bite-Sized dungeon without a race HUD, and requeued into a new online match without an “already in a race” error. Screenshots are in playtest-artifacts/dungeon-race-exit/. The offline practice playtest also left after a modeled loss, confirmed the local race state cleared, and started practice again. Browser page errors were absent in both passes.

Bite-Sized spawn floor regression (2026-09-26)

  • Fresh offline Dungeon Race practice entries in Wailing Caverns and Utgarde Pinnacle previously settled about 0.5 m below the visible floor. During the race start gate, Rapier physics was paused while PlayerRig accumulated downward movement. Holding the player controller for that gate removed the stored fall. Wailing keeps its original entrance; Utgarde now starts on the connected Skadi wave corridor with three source first-wave guards.
  • scripts/playtest-bite-sized-spawns.cjs entered both dungeons through the menu, waited for content, intro, and race gate completion, then sampled five seconds of play. Wailing was grounded at y=-31.016 from a -30.92 spawn; Utgarde was grounded at y=104.812 from a 104.8 spawn. Both kept their entry X/Z position, and there were no browser page errors. Before/after screenshots and result.json are in playtest-artifacts/bite-sized-spawns/. The player stands visibly on the floor in both after screenshots. Utgarde corridor samples at z=370, 390, 410, 430, 445, and 460 also stood on collision in the live client; the source guard points and boss position have collision and navigation surfaces.

Paused browser memory (2026-09-26)

  • A fresh offline Wailing Caverns Bite-Sized run in headless Edge entered the dungeon, opened the pause menu, and held it for 60 seconds. The paused scene used R3F's demand frame loop and reported no browser page errors. Before the classic talent lookup change, forced-GC JavaScript heap remained at 266 MiB across 0, 15, 30, and 60 seconds; DOM node count also stayed flat.
  • src/game/wow335AbilityCatalog.ts now validates classic talent IDs through the already loaded compact runtime talent catalog. The built classic ability chunk fell from 41.4 MiB to 2.1 MiB, because it no longer includes the 36.6 MiB CoA source catalog. The same paused browser run measured 155, 155, 155, and 156 MiB after forced GC at 0, 15, 30, and 60 seconds. The paired screenshots and samples are in playtest-artifacts/pause-memory/.
  • The one-minute sample did not show a growing JavaScript heap. It does not measure GPU allocations or rule out growth in a different dungeon or over a longer idle period.

Character-specific catalog loading (2026-09-26)

  • The production build now imports src/game/romBaseStatGrowth.generated.json (4.5 KB) for shared stat calculations. The full 1.7 MB romPlayerCatalog.generated.json remains in the RoM ability chunk and is requested only when a RoM class needs its abilities.
  • src/game/talentRuntimeCatalog.ts loads its generated WoW/CoA talent data after a non-RoM class requests combat catalogs. A fresh RoM Rogue main-menu session fetched romAbilityCatalog-*.js without fetching either the wow335AbilityCatalog-*.js or the talent-data chunk. A fresh WoW Priest fetched the classic ability and talent-data chunks without fetching the RoM ability chunk. Both sessions had no browser page errors.
  • The RoM Rogue roster and Wailing Caverns dungeon smoke test passed with the WoW/CoA talent data absent from the initial RoM page load. Browser request results and menu screenshots are in playtest-artifacts/catalog-loading/; dungeon screenshots are in artifacts/playtest/rom-five/.

Browser memory reset at shell boundaries (2026-09-26)

  • Browser ES modules cannot be unloaded individually from an active page. Changing to a different character now reloads the page with a one-use sessionStorage handoff to restore the selected character and destination. Leaving a gameplay mode for the roster or main menu also reloads after the run's normal save path. A live online group activity suppresses this reset to avoid re-entering the same activity on reconnect.
  • The main-menu catalog gate no longer reloads the full gameplay runtime or retains talent art up front; it preloads those resources when gameplay starts.
  • In a production Edge playtest, switching from a WoW Priest to a RoM Rogue produced one reload and returned to the RoM main menu. The WoW talent editor opened on demand before that switch. The new RoM page loaded romAbilityCatalog-*.js without a WoW ability or GameRuntime chunk. Leaving a RoM Wailing Caverns run produced a second reload and returned to the same character's main menu without a GameRuntime chunk. Switching to another RoM character also reloaded. The one-use handoffs were consumed, and the page reported no errors. Results and screenshots are in playtest-artifacts/memory-reset/.

Hunter pet family selection (2026-10-02)

  • scripts/playtest-hunter-families.cjs ran against the freshly built dist bundle in headless Edge. It used an ephemeral localhost server, an isolated Playwright context, and disposable OS-temp account data. The UI created two Marksmanship Hunters; the QA fixture then advanced their temporary profiles to level 10 with shellStore.saveActiveProgression so level-10 Call Pet and Revive Pet are eligible. This fixture does not claim normal gameplay earned those levels.
  • At Wailing Caverns entry, the actual engaged entrance pack left the rendered family selector disabled at Wolf. The pack ended through ordinary simulation; with no engaged mobs, the UI changed Shellguard to Turtle. The runtime showed Turtle's sourced Shell Shield spell ID 26064 and no Wolf Furious Howl. After page reload, Shellguard remained Turtle and the independently UI-created Wolfguard remained Wolf. Unit/integration tests cover selection persistence and family mechanics; this is a manual UI diagnostic, not Hunter balance certification or Ready-party certification.
  • The 390×844 HUD reported no horizontal overflow. The family card sat 37 px below the party stack, remained in the viewport, and did not overlap the top-right HUD. Desktop and narrow screenshots show the live Wailing Caverns WebGL scene and are in playtest-artifacts/hunter-families/: 01-wailing-entry-combat-locked-desktop.png, 02-wailing-entry-combat-locked-narrow.png, 03-turtle-family-desktop.png, and 04-turtle-family-narrow.png. The current results.json records the measured HUD bounds. Earlier harness and layout captures are explicitly named as excluded diagnostics and are not final visual evidence.
  • The browser reported no page errors or HTTP errors. Its only console error was the local server's missing /favicon.ico (404). Call Pet and Revive Pet were not activated in the UI: Escape reached the focused scene but did not open the pause menu on this route. No spell activation was injected. The current renderer has no Turtle-specific model path, so these captures verify family card/runtime identity and HUD placement, not unique Turtle creature art.

Hunter Cat family and pet controls (2026-10-02)

  • scripts/playtest-hunter-cat.cjs ran against the fresh production bundle in headless Edge with an ephemeral localhost server, isolated Playwright context, and disposable OS-temp account data. The UI created Catguard and Wolfguard as Marksmanship Hunters; the isolated QA fixture advanced both to level 10 through shellStore.saveActiveProgression for eligibility. That is test setup, not earned progression.
  • After the Wailing Caverns intro was shown and detached, the real entrance group left the Wolf selector disabled with three live enemies. The group ended naturally; after all enemies cleared, the Catguard selector enabled. Cat was chosen through the visible selector. Reload preserved Catguard's Cat family, while the separate Wolfguard profile remained Wolf.
  • The player-owned runtime pet used generic ID __player__:summon-1. Its level-10 profile exposed Claw 16828 rank 2, Rake 59881 rank 1, and Prowl 24450 rank 1, without Bite, Furious Howl, or Shell Shield. This confirms the profile's available ranks, not live Rake or Prowl casts. Call Pet was reached through Escape → Pause → Spellbook and activated from the rendered Spellbook; the existing Cat remained active. Revive Pet was not attempted because no natural pet death occurred.
  • The visible Stay/Follow buttons, reaction selector, family selector, and Growl auto checkbox all received pointer input and updated the runtime; the tests restored Follow, Defensive, and Growl auto off. Attack was disabled without a selected target. This pass found and fixed a pointer-layer bug: the HUD disabled pointer events, and summon cards did not restore them. The .summon-frame now accepts pointer events; the surrounding playfield remains click-through.
  • The loaded Three.js scene and Cat family card were captured at desktop and 390×844. Narrow layout had no horizontal overflow, the selector remained visible, the card cleared party frames by 37 px, and it did not overlap the top-right HUD. The renderer has no family-specific Cat model, so images show the Cat card/profile identity rather than unique Cat creature art. Final screenshots and measurements are in playtest-artifacts/hunter-cat/ and results.json.
  • The browser reported no page errors or failed HTTP requests. Its only console error was the local server's missing /favicon.ico (404). This is a focused UI diagnostic, not Hunter balance or Ready-party certification.

2026-10-03 — CoA August catalog promotion

  • Local browser check at http://127.0.0.1:5174/ entered the offline roster, created Coaaudit (Human Witch Hunter, Houndmaster), and opened Talents from the main menu. Existing roster characters were preserved.
  • The five populated tabs are Class, Boltslinger, Houndmaster, Black Knight, and Inquisition. Selecting Houndmaster and the new Houndmaster's Whistle node displays its icon, full description, rank, and Houndmaster prerequisite. The level-1 character has no essence; the editor correctly prevents learning the gated node while allowing inspection.
  • The desktop screenshot shows the tree and readable details panel without overlap: playtest-artifacts/coa-catalog-promotion/houndmaster-whistle.jpg. Captured warning/error logs were empty.
  • The optional local API server was not running; development proxy requests for shared policy/layout endpoints failed and the offline UI used its defaults. This pass does not validate online roster or server policy synchronization.
  • This is a representative catalog/UI smoke check. It does not exercise an unlocked Shadowhound, the other CoA classes' combat mechanics, or balance. All CoA specializations remain Needs Testing.

2026-10-03 — Native RoM five combat pass

  • Added native source amount dispatch for direct Priest healing and supported direct attacks, including separate periodic HolyHeal snapshots. Player/NPC Heal, Urgent Heal, Regenerate, target absorption, aura-adjusted Wisdom/MDMG/HealPower, and WoW fallback regressions pass. Native training weapon amounts/speeds feed physical auto attacks; existing semantic haste and race-affix timing remain common simulator stages.
  • The targeted full-player/four-NPC diagnostic covers the exact five identities at levels 1/10/30/60/65/66/79/80 against Barren Caves trash and Anglo. All 80 pulls clear with zero deaths or invalid casts. Native-mode health budgets produce trash kills in 4.5–9 seconds and Anglo kills in 39–53.4 seconds. Static placement omits navigation and encounter scripts; this is not balance certification. The legacy WoW-stat RoM curve and enemy damage are preserved.
  • The focused 15-file validation passed 210 tests before the extra Reflected Shot consumer-fallback regression; that regression and the five-build amount parity test both pass. Ready-five validation passed 7 Vitest and 20 Python checks; all 47 avatar/equipment checks passed. The final full build, asset audits, compression, and release-bundle verification passed.
  • The final native damage selection passed 13 tests: seven source-helper, two amount/parity/fallback, and four actual combat-event integration checks. Player Knight main-hand, NPC Scout ranged, NPC Rogue off-hand, and player Scout Shot use their verified source channels; the auto-event checks also verify semantic haste timing. The final project TypeScript check passed.
  • The final production browser smoke used index-D_h9IRuA.js and combatStore-BiA9BOQG.js, isolated server/account data, and desktop plus 390x844 viewports. Native player and actual party-owner stats, automatic training labels, legacy save migration, build/gear/checkpoint preservation, combat/activity switching guards, and switching back to WoW stats passed. Ordinary live generated RoM companions all belonged to the active five. The first browser attempt exposed a QA-only hardcoded Durnik selection assumption; the script now inspects an actual native party member and the final run passes.
  • Visually reviewed playtest-artifacts/stat-rulesets/01-roster-native-rom.png, 04-native-dungeon-gameplay-overlays-closed.png, 05-native-npc-stats-attributes-desktop.png, and 07-native-stats-attributes-mobile.png. Roster and dungeon bodies remain visible with starter staff, shield, and sword silhouettes; baseline RoM clothing/underwear appearance remains unchanged. Native player/NPC attributes and training labels are readable, and the narrow panel scrolls inside the viewport. Results and 11 representative screenshots are in playtest-artifacts/stat-rulesets/results.json.
  • No browser page errors, server errors, or failed HTTP requests were recorded. The only console error was the existing optional favicon 404. The separate combatRotation.test.ts has 30/31 passing assertions; the existing unsupported-only Combat Rogue Killing Spree signature assertion remains outside this RoM pass.
  • At this earlier checkpoint, source target share/ordinal falloff, throw/prior-hit/shield-category damage inputs, unverified custom weapon profiles, and native defense/hit/critical channels still had explicit simulator boundaries. The follow-up below resolves the supported Throw, shield, multi-target, defense, hit, and critical paths; prior-hit inputs and unsupported/custom gear remain explicit boundaries. Reflected Shot stays on the common amount fallback until actual target enumeration reaches the native adapter. Public add-on/CoA research informed clean-room rotation priorities; a Cloudflare challenge blocked the KittyCombo archive download, so no add-on code or preset was imported.
  • Level cap remains 80. No loot wiring, deployment, commits, or readiness promotion. See docs/ROM_NATIVE_COMBAT_PASS_2026-10-03.md for formulas and remaining source boundaries.

2026-10-03 — Native enemy equipment, manual packets and pressure

  • The equipment/formula/encounter follow-up is documented in docs/ROM_NATIVE_ENEMY_ENCOUNTER_PASS_2026-10-03.md. Native source equipment supports 398/440 imported NPC snapshots under default deterministic selection; 42 unsupported snapshots retain declared fallback. Exact bound fixed/MaxHP enemy packets now use source absorption and target ordering without generic DEF/resistance/crit. Unbound Throw/post-table absorption remains unsupported. No loot is wired and cap 80 remains.
  • The new native shared-damage budget interpolates 1:1, 10:1, 30:3, 60:10, 65:12, 66:20, 79/80:40. Exact manual source packets bypass this curve. Native health anchors, compatibility scaling and difficulty sliders remain intact. Live mob registration supplies the budget and passes repeat-registration/mode-switch regressions.
  • Six headless encounter/pressure checks cover actual Anglo Trample/Bash warning-time movement, Gulp targeting/manual dispels, a real companion interrupt and a real NPC Priest cleanse. Self-Regenerate now enters the healing ledger; interrupt/control cancellation clears cast presentation. Sixteen pressure pulls separate enemy damage from native ability health costs and all clear with no deaths/invalid controller casts. Shared mana sustain is still an open balance limitation.
  • The regenerated 80-pull active-five diagnostic clears all pulls with no player/NPC deaths or invalid casts. Trash takes 4.9–8.7 seconds and Anglo 42.0–58.5 seconds. Focused source/native checks pass 141 distinct tests across 22 files, including 40 actual player/NPC fixed/MaxHP packet cases. Ready-five passes seven Vitest and twenty Python checks; avatar checks pass 47. A separate legacy scaler suite passes 13 checks and fails four compatibility-pacing expectations. The committed-scaler replay reproduces the two WoW starter failures and RoM Mage level-eight failure; the exact level-80 healer case was not replayed. Current/committed scaler outputs match all four original inputs. Compatibility pacing is not retuned.
  • The final production build passes bootstrap/assets, TypeScript/Vite, compression and release-bundle verification. Exact chunks are index-pDR2PGJY.js, combatStore-7m63VWbc.js and GameRuntime-CGZMQPoV.js. Actual level-30 Anglo/Lady Boss Testing snapshots record native budget 3 (attack damage 289/354), confirming live population passthrough.
  • Final Edge fixtures pass with zero page errors and preserve source cast times/ranges/effects/telegraphs. Trample movement avoids player damage; Bash releases once at source range; Gulp controls a nearby Rogue and expires naturally. This browser sample does not prove NPC cleansing; the headless test separately does. The fixture-only final run reuses successful normal-scene snapshots from the same build (normalScenesReran: false); it does not certify a normal full clear or navigation. See playtest-artifacts/native-combat/results.json, normal sample JSON and screenshots, plus six anglo-*-fixture.png captures. Roster, party/dungeon and selected mechanic screenshots were visually inspected and retain bodies and starter shield/sword/staff silhouettes. No readiness/report submission occurs.

2026-10-03 — Native RoM combat resolution and enemy damage types

The equipment/manual-formula, damage-pressure and production QA evidence above supersedes this earlier pass's corresponding limits and measurements; its native health anchors remain current.

  • The supported native path now resolves defense, hit/avoidance, criticals, periodic damage, special Throw and shield inputs, and multi-target damage for the five canonical active builds with canonical training gear. Player and companion actors keep independent rulesets; incoming resolution uses the recipient's own secondary class, gender, and ruleset, so a WoW-mode recipient keeps the compatibility resolver when another actor uses native stats. Native points are never converted into WoW ratings. Exact RuneWaker NPC identity travels independently from WoW creature/server entry IDs. Missing NPCs, unsupported source calculations, ambiguous source equipment, and custom/unverified gear retain an explicit fallback.
  • The enemy classifier keeps WoW and RuneWaker spell ID namespaces separate. WoW packets retain DBC DmgClass and full SchoolMask; RuneWaker's six source resistance channels stay distinct even when simulator aliases share a school. Direct and periodic parts of one source cast share their per-target application hit gate. Periodic ticks reuse application snapshots without new hit, critical, armor, or resistance rolls; HP-percent ticks use the recipient's current maximum health. Enemy periodic effects have their own scheduler and are cleared by dispels and encounter resets. Multi-target source sharing and ordinal falloff are applied once.
  • A shared hit-gate regression for unsupported NPC CalcType 4 packets was fixed in runtime and covered by a regression test.
  • artifacts/rom-five-native-rotation/report.json is the final native pacing sample: 80/80 clears, zero invalid casts, zero player or companion deaths, and source-supported trash and Anglo in every sample. Trash took 4.9–8.7 seconds and Anglo 40.5–58.5 seconds. The five identities rotate through the player seat at levels 1/10/30/60/65/66/79/80, with four native companions and fixed actor positions. This diagnostic does not cover movement or authored encounter mechanics and is not readiness certification.
  • After the shared-gate fix, focused validation passed 140 tests across 18 files, and the native HP/pacing selection passed 7/7. The 80-sample report was regenerated with the same pacing, maximum live enemy level 80, source support for all samples, zero deaths, and zero invalid casts.
  • Final native RoM health factors are [level, trash, boss]: [1, 0.4, 0.3], [10, 1.0, 0.6], [30, 1.1, 0.85], [60, 1.5, 1.5], [65, 1.8, 1.9], [66, 2.6, 2.8], [79, 4.5, 4.8], and [80, 4.5, 4.8], with linear interpolation between anchors. These are simulator training-party pacing budgets, not imported monster-health formulas. The player level cap remains 80; no new loot wiring, matchmaking, or readiness promotion is included. Existing saved WoW-stat mode and per-actor rulesets remain supported.
  • Ready-five (7 Vitest and 20 Python checks) and all 47 avatar/equipment checks were also run during this follow-up. The final TypeScript/Vite build, bootstrap/asset audits, compression and release-bundle verification passed; six shared-gate/periodic checks passed after the final result-field cleanup.
  • Final production browser QA uses index-DyCSc4Cz.js and combatStore-nQykOmDD.js. Stat-ruleset checks pass on desktop and 390×844 mobile, covering native/compatibility mode, saves, guards and each actor's own panel. Isolated Boss Testing observes Anglo's Gulp control effect and Lady Anacondra's Nature-school Lightning Bolt against the native party, with no page errors and no readiness/report submission. Results are in playtest-artifacts/stat-rulesets/results.json and playtest-artifacts/native-combat/results.json.
  • Visually reviewed the roster, normal native dungeon, native NPC stats, mobile equipment and both selected boss-mechanic screenshots. Character bodies and starter staff, shield and weapon silhouettes remain visible; stat labels are readable and the narrow panel scrolls inside the viewport. The targeted scenes do not certify every mechanic or dungeon. See docs/ROM_NATIVE_COMBAT_RESOLUTION_PASS_2026-10-03.md for source boundaries and formulas.

Desktop performance check (2026-10-04)

  • Production headless Edge on the Radeon RX 9070 XT exercised Wailing Caverns entry combat, movement, pause/resume, synthetic visibility changes, and three entry/exit cycles. Evidence is in artifacts/playtest/performance/before/, after/, and confirmation/; the reusable route is scripts/playtest-performance.cjs.
  • Fixed repeated full-catalog scan/sort and pack-receipt checks with an immutable manifest index and publication-invalidated usability cache. The before profile spent about 925 ms of an eight-second sample inside catalog lookup; that hotspot disappeared after the change. A same-manifest benchmark of 100 lookups measured 746.06 ms for the old scan/sort, 14.91 ms to build the index once, and 0.023 ms for cached lookups.
  • HUD, aura and periodic-effect presentation clocks stop during local pause/map/companion and while hidden. Target-filtered shallow subscriptions avoid unrelated unit updates; normal dungeon play no longer starts the two invisible race HUD clocks. Visible shared-online timers retain their menu behavior.
  • Bounded decoded audio retention to 64 cues or 32 MiB of PCM, with recent-use eviction, shared pending decodes, failure retry, and preserved active playback. This is a cache budget, not a total-process memory limit.
  • Stable 20-second paused main-thread busy time improved from 5.41% to 0.49%, reproduced at 0.46%. Stable pause and synthetic hidden-page samples submitted zero draw calls. Resume restored continuous drawing. After three dungeon exits, JavaScript heap returned to 59.59 MiB (59.71 MiB in confirmation), with backing storage near 22.61 MiB. All three runs reported zero page errors.
  • A later pause sample showed a transient demand-mode burst; confirmation captured an idle paused CPU profile and zero draws/layouts through an extra settled 20 seconds. The burst was not reproduced or conclusively attributed. Active samples vary with NPC appearance, combat progression, and concurrent project work, so their heap/draw differences are not claimed as isolated optimization gains.
  • Reviewed active, resumed and paused screenshots: the player/party/enemy models and starter equipment remained visible, effects rendered, and HUD/menu controls were readable. No visual-quality settings were reduced.
  • Validation: 59 focused tests passed; production TypeScript/Vite build, KTX2/environment audits, compression and release-bundle verification passed; release check passed. Scope and remaining original-effect cache/GPU profiling targets are recorded in docs/PERFORMANCE_CHECK_2026-10-04.md. These browser counters do not measure whole-system CPU, total RAM, GPU utilization percentage, or VRAM.

2026-10-04 — Visible party armor and original RoM starter weapons

  • Fixed the presentation gap for synthetic heirlooms and other unmapped armor: WoW player, companion, creator, and roster models now receive native starter/representative chest, leg, boot, glove, shoulder, and cloak appearances. Supported exact drop visuals override the corresponding starter slots. Cloth, leather, and heavy chest appearances differ. This changes presentation only, with no item/stat migration.
  • Rebuilt all five native RoM race/gender rigs with the original cloth010-001 torso, hand, leg, and foot components instead of the bare-body components. All five GLBs passed the Khronos validator with zero errors and warnings. Packaged six original client ROS props for sword, mace, shield, staff, bow, and dagger; retained source and output hashes in their import manifest. Native props use the original RoM socket frame; each item preserves its own error/Suspense boundary and procedural fallback.
  • scripts/playtest-party-equipment.cjs exercises isolated offline profiles in production headless Edge at 1600 × 1000. It installs each optional character pack before the final native roster/dungeon captures. Fresh profiles initially use the bundled human fallback, so a pre-download screenshot is not evidence for the original RoM rig. The completed WoW/RoM route reported zero page, console, or non-favicon HTTP errors.
  • Visually reviewed playtest-artifacts/party-equipment/WoW-roster.png, WoW-party-front.png, RoM-roster.png, RoM-dungeon.png, RoM-party-front.png, and RoM-party-open.png. WoW party bodies have visible robes or armor, shoulder pads, leggings, and capes. The native RoM player and nearby companions wear the source burgundy/orange starter outfit; the mage carries the original textured staff, and the knight carries the original metal mace and wooden shield. Bodies remain visible while equipment loads. The Forsaken Abbey entrance camera crowds the party near a wall, so these captures do not claim every companion is simultaneously unobstructed or certify dungeon positioning.
  • Roster previews now receive saved equipped items. Optional equipment completion requests a preview bounds refit after the initial ready-pose blend. Final RoM-roster.png shows the full native staff, character body, and boots within the viewport; the earlier immediate refit used bind-pose bounds and cropped the staff tip. The final RoM-only follow-up reported zero browser or asset errors.
  • Validation: all 53 avatar tests passed; the production TypeScript/Vite build, asset audits, bootstrap/bundle verification, and release check passed. Refreshed local content as content-f39a3ad523d546d5. Original RoM armor is currently a common starter outfit; per-drop modular armor replacement and exact skins for every weapon/armor item remain outside this change. See docs/CHARACTER_EQUIPMENT_APPEARANCE.md for regeneration and content-pack requirements.

2026-10-04 — RoM weapons on fallback bodies and Caelan's bow grip

  • Found an uncovered presentation path: original RoM props were selected by the loaded body's renderer strategy. Without the optional RoM character pack, the basic human body therefore kept generated starter weapons. Weapon selection now follows RoM class identity; the fallback body keeps its existing clothing and shoulders while its hands receive the packaged original RoM GLBs. Each optional prop retains independent loading/error isolation and its temporary procedural fallback.
  • The original bow's source axis differs from the basic human bow socket. Its basic-body attachment now aligns that axis before applying the inverse RoM socket adaptation. Native RoM bodies keep the original source grip. A blanket half-turn was rejected after inspecting the actual skinned geometry: it put the string side away from the torso. The shipped adjustment faces the bow toward the archer on both rigs.
  • The isolated headless Edge check uses the production build (index-CsqM7pOM.js, SkeletonUtils-BwiwJPus.js) and the full Stormwind Stockade entry. A test-only canvas observation hook inspects the existing shared renderer; a temporary camera callback captures Caelan closely without changing models, poses, equipment, or party positions. Source mesh checks require original hammer/shield, staff, bow, and dagger meshes on every RoM companion. Bow-facing telemetry compares the source limb tips with the grip and torso.
  • Visually reviewed the fresh-profile playtest-artifacts/party-equipment/basic/RoM-roster-basic.png and RoM-Caelan-basic.png: the roster has the original textured wooden staff and clothing; Caelan holds the original bow upright with the string side toward him. The bow-facing dot product is 0.896 and its vertical-axis alignment is 0.995. The entire fresh-profile route passed with zero page, console, or non-favicon HTTP errors; no optional native character pack was installed. Results are in that directory's results.json.
  • The completed native-pack WoW/RoM route also reported zero browser or asset errors. Reviewed playtest-artifacts/party-equipment/WoW-party-front.png, RoM-roster.png, and the native close-up follow-up RoM-Caelan-native.png/RoM-party-front.png: WoW robes, shoulders, armor and cloaks remain visible; the native RoM roster shows the complete source staff and outfit; Caelan carries the original textured bow in the native lowered idle grip, with the limb tips/string side toward his torso. The final native-facing dot product is 0.465. The close-up uses the normal camera's collision-safe position and a temporary narrower field of view; a previous actor-relative camera position landed inside a wall and was rejected as visual evidence. Nearby native companions show the original shield, hammer and daggers. The group remains crowded on the entry stairs, so the captures do not certify party spacing or every combat animation.
  • Focused validation: all 56 avatar tests pass, including missing-pack equipment resolution, source bow alignment, and inverse socket-frame coverage. The final production build, asset audits, compression, and release-bundle verification pass. No original assets needed regeneration, and no deployment was performed.

2026-10-05 — RoM floor/wall texture and lighting pass

  • Reviewed all 30 registered base RoM environments with three requested Luna 6 Max subprocesses covering the visual pipeline, source-resolution/UV audit, and runtime lighting. Generic glTF geometry simplification collapsed source atlas interpolation on broad walls and floors. Both environment builders now use the shared optimizer policy with simplification disabled and the automatic texture pass disabled; Meshopt compression, joining, material reuse, instancing, and the separate full-resolution KTX2 encoder remain enabled.
  • Repackaged all 30 visuals from their converted static scenes, refreshed asset hashes/sizes and optimization reports, regenerated the 29 generated definitions, and updated Forsaken Abbey's authored asset descriptor. Collision and navigation assets were retained. The source audit links all 1,149 shipped images to their DDS originals, with no reduced dimensions or dropped mip levels. KTX2 remains ETC1S compression; retaining source resolution does not claim lossless pixels or invented higher-resolution originals.
  • The final audit expands all GPU instance TRS and compares all 30 rebuilt environments with their original GLBs extracted from Git revision 6114a2295f14aa20a8444c61a960faeb88ac70c5. Rank-collapsed mapped area fell 97.7% on upward floor-class surfaces and 99.5% on wall-class surfaces. These metrics include non-playable caps and decorative geometry; they measure import mapping damage rather than a percentage of visibly defective playable floors. The compact before/after reports retain texture provenance, aggregates, and selected spatial hotspots; the earlier unexpanded snapshot is archived under ignored artifacts/rom-environment-quality-audit/ for provenance.
  • Added explicit RoM runtime lighting profiles before Bite-Sized derivation, with restrained fill for Barren Caves and HOTO. The shared directional light now targets the entrance in Standard mode and follows the camera in High mode. These profiles are runtime approximations; the static mesh importer does not restore original WDB light components.
  • The isolated Edge review loaded all 30 shipped environments without page errors and captured previous/revised entrance lighting plus revised middle/final available boss viewpoints and reverse entrance. Reviewed all six contact sheets plus the Hall of Survivors entrance at full size: the former striped floor now shows its stone atlas tiles, and the broad floor/wall mapping defects visible in the earlier captures are substantially improved. Evidence is under artifacts/playtest/rom-environment-quality/, including results.json, 150 viewpoint captures, contact sheets, khronos-validation.json, package-verification.json, and hall-of-survivors-comparison.png. The one initial Aeternal Circle navigation timeout passed its isolated rerun; final results contain 30 loaded entries and zero errors.
  • Targeted diagnostic captures for Grafu Castle, Treasure Trove, and The Origin are also in that directory. Grafu's flagged upward ceiling-cap group has a normal visible tiled floor above it. Some Treasure Trove/The Origin boss or hotspot anchors place the diagnostic camera outside or below the imported geometry. Surface-normal/UV metrics identify review candidates rather than proving a visible playable-floor defect, and these captures do not certify traversal, collision, combat, or a full dungeon clear.
  • The initial Sand Vortex review correctly found no terrain ROS but did not inspect the WDB's native terrain tables, so its flat-arena gap statement was incomplete. The native WDB terrain recovery below supersedes that claim; residual atlas metrics remain candidates for review rather than proof that every polygon is visibly defective.
  • The normal production graphics workflow entered full Stormwind Stockade and Forsaken Abbey, with default 150% rendering and High 200%/16× filtering/shadows. It passed with zero page errors; reviewed artifacts/playtest/graphics-options/rom-high.png, showing the revised Abbey wall/floor lighting. The native RoM character pack was not installed for this check, so the party uses its normal fallback bodies. Refreshed local content version content-60e881beda3ca768; no external deployment was performed.
  • Focused environment validation passed: 23 tests across lighting coverage, light targeting, graphics/material preparation, production loading, RoM registration, and WoW environment isolation; actual optimizer CLI and instance-transform/UV-rank regressions also passed. All 30 rebuilt GLBs passed Khronos validation after known unsupported BasisU/instancing tooling messages were filtered. Existing KTX2 and environment draw-call budgets passed without changing their baselines. A forced TypeScript build cleared a stale cached diagnostic after correcting an unrelated in-progress test import; the production Vite build, static compression, and release-bundle verification passed. The updated enemy-source-aura integration fixture subsequently passed all three tests. The release candidate check passed, including untracked files.

2026-10-05 — Sand Vortex native terrain recovery

  • The authoritative dgn_sand_vortex.wdb contains native header, chunks, chunk_iterations, and texture_list tables. Its complete terrain is 32×32 chunks of 64×64 cells at 7.5 source units per grid interval (480 units per chunk), spanning X/Z −7,680 to +7,680. Recipe encounter bounds select chunks X/Z 14–16, nine chunks covering [−960,480] on both axes.
  • scripts/runewaker-pipeline/sand-vortex/extract-native-terrain.mjs now reads the source tables and writes reproducible geometry/material payloads under ignored runewaker-export-work/sand-vortex/native-terrain-source/. Every selected chunk has a 65×65 heightfield, 8,192 source triangles, 256² DXT1 weight maps, and source-derived visibility flags. Index order matches the native even/odd two-cell terrain topology; masked source faces retain their slots as degenerate triangles. This selected area contains no masked triangles or water layers.
  • Original Viper Canyon tile DDS files are copied without editing. Chunk layer IDs map to dirt02/24, dirt04/15, rock03/12, dirt03/20, and dirt01/10 (tile scale per terrain texture_list); each layer DDS is 256² DXT5. Weight-map RGB channels map to consecutive layer-ID triples. The extractor preserves the source DXT1 bytes, writes DDS wrappers for inspection, and decodes linear RGB PNGs for the runtime texture carrier; it does not invent or bake a large terrain atlas.
  • Native normals come from the serialized vertex-data RGB decoded by the original terrain shader as (channel/255 - 0.5) * 2; the high byte remains the visibility flag. Coordinates stay in source left-handed Y-up space in the buffers. Weight UVs are normalized local XZ with no offset or row reversal; the native shader applies tile UV scale [tileScale,-tileScale], samples both splat maps at the raw normalized UV, and normalizes their RGB weights.
  • The GLB runtime adapter carries source tile and weight maps through material variants, blends them per pixel, and relies on the shared RoM dungeon lighting palette. Those palettes remain runtime approximations because the static import does not contain the original light components.
  • The focused extractor/parser suite passes all four tests, covering datastore offsets, native topology/masking, source normals and layer IDs, chunk selection, and the DXT1 wrapper. The extraction regenerated all nine chunks; all manifest paths resolve, all serialized chunk origins match the WDB header grid, and no payload bytes remain unparsed. npm run release:check passed at the integration checkpoint. The isolated browser review of the rebuilt package loaded Sand Vortex with zero page/console errors (7 draw calls; 56.4 FPS in the one-second preview sample). Entrance and Sandlord views show continuous native sand/cliff tiling with no obvious stretching or chunk seams; revised warm lighting makes the ground and rock faces more legible, with prop shadows still visible. The reverse entrance preview faces a nearby slope that fills the frame, so that camera angle alone does not establish route clearance. This asset preview does not certify movement, collision, or combat.
  • A post-build production browser entry on local content 4d89d2885523b400 also loaded the registered Sand Vortex with zero page errors. It used 200% render resolution, 16× filtering, High shadows, and High ambient fill (default comparison: 150%). The normal entrance view shows the native material blend beneath the party, a continuous floor-to-slope join, and visible terrain-object shadows. The party is at 0 m explored; its lower legs are partly covered by the action bar, so this image is not conclusive proof of exact foot contact. The authored entrance projects to the retained navmesh within 2.493696 m (2.45 m horizontal, +0.48 m vertical). This was an entry-only visual check: no route traversal, collision certification, or full clear was performed. Captures are in artifacts/playtest/rom-native-terrain-entry/.

2026-10-06 — RoM native ground, support floors and navigation follow-up

  • Local content now includes Origin's full 256 native terrain chunks and 126 decoded water layers. Native floor sampling, heightfields, topology masks, normals, splat weights, DDS dimensions and all 693 ROS placements are retained. Source-scaled side projection removes the verified steep-cliff streaks while preserving native XZ mapping on flat floors. Paired cliff/water screenshots ran at approximately 60 FPS with no browser errors in artifacts/playtest/rom-continuation/origin-full-ground/.
  • Water keeps all 30 native 256² normal frames and source octave settings. Material clones share animation phase and retain separate transform uniforms. Compatibility UV0 carriers satisfy the glTF variant contract; the shader continues to sample world coordinates. Original SH lighting, projected reflection/refraction and native effect type 4 remain unsupported, so this water rendering is an explicit approximation.
  • Gameplay collision now honors original entity collision options and subtree gates before Trekker's water/foliage exclusion. Origin uses 865,100 eligible static ROS triangles and 2,094,713 visible terrain triangles. Its 24,612-polygon Detour graph retains actual directed links: entry854 reaches Life Leecher; Falynum has native floor but remains disconnected. No bridging links were invented. Two packaged ordinary walking legs passed (2.79 m, 3/3 grounded, full health, zero browser errors), recorded in artifacts/playtest/rom-continuation/origin-packaged-gameplay/results.json.
  • Corrected support geometry uses the same inverse-placement/reflected-Z bridge as native geometry. Aeternal omits only the source-proven native entry pad; 151 other supports remain. Its explicit all-components policy retains 1,327 navigation triangles and disconnected islands. Demon retains 186 supports; Mystic retains 250 and uses its actual native floor DDS at measured 22.18 pixels/m and entry UV phase. Both textured support styles preserve native UV0 and use full-rank UV1 on top and side faces. These remain derived fallbacks.
  • Packaged ordinary UI/WASD entry checks completed three legs each in Aeternal, Demon and Mystic (9.74 m, 7.36 m and 9.65 m); all 25 samples stayed grounded with no browser errors. Standard/High screenshots are in artifacts/playtest/rom-continuation/support-packaged-gameplay/. These checks used the normal WoW healer/Ready NPC entry flow; automatic nearby combat and experience gain occurred. They do not certify full traversal or combat balance.
  • The final 30-dungeon audit matches 1,615/1,615 source textures with no downscales or cap hits. This summary run checks source identity/dimensions; pixel fidelity is recorded separately by the codec and native-water proofs. All 162 shipping dungeon GLBs pass validation with zero actionable warnings or errors under the raised issue limit. Native alpha joins pass 54/54 exact rows across 13 source hashes. The 39 generic pixel-role suggestions match the old baseline and are not native alpha evidence; tree04/tree08 KTX cutoffs retain their verified native policy.
  • Regeneration is owned by build-environment.mjs, native terrain/water builders, assemble-native-collision.mjs, and build-native-core-support-candidate.mjs. Strict query cache identity includes source and extractor hashes. The three primary/support producer smoke tests, bounded collision chunk test, focused scene/navigation tests and TypeScript project build pass. Existing unrelated repository changes are preserved.
  • Final source/UV-compatible Origin and textured Mystic were checked again through build-final-20261006: two Origin legs (2.58 m, 3/3 grounded) and three Mystic legs (9.88 m, 9/9 grounded), with no browser errors. The final Mystic High screenshot confirms that the former gray pad matches the native entry floor pattern. Evidence: artifacts/playtest/rom-continuation/final-packaged-gameplay/. Final production build, precompression, bundle verification, KTX2 audit and performance audit pass. The local content version is content-2160be7ff070205b.

2026-10-05 — RoM texture codec and native material follow-up

  • Upgraded sixteen reviewed texture images across nine packages to UASTC level 2 with Zstandard 18 and no RDO. The decoded source comparison improved RGB PSNR from 20.34–26.05 dB to 48.43–57.31 dB, with image dimensions unchanged. The exact basename policy avoids accidentally upgrading similarly named roughness maps; other images retain ETC1S compression. Source/pixel evidence and the frozen codec baseline are in artifacts/rom-environment-quality-audit/codec-upgrade/.
  • Restored native-supported normal transparency on The Origin's act_precipice_01, act_precipice_02, and act_waterfall02 resources, plus native cutout thresholds where the source image actually contains alpha. All 693 WDB placements, 220 resources, original bounds, geometry, UVs and primary material modes remain intact. The four affected placement matrices differ from the source plan by at most 6.4×10⁻⁶ due to Float32 storage. The native alpha provenance is shipped in src/assets/game/dungeons/the-origin/native-material-alpha-report.json. Five source additive wave material rows remain unsupported and unchanged; their mode was not inferred from filenames.
  • Fresh Origin preview loading passed with zero page/console errors after one startup navigation timeout passed its rerun. Additional cameras around waterfall hotspot cell [1,-1,8] also loaded cleanly, but nearby decorative geometry and opaque foliage cards obscure these views, so the screenshots do not certify the waterfall's full visual appearance. The source report, identical embedded RGBA, decoded KTX2 alpha range 0–173 (MAE 1.365), and material mode evidence support this scoped alpha correction. Full native effects, other foliage cutouts, and the existing entrance projection review remain separate source/rendering follow-ups.
  • The final source audit covers 30/30 environments and 1,182/1,182 embedded textures with matching source DDS dimensions: zero downsized images, zero 2048-cap hits, zero dropped mip chains, and all 1,182 pixel comparisons completed. Sand Vortex now has 33 embedded textures and no untextured terrain fidelity gap. Native terrain UV diagnostics measure the default layer carrier; the runtime blends five source-scaled layers, so a single-layer density metric does not describe the entire splat shader.
  • All 30 package asset checksums/sizes match their metadata; all 155 package GLBs pass Khronos validation after known unsupported BasisU/instancing tooling messages are filtered. The updated review results contain 30 loaded environments and all six contact sheets were refreshed. The final production build, static compression and release-bundle verification passed; KTX2 has no fallback textures and environment performance has no regressions. Local content is content-e261b88ce9be26fa; no external deployment was performed. The audit retains source-authored UV residuals as review candidates and does not certify every polygon, route or encounter.

2026-10-05 — CoA Decapitate strike integration and Guardian source audit

  • Corrected Decapitate 804414/node 5744 from two imported damage events to one normalized weapon strike using the captured Vol'Jin tooltip: flat 27 plus 220% weapon damage including normalized AP. Main-hand item classification supplies 3.3/1.7/2.4-second normalization; actual speed does not classify the weapon. Players, companions, and their scorers share the projection. Unknown classifications retain the imported fallback. The generic AzerothCore flat-bonus ordering differs; the custom CoA script is unavailable, so the explicit tooltip governs this narrow interpretation. Extra-Energy conversion remains unfinished; existing health gates, payment, and Beheader refund pass.
  • Focused deterministic fixtures prove one correctly calculated damage event through actual player and normal NPC casts. The focused set passes 22 tests across five files; Ready-five compatibility passes seven Vitest and twenty Python tests. No catalog records or readiness pools changed.
  • The selected five builds were tested at level 60, seed 1, for at most 30 seconds in isolated headless boss rooms sourced from Cellblock Rush's catalog-template Hamhock, bite-sized-stormwind-stockade/entry-1717. Guardian and Witch Doctor seats time out with 80,007/77,898 boss health; Barbarian defeats him in 12.8 seconds; Ranger times out with 29,396; Pyromancer defeats him in 24.8 seconds. Every seat has zero deaths. The final Barbarian scorer chooses other attacks and records no Decapitate cast; separate actual-cast regressions establish the strike behavior. Low pressure prevents tank/healer completeness or balance conclusions. This is not a live dungeon clear or browser visual check. A fresh live Cellblock Rush run can select another boss. Raw configs/results are preserved under ignored artifacts/coa-first-party/stockade-decapitate-2026-10-05/; policy is playerbots-inspired-v11-coa-decapitate-strike. All five remain Needs Testing.
  • The Guardian audit establishes trainer metadata for rankless Tower/Line and why they need an explicit import path and formation-specific modifiers. Paragon's secondary stack text and child damage/buff rows support the August Heavy Blow/Paragon Smash intent; its stale primary Tower/Bastion description remains recorded. Exact cached IDs/fields and acquisition boundaries are in docs/COA_GUARDIAN_FORMATION_AUDIT_2026-10-05.md. This audit adds no actions or assumed formation state. The canonical CoA vault note is updated separately.
  • Final production build, TypeScript, asset audits, static compression and release-bundle verification pass. npm run release:check passes, including untracked files. No external deployment was performed.

2026-10-05 — Ordinary NPC spell blocking and Cellblock Rush default

  • Routine live QA now defaults to Stormwind Stockade: Cellblock Rush (bite-sized-stormwind-stockade). Shared harness defaults, contributor rules and game/vault workflows record its one seeded boss. Historical full Stockade evidence remains intact; new full-source runs require explicit selection.
  • Source-bound direct physical player and companion spells now use ordinary NPC defenses and a separate post-hit block roll. Exact selected-rank metadata determines eligibility. Critical hits can also block, and outgoing events retain block flags/amounts. Native RoM, magical, periodic and unbound packets stay outside this phase. Non-direct full-hit blocks and source aura imports for ignore-hit-direction/critical-block doubling remain separate work.
  • Ten directly affected Vitest files pass 134 checks. Actual Heroic Strike and generated Hunter Steady Shot fixtures prove crit-plus-block with labeled deterministic setup. Ready-five passes seven Vitest/twenty Python checks; the final 8 GB production build/hooks and subsequent TypeScript check pass.
  • Normal offline level-30 Discipline Priest entry with four Ready companions clears actual seeded Hamhock (creature-79098, entry-1717) in 03:18.0 on Easy/Normal. Native required/killed IDs agree 1/1. No player/party death or resurrection recovery is observed; all five actors finish alive. Nine effective heals total 2,801.9 HP. The results roster naturally reaches player level 32 and companion level 31; cap 80 remains unchanged. The UI-created profile was advanced to level 30 through isolated shell progression setup before entry; no combat-state writes were used during play.
  • Run playtest-artifacts/stockade-spell-blocking/20261005-202545227 captures 830 unique sampled events and 29 block indicators. Six party-to-hostile blocks include two Revenge and two Sinister Strike hits with event-level amounts; a correlated Revenge result explicitly records its post-hit block roll. Four hostile spell-15657 blocks use the existing companion defender. No live crit-plus-block is observed. Read-only latest-200 ring snapshots can miss events; this is scoped smoke evidence, not balance certification.
  • Root reviewed desktop/compact roster, entrance, route 50/75 and the native one-boss result screenshots. Bodies, staff, shoulders and visible companion weapon/shield silhouettes render. Close-party overlap and edge occlusion persist; compact roster text is clipped, though normal Continue hit testing passes at both sizes without a forced click. These captures do not certify every animation or companion silhouette.
  • Frozen distribution aggregate SHA-256 is 864781d16c3c0a26457b6acd7a9bd31357116f856e6b27258b5b633d2f224fac (5,964 files, 116,755,437 bytes), unchanged before/after. Full content manifest JSON is retained at both boundaries and stays unchanged; all 2,124 served objects match their hash addresses and manifest references. Page errors are zero; the sole console item is a favicon 404. The first entrance-only failed harness attempt remains preserved: distant boss loading required reading actual run selection rather than assuming its mob existed at entry.
  • Source/runtime report: docs/NPC_SPELL_BLOCKING_2026-10-05.md. Exact live provenance, sampling boundaries and cleanup: docs/STOCKADE_SPELL_BLOCKING_PLAYTEST_2026-10-05.md.

2026-10-05 — RoM walking-route and native-material pass

  • Sand Vortex now blends source-scaled side projections on steep terrain using the original smooth normals, layer scales, and splat weights. Native XZ sampling remains on level ground. Same-camera browser comparisons compile without errors and remove the vertical cliff streaks; the sampled flat-floor region is pixel-identical across all 630,000 RGB channels. No terrain geometry, collision, weight images, or source DDS dimensions changed for this fix.
  • Corrected entrance heading conversion through inverse primary rotation and component scale, source handedness, and normalized XZ. Six rotated WDB assemblies receive updated local forward/yaw; authored Lua directions remain in provenance. The focused assembly suite passes all seven checks, including nonuniform and negative scale.
  • Normal offline Sand Vortex entry and ordinary WASD reach all four waypoints from the entrance to Sandlord, including the gentle slope transition. The route records 62.96 m explored, zero ungrounded samples, full player health, and zero browser errors. Standard/High captures show native floor and cliff detail along the route. The final boss camera is partly occluded by a tree; telemetry establishes movement but that capture does not certify the boss view. No teleport, combat-store mutation, or full clear was used. Evidence: artifacts/playtest/rom-visual-routes/sand-route-final/ and artifacts/rom-environment-quality-audit/sand-vortex-cliffs/.
  • Ordinary UI entry and Standard/High options loaded the other 28 RoM dungeons with zero browser errors. All entries settled grounded and all final settings recorded High shadows, 150% resolution, 16× filtering, and Authored fill. Reviewed all six paired contact sheets under artifacts/playtest/rom-visual-routes/all-28-lighting-v5/. Floor/wall detail remains legible across the dungeon palettes; some entrance cameras face a wall or crowded party. Existing untextured source-anchor support surfaces in Aeternal Circle remain a derived-geometry fidelity gap. Demon Stronghold's base package received the reviewed native-floor support fallback below. These entry captures do not establish complete route clearance or combat balance.

2026-10-05 — The Origin native ground and runtime-entry review

  • Recovered authoritative WDB terrain chunk [2,2] from dgn_the_origin.wdb for the entrance-path region. The source 64×64-cell topology keeps all 8,192 triangle slots, source normals, visibility, four tile DDS layers/scales, and two DXT1 splat maps. Of its 8,192 source faces, 8,146 visible faces are packaged for collision/nav; 46 masked faces remain excluded. One 30,332-byte water-layer payload is left unparsed, so the package does not claim native water rendering or collision.
  • The old Lua spawn [828,263,963] and direction 343 stay in provenance, but its projected gameplay position was trapped against WDB geometry. Runtime entry now derives from source path graph 1026 node 854 and faces toward source node 80 as a heading reference. The source node center is 1.936 m from the reviewed nav point; runtime sourcePosition is the exact inverse transform of that point, not the unprojected node center. Node 798 was grounded but slid against blocking geometry with an obstructed camera and was rejected. Recast included the 15 existing WDB collision files plus the native terrain collision and produced 98,298 triangles. The reviewed node854 entry passed two short ordinary walking legs: 2.846 m explored, 3/3 grounded samples, both targets reached, full health, and zero browser errors. Standard/High captures show clearer native ground and columns. gameplayReviewed and reviewRequired=false certify only this short entry check; the HUD still reports party route blocked farther inside.
  • Registered the terrain collision separately and refreshed the Origin nav GLB and checksums. The parser suite passes 5/5, heading/assembly suite 7/7, and all packaged collision/nav file sizes and hashes match import metadata. Evidence: artifacts/playtest/rom-visual-routes/origin-854-final/.

2026-10-05 — RoM source texture and material follow-up

  • Barren Caves' broad wretched_tunnel rock material now repeats four times through a separately retained UV channel. Exact ROS/material/texture hashes gate the recipe policy; all 31 uses receive the same adaptation to preserve continuity. The canonical source retains UV0, while shipping optimization may prune or renumber unused UV sets. Route, floor, and wall captures of the actual package load without errors and show finer rock detail. The 30-dungeon hotspot ledger records the remaining source caps, trim, effects, and reviewed atlases; Pasper's atlas is intentionally unchanged. Evidence: artifacts/playtest/rom-environment-quality/rom-texture-pipeline-triage/.
  • Origin source-proven material corrections restore additive water waves, prelit waterfalls, foliage cutouts, and cocoon transparency. Thirteen native ROS resource reports are joined by exact source hash and material identity; five additive materials and six prelit materials are recorded separately. Prelit materials lose unused specular metadata before optimization, avoiding an incompatible glTF extension pair. The two additional cavern plant materials use native MASK threshold 192/255; the opaque cavern surface remains opaque.
  • Five additional tree resources across nine placements restore native MASK thresholds 120/255 or 192/255. The prior tree04/tree08 shipping textures had lost alpha during opaque compression. Re-encoding after the material fix restores actual 1024×512 KTX2 alpha from 0 to 255: tree04 has 273,648 pixels below its cutoff, tree08 has 302,448. No source image or dimension changed.
  • Final Origin source verification preserves all 2,696 geometry accessors, 481 embedded images, 693 ROS placement matrices, and the appended native terrain. The other nine cavern primitives retain their material state. The isolated shipped giant-tree check confirms cutout pixels on the actual KTX2. Evidence: artifacts/rom-environment-quality-audit/origin-followup/, including canonical-final-integrity-proof.json and final-provenance/.
  • Final thirteen-resource evidence is in thirteen-final-provenance/ and remaining-foliage/final-integrity-proof.json; all 2,696 original accessors, 481 images, and 693 ROS matrices remain identical. The shipping visual is 29,960,084 bytes, SHA-256 528ac316d39f1ca13f9bb93ac170a585fd9b0ef87ff140183452fcd99bb5d145.
  • Base Demon Stronghold's 186 generated support boxes now sample native entrance_floor_02 at the measured 36.24 px/m entrance scale and phase. All 2,232 box triangles have noncollapsed UVs, including vertical faces; all 826 original accessors and 56 images are preserved. Exact source hashes guard this opt-in, idempotent pipeline policy. It remains a derived support fallback, not reconstructed native floors at every anchor. The level125 variant is unchanged. Evidence: demon-support-integrity-proof.json under artifacts/playtest/rom-environment-quality/rom-texture-pipeline-triage/.
  • The refreshed full audit compares all 1,188 shipped textures against source dimensions and decoded source PNGs: zero downscaled textures, zero 2048-size cap hits, and zero audit issues. All 30 package hashes/sizes match, and all 156 packaged GLBs pass Khronos validation with zero actionable errors or warnings after the documented BasisU/instancing tooling exclusions. Focused pipeline tests pass 27/27, focused rendering tests pass 64/64, and native-alpha Python tests pass 3/3. These checks preserve source resolution and material intent; they do not certify a full dungeon clear or native WDB light placement.
  • Final local content publication is content-51e1d8717914b459. Prebuild, TypeScript, Vite production build, Brotli/gzip precompression, and release bundle verification pass. The shared dist/assets directory is locked, so the verified build is artifacts/playtest/rom-visual-routes/build-final-20261005. Final normal-UI evidence in final-packaged/ records Demon Stronghold's 9.795 m leg reached with 9/9 grounded samples and Origin's two entrance legs reached with 2.531 m explored and 3/3 grounded samples. Both have full player health and zero browser errors; Standard/High screenshots were reviewed. Origin foliage cutouts are visible, while nearby native columns/architecture still crowd its entrance camera and the party route remains blocked. Aeternal's untextured derived supports and Origin's unparsed water payload remain unresolved. These runs do not certify full dungeon traversal.

2026-10-05 — CoA Guardian formation/Paragon integration

  • Integrated Tower/Line learning and owned cast projection, current shield armor and Footman's Calling mitigation, Line movement/root duration, Paragon stacks, ready Heavy Blow/Smash projection, block charges and Brace cooldown reduction. Healthy Vanguard companion scoring prefers a ready Smash over routine upkeep; existing low-health mitigation and urgent reactive choices retain priority.
  • Live entry exposed and fixed free startup seeding of both raw formations and removal of a saved learned Heavy Blow binding. Three precombat regressions, a legal talent-allocation entry regression and the separate binding allowlist check cover those failures. Unique focused coverage totals 66 tests in 15 files; Ready-five compatibility passes 7 Vitest + 20 Python, avatar checks 56, and narrow shared enemy/boss-guide compatibility checks 17.
  • Prebuild/asset checks pass. The shared dist/assets directory was locked at rebuild, so final TypeScript/Vite, compression and bundle verification use artifacts/coa-first-party/stockade-guardian-2026-10-05/dist-final. The reusable harness records its confined --dist path and source-derived public preload aliases; no production deployment or readiness-pool change is implied.
  • Completed an isolated 180-second Cellblock Rush browser diagnostic with Guardian/Vanguard, Witch Doctor/Brewing, Barbarian/Brutality, Ranger/Archery and Pyromancer/Incineration. The exact roster and legal Paragon variant are configured before normal Tank entry, then normal action-bar/movement input casts Tower -> Line -> Tower. Entry has no seeded form; Heavy Blow survives in R2. Base formation cost 20 resolves to 17 for this selected talent build.
  • Fresh run selected Dextren Ward (entry-1663, creature-79116), confirmed by the intro card. The route remains near the entrance: about 8 m explored, 5.74 m net movement, full health, no observed boss actor, no successful Heavy Blow cast or natural Paragon proc, and no healing pressure/clear claim. Regression fixtures separately exercise actual Smash/block/Brace behavior. All five remain Needs Testing; a selectable first-party UI preset and a navigated combat playtest are still needed.
  • Visually reviewed the roster and in-dungeon captures. Guardian's body, shield and weapon silhouettes are present; clustered companions and temporary gold effects limit a full party gear inspection. Screenshot 02 records the intro countdown rather than the body; 03/04/06 show the dungeon. Heavy Blow is visible at the endpoint. Page exceptions: 0; console 404: 1 unclassified; captured failed requests/HTTP errors: 0. Evidence is ignored under artifacts/playtest/coa-guardian-formations/20261006-011259958/; exact source limits and results are in docs/COA_FIRST_PARTY_MILESTONE.md and docs/COA_GUARDIAN_FORMATION_AUDIT_2026-10-05.md.

npm run release:check passes, including untracked files. The Git index is unchanged; no commit, deployment or readiness promotion was performed.

2026-10-05 — Enemy weapon utilities and Cellblock Rush

  • Integrated source-bound Bloodlust, Disarm/Infected Wound and explicit Dual Wield/Thrash through separate GPT-6 Luna extra-high subprocesses. Focused coverage passes 360 distinct Vitest, five Node and twenty Python cases, including Ready-five and 56 avatar checks. Cap 80, readiness and loot scope remain unchanged. Source limits and remaining parity are recorded in docs/ENEMY_WEAPON_UTILITIES_2026-10-05.md and the mechanics backlog.
  • Standard prebuild checks and 8GB TypeScript pass. The default Vite output hits Windows EPERM clearing shared dist/assets. A fresh isolated production output passes Vite, precompression and release-bundle verification, then its complete distribution and manifest-referenced content are frozen for QA.
  • Run 20261006-012123000 uses normal Discipline Priest level-30 healer entry and four Ready NPCs. The fresh run selects Hamhock (entry-1717, creature-79098) and clears Cellblock Rush's one native objective in 3:14.6. There are no observed player or companion deaths. Normal combat advances the player to 32 and companions to 31 by the result screen.
  • Root visually inspected roster, equipped dungeon silhouettes and results: the player body, robe, shoulders and staff are visible. Route-75 also shows companion bodies and staff/club/shield silhouettes; clustering and overlap limit a complete per-companion gear inspection. The results capture explicitly shows Hamhock and Bosses defeated 1/1. There are no page exceptions and one favicon.ico 404.
  • Build aggregate 58dfe50765b0635caeae50bd3eca2fd079cd69cce0e571ff6cb2dd5aeec77b39 and content manifest 36614a23f3b98b4289bc3726c8a9bdb075445ada50dfce6504ade4e36325be1f are unchanged before/after. Root independently rehashed all 2,124 served manifest-referenced objects and checked the actual loaded entry, combat and runtime chunks. Evidence: playtest-artifacts/stockade-weapon-utilities/20261006-012123000/, including root-evidence-audit.json.
  • The first harness checkpoint reducer omits its new weapon fields, making all-null summarized state a harness gap. The corrected recorder retains those fields and globally samples the three source utility aura IDs, including player and party recipients. Syntax preparation passes.
  • Corrected run 20261006-013934624 uses the same frozen inputs, selects Bazil Thredd (entry-1716, creature-79124) and verifies the native 1/1 clear in 3:20.7 with no player/party deaths and 1,504.5 effective player healing. All 328 mob snapshots expose weapon fields; 35 show Bazil's Dual Wield capability enabled. All sampled offhand timers are zero; hand-specific damage and nonempty Thrash queues are unobserved. These are capability snapshots, not proof of 35 activations or any offhand hit.
  • Global store evidence retains 26 snapshots of the tank's Wound instance, covering four distinct source/application-time tuples. Each is a one-stack five-minute Disease aura. Bloodlust and Disarm auras are unobserved in this retest; deterministic imported-runtime tests cover them and queued Thrash.
  • Root independently checks the unchanged hashes and all 2,124 served objects again and visually reviews the new roster, dungeon and results captures. The player body and equipped silhouette remain present; clustered companions limit a full gear audit. Results explicitly show Bazil Thredd and 1/1. There are no page exceptions and one favicon 404. Evidence and root audit: playtest-artifacts/stockade-weapon-utilities/20261006-013934624/.
  • Final npm run release:check passes, including untracked files. Game and vault diffs are reviewed separately; no stage, commit or deployment is made.

2026-10-05 — Weapon parity follow-up and combat-time recording

  • Integrated player/party source Disarm aura and selected-hand contribution views, verified native active-five unarmed inputs, intrinsic enemy offhand flags, and actual swing hand/source metadata. A review regression also removes default-speed AP contribution from disabled offhand/ranged channels while preserving independent scripted AP. Mismatched backup equipment tables remain unbound; native custom gear, rate and prerequisite limits stay explicit.
  • Final focused checks pass 102/102; Ready-five passes 7 Vitest + 20 Python; avatar checks pass 56/56; recorder checks pass 3/3. The standard production build and release-bundle pipeline pass. No full suite/all-class sweep ran.
  • The corrected frozen build SHA is fcdde36bbd63ac711453a57562a38d7a1aa7ff2e8cafd4acb0e65a7a4dc27efe. Its unchanged isolated content manifest SHA is ac0fa2a867ba0a495c172de2b89532d69b32d56d032482b26020ce2d189f074b. All 27,571 referenced objects were verified in the original freeze; the final freeze reuses that copy, rechecks the manifests and hashes the corrected build.
  • Final Cellblock Rush run 20261006-035524177 seeds Hamhock (1717, creature-79098) and clears exactly 1/1 in 03:15.1. The UI-created Discipline profile receives isolated pre-entry level-30 preparation, then uses normal controls with four Ready NPCs and read-only telemetry. No Boss Testing or combat-state writes. No recorded deaths or runtime exceptions.
  • The committed-state recorder retains 842 consecutive events, zero gaps, errors or overflow; 73 source main-hand results; 528 weapon-state observations; and 15 Bloodlust, 3 Disarm and 49 Wound snapshots. Party debuffs are included. This seed has no observed offhand/Thrash result; scoped runtime fixtures cover them. Historical first-build run 20261006-034834217 separately clears Bazil and records 44 main-hand results plus one blocked offhand result, positive hand timers and party Disarm, before the final AP-speed correction.
  • Root views final roster, dungeon equipment, mid-route and native results captures. Player/party bodies and staff/shield/weapon silhouettes remain visible; clustering limits a complete gear audit. Hamhock and 1/1 are readable in results. The only outer browser console item is favicon 404.
  • Full report: docs/WEAPON_PARITY_FOLLOWUP_2026-10-05.md. Final evidence: playtest-artifacts/stockade-weapon-utilities/20261006-035524177/. Historical first-build evidence stays separate. Level cap 80, loot and readiness unchanged.

2026-10-06 — Enemy source parity and pinned equipment

  • Implemented source NPC block inputs/critical-block results, separate victim and area shout targets, actual player/party hand evidence, and recovered pinned spawn-equipment mappings. Validated offhand weapons enable ordinary NPC AUTO attacks with independent timers and reset persistence. Synthetic, mismatched, empty, shield and native assignments fail closed. No loot wiring.
  • Focused source/hand tests pass; the final affected equipment/runtime/population group passes 73 tests. Node importer/compiler/recorder checks pass 20; Ready-five passes 7 Vitest + 20 Python; avatar checks pass 56. The standard TypeScript/Vite, asset-audit, compression and release-bundle build passes.
  • One final frozen Cellblock Rush run 20261006-054628643 selects Targorr the Dread, entry 1696 / creature-84027, and clears native 1/1 in 03:10.3. UI-created Discipline profile with isolated pre-entry level-30 preparation, four Ready NPCs, ordinary inputs and read-only telemetry. No recorded deaths; 2,845.8 effective player healing. No Boss Testing or combat-state writes.
  • Recorder: 794 consecutive events, zero gaps/errors/overflow, 60 NPC mainhand, eight offhand and four source-3391 Thrash extra-mainhand results; 162 actual player/party hand events, three committed Disarm windows and four hand results during those windows. Timing/contribution fixtures remain the formula proof. Disarm/Wound appear; Bloodlust/block/shout applications are unobserved here.
  • Root views roster, dungeon gear, route and results images. Character bodies and staff/shield/sword/dagger silhouettes remain visible; overlap limits a full companion gear audit. Boss-arrival.png captures the native results overlay with Targorr and 1/1. No page exceptions; one favicon 404.
  • Build SHA 50f723e4737f01fe82973c1a9c8259a4358179c1df74373b587fa76fb69b44a7 and content manifest SHA ac0fa2a867ba0a495c172de2b89532d69b32d56d032482b26020ce2d189f074b remain unchanged. The harness verifies 2,124 actually served content objects. Full report: docs/ENEMY_SOURCE_PARITY_CONTINUATION_2026-10-06.md.
  • Independent Luna audit rehashes all 5,967 build files, seven loaded chunks and 2,124 served objects, and checks recorder IDs 9–802. Raw response bodies are not persisted; observed URLs/status metadata match immutable local sources. Audit: playtest-artifacts/stockade-weapon-utilities/20261006-054628643/independent-evidence-audit.json. Release checks pass 399 changed paths including untracked files. Game/vault diffs are reviewed separately; task vault text hygiene passes and the worklog closes. All subprocesses use Luna extra-high; no staging, commit or deployment.

2026-10-06 — WoW texture and lighting access

  • Three requested GPT-6 Luna extra-high workers reviewed shared graphics access, lighting inheritance and imported texture quality. WoW uses the same filtering, ambient-fill, shadow and KTX2 paths as RoM. A wrong-source fallback presentation in randomized/custom bite-sized layouts now inherits the selected source's lighting and point lights; matching tuned baselines retain their presentation.
  • The isolated asset review loads all 54 actual WoW visuals plus Cellblock Rush: 55/55 successful entries, zero page errors, 271 captures and ten review sheets. High filtering and camera-following shadow targets pass. Root inspects the sheets and detailed Stockade/Shadowfang images. These are sampled asset views, not combat, traversal, collision or full room coverage.
  • The audit finds 8,099 KTX2 images with zero fallback textures. All 7,980 source-comparable dimensions are retained across 53 staged inputs; authored Wailing Caverns lacks its matching staging source. Broad flat terrain in some converted inputs remains a fidelity gap; it is not optimizer texture downsizing.
  • Safe WoW optimization now disables automatic simplification and image resizing, with final Meshopt packing after KTX2. Shadowfang's source-pinned exception reduces only untextured terrain/liquid. Its local installed visual is 8,566,408 bytes, SHA 2c562fb61596a536d728385c4f2bdfdc3230f4f84ef40875b9a568e18a82ef9d. It restores textured topology close to source while retaining every texture payload and all 26 collision plus navigation hashes.
  • Final bounded Shadowfang samples retain about 60 FPS with unchanged draw calls and 7.5–9.8% more rendered triangles than the prior asset. The full-source candidate was rejected for nearly four times the rendered triangles. These short capped Edge samples exclude gameplay actors/physics and mobile headroom.
  • Focused checks pass 118 Vitest and five pipeline fixtures. The final normal production build passes TypeScript, Vite, texture/performance audits, precompression and release-bundle verification. Release hygiene passes including untracked paths. No commit or deployment.
  • The first Options smoke uses the last available bundle, selects 200%, 16× and High shadows/fill, observes Bazil Thredd in Cellblock Rush, carries settings to Forsaken Abbey and reports zero page errors. Evidence remains separately at artifacts/playtest/graphics-options/run-wow-access-2026-10-06/; it does not establish this task's new lighting fix in that old bundle.
  • The final freshly built bundle is frozen separately under artifacts/playtest/graphics-options/run-wow-current-build-2026-10-06/. Entry index-BvFyaleo.js, built 2026-10-06T17:39:29.274Z, again seeds Bazil Thredd, verifies all four quality controls, and carries 200% resolution into Forsaken Abbey with zero page errors. Root views Options/WoW High/RoM High: textured surfaces and equipped actor silhouettes remain visible. This is an entry/settings smoke, not encounter validation.
  • Report: docs/WOW_ENVIRONMENT_QUALITY_2026-10-06.md. Asset/benchmark evidence: artifacts/playtest/wow-environment-quality/. Full quality audit: artifacts/dungeon-pipeline/wow-visual-quality-audit.md.

2026-10-06 — Daze, fear movement and immunity escape

  • Integrated exact WoW335 Shield Bash 72 child Daze 29703, safe source-informed fear movement for the player/party/mobile summons, and source-proven Berserker Rage/Bladestorm purge with player/party escape. Focused checks pass 126/126 across 15 files; Ready-five passes 7 Vitest plus 20 Python checks. The final 8 GB TypeScript/Vite production build and required asset/bundle audits pass.
  • One final frozen Cellblock Rush run 20261006-172609059 selects Hamhock, entry 1717 / creature-79098, and clears native 1/1 in 03:09.7. No recorded player/party deaths; seven effective player healing windows total 2,444 HP. Normal entry/inputs and four Ready companions follow isolated pre-entry level-30 preparation. No Boss Testing or combat-state writes.
  • Recorder: 797 consecutive committed events, IDs 9–805, zero gaps/errors/loss; 70 NPC and 161 player/party hand results. Actual Shield Bash events 574/659/777 immediately precede accepted Daze grants 575/660/778 on Hamhock. Duration/50% speed remain runtime-fixture proof, because no retained live slow-state sample measures them. Source shout/fear/purge, block, offhand and Thrash applications are unobserved in this seed.
  • Root views roster, equipped party, route-50 and native results images: bodies and equipment silhouettes render, with close stair overlap limiting individual companion gear inspection. The historical boss-arrival filename contains the results overlay. Nine actual PNGs exist; declared camera-drag paths have no files, so no live camera proof is credited. Zero page errors; the only console error is favicon 404. The owned harness cleans up.
  • Build SHA 2ded1eedcf7cfb60d53f6c82a33c088c05ff4d881bb258852c035df94770c8d1 and fresh content manifest SHA 85fc9f1c504c82aa794806b8a634596a07b34ba63e0bf66530243fe76e2d0356 remain unchanged. All 27,587 referenced content objects were verified in the fresh freeze. Root audit rehashes all 5,967 build files, seven loaded chunks and 2,124 actually served manifest objects, and passes with zero failures. Raw network response bodies are not retained. Historical full-clear fields certify only the entered one-boss slice.
  • Full report: docs/ENEMY_CONTROL_RUNTIME_FOLLOWUP_2026-10-06.md. Live evidence and root audit: playtest-artifacts/stockade-weapon-utilities/20261006-172609059/. Source gaps, level cap 80, loot scope and readiness boundaries remain explicit.
  • Independent Luna extra-high evidence review confirms the seeded clear, fingerprints, event continuity and three Daze grants. One timestamp pair is reversed by 1 ms; consecutive event IDs establish continuity. Final game release hygiene and separate task vault diff/text checks pass; memory notes are updated and the worklog closes. No staging, commit or deployment.

2026-10-06 — RoM texture, lighting and native-material pass

  • Luna subprocesses review all 30 base RoM dungeons through source-material inspection, zone-lighting recovery and sampled runtime views. Room-camera coverage includes 30 entrances, 66 boss anchors, 74 corridor samples and 36 mapping hotspots; diagnostic cameras do not establish walking connectivity.
  • Barren replaces unsafe whole-atlas repetition with four exact native floor islands and one native wall crop. HOTO v2 uses original full stone/moss tiles at two metres on true floor materials and adds source detail to cliff surfaces. Original geometry, UV0 and source PNGs are preserved. HOTO v2 changes only approved material metadata and retains every non-JSON GLB chunk.
  • Native WDB lighting now drives the RoM pass, with source colors, zone inheritance and Standard/High shadows; Grafu retains a documented entrance fallback. Source waterfall, magma, giant-tree and vine alpha semantics are restored where proven; Origin water gains bounded reflection/refraction capture. The report records original-engine limitations.
  • Final build: artifacts/playtest/rom-deep-review/build-surface-v5-20261006; index SHA ab46b9c47a0ba27b0b1c2e0a2c65ff02c613b7b87c54d37fe5ec9a7a41707e27. Frozen content is content-d1ec6f1f858f21c1, manifest SHA e102c30cc47a4130fff88809ce53453929e86e6f766b0afbbae8a8ad4a52fd7c.
  • TypeScript/build/precompression/bundle checks, 83 focused runtime tests and 17 pipeline tests pass. All 1,620 matched textures across 30 dungeons retain source resolution, including five exact crops; zero downsizing/cap hits/issues. All 162 dungeon GLBs validate with zero errors/warnings. Existing visual performance budgets have no regressions; 106 visual assets have no KTX fallback.
  • Final ordinary Barren/HOTO/Origin movement reaches 48/48 legs, with 89/89 grounded samples, 101.826 m travelled and zero errors. HOTO is only a six-metre probe, and Origin follows the connected Life route. Root views the final Barren leg 11, HOTO leg 1 and Origin leg 18 High frames: corrected detail, bodies and equipment render; Origin's source-opaque roots-village cards remain visible.
  • Final Stockade fallback selects Bazil Thredd, passes default/High settings with zero errors, and has a root-reviewed High screenshot. Evidence is in graphics-fallback-surface-v5-20261006; targeted movement is in production-targeted-routes-surface-v5-20261006.
  • Known limits include Raksha entry-camera clipping/blocked first route, the disconnected Origin Falynum approach, and source-opaque root cards. Kulech's transient maroon obstruction does not recur in 25 consecutive High frames; exact object attribution remains unproven and no lighting defect is demonstrated.
  • Unique HOTO v2 screenshots have frozen hashes. Earlier shared v1 screenshot paths were overwritten and are marked unavailable; preserved historical asset identities do not imply those old image files remain. No full clears, balance certification, staging, commit or external deployment are claimed.
  • Report: docs/ROM_ENVIRONMENT_REVIEW_2026-10-06.md; frozen evidence and guarded promotion backups: artifacts/playtest/rom-deep-review/.
  • Final v5 entry QA completes 30/30 unique RoM dungeons in Standard/High, with 60 screenshots, ready assets, grounded players and zero browser errors. Independent/root contact-sheet review finds no actionable new entry regression; known framing limits remain and Kulech's maroon obstruction does not recur. production-entry-surface-v5-20261006 and validation-summary.json retain the frozen identities, source-resolution audit and final movement/settings checks.
  • Local dist is replaced by the reviewed v5 build only after final QA. All 5,967 files match the tested snapshot byte for byte; the previous build is preserved at pre-surface-v5-dist-backup. local-build-install-proof.json records the installation, and release-check-final.log records final hygiene.

2026-10-06 - Healer out-of-combat mana recovery

  • Added a living-healer party buff restoring 15% maximum mana per second between fights, enabled by default with a saved Healer mana recovery toggle in Pause > Options. Native RoM recovery is preserved separately.
  • Final live run: isolated offline level-30 RoM Priest, ordinary Dungeons > Bite-Sized > Stormwind Stockade: Cellblock Rush entry. The actual live Boss Guide selected Targorr the Dread; the boss was not fought in this check. Pre-entry profile preparation set level 30; gameplay resources were not injected. Companion roster: Rorik, Durnik, Caelan, Veyra.
  • Ordinary Options clicks changed On to Off, immediately removed the buff, and saved healerManaRecovery: false to the active character. Switching On restored it. Ordinary Urgent Heal spent 25 mana: 2904.3995 -> 2879.3995, followed by natural idle recovery to 2904.3995. No page runtime errors.
  • Inspected desktop and 960x540 screenshots: the new option description and On/Off control are visible and readable, with the existing scrollable list; the player buff panel and mana-using NPC strips show the recovery icon. Evidence: artifacts/playtest/healer-mana-recovery/result.json, buff-enabled.png, menu-enabled.png, menu-disabled.png, menu-compact.png, selected-boss.png, and after-heal.png in that folder. The JSON records final loaded build asset URLs and resource samples.
  • Verification: 136 focused tests pass, Ready-five checks pass, final production TypeScript/Vite build and static release-bundle verification pass. The initial build passed; a later concurrent terrain-test type error was corrected by its ongoing work before the final successful build.
  • Focused integration tests cover the exact recovery rate, combat stop/resume, player and NPC providers/recipients, dead healers, no stacking, saved Off, and maximum clamping. Browser evidence covers menu persistence, buff presentation and idle recovery; it does not certify a boss clear or wider RoM balance.

2026-10-07 — WoW source UV, terrain and lighting continuation

  • Accepted local Utgarde Pinnacle and Shadowfang Keep 16-bit UV/position visual packages. Utgarde preserves spatial boundaries and is 29,792,924 bytes; Shadowfang is 8,803,744 bytes. Their nine prepared-runtime views each retain exactly the previous draw/triangle counts. Collision/navigation hashes are unchanged. The two-package audit retains all 916 source-comparable image dimensions; small documented UV residuals remain.
  • Zul'Farrak entrance tile native ADT recovery produces a complete diagnostic GLB with 256 disjoint chunks, 8 diffuse textures and 256 blend images. All 490 alpha maps and source hashes pass. Nine prepared-runtime views have zero page errors and show textured sand/rock. This remains an unshipped one-tile pilot with extra draw calls; other terrain and original-client lighting are not certified by it.
  • Original WMO lighting evidence is preserved for Stockade/Shadowfang. Stockade has exact correspondence for 55,730 OBJ vertices; Shadowfang is incomplete. Raw/fixup colors and MOLT records remain diagnostic, pending a validated native consumer.
  • 65 focused scene tests, 21 pipeline/source tests, app and isolated-preview TypeScript checks pass. Normal production build and asset audits pass. Fresh graphics smoke selected Hamhock in Cellblock Rush. 16× filtering, High shadows, High ambient fill and 200% resolution passed, including 200% in Forsaken Abbey, with zero errors. Entry index-DIqor-kq.js; bundle built 2026-10-07T03:55:23.055Z. Captures were visually reviewed. Evidence lives in artifacts/playtest/graphics-options/run-wow-continuation-current-build-2026-10-06/ and artifacts/playtest/wow-environment-quality/continuation/.
  • See docs/WOW_ENVIRONMENT_QUALITY_CONTINUATION_2026-10-07.md for package identities, source provenance, measured costs, remaining gaps and scope. This is visual/settings validation, not boss-clear or class certification.

2026-10-07 — RoM residual entry/camera follow-up

  • Corrected Raksha's packed-attribute Recast input and restored its authored entrance deck. A strict source-anchor subset retains six complete actual Detour components (239 polygons/514 links/653 triangles) within existing budgets; source visual and seven collision files are unchanged. Entry and Shadoj source guards pass, but 112/128 anchors remain unmatched and the route between those components remains disconnected.
  • Fresh ordinary UI/WASD QA reached all four gate/initial-slope targets, with eight grounded samples, 8.554469 m at route completion and 8.876903 m after post-release settling. No browser errors. Standard/High use 150%, 16× and authored ambient; right-drag works without pointer lock. Scene rays confirm the source deck and initial slope; the former under-deck camera entry is gone.
  • Same-build graphics fallback selected Bazil Thredd in Stockade Cellblock Rush: default 150%, High 200% and Forsaken Abbey comparison pass with no errors. Root reviewed High Stockade and Raksha entry/step screenshots.
  • Origin's exact dark root card remains source-opaque and front-facing; its native vertex stream has no diffuse alpha, and source-correct culling does not remove it. The asset is unchanged. This is bounded visual/movement QA, not an objective route, full clear or class/balance certification.
  • 13 focused pipeline tests, 12 runtime tests, TypeScript/Vite and release-bundle checks pass; ten Raksha GLBs validate with zero errors/warnings. The later performance audit passes 106 assets/60 known exceptions/zero regressions.
  • Installed reviewed local build: index SHA 8ca382b4ad8919ba100ee1e0ee6c7d64a30b87c7acfbf6d65fc8184eb10c9958, frozen content-151109efcb20cc00. All 5,967 installed files match the reviewed build; the actual prior dist has a separate exclusive backup.
  • Evidence: artifacts/playtest/rom-residual-review-20261006/; scope/limits and source/promotion/build proofs: docs/ROM_RESIDUAL_RENDERING_REVIEW_2026-10-06.md.

Gear namespace checkpoint — native #292 / shared #9 (2026-10-10)

Character/class source category now governs item normalization, grants, equip and active stats independently from dungeon source. Shared profile schema 8 migrates missing-category WoW records only for explicit WoW owners and retains foreign/unidentified/invalid RoM records plus assignments in recovery. Rejected updates leave stored bytes unchanged. Native ordinary loot stays disabled; boss cards and simulator reward policy retain their existing behavior.

253 unique focused source tests, full-scope app typecheck and release hygiene pass. The composed native bundle builds, 21 selected native cases pass, and five public Ready WoW level-80 snapshots match the pre-change bundle with controlled clock/RNG. This does not certify overall balance or equipped Ready gear.

No dungeon was entered for this checkpoint, so no new Cellblock Rush boss, GPU screenshot, browser roster/dungeon inspection, manual fight or listening result is claimed. The source browser build stops at missing ignored Manastorm assets; browser release/visual verification remains open. Native offline gear persistence, recovery presentation and authenticated RoM progression remain under #124. See docs/GAME_GEAR_NAMESPACES.md and gear-namespace-validation.json.