feat: build p9.1 opening market runtime
Implement the bounded Godot opening Company and first-Market preparation flow with deterministic one-shot state, real touch verification, responsive layouts, prototype feedback, and current design regressions.\n\nCo-Authored-By: Codex <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# Phase 9 Godot Vertical Slice Contract
|
||||
|
||||
## Runtime Envelope
|
||||
|
||||
- Engine: Godot `4.6.1.stable`.
|
||||
- Project root: `runtime/`.
|
||||
- Orientation: landscape, reference viewport `1280x720`, stretch `canvas_items`.
|
||||
- Input: touch-first; mouse is a desktop convenience and not mobile evidence.
|
||||
- Languages: Simplified Chinese default and English.
|
||||
- Rendering: `gl_compatibility`, mobile-safe 2D only for P9.1.
|
||||
- Offline: no account, analytics, network or purchase dependency.
|
||||
|
||||
## P9.1 State Machine
|
||||
|
||||
```text
|
||||
contract -> offers -> opening_review -> opening_receipt
|
||||
-> market_hire_mael -> market_hire_ilya -> equipment_purchase
|
||||
-> equipment_equip -> order -> readiness_receipt
|
||||
```
|
||||
|
||||
Legal reverse paths before commits are offers-to-contract, opening-review-to-
|
||||
offers, and order revision. Opening, each hire, purchase, equip and readiness
|
||||
commit are one-shot. Repeated input returns the current state and cannot
|
||||
duplicate Recruit, Coin, equipment or receipt mutations.
|
||||
|
||||
## Fixed Runtime Data
|
||||
|
||||
- Contract: `CTR-R1-01 First Crossing`.
|
||||
- Opening Coin: `52`; Company capacity: `4`.
|
||||
- Stable offers: `OFF-01` Elian/Hearthguard, `OFF-02` Nia/Farstring, `OFF-03`
|
||||
Tomas/Wayrunner, `OFF-04` Sable/Kindhand.
|
||||
- Market offers: `MKT-R1-01` Mael/Hearthguard and `MKT-R1-02` Ilya/Farstring,
|
||||
each `14 Coin`.
|
||||
- Equipment: `EQ-012 Open-Line Cord`, `12 Coin`, explicitly equipped to one
|
||||
current Company member; fixed evidence equips `OFF-03` Tomas.
|
||||
- Final readiness: Coin `12`, Company `4/4`; exposed-front direction remains
|
||||
on the right and protected rear on the left in both locales.
|
||||
|
||||
## Presentation Contract
|
||||
|
||||
The opening frame reads in three seconds as a traveling fantasy Company about
|
||||
to cross a dangerous suspended route. Priority is (1) current decision and
|
||||
primary action, (2) Company/Recruits, (3) Coin/capacity/receipt state. Existing
|
||||
accepted candidate scene, actor and equipment assets are reused; they remain
|
||||
candidate production assets, not final art.
|
||||
|
||||
Selection must change card border, check mark and count. A transaction must
|
||||
show the old and new resource values, a short visual pulse and a captioned
|
||||
prototype sound cue. Disabled actions are visibly disabled and state why.
|
||||
Reduced motion removes movement but preserves state change. Mute changes no
|
||||
result. No tutorial wall, decorative nested cards or battle content is legal.
|
||||
|
||||
## Test Contract
|
||||
|
||||
- `ABG_P9_1_DOMAIN_OK`: state transitions, invalid boundaries, stable IDs,
|
||||
one-shot transactions and exact final values.
|
||||
- `ABG_P9_1_TOUCH_OK`: fresh runtime driven by parsed ScreenTouch events reaches
|
||||
the readiness receipt with fallback/direct count zero.
|
||||
- `ABG_P9_1_LAYOUT_OK`: all declared viewport/language/accessibility fixtures
|
||||
remain within safe bounds.
|
||||
- `ABG_P9_1_RUNTIME_CAPTURE_OK`: normal-render screenshots cover six required
|
||||
states and strict runtime diagnostics are clean.
|
||||
|
||||
Tests and tools may not implement product behavior or relax product guards.
|
||||
Reference in New Issue
Block a user