Files
realms-in-ruin-dev/Documentation/Phase2/04-Phase2A-DecisionRegister.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

16 KiB
Raw Blame History

Phase 2A — Decision Register

Field Value
Status Complete
Date 2026-07-17
Phase 2A2b — Owner decisions applied
Starting Git commit c2fa15db
Owner decision date 2026-07-17
Rule Every C-001C-015 entry has an owner state: Approved, Approved with Conditions, Deferred (sub-choice), or Rejected (alternative).

Companion: 03-SharedGameplayContracts.md. Open decisions / validation obligations: 02-Phase2A-OpenDecisions.md.


Summary table

Decision Owner state Recommendation (locked) Confidence Validation obligation Approval required
C-001 Approved ASC sole SoT for H/M/S currents and maxes High Combat/death cutover PIE (RE-2A1-022) Resolved
C-002 Approved with Conditions Character-specific default GE; six attrs; fail visible; no duplicate init Medium Spawn/respawn per-class ASC; duplicate-init guard Resolved
C-003 Approved Shared server ASC resource boundary; atomic costs High Cost mutation path (RE-2A1-015) Resolved
C-004 Approved (transitional) ASC→legacy one-way named shadow; end state no shadow High Shadow inventory; no reverse write Resolved
C-005 Approved Server damage boundary → ASC Health; ApplyDamage adapter only Medium Damage/death PIE (RE-2A1-022) Resolved
C-006 Approved Server restore via boundary; clamp Max*; no over-resource default Medium Pickup/heal apply (RE-2A1-018) Resolved
C-007 Approved Death from ASC Health ≤ 0; idempotent; anim presentation Medium Death path (RE-2A1-022) Resolved
C-008 Approved with Conditions GameMode orchestrates; PC handoff; pawn reports only Medium Respawn/HUD (RE-2A1-022) Resolved
C-009 Approved Client intent; server validate; multicast presentation-only Medium Ability + 2P (RE-2A1-015, 023) Resolved
C-010 Approved with Conditions Animation presentation; timing signal into lifecycle; no sole notify authority Medium Interrupt/notify (RE-2A1-019020) Resolved
C-011 Approved Shared lifecycle; guaranteed cleanup; not sole AN_AttackComplete Medium Interrupt/death mid-ability (RE-2A1-020022) Resolved
C-012 Approved Player ASC on PlayerState; pawn Avatar; enemy self-ASC + corrected accessor High Respawn Owner/Avatar; enemy accessor (RE-2A1-028) Resolved
C-013 Approved Overlay-only HUD; retire UpdatePlayerHUD; defer stamina UI High Overlay idempotence after respawn Resolved
C-014 Approved Server pickup ownership; client-overlap RPC rejected as default Medium Overlap + 2P (RE-2A1-018, 023) Resolved
C-015 Approved Minimum observability list; no permanent debug UI required Medium Harness/logs deliver listed fields Resolved

Explicit rejected and deferred marks

Item Status Notes
Bidirectional legacy synchronization Rejected C-004
Client-overlap RPC as default pickup model Rejected C-014
GameplayEffectExecutionCalculation choice Deferred C-005 — not selected
Exact default-GE mapping mechanism Deferred C-002
Exact authoritative animation-timing mechanism Deferred C-010
Exact temporary observability implementation Deferred C-015
Whether any real consumer requires a temporary legacy shadow Deferred C-004

C-001 — Canonical player resource source of truth

Field Content
Decision ID C-001
Title Canonical player resource source of truth
State Approved
Owner decision ASC attributes sole authoritative source for Health, MaxHealth, Mana, MaxMana, Stamina, MaxStamina; DEPRECATED vars not authoritative
Approval conditions None
Recommended option ASC AttributeSet sole SoT
Alternatives Legacy-only SoT — Rejected as end state; dual-SoT — Rejected
Static evidence 05, 06 §8, 01 P0
Runtime evidence RE-2A1-001, 004, 005, 012, 013; RT-001, RT-002
Benefits One truth for UI, combat, potions, death
Risks Unconverted legacy readers break without shadow/cutover
Migration impact Abilities, Amazonian death, Cleric heal, HUD, stamina
Blocking unknowns N/A for architecture approval
Validation obligation Post-init ASC; potion+combat mutate ASC; death from ASC (RE-2A1-022)
Approval question Resolved — approved 2026-07-17

C-002 — Character default attribute initialization

