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

8.8 KiB

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

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