147 lines
5.7 KiB
Markdown
147 lines
5.7 KiB
Markdown
# M15 Runtime Foundation & Shared UI
|
|
|
|
## Status
|
|
|
|
- Plan: `M15_RUNTIME_FOUNDATION`
|
|
- Status: `IN_PROGRESS`
|
|
- Activated: 2026-08-25
|
|
- Baseline: `0d7dcce` (`MVP_FIRST_CYCLE_COMPLETE`, repository cleanup closed)
|
|
- Owner authorization: explicit instruction to begin the runtime architecture
|
|
refactor and establish shared game-wide services/components.
|
|
|
|
## Objective
|
|
|
|
Create the smallest reusable Runtime Foundation that can support future pages
|
|
without forcing every page through the current `main.gd` / `entry_shell.gd`
|
|
coupling. The first stopping point is an additive, tested foundation and a
|
|
Settings integration boundary; the accepted MVP player flow must remain
|
|
behaviorally unchanged.
|
|
|
|
## Player/System Stopping Point
|
|
|
|
At the end of this plan's first boundary:
|
|
|
|
- the existing first-cycle route still launches and completes unchanged;
|
|
- settings data has one explicit service/repository boundary;
|
|
- shared UI primitives have no dependency on `facade`, `current_screen`, or
|
|
page-specific domain state;
|
|
- a screen-stack/route context can represent the caller and return focus for
|
|
Settings without copying settings logic into every page;
|
|
- the new foundation is available for the next page migration, but accepted
|
|
pages are not mass-rewritten in this milestone.
|
|
|
|
## Architecture Contract
|
|
|
|
### Dependency direction
|
|
|
|
```text
|
|
AppRoot / FlowRouter
|
|
-> Page Controllers and Page Views
|
|
-> Application Commands / Use Cases
|
|
-> Domain Services
|
|
-> Repositories / persistence
|
|
|
|
Page Views -> Shared UI primitives
|
|
Shared UI primitives -X-> facade, current_screen, domain services, Save files
|
|
Domain Services -X-> Control, Label, TextureRect, page nodes
|
|
```
|
|
|
|
### Shared ownership classes
|
|
|
|
1. **Global services**: Settings, localization, audio, input/focus, save and
|
|
screen navigation. One owner and one public boundary.
|
|
2. **Shared UI primitives**: tokens, theme, button states, rails, notices,
|
|
dialogs and common icons. They receive view data and emit user intent.
|
|
3. **Page patterns**: optional shells such as a settings workspace or action
|
|
dock. They may be configured by a page context, but do not own game rules.
|
|
4. **Page-specific composition**: world art, battle field, market board,
|
|
risk relic and other authored layouts remain owned by their page module.
|
|
|
|
## Ordered Steps
|
|
|
|
### M15-A — Foundation contract and inventory (`COMPLETE`)
|
|
|
|
- Record the baseline, forbidden scope and ownership rules in this plan.
|
|
- Inventory current shared candidates (`entry_chrome.gd`, `settings_store.gd`,
|
|
localization/font/assets and screen-return branches).
|
|
- Add the checkpoint pointer to this plan before product code changes.
|
|
|
|
Acceptance:
|
|
|
|
- this plan is the only active implementation plan;
|
|
- the current MVP and historical adapters are explicitly frozen;
|
|
- no `.uid`, `.import`, cache or `prototype_incremental/` cleanup is included.
|
|
|
|
### M15-B — Additive foundation types (`IN_PROGRESS`)
|
|
|
|
Add only the minimum new code under `runtime/foundation/` and
|
|
`runtime/ui/shared/`:
|
|
|
|
- `app_services.gd` — explicit service bundle, no global page lookups;
|
|
- `screen_context.gd` — caller/return-route/focus context;
|
|
- `ui_tokens.gd` — shared visual and layout constants;
|
|
- `shared_button.gd` — semantic button state/variant boundary;
|
|
- `screen_stack.gd` — route/overlay stack contract without replacing the
|
|
current entry flow yet.
|
|
|
|
The additive layer must compile independently and have focused unit checks.
|
|
|
|
### M15-C — Settings integration pilot (`PENDING`)
|
|
|
|
- Wrap the existing validated `ABGEntrySettingsStore` behind a foundation
|
|
`SettingsService` boundary without changing the JSON schema or migration
|
|
behavior.
|
|
- Pass a `ScreenContext` to Settings entry/return paths.
|
|
- Keep the existing Settings visuals and semantics until a later page-specific
|
|
reconstruction step; this is an ownership refactor, not a visual redesign.
|
|
|
|
Acceptance:
|
|
|
|
- defaults, v1 migration, validation, atomic save and corrupt-file rejection
|
|
remain covered;
|
|
- Title/Guild/Battle callers return to the correct screen and focus context;
|
|
- no page writes the settings file directly.
|
|
|
|
### M15-D — Focused verification and migration boundary (`PENDING`)
|
|
|
|
- Run foundation-focused tests and the existing DEV-1 settings/entry checks.
|
|
- Run a normal 100% launch/settings/return smoke path at the current required
|
|
fixtures; 130% remains non-blocking for this milestone.
|
|
- Run the MVP first-cycle audit to prove no route regression.
|
|
- Record the migration boundary and commit the smallest focused change.
|
|
|
|
## Frozen Scope
|
|
|
|
- No mass rewrite of `entry_shell.gd` or `main.gd`.
|
|
- No changes to Company, Contract, Battle, reward, recovery or Save-v11
|
|
gameplay semantics.
|
|
- No new page visual redesign or asset generation.
|
|
- No iOS/export/package/signing work.
|
|
- No deletion of historical runtime, `.uid`, `.import` or provenance files.
|
|
|
|
## Required Evidence
|
|
|
|
- Godot parse/import diagnostics: strict zero.
|
|
- Focused foundation tests and settings regression marker.
|
|
- Normal-render settings open/apply/discard/return evidence.
|
|
- Existing `ABG_MVP_FIRST_CYCLE_AUDIT_OK` remains green.
|
|
- Focused commit pushed before activating the next step.
|
|
|
|
## Issue Register
|
|
|
|
- `M15-ISSUE-01` — current `entry_shell.gd` owns both page composition and
|
|
settings return logic. Resolved only when Settings has an explicit context
|
|
boundary; visual extraction remains a later step.
|
|
- `M15-ISSUE-02` — `entry_chrome.gd` contains multiple visual families in one
|
|
class. It is retained as provenance/compatibility until shared variants are
|
|
extracted and individually verified.
|
|
|
|
## Commit Boundaries
|
|
|
|
- `M15-A`: plan/checkpoint activation commit.
|
|
- `M15-B`: additive foundation compile/test commit.
|
|
- `M15-C`: Settings integration commit.
|
|
- `M15-D`: focused evidence and closure commit.
|
|
|
|
Each boundary must pass its focused checks before the next step becomes active.
|