Field Content
Decision ID C-002
Title Character default attribute initialization
State Approved with Conditions
Owner decision Character-specific default Gameplay Effects with listed constraints
Approval conditions Server-only; after ASC actor info + avatar valid; deterministic spawn/respawn; all six attrs; no native stamina fallback; no Blueprint CDO reliance; visible failure if missing; prevent duplicate init
Recommended option Option A — character-specific default GE
Alternatives B SetByCaller; C native service — historical alternatives; exact mapping Deferred
Static evidence 06 §§24
Runtime evidence RE-2A1-001, 002, 011, 012
Benefits Per-class balance; deterministic init
Risks Orphan GEs lack Max*; duplicate apply
Migration impact PlayerState, GEs, Gunslinger, spawn/respawn
Validation obligation Per-class ASC spawn/respawn; missing config visible; no duplicate GE
Approval question Resolved — approved with conditions 2026-07-17

C-003 — Resource-access boundary

Field Content
Decision ID C-003
Title Resource-access boundary
State Approved
Owner decision Shared server-authoritative ASC boundary for all new reads, affordability, costs, restoration, max queries, gates; atomic cost commit
Approval conditions None
Alternatives Per-system ad-hoc ASC — Rejected
Static evidence 05, 07 S9, 06
Runtime evidence RE-2A1-014, 015
Validation obligation Cost reduces ASC once; failed affordability no mutation
Approval question Resolved — approved 2026-07-17

C-004 — Legacy compatibility policy

Field Content
Decision ID C-004
Title Legacy compatibility policy
State Approved (transitional only)
Owner decision ASC→legacy one-way shadow only for named read-only consumers with removal condition; ASC authoritative; no legacy write-through; bidirectional Rejected; end state no shadow; Option D preferred when migratable
Approval conditions Named consumer + removal condition required per shadow
Alternatives A Bidirectional — Rejected; B Legacy→ASC primary — Rejected; D no-sync preferred when migratable
Static evidence 06 sync Missing
Runtime evidence RE-2A1-004, 005, 013
Validation obligation Shadow matches ASC; inventory whether any shadow consumer needed (Deferred choice)
Approval question Resolved — approved transitional 2026-07-17

C-005 — Damage contract

Field Content
Decision ID C-005
Title Damage contract
State Approved
Owner decision One server damage boundary: validate source/target; preserve instigator/causer; magnitude; mitigation at one boundary; mutate ASC Health; dedupe; death eval; observable damage event; ApplyDamage adapter only
Approval conditions None for boundary; ExecCalc not approved
Alternatives Final GE ExecutionCalculation — Deferred; legacy ApplyDamage+DEPRECATED health end state — Rejected
Static evidence 05, 09, 06
Runtime evidence RE-2A1-022, 027, 030
Validation obligation Single ASC Health reduction; no double hit; death trigger
Approval question Resolved — approved 2026-07-17

C-006 — Healing and resource restoration contract

Field Content
Decision ID C-006
Title Healing and resource restoration contract
State Approved
Owner decision Authoritative restore via shared boundary; clamp to max; attribute source; update ASC; HUD via delegates; no over-resource by default
Approval conditions None
Alternatives Overheal via tagged GEs — not approved now
Static evidence 05, 06, 12
Runtime evidence RE-2A1-018
Validation obligation Clamp at max; potion once; Overlay update
Approval question Resolved — approved 2026-07-17

C-007 — Death contract

Field Content
Decision ID C-007
Title Death contract
State Approved
Owner decision Death from ASC Health ≤ 0; authoritative; idempotent; one replicated dead state; cancel abilities; disable movement/interaction; anim presentation; shared death definition for player/enemy
Approval conditions None
Alternatives Legacy≤0 SoT — Rejected as end state
Static evidence 05, 09, 10
Runtime evidence RE-2A1-004, 006, 013, 022
Validation obligation One transition; no re-entry; ABP follows replicated state
Approval question Resolved — approved 2026-07-17

C-008 — Respawn contract

Field Content
Decision ID C-008
Title Respawn contract
State Approved with Conditions
Owner decision GameMode owns orchestration; PlayerController owns handoff (request/state/possess/input/HUD); dying pawn reports only — must not create/possess replacement
Approval conditions Must cover duplicate-request prevention, timing, destroy, spawn, PlayerState persistence, ASC avatar teardown/re-init, default reapply, possession, input restore, HUD idempotence
Alternatives Pawn-owned sole respawn — Rejected
Static evidence 07 S8, 11
Runtime evidence RE-2A1-010, 022
Validation obligation One respawn; Owner/Avatar correct; one Overlay
Approval question Resolved — approved with clarification 2026-07-17

C-009 — Authority contract

Field Content
Decision ID C-009
Title Authority contract
State Approved
Owner decision Client intent; server validates life, ability, target, range, resources, cost, cooldown, result; authoritative owners write replicated state; multicast presentation-only
Approval conditions None
Alternatives Notify-as-sole-authority end state — Rejected
Static evidence 05, 10
Runtime evidence RE-2A1-015, 019, 021, 023026
Validation obligation Listen-server damage once; montage both
Approval question Resolved — approved 2026-07-17

