Files
aetherbound-guild/docs/plans/M37_READINESS_PAGE_VIEW_REFACTOR.md
T
2026-08-26 00:39:51 +08:00

166 lines
7.0 KiB
Markdown

# M37 Readiness Page View Refactor
## Status
- Plan: `M37_READINESS_PAGE_VIEW_REFACTOR`
- Status: `COMPLETE`
- Activated: 2026-08-25
- Baseline: `deb0707` (`M36_RISK_COMMITMENT_PAGE_VIEW_REFACTOR_COMPLETE`)
- Owner authorization: the Owner asked to continue decomposing the Entry
pages into the layered Passive View + Presenter/ViewData +
Domain/Application Service architecture. Readiness is the next bounded
extraction in the M36 handoff map.
## Objective
Extract the PTY-002 Readiness Review page from `entry_shell.gd` into a
passive, UI-only `ABGReadinessPageView` while preserving the accepted custom
16:9 composition, static master artwork, complete four-member formation,
coverage/warning/receipt facts, command eligibility, focus order, touch
surfaces, localization and normal `100%` visual output.
This is a structural View migration, not a Formation, Risk, Battle, Economy,
Save or visual redesign.
## Target boundary
```text
EntryShell / composition root
-> ReadinessPageController.snapshot()
-> presentation-ready ViewData
-> ABGReadinessPageView.render(ViewData)
-> explicit View intents
-> EntryShell application command boundary
-> existing readiness/party/risk/settings commands
```
### Ownership rules
1. `ABGReadinessPageView` owns only Godot nodes, normalized layout, focus,
local text/portrait presentation and intent emission.
2. The View does not import or call FormationRiskService, Save, the
compatibility facade, RuntimeContentRegistry, `current_screen` or
EntryShell globals.
3. `ABGReadinessPageController` remains the authority for copied Company,
Contract, Formation, ordered Recruit, warning, receipt and command facts.
4. EntryShell remains the composition root and translates only explicit
`settings`, `review_member`, `review_warnings`, `revise`, `back`, `accept`
and `risk` intents through deferred connections.
5. FormationRiskService remains the only order/readiness transaction and
persistence authority. Party, Risk, Battle, Save and route semantics stay
unchanged.
## Player-visible stopping point
- The player sees the same PTY-002 parchment/master frame, frozen Company and
Contract header, four positioned Recruit portraits, relation cord/effects,
coverage band, warning rows, knockout/receipt facts and command rail as the
M22-accepted page.
- Member and warning review actions update the existing local notice without
changing saved formation facts.
- `Revise` returns to Party Line; `Back` returns to Guild; `Accept` records the
existing idempotent readiness receipt and stays on Readiness; `Risk` opens
the existing Risk Board only when the controller says it is eligible.
- Settings opens through the existing caller context. Invalid controller data
renders the existing invalid-state boundary.
## Ordered steps
### M37-A — Architecture contract and inventory (`COMPLETE`)
- Freeze the PTY-002 stopping point, dependency direction and forbidden
imports before product code changes.
- Inventory the existing normalized canvas, static master, `PartyLineTrack`
z-order, UI-only formatting helpers, exact semantic node names and the
seven-intent command boundary.
- Record the M22 normal-capture equivalence target at
`760x360`/`zh_CN`, `844x390`/`en`, `1280x720`/`zh_CN` and
`1280x720`/`en`.
- Commit and push this activation boundary before Runtime product changes.
Closure: source `8fc239f` activates this plan and freezes the PTY-002
composition, dependency direction, exact node/layer contract, seven-intent
boundary and M22 normal-capture equivalence target.
### M37-B — Passive View extraction (`COMPLETE`)
- Add `ABGReadinessPageView` under `runtime/entry/views/`.
- Reuse `ABGPageView` and `ABGPageContext` while retaining the custom 16:9
normalized canvas, static master, portrait mapping and PartyLineTrack
layer semantics.
- Preserve every accepted Readiness node name and command hit area.
- Mount the View from EntryShell and translate only the seven explicit
intents.
- Remove only the Readiness UI builder/helpers from EntryShell; keep all
service/controller/application commands intact.
Closure: source `a83963f` adds `ABGReadinessPageView`, mounts it from EntryShell
with deferred seven-intent translation, removes the former Readiness UI
builder/helpers and adds the isolated View contract test. Existing Readiness
behavior passes, and the four normal Readiness fixtures are pixel-equivalent
to the M22 baseline.
### M37-C — Focused verification (`COMPLETE`)
- Add `ABG_M37_READINESS_VIEW_CONTRACT_OK`.
- Run the focused Readiness controller/View and DEV-4/M22 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 Readiness captures with the M22 baseline at the four required
fixtures/locales.
Closure: source `7da8d05` passes the source-bound View contract, Readiness and
route regressions, DEV-4 candidate, four-fixture normal capture set and full
MVP audit. All required markers are exact-once with strict diagnostics `0`,
and the four Readiness captures are byte-equivalent to the M22 baseline. Full
evidence is recorded in
`docs/runtime/M37_READINESS_PAGE_VIEW_VISUAL_AUDIT.md`.
### M37-D — Handoff (`COMPLETE`)
- Record source-bound evidence and visual equivalence in
`docs/runtime/M37_READINESS_PAGE_VIEW_VISUAL_AUDIT.md`.
- Close only Readiness; Party Line, Risk Board, Battle and later Views remain
outside this plan.
- Update the checkpoint and development ledger, then push the focused closure.
Closure: source `6c9259b` records the source-bound audit, exact marker
evidence and four-fixture byte-equivalence handoff. M37 closes only Readiness
Review; no downstream page or gameplay scope is implied.
## Frozen scope
- No Formation/Risk/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_M37_READINESS_VIEW_CONTRACT_OK` exactly once.
- Existing `ABG_M22_READINESS_CONTROLLER_OK`, `ABG_DEV4_READY_OK`, 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 seven explicit intents.
- Readiness normal `100%` captures remain visually equivalent to the M22
baseline at all four required fixtures/locales.
- Focused source is committed, pushed and tracked files are clean.
## Commit boundaries
- `M37-A`: plan/checkpoint activation.
- `M37-B`: View and EntryShell integration.
- `M37-C`: focused verification/evidence.
- `M37-D`: handoff/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 M37 READINESS VIEW PILOT COMPLETE`
M37 is closed. Any later View migration requires a separately activated plan.