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

7.8 KiB

M43 Guild Page View Refactor

Status

  • Plan: M43_GUILD_PAGE_VIEW_REFACTOR
  • Status: COMPLETE
  • 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

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:

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 (COMPLETE)

  • 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.

Activation baseline: source-bound attempt m43-guild-baseline/20260826T014743Z-34444 passes ABG_HUB001_LAYERED_OK, ABG_DEV3_GUILD_OK and four normal ABG_DEV3_CAPTURE_OK terminals, followed by ABG_HUB001_CANDIDATE_OK with strict diagnostics 0, 24 captures and owned cleanup. Baseline source is 975c77db2aa742189fca1edf4c066ab66370c252; evidence archive SHA-256: c8c9c017bbca46eb6fdc2d148af019e4981f4dfcd5102f556215159d8f8ec958.

M43-A is complete at the activation boundary. The live _show_guild_master_composite_exact() composition, normalized 16:9 canvas, rail/actor/kiosk inventory, state branches, focus/touch targets and eight-intent boundary are frozen without Runtime product changes.

M43-B — Passive View extraction (COMPLETE)

  • 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.

Closure: source 5220acb adds ABGGuildPageView, mounts it from EntryShell, removes only the extracted Guild UI builders and translates the eight explicit utility/destination intents. Controller, current Company, routing, services, Contract/Market/Party/Risk, persistence, gameplay and localization semantics remain unchanged.

M43-C — Focused verification (COMPLETE)

  • 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.

Closure: source-bound focused attempt m43-guild-view-focused-v2/20260826T021613Z-65045 passes the isolated View contract, M20 controller/runtime, DEV-3 Contract/Market/Hire and M09/M10 regressions, HUB-001 layered reconstruction, ABG_HUB001_CANDIDATE_OK, exact-once markers, strict diagnostics 0, 24 normal captures and owned cleanup. Full first-cycle audit attempt m43-mvp-audit-v2/20260826T022147Z-70440 passes ABG_M43_GUILD_VIEW_CONTRACT_OK and ABG_MVP_FIRST_CYCLE_AUDIT_OK exactly once with strict diagnostics 0, 128 normal 100% frames, parsed touch and owned workspace/process cleanup. The four normal Guild capture fixtures are byte- and decoded-pixel-identical to the M43-A baseline (zero differing pixels).

M43-D — Handoff (COMPLETE)

  • 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.

Closure: source 710dc6b records the source-bound audit, checkpoint and ledger closure. M43 is complete; no later migration is active.

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