From 9919faab4aa667cad4b4156bfa46c2d9f2113e40 Mon Sep 17 00:00:00 2001 From: Trevor Date: Fri, 17 Jul 2026 06:22:50 -0700 Subject: [PATCH] Document Phase 2A1 runtime baseline evidence and open decisions. Capture bounded PIE observations for ASC/legacy divergence, HUD, and blocked ability/multiplayer paths without implementing fixes. Co-authored-by: Cursor --- .../Phase2/00-Phase2A-RuntimeBaseline.md | 212 ++++++++++++++++++ .../Phase2/01-Phase2A-RuntimeEvidenceIndex.md | 52 +++++ .../Phase2/02-Phase2A-OpenDecisions.md | 37 +++ 3 files changed, 301 insertions(+) create mode 100644 Documentation/Phase2/00-Phase2A-RuntimeBaseline.md create mode 100644 Documentation/Phase2/01-Phase2A-RuntimeEvidenceIndex.md create mode 100644 Documentation/Phase2/02-Phase2A-OpenDecisions.md diff --git a/Documentation/Phase2/00-Phase2A-RuntimeBaseline.md b/Documentation/Phase2/00-Phase2A-RuntimeBaseline.md new file mode 100644 index 00000000..cd2d7cea --- /dev/null +++ b/Documentation/Phase2/00-Phase2A-RuntimeBaseline.md @@ -0,0 +1,212 @@ +# Phase 2A1 — Runtime Baseline + +| Field | Value | +|---|---| +| Status | Draft | +| Date | 2026-07-17 | +| Engine | Unreal Engine 5.8 | +| Git commit | `aa0058a0` | +| Map | `/Game/_Main/Levels/Testing/Test01` | +| Primary PIE mode | `PlayMode_InEditorFloating` (required for Slate UMG drive) | +| Authorization | Phase 2A1 evidence-only; no asset/config/source mutation; no commit | + +## Continuity gate + +| Check | Result | +|---|---| +| `git rev-parse --short HEAD` | `aa0058a0` | +| `git status --short` | empty | +| `git diff --name-only` | empty | +| `git diff --cached --name-only` | empty | +| `IsPIERunning` (start) | false | +| Current level | `/Game/_Main/Levels/Testing/Test01` | +| Selection | empty (Pass 11 continuity; not restored) | +| Test01 dirty | false | + +## Entry path + +PIE on loaded `Test01` → `WBP_CharacterSelect` → character button → Start. + +- In-viewport PIE: Slate cannot see UMG character-select buttons. +- Floating PIE: Slate sees PALADIN / WIZARD / CLERIC / AMAZON / Start. +- Start click produces Blueprint runtime warning on `GM_Dungeoneer.PlayerFirstSpawn` (`Accessed None` on `K2Node_Event_PlayerController`) but pawn still spawns and is possessed. + +--- + +## 1. Test execution summary + +| Test ID | Mode | Character | Players | Result | Confidence | Blocking issue | +|---|---|---|---|---|---|---| +| RT-001 | 1P Floating PIE | Amazonian | 1 | Observed Runtime Behavior | High | None | +| RT-002 | 1P Floating PIE | Paladin | 1 | Partial — init divergence observed; ability cost path not exercised | High (init) / Tool Limitation (activation) | Enhanced Input not injectable via Slate `PressKey` | +| RT-003 | 1P Floating PIE | Paladin (session) | 1 | Blocked by Test Environment / Tool Limitation | High | No movement/ability input injection; cannot reach pickups without moving actors | +| RT-004A | 1P Floating PIE | Amazonian | 1 | Tool Limitation | High | Enhanced Input activation unreachable via available tools | +| RT-004B | — | Amazonian | — | Blocked by Test Environment | High | No non-mutating interrupt action available without ability input | +| RT-005 | 1P Floating PIE | Paladin | 1 | Tool Limitation | High | Same Enhanced Input limitation | +| RT-006 | 1P Floating PIE | Prefer Amazonian | 1 | Blocked by Missing Implementation / Test Environment | High | Enemy attack Missing; no connected player-damage source without ability input | +| RT-007 | 2P listen PIE | — | — | Blocked by Test Environment / Tool Limitation | High | `playNumberOfClients=1`; `StartPIE` has no player-count; config save unauthorized | +| RT-008 | 2P | — | — | Blocked by Test Environment / Tool Limitation | High | Depends on RT-007 | +| RT-009 | 2P | — | — | Blocked by Test Environment / Tool Limitation | High | Depends on RT-007 | +| RT-010 | 2P | — | — | Blocked by Test Environment / Tool Limitation | High | Depends on RT-007 | +| RT-011 | 1P Floating PIE | Paladin session / enemy actors | 1 | Observed Runtime Behavior (boundary) | Medium–High | Ability damage path not exercised (input limitation) | + +--- + +## 2. Initialization matrix + +| Role/character | ASC H/MaxH | ASC M/MaxM | ASC S/MaxS | Legacy health | Legacy mana | Legacy stamina | Active GEs | Granted GAs | +|---|---|---|---|---|---|---|---|---| +| Authority / Amazonian (RT-001) | 75 / 100 | 25 / 50 | 0 / 0 | DEPRECATED_CurrentHealth=0 / MaxHealth=0 | CurrentMana=0 / MaxMana=0 | CurrentStamina=85 / MaxStamina=100 | none | none | +| Authority / Paladin (RT-002 init) | 75 / 100 | 25 / 50 | 0 / 0 | CurrentHealth=0 / MaxHealth=0 | CurrentMana=100 / MaxMana=100 | CurrentStamina=0 / MaxStamina=0 | none | none | +| Remote client | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | + +### RT-001 detail (Amazonian) + +| Field | Actual | +|---|---| +| ASC Owner actor | `BP_PlayerState_C_0` (ASC component on PlayerState) | +| ASC Avatar | Player pawn resolves same ASC via character GetASC path (inspector accepts pawn) | +| Active Gameplay Effects | `[]` | +| Granted Gameplay Abilities | `[]` | +| IsDead | false | +| CurrentlyAttacking | false | +| Net role | ROLE_Authority | +| HUD actor | `WBP_PlayerHUD_C_0` present | +| Overlay classes on HUD | `WBP_Overlay`, `BP_OverlayWidgetController` assigned | +| Overlay instances (Slate) | Two progress bars visible after spawn; no stamina widget text/bar observed | +| Legacy HUD receiver | Not observed to display values (no visible numeric legacy HUD) | +| Expected static ASC | Health=75, MaxHealth=100, Mana=25, MaxMana=50, Stamina possibly zero — **Confirmed** | +| Expected legacy sync | Potentially differ — **Confirmed diverge**; Amazonian legacy health/mana are **0** | + +### CDO defaults (read-only; explains runtime zeros) + +| Class | CurrentHealth | MaxHealth | CurrentMana | MaxMana | CurrentStamina | MaxStamina | +|---|---|---|---|---|---|---| +| `BP_PlayerCharacterBase` CDO | 0 | 0 | 0 | 0 | 0 | 0 | +| `Player_Amazonian` CDO | 0 | 0 | 0 | 0 | 85 | 100 | +| `Player_Paladin` CDO | 0 | 0 | 100 | 100 | 0 | 0 | +| Paladin Ability004ManaCost CDO | — | — | cost **0** | — | — | — | + +--- + +## 3. HUD matrix + +| Role/character | Overlay instances | Health display | Mana display | Stamina display | Legacy HUD behavior | Respawn behavior | +|---|---|---|---|---|---|---| +| Amazonian SP | 2 progress bars observed in floating PIE | Present (ASC Overlay path) | Present (ASC Overlay path) | None observed | No visible legacy numeric HUD; `UpdatePlayerHUD` not validated by value change | Not observed (RT-006 blocked) | +| Paladin SP | 2 progress bars observed | Present | Present | None observed | Same | Not observed | +| Remote client | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | + +--- + +## 4. Ability execution matrix + +| Test | Input role | Server RPC | Multicast | Notify execution roles | Gameplay execution role | Cost role | Cleanup result | +|---|---|---|---|---|---|---|---| +| RT-002 Paladin 004 | Attempted Slate `PressKey` Four + LMB; CurrentlyAttacking remained false | Not observed | Not observed | Not observed | Not observed | Not observed (CDO cost=0 anyway) | Not applicable | +| RT-004 Amazonian 001 | Tool Limitation — Enhanced Input not driven by Slate | Not observed | Not observed | Not observed | Not observed | Not applicable (no mana cost) | Not observed | +| RT-005 Paladin 001 | Tool Limitation | Not observed | Not observed | Not observed | Not observed | Not observed | Not observed | +| RT-008 remote | Blocked (no 2P) | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | + +**Input tooling note:** `IA_Ability_001` = LeftMouseButton; `IA_Ability_004` = Four. Slate `PressKey` returns true but does not change `CurrentlyAttacking` or resources. OS-level input injection was blocked by environment policy. Classified **Tool Limitation**. + +--- + +## 5. Damage/death matrix + +| Source | Target | Damage receiver | Health source changed | Death trigger | Replication | Respawn | Result | +|---|---|---|---|---|---|---|---| +| Enemy attack | Player | Not applicable | Not observed | Not observed | Not observed | Not observed | Blocked by Missing Implementation (enemy attack Missing per Phase 1) | +| Player ability ApplyDamage | Enemy / other player | Not observed | Not observed | Not observed | Not observed | Not observed | Tool Limitation (ability input) + RT-009 blocked (no 2P) | +| Debug / temporary damage actor | — | — | — | — | — | — | Not authorized | + +--- + +## 6. Pickup matrix + +| Pickup | Present in Test01 | Overlap role | GE applications | Server destruction | Client destruction | ASC change | Legacy change | Result | +|---|---|---|---|---|---|---|---|---| +| BP_HealthPotion | Yes (1) | Not observed | Not observed | Not observed | Not applicable (1P) | Not observed | Not observed | Blocked — cannot walk to overlap without input / cannot move actors | +| BP_ManaPotion | Yes (1) | Not observed | Not observed | Not observed | Not applicable | Not observed | Not observed | Blocked (same) | +| BP_ManaCrystal | Yes (1) | Not observed | Not observed | Not observed | Not applicable | Not observed | Not observed | Blocked (same) | +| BP_OrangeSlice | Yes (1) | Not observed | Not observed | Not observed | Not applicable | Not observed | Not observed | Blocked (same) | +| BP_SmallGoldPickUp | Yes (3) | Not observed | Not applicable (AddGold no-op) | Not observed | Not applicable | Not applicable | Not applicable | Blocked (same) | +| Runtime `bReplicates` (HealthPotion) | — | — | — | — | — | — | — | **false** (Observed Runtime Behavior; confirms Phase 1) | + +--- + +## 7. Static-versus-runtime reconciliation + +| Phase 1 finding | Runtime result | Confirmed | Refined | Contradicted | New limitation | +|---|---|---|---|---|---| +| ASC Health 75 / Max 100 / Mana 25 / Max 50 | Amazonian + Paladin match | Yes | — | — | — | +| Stamina ASC may be zero | ASC Stamina/MaxStamina = 0/0 | Yes | — | — | — | +| No granted project GAs / no default GE | Empty granted + active effects | Yes | — | — | — | +| Legacy and ASC not synchronized | Amazonian legacy H/M=0 vs ASC 75/25; Paladin legacy Mana 100 vs ASC 25 | Yes | Amazonian combat legacy health starts at **0** (CDO) | — | Death/combat using legacy health is immediately at death threshold risk | +| Overlay Health/Mana present; no stamina widget | Two progress bars; no stamina UI | Yes | — | — | — | +| Pickup `bReplicates=false` | HealthPotion runtime false | Yes | — | — | — | +| Enemy ASC on character | Component present (`AbilitySystemComponent`, `AttributeSet`) | Yes | AbilitySystemInspector cannot query attributes (`does not have an AbilitySystemComponent`) — likely InitAbilityActorInfo / interface exposure gap | — | Inspector Tool Limitation vs true missing ASC | +| Enemy chase/attack Missing | No outbound enemy damage available for RT-006 | Yes | — | — | — | +| AnimNotify-driven gameplay authority | Not exercised | — | — | — | Enhanced Input injection Tool Limitation | +| Char-select server spawn path | Floating PIE Start → spawn + possess works | Yes | GM `PlayerFirstSpawn` emits Accessed None warning | — | — | +| 2-client PIE via editor | `playNumberOfClients=1`, Standalone | — | — | — | Cannot raise clients without unauthorized config save | + +--- + +## Per-test records (abbrev) + +### RT-001 — Single-player initialization (Amazonian) + +- **Date:** 2026-07-17 +- **PIE mode:** Floating, 1 player, Standalone +- **Actions:** StartPIE → AMAZON → Start +- **Pass/fail:** Observed Runtime Behavior (matches ASC expected; legacy divergence stronger than “may differ”) +- **Cleanup:** StopPIE + +### RT-002 — Legacy vs ASC divergence (Paladin) + +- **Actions:** Restart PIE → PALADIN → Start; record resources; attempt Ability 004 via Slate key +- **Actual:** Init divergence confirmed (ASC Mana 25 vs legacy Mana 100). Ability activation not achieved. Paladin Ability004ManaCost CDO = 0. +- **Classification:** Observed Runtime Behavior (init) + Tool Limitation (cost mutation path) +- **Cleanup:** session continued then StopPIE + +### RT-003 — Consumables + +- **Classification:** Blocked by Test Environment / Tool Limitation +- **Note:** All four GE pickups + three gold pickups exist in map; overlap not reachable without movement input or unauthorized actor moves. + +### RT-004 / RT-005 — Ability chains + +- **Classification:** Tool Limitation (Enhanced Input) + +### RT-006 — Damage/death/respawn + +- **Classification:** Blocked by Missing Implementation (enemy attack) and Tool Limitation (player ability damage) + +### RT-007–RT-010 — Two-player + +- **Read:** `playNumberOfClients=1`, `playNetMode=PIE_Standalone` +- **Attempt:** Non-persisting UI set not achieved via available Slate surface during session +- **Classification:** Blocked by Test Environment / Tool Limitation +- **Open environment decision:** how to enable 2-client PIE without config persistence (see `02-Phase2A-OpenDecisions.md`) + +### RT-011 — Enemy boundary + +- **Observed:** Enemy actors present; ASC + AttributeSet components present; `bCanBeDamaged=true`; AbilitySystemInspector attribute query fails; no player→enemy damage exercised +- **Classification:** Observed Runtime Behavior (component presence / inspector failure) + incomplete damage-path validation + +--- + +## Tool limitations (session) + +1. In-viewport PIE: Slate cannot drive `WBP_CharacterSelect`. +2. Floating PIE required for UMG button clicks. +3. Slate `PressKey` / `Click` on viewport does not trigger Enhanced Input actions. +4. OS-level input injection blocked by environment policy. +5. `StartPIE` has no `NumberOfPlayers`; raising clients requires Play settings mutation that saves (unauthorized). +6. Enemy ASC component exists but AbilitySystemInspector rejects actor as having no ASC. +7. Enemy `IsDead` property not readable via ObjectTools on runtime instance (name/exposure). + +## Mutation confirmation + +No Unreal assets, source, configuration, maps, plugins, or persistent editor settings were modified. Only new Markdown under `Documentation/Phase2/` is intended to change. diff --git a/Documentation/Phase2/01-Phase2A-RuntimeEvidenceIndex.md b/Documentation/Phase2/01-Phase2A-RuntimeEvidenceIndex.md new file mode 100644 index 00000000..9f052f1e --- /dev/null +++ b/Documentation/Phase2/01-Phase2A-RuntimeEvidenceIndex.md @@ -0,0 +1,52 @@ +# Phase 2A1 — Runtime Evidence Index + +| Field | Value | +|---|---| +| Status | Draft | +| Date | 2026-07-17 | +| Git commit | `aa0058a0` | +| Engine | UE 5.8 | +| Map (unless noted) | `/Game/_Main/Levels/Testing/Test01` | + +Index of material runtime observations. Evidence classification uses Phase 2A1 vocabulary. + +| Evidence ID | Test ID | Player role | Character | Execution mode | Observation | Observed values | Classification | Confidence | +|---|---|---|---|---|---|---|---|---| +| RE-2A1-001 | RT-001 | Authority / local | Amazonian | 1P Floating PIE | ASC attributes at possession | Health 75/75, MaxHealth 100, Mana 25/25, MaxMana 50, Stamina 0, MaxStamina 0 | Observed Runtime Behavior | High | +| RE-2A1-002 | RT-001 | Authority / local | Amazonian | 1P Floating PIE | No active GEs | `GetActiveEffects` = [] | Observed Runtime Behavior | High | +| RE-2A1-003 | RT-001 | Authority / local | Amazonian | 1P Floating PIE | No granted GAs | `GetGrantedAbilities` = [] | Observed Runtime Behavior | High | +| RE-2A1-004 | RT-001 | Authority / local | Amazonian | 1P Floating PIE | Legacy health/mana uninitialized | DEPRECATED_CurrentHealth=0, MaxHealth=0, CurrentMana=0, MaxMana=0 | Observed Runtime Behavior | High | +| RE-2A1-005 | RT-001 | Authority / local | Amazonian | 1P Floating PIE | Legacy stamina initialized | CurrentStamina=85, MaxStamina=100 | Observed Runtime Behavior | High | +| RE-2A1-006 | RT-001 | Authority / local | Amazonian | 1P Floating PIE | Death/attack flags | IsDead=false, CurrentlyAttacking=false | Observed Runtime Behavior | High | +| RE-2A1-007 | RT-001 | Authority / local | Amazonian | 1P Floating PIE | ASC lives on PlayerState; pawn GetASC works | PS `AbilitySystemComponent`; pawn attribute query returns same set | Observed Runtime Behavior | High | +| RE-2A1-008 | RT-001 | Authority / local | Amazonian | 1P Floating PIE | Overlay HUD visible | Two Slate progress bars after spawn; no stamina widget | Observed Runtime Behavior | High | +| RE-2A1-009 | RT-001 | Authority / local | Amazonian | 1P Floating PIE | WBP_PlayerHUD spawned | `WBP_PlayerHUD_C_0`; Overlay classes assigned | Observed Runtime Behavior | High | +| RE-2A1-010 | RT-001 | Authority / local | Amazonian | 1P Floating PIE | Char-select Start spawn warning | `GM_Dungeoneer` PlayerFirstSpawn Accessed None on PlayerController node; pawn still spawned | Reproduced Baseline Defect | High | +| RE-2A1-011 | RT-001 | — | Amazonian CDO | Read-only CDO | Explains legacy zeros | Amazonian CDO H/M=0/0; Stamina 85/100 | Observed Implementation (defaults) | High | +| RE-2A1-012 | RT-002 | Authority / local | Paladin | 1P Floating PIE | ASC init same as Amazonian | H75/100 M25/50 S0/0; no GEs/GAs | Observed Runtime Behavior | High | +| RE-2A1-013 | RT-002 | Authority / local | Paladin | 1P Floating PIE | Legacy mana diverges from ASC | Legacy Mana 100/100 vs ASC Mana 25/50; Health 0/0 | Observed Runtime Behavior | High | +| RE-2A1-014 | RT-002 | Authority / local | Paladin | 1P Floating PIE | Ability004 mana cost default | DEPRECATED_Ability004ManaCost = 0 (instance + CDO) | Observed Runtime Behavior | High | +| RE-2A1-015 | RT-002 | Authority / local | Paladin | 1P Floating PIE | Slate key does not activate ability | PressKey Four/LMB; CurrentlyAttacking stayed false; resources unchanged | Tool Limitation | High | +| RE-2A1-016 | RT-003 | — | — | 1P map inventory | Pickups present without placement | 1× HealthPotion, ManaPotion, ManaCrystal, OrangeSlice; 3× SmallGold | Observed Runtime Behavior | High | +| RE-2A1-017 | RT-003 | — | HealthPotion | Runtime property | Pickup does not replicate | `bReplicates=false`, role Authority | Observed Runtime Behavior | High | +| RE-2A1-018 | RT-003 | — | — | — | Overlap/GE apply not executed | Movement/input unavailable | Blocked by Test Environment / Tool Limitation | High | +| RE-2A1-019 | RT-004 | — | Amazonian | — | Ability 001 chain not executed | Enhanced Input not injectable | Tool Limitation | High | +| RE-2A1-020 | RT-004B | — | Amazonian | — | Interrupt test not run | Depends on ability play + existing interrupt action | Blocked by Test Environment | High | +| RE-2A1-021 | RT-005 | — | Paladin | — | Ability 001 chain not executed | Same input limitation | Tool Limitation | High | +| RE-2A1-022 | RT-006 | — | — | — | No connected player damage source used | Enemy attack Missing; ability damage unreachable | Blocked by Missing Implementation / Tool Limitation | High | +| RE-2A1-023 | RT-007 | — | — | Editor PlayIn settings read | Multi-client not enabled | playNumberOfClients=1; playNetMode=PIE_Standalone | Blocked by Test Environment / Tool Limitation | High | +| RE-2A1-024 | RT-008 | — | — | — | Not run | Depends on RT-007 | Blocked by Test Environment / Tool Limitation | High | +| RE-2A1-025 | RT-009 | — | — | — | Not run | Depends on RT-007 | Blocked by Test Environment / Tool Limitation | High | +| RE-2A1-026 | RT-010 | — | — | — | Not run | Depends on RT-007 | Blocked by Test Environment / Tool Limitation | High | +| RE-2A1-027 | RT-011 | Authority | BP_Enemy_Skeleton ×2 | 1P PIE | Enemy ASC components present | AbilitySystemComponent + AttributeSet refs non-null; bCanBeDamaged=true; bReplicates=true | Observed Runtime Behavior | High | +| RE-2A1-028 | RT-011 | Authority | BP_Enemy_Skeleton | 1P PIE | AbilitySystemInspector cannot read enemy attributes | Error: actor does not have an AbilitySystemComponent | Tool Limitation / possible InitAbilityActorInfo gap | Medium | +| RE-2A1-029 | RT-011 | — | BP_Enemy_Skeleton | 1P PIE | Enemy IsDead not readable via ObjectTools | Property read failed (`isDead`) | Tool Limitation | Medium | +| RE-2A1-030 | RT-011 | — | — | — | Player→enemy damage not observed | Ability input blocked | Inconclusive for ApplyDamage reception | Medium | +| RE-2A1-031 | Gate | — | — | Editor | Floating PIE required for UMG | In-viewport PIE: Slate Windows empty for char-select | Tool Limitation | High | +| RE-2A1-032 | Gate | — | — | Editor | CommonUI viewport warning | Log: CommonUI without CommonGameViewportClient | Observed Runtime Behavior | Medium | + +## Cross-links + +- Procedures and matrices: `00-Phase2A-RuntimeBaseline.md` +- Open decisions: `02-Phase2A-OpenDecisions.md` +- Phase 1 static context: `Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md` (read-only) diff --git a/Documentation/Phase2/02-Phase2A-OpenDecisions.md b/Documentation/Phase2/02-Phase2A-OpenDecisions.md new file mode 100644 index 00000000..fbf10566 --- /dev/null +++ b/Documentation/Phase2/02-Phase2A-OpenDecisions.md @@ -0,0 +1,37 @@ +# Phase 2A1 — Open Decisions + +| Field | Value | +|---|---| +| Status | Draft | +| Date | 2026-07-17 | +| Git commit | `aa0058a0` | +| Rule | Options listed only — **none selected** in this batch | + +Decisions that remain open after Phase 1 static archaeology plus Phase 2A1 runtime evidence. Do not treat this document as an approved architecture contract. + +| Decision | Static evidence | Runtime evidence | Options | Blocking unknown | Required approval | +|---|---|---|---|---|---| +| Canonical health source of truth | Dual pools: ASC `Health`/`MaxHealth` vs `DEPRECATED_CurrentHealth`/`MaxHealth`; combat uses legacy; potions use ASC | ASC init 75/100 confirmed; Amazonian/Paladin legacy Current/Max Health = **0** at spawn; Overlay binds ASC | A) ASC only immediately B) Legacy only during reconstruction C) ASC canonical with temporary legacy mirror D) Character-specific transitional policy | Whether death/combat must keep working on legacy-zero characters before mirror | Phase 2A2 architecture contract | +| Canonical mana source of truth | Abilities use `DEPRECATED_*Mana` + `FCanUseMana`; potions modify ASC Mana | ASC Mana 25/50; Paladin legacy Mana 100/100; Amazonian legacy Mana 0/0; Paladin Ability004ManaCost CDO = 0 | A) ASC only B) Legacy only during reconstruction C) ASC + mirror D) Per-ability migration | Ability cost mutation path not runtime-proven (input Tool Limitation) | Phase 2A2 | +| Canonical stamina source of truth | ASC Stamina attrs present; no stamina widget; no stamina pickup | ASC Stamina 0/0; Amazonian legacy stamina 85/100; Paladin legacy stamina 0/0 | A) ASC only B) Legacy only C) Defer stamina until after health/mana D) Remove stamina until redesigned | Whether stamina is required for Phase 2B ability framework | Phase 2A2 + design | +| Temporary legacy mirror during reconstruction | No sync code found | Confirmed divergent values at spawn; Overlay shows ASC while combat vars are legacy zeros | A) One-way ASC→legacy B) One-way legacy→ASC C) Bidirectional during transition D) No mirror; switch cutover | Which systems still read legacy at runtime (death path not executed) | Phase 2A2 | +| Where damage must enter shared framework | Player ApplyDamage + legacy health; potions via GE; enemy inbound Missing | Damage path not exercised (no enemy attack; ability input Tool Limitation) | A) Gameplay Effect Execution only B) Shared native damage API writing ASC C) Keep ApplyDamage adapter to ASC D) Hybrid | Runtime authority of ApplyDamage vs GE still unverified | Phase 2A2 after RT damage evidence | +| Where death threshold evaluation must occur | Amazonian AnyDamage → subtract legacy health → ≤0 PlayerDeath | Not observed; legacy health already 0 at spawn implies immediate death-threshold risk if AnyDamage fires | A) ASC Health ≤0 B) Legacy ≤0 C) Shared Predicates on ASC with legacy shim D) Tag-based death | Whether AnyDamage runs with CurrentHealth=0 | Phase 2A2 + optional targeted death PIE | +| Whether AnimNotifies may trigger authoritative gameplay | Static: UseAbility* from AN_*; Multicast montage; server notify evaluation assumed | Ability/notify chain not executed (Enhanced Input Tool Limitation) | A) Forbid authoritative notify gameplay B) Allow only on Authority with validation C) Move timing to Ability Tasks D) Keep notify for VFX only | Server vs client notify execution roles unknown at runtime | Phase 2A2 after RT-004/008 | +| Required interruption and cleanup contract | AN_AttackComplete clears CurrentlyAttacking; montage complete pins unconnected; interrupt may skip cleanup | Interrupt test blocked; cleanup not observed | A) Ability Task end states B) Cancel tags C) Explicit EndAbility + force clear CurrentlyAttacking D) Montage blend-out notify required | Which existing actions can interrupt without asset edits | Phase 2A2 / 2B | +| Required respawn and HUD lifecycle contract | Server_RespawnPlayer ~2s; Overlay recreate risk; stale widgets possible | RT-006 blocked — respawn/HUD recreation not observed | A) Destroy+recreate Overlay each possess B) Rebind existing Overlay C) HUD owned by PC only D) PlayerState-driven Overlay | Post-respawn Owner/Avatar and Overlay instance counts | Phase 2A2 after RT-006 | +| Pickup authority model | No authority gate; `bReplicates=false`; overlap→GE→destroy | HealthPotion runtime `bReplicates=false` confirmed; overlap/GE apply not observed | A) Server-only overlap apply + replicate actor B) Server RPC from client overlap C) GAS cue + server GE only D) Keep local for SP prototypes | Duplicate apply / client desync still unverified in MP | Phase 2A2 / 2E after RT-010 | +| PlayerState versus pawn ownership boundaries | ASC on `ARIRPlayerState`; pawn caches via InitAbilityActorInfo; Overlay via HUD | PS ASC works; pawn attribute query works; enemy ASC component present but inspector rejects actor | A) Keep ASC on PlayerState for players B) Move ASC to pawn C) Dual ownership with clear Avatar rules D) Enemy-specific ASC init contract | Enemy ASC InitAbilityActorInfo / interface exposure at runtime | Phase 2A2 | +| How to enable 2-client PIE for remaining evidence | MCP `StartPIE` lacks NumberOfPlayers; PlayIn settings exist | Read: playNumberOfClients=1, PIE_Standalone; non-persisting UI set not achieved; config save unauthorized | A) Manual editor Play settings (user) then re-run RT-007–010 B) Authorize transient SetSectionProperties without Save if possible C) Defer MP until harness exists D) Dedicated listen-server process (out of scope) | Whether editor can raise clients without writing config | Environment / user authorization | +| Enhanced Input injection for automated ability tests | Input maps IA_Ability_* in IMC_PlayerDefault | Slate PressKey does not activate abilities; OS injection blocked by policy | A) Manual human-driven ability tests B) Authorize OS input for evidence harness C) Temporary debug console activate (unauthorized now) D) Automation Driver outside MCP | Cannot close AnimNotify/authority decisions without ability fire | Environment / Phase 2A validation harness | + +## Explicitly not decided here + +- Final Gameplay Ability class layout +- Final attribute set schema changes +- Whether to delete `DEPRECATED_*` in Phase 2A +- Per-character reconstruction order changes + +## Next authorized step (outside this batch) + +Begin Phase 2A2 only after explicit authorization: propose shared resource/authority/damage/death/cleanup contracts using these open rows — still no implementation until contracts are approved.