# M36 Risk Commitment Page View Refactor ## Status - Plan: `M36_RISK_COMMITMENT_PAGE_VIEW_REFACTOR` - Status: `COMPLETE` - Activated: 2026-08-25 - Baseline: `0eed014` (`M35_BATTLE_RESULT_PAGE_VIEW_REFACTOR_COMPLETE`) - Owner authorization: the Owner asked to continue splitting page Views after the M35 Battle Result pilot. This plan is the next bounded extraction in the ordered M35 handoff map. ## Objective Extract the RSK-002 Risk Commitment page from `entry_shell.gd` into a passive, UI-only `ABGRiskCommitmentPageView` while preserving the accepted custom 16:9 normalized composition, static master artwork, complete four-member frozen Party presentation, selected-risk facts, six consequence facts, acknowledgement boundary, disabled Begin Battle state, settings access, focus order, touch surfaces, localization and normal `100%` visual output. This is a structural View migration, not a Risk, Formation, Battle, Economy, Save or visual redesign. ## Target boundary ```text EntryShell / composition root -> RiskCommitmentPageController.snapshot() -> presentation-ready ViewData -> ABGRiskCommitmentPageView.render(ViewData) -> explicit View intents -> EntryShell application command boundary -> existing risk/settings/acknowledge/battle commands ``` ### Ownership rules 1. `ABGRiskCommitmentPageView` owns only Godot nodes, normalized layout, focus, local text/portrait presentation and intent emission. 2. The View does not import or call FormationRiskService, BattleService, Save, the compatibility facade, RuntimeContentRegistry, `current_screen` or EntryShell globals. 3. `ABGRiskCommitmentPageController` remains the authority for copied Company, Contract, selected-risk, consequence, frozen-Party, dependency, binding, confirmation and command facts. 4. EntryShell remains the composition root and translates only explicit `back`, `review_risk_details`, `review_consequences`, `acknowledge`, `begin_battle` and `settings` intents through deferred connections. 5. Risk projection, formation binding, acknowledgement, BattleService, receipts, Save and route semantics remain unchanged. ## Player-visible stopping point - The player sees the same RSK-002 parchment/master frame, selected risk identity/source/region, six consequence facts, frozen four-member Party, coverage values and command rail as the M24-accepted page. - The selected-risk and consequence hit areas still update the existing local notice without changing domain facts. - `Acknowledge` still toggles the existing confirmation state and never creates a commitment receipt by itself. - `Begin Battle` remains disabled until acknowledgement and dependency checks are valid, then follows the existing Battle Opening route. - `Back` returns to the Risk Board and `Settings` opens the existing Settings route with the same caller identity. - A controller-invalid snapshot renders the existing invalid-state boundary. ## Ordered steps ### M36-A — Architecture contract and inventory (`COMPLETE`) - Freeze the RSK-002 stopping point, dependency direction and forbidden imports before product code changes. - Inventory the current normalized canvas, static master, transparent hit areas, UI-only formatting helpers, exact node names and six-intent command boundary. - Record the M24 normal-capture equivalence target. - Commit and push this activation boundary before Runtime product changes. ### M36-B — Passive View extraction (`COMPLETE`) - Add `ABGRiskCommitmentPageView` under `runtime/entry/views/`. - Reuse `ABGPageView` and `ABGPageContext` while retaining the custom 16:9 normalized canvas and static master image. - Preserve all accepted semantic node names and complete Party portraits. - Mount the View from EntryShell and translate only the six explicit intents. - Keep controller, FormationRiskService, BattleService, receipt and Save semantics unchanged. - Complete at the product integration source. ### M36-C — Focused verification (`COMPLETE`) - Add `ABG_M36_RISK_COMMITMENT_VIEW_CONTRACT_OK`. - Run the focused Risk Commitment controller/View and M12/M24 route regressions, DEV-4 candidate and full MVP first-cycle audit through the owned test-attempt runner with strict diagnostics and exact-once markers. - Compare normal Risk Commitment captures with the M24 baseline at the four required fixtures/locales. - Complete at source `26190de`; evidence is recorded in `docs/runtime/M36_RISK_COMMITMENT_PAGE_VIEW_VISUAL_AUDIT.md`. ### M36-D — Handoff (`COMPLETE`) - Record source-bound evidence and visual equivalence in a runtime audit. - Close only Risk Commitment; Readiness and other preparation Views remain outside this plan. - Leave Readiness as a separately activated next extraction. - Complete at source `3a82056` with the source-bound audit and byte-equivalence record. ## Frozen scope - No Risk/Formation/Battle/Economy/Save semantic changes. - No visual redesign, asset generation, localization rewrite or 130% scope. - No mass rewrite of `entry_shell.gd`. - No deletion of compatibility/history files, `.uid`, `.import` or `prototype_incremental/`. - No packaging, iOS export, signing, deployment, store or release work. ## Acceptance checks - `ABG_M36_RISK_COMMITMENT_VIEW_CONTRACT_OK` exactly once. - Existing `ABG_M24_RISK_COMMITMENT_CONTROLLER_OK`, M12/DEV-4 candidate and `ABG_MVP_FIRST_CYCLE_AUDIT_OK` remain green. - Extracted View has no forbidden service/content/route imports and emits only the six explicit intents. - Risk Commitment normal `100%` captures remain visually equivalent to the M24 baseline at required fixtures and locales. - Focused source is committed, pushed and tracked files are clean. ## Commit boundaries - `M36-A`: plan/checkpoint activation. - `M36-B`: View and EntryShell integration. - `M36-C`: focused verification/evidence. - `M36-D`: handoff/closure. ## Final handoff `ABG M36 RISK COMMITMENT VIEW PILOT COMPLETE` M36 is closed. Readiness requires a separate Owner-authorized plan.