docs: close M39 party line view pilot

Co-Authored-By: Codex <noreply@anthropic.com>
This commit is contained in:
2026-08-26 01:51:19 +08:00
co-authored by Codex
parent cf14bc8e3d
commit bd2bf456df
4 changed files with 111 additions and 8 deletions
@@ -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.