diff --git a/CURRENT_CHECKPOINT.md b/CURRENT_CHECKPOINT.md index 536b69e0..d29cacae 100644 --- a/CURRENT_CHECKPOINT.md +++ b/CURRENT_CHECKPOINT.md @@ -14,8 +14,11 @@ ## Current State - Stage: `M39_PARTY_LINE_PAGE_VIEW_REFACTOR` -- Active implementation step: `M39-C` (`IN_PROGRESS`) — Party Line focused - verification, source-bound regressions and normal-capture equivalence. +- Active implementation step: none. `M39_PARTY_LINE_PAGE_VIEW_REFACTOR` is + complete at source `cf14bc8`: the source-bound View/controller/route + regressions, DEV-4 candidate, MVP audit and four-fixture normal `100%` + Party Line capture equivalence all pass with strict diagnostics `0`, + recorded in `docs/runtime/M39_PARTY_LINE_PAGE_VIEW_VISUAL_AUDIT.md`. M39-B is complete at source `0d59caa`; M39-A is complete at source `dfddb17`. M38 is complete at source `0fea312`; its source-bound contract, regressions, DEV-4 candidate, MVP audit and @@ -23,7 +26,6 @@ diagnostics `0`, recorded in `docs/runtime/M38_RISK_BOARD_PAGE_VIEW_VISUAL_AUDIT.md`. M39 changes no gameplay, visual, Save or localization semantics. - gameplay, visual, Save or localization semantics. The owner-requested target is a layered Passive View + Presenter/ViewData + Domain/Application Service architecture with an explicit Router/Context boundary. `entry_shell.gd` will be reduced incrementally, starting with the diff --git a/docs/06_DEVELOPMENT_AND_REVIEW.md b/docs/06_DEVELOPMENT_AND_REVIEW.md index 9202a881..7fbc4ec7 100644 --- a/docs/06_DEVELOPMENT_AND_REVIEW.md +++ b/docs/06_DEVELOPMENT_AND_REVIEW.md @@ -3835,5 +3835,22 @@ they are not duplicated here. builders/helpers are removed, and deferred `select_member`/`undo`/`reset`/ `save`/`back` intents preserve the existing application boundary. The focused View contract and DEV-4 Party regression pass with strict - diagnostics `0`. M39-C is now the sole `IN_PROGRESS` step for source-bound - regressions and normal-capture equivalence. + diagnostics `0`. M39-C is complete: source-bound View/controller/route + regressions, the DEV-4 candidate and full MVP first-cycle audit pass with + strict diagnostics `0`, and opening/preview-swap Party Line captures are + byte-equivalent to the M21 baseline at all four fixtures/locales. Evidence + is recorded in `docs/runtime/M39_PARTY_LINE_PAGE_VIEW_VISUAL_AUDIT.md`. + M39-D closes at source `cf14bc8`; no later View migration is active. + +### 2026-08-25 - M39 Party Line Page View Pilot Closed + +- M39-D closes at source `cf14bc8`. Party Line is now a passive + `ABGPartyLinePageView` with deferred five-intent wiring; FormationRiskService, + preview-only swaps, Save/Readiness handoff, formation rules and route + semantics remain unchanged. +- The source-bound contract, focused regressions, DEV-4 candidate, MVP audit, + normal capture set and eight-state/four-fixture byte-equivalence evidence + are recorded in + `docs/runtime/M39_PARTY_LINE_PAGE_VIEW_VISUAL_AUDIT.md`. +- M39 is complete. No later View migration is active; a separate durable plan + is required for the next extraction. diff --git a/docs/plans/M39_PARTY_LINE_PAGE_VIEW_REFACTOR.md b/docs/plans/M39_PARTY_LINE_PAGE_VIEW_REFACTOR.md index 55ce48ab..7691fb61 100644 --- a/docs/plans/M39_PARTY_LINE_PAGE_VIEW_REFACTOR.md +++ b/docs/plans/M39_PARTY_LINE_PAGE_VIEW_REFACTOR.md @@ -3,7 +3,7 @@ ## Status - Plan: `M39_PARTY_LINE_PAGE_VIEW_REFACTOR` -- Status: `IN_PROGRESS` +- Status: `COMPLETE` - Activated: 2026-08-25 - Baseline: `0fea312` (`M38_RISK_BOARD_PAGE_VIEW_REFACTOR_COMPLETE`) - Owner authorization: the Owner asked to continue decomposing Entry pages @@ -96,7 +96,7 @@ EntryShell, removes the Party Line master builders/helpers and wires deferred and DEV-4 Party regression pass with strict diagnostics `0`; the fixture-0 Party Line frames are byte-equivalent to the M21 baseline. -### M39-C — Focused verification (`IN_PROGRESS`) +### M39-C — Focused verification (`COMPLETE`) - Run the View contract, M21 controller, DEV-4 Party/Readiness/Risk, Formation and downstream route regressions through the owned test-attempt @@ -105,7 +105,13 @@ Party Line frames are byte-equivalent to the M21 baseline. - Compare normal Party Line captures with the M21 baseline at all four required fixtures/locales. -### M39-D — Handoff (`PENDING`) +Closure: source-bound attempts from source `cf14bc8` pass the View, +controller and route regressions, DEV-4 candidate and full MVP audit with +strict diagnostics `0`. Opening and preview-swap Party Line captures are +byte-equivalent to the M21 baseline at all four fixtures/locales. Evidence is +recorded in `docs/runtime/M39_PARTY_LINE_PAGE_VIEW_VISUAL_AUDIT.md`. + +### M39-D — Handoff (`COMPLETE`) - Record source-bound evidence and visual equivalence in `docs/runtime/M39_PARTY_LINE_PAGE_VIEW_VISUAL_AUDIT.md`. @@ -114,6 +120,10 @@ Party Line frames are byte-equivalent to the M21 baseline. - Update the checkpoint and development ledger, then push the focused closure. +Closure: the source-bound audit and ordered scope boundary are recorded in +`docs/runtime/M39_PARTY_LINE_PAGE_VIEW_VISUAL_AUDIT.md`. M39 is complete; no +later View migration is activated by this plan. + ## Frozen scope - No FormationRiskService, formation rule, Company, Contract, Risk, Battle, diff --git a/docs/runtime/M39_PARTY_LINE_PAGE_VIEW_VISUAL_AUDIT.md b/docs/runtime/M39_PARTY_LINE_PAGE_VIEW_VISUAL_AUDIT.md new file mode 100644 index 00000000..a2dabd5f --- /dev/null +++ b/docs/runtime/M39_PARTY_LINE_PAGE_VIEW_VISUAL_AUDIT.md @@ -0,0 +1,74 @@ +# M39 Party Line Page View — Source-Bound Audit + +## Scope + +The accepted Party Line preparation page was extracted from `entry_shell.gd` +into the passive UI-only `ABGPartyLinePageView`. The View owns the normalized +16:9 canvas, static master, `PartyLineDiagram`, `PartyLineTrack` cord/effects +layers, portraits, focus and local presentation. EntryShell remains the +composition root and translates only deferred `select_member`, `undo`, +`reset`, `save` and `back` intents. `ABGPartyLinePageController` remains the +authority for copied Company, Contract, Formation, ordered Recruit, +relation/coverage/threat and command facts. + +The migration preserves the accepted M21 Party Line. It does not alter +FormationRiskService, formation rules, Save/receipt semantics, Readiness, +Risk, Battle, localization or input behavior. Normal `100%` landscape is the +visual scope; 130% text scale is not a gate. + +## Source-bound evidence + +All formal attempts used `tools/run_test_attempt.py` with immutable source +archives, owned HOME/cache/TMP roots, strict diagnostics and complete +process-group cleanup. The verification source was +`cf14bc8e3de7e9c3c22a3e78b192618161d1989e`. + +| Check | Attempt | Result | +| --- | --- | --- | +| View/controller/route regressions | `m39-party-line-regression-source-bound` / `20260825T173959Z-47357` | PASS; `ABG_M39_PARTY_LINE_VIEW_CONTRACT_OK`, `ABG_M21_PARTY_LINE_CONTROLLER_OK`, DEV-4 Formation/Party/Readiness/Risk, RSK-002, DEV-5 Opening/UI and M12 markers exactly once; strict diagnostics 0; workspace removed | +| DEV-4 candidate | `m39-dev4-candidate-source-bound` / `20260825T174107Z-48417` | PASS; `ABG_DEV4_CANDIDATE_SUITE_OK` exactly once; 24 normal frames; parsed touch; strict diagnostics 0; evidence archive SHA-256 `2756f48c217c68ea431c4ef16e54a6bcaf6ac491664d9322f77f7aa667d31151` | +| Normal Party Line capture set | `m39-party-line-capture-source-bound-100` / `20260825T174736Z-55273` | PASS; `ABG_M39_PARTY_LINE_CAPTURE_SET_OK` exactly once; 24 retained frames with four Party Line fixtures at text scale 100%; strict diagnostics 0; evidence archive SHA-256 `3815f964d6574a825e0c83322ebd656e1de59836f122255f0283f47621f76111` | +| MVP first-cycle audit | `m39-mvp-audit` / `20260825T174325Z-50779` | PASS; `ABG_MVP_FIRST_CYCLE_AUDIT_OK` exactly once; 180 evidence files and 128 normal `100%` frames; `zh_CN`/`en`; `760x360`, `844x390`, `1280x720`; strict diagnostics 0; evidence archive SHA-256 `7f923114e1987e47d3534d2445d51f92212c08d891a510ed40d0bee05aa99853` | + +## Visual equivalence + +The four M39 Party Line capture fixtures were compared with the M21 baseline +archive `m21-mvp-audit/20260825T060057Z-48953` (source `0c44800`). Both the +opening `party_line` state and the preview `party_swapped` state are +byte-identical and have zero decoded-pixel differences at every fixture. + +| Fixture | State | M21 baseline SHA-256 | M39 SHA-256 | Equal | +| --- | --- | --- | --- | --- | +| `760x360 zh_CN` | `party_line` | `309b76a1f65d4b7ea941ae88c7d46f0d31583bcfa2945d3eca79cf0d11a252d9` | `309b76a1f65d4b7ea941ae88c7d46f0d31583bcfa2945d3eca79cf0d11a252d9` | yes | +| `760x360 zh_CN` | `party_swapped` | `a171d00e20657f23d8592e33649e3fa56e06f09f4cc05b6c9d61e0c73164b080` | `a171d00e20657f23d8592e33649e3fa56e06f09f4cc05b6c9d61e0c73164b080` | yes | +| `844x390 en` | `party_line` | `1c0db2a5cec21c4a84aba5d928a843c1f3c56f64a3ed0a8f0ba1d0f07286f159` | `1c0db2a5cec21c4a84aba5d928a843c1f3c56f64a3ed0a8f0ba1d0f07286f159` | yes | +| `844x390 en` | `party_swapped` | `fe8582c5511bfda876909b35015f05bf31ac34a4da04b564c0e4894d04db39f8` | `fe8582c5511bfda876909b35015f05bf31ac34a4da04b564c0e4894d04db39f8` | yes | +| `1280x720 zh_CN` | `party_line` | `f95f179f1d952091edfa470518c2ff1814b4a89e8bbb2b5c5b90313d608728c1` | `f95f179f1d952091edfa470518c2ff1814b4a89e8bbb2b5c5b90313d608728c1` | yes | +| `1280x720 zh_CN` | `party_swapped` | `5f386ffaa530e3d00d755372fb8dbc216fbc231bda7dd75f7b973c0ac7d11613` | `5f386ffaa530e3d00d755372fb8dbc216fbc231bda7dd75f7b973c0ac7d11613` | yes | +| `1280x720 en` | `party_line` | `d53a577faca993f71973d9b9a3e1afdd2a32e781caae3e1e6cb5db177afdcf9d` | `d53a577faca993f71973d9b9a3e1afdd2a32e781caae3e1e6cb5db177afdcf9d` | yes | +| `1280x720 en` | `party_swapped` | `12c1d21a6f6345dae95339224f4b149796110f48d9ae3e3a182eb00bb5c45231` | `12c1d21a6f6345dae95339224f4b149796110f48d9ae3e3a182eb00bb5c45231` | yes | + +This is a structural equivalence check, not a replacement for Owner visual +acceptance. + +## Boundary audit + +- `ABGPartyLinePageView` imports only the passive View base, UI-only + `InitialCompanyArt`, `PartyLineTrack`, `PartyLineDiagram` and the approved + Party Line static master. +- The View owns Godot nodes, normalized layout, diagram/track rendering, + focus, local localization and formatting; it emits only the five named + intents. +- It has no FormationRiskService, persistence, RuntimeContentRegistry, + compatibility-facade, `current_screen` or EntryShell-global dependency. +- EntryShell retains FormationRiskService begin/preview/Save transactions, + local preview selection and swap state, Readiness handoff, settings caller + context and route semantics. +- `PartyLineTrack` layer ordering remains cord `25`, members `30`, effects + `35`; command rail behavior and focus order remain unchanged. + +## Remaining scope + +M39 closes only Party Line. Readiness, Risk Board, Risk Commitment, Market, +Guild and Battle semantics remain outside this plan. No packaging, iOS export, +signing, deployment, store or release work is included.