Files
realms-in-ruin-dev/Documentation/Phase2/02-Phase2A-OpenDecisions.md
T
tedwardsandCursor 6aab068876 Document Phase 2A2b owner approval of shared gameplay contracts.
Record Approved and Approved-with-Conditions decisions, reject bidirectional sync and client-overlap pickup RPC, and keep runtime validation as non-blocking obligations.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 08:20:29 -07:00

132 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 2A — Open Decisions and Validation Obligations
| Field | Value |
|---|---|
| Status | Draft |
| Date | 2026-07-17 |
| Phase 2A1 Git commit | `aa0058a0` |
| Phase 2A2a commit | `c2fa15db` |
| Phase 2A2b base commit | `c2fa15db` |
| Why Draft remains | Runtime validation obligations are incomplete; architecture contracts are owner-approved but not runtime-proven |
Architecture questions C-001 through C-015 are **Resolved by owner decision** (2026-07-17). This document no longer holds open architecture conflicts for those contracts. It preserves validation obligations, deferred implementation choices, and historical evidence.
Contracts: [`03-SharedGameplayContracts.md`](03-SharedGameplayContracts.md) (Status: Complete). Register: [`04-Phase2A-DecisionRegister.md`](04-Phase2A-DecisionRegister.md) (Status: Complete).
---
## Phase 2A2b — Owner decision reconciliation
| Field | Value |
|---|---|
| Pass | 2A2b — Apply owner contract approvals |
| Owner decision date | 2026-07-17 |
| Architecture status | C-001C-015 resolved |
### Architecture questions resolved by owner decision
| Decision | Classification | Contract | Owner state |
|---|---|---|---|
| Canonical health source of truth | Resolved by owner decision | [C-001](03-SharedGameplayContracts.md#c-001--canonical-player-resource-source-of-truth) | Approved |
| Canonical mana source of truth | Resolved by owner decision | C-001, [C-003](03-SharedGameplayContracts.md#c-003--resource-access-boundary) | Approved |
| Canonical stamina source of truth | Resolved by owner decision | C-001, [C-002](03-SharedGameplayContracts.md#c-002--character-default-attribute-initialization) | Approved / Approved with Conditions (init) |
| Temporary legacy mirror during reconstruction | Resolved by owner decision | [C-004](03-SharedGameplayContracts.md#c-004--legacy-compatibility-policy) | Approved (transitional only) |
| Where damage must enter shared framework | Resolved by owner decision | [C-005](03-SharedGameplayContracts.md#c-005--damage-contract) | Approved |
| Where death threshold evaluation must occur | Resolved by owner decision | [C-007](03-SharedGameplayContracts.md#c-007--death-contract) | Approved |
| Whether AnimNotifies may trigger authoritative gameplay | Resolved by owner decision | [C-009](03-SharedGameplayContracts.md#c-009--authority-contract), [C-010](03-SharedGameplayContracts.md#c-010--animation-responsibility-contract) | Approved / Approved with Conditions |
| Required interruption and cleanup contract | Resolved by owner decision | [C-011](03-SharedGameplayContracts.md#c-011--ability-lifecycle-and-cleanup-contract) | Approved |
| Required respawn and HUD lifecycle contract | Resolved by owner decision | [C-008](03-SharedGameplayContracts.md#c-008--respawn-contract), [C-013](03-SharedGameplayContracts.md#c-013--hud-data-flow-contract) | Approved with Conditions / Approved |
| Pickup authority model | Resolved by owner decision | [C-014](03-SharedGameplayContracts.md#c-014--pickup-authority-and-replication-contract) | Approved |
| PlayerState versus pawn ownership boundaries | Resolved by owner decision | [C-012](03-SharedGameplayContracts.md#c-012--playerstate-and-pawn-ownership-contract) | Approved |
| How to enable 2-client PIE for remaining evidence | Validation obligation / environment | — | Not an architecture SoT conflict |
| Enhanced Input injection for automated ability tests | Validation obligation / environment | — | Not an architecture SoT conflict |
### Deferred implementation choices (not open architecture conflicts)
| Choice | Related contract | Resolve during |
|---|---|---|
| Exact default-GE mapping mechanism | C-002 | Implementation planning / bounded init batch |
| Gameplay Effect versus ExecutionCalculation details for damage | C-005 | Implementation planning / damage batch |
| Exact authoritative animation-timing mechanism | C-010 | Implementation planning / ability framework |
| Exact temporary observability implementation | C-015 | Implementation planning / harness |
| Whether any real consumer requires a temporary legacy shadow | C-004 | Consumer inventory during migration planning |
### Runtime validation obligations
These remain validation obligations. They are **not** architecture approval blockers. Tool inaccessibility is not runtime absence.
| Area | Status | Evidence IDs | Related contracts |
|---|---|---|---|
| Enhanced Input ability execution | Blocked by Test Environment / Tool Limitation | RE-2A1-015, 019, 021; RT-002/004/005 | C-009, C-010, C-011 |
| AnimNotify execution roles | Blocked by Missing Runtime Evidence | RE-2A1-019, 021 | C-009, C-010 |
| Ability cost mutation | Blocked by Missing Runtime Evidence / Tool Limitation | RE-2A1-014, 015 | C-003, C-004 |
| Interruption and cleanup | Blocked by Test Environment | RE-2A1-020; RT-004B | C-011 |
| Player damage / death / respawn | Blocked by Missing Implementation / Tool Limitation | RE-2A1-022; RT-006 | C-005, C-007, C-008 |
| Two-client replication | Blocked by Test Environment / Tool Limitation | RE-2A1-023026; RT-007010 | C-009, C-014 |
| Remote character selection | Blocked by Test Environment | Depends on RE-2A1-023 | C-008 related / 2E |
| Pickup authority and visibility | Blocked by Test Environment / Tool Limitation | RE-2A1-017, 018; RT-003/010 | C-014 |
| Enemy attribute mutation | Blocked by Missing Runtime Evidence / Tool Limitation | RE-2A1-028, 030; RT-011 | C-005, C-012 |
| Session behavior | Still open for Phase 2E | Not closed by 2A1 | Outside 2A contracts |
### Defects and limitations still accounted for
| Observation | Handling |
|---|---|
| `PlayerFirstSpawn` Accessed None; spawn still succeeds | C-008 failure modes; validation during respawn/spawn work |
| Amazonian/Paladin legacy defaults differ; legacy health at 0 | C-001/C-004/C-007; migration must not leave lethal legacy writers |
| ASC defaults identical; no active default GE; no granted GAs | C-002 Approved with Conditions |
| Enhanced Input / multi-client PIE tooling limits | Validation obligations; C-015 |
| Enemy inspector cannot read attributes | C-012 corrected accessor; C-015; not treated as ASC absence |
### Duplicate / superseded (historical)
| Topic | Classification | Disposition |
|---|---|---|
| Separate health/mana/stamina SoT rows | Duplicate → unified under C-001 | Historical table retained below |
| Legacy mirror options | Superseded by C-004 owner decision | Bidirectional Rejected |
---
## Historical — Phase 2A2a reconciliation (preserved)
Phase 2A2a classified decisions as Addressed by Proposed Contract only. Owner approval occurred in 2A2b. The 2A2a classifications are superseded by the 2A2b table above but retained for continuity.
| Pass | Status |
|---|---|
| 2A2a | Proposed contracts; none Approved |
| 2A2b | Owner Approved / Approved with Conditions |
---
## Historical Phase 2A1 open-decision table (preserved)
The following table is the Phase 2A1 inventory. Evidence references are retained. Architecture options in this table are historical; owner outcomes live in docs `03`/`04` and the 2A2b section above.
| 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 — **Resolved 2A2b C-001** |
| 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) | **Resolved 2A2b C-001/C-003** |
| 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 | **Resolved 2A2b C-001/C-002**; UI gated by C-013 |
| 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) | **Resolved 2A2b C-004**; whether any shadow consumer needed remains Deferred |
| 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 | **Resolved 2A2b C-005**; ExecCalc Deferred |
| 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 | **Resolved 2A2b C-007**; validation obligation remains |
| 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 | **Resolved 2A2b C-009/C-010**; timing mechanism Deferred |
| 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 | **Resolved 2A2b C-011**; validation obligation remains |
| 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 | **Resolved 2A2b C-008/C-013**; validation obligation remains |
| 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 | **Resolved 2A2b C-014**; option B rejected as default |
| 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 | **Resolved 2A2b C-012** |
| 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-007010 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 / validation harness — remains open |
| 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 / validation harness — remains open |
## Explicitly not decided here
- Final Gameplay Ability class layout
- Final attribute set schema changes beyond approved SoT
- Whether to delete `DEPRECATED_*` in a specific batch
- Per-character reconstruction start (blocked until Phase 2A implementation sequence approved)
- Exact deferred implementation choices listed above
## Next authorized step
Wait for explicit authorization before **Phase 2A3** implementation planning. Do not begin Unreal implementation or Phase 2B from this document alone.