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

34 KiB

First Conquest of Azeroth party

Updated: 2026-10-05. The project owner selected these five classes as the first CoA implementation milestone. Build and refine this party before expanding to other CoA classes. CoA here means Conquest of Azeroth on Vol'Jin; the existing RoM backlog's Chronicles of Arcadia references describe a different game.

Seat Class Initial specialization Responsibility
1 Guardian Vanguard Tank
2 Witch Doctor Brewing Healer
3 Barbarian Brutality Melee damage
4 Ranger Archery Ranged damage
5 Pyromancer Incineration Caster damage

Begin with each class's core kit and the selected specialization so the full party can enter targeted playtests early. Finish the remaining trees within these five classes before expanding to the other classes. This selects work; it does not certify the current implementations.

Implementation order and acceptance

  1. Freeze the five class/spec identities and reproducible diagnostic inputs. Inventory every node, rank, source spell, and current runtime mapping. Author reviewed talent allocations instead of treating generated role-weighted allocations as an intended CoA build.
  2. Establish the tank and healer loops together, including their resource and persistent state. Check damage, mitigation, threat, healing recipients, periodic effects, and party utility against the captured evidence.
  3. Implement the three distinct damage loops and their talent interactions. Share combat primitives where their semantics match, while keeping class state and learned-rank ownership on the correct actor.
  4. Test the same party against explicitly selected encounters. Repeat with each class as the active player and the other four as companions. Include single-target and multiple-target pulls, incoming party damage, interrupts, dispels, cooldown use, resource exhaustion, death, and resurrection where the selected kits provide them.
  5. Fix observed mechanic and AI defects, then inspect live dungeon play and record evidence in PLAYTEST_NOTES.md. Compare balance only after mechanic correctness. Expand the selected classes' other trees before other classes.

The completion gate is verified behavior for the reviewed core/initial-tree builds on players and companions, a coherent 1-tank/1-healer/3-damage party in live playtests, and an explicit record of any unresolved source limitations. Catalog counts, a boss kill, or passing preparation tests are insufficient.

Source-backed priorities

The following anchors are from the August Vol'Jin capture in src/game/coaLiveData.generated.json. They identify work to verify; they are not claims that these mechanics are implemented.

  • Guardian: Footman's Calling (node 4019, spell 92105) establishes formation behavior; Vanguard's Shield (34417, 804383) builds stacks through blocks and auto attacks; Paragon (29969, 706514) transforms Heavy Blow at 10 stacks and interacts with Brace. Audit formation gates, actor-owned stacks, block events, threat, and defensive sequencing together.
  • Witch Doctor: Cauldron Brewer (4005, 92085), Ingredient: Jungle Shrooms (12645, 801660), Potion Toss (12646, 801661), and Mixologist (6645, 561069) establish cauldron/ingredient state, nearby ally effects, and ingredient-based changes to a targeted heal. Verify recipient, radius, periodic cadence, ingredient exclusivity/capacity, and healing formulas before adding interactions.
  • Barbarian: Decapitate (5744, 804414) requires a target below 35% health and converts additional Energy into damage; Beheader (6744, 705222) refunds Energy after an eligible kill; Battle Rhythm (14303, 800193) generates Energy on ability critical hits. Verify event origin and payment/refund ordering.
  • Ranger: Precision Shot (31178, 500075), Hunting Shot (29660, 801191), and Masterful Archery (7794, 680469) depend on Advantage, Elude, ricochet hits, and stacking effects. Audit the state and target selection before AI priorities.
  • Pyromancer: Ignite (6985, 800791), Combustion (29854, 520884), and Pyroclasm (7174, 520019) depend on Heat, Embers, and the caster's burning effects on a specific target. Verify periodic generation, spending, effect counting, and effect consumption. The August Agonizing Burns/Timed Attacks payload exchange also requires explicit saved-build review.

Current generated resource profiles and generic effects do not prove these stateful loops are supported. Unspecified proc timing, missing coefficients, and unknown server rules remain evidence gaps; never invent their values. Use the cached Vol'Jin capture and global Spell data described in COA_REFERENCE_PIPELINE.md.

Repeatable preparation and targeted diagnostics

