Files
aetherbound-guild/docs/runtime/p10_2/IMPLEMENTATION_PLAN.md
T

301 lines
17 KiB
Markdown

# P10.2 Siltwake Mid-Contract Implementation Plan
> Status: `COMPLETE`
> Active step: `NONE`
> Planning baseline: `230ccc5c8032be6e92c59336fec941ccb53558cc`
> Product predecessor: `47f2028c71215117d5cc37ffc7bb2797d9e9c84c`
> Goal: `docs/goals/PHASE10_2_SILTWAKE_MID_CONTRACT_GOAL.md`
> Contract: `docs/runtime/PHASE10_2_SILTWAKE_MID_CONTRACT_CONTRACT.md`
## Player-Visible Stopping Point
Starting at saved Market 2, the player completes three decision-bearing
Siltwake Rounds, grows Line capacity from four to six, restores the Reed Ferry
and reloads at stable Market 5 with the surviving Run state intact.
## Ordered Steps
<!-- markdownlint-disable MD013 -->
| Step | Status | Player outcome | Commit boundary |
| --- | --- | --- | --- |
| P10.2-STEP-0 Contract | `COMPLETE` | The three-Round scope and Market-5 stopping point are frozen. | Goal, contract, plan, checkpoint and ledger. |
| P10.2-STEP-1 Content and boards | `COMPLETE` | Markets 2-4 expose deterministic Recruit, equipment and route decisions with exact previews. | Source `24b22f0`; four fixed-source markers pass strict-clean. |
| P10.2-STEP-2 Save v8 and repeated Market | `COMPLETE` | Market 2 resumes exactly and Company/Reserve/locks/capacity persist across repeated Markets. | Source `c3d9aa1`; six fixed-source markers pass strict-clean. |
| P10.2-STEP-3 Three-Round battle arc | `COMPLETE` | Three different pressures make movement, focus and protected center timing matter. | Source `30613bb`; ten fixed-source markers pass strict-clean. |
| P10.2-STEP-4 Continuous landscape runtime | `COMPLETE` | Parsed touch carries the player from Market 2 through visible Ferry restoration and Market 5. | Source `9692958`; 14 tests, 10 normal frames and one 22.07s recording pass strict-clean. |
| P10.2-STEP-5 Profiles and candidate | `COMPLETE` | Five policies prove bounded pacing, persistence and no universal response. | Source `f0ae25d`; 16 tests plus one normal matrix pass strict-clean. |
<!-- markdownlint-enable MD013 -->
## Step Contracts
### P10.2-STEP-1 CONTENT AND BOARDS
```text
ID: P10.2-STEP-1
PLAYER OUTCOME: At Markets 2-4 the player can compare stable Recruit,
equipment and route offers whose previews explain the next decision.
IN SCOPE: isolated P10.2 catalog/registry; EN-R2-08..10; EQ-049..56;
three deterministic 3/4/3 Market boards; nine exact route rows; localized
names/previews; content, reference, seed, hash, count and formula tests.
OUT OF SCOPE: state mutation, Save v8, transactions, battle execution,
presentation, media, H5 and packaging.
OWNED FILES: runtime/p10_2/catalog.json; runtime/p10_2/content_registry.gd and
UID; runtime/p10_2/mid_market_generator.gd and UID; focused P10.2 tests and
UIDs; durable status after the source commit.
ACCEPTANCE CHECKS: exact IDs and source bindings; same inputs byte-identical;
Market/refresh changes only owned draws; board shape 3/4/3; risk set 0/1/2;
route compositions and Coin formulas exact; offer levels/prices exact;
no unresolved or duplicate reference; malformed fixtures reject; P10.1
content/Market regressions retain exact markers.
EVIDENCE LEVEL EXPECTED: automated_verified for content authority.
COMMIT BOUNDARY: focused source/test push, then durable Step-1 closure.
LEGAL TERMINAL: P10.2 Step 1 content and boards complete.
NEXT STEP: P10.2-STEP-2.
```
### P10.2-STEP-2 SAVE V8 AND REPEATED MARKET
```text
ID: P10.2-STEP-2
PLAYER OUTCOME: Saved Market 2 resumes exactly; hires, Reserve, loadout, order,
locks and route commitment remain trustworthy through restart.
IN SCOPE: Save-v7-to-v8 migration; repeated Market state; hire, dismiss, buy,
sell, equip, lock, refresh, deploy/order, Reserve and route transactions;
pre-battle checkpoint and interruption-safe persistence.
OUT OF SCOPE: battle execution, new runtime presentation, media and H5.
OWNED FILES: isolated P10.2 state/Market/save modules and focused tests.
ACCEPTANCE CHECKS: exact migration; full success/negative atomicity; Company,
deployed and Reserve distinction; legal capacity; one equipment slot;
stable boards/locks; checksum/backup/rollback/corruption; zero offline value;
P10.1 Save/Market regressions unchanged.
EVIDENCE LEVEL EXPECTED: automated_verified.
COMMIT BOUNDARY: focused source/test push, then durable Step-2 closure.
LEGAL TERMINAL: P10.2 Step 2 Save v8 and repeated Market complete.
NEXT STEP: P10.2-STEP-3.
```
### P10.2-STEP-3 THREE-ROUND BATTLE ARC
```text
ID: P10.2-STEP-3
PLAYER OUTCOME: Current Company state changes which of nine routes is rational,
and each result creates a meaningful next-Market consequence.
IN SCOPE: Rounds 2-4; seed/Medic/Fogjaw mechanics; nine compositions; Coin,
XP/level/survival, casualty, recovery, route history, capacity and Ferry
settlement; fixed counterfactuals and P10.1 regressions.
OUT OF SCOPE: Artifacts, promotion, later enemies, Boss, presentation and H5.
OWNED FILES: isolated P10.2 battle/settlement modules and focused tests; minimal
explicit reuse of read-only P10.1 authority.
ACCEPTANCE CHECKS: all routes terminate in bounds; exact event causality;
required movement/focus/center counterfactuals; no universal response;
rewards/XP/clears/capacity/Ferry apply once; permanent Fallen and bounded
recovery; interruption restores the exact pre-battle checkpoint.
EVIDENCE LEVEL EXPECTED: automated_verified plus simulation-ready domain.
COMMIT BOUNDARY: focused source/test push, then durable Step-3 closure.
LEGAL TERMINAL: P10.2 Step 3 three-Round battle arc complete.
NEXT STEP: P10.2-STEP-4.
```
### P10.2-STEP-4 CONTINUOUS LANDSCAPE RUNTIME
```text
ID: P10.2-STEP-4
PLAYER OUTCOME: The player performs the complete Market-2-to-Market-5 arc in
the game world and sees growth, pressure, recovery and restoration happen.
IN SCOPE: direct world targets; Market/Reserve/capacity presentation; route
previews; accepted battle motion plus new event bindings; settlements;
Ferry transformation; parsed touch/drag; normal-render fixtures/recording.
OUT OF SCOPE: new paid media, card/form UI, H5, native package and release.
OWNED FILES: isolated P10.2 controller/presentation helpers; one narrow main
handoff; focused runtime/touch/layout/recording tests and UIDs.
ACCEPTANCE CHECKS: targets >=48px; no card wall; full flow uses parsed
ScreenTouch/ScreenDrag with fallback/direct zero; new event states are
causal and return to rest; Ferry transformation and Market-5 handoff visible;
required layouts/locales/accessibility pass strict diagnostics.
EVIDENCE LEVEL EXPECTED: runtime_verified and agent_visual_reviewed.
COMMIT BOUNDARY: focused source/test push, then durable Step-4 closure.
LEGAL TERMINAL: P10.2 Step 4 continuous landscape runtime complete.
NEXT STEP: P10.2-STEP-5.
```
### P10.2-STEP-5 PROFILES AND CANDIDATE
```text
ID: P10.2-STEP-5
PLAYER OUTCOME: The three-Round arc remains understandable, recoverable and
strategically variable across play styles, layouts and reload points.
IN SCOPE: five profiles; decision timestamps; anti-dominance; starvation and
recovery; Save-v8 phase matrix; layout/accessibility matrix; immutable
source-bound candidate evidence.
OUT OF SCOPE: product changes unless a declared gate exposes a product failure;
H5, devices, package, store and release.
OWNED FILES: bounded P10.2 simulation/matrix tests and UIDs; evidence roots;
durable closure.
ACCEPTANCE CHECKS: five distinct policies; explicit decisions and maximum gap
<=12 seconds outside automatic battle; all routes/mechanics and opposed
counterfactuals covered; stable Market-5 reload; no negative Coin,
resurrection or offline reward; required layouts and strict diagnostics;
clean/upstream source and owned processes zero.
EVIDENCE LEVEL EXPECTED: simulation_verified plus runtime_verified.
COMMIT BOUNDARY: focused verification source, immutable evidence and docs-only
closure, each pushed before the legal terminal.
LEGAL TERMINAL: Aetherbound Guild P10.2 Siltwake mid-contract candidate ready.
NEXT STEP: Owner review or a separately activated later product milestone.
```
## Issue Register
<!-- markdownlint-disable MD013 -->
| ID | Status | Finding |
| --- | --- | --- |
| P102-I01 | `RESOLVED_IN_CONTRACT` | P10.1 stores only a Market-2 handoff. Save v8 must migrate it into a generated Market-2 board without changing the first result. |
| P102-I02 | `RESOLVED_IN_CONTRACT` | Three more Rounds are not a Contract clear. The stopping point is stable Market 5 with four clears and restored Ferry only. |
| P102-I03 | `RESOLVED_STEP_3` | Isolated P10.2 battle authority preserves P10.1 results while reusing event semantics through the presentation adapter. |
| P102-I04 | `OPEN_FINAL_MEDIA` | Existing source-bound rigs remain temporary. New media stays frozen until the complete three-Round runtime proves composition and motion. |
<!-- markdownlint-enable MD013 -->
## Completed Step Evidence
### P10.2 Step 1 Content And Boards - 2026-08-15
- Source `24b22f01ae3da591f4b0d18ff5fda5e8473cc10b` adds only the
isolated P10.2 catalog, validator, Market generator, two focused tests and
their tracked UID files. P10.1 source remains byte-unchanged.
- The registry exposes eight equipment, three new enemies, nine routes and
three Markets. All 22 bounded identities have zh_CN/en authority, previews,
response tags, execution keys and deterministic mechanic signatures.
- Markets 2-4 generate exact `3/4/3` boards. Recruit slots bind stable future
materialization keys; equipment is unique and costs 15 Coin; route risks,
compositions, waves, rewards, recovery costs and tide data are disclosed.
- Refresh changes Recruit/equipment rows only. Route and tide data never reroll,
while a changed Run seed changes owned Market identities.
- Fresh fixed-source R1 evidence is
`/private/tmp/abg-p102-24b22f0-step1-r1/`. Both P10.2 tests and both P10.1
content/Market regressions pass with strict diagnostics and owned Godot
process counts zero. Source archive SHA-256 is
`d80fa163bd1977e74ad2ac0f9a3f1640f93dd4fad11ade69c8a89e18f14a0eca`;
the seven-row inventory SHA-256 is
`980de2713a44c79c0247238e9848e91388c1c095be1aa5cdfea5f4fa08617baf`.
- Step 1 reaches `automated_verified`. Step 2 alone now owns Save v8, exact
Market-2 migration and repeated Market transactions.
### P10.2 Step 2 Save V8 And Repeated Market - 2026-08-15
- Source `c3d9aa12805edd4e7f25dcca2865071e417b3c9b` adds five isolated
P10.2 modules, one shared fixture, two focused tests and tracked UID files.
P10.1 source remains byte-unchanged.
- Save v8 migrates only valid saved Market 2, advances sequence once, binds the
v7 commit, preserves exact Run/Company/Coin/equipment/history facts and keeps
checksum, backup, rollback, candidate interruption and zero-offline rules.
- Repeated Market transactions support Recruit/equipment locks, stable refresh,
unbounded Company hires, capacity-bounded ordered deployment, Reserve,
buy/equip/sell, dismissal preview/confirm and one exact pre-battle checkpoint.
Sixteen applied operations each increment once; seven declared rejection
branches preserve the complete snapshot.
- Fresh fixed-source R1 evidence is
`/private/tmp/abg-p102-c3d9aa1-step2-r1/`. Four P10.2 and two P10.1 markers
pass with strict diagnostics and owned Godot process counts zero. Source
archive SHA-256 is
`6ee413a03d497391359a15d295605f91fbe66fbcc8c00432ac45c450ada544b8`;
the nine-row inventory SHA-256 is
`8e585bf988f9f4f915dd45f1fe0a7a5cc4d698ba8878167d8465a9a9f795d777`.
- The 602660-KiB extracted source/state harness copy was removed after the run;
the compact evidence root remains 28 KiB and verifies 9/9.
- Step 2 reaches `automated_verified`. Step 3 alone now owns battle execution,
settlement, progression, casualty/recovery and Reed Ferry restoration.
### P10.2 Step 3 Three-Round Battle Arc - 2026-08-15
- Source `30613bb40a16456d47cd923bea6da1ffca731fca` adds isolated
battle/settlement services and two focused tests while widening only shared
P10.2 state, locked-board carry and fixture support. P10.1 remains unchanged.
- All nine routes terminate deterministically on the fixed clock. Hold, move,
focus and center-guard are preferred by `2/2/3/2` routes; each route has a
fixed preferred-versus-wrong outcome counterfactual.
- Drownseed placement/burst or evade, Mire Medic healing/hindrance shortening,
Fogjaw hidden/center/reveal and existing tide/order pressures are causal
events. Battle snapshots bind route, board, checkpoint, actors and hashes.
- Three victories grant exact Coin `24/33/42` and XP `14/20/26`, carry HP,
preserve locks, grow capacity `4/5/5/6`, record four total route rows and
restore the Reed Ferry at a Save-v8-stable Market 5.
- Defeat permanently removes one Recruit, returns equipment, grants bounded
Credit and half XP to survivors, preserves the Market board and completes
exact-cost recovery without resurrection.
- Fresh fixed-source R1 evidence is
`/private/tmp/abg-p102-30613bb-step3-r1/`. Six P10.2 and four P10.1 markers
pass with strict diagnostics and owned Godot process counts zero. Source
archive SHA-256 is
`0126fbf6f86ba4e4d30a43d4fcac890db199863216c52054276e9ee9dad7ead8`;
the 13-row inventory SHA-256 is
`6292b9b5f9ab0494a80e7505991b7fd103e243615c62019e1bd2898230361129`.
- The 602744-KiB extracted source/state harness copy was removed after the run;
the compact evidence root remains 44 KiB and verifies 13/13.
- Step 3 reaches `automated_verified`. Step 4 now owns runtime presentation,
parsed touch/drag, normal renders and one fixed recording.
### P10.2 Step 4 Continuous Landscape Runtime - 2026-08-16
- Source `96929580289504e8209b905132b3b40abc5a4c72` adds the isolated
P10.2 controller and motion adapter, one narrow `runtime/main.gd` handoff,
four focused runtime programs and tracked UID files. P10.1 source is
unchanged and fresh Title still uses its accepted controller.
- Saved P10.1 Market 2 migrates into Save v8; a direct world-first landscape
carries Market 2 through three plan/battle/settlement transitions to Market
5. Line/Reserve swaps, equipment inspection, route posts and all four plans
are real targets; capacity changes `4/5/5/6` and the restored Ferry changes
hull, deck, posts, mast, flag and lantern before the final handoff.
- Drownseed countdown/evade/burst, Mire Medic heal/interruption and Fogjaw
hidden/reveal/center contact consume authoritative events through the
accepted motion system. Enemy entrance, anticipation, contact, damage text,
HP change, recovery and terminal settlement remain causal and return to
rest.
- Attempt R1 is append-only `INVALID_EVIDENCE_RETENTION` because the successful
fresh import output was not retained. No R1 execution evidence is reused.
- Fresh fixed-source R2 is
`/private/tmp/abg-p102-9692958-step4-r2/evidence/`. Fourteen tests, ten
normal captures and one MovieWriter run pass with strict diagnostics zero.
Touch flow records Touch `21` / Drag `1`; recording records Touch `5` / Drag
`1`; fallback/direct are zero.
- The `844x390`, 30 FPS recording has 662 frames, lasts `22.066667s` and has
zero black intervals. MP4 SHA-256 is
`647615ba8dde9669cd9903ac33698e66e2df7472c37e228b838c6f5636ad83c6`.
The 40-row inventory verifies completely; inventory SHA-256 is
`22a8f683693a6b4c304b34d3efb74f0fb3c668749214bdc3952cba4398ccc3d5`.
- Step 4 reaches `runtime_verified + agent_visual_reviewed`. Step 5 alone now
owns five profiles, decision timestamps, anti-dominance and the complete
Save-v8/layout candidate matrix. Human, H5, device and release gates remain
open or frozen.
### P10.2 Step 5 Profiles And Candidate - 2026-08-16
- Verification source `f0ae25d081ff8188ecb907759c7b74cb7015e92e`
adds only five-profile and candidate-matrix tests plus tracked UID files.
Product runtime bytes remain unchanged from Step-4 source `9692958`.
- Five distinct policies record 85 decisions across all nine routes and four
plans. The maximum nonbattle decision gap is `4.0s`; nine fixed
counterfactuals reverse outcomes. Recovery retains one permanent casualty,
returning performs six exact Save-v8 reloads and all profiles reach Market 5
without negative Coin, resurrection or offline rewards.
- The candidate matrix roundtrips nine Save-v8 states and normally renders 32
combinations of four viewports, two locales, two text scales and two
accessibility profiles. Controls remain at least 48px; panels and cards are
zero.
- Attempt R1 is append-only `INVALID_EVIDENCE_FINALIZATION_POLICY` because
execution control rejected its cleanup command before execution. Its
24-row inventory SHA-256 is
`89ec98afe306787aa73a56cc60c226b3536b7ce9739d2493f93dd8ee56375677`;
no R1 execution evidence is reused.
- Fresh fixed-source R2 is
`/private/tmp/abg-p102-f0ae25d-step5-r2/evidence/`. Sixteen tests and one
normal-render matrix pass with strict diagnostics and owned processes zero.
The 26-row inventory verifies completely; inventory SHA-256 is
`263ebba5510979ecb37eeb925acf25c8acc2adeb3943b68d520d40ae2c6e1719`.
- Step 5 reaches `simulation_verified + runtime_verified`; Step-4 agent visual
evidence remains source-bound because no product runtime byte changed.
Owner understanding, fun, visual/listening acceptance, H5, device, package,
store and release remain open or frozen.