Files
aetherbound-guild/docs/runtime/M46_UI_CONSISTENCY_VISUAL_AUDIT.md
T

134 lines
9.6 KiB
Markdown

# M46 MVP UI Consistency — Source-Bound Visual Audit
## Scope and stopping point
M46 is a bounded presentation/component pass over the already playable MVP.
It standardizes repeated command states, owned command icons, type/spacing
tokens and notice/disabled surfaces without flattening the accepted page
compositions. Market, Guild, Party/Readiness, Risk, Battle and Company keep
their task-specific art masters, normalized 16:9 canvases and field-attached
layout. Gameplay, economy, Contract/Battle rules, Save/Receipt semantics,
routing, content identities and localization semantics were not changed.
Normal `100%` landscape is the blocking visual scope. `130%` evidence remains
supplemental and non-blocking, as recorded in the Owner-approved repository
contract.
Product migration source: `ebc0c8f26c222d4764064e7998e3b143da727f4f`.
Foundation source: `f736d7ac41a56feb50e9336f97faa5a6fa90c339`.
## Architecture boundary
- `ABGUI_Tokens`, `ABGUIFactory` and `ABGUIIcon` remain presentation-only.
- Passive Views consume copied Controller/ViewData snapshots and emit the same
explicit deferred intents and stable semantic node names as before.
- `ABGPageView.set_command_state()` is the shared disabled/selected state
entry point for Company/Result/Recovery controls.
- Market, Party, Readiness, Risk Board and Risk Commitment migrate repeated
command chrome through the shared factory while retaining their local
content controls, art masters and normalized geometry.
- The shipped command glyphs for Settings, Back, Company, Coin, Equipment and
action commands now use the owned vector icon grammar. Risk option glyphs
remain content markers, not command chrome.
- EntryShell remains the composition and application boundary; no mass
rewrite or Router extraction was introduced.
## Source-bound evidence
All accepted attempts used `tools/run_test_attempt.py` with immutable source
archives, owned HOME/cache/TMP/browser roots, exact-once marker accounting,
strict diagnostics and complete process-group/workspace cleanup.
| Check | Attempt | Result | Evidence archive SHA-256 |
| --- | --- | --- | --- |
| Shared foundation | `m46-ui-foundation-focused/20260826T122929Z-99785` at `f736d7a` | PASS; `ABG_M46_UI_FOUNDATION_OK` exactly once; tokens, factory, icons, notices and touch checks; strict diagnostics `0`; owned cleanup | no retained evidence files |
| Market View contract | `m46-c-market_page_view_test/20260826T125129Z-22546` | PASS; `ABG_M41_MARKET_VIEW_CONTRACT_OK` exactly once; strict diagnostics `0`; owned cleanup | no retained evidence files |
| Party Line View contract | `m46-c-party_line_page_view_test/20260826T125152Z-22882` | PASS; `ABG_M39_PARTY_LINE_VIEW_CONTRACT_OK` exactly once; strict diagnostics `0`; owned cleanup | no retained evidence files |
| Readiness View contract | `m46-c-readiness_page_view_test/20260826T125211Z-23202` | PASS; `ABG_M37_READINESS_VIEW_CONTRACT_OK` exactly once; strict diagnostics `0`; owned cleanup | no retained evidence files |
| Risk Board View contract | `m46-c-risk_board_page_view_test/20260826T125229Z-23448` | PASS; `ABG_M38_RISK_BOARD_VIEW_CONTRACT_OK` exactly once; strict diagnostics `0`; owned cleanup | no retained evidence files |
| Risk Commitment View contract | `m46-c-risk_commitment_page_view_test/20260826T125245Z-23757` | PASS; `ABG_M36_RISK_COMMITMENT_VIEW_CONTRACT_OK` exactly once; strict diagnostics `0`; owned cleanup | no retained evidence files |
| Battle Result View contract | `m46-c-battle_result_page_view_test/20260826T125302Z-24054` | PASS; `ABG_M35_BATTLE_RESULT_VIEW_CONTRACT_OK` exactly once; strict diagnostics `0`; owned cleanup | no retained evidence files |
| Recovery View contract | `m46-c-recovery_page_view_test/20260826T125320Z-24295` | PASS; `ABG_M32_RECOVERY_VIEW_CONTRACT_OK` exactly once; strict diagnostics `0`; owned cleanup | no retained evidence files |
| Company View contract | `m46-c-company_page_view_test/20260826T125337Z-22545` | PASS; `ABG_M44_COMPANY_PAGE_VIEW_CONTRACT_OK` exactly once; strict diagnostics `0`; owned cleanup | no retained evidence files |
| DEV-3 candidate | `m46-d-dev3-candidate/20260826T125502Z-25993` | PASS; `ABG_DEV3_CANDIDATE_SUITE_OK` exactly once; 24 normal-render frames; parsed touch; strict diagnostics `0`; owned cleanup | `4525acf73eb155deeb9877bf5a3f6fc237abe4377e6b5a64b290e4dd6e867fc0` |
| DEV-4 candidate | `m46-d-dev4-candidate/20260826T125705Z-28196` | PASS; `ABG_DEV4_CANDIDATE_SUITE_OK` exactly once; 24 normal-render frames; parsed touch; strict diagnostics `0`; owned cleanup | `9ab49d9831ebdccc80ac32045af4e0af4b7864e561378c16e167b5e85210efaa` |
| DEV-5 candidate | `m46-d-dev5-candidate/20260826T125831Z-29634` | PASS; `ABG_DEV5_CANDIDATE_SUITE_OK` exactly once; 24 normal-render frames; parsed touch; strict diagnostics `0`; owned cleanup | `bb77c47994940a0d3f93d7fe52c7fa4406779b69e0a2c0c7fec1d625d259f401` |
| DEV-6 candidate | `m46-d-dev6-candidate/20260826T130007Z-31282` | PASS; `ABG_DEV6_CANDIDATE_SUITE_OK` exactly once; 24 normal-render frames; parsed touch; strict diagnostics `0`; owned cleanup | `f2c608563ed3a741dff6c466f5e8c641f151f22f92748846444c104ae0e803f4` |
| MVP first-cycle audit | `m46-d-mvp-first-cycle-audit/20260826T130153Z-33276` | PASS; `ABG_MVP_FIRST_CYCLE_AUDIT_OK` exactly once; 128 normal `100%` frames / 180 evidence files; locales `zh_CN,en`; required viewports; parsed touch/restart; strict diagnostics `0`; owned cleanup | `5433de35ad94e3eaab5cd30b9d3c9db01cbb1c92dd5af35b1339fff969c4a413` |
| Current Company captures | `m46-d-company-capture/20260826T132145Z-53462` | PASS; `ABG_M16_COMPANY_CAPTURE_OK` exactly once; eight normal `100%` Roster/Recruit Detail frames across all four fixtures; authored 44px target check; strict diagnostics `0`; owned cleanup | `9e8da00b61af5dba758c9387a61ee8fcb3cb4ec65720daeabb2ba4cffe621d14` |
| Current Contract Return/Guild captures | `m46-d-contract-return-capture/20260826T132252Z-54509` | PASS; `ABG_M45_CONTRACT_RETURN_CAPTURE_OK` exactly once; 12 normal `100%` Market/Contract Return/Guild frames across all four fixtures; bounds, overlap and clipping checks; strict diagnostics `0`; owned cleanup | `1c43556f6ecfd3ab0f683ce4ca9a1a3afe338b2ea8d6e264afcfaefce581e2a0` |
The first Company capture invocation at `20260826T131211Z-44224` used an
incorrect headless normal-render command and was interrupted during startup.
It is retained only as a handled runner terminal and is not acceptance
evidence. The corrected normal-render invocation above is the accepted capture
set.
## Normal `100%` visual matrix
The accepted MVP audit supplies 128 normal frames across the first-cycle
Market/Recruit, Party/Readiness/Risk, Battle Opening/Live, Result, Knockout,
Reward, Recovery and restart states. Its capture fixtures cover:
- `760x360 / zh_CN / 100%`
- `844x390 / en / 100%`
- `1280x720 / zh_CN / 100%`
- `1280x720 / en / 100%`
The current Company capture set adds Roster and Recruit Detail for all four
fixtures. The current Contract Return capture set adds Market,
Contract Return Review and returned Guild for all four fixtures. Together the
retained sets cover every M46 page family at the required normal viewports and
locales; the DEV-3/4/5/6 candidate archives provide additional supplemental
states and 130% fixtures.
## Manual visual review
Representative full-resolution frames were extracted from the retained
archives and reviewed at the required normal fixtures. Automated capture
checks cover complete frame dimensions, viewport containment, authored touch
targets and the relevant page-specific overlap/clipping assertions; manual
review checked the same frames for hierarchy and visual drift.
### Findings
- **Command language — PASS.** Market, Party/Readiness, Risk, Result/Recovery
and Company now read as one family through the shared navy/gold/ivory
states, focus treatment, disabled contrast and owned Settings/Back/action
icons.
- **Task composition — PASS.** The Market right rail and field-attached exit,
Party formation line, Risk parchment/cards and Battle field HUD remain
distinct and readable. The consistency pass did not turn them into a card
wall or replace their accepted art masters.
- **Notices and disabled states — PASS.** Receipt/status notices use the same
bordered surface language; disabled Continue/Begin Battle/return actions
retain truthful muted state without obscuring the authored copy.
- **Responsive containment — PASS.** The inspected short landscape and wide
landscape frames keep the 16:9 masters centered/contained, with footer and
right-rail controls inside the viewport. No visible clipping or command
overlap was found in the reviewed frames; automated bounds checks cover the
full capture sets.
- **Typography and density — PASS at the blocking scope.** Engine-rendered
values remain legible at normal `100%`. Market and Risk Commitment retain
intentionally compact fact copy inside their authored slots; the existing
`130%` fixtures remain supplemental and are not a M46 blocker.
## Scope and repository checks
- Existing semantic node names, explicit intents, focus order, routing and
Save/Receipt behavior remain covered by the focused View contracts and the
DEV/MVP suites.
- No gameplay, economy, content, static-master, localization, packaging,
device, signing, store or release work was started.
- `git diff --check` passes. The only untracked files are Godot-generated
`.uid`/`.import` metadata and `prototype_incremental/`, all retained per the
repository contract and not staged.
## Verdict
M46-C migration and M46-D verification satisfy the written stopping point.
The MVP now has one coherent reusable command/icon/type/notice language while
preserving its page-specific composition and runtime behavior.
`ABG M46 MVP UI CONSISTENCY PASS COMPLETE`