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

6.3 KiB

M33 Reward Choice Page View Refactor

Status

  • Plan: M33_REWARD_CHOICE_PAGE_VIEW_REFACTOR
  • Status: COMPLETE
  • Activated: 2026-08-25
  • Baseline: 30e162d (M32_PAGE_VIEW_ARCHITECTURE_REFACTOR_COMPLETE)
  • Owner authorization: the Owner asked to continue splitting page Views after the Recovery pilot. This plan is the next bounded extraction in the ordered M32 handoff map.

Objective

Extract the OUT-003 Reward Choice page from entry_shell.gd into a passive, UI-only ABGRewardChoicePageView while preserving the already accepted Reward Choice composition, node names, focus order, touch targets, localization, deterministic option display, Claim/Skip behavior and Recovery continuation.

This is a structural View migration, not a reward, economy, Battle, Save or visual redesign.

Target boundary

EntryShell / composition root
  -> RewardChoicePageController.snapshot()
  -> presentation-enriched ViewData
  -> ABGRewardChoicePageView.render(ViewData)
  -> explicit select / back / skip / claim intents
  -> EntryShell application command boundary
  -> BattleService.claim_reward() / decline_reward()

Ownership rules

  1. ABGRewardChoicePageView owns only Godot nodes, layout, focus, local text formatting and intent emission.
  2. The View does not import or call BattleService, Save, the compatibility facade, RuntimeContentRegistry, current_screen or EntryShell globals.
  3. The composition root supplies presentation-ready equipment names so the extracted View does not perform content lookups itself.
  4. ABGRewardChoicePageController remains the authority for copied settled result/draft/option facts and command eligibility.
  5. BattleService remains the only authority for Claim/Skip mutation, receipts, idempotency and persistence.

Player-visible stopping point

  • The player sees the same settled Coin, equal reward options, selected detail, Back, Skip and Claim controls as the M29-accepted page.
  • Selecting an option still updates only local selection until Claim.
  • Claim and Skip retain their existing one-receipt semantics and route to the existing Recovery page.
  • A closed/invalid draft still follows the existing Recovery or invalid-state behavior; no new fallback route is introduced.

Ordered steps

M33-A — Architecture contract and inventory (COMPLETE)

  • Freeze the Reward Choice stopping point, dependency direction and forbidden imports before product code changes.
  • Inventory the current OUT-003 composition, presentation-only content-name lookup, selection path and Claim/Skip command boundary.
  • Commit and push this activation boundary. Complete at source 331db7d.

M33-B — Passive View extraction (COMPLETE)

  • Add ABGRewardChoicePageView under runtime/entry/views/.
  • Reuse ABGPageView and ABGPageContext from M32.
  • Mount the View from EntryShell and translate explicit select, back, skip and claim intents.
  • Keep all BattleService commands and controller semantics unchanged.
  • Complete at source 3d477ef: ABGRewardChoicePageView is mounted through ABGPageContext, receives presentation-ready equipment names and emits explicit command intents; the accepted normal Reward Choice captures remain byte-equivalent to the M29 baseline.

M33-C — Focused verification (COMPLETE)

  • Add ABG_M33_REWARD_CHOICE_VIEW_CONTRACT_OK.
  • Run the Reward Choice controller and M12/M29/M30 route regressions.
  • Run DEV-5 candidate and full MVP first-cycle audit through the owned test attempt runner with strict diagnostics and exact-once markers.
  • Compare normal Reward Choice captures with the M29 baseline.
  • Complete at source f609464: the source-bound contract, controller/runtime regressions, DEV-5 candidate and full MVP audit pass. Reward Choice captures are byte-equivalent to the M29 baseline at all four required fixtures. See docs/runtime/M33_REWARD_CHOICE_PAGE_VIEW_VISUAL_AUDIT.md.

M33-D — Handoff (COMPLETE)

  • Record source-bound evidence and visual equivalence.
  • Close only Reward Choice; do not claim Result, Knockout, Market or Battle Views are migrated.
  • Leave the next extraction as a separately activated plan/step.

Next extraction map

  1. M34 Knockout Review View — same settled-result chain, low-risk command surface, and already-complete controller boundary.
  2. M35 Battle Result View — extract the causal/result presentation after Knockout intent routing is proven.
  3. M36 Risk Commitment and Readiness Views — reuse the explicit command rail only after two more passive Views validate the contract.
  4. M37 Party Line and Risk Board Views — selection-heavy preparation pages.
  5. M38 Market, Recruit Review, Contract Choice and Guild Views — larger content and route/context surfaces.
  6. M39 Battle Opening and Live Battle Views — defer the highest lifecycle and timeline coupling until the passive View boundary is mature.

Each item requires its own durable activation plan, focused equivalence check and pushed commit. No project-wide binding/event-bus layer is introduced by this handoff.

Complete at source f609464; the evidence report and next extraction map are recorded. No later page migration is activated by M33.

Frozen scope

  • No reward option, reward amount, equipment, economy, Claim/Skip, settlement, Recovery, BattleService or 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_M33_REWARD_CHOICE_VIEW_CONTRACT_OK exactly once.
  • Existing ABG_M29_REWARD_CHOICE_CONTROLLER_OK, ABG_DEV5_CANDIDATE_SUITE_OK and ABG_MVP_FIRST_CYCLE_AUDIT_OK remain green.
  • Extracted View has no forbidden service/content/route imports and emits only explicit intents.
  • Reward Choice normal 100% captures remain visually equivalent at the required fixtures and locales.
  • Focused source is committed, pushed and tracked files are clean.

Commit boundaries

  • M33-A: plan/checkpoint activation.
  • M33-B: View and EntryShell integration.
  • M33-C: focused verification/evidence.
  • M33-D: handoff/closure.

Final handoff

ABG M33 REWARD CHOICE VIEW PILOT COMPLETE