Propose ASC resource, authority, damage/death/respawn, and related contracts for owner review without approving or implementing them. Co-authored-by: Cursor <cursoragent@cursor.com>
110 lines
13 KiB
Markdown
110 lines
13 KiB
Markdown
# Phase 2A1 — Open Decisions
|
||
|
||
| Field | Value |
|
||
|---|---|
|
||
| Status | Draft |
|
||
| Date | 2026-07-17 |
|
||
| Phase 2A1 Git commit | `aa0058a0` |
|
||
| Phase 2A2a reconciliation commit base | `9919faab` |
|
||
| Rule | Options listed in the historical table were not selected in Phase 2A1. Phase 2A2a adds **Proposed** contract links only — **none Approved**. |
|
||
|
||
Decisions that remain open after Phase 1 static archaeology plus Phase 2A1 runtime evidence. Do not treat this document as an approved architecture contract.
|
||
|
||
---
|
||
|
||
## Phase 2A2a reconciliation
|
||
|
||
| Field | Value |
|
||
|---|---|
|
||
| Pass | 2A2a — Evidence-to-contract reconciliation |
|
||
| Status | Draft |
|
||
| Contract document | [`03-SharedGameplayContracts.md`](03-SharedGameplayContracts.md) |
|
||
| Decision register | [`04-Phase2A-DecisionRegister.md`](04-Phase2A-DecisionRegister.md) |
|
||
|
||
### Classification of each Phase 2A1 open decision
|
||
|
||
| Decision | Classification | Contract link(s) | Notes |
|
||
|---|---|---|---|
|
||
| Canonical health source of truth | Addressed by Proposed Contract | [C-001](03-SharedGameplayContracts.md#c-001--canonical-player-resource-source-of-truth) | ASC sole SoT Proposed; not Approved |
|
||
| Canonical mana source of truth | Addressed by Proposed Contract | [C-001](03-SharedGameplayContracts.md#c-001--canonical-player-resource-source-of-truth), [C-003](03-SharedGameplayContracts.md#c-003--resource-access-boundary) | Merged into C-001 resource SoT + C-003 access |
|
||
| Canonical stamina source of truth | Addressed by Proposed Contract | [C-001](03-SharedGameplayContracts.md#c-001--canonical-player-resource-source-of-truth), [C-002](03-SharedGameplayContracts.md#c-002--character-default-attribute-initialization) | ASC SoT Proposed; UI deferred via C-013; whether stamina required for 2B remains design-adjacent |
|
||
| Temporary legacy mirror during reconstruction | Addressed by Proposed Contract | [C-004](03-SharedGameplayContracts.md#c-004--legacy-compatibility-policy) | ASC→legacy one-way Recommended; bidirectional Rejected by Existing Evidence |
|
||
| Where damage must enter shared framework | Addressed by Proposed Contract + Blocked by Missing Runtime Evidence | [C-005](03-SharedGameplayContracts.md#c-005--damage-contract) | Boundary Proposed; runtime damage path not exercised (RE-2A1-022) |
|
||
| Where death threshold evaluation must occur | Addressed by Proposed Contract + Blocked by Missing Runtime Evidence | [C-007](03-SharedGameplayContracts.md#c-007--death-contract) | ASC Health ≤ 0 Proposed; death PIE not run |
|
||
| Whether AnimNotifies may trigger authoritative gameplay | Addressed by Proposed Contract + Blocked by Missing Runtime Evidence | [C-009](03-SharedGameplayContracts.md#c-009--authority-contract), [C-010](03-SharedGameplayContracts.md#c-010--animation-responsibility-contract) | Notify-as-sole-authority prohibited as end state; chain not observed |
|
||
| Required interruption and cleanup contract | Addressed by Proposed Contract + Blocked by Missing Runtime Evidence | [C-011](03-SharedGameplayContracts.md#c-011--ability-lifecycle-and-cleanup-contract) | Lifecycle Proposed; interrupt test blocked (RE-2A1-020) |
|
||
| Required respawn and HUD lifecycle contract | Addressed by Proposed Contract + Blocked by Missing Runtime Evidence | [C-008](03-SharedGameplayContracts.md#c-008--respawn-contract), [C-013](03-SharedGameplayContracts.md#c-013--hud-data-flow-contract) | GM/PC ownership + Overlay-only Proposed; RT-006 blocked |
|
||
| Pickup authority model | Addressed by Proposed Contract + Blocked by Test Environment | [C-014](03-SharedGameplayContracts.md#c-014--pickup-authority-and-replication-contract) | Server authority Proposed; overlap/2P not run |
|
||
| PlayerState versus pawn ownership boundaries | Addressed by Proposed Contract | [C-012](03-SharedGameplayContracts.md#c-012--playerstate-and-pawn-ownership-contract) | Keep ASC on PlayerState Proposed; enemy accessor still defective |
|
||
| How to enable 2-client PIE for remaining evidence | Blocked by Test Environment | — (environment / harness; not a gameplay SoT contract) | See still-blocked list; C-015 observability |
|
||
| Enhanced Input injection for automated ability tests | Blocked by Test Environment | — (harness; blocks validation of C-009/C-010/C-011) | See still-blocked list |
|
||
|
||
### Duplicate / superseded handling
|
||
|
||
| Topic | Classification | Disposition |
|
||
|---|---|---|
|
||
| Separate health / mana / stamina “canonical SoT” rows | Duplicate (resolved into one contract) | Historical rows retained below; proposal unified under **C-001** (+ init C-002, access C-003) |
|
||
| Legacy mirror vs dual SoT options overlapping C-001 | Superseded by C-004 recommendation | Historical options retained; recommendation lives in contracts/register |
|
||
|
||
### Explicit remaining blocked runtime areas
|
||
|
||
These remain **explicitly blocked** and must stay visible until evidence exists. Tool inaccessibility is **not** runtime absence.
|
||
|
||
| Area | Status | Evidence IDs |
|
||
|---|---|---|
|
||
| Enhanced Input ability execution | Blocked by Test Environment / Tool Limitation | RE-2A1-015, 019, 021 |
|
||
| AnimNotify authority | Blocked by Missing Runtime Evidence | RE-2A1-019, 021 (chain not executed) |
|
||
| Ability cost mutation | Blocked by Missing Runtime Evidence / Tool Limitation | RE-2A1-014, 015 |
|
||
| Ability interruption | Blocked by Test Environment | RE-2A1-020 |
|
||
| Player damage / death / respawn | Blocked by Missing Implementation / Tool Limitation | RE-2A1-022 |
|
||
| Two-client replication | Blocked by Test Environment / Tool Limitation | RE-2A1-023–026 |
|
||
| Remote character selection | Blocked by Test Environment | Depends on multi-client (RE-2A1-023) |
|
||
| Pickup authority and visibility | Blocked by Test Environment / Tool Limitation | RE-2A1-017, 018 |
|
||
| Enemy attribute mutation | Blocked by Missing Runtime Evidence / Tool Limitation | RE-2A1-028, 030 |
|
||
| Session behavior | Still Open (Phase 2E scope) | Not closed by 2A1; outside 2A2a contracts |
|
||
|
||
### New defects and limitations accounted for in contracts
|
||
|
||
| Observation | Contract handling |
|
||
|---|---|
|
||
| `PlayerFirstSpawn` Accessed None during normal spawn; spawn still succeeds | C-008 failure modes / transitional spawn path |
|
||
| Amazonian vs Paladin legacy defaults differ; both legacy health begin at 0 | C-001, C-004; death-threshold risk under C-007 |
|
||
| ASC defaults stable across inspected characters; no active default GE; no granted GAs | C-002 |
|
||
| Enhanced Input unavailable via current automation | C-009–C-011 validation blocked; C-015 |
|
||
| Multi-client PIE unavailable via authorized tooling | C-009, C-014 validation blocked; env decisions remain |
|
||
| Enemy attributes inaccessible via current inspector | C-012 / C-015 — tool limit ≠ absence (RE-2A1-027 vs 028) |
|
||
|
||
---
|
||
|
||
## Historical Phase 2A1 open-decision table (preserved)
|
||
|
||
The following table is the Phase 2A1 inventory. It is preserved for evidence continuity. Classifications above supersede “options only” for proposal purposes; **no option is Approved**.
|
||
|
||
| 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
|
||
- Approval of any C-001–C-015 contract (owner action required)
|
||
|
||
## Next authorized step (outside this batch)
|
||
|
||
Wait for explicit owner approval of Proposed contracts before Phase 2A2b, Phase 2A3 implementation planning, or any Unreal implementation. Do not begin Phase 2B.
|