diff --git a/AGENTS.md b/AGENTS.md index b68c67e7..c311a760 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,12 +10,18 @@ Runtime source belongs under `runtime/`; accepted HTML design authority remains under `prototype/` and may not be silently rewritten to fit implementation. P9.0R3 is the Owner-accepted baseline for tutorial-battle pacing and event-bound combat feedback inside the preserved Title -> Guild Yard -> -tutorial battle -> victory flow. Its source is frozen. +tutorial battle -> victory flow. Its source is frozen. P9.0R4 is the only +active runtime slice: diagnose that first victory, apply the existing 20-Coin +Steady payout, choose one of two run-local loaned adaptations, and see the +consequence in one second short battle. It uses a fast H5 preview before full +candidate evidence so Owner direction can be reviewed without waiting for a +complete matrix on every iteration. It shortens dead holds between accepted authored animation states and adds bounded damage/heal number pops, impact nudge and existing VFX timing without changing HP results, roles, victory, animation assets or the opening flow. -Contract, difficulty, Market, equipment, Party order, authoritative combat, -persistence, chapters, device packaging, stores and release remain frozen. +Contract, difficulty, Market, permanent equipment inventory, Party order, +authoritative combat, persistence, chapters, device packaging, stores and +release remain frozen. ## Originality Boundary diff --git a/CURRENT_CHECKPOINT.md b/CURRENT_CHECKPOINT.md index c649f87e..b3588201 100644 --- a/CURRENT_CHECKPOINT.md +++ b/CURRENT_CHECKPOINT.md @@ -1,13 +1,30 @@ # Current Checkpoint -Active Goal: `docs/goals/PHASE9_0R3_BATTLE_FEEDBACK_GOAL.md` -Active contract: `docs/runtime/PHASE9_0R3_BATTLE_FEEDBACK_CONTRACT.md` +Active Goal: `docs/goals/PHASE9_0R4_SECOND_CYCLE_ADAPTATION_GOAL.md` +Active contract: `docs/runtime/PHASE9_0R4_SECOND_CYCLE_ADAPTATION_CONTRACT.md` Active ledger: `docs/reviews/PHASE9_GODOT_VERTICAL_SLICE_LEDGER.md` +P9.0R4 baseline: `232e3a0a45ec2437ddd528502d487d5264f1c6ae` Animation repair baseline: `db75a17ce8b0a3bc702ad535fa16491debf582e4` Fixed product source: `425fae82d3d88a002bdaadeabb498d8bf0d069cd` Battle-feedback behavior commit: `3b26b3d671ae7d043ab4bfcbd8b31e77df6d6d0d` Battle-feedback baseline: `be17debf4ed3ebe5c3e6de2701d5e3c374de1dcb` -Stage: `P9_0R3_OWNER_ACCEPTED` +Stage: `P9_0R4_SECOND_CYCLE_ADAPTATION_ACTIVE` + +P9.0R4 owns only the first-result diagnosis, the existing `B0/R1/Q0` Steady +`+20 Coin` payout, one unselected choice between run-local loaned `EQ-002` and +`EQ-061`, and one second tutorial battle whose survival/time consequence is +visible. The accepted first battle remains unchanged. Market, permanent +inventory, Party order, casualty/recovery, persistence, chapters, authoritative +combat, packaging and release stay frozen. + +This milestone uses a two-stage review cadence. First publish a fast H5 preview +after its focused test, one `844x390` normal-render route and strict scan. Only +after Owner direction acceptance run the complete candidate regressions, +matrices, both route recordings, immutable inventory, PCK/browser and final +Gallery gates. Shortest next action: implement the bounded second-cycle loop +without reopening P9.0R3. + +## P9.0R3 Owner-Accepted Baseline Fixed clean/upstream source `425fae8` tightens the six-phase automatic battle from the prior `13.50` seconds to `7.25` declared / `7.33` rendered seconds. diff --git a/docs/goals/PHASE9_0R4_SECOND_CYCLE_ADAPTATION_GOAL.md b/docs/goals/PHASE9_0R4_SECOND_CYCLE_ADAPTATION_GOAL.md new file mode 100644 index 00000000..1ce6edf9 --- /dev/null +++ b/docs/goals/PHASE9_0R4_SECOND_CYCLE_ADAPTATION_GOAL.md @@ -0,0 +1,117 @@ +# Phase 9.0R4 Second-Cycle Adaptation Goal + +## Owner Decision And Role + +On 2026-08-13 the Owner accepted the P9.0R3 battle cadence, authored character +motion and event-bound combat feedback, asked development to continue, and +reported that waiting for each playable delivery is too slow. + +- Role: development task. +- Repository: `aetherbound_guild` only. +- Baseline: clean/upstream P9.0R3 Owner-acceptance closure `232e3a0`. +- Fixed accepted product source: + `425fae82d3d88a002bdaadeabb498d8bf0d069cd`. +- Active contract: + `docs/runtime/PHASE9_0R4_SECOND_CYCLE_ADAPTATION_CONTRACT.md`. +- Active ledger: `docs/reviews/PHASE9_GODOT_VERTICAL_SLICE_LEDGER.md`. + +## Player Hypothesis + +After the first automatic battle, a new player can identify the causal lesson, +understand the earned reward, choose between safety and tempo, and see that +choice change a second battle without opening a form-like Market or inventory. + +The bounded loop is: + +`first battle -> diagnosis -> +20 Coin -> two-option adaptation -> second battle -> changed result` + +## Owned Slice + +1. Replace the first-victory terminal with a readable diagnosis that names the + selected front/rear roles and their committed contribution before totals. +2. Bind the tutorial fight to the existing `B=0/R=1/Q=0` Steady reward formula: + `battle_coin = floor(18 + 2) = 20`. Apply it once on first victory. +3. Show the next known threat before preparation: the veteran Riftblade's first + strike pushes and heavily damages the exposed front. +4. Offer exactly two stable, unselected, run-local loan choices from the + accepted equipment catalog: + - `EQ-002 Frontpin Greaves`: resist the first push and reduce its damage, but + delay the next front basic; + - `EQ-061 Early Bell`: resolve the first front basic before the enemy strike, + but delay the second front basic and accept the full strike. +5. Commit exactly one loan, start one second automatic battle using the accepted + actors, animation states, feedback language and controls, then show the exact + surviving front HP, elapsed battle time and first decisive difference. +6. Keep Home and confirmed Restart available throughout. Restart clears Coin, + adaptation and both battles; repeated input cannot grant Coin or commit the + loan twice. + +## Fixed Second-Cycle Fixture + +The second encounter is a bounded tutorial veteran using the existing +Riftblade identity and assets. It is not a new catalog enemy or authoritative +full-combat implementation. + +| Loan | First decisive change | Front result | Cadence consequence | +|---|---|---|---| +| `EQ-002` | First push is resisted; committed hit is `100 -> 90` | `90`, or `100` after Kindhand's capped heal | Front follow-up resolves later; safer route is slower | +| `EQ-061` | Front basic commits before the first enemy strike | Full strike commits `100 -> 70`, then Kindhand may heal to `82` | Delayed second front basic still produces the faster route | + +Farstring keeps one committed rear hit; Kindhand keeps one committed heal. Both +adaptations win this tutorial, but one preserves more front HP and the other +finishes sooner. The result must compare only actual committed facts. + +## Preview-First Delivery Cadence + +P9.0R4 uses two explicit gates so the Owner can judge direction quickly: + +1. `FAST_PREVIEW`: run the new focused domain/UI test, one normal-render + landscape route and strict diagnostic scan; export and publish a clearly + labeled H5 preview. This is not a candidate and cannot upgrade final evidence. +2. `FORMAL_CANDIDATE`: only after the Owner accepts the preview direction, bind + a clean pushed source and run affected regressions, required viewport/ + language/accessibility matrices, both adaptation routes, MovieWriter, + immutable inventory, PCK scope, browser verification and final Gallery + publication. + +No formal evidence is silently omitted. Expensive evidence is postponed until +the product direction is accepted instead of being regenerated for every +preview revision. + +## Frozen + +- P9.0R3 first-battle HP values, roles, targets, event order, victory and timing. +- Existing character, enemy, background, VFX and animation source assets. +- Title, Yard selection, Home and confirmed Restart semantics. +- Market, recruit hiring, permanent equipment inventory, Party order, risk + selection, casualty, recovery, persistence, chapters and content expansion. +- Authoritative full combat, paid generation, audio expansion, device packaging, + TestFlight, stores and release. + +## Acceptance + +- The diagnosis precedes the reward and adaptation choice and uses no raw IDs as + its primary player explanation. +- Coin changes `0 -> 20` exactly once on first victory and never on view/replay. +- Neither adaptation is preselected. Each names benefit, tradeoff and expected + next-threat interaction before commit. +- The two routes produce different event order, front HP and elapsed time while + preserving one victory and exact feedback deltas. +- The second result names what changed because of the selected loan and offers + Replay and Home without opening the frozen Market. +- The fast preview is playable in phone landscape and is clearly reported as + direction-review evidence rather than a fixed candidate. + +## Legal Terminals + +Preview: + +`Aetherbound Guild P9.0R4 fast H5 preview ready` + +Formal candidate after Owner direction acceptance: + +`Aetherbound Guild P9.0R4 second-cycle adaptation candidate ready` + +or + +`Aetherbound Guild P9.0R4 redesign required: ` diff --git a/docs/reviews/PHASE9_GODOT_VERTICAL_SLICE_LEDGER.md b/docs/reviews/PHASE9_GODOT_VERTICAL_SLICE_LEDGER.md index 1ac282e8..b2baab5d 100644 --- a/docs/reviews/PHASE9_GODOT_VERTICAL_SLICE_LEDGER.md +++ b/docs/reviews/PHASE9_GODOT_VERTICAL_SLICE_LEDGER.md @@ -24,3 +24,4 @@ separate. | 2026-08-12 | source `425fae8`; `p9-0r3-425fae8-attempt03` | `INVALID_WEB_EXPORT_TEMPLATE_HOME` | Product, capture, recordings and normal audio-lifecycle test passed, but isolated Web export stopped before packaging because its HOME did not expose the installed Godot 4.6.1 templates. This was an export-environment failure, not a product failure, and the attempt was not reused. | | 2026-08-12 | fixed source `425fae8`; `p9-0r3-425fae8-attempt04`; Gallery `_N8bdzMkdn1c` | `P9_0R3_BATTLE_FEEDBACK_CANDIDATE_READY` | Fresh isolated archive passes feedback `duration=7.25 values=-18,-12,-36,+12,-30,-34 once=true`, default audio lifecycle, P9.0R2 animation and P9.0R1 domain/touch/layout regressions. Eighteen normal-render frames cover three landscape viewport/locale/text profiles. Two `1280x720`, 30 fps H.264 recordings run `15.233333` seconds with battle victory at `7.33` seconds, all four route payloads, visible victory holds and no teardown gray. Strict diagnostics are zero. The 65-row inventory SHA-256 is `d1040cec77d3cc63e8322c63d2df5dcc6ee88c35ab04329d52f6687c5529720a`. Runtime-only PCK excludes tests/evidence, and the nine-file Web manifest SHA-256 is `d48922ed4892e15057284275e237d6ef35dd77201a2c67efd170e870c98225bb`. Local Chrome reaches Title -> Yard -> battle -> victory, portrait rotate guidance and browser diagnostics zero; remote HTML/JS/WASM/PCK identity, MIME and bytes pass. Human phone feel/readability, fun, listening, device, packaging, store and release remain open. | | 2026-08-13 | Owner play review of Gallery `_N8bdzMkdn1c` | `P9_0R3_OWNER_ACCEPTED` | Owner reports that this version is acceptable and authorizes continued development. The accepted P9.0R3 battle cadence, character motion and event-bound damage/heal feedback become the frozen `human_reviewed` direction. Listening, broader fun/continuation, physical device, packaging, store and release remain open. The next slice must start from the first victory and prove one readable adaptation before a strategically different second battle; it may not reopen accepted battle values or presentation. | +| 2026-08-13 | P9.0R4 task opened from clean/upstream `232e3a0` | `P9_0R4_SECOND_CYCLE_ADAPTATION_ACTIVE` | Owner authorizes continued development and requests faster playable review. The bounded slice is first-result diagnosis, existing Steady `B0/R1/Q0` `+20 Coin`, unselected loan choice `EQ-002` safety versus `EQ-061` tempo, one changed second battle and exact consequence. A fast H5 preview follows focused plus one-route runtime validation; complete immutable candidate evidence waits for Owner direction acceptance. P9.0R3 and all frozen Market/persistence/content/release scope remain unchanged. | diff --git a/docs/runtime/PHASE9_0R4_SECOND_CYCLE_ADAPTATION_CONTRACT.md b/docs/runtime/PHASE9_0R4_SECOND_CYCLE_ADAPTATION_CONTRACT.md new file mode 100644 index 00000000..22362bda --- /dev/null +++ b/docs/runtime/PHASE9_0R4_SECOND_CYCLE_ADAPTATION_CONTRACT.md @@ -0,0 +1,89 @@ +# Phase 9.0R4 Second-Cycle Adaptation Runtime Contract + +## State Machine + +```text +first_battle + -> first_result_diagnosis_and_coin + -> adaptation_unselected + -> adaptation_selected + -> second_battle + -> second_result +``` + +`first_result_diagnosis_and_coin` commits the existing Steady `B0/R1/Q0` +victory Coin exactly once. Viewing or leaving any page does not mutate Coin. +The adaptation is reversible until `Begin second battle`; after that it is +locked for the encounter. + +## First Result + +The cause line is derived only from committed P9.0R3 facts: + +- Hearthguard: first strike `-18`, explicitly blocked; +- Wayrunner: first strike `-12`, explicitly evaded/reduced; +- Farstring: one rear hit `-36` opened the finish; +- Kindhand: one heal `+12`, capped by current front HP. + +The player sees the cause before `+20 Coin`, current front HP and the next +action. The result does not claim casualty, reward draft, Market or persistence. + +## Adaptation Choice + +| Stable ID | Player-facing promise | Tradeoff | Recommended when | +|---|---|---|---| +| `EQ-002` | Anchor the front against the veteran's first push; first hit becomes `-10` | The next front basic resolves after the rear action | No rear healer is present or survival is preferred | +| `EQ-061` | Resolve the first front basic before the veteran strikes | Full `-30` strike lands and the second front basic is delayed | Kindhand can recover the hit or speed is preferred | + +Recommendation is explanatory, never selection. Both buttons remain equally +reachable and the selected state can be changed before commit. + +## Second Battle Event Map + +### `EQ-002` safer route + +1. both lines enter; +2. veteran telegraphs a pushing strike; +3. Frontpin resists displacement and the front commits `100 -> 90` (`-10`); +4. Farstring commits enemy `100 -> 64` (`-36`) or Kindhand commits front + `90 -> 100` (`+10`, exact capped heal); +5. delayed front/rear coordination commits enemy to `34`; +6. finisher commits enemy `34 -> 0`. + +### `EQ-061` faster route + +1. both lines enter; +2. Early Bell advances the first front basic and commits enemy `100 -> 72` + (`-28`) before the strike; +3. the full pushing strike commits front `100 -> 70` (`-30`); +4. Farstring commits enemy `72 -> 36` (`-36`) or Kindhand commits front + `70 -> 82` (`+12`); +5. the delayed second front basic commits enemy to `24`; +6. finisher commits enemy to `0`. + +Every HP mutation emits one matching P9.0R3 feedback payload. Non-mutating +telegraph/recovery states emit no number. Existing animations may be retimed or +reordered but their source frames cannot change. + +## Presentation + +- Result and preparation remain battlefield scenes, not receipt tables or + nested cards. +- The two loan choices read as physical tactical plinths with a familiar shield + and bell/tempo symbol, exact effect, cost `借用/Loan`, and one tradeoff. +- The known threat and current two-person squad stay visible with the choice. +- Second result leads with `更稳/Safer` or `更快/Faster`, then shows exact front + HP and elapsed time. It never says one route is globally best. +- `844x390` is the primary fast-preview viewport; content must not require + scrolling. Portrait retains the rotate notice. + +## Preview Evidence + +- Focused test covers once-only Coin, no preselection, selection revision, + commit lock, both route event maps, exact HP, distinct elapsed time, Restart + and Home cleanup. +- One normal-render `844x390` Simplified-Chinese route captures first result, + unselected adaptation, selected adaptation, second battle and second result. +- Logs are scanned for script, parse/resource/import, assertion, ObjectDB and + cleanup markers. +- The exported H5 is labeled preview. It is not immutable candidate evidence.