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

187 lines
8.8 KiB
Markdown

# M46 MVP UI Consistency Pass
## Status
- Plan: `M46_MVP_UI_CONSISTENCY_PASS`
- Status: `COMPLETE`
- Activated: 2026-08-26
- Baseline: `b40e5dd` (`M45_CONTRACT_RETURN_REPAIR` closure)
- Owner authorization: the Owner explicitly asked to begin the bounded MVP UI
consistency optimization after reviewing the current page-family audit.
## Objective
Make the local MVP read as one authored Aetherbound Guild product without
flattening the approved page compositions. Shared action semantics, typography,
spacing, status/notice surfaces and icon grammar should come from a small UI
foundation; Guild, Market, Party, Risk and Battle may retain their distinct
task-specific compositions and art masters.
This is a presentation/component consistency pass. It must not change gameplay,
economy, Contract or Battle rules, Save/Receipt semantics, routing decisions,
content identities, accepted static-master art, or the normal `100%` MVP scope.
## Why this boundary
The current MVP has a coherent palette and font, but several page families still
construct their own `Button`/`StyleBoxFlat`/text-scale systems. The resulting
runtime is functional and readable, yet Market/Risk/Party/Readiness and the
legacy EntryShell pages visibly drift from the shared Result/Recovery command
grammar. A small shared UI layer is the narrowest repair that improves that
cross-page read without reopening page reconstruction or domain behavior.
## Player-visible stopping point
- Primary, secondary, utility/back, danger and disabled commands use one shared
semantic state model while preserving each page's frozen hit rectangles.
- Settings, Back, Company, Coin and action icons use one owned vector/icon
grammar; Unicode glyphs are not used for shipped MVP command chrome.
- Common heading/body/label/micro sizes and spacing are sourced from the shared
token layer; page-specific layouts may still clamp them for their fixed
master geometry.
- Common notice/receipt/status surfaces share palette, border, focus and disabled
treatment.
- Market, Guild, Party/Readiness, Risk and Battle retain their approved art,
normalized 16:9 canvases and task-specific composition.
- All existing MVP intents, node names, focus order, 48px-or-better touch
targets and Save/Receipt behavior remain unchanged.
## Architecture boundary
```text
ABGUI_Tokens + shared UI factories/icons
↓
Passive PageView local presentation helpers
↓
existing Controller/ViewData snapshots and explicit intents
↓
unchanged EntryShell/Application/Domain/Save boundaries
```
The new/updated shared UI code is presentation-only. It must not import Save,
the compatibility facade, EntryShell globals, content registries or domain
services. Static masters remain visual assets; shared controls are overlays or
engine-rendered text only.
## Ordered steps
### M46-A — Baseline and UI contract (`COMPLETE`)
- Record the current page-family/component inventory and representative normal
`100%` captures.
- Freeze the shared semantic variants, token names, icon list, forbidden scope,
stable node names and touch/focus invariants before product code changes.
- Add this plan, checkpoint status and ledger activation only; do not change
runtime UI until this boundary is committed and pushed.
Acceptance: one active durable plan; baseline is `b40e5dd`; the current MVP
first-cycle and M45 captures remain the comparison set; no product behavior or
visual asset changes occur in this step.
Closure: M46-A closes at source `a10b3d2`. The activation boundary and this
baseline inventory are recorded in `CURRENT_CHECKPOINT.md`,
`docs/06_DEVELOPMENT_AND_REVIEW.md` and
`docs/runtime/M46_UI_CONSISTENCY_BASELINE.md`. Static inventory confirms 14
Passive Views, eight shared command-helper users, six custom button/style
families, mixed icon paths and legacy EntryShell builders. M46-B is now the
sole `IN_PROGRESS` step; no Runtime product code changed in M46-A.
### M46-B — Shared token/factory foundation (`COMPLETE`)
- Extend `runtime/foundation/ui_tokens.gd` with the canonical type scale,
spacing, border/radius, semantic colors and command variants needed by the
MVP.
- Upgrade `runtime/ui/shared/shared_button.gd` and add a small presentation-only
icon/notice factory if required; keep the API usable by passive Views and
legacy EntryShell helpers during gradual migration.
- Add focused foundation tests for token stability, minimum touch size, command
states and icon identity.
Closure: M46-B closes at source `f736d7a`. `ABGUI_Tokens`,
`ABGUIFactory`, `ABGUIIcon` and the upgraded `ABGSharedButton` provide the
presentation-only semantic command, type, spacing, notice and icon grammar;
`ABGPageView` and the legacy company helper consume the foundation without
changing callbacks, node names or page composition. The focused source-bound
attempt `m46-ui-foundation-focused/20260826T122929Z-99785` passes
`ABG_M46_UI_FOUNDATION_OK` exactly once with strict diagnostics `0`, return
code `0`, process/workspace cleanup complete and source revision
`f736d7ac41a56feb50e9336f97faa5a6fa90c339`. The `UI_FONT` compatibility alias
was retained for Risk View inheritance. No gameplay, Save/Receipt, routing or
static-master semantics changed.
### M46-C — High-impact MVP control migration (`COMPLETE`)
- Migrate the repeated Settings/Back/primary/secondary/disabled/notice
controls in Market, Party, Readiness, Risk, Result/Recovery and the Company
pages to the shared presentation helpers.
- Replace shipped Unicode command glyphs with the owned icon grammar.
- Keep page-specific offer cards, parchment/field layouts, static masters and
battle HUD geometry intact; do not mass-rewrite `entry_shell.gd`.
- Preserve exact semantic node names and explicit intents.
Closure: M46-C closes at source `ebc0c8f`. Market, Party, Readiness, Risk
Board, Risk Commitment, Result, Recovery and Company Views now consume the
shared command state/icon/notice helpers for the repeated MVP controls. The
focused contracts for all eight migrated Views pass with exact-once markers,
strict diagnostics `0`, parsed touch and owned cleanup. No gameplay, economy,
Save/Receipt, routing, content or static-master semantics changed.
### M46-D — Verification and handoff (`COMPLETE`)
- Run focused foundation/View regressions, DEV-3/4/5/6 candidate suites and the
full MVP first-cycle audit through `tools/run_test_attempt.py` with strict
diagnostics, exact-once markers, parsed touch and owned cleanup.
- Capture representative normal `100%` states for each page family in
`760x360`, `844x390` and `1280x720`, `zh_CN` and `en`; inspect consistency,
clipping, overlap and focal hierarchy. `130%` remains supplemental.
- Record the visual audit, close only this UI pass, update checkpoint/ledger and
push a focused handoff commit.
Closure: M46-D closes at source `ebc0c8f` after the DEV-3, DEV-4, DEV-5 and
DEV-6 candidate suites and the full MVP first-cycle audit pass through
`tools/run_test_attempt.py`. The audit reports exact-once markers, strict
diagnostics `0`, parsed touch/restart, owned cleanup and 128 normal `100%`
frames. Current-source Company and Contract Return/Guild capture sets add the
remaining page-family fixtures; manual review found no blocking clipping,
overlap or hierarchy regression. Evidence is recorded in
`docs/runtime/M46_UI_CONSISTENCY_VISUAL_AUDIT.md`.
## Acceptance checks
- New focused marker: `ABG_M46_UI_FOUNDATION_OK` exactly once.
- Existing MVP markers, M45 Contract Return safety and candidate suites remain
green; strict Godot diagnostics remain `0`.
- No semantic node, intent, route, Save, Receipt, economy or content identity
changes are introduced.
- Normal `100%` controls remain inside their frozen hit rectangles, retain
minimum 48px touch coverage where applicable and do not overlap authored text.
- Representative captures show one coherent command/icon/type language while
preserving task-specific page compositions.
- Tracked worktree is clean and pushed; `.uid`, `.import` and
`prototype_incremental/` remain untouched by cleanup.
## Frozen scope
- No new gameplay, Contract, Region, Boss, progression, economy, Save schema or
localization semantics.
- No static-master repaint, asset generation, pixelation or art-direction reset.
- No mass `entry_shell.gd` rewrite and no full Router extraction.
- No 130% blocking scope, device testing, iOS/Android export, signing, store or
release work.
- Do not delete or stage `.uid`, `.import` or `prototype_incremental/` as
cleanup targets.
## Commit boundaries
- `M46-A`: plan/checkpoint/ledger activation.
- `M46-B`: shared token/factory foundation and focused tests.
- `M46-C`: bounded MVP control migration.
- `M46-D`: evidence, visual audit, handoff and checkpoint closure.
Each boundary must be committed and pushed before the next step becomes
`IN_PROGRESS`; a failed check keeps the current step active.
## Final handoff
`ABG M46 MVP UI CONSISTENCY PASS COMPLETE`