docs: activate M43 Guild page view refactor

Freeze the live HUB-001 Guild View boundary before product code.
This commit is contained in:
2026-08-26 09:46:47 +08:00
parent 975c77db2a
commit dffc20f763
3 changed files with 182 additions and 15 deletions
+8 -13
View File
@@ -13,21 +13,16 @@
## Current State
- Stage: `M42_CONTRACT_CHOICE_PAGE_VIEW_REFACTOR` (`COMPLETE`; no later
migration active)
- Active implementation step: none. M42-D closes at source `da94e8a`; M41 is
complete at
source `b88b211`; its source-bound View contract, controller/runtime/route
- Stage: `M43_GUILD_PAGE_VIEW_REFACTOR`
- Active implementation step: `M43-A` (`IN_PROGRESS`). M42 is complete at
source `975c77d`; its source-bound View contract, controller/runtime/route
regressions, DEV-3 candidate, full MVP first-cycle audit and four-fixture
Market visual equivalence all pass with strict diagnostics `0` and
Contract Choice visual equivalence all pass with strict diagnostics `0` and
exact-once markers. Evidence is recorded in
`docs/runtime/M41_MARKET_PAGE_VIEW_VISUAL_AUDIT.md`.
M42-A is complete at the activation boundary, M42-B is complete at source
`885506f`, M42-C is complete at source `da94e8a` and M42-D closes with the
source-bound audit in
`docs/runtime/M42_CONTRACT_CHOICE_PAGE_VIEW_VISUAL_AUDIT.md`. The durable
plan `docs/plans/M42_CONTRACT_CHOICE_PAGE_VIEW_REFACTOR.md` is complete;
no later View migration is activated.
`docs/runtime/M42_CONTRACT_CHOICE_PAGE_VIEW_VISUAL_AUDIT.md`.
M43 now freezes the next live HUB-001 layered Guild boundary before product
code; the durable plan is
`docs/plans/M43_GUILD_PAGE_VIEW_REFACTOR.md`.
`M40_RECRUIT_REVIEW_PAGE_VIEW_REFACTOR` is complete. It froze the SHP-002
Recruit Review stopping point, Controller/ViewData boundary, static master,
exact fact and command nodes, approved invisible Settings hit area,
+21 -2
View File
@@ -10,8 +10,9 @@ Complete-game Goal, hand-drawn repair boundary, ordered implementation plan, roa
## Repository Reset And Page Production Baseline
> Status: `COMPLETE / M42_CONTRACT_CHOICE_PAGE_VIEW_REFACTOR`
> Active step: none. M42-D is closed and no later View migration is active.
> Status: `IN_PROGRESS / M43_GUILD_PAGE_VIEW_REFACTOR`
> Active step: `M43-A` (architecture contract and inventory). M42-D is closed
> at source `975c77d`; no later product code has changed yet.
> M41-D is closed at source `b88b211`; M41-C is closed with source-bound verification and
> four-fixture visual equivalence. M41-B is closed at source `9a440b3`; M40-D is closed at source
> `9da7cac`; M39-D is closed at source `cf14bc8`. M32-D is
@@ -3995,3 +3996,21 @@ they are not duplicated here.
`select_difficulty`/`confirm`/`back` intents. Controller, Contract service,
Guild/Market routing, economy, Save and localization semantics are
unchanged. M42 is complete; no later migration is active.
### 2026-08-26 - M43 Guild Page View Refactor Activated
- M42 Contract Choice View is closed at source `975c77d`. The next bounded
architecture slice is `M43_GUILD_PAGE_VIEW_REFACTOR`, recorded in
`docs/plans/M43_GUILD_PAGE_VIEW_REFACTOR.md`.
- M43-A is now the sole active step. It freezes the live HUB-001 layered Guild
desk (`GuildMasterWorldExtension` / `GuildMasterDesignCanvas` /
`GuildMasterLayeredWorld`), fixed top/bottom rails, Company/status/kiosk
presentation, truthful empty/active/returned Contract states, focus/touch
targets and the eight explicit destination/utility intents before product
code.
- `GuildPageController.snapshot()` remains the view-data authority and the
existing EntryShell application/service boundaries remain authoritative for
routing, Contract, Market, Party, Risk, persistence and current Company.
M43 changes no gameplay, economy, Save, localization or visible Guild
semantics; normal `100%` landscape is the blocking visual scope and `130%`
remains non-blocking.
+153
View File
@@ -0,0 +1,153 @@
# M43 Guild Page View Refactor
## Status
- Plan: `M43_GUILD_PAGE_VIEW_REFACTOR`
- Status: `IN_PROGRESS`
- Activated: 2026-08-26
- Baseline: `975c77d` (`M42_CONTRACT_CHOICE_VIEW_PILOT_COMPLETE`)
- Owner authorization: continuation of the Owner-authorized layered Passive
View + Presenter/ViewData + Domain/Application Service architecture. The
next bounded extraction is the accepted HUB-001 layered Guild desk.
## Objective
Extract the live layered Guild desk from `entry_shell.gd` into a passive,
UI-only `ABGGuildPageView` while preserving the accepted world/rail/actor
composition, empty/active/returned Contract states, destination locks,
Title/Settings/Roster commands, focus/touch targets and normal `100%` output.
This is a structural View migration, not a Guild visual redesign or a change
to Contract, Market, Party, Risk, Battle, economy, Save or localization
semantics.
## Target boundary
```text
EntryShell / composition root
-> GuildPageController.snapshot()
-> presentation-ready Guild ViewData
-> ABGGuildPageView.render(ViewData)
-> explicit destination/utility intents
-> EntryShell application and route boundaries
```
## Player-visible stopping point
- The player sees the same accepted HUB-001 layered world, fixed rail caps,
engine-rendered Company/pressure/Coin values, two-member muster and kiosk
copy at the same normalized anchors.
- Empty, active and returned Contract states keep the same truthful enabled /
disabled destination controls and reason text.
- Title, Settings, Roster, Contract Board, Market, Party and Risk controls
preserve their existing targets and routes. Disabled controls remain
disabled rather than emitting an intent.
- The View receives a copied `GuildPageController.snapshot()` and emits only
explicit utility/destination intents. It owns no service, persistence or
route state.
## Frozen semantic nodes
`GuildMasterWorldExtension`, `GuildMasterDesignCanvas`,
`GuildMasterLayeredWorld`, `GuildAnchorRoot`, `GuildTopRail` and its three
segments, `GuildBottomRail` and its three segments, `GuildTitlePlate`,
`GuildAnchorTitle`, `GuildAnchorStatus`, `GuildProgressStatus`,
`GuildCoinStatus`, `GuildAnchorCompanyStatus`, `GuildSettings`, `GuildTitle`,
`GuildRoster`, `GuildMemberPortraitTexture_0/1`,
`GuildMasterIdentityPlate0/1`, `GuildMasterKioskTexture`,
`GuildKioskCopyArea`, `GuildKioskText`, `GuildContractReason`,
`GuildMarketReason`, `GuildNotice`, `GuildRosterButton`, `GuildEquipment`,
`GuildParty`, `GuildRisk`, `GuildContractBoard`/`GuildContractActive`,
`GuildMarket`/`GuildMarketUnavailable`, hidden command labels and the two
historical invisible sticker markers remain stable.
## Intent boundary
The View emits only:
```text
title
settings
roster
equipment
party
risk
contract
market
```
Enabled destination commands carry no mutable Company payload; EntryShell
uses its current Company and the existing service/controller boundaries.
## Forbidden View dependencies
The View must not import or call `GuildContractService`, persistence,
`RuntimeContentRegistry`, the compatibility facade, `current_screen`,
`entry_shell.gd`, or EntryShell globals. `GuildPageController` remains
outside the View and supplies copied facts.
## Ordered steps
### M43-A — Architecture contract and inventory (`IN_PROGRESS`)
- Freeze the accepted layered Guild stopping point, node tree, normalized
canvas/aspect policy, responsive typography, focus/touch targets, state
branches and destination intent map before Runtime product changes.
- Record the existing HUB-001/DEV-3 normal capture family as the immutable
equivalence target. Blocking scope is normal `100%` landscape at
`760x360`/`zh_CN`, `844x390`/`en`, `1280x720`/`zh_CN` and `1280x720`/`en`;
`130%` remains non-blocking.
- Commit and push this activation boundary before View code.
### M43-B — Passive View extraction (`PENDING`)
- Add `runtime/entry/views/guild_page_view.gd` and an isolated View contract
test.
- Move only the layered Guild node construction, responsive canvas/layout,
presentation and focus into the View. Keep the controller snapshot,
application services and route semantics in EntryShell.
- Translate deferred utility/destination intents in EntryShell and remove only
the extracted active Guild builders/helpers.
### M43-C — Focused verification (`PENDING`)
- Run the View contract, M20 controller/runtime, DEV-3 Contract/Market/Hire
regressions, layered reconstruction and responsive Guild checks with strict
diagnostics `0` and exact-once markers.
- Run the source-bound DEV-3 candidate and full MVP first-cycle audit.
- Compare the four required normal `100%` Guild captures against the M43-A
baseline at byte and decoded-pixel level.
### M43-D — Handoff (`PENDING`)
- Record source-bound evidence in
`docs/runtime/M43_GUILD_PAGE_VIEW_VISUAL_AUDIT.md`.
- Close only the Guild View extraction. Contract Choice, Market, Company /
Roster, Party, Risk, Battle, economy, Save, packaging and release remain
outside this plan.
- Update the checkpoint and development ledger, then push the focused closure.
## Frozen scope
- No Guild visual redesign, new assets/audio/animation or content changes.
- No changes to `GuildPageController`, Contract receipts, Market, Party, Risk,
Battle, economy, Save or localization semantics.
- No global event bus, reflection-based service locator, two-way binding layer
or mass rewrite of `entry_shell.gd`.
- No deletion or staging of compatibility/history files, `.uid`, `.import` or
`prototype_incremental/`.
- No packaging, iOS export, signing, deployment, store or release work.
## Commit boundaries
- `M43-A`: plan/checkpoint/ledger activation and baseline.
- `M43-B`: View and EntryShell integration.
- `M43-C`: focused verification/evidence.
- `M43-D`: handoff/closure.
Each boundary must pass its narrowest focused checks and be pushed before the
next step becomes `IN_PROGRESS`; a failed check keeps the same step active.
## Final handoff
`ABG M43 GUILD VIEW PILOT COMPLETE`