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

7.5 KiB

M22 Readiness Controller Pilot

Status

  • Plan: M22_READINESS_CONTROLLER_PILOT
  • Status: COMPLETE
  • Activated: 2026-08-25
  • Baseline: bcd359d (M21_PARTY_LINE_CONTROLLER_PILOT_COMPLETE)
  • Owner authorization: the Owner authorized direct migration to the new code architecture; this is the next smallest first-cycle seam after Party Line.

Objective

Move the first-cycle Readiness Review view-data boundary onto an explicit, UI-independent controller while preserving the accepted PTY-002 composition, the frozen four-member snapshot, warning ownership, Accept/Revise/Back/Risk semantics and FormationRiskService transaction behavior. This is a structural Controller/View migration, not a Readiness visual redesign or a new preparation rule.

Player/System Stopping Point

  • Readiness opens only from the authoritative saved formation snapshot and keeps the same ordered four-member line, front exposure, relation/coverage facts and ordered/ready states;
  • the controller owns copied Company/Contract facts, saved order and stable Recruit positions, relation/coverage/first-threat facts, supplied warning facts, receipt/status facts and command eligibility;
  • the existing Readiness View keeps its accepted PTY-002 composition, static master, node names, hit areas, focus order, localization helpers, tooltips and callbacks;
  • FormationRiskService.accept_readiness remains the only readiness transaction/receipt authority, and loading/persistence remains outside the controller;
  • no accepted page, route, visual, input, economy, Save or risk rule changes.

Architecture Contract

Readiness route / FormationRiskService snapshot
  -> ReadinessPageController (view-data assembly)
  -> ReadinessViewData (deep-copied snapshot)
  -> Existing Godot PTY-002 Readiness View composition
  -> Existing FormationRiskService commands

The controller receives Company, Formation and explicit presentation facts. It validates the saved order 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 readiness acceptance, order saving, risk selection or battle rules. Warning rows are supplied as presentation facts and copied rather than re-inventing a transaction policy.

Ordered Steps

M22-A — Plan and boundary (COMPLETE)

  • Record the Readiness stopping point, invariants and forbidden scope.
  • Inventory the current saved-snapshot, warning, receipt, command and focus branches before product code changes.
  • Commit and push this activation boundary before Readiness product code.

Closure: source 0098b5b records the bounded Readiness Controller/View migration, its frozen PTY-002 and FormationRiskService invariants and its forbidden scope before any Readiness product code changes.

M22-B — Additive controller (COMPLETE)

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

  • missing/invalid Company, Contract, Formation and saved-order rejection;
  • copied ordered Recruit facts, stable position IDs and front Recruit;
  • relation/coverage/first-threat, supplied warning and receipt deep copies;
  • ordered/ready status classification and order-hash facts;
  • Revise/Back/Accept/Risk/Settings/Warning command eligibility;
  • stale selection/review fallback and deep-copy isolation.

Closure: source 6647b05 adds ABGReadinessPageController and the focused ABG_M22_READINESS_CONTROLLER_OK test. The controller validates the saved four-member boundary, copies Company/Contract/Formation facts, normalizes the reviewed Recruit, copies warning/receipt/snapshot data and exposes truthful ordered/ready command eligibility without Godot-node, persistence or FormationRiskService transaction dependencies. The source-bound focused attempt is /private/tmp/aetherbound-guild-test-evidence/m22-readiness-controller-source-bound/20260825T061725Z-60968; the marker appears exactly once, strict diagnostics are 0, and the owned workspace/process cleanup passes.

M22-C — View integration (COMPLETE)

  • Inject one controller through Entry Shell/AppServices.
  • Make Readiness rendering and summary facts consume controller output.
  • Preserve the accepted PTY-002 visual composition, node names, focus, touch targets, localization and callbacks.
  • Keep FormationRiskService.accept_readiness and all existing route/service calls unchanged.

Closure: source ab83290 injects ABGReadinessPageController through Entry Shell/AppServices and makes the accepted PTY-002 Readiness View consume copied controller output for Company/Contract facts, ordered Recruit facts, coverage, warning rows, receipt state and Accept/Risk command eligibility. The existing static master, node names, focus order, touch targets, localization, callbacks and FormationRiskService calls remain unchanged. The focused source-bound candidate archive is /private/tmp/aetherbound-guild-test-evidence/m22-readiness-controller-focused/20260825T062201Z-64223 with 49 evidence files, 24 normal 100% DEV-4 capture frames, exact-once ABG_M22_READINESS_CONTROLLER_OK and ABG_DEV4_CANDIDATE_SUITE_OK markers, strict diagnostics 0, owned workspace/process cleanup and archive SHA-256 e291052f30d8aeb79e5abfbb1e5d64362fc14c42a1becc73ca4507e4cffbd1d8.

M22-D — Verification and handoff (COMPLETE)

  • Run the focused controller, Readiness, Party, Risk, Guild, Market and Hire regressions.
  • Run normal 100% Readiness 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 ab83290 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/m22-mvp-audit/20260825T062330Z-65410 with 180 evidence files and archive SHA-256 7693816157e45f7c09eea8e5fe2609c4b3a9a9843eb98de0767ea8f5f5abfca2. M22 closes without changing PTY-002 presentation, Readiness/Save receipts, formation rules, Risk semantics or any later page.

Frozen Scope

  • No visual redesign or new assets/audio/animation.
  • No changes to FormationRiskService, formation rules, order/readiness receipts, Company, Contract, Risk, Battle, Save or economy semantics.
  • No migration of Risk, Battle, Result or Recovery pages in this plan.
  • No new warning policy; only existing supplied warning facts may cross the controller boundary.
  • No mass rewrite or deletion of compatibility/history files.
  • No packaging, signing, store or release work.

Acceptance Checks

  • ABG_M22_READINESS_CONTROLLER_OK exactly once.
  • Existing ABG_DEV4_READY_OK, Party, Risk, Guild, Market and Hire markers remain green.
  • Normal 100% Readiness captures, 48px targets, same-route focus, Revise/Back/Accept/Risk behavior and Settings return context remain green.
  • ABG_MVP_FIRST_CYCLE_AUDIT_OK remains green.

Commit Boundaries

  • M22-A: plan/checkpoint activation.
  • M22-B: controller and focused unit test.
  • M22-C: Entry Shell integration.
  • M22-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 M22 READINESS CONTROLLER MIGRATION READY