Files
aetherbound-guild/docs/plans/M24_RISK_COMMITMENT_CONTROLLER_PILOT.md
T

7.4 KiB

M24 Risk Commitment Controller Pilot

Status

  • Plan: M24_RISK_COMMITMENT_CONTROLLER_PILOT
  • Status: COMPLETE
  • Activated: 2026-08-25
  • Baseline: cd9efc9 (M23_RISK_BOARD_CONTROLLER_PILOT_COMPLETE)
  • Owner authorization: the Owner authorized direct migration to the new code architecture; this is the next smallest first-cycle seam after Risk Board.

Objective

Move the first-cycle Risk Commitment view-data boundary onto an explicit, UI-independent controller while preserving the accepted RSK-002 composition, selected-risk identity, six consequence facts, frozen four-member party, explicit confirmation gate and Battle Opening handoff semantics. This is a structural Controller/View migration, not a commitment-rule or visual redesign.

Player/System Stopping Point

  • Risk Commitment opens only for the currently sourced selected risk and the authoritative accepted-party snapshot;
  • the controller owns copied Company/Contract facts, selected option facts, six consequence facts, frozen Recruit/position/relation facts, dependency state, binding hashes and confirmation/Begin command eligibility;
  • the existing RSK-002 View keeps its accepted static master, node names, hit areas, focus order, localization helpers, tooltips and callbacks;
  • BattleService.begin_battle remains the only commitment/battle handoff authority, and no receipt is created by the controller;
  • no accepted page, route, visual, input, economy, Save or Battle rule changes.

Architecture Contract

Risk Board / FormationRiskService snapshot
  -> RiskCommitmentPageController (view-data assembly)
  -> RiskCommitmentViewData (deep-copied snapshot)
  -> Existing Godot RSK-002 View composition
  -> Existing acknowledgement / BattleService commands

The controller receives Company, Formation, selected Option, acknowledgement state, supplied dependency facts and binding hashes. It validates the selected option boundary, deep-copies all returned facts and exposes only view state and command eligibility. It never loads, saves or mutates persistence and never accesses Godot nodes, current_screen, facade or Entry Shell globals. It does not duplicate commitment, Coin-spend, battle or Save rules.

Ordered Steps

M24-A — Plan and boundary (COMPLETE)

  • Record the Risk Commitment stopping point, invariants and forbidden scope.
  • Inventory selected-option, dependency, acknowledgement, receipt and focus branches before product code changes.
  • Commit and push this activation boundary before Risk Commitment product code.

Closure: source e8825f7 records the bounded Risk Commitment Controller/View migration, its frozen RSK-002 and BattleService invariants and its forbidden scope before any Risk Commitment product code changes.

M24-B — Additive controller (COMPLETE)

Add runtime/entry/risk_commitment_page_controller.gd and a focused test covering:

  • missing/invalid Company, ready Formation, selected Option and Party snapshot;
  • copied selected-risk identity and six consequence facts;
  • copied frozen Party/Recruit/relation/coverage facts and binding hashes;
  • supplied dependency state, acknowledgement normalization and stale binding;
  • Settings/Review/Cancel/Acknowledge/Begin command eligibility and deep-copy isolation.

Closure: source 3e80083 adds ABGRiskCommitmentPageController and the focused ABG_M24_RISK_COMMITMENT_CONTROLLER_OK test. The controller validates the ready formation, selected option and accepted-party boundary, copies the selected risk, six consequence facts, frozen Party/relation facts, dependency and binding state, and exposes explicit acknowledgement/Begin eligibility without Godot-node, persistence or BattleService transaction dependencies. The source-bound controller attempt is /private/tmp/aetherbound-guild-test-evidence/m24-risk-commitment-controller-source-bound/20260825T092019Z-11925; the marker appears exactly once, strict diagnostics are 0, and the owned workspace/process cleanup passes.

M24-C — View integration (COMPLETE)

  • Inject one controller through Entry Shell/AppServices.
  • Make RSK-002 rendering and summary facts consume controller output.
  • Preserve the accepted static master, node names, focus, touch targets, localization and callbacks.
  • Keep acknowledgement, BattleService.begin_battle and all persistence calls unchanged.

Closure: source 9518e2e injects ABGRiskCommitmentPageController through Entry Shell/AppServices and makes the accepted RSK-002 View consume copied controller output for selected risk identity, six facts, frozen Party, dependency state and acknowledgement/Begin eligibility. The static master, node names, focus order, touch targets, localization, callbacks, BattleService.begin_battle and persistence semantics remain unchanged. The focused source-bound candidate archive is /private/tmp/aetherbound-guild-test-evidence/m24-risk-commitment-focused/20260825T091442Z-6200 with 49 evidence files, exact-once ABG_M24_RISK_COMMITMENT_CONTROLLER_OK, ABG_RSK002_COMMITMENT_OK and ABG_DEV4_CANDIDATE_SUITE_OK markers, strict diagnostics 0, owned workspace/process cleanup and archive SHA-256 db1f31869c4504d1272e6d136f664d318286d3043d843e57475486732d2f6de4.

M24-D — Verification and handoff (COMPLETE)

  • Run the focused controller, RSK-002, Risk, Readiness, Party, Guild, Market and Hire regressions.
  • Run normal 100% Risk Commitment captures at the required landscape fixtures.
  • Run the full MVP first-cycle audit and require strict diagnostics 0.
  • Close with a focused pushed commit and update the checkpoint.

Closure: the full source-bound MVP first-cycle audit from source 9518e2e passes ABG_MVP_FIRST_CYCLE_AUDIT_OK exactly once with 128 normal 100% frames across zh_CN/en and 760x360, 844x390, 1280x720, strict diagnostics 0, parsed touch coverage and owned workspace/process cleanup. The retained archive is /private/tmp/aetherbound-guild-test-evidence/m24-mvp-audit/20260825T091613Z-7776 with 180 evidence files and archive SHA-256 8129815eef0e8dfe57a117d70dadc15c52a3fac376ec28a559a4df32d0a7182e. M24 closes without changing RSK-002 presentation, acknowledgement, commitment receipts, Coin semantics, Battle handoff or any later page.

Frozen Scope

  • No visual redesign or new assets/audio/animation.
  • No changes to BattleService, commitment receipts, Coin spending, Risk projections, FormationRiskService, Company, Contract, Save or Battle rules.
  • No migration of Battle Opening, Live Battle, Result or Recovery pages in this plan.
  • No new dependency or acknowledgement policy; supplied facts remain the authority.
  • No mass rewrite or deletion of compatibility/history files.
  • No packaging, signing, store or release work.

Acceptance Checks

  • ABG_M24_RISK_COMMITMENT_CONTROLLER_OK exactly once.
  • Existing ABG_RSK002_COMMITMENT_OK, Risk, Readiness, Party, Guild, Market and Hire markers remain green.
  • Normal 100% Risk Commitment captures, 48px targets, explicit confirmation, same-route focus, Settings return context and Battle handoff remain green.
  • ABG_MVP_FIRST_CYCLE_AUDIT_OK remains green.

Commit Boundaries

  • M24-A: plan/checkpoint activation.
  • M24-B: controller and focused unit test.
  • M24-C: Entry Shell integration.
  • M24-D: evidence and closure.

Each boundary must pass its narrowest focused checks and be pushed before the next step becomes IN_PROGRESS; a failed check keeps the current step active.

Final Handoff

ABG M24 RISK COMMITMENT CONTROLLER MIGRATION READY