187 lines
8.8 KiB
Markdown
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`
|