src/game/coaFirstPartyRoster.ts owns the exact roster. The benchmark helper at src/game/benchmark/coaFirstParty.ts owns build selection, companion construction, and explicitly scoped Balance Lab configurations. scripts/coa-first-party/prepare.ts produces the review inventory and five active-player configurations, retaining the same party build IDs in each.

npm run coa:party:prepare -- --list-bosses stormwind-stockade
npm run coa:party:prepare -- --level 60 --boss <exact-key-from-list>
npm run coa:party:test

Preparation writes ignored local artifacts to artifacts/coa-first-party/level-60/: audit.json, audit.md, config.json, and seat-1.json through seat-5.json. It records the source capture/hash, legal generated talent allocations, source gaps, and runtime representations. Every mechanic begins as needs-review; mapping is not verification. It downloads nothing and runs no encounter simulations.

Once an explicit diagnostic is appropriate, the existing runtime consumes a prepared configuration without changing the ordinary companion pool:

npx vite-node --mode balance-lab scripts/balance-lab/runtime.ts simulate --config artifacts/coa-first-party/level-60/seat-2.json --output artifacts/coa-first-party/level-60/seat-2-runs.json

Only the selected five and explicitly named bosses belong to this milestone's diagnostics. All five remain Needs Testing. Do not change Ready policy, random/eligible pools, default regression scope, or all-class sweep coverage. Ordinary live party generation currently uses the Ready WoW pool, including for a CoA player; a complete CoA party must be configured explicitly.

For implementation changes, run the smallest affected tests plus the existing Ready-five checks, build, and npm run release:check. Record each mechanic's source, player/companion checks, and live evidence as it is completed.

Initial implementation and evidence limits

The first catalog fix exposes sourced active Talent entries for these five classes. Talent Essence purchase type no longer prevents an active spell from becoming a usable action. The action retains its talent-node/rank gate. DBC passive flags and rank metadata keep passive Talent nodes on the existing modifier path; missing DBC rows cannot create a new action. The other 16 classes retain their previous action catalogs.

This fixes action availability, not the complete effect of each spell. Initial Potion Toss checks cover its base targeted heal and mana payment for a player and companion. The follow-up below adds ingredient state and the Frog Bones rider; other riders and the complete Brewing loop remain work. Decapitate's target-health gate and Beheader's kill refund are separate mechanics; additional Energy conversion remains unresolved.

Ranger's primary resource is now Focus, matching its spell costs. Player and companion checks cover spending, the displayed/authoritative pool, and recovery. The existing authored 100-point pool and 10-per-second recovery are retained; this correction does not establish source-verified regeneration or implement Advantage/Elude.

Brewing has specific evidence limits beyond the node-rank source inventory: Mojo Beam's capture describes eight seconds while the selected DBC says four; Spirit Link Idol's tooltip says fourteen seconds while its DBC says 8.5. The current promoted catalog omits the Loa's Blessing empowerment payloads 802207/802208/802215/802216 and Spirit in a Bottle's referenced 504606/707172 payloads. Resolve those exact references against the local/raw cache before implementing their full behavior. Zero missing node-rank DBC rows does not establish that every mentioned payload or server rule is known.

Kickoff validation and diagnostic baseline

On 2026-10-04, 87 focused tests across 15 files pass, including the exact roster, learned Talent actions, Potion Toss delivery, Decapitate's health restriction, Ranger Focus, source scope, and classic catalog preservation. Ready-five checks pass seven game tests and twenty Python tests. The production build passes TypeScript, asset audits, bundling, compression, and bundle verification. npm run release:check passes, including untracked files. A before/after digest also confirms the other 16 CoA action catalogs are unchanged.

The targeted automated baseline uses the same five generated level-60 builds, seed 1, and Taragaman the Hungerer (ragefire-chasm/entry-11520). Each run has a 30-second limit and moves only the active player seat. Results after the Focus correction are:

Active player Outcome Elapsed seconds Boss health remaining Deaths
Guardian Time limit 30.0 80,065 0
Witch Doctor Time limit 30.0 79,292 0
Barbarian Defeated 12.6 0 0
Ranger Time limit 30.0 12,782 0
Pyromancer Time limit 30.0 14,724 0

Raw runs are local ignored artifacts at artifacts/coa-first-party/level-60/seat-1-runs.json through seat-5-runs.json. The original claim that Ranger and Pyromancer companions each cast only three times was a telemetry error. Damaging companion casts were omitted from the counter despite damage and decision events showing more activity. The corrected collector counts release presentations once per cast, including channel pulses only once. A new Hamhock healer-seat diagnostic records 19 Ranger and 17 Pyromancer companion casts. Ranger still records 32.3% Focus starvation; raw cast counts do not establish a coherent resource/state rotation. The large player-seat differences require mechanic investigation before balance changes. These low-pressure encounters provide limited evidence for tank/healer interactions.

These are explicitly scoped automated diagnostics, with no live browser playtest or balance certification in this kickoff. All five remain Needs Testing. New routine diagnostics use Stormwind Stockade: Cellblock Rush (bite-sized-stormwind-stockade) under TEST_DUNGEON_POLICY.md; record the boss selected from the run ID. Full-source Stockade campaigns require explicit selection. The Taragaman records above remain historical evidence.

Mechanics and rotation follow-up, 2026-10-05

  • coaGuardianVanguardRuntime.ts owns learned node 34417's actor-owned Vanguard state. Source spells 804383/804384 establish one stack per landed normal swing or block, ten maximum, a refreshed 60-second duration, and 2% less damage from each magic school per stack. Direct incoming spells use the current mitigation before consuming one stack. Periodic-tick consumption is unresolved and is excluded. Player and companion event hooks use the same state transition.
  • coaWitchDoctorBrewingRuntime.ts owns persistent ingredient markers and the one-ingredient capacity, raised to two by learned Mixologist node 6645. An ingredient already present may refresh; an additional ingredient at capacity fails before payment. Replacement/removal behavior is not specified by the captured evidence. Frog Bones 801663 no longer creates the importer's bogus one-second caster shield. It retains its 1.5-second cauldron pulse. Potion Toss 801661 adds the shield from global spell 802971 to its selected ally only when that caster owns an active Frog Bones marker: eight seconds, base 100, five points per level from level ten, 35% Spirit and 80% bonus healing. Other ingredient markers do not establish their unfinished Potion Toss riders.
  • coaBarbarianExecuteRuntime.ts also owns learned Beheader node 6744's exact Decapitate kill refund: 100% of maximum Energy after an effective killing hit, clamped to the pool maximum. Failed, nonlethal and unrelated hits do not refund. The additional-Energy damage conversion has no verified ratio in this slice. Its generic weapon-damage projection also needs review: separate DBC weapon effects must not be treated as two independent weapon hits.
  • Pyromancer Ignite's selected-enemy implicit target takes precedence over its DBC radius metadata. Both tree and progression variants use unit targeting; nearby enemies no longer receive the selected enemy's burn.
  • Chosen-five unit-target periodic maintenance compares ability, caster, recipient and positive remaining duration. A burn or HoT on one actor no longer blocks applying that spell to a different actor. This correction does not author speculative class priority lists or clipping windows. Mojo Beam's incidental caster aura no longer redirects its friendly unit heal to the caster; the scorer selects the injured ally and checks that ally's own HoT. An actual companion channel check verifies Mana payment and the first pulse on the injured Vanguard ally. It does not resolve Mojo Beam's duration conflict.

The companion Potion Toss rider check primes its actor-owned ingredient marker explicitly. Default healthy companion AI does not prepare its cauldron; authored ingredient preparation and selection remain a rotation gap. Loa's Brew winning one injured-ally fixture does not, by itself, establish a wrong healing priority.

Formation/Paragon, full Brewing riders and payloads, Decapitate's Energy conversion/Battle Rhythm, Ranger Advantage/Elude, Pyromancer Heat/Embers and reviewed talent allocations remain the next mechanics work. All five remain Needs Testing. Automated checks do not replace live party playtests.

The follow-up's explicitly scoped Stockade/Hamhock diagnostic retains level 60, seed 1, a 30-second limit and the same five generated builds in each seat:

Active player Outcome Elapsed seconds Boss health remaining Deaths
Guardian Time limit 30.0 80,815 0
Witch Doctor Time limit 30.0 77,898 0
Barbarian Defeated 13.6 0 0
Ranger Time limit 30.0 28,443 0
Pyromancer Defeated 27.8 0 0

Raw runs are ignored local artifacts at artifacts/coa-first-party/stockade-2026-10-05/seat-1-after.json through seat-5-after.json; seats two/four also retain before runs. The final healer-seat run records 19 Ranger and 16 Pyromancer companion casts, with Ranger still 32.3% Focus-starved. Correct source behavior can change damage and timing; these outcomes do not establish balance, authored allocations, or full-class completion. Low encounter pressure limits healer/tank conclusions. No live browser playtest was performed in this mechanics follow-up.

Focused validation passes 126 tests across 19 directly affected files, including the helper, public scorer and actual player/companion behavior checks. Ready-five compatibility passes seven Vitest and twenty Python tests. The generated runtime and UI changes are limited to two Pyromancer Ignite actions; the other twenty class records, resource profiles and triggered payloads are preserved. The final production build passes TypeScript, asset audits, bundling, static compression and release-bundle verification. npm run release:check passes, including untracked files. The canonical CoA vault note is updated separately.

Brewing integration, 2026-10-05

coaWitchDoctorBrewingAi.ts owns an authored companion preparation policy. partyRuntime.ts::choosePartySupportIntent prepares learned Frog Bones when a Brewing healer has Brewer and Potion Toss, every party member/player is at least 90% healthy, and no resurrection, dispel or engaged-enemy cast is pending. Normal readiness, Mana, target and capacity checks still precede payment. It preserves an existing full cauldron and does not refresh an existing own Frog Bones marker. This is a conservative gameplay policy, not a sourced optimal rotation. Other ingredient selection remains unfinished.

partyAbilityAi.ts projects the caster's current Brewing effects before scoring heals. Ingredient casts are excluded from the ordinary Brewing healer rotation so they cannot displace healing or repeatedly refill the cauldron. Actual idle companion tests prepare through normal selection and payment, then heal and shield an injured player with Potion Toss, without seeding an in-flight cast or priming an ingredient marker.

Splash Potion node 7128/spell 802710 is now a friendly ground action in source generation and the runtime/UI catalogs. Its DBC destination targets 87/31 and captured tooltip establish a location, 40-yard range, 10-yard radius and up to eight allies. Its base heal centers on that destination. The cast projection suppresses the importer's unconditional flattened ingredient and SLS payloads; only an owned, live Frog Bones marker adds verified 803699's reduced absorb: eight seconds, base 25 and one point per level from level 15. Player and NPC tests check nearby recipients, excluded distant allies, no inactive riders, and destination validation before payment. The player's previous radius shield branch centered on the caster; the Splash-specific path now uses the same effect-scoped ground center as its healing. Existing other spell paths retain their behavior.

Jungle Shrooms 802973's exact Spirit scaling, Fish Oil 802969's aura decoding, Bloodthistle 802975/803287's proc and 0.5-second internal cooldown, and the 803275 SLS ingredient-combination chain remain unresolved. Their raw source records are retained; missing runtime semantics do not grant every rider.

The Guardian audit identifies the next import boundary. August Vol'Jin node 4019/spell 92105 establishes 10% self mitigation while Tower or Line Formation is active, with no numeric threat multiplier. Global spells 800317 and 803130 would create self-owned aura identities coa:800317:effect:0:aura:87 and coa:803130:effect:0:aura:232, but neither action is present in the promoted tree/progression/runtime catalog. Mitigation cannot honestly use an assumed formation flag. Paragon 29969/706514 has a description conflict: the August builder changes Heavy Blow to Paragon Smash, while the promoted primary text for 706516 still describes Tower/Bastion. The later formation audit below finds compatible secondary text and child payloads. Import formation actions and preserve the source discrepancy when wiring the conditional mechanics. See the cached Guardian JSON and builder in data/coa-reference/cache/archive-5078f9ac2254/generation-fa16afec-8f11-4eab-98ab-b6441304fab7/ and global snapshot e86031775dfac7e336361087c50ca23a0a7a86c36a760c85803bee4bcdb89351.

Rotation policy is playerbots-inspired-v10-coa-brewing-preparation. The same five level-60 builds, seed 1, Hamhock and 30-second limit produce:

Active player Outcome Elapsed seconds Boss health remaining Deaths
Guardian Time limit 30.0 80,007 0
Witch Doctor Time limit 30.0 77,898 0
Barbarian Defeated 13.6 0 0
Ranger Time limit 30.0 28,599 0
Pyromancer Defeated 24.8 0 0

The Guardian-seat companion records one naturally selected Frog Bones cast. Raw evidence is preserved separately at ignored artifacts/coa-first-party/stockade-integration-2026-10-05/seat-1.json through seat-5.json. Encounter pressure is low; the healer deals substantial damage, and these results establish neither balance nor a complete healing rotation. All five remain Needs Testing. No live browser playtest was performed.

Focused validation passes 37 tests across eight directly affected files; Ready-five compatibility passes seven Vitest and twenty Python tests. The new generated catalog change is one Witch Doctor Splash action in each runtime/UI catalog; the other twenty class records, resource profiles and triggered payloads are preserved. No recrawl or download was needed. The final production build passes TypeScript, asset audits, bundling, static compression and release-bundle verification. npm run release:check passes, including untracked files; the canonical CoA vault note is updated separately.

Decapitate strike integration and Guardian audit, 2026-10-05

coaBarbarianWeaponDamageRuntime.ts projects only tree node 5744/spell 804414 as one normalized weapon strike. The imported effects previously emitted two independent damage events. The August Vol'Jin tooltip gives the formula: 27 + 2.2 * (weapon mean + attack power / 14 * normalized speed). Explicit equipped-item classification supplies the standard normalized speed: 3.3 seconds for two-handed melee weapons, 1.7 for daggers, and 2.4 for other one-handed melee weapons. Actual swing speed is used only to undo the existing weapon-DPS conversion. An unknown weapon classification retains the imported fallback.

The helper is used before player execution in combatStore.ts, companion execution in partyRuntime.ts, companion scoring in partyAbilityAi.ts, and active-seat scoring in benchmark/benchmarkController.ts. Applying it repeatedly preserves a single strike. It retains identity, cost, targeting, the below-35% health gate, and Beheader's successful-kill refund. The additional Energy conversion ratio remains unknown and is not implemented.

The historical generic AzerothCore weapon-effect sequence adds the flat bonus before applying the percentage, which would also multiply 27. The custom CoA server script is unavailable; this projection follows the explicit CoA tooltip's flat bonus outside the percentage. This source interpretation remains recorded in the helper and does not claim verification against the live server.

The Guardian audit now distinguishes acquisition from payload reconciliation. Tower 800317 and Line 803130 carry trainer source 6, levels 4/20, but lack a current tree node or ranked progression chain. They need an explicit rankless trainer import path and formation-specific effect handling. No formation state was seeded. Paragon stack spell 706516's secondary field 187 matches the August Heavy Blow/Paragon Smash description, and children 802629/803432 support its damage and block/Brace effects. The older primary Tower/Bastion description is preserved as a conflict. Exact IDs, raw-field provenance, modifiers and remaining acquisition boundaries are in docs/COA_GUARDIAN_FORMATION_AUDIT_2026-10-05.md.

Rotation policy is playerbots-inspired-v11-coa-decapitate-strike. The explicitly selected five builds run at level 60, seed 1, with a 30-second limit against Cellblock Rush's catalog-template boss, Hamhock (bite-sized-stormwind-stockade/entry-1717):

Active player Outcome Elapsed seconds Boss health remaining Deaths
Guardian Time limit 30.0 80,007 0
Witch Doctor Time limit 30.0 77,898 0
Barbarian Defeated 12.8 0 0
Ranger Time limit 30.0 29,396 0
Pyromancer Defeated 24.8 0 0

These are isolated headless boss-room diagnostics, not a live dungeon clear. The boss identity comes from the registered Cellblock Rush template; a fresh live run can select a different boss. Raw configs/results are ignored local artifacts at artifacts/coa-first-party/stockade-decapitate-2026-10-05/. The final Barbarian active-seat scorer chooses other attacks in this run; its Decapitate count is zero. Deterministic regression fixtures separately prove one correctly calculated damage event through actual player and NPC casts. Damage/selection changes do not certify balance, and encounter pressure remains too low to establish tank/healer completeness. All five remain Needs Testing.

Focused validation passes 22 tests across five directly affected files, including the actual player/NPC strike checks and existing execute/Beheader regressions. Ready-five compatibility passes seven Vitest and twenty Python tests. This pass changes no generated catalog records or readiness pools. The final production build passes TypeScript, asset audits, bundling, static compression and release-bundle verification. npm run release:check passes, including untracked files; the canonical CoA vault note is updated separately.

Guardian formations and Paragon integration, 2026-10-05

Tower Formation 800317 and Line Formation 803130 now have an explicit rankless trainer import path in coaAbilityCatalog.ts, constrained to the two sourced Guardian/class-18 rows with trainer source 6, valid levels and matching DBC identities. They learn at levels 4 and 20 through the game's existing automatic level-learning model. No tree grant or named trainer is invented. The generated runtime and UI catalog changes are limited to Guardian records.

coaGuardianFormationRuntime.ts replaces the flattened source effects with one owned self aura per cast. Tower gives +10 percentage points of block, adds half of the actual shield item's armor and reduces outgoing damage by 10%. Line adds 15% movement speed and reduces roots by 25%. Aura 232/misc 7 identifies Root; the broader tooltip wording remains a source conflict, so other control types retain their duration. Footman's Calling node 4019 adds 10% taken-damage reduction only while an own live form is active. Projection uses current talent ranks, equipment and health, preventing borrowed/expired markers and recomputing shield armor after equipment changes. No numeric threat grant is assumed. Switching replaces the other form through an authored exclusive group; source categories 708/709 do not prove exclusivity. Toggle-off remains unfinished.

coaGuardianParagonRuntime.ts follows August Vol'Jin node 29969/706514, 706516's compatible secondary text and linked payloads. Heavy Blow adds three stacks on successful cast; a block adds one with a 500 ms stack-trigger internal cooldown. Stacks last ten seconds and cap at ten. Readiness 707138 grants no block bonus. While ready, Heavy Blow's existing action slot, identity, cost, talent gate and cooldown project to Paragon Smash: 144 + 37% AP in an 8-yard self circle, confirmed by local SpellRadius.dbc row 14. A successful Smash creates the separate ten-second +10-point block buff with five block charges. Each block during that buff consumes a charge and reduces an active Brace cooldown by two seconds. Companion authority and its mirrored member receive the same reduction. No unverified stack-consumption/reset rule is introduced; a qualifying event can reestablish readiness after its previous window expires. The stale primary Tower/Bastion text remains documented in the source audit.

Player execution, companion execution/scoring, active-seat benchmarking and HUD use the shared projection. The HUD displays Smash in the Heavy Blow slot during readiness. Both player and companion movement consume owned Line speed. Vanguard companions prepare learned Tower through ordinary readiness, targeting and resource payment and preserve an existing Line. Formation preparation respects nextActionAt, so a future preparation decision does not suppress normal attacks. Cast/block fixtures prove player and companion paths; they use explicit block-probability fixtures to make combat outcomes deterministic.

The ready-Smash priority is an authored rotation policy: priority 7,500 only for a Vanguard tank at or above 55% health; injured, unknown-health and other actors retain the existing fallback preference. The public companion scorer uses ordinary learned, ready candidates and chooses Smash over routine Ballad maintenance. Existing low-health mitigation and urgent reactive taunt/interrupt scores remain ahead of it. This is a gameplay preference, not a source-derived optimal rotation.

Rotation policy is playerbots-inspired-v12-coa-guardian-formations-paragon. The generated five builds at level 60, seed 1, with a 30-second limit against Cellblock Rush's catalog-template Hamhock (bite-sized-stormwind-stockade/entry-1717) produce:

Active player Outcome Elapsed seconds Boss health remaining Deaths
Guardian Time limit 30.0 81,106 0
Witch Doctor Time limit 30.0 76,687 0
Barbarian Defeated 12.8 0 0
Ranger Time limit 30.0 23,870 0
Pyromancer Defeated 24.8 0 0

Each companion-Guardian seat records one naturally selected Tower cast. The active-player benchmark records no Tower cast; manual player casting is covered by actual cast fixtures and the browser diagnostic. These are isolated headless diagnostics at ignored artifacts/coa-first-party/stockade-guardian-2026-10-05/, not live dungeon clears. The role-weighted Guardian allocation does not learn Paragon/Heavy Blow, so these five results do not establish Smash selection. Incoming damage is low; all five remain Needs Testing and no random/readiness pool changed.

Focused validation passes 66 unique tests across fifteen directly affected CoA and input files, including actual player/companion formation and Paragon casts, incoming root handling, shield armor/Footman's Calling, block charges/Brace reduction, unrestricted companion scoring and prior Brewing/Splash/weapon-strike paths. Ready-five compatibility passes seven Vitest and twenty Python tests. Avatar checks pass 56 tests across eleven files. Narrow compatibility checks for the shared workspace's boss guide, disarm metadata/runtime and extra-attack helper pass seventeen tests; compatibility fixes preserve those existing behaviors.

The final production build passes TypeScript, asset audits, Vite bundling, static compression and release-bundle verification. During verification, concurrent enemy-runtime changes briefly duplicated/removed their interface fields and concurrent bootstrap runs collided on an exclusive object write; final validation uses the successful completed build. The final creature weapon state declarations share one typed interface, preserving runtime behavior.

The isolated live harness uses an explicit, runtime-normalized level-60 Guardian variant learning Paragon and Heavy Blow alongside Footman's Calling, Brace and Vanguard's Shield. It resolves the public catalog preloader and resource API's minified export aliases from source-matched bundle AST, loads the five class catalogs before entry, and verifies their resource profiles. Switching characters cannot preload a whole party persistently because the app reloads its memory when the entered character changes. The harness therefore installs a scoped pre-entry PartyBridge initialization fixture, calls the normal initializer and substitutes the prepared companions before actor synchronization. It leaves readiness/random pools unchanged and seeds no combat/proc state. A selectable first-party preset in the game UI remains separate work.

Live entry exposed two startup gaps and supplied the final regressions. combatRotation.ts::precombatPreparationEffects now excludes exact Guardian formation spells from generic free aura preparation: initial entry has no form, player casting pays normally, companion preparation casts normally, and later preparation cannot add a second raw form or replace a chosen Line. actionBindings.ts::normalizeActionBindings separates default assignment order from an optional explicit allowlist. combatStore.ts::initializeCharacter validates saved slots against all nonpassive class actions, then retains the existing unlearned-talent filter. The learned Heavy Blow talent action survives entry in its saved slot, while unlearned and unknown actions are rejected.

The shared dist/assets directory became locked during rebuild. Final verification uses an isolated output at artifacts/coa-first-party/stockade-guardian-2026-10-05/dist-final: prebuild and asset audits passed, then the same npm build command ran with lifecycle hooks skipped and an explicit output override; compression and release-bundle checks ran explicitly against that output. The live harness accepts a confined --dist path and records the directory/bundle assets actually tested.

The final 180-second browser diagnostic completes on the isolated production bundle at artifacts/playtest/coa-guardian-formations/20261006-011259958/. Normal offline creation, Button Assignments, Cellblock selection/download and Tank entry are preserved; the exact companion composition is the explicitly recorded pre-entry fixture. Entry verifies level 60, all five catalogs, no seeded formation and the saved Heavy Blow R2 slot. Real action-bar clicks cast Tower, Line and Tower again, each leaving only its own projected form. The first Tower reduces Energy from 100 to 83; this legal build's cost modifiers resolve the base 20 cost to 17, with normal regeneration between later casts.

The fresh run selects Dextren Ward (entry-1663, creature-79116), confirmed by its intro card. Screenshot 02 is a countdown overlay because the initial detachment wait raced the intro's appearance; screenshots 03/04/06 provide the actual in-dungeon evidence. The route explores about 8 m near the entrance, with 5.74 m net displacement, full player/party health and no observed boss actor. It records only the three formation casts, no natural Paragon ready/Smash marker and no healing/combat pressure. It does not establish a clear, balanced party, live Smash proc or complete tank/healer rotation. The actual proc/block/ Brace and unmasked scorer coverage comes from the focused regression fixtures.

Reviewed the roster body/shield capture and in-dungeon captures: the player body and equipped shield/weapon silhouettes render, while the clustered party and large temporary gold effects obscure some companions. Heavy Blow remains visible in its saved R2 slot at the endpoint. Browser exceptions are zero; one console 404 is unclassified, with no failed requests or HTTP errors in the harness's recorded request scope. These visual and request limitations remain in the live evidence. All five stay Needs Testing. The source/cast fixes, scoped diagnostic harness, milestone, source audit and canonical CoA vault note are updated together.

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