C-010 — Animation responsibility contract

Field Content
Decision ID C-010
Title Animation responsibility contract
State Approved with Conditions
Owner decision Animation owns presentation; may emit timing signal evaluated on authority; cannot be sole gameplay authority; signals enter ability lifecycle; cleanup not blocked by missing notify
Approval conditions Exact timing mechanism not prescribed this pass — Deferred
Alternatives Notify-authoritative hits as end state — Rejected
Static evidence 10
Runtime evidence RE-2A1-019021
Validation obligation Interrupt cleanup without AN_AttackComplete
Approval question Resolved — approved with timing clarification 2026-07-17

C-011 — Ability lifecycle and cleanup contract

Field Content
Decision ID C-011
Title Ability lifecycle and cleanup contract
State Approved
Owner decision Shared lifecycle states; guaranteed cleanup for listed paths; AN_AttackComplete cannot be only cleanup path
Approval conditions None
Alternatives Montage-notify-only cleanup — Rejected
Static evidence 05, 07 S3/S12, 10
Runtime evidence RE-2A1-020
Validation obligation Complete + interrupted clear locks; death mid-ability
Approval question Resolved — approved 2026-07-17

C-012 — PlayerState and pawn ownership contract

Field Content
Decision ID C-012
Title PlayerState and pawn ownership contract
State Approved
Owner decision PlayerState owns ASC/AttributeSet/cross-pawn state; pawn owns avatar/movement/anim/equipment/transient/targeting presentation; re-InitAbilityActorInfo on possess/replace; enemy self-ASC valid with corrected accessor
Approval conditions None
Alternatives Move ASC to pawn — Rejected unless redesign
Static evidence 06, 09
Runtime evidence RE-2A1-007, 027, 028
Validation obligation Post-respawn Owner/Avatar; enemy ASC via corrected accessor
Approval question Resolved — approved 2026-07-17

C-013 — HUD data-flow contract

Field Content
Decision ID C-013
Title HUD data-flow contract
State Approved
Owner decision Overlay/widget-controller only; retire UpdatePlayerHUD; no UI SoT; idempotent HUD; no duplicate overlays; ASC-driven; stamina UI after canonical stamina init; UI cannot mutate gameplay
Approval conditions None
Alternatives UpdatePlayerHUD as second path — Rejected
Static evidence 11, 07 S10
Runtime evidence RE-2A1-008, 009
Validation obligation One Overlay spawn+respawn; bars track ASC
Approval question Resolved — approved 2026-07-17

C-014 — Pickup authority and replication contract

Field Content
Decision ID C-014
Title Pickup authority and replication contract
State Approved
Owner decision Server owns validate/apply-once/destroy-or-deactivate/replicate existence/dedupe/attribute; client-overlap RPC Rejected as default; client cosmetics after authoritative collection
Approval conditions None
Alternatives Client-overlap RPC default — Rejected; SP non-rep as MP model — Rejected
Static evidence 12
Runtime evidence RE-2A1-016, 017, 018
Validation obligation One apply; ASC change; destroyed on all clients
Approval question Resolved — approved 2026-07-17

C-015 — Runtime observability contract

Field Content
Decision ID C-015
Title Runtime observability contract
State Approved
Owner decision Observable: identity, net role, Owner/Avatar, attrs, active GEs, granted abilities, lifecycle, resource commitments, damage/death/respawn events, pickup apply count; via logs/debugger/ASC inspect/bounded harness; no permanent debug UI required
Approval conditions None
Alternatives Exact harness packaging — Deferred; permanent debug UI — not required
Static evidence 13, 15
Runtime evidence RE-2A1-015, 023, 028, 031
Validation obligation Each listed field obtainable in controlled session
Approval question Resolved — approved 2026-07-17

Approved architecture boundary summary

Canonical ASC attributes → shared server resource boundary → authoritative damage/healing → idempotent death → GameMode-owned respawn → ASC-driven HUD → authoritative ability lifecycle → character migration → enemy reconstruction → server-owned replicated pickups.

  • PlayerState owns persistent player ASC state.
  • Pawn is the player avatar.
  • Enemy ASC is self-owned and requires a corrected accessor.
  • Multicast animation is presentation-only.
  • Legacy shadow values are temporary, one-way, named, and removable.
  • No per-character reconstruction may begin before the shared contracts are planned and the initial Phase 2A implementation sequence is approved.

Register integrity

  • Every C-001C-015 has an owner state.
  • Status: Complete.
  • Runtime validation obligations are recorded but do not reopen architecture approval.
  • No Unreal implementation authorized by this register alone.