@playcraft/cli 0.0.41 → 0.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atom-plan/validate-asr-coverage.js +317 -0
- package/dist/commands/prad.js +61 -0
- package/dist/commands/remix.js +4 -2
- package/dist/commands/skills.js +24 -0
- package/dist/commands/tools-generation.js +2 -4
- package/dist/commands/tools-utils.js +19 -0
- package/dist/prad/atom-ref.js +23 -0
- package/dist/prad/check.js +377 -0
- package/dist/prad/check.test.js +27 -0
- package/dist/prad/explain.js +109 -0
- package/dist/prad/load-spec.js +23 -0
- package/dist/prad/paths.js +83 -0
- package/dist/prad/skills-index.js +60 -0
- package/dist/utils/version-checker.js +8 -11
- package/package.json +3 -3
- package/project-template/.claude/agents/designer.md +34 -26
- package/project-template/.claude/agents/developer.md +55 -62
- package/project-template/.claude/agents/pm.md +3 -1
- package/project-template/.claude/agents/refs/README.md +21 -15
- package/project-template/.claude/agents/refs/designer-deliverable-spec.md +70 -7
- package/project-template/.claude/agents/refs/designer-handoff-v2-checklist.md +21 -13
- package/project-template/.claude/agents/refs/designer-master-composite-recipes.md +20 -28
- package/project-template/.claude/agents/refs/designer-style-exploration-flow.md +39 -9
- package/project-template/.claude/agents/refs/developer-dev-handoff.md +1 -1
- package/project-template/.claude/agents/refs/developer-phase1-flow.md +81 -156
- package/project-template/.claude/agents/refs/pm-workflow-detail.md +24 -2
- package/project-template/.claude/agents/refs/reviewer-convergence-eval.md +142 -0
- package/project-template/.claude/agents/refs/reviewer-six-dimension-eval.md +4 -284
- package/project-template/.claude/agents/refs/ta-atlas-deliverable-standard.md +27 -6
- package/project-template/.claude/agents/refs/ta-pipeline-cookbook.md +474 -29
- package/project-template/.claude/agents/reviewer.md +65 -38
- package/project-template/.claude/agents/technical-artist.md +38 -25
- package/project-template/.claude/hooks/README.md +40 -4
- package/project-template/.claude/hooks/asr-coverage-validate.mjs +381 -0
- package/project-template/.claude/hooks/validate-workflow-stop.mjs +196 -5
- package/project-template/.claude/settings.json +4 -0
- package/project-template/.claude/skills/playcraft-asset-state-sheet/SKILL.md +76 -22
- package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +84 -15
- package/project-template/.claude/skills/playcraft-storyboard/SKILL.md +26 -7
- package/project-template/.claude/skills/playcraft-workflow/SKILL.md +104 -15
- package/project-template/.claude/skills/playwright-cli/SKILL.md +390 -0
- package/project-template/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
- package/project-template/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/project-template/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/project-template/.claude/skills/playwright-cli/references/running-code.md +240 -0
- package/project-template/.claude/skills/playwright-cli/references/session-management.md +226 -0
- package/project-template/.claude/skills/playwright-cli/references/spec-driven-testing.md +312 -0
- package/project-template/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/project-template/.claude/skills/playwright-cli/references/test-generation.md +138 -0
- package/project-template/.claude/skills/playwright-cli/references/tracing.md +142 -0
- package/project-template/.claude/skills/playwright-cli/references/video-recording.md +157 -0
- package/project-template/.cursor/rules/playcraft-orchestrator.mdc +74 -24
- package/project-template/.cursor/rules/playcraft-subagent-boundary.mdc +1 -1
- package/project-template/CLAUDE.md +99 -59
- package/project-template/docs/team/agent-conduct.md +42 -26
- package/project-template/docs/team/agent-runtime-matrix.md +71 -39
- package/project-template/docs/team/atom-plan-format.md +101 -2
- package/project-template/docs/team/collaboration.md +57 -48
- package/project-template/docs/team/core-model.md +20 -19
- package/project-template/docs/team/workflow-changelog.md +28 -14
- package/project-template/docs/team/workflow-consistency-checklist.md +64 -0
- package/project-template/templates/atom-plan.template.json +18 -0
- package/project-template/templates/atom-plan.template.md +35 -3
- package/project-template/templates/designer-log.template.md +94 -5
- package/project-template/templates/developer-log.template.md +95 -101
- package/project-template/templates/layout-spec.template.md +62 -8
- package/project-template/templates/project-state.template.md +51 -33
- package/project-template/templates/review-report.template.md +76 -151
- package/project-template/templates/ta-log.template.md +180 -14
|
@@ -48,19 +48,67 @@ Repeat this section for each atom.
|
|
|
48
48
|
Fill in details as you complete each one.
|
|
49
49
|
-->
|
|
50
50
|
|
|
51
|
+
## Image Production Preflight (Phase 1 — Gate #2b)
|
|
52
|
+
|
|
53
|
+
> **Mandatory before MC/ASR generation and before `#2b` STOP.** Read all three Skills; record key decisions.
|
|
54
|
+
|
|
55
|
+
| Skill / Check | 已读 | 关键决策摘要 |
|
|
56
|
+
| --------------------------- | ---- | -------------------------------------------------------- |
|
|
57
|
+
| playcraft-storyboard | ☐ | MC 45:16 · model whitelist · Panel 1 all element types |
|
|
58
|
+
| playcraft-asset-state-sheet | ☐ | ASR grid · isolated cells · sheet #808080 · cell chroma |
|
|
59
|
+
| playcraft-image-generation | ☐ | §3 chroma matrix · §3.1 ASR branch · no remove-bg on ASR |
|
|
60
|
+
|
|
61
|
+
<!--
|
|
62
|
+
MUST be filled before generating ASR (Step 4) and before Gate #2b STOP.
|
|
63
|
+
Hook validate-workflow-stop enforces this section in style_exploration stage.
|
|
64
|
+
-->
|
|
65
|
+
|
|
51
66
|
## ASR Coverage Matrix (designer-handoff-v2 — 100% contract rows)
|
|
52
67
|
|
|
53
68
|
> UI: `assets/images/reference/ui_state_sheet_{{option}}.png`
|
|
54
69
|
> Element: `assets/images/reference/element_state_sheet_{{option}}.png`
|
|
55
70
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
|
59
|
-
|
|
|
71
|
+
### Sheet grid metadata (供 TA crop 计算)
|
|
72
|
+
|
|
73
|
+
| Sheet | Total rows | Total cols | Cell W×H (px) | Cell padding (px) | Origin |
|
|
74
|
+
| -------------------------------------- | ------------- | ---------- | ------------- | ----------------- | ----------------- |
|
|
75
|
+
| `ui_state_sheet_{{option}}.png` | 2 | 4 | 800×800 | 80 | top-left (R1, C1) |
|
|
76
|
+
| `element_state_sheet_{{option}}.png` | 2 | 4 | 800×800 | 80 | top-left (R1, C1) |
|
|
77
|
+
| `element_state_sheet_{{option}}_2.png` | (if overflow) | | | | |
|
|
78
|
+
|
|
79
|
+
<!--
|
|
80
|
+
Grid coordinates use 1-based indexing, row-major.
|
|
81
|
+
Cell W×H = visible cell area (without padding). Padding = margin between cells AND outer margin.
|
|
82
|
+
Pixel coordinates of cell (R, C):
|
|
83
|
+
x = (C - 1) × (cellW + padding) + padding
|
|
84
|
+
y = (R - 1) × (cellH + padding) + padding
|
|
85
|
+
TA uses these for `playcraft image crop --x ... --y ... --width cellW --height cellH`.
|
|
86
|
+
-->
|
|
87
|
+
|
|
88
|
+
### Coverage
|
|
89
|
+
|
|
90
|
+
| Contract id | elementType | Type | CoverageLayer | ASR sheet | Grid (row,col) | State(s) | TA extends? |
|
|
91
|
+
| -------------------------------- | ----------- | ------ | ----------------------------- | ------------ | -------------- | ----------- | ----------- |
|
|
92
|
+
| {{element_id_from_assetMapping}} | {{type}} | visual | on-asr / mc-crop / ta-extends | ui / element | {{R1C1}} | {{default}} | {{yes/no}} |
|
|
93
|
+
| {{static_text_id}} | — | text | mc-crop or on-asr | ui / MC-crop | — | baked | {{yes/no}} |
|
|
60
94
|
|
|
61
95
|
<!--
|
|
62
96
|
One row per layout-spec assetMapping elementId and per static text id.
|
|
63
|
-
|
|
97
|
+
CoverageLayer:
|
|
98
|
+
on-asr — physical slot on ASR PNG; Grid required; mirror atoms[].asrSlot
|
|
99
|
+
mc-crop — MC Panel 1 only; ASR sheet = MC-crop
|
|
100
|
+
ta-extends — variant/extra states; TA extends? = yes + Style Intent note
|
|
101
|
+
|
|
102
|
+
Type rule: each distinct elementType must have ≥1 row with on-asr OR mc-crop.
|
|
103
|
+
Grid syntax: R{row}C{col}, e.g. R1C2, 1-based, row-major.
|
|
104
|
+
TA crop + Phase 2 VisualAtom actualOutput: ASR:<sheet>:R#C#
|
|
105
|
+
|
|
106
|
+
After filling this table, MIRROR each visual row into atom-plan.json:
|
|
107
|
+
atoms[].asrSlot = { "sheet": "ui" | "element", "row": <n>, "col": <n> }
|
|
108
|
+
|
|
109
|
+
This lets TA batch-crop from atom-plan.json directly (see ta-pipeline-cookbook.md
|
|
110
|
+
§ ASR 提取方法 "优先路径") instead of manually re-reading this Coverage table.
|
|
111
|
+
See docs/team/atom-plan-format.md § `asrSlot` for full schema + crop formula.
|
|
64
112
|
-->
|
|
65
113
|
|
|
66
114
|
## Palette Locked (from MC option {{option}})
|
|
@@ -74,6 +122,47 @@ TA crop index + Phase 2 VisualAtom actualOutput: ASR:sheet:R#C#
|
|
|
74
122
|
|
|
75
123
|
**Delta vs layout-spec Color Palette**: {{match | PM update: one line}}
|
|
76
124
|
|
|
125
|
+
## Skill Preflight (Phase 2)
|
|
126
|
+
|
|
127
|
+
> **Mandatory before audio/digit production.** Read relevant Skills + check mediaGroups.
|
|
128
|
+
|
|
129
|
+
| Skill / Check | 已读 | 关键决策摘要 |
|
|
130
|
+
| -------------------------- | ---- | --------------------------------------------- |
|
|
131
|
+
| playcraft-audio-generation | ☐ | {{BGM mood, SFX prompt pattern, loop config}} |
|
|
132
|
+
| playcraft-text-rendering | ☐ | {{digit strip chroma strategy, font style}} |
|
|
133
|
+
| playcraft-image-generation | ☐ | {{background decision for digit strip}} |
|
|
134
|
+
| mediaGroups (.aiaudio) | ☐ | {{linked: X, skipped: Y, reason: Z}} |
|
|
135
|
+
|
|
136
|
+
<!--
|
|
137
|
+
MUST be filled before generating any audio or digit strip in Phase 2.
|
|
138
|
+
mediaGroups: list each .aiaudio match disposition (linked/skipped + reason).
|
|
139
|
+
-->
|
|
140
|
+
|
|
141
|
+
## mediaGroups Reuse (Phase 2)
|
|
142
|
+
|
|
143
|
+
> **Mandatory before any audio generation.** Filter `atom-plan.json` → `skillsMatch.mediaGroups` by `extension`; Designer is responsible for **`.aiaudio` only** (TA handles `.aiimage` / `.aisprite`).
|
|
144
|
+
|
|
145
|
+
| mediaGroup atomId | extension | Matches Designer atom? | Disposition | Reason (if skipped) | Output path (if linked) |
|
|
146
|
+
| ----------------- | --------- | ---------------------- | ------------- | ---------------------------------- | ----------------------- |
|
|
147
|
+
| {{mg_atomId}} | .aiaudio | {{atom_id / —}} | linked / skip | {{mood mismatch / wrong loop / —}} | {{path / —}} |
|
|
148
|
+
|
|
149
|
+
<!--
|
|
150
|
+
Designer scope (this table):
|
|
151
|
+
.aiaudio — BGM / SFX bundles → link or skip (with reason)
|
|
152
|
+
|
|
153
|
+
Out of Designer scope (do NOT fill rows for these — TA owns them):
|
|
154
|
+
.aiimage — single-shot image atoms
|
|
155
|
+
.aisprite — sprite-sheet atoms (multi-frame)
|
|
156
|
+
.aigameplay / .aiconfig — Developer reads via skillRef
|
|
157
|
+
|
|
158
|
+
Filter command:
|
|
159
|
+
cat docs/atom-plan.json | jq '.skillsMatch.mediaGroups[] | select(.extension == ".aiaudio")'
|
|
160
|
+
|
|
161
|
+
Disposition rules:
|
|
162
|
+
linked → playcraft skills link → verify mood matches MC → status: done
|
|
163
|
+
skip → quality / mood / loop mismatch → document reason → generate from scratch
|
|
164
|
+
-->
|
|
165
|
+
|
|
77
166
|
## Style Consistency Self-Check
|
|
78
167
|
|
|
79
168
|
- [ ] All visual assets share the same art style?
|
|
@@ -2,116 +2,119 @@
|
|
|
2
2
|
|
|
3
3
|
## Upstream Intake
|
|
4
4
|
|
|
5
|
-
> **Step 0 — mandatory before Spec Quick-Check or any `game/` edit.**
|
|
5
|
+
> **Step 0 — mandatory before Spec Quick-Check or any `game/` edit.**
|
|
6
|
+
|
|
7
|
+
| Doc | Read ✓ | One-line takeaway |
|
|
8
|
+
| --------------------------- | ------ | ----------------------------------------- |
|
|
9
|
+
| `docs/project-state.md` | ☐ | {{e.g. ui_pass, Wave 2 done}} |
|
|
10
|
+
| `docs/design-brief.md` | ☐ | {{e.g. flow scenes for navigation}} |
|
|
11
|
+
| `docs/layout-spec.md` | ☐ | {{e.g. zones, assetMapping, atlas paths}} |
|
|
12
|
+
| `docs/atom-plan.json` | ☐ | {{e.g. Developer atoms + skillRefs}} |
|
|
13
|
+
| `docs/atom-plan.md` | ☐ | Impl Skill Context + acceptance |
|
|
14
|
+
| `docs/style-exploration.md` | ☐ | {{e.g. MC panel layout per scene}} |
|
|
15
|
+
| `logs/designer-log.md` | ☐ | {{e.g. palette locked, motion notes}} |
|
|
16
|
+
| `logs/ta-log.md` | ☐ | {{e.g. compliance green, atlas params}} |
|
|
6
17
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
| `docs/atom-plan.json` | ☐ | {{e.g. 6 Developer atoms, skillRef memory_match}} |
|
|
13
|
-
| `docs/atom-plan.md` | ☐ | Impl Skill Context + acceptance criteria |
|
|
14
|
-
| `docs/style-exploration.md` | ☐ | {{e.g. MC panel1 UI layout, Hook frame contrast}} |
|
|
15
|
-
| `logs/designer-log.md` | ☐ | {{e.g. motion: slow-mo near-win}} |
|
|
16
|
-
| `logs/ta-log.md` | ☐ | {{e.g. Compliance green, tile atlas 8 frames}} |
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Skill Preflight
|
|
21
|
+
|
|
22
|
+
> **Before any `game/` edits (ui_pass).** See `refs/developer-phase1-flow.md` Step 3.
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
| skillRef | access | `ref/` files read (paths) | `scaffold` included |
|
|
25
|
+
| ------------ | --------------------- | ------------------------- | ------------------- |
|
|
26
|
+
| {{skillRef}} | linked / cli-fallback | {{paths}} | yes / no |
|
|
19
27
|
|
|
20
28
|
---
|
|
21
29
|
|
|
22
|
-
##
|
|
30
|
+
## UI Pass Plan
|
|
23
31
|
|
|
24
|
-
> **
|
|
32
|
+
> **ui_pass only — mandatory before UI implementation.** Hook enforces on STOP.
|
|
25
33
|
|
|
26
|
-
|
|
27
|
-
| ------------ | --------------------- | ----------------------------------------------- | ------------------- |
|
|
28
|
-
| {{skillRef}} | linked / cli-fallback | {{e.g. .claude/skills/.../ref/pgs-schema.json}} | yes / no |
|
|
34
|
+
### Architecture
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
```
|
|
36
|
+
- **Engine**: {{engine}}
|
|
37
|
+
- **Entry**: `game/index.html`
|
|
38
|
+
- **Scene flow**: Hook → Tutorial → EndCard → CTA (navigation only in ui_pass)
|
|
34
39
|
|
|
35
|
-
|
|
36
|
-
Rules:
|
|
37
|
-
- One row per non-dash skillRef from atom-plan
|
|
38
|
-
- access: `linked` = read `.claude/skills/<skillRef>/`; `cli-fallback` = soft link missing, used `playcraft skills read` + Package Skills Root
|
|
39
|
-
- If skillRef = — for an atom, note "skills match" or playcraft-research in Impl Skill Context instead
|
|
40
|
-
- Do NOT mark GameplayAtom/ConfigAtom done in atom-plan until this table is filled
|
|
41
|
-
-->
|
|
40
|
+
### Scene-Asset Binding Plan
|
|
42
41
|
|
|
43
|
-
|
|
42
|
+
| Scene | Assets (assetMapping) | Atlas/Frame | On disk? |
|
|
43
|
+
| -------- | --------------------- | ----------- | -------- |
|
|
44
|
+
| hook | {{paths}} | {{json}} | {{y/n}} |
|
|
45
|
+
| tutorial | {{paths}} | {{json}} | {{y/n}} |
|
|
46
|
+
| endcard | {{paths}} | {{json}} | {{y/n}} |
|
|
44
47
|
|
|
45
|
-
|
|
46
|
-
- **Completed**: {{total_completed}}
|
|
47
|
-
- **Bindings resolved**: {{resolved}}/{{total_bindings}}
|
|
48
|
+
### Scene navigation (for Reviewer ui_diff)
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
| MC panel | Scene key | How to reach (URL param / button) |
|
|
51
|
+
| ---------- | ----------- | ---------------------------------- |
|
|
52
|
+
| Concept | {{initial}} | {{e.g. ?scene=main or default}} |
|
|
53
|
+
| Hook | hook | {{e.g. ?scene=hook}} |
|
|
54
|
+
| Onboarding | tutorial | {{e.g. button or ?scene=tutorial}} |
|
|
55
|
+
| EndCard | endcard | {{...}} |
|
|
56
|
+
| CTA | cta | {{...}} |
|
|
50
57
|
|
|
51
|
-
|
|
52
|
-
> Read `docs/style-exploration.md` concept mockup + storyboard composite image before implementing.
|
|
53
|
-
> The storyboard is a single composite image with 4 frames in a grid — study each frame's position.
|
|
54
|
-
|
|
55
|
-
| Storyboard Frame | Scene/State | Code Location | Visual Intent |
|
|
56
|
-
| ------------------------- | ---------------- | ------------------------- | ----------------------------- |
|
|
57
|
-
| Hook (0-3s) | `scene.hook` | `game/scenes/hook.ts` | {{visual_intent_description}} |
|
|
58
|
-
| Tutorial (3-10s) | `scene.tutorial` | `game/scenes/tutorial.ts` | {{visual_intent_description}} |
|
|
59
|
-
| Gameplay+NearWin (10-25s) | `scene.gameplay` | `game/scenes/gameplay.ts` | {{visual_intent_description}} |
|
|
60
|
-
| EndCard (25-30s) | `scene.endcard` | `game/scenes/endcard.ts` | {{visual_intent_description}} |
|
|
61
|
-
|
|
62
|
-
<!--
|
|
63
|
-
Rules:
|
|
64
|
-
- Every scene code file MUST have a top comment referencing the storyboard:
|
|
65
|
-
// Visual reference: assets/images/storyboard/storyboard_confirmed.png (frame: top-left=Hook)
|
|
66
|
-
- If storyboard frame visuals conflict with layout-spec zones coordinates:
|
|
67
|
-
→ storyboard takes precedence, ask PM in intent-clarifications.md
|
|
68
|
-
- Visual Intent column should capture the EMOTION and ATTENTION FLOW, not just mechanics
|
|
69
|
-
-->
|
|
58
|
+
### Risk Checklist (ui_pass)
|
|
70
59
|
|
|
71
|
-
|
|
60
|
+
- [ ] Every assetMapping path verified on disk
|
|
61
|
+
- [ ] Scene navigation documented for all 5 MC panels
|
|
62
|
+
- [ ] No core gameplay rules in ui_pass scope
|
|
63
|
+
- [ ] No external network dependencies
|
|
72
64
|
|
|
73
|
-
|
|
65
|
+
---
|
|
74
66
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
- **Test results**: {{passed}}/{{total}} passed
|
|
79
|
-
- **Notes**: {{implementation_notes}}
|
|
67
|
+
## Gameplay Pass Plan
|
|
68
|
+
|
|
69
|
+
> **gameplay_pass only — mandatory before PGS / rules implementation.**
|
|
80
70
|
|
|
81
|
-
|
|
82
|
-
Repeat for each atom.
|
|
83
|
-
For GameplayAtom: include PGS path + test results
|
|
84
|
-
For ConfigAtom: include config path + parameter summary
|
|
85
|
-
-->
|
|
71
|
+
### PGS Strategy
|
|
86
72
|
|
|
87
|
-
|
|
73
|
+
- **Gameplay type**: {{from design-brief}}
|
|
74
|
+
- **Core rules**: {{from Skill recipe}}
|
|
75
|
+
- **First level guarantee**: {{how tutorial ensures win}}
|
|
76
|
+
- **State machine**: {{states and transitions}}
|
|
88
77
|
|
|
89
|
-
|
|
90
|
-
| ---------------------------- | ------------------ | ------------------- | -------------------------- |
|
|
91
|
-
| {{scene_path_or_config_key}} | {{source_atom_id}} | {{asset_file_path}} | {{bound/missing/mismatch}} |
|
|
78
|
+
### Risk Checklist (gameplay_pass)
|
|
92
79
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
80
|
+
- [ ] UI shell unchanged unless open UI Diff items
|
|
81
|
+
- [ ] testCases written before rule implementation
|
|
82
|
+
- [ ] First level guarantees player success
|
|
83
|
+
- [ ] CTA handler with platform fallbacks
|
|
84
|
+
- [ ] Zero external network requests
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Experience Flow → Code Mapping
|
|
98
89
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
90
|
+
| Storyboard Frame | Scene/State | Code Location | Visual Intent |
|
|
91
|
+
| ---------------- | ---------------- | ------------------------- | ------------- |
|
|
92
|
+
| Hook | `scene.hook` | `game/scenes/hook.ts` | {{intent}} |
|
|
93
|
+
| Tutorial | `scene.tutorial` | `game/scenes/tutorial.ts` | {{intent}} |
|
|
94
|
+
| Gameplay | `scene.gameplay` | `game/scenes/gameplay.ts` | {{intent}} |
|
|
95
|
+
| EndCard | `scene.endcard` | `game/scenes/endcard.ts` | {{intent}} |
|
|
96
|
+
|
|
97
|
+
---
|
|
104
98
|
|
|
105
99
|
## Dev self-check
|
|
106
100
|
|
|
107
|
-
|
|
101
|
+
### ui_pass completion
|
|
108
102
|
|
|
109
103
|
- **devUrl**: {{http://localhost:...}}
|
|
110
|
-
- **
|
|
104
|
+
- **devStatus**: ui_ready
|
|
111
105
|
- **UI vs MC + layout-spec**: {{pass/fail — notes}}
|
|
106
|
+
- **Scene navigation works**: {{yes/no}}
|
|
107
|
+
- **Ready for Reviewer ui_diff**: {{yes/no}}
|
|
108
|
+
|
|
109
|
+
### gameplay_pass completion
|
|
110
|
+
|
|
111
|
+
- **devUrl**: {{http://localhost:...}}
|
|
112
|
+
- **devStatus**: ready
|
|
112
113
|
- **Gameplay vs design-brief + PGS**: {{pass/fail — notes}}
|
|
113
|
-
- **Runtime** (
|
|
114
|
-
- **Ready for Reviewer**: {{yes/no}}
|
|
114
|
+
- **Runtime** (CTA, audio, state machine): {{pass/fail — notes}}
|
|
115
|
+
- **Ready for Reviewer load_check**: {{yes/no}}
|
|
116
|
+
|
|
117
|
+
---
|
|
115
118
|
|
|
116
119
|
## Upstream blockers
|
|
117
120
|
|
|
@@ -119,22 +122,13 @@ Status values:
|
|
|
119
122
|
| -------- | --------- | -------------- | ------------------ | --------------- |
|
|
120
123
|
| {{path}} | {{issue}} | {{acceptance}} | TA / Designer / PM | open / resolved |
|
|
121
124
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
-
|
|
132
|
-
- [ ] Element IDs match layout-spec `colorPalette.tileColors[].id`?
|
|
133
|
-
- [ ] All asset paths match layout-spec `assetMapping`?
|
|
134
|
-
- [ ] Zero external network requests (no fetch/XHR/external scripts)?
|
|
135
|
-
- [ ] CTA handler implemented with multi-platform fallback?
|
|
136
|
-
- [ ] `game/index.html` has viewport meta with user-scalable=no?
|
|
137
|
-
- [ ] All CSS/JS inline (no external resources)?
|
|
138
|
-
- [ ] First level guarantees player success?
|
|
139
|
-
|
|
140
|
-
> **Not required for integration complete**: `playcraft build` (future delivery path only).
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Per-Atom Delivery
|
|
128
|
+
|
|
129
|
+
### {{atom_id}} — {{slot_name}}
|
|
130
|
+
|
|
131
|
+
- **Status**: {{status}}
|
|
132
|
+
- **Phase**: ui_pass / gameplay_pass
|
|
133
|
+
- **Output path**: {{file_path}}
|
|
134
|
+
- **Notes**: {{notes}}
|
|
@@ -82,12 +82,33 @@ Single large assets (full-screen bg) → one webp path only. Digit strip → sep
|
|
|
82
82
|
Each elementId in assetMapping uses atlasPath + frameId OR single visualAsset path.
|
|
83
83
|
-->
|
|
84
84
|
|
|
85
|
+
Single-element groups stay as single-file paths; do not invent atlases for one texture.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Element Type Registry (ASR capacity budget)
|
|
90
|
+
|
|
91
|
+
Group `assetMapping` elementIds by **visual type** before Gate #1 lock. Designer needs **one representative per type** on ASR or MC Panel 1; color variants are `ta-extends`.
|
|
92
|
+
|
|
93
|
+
| typeId | elementIds (variants) | Notes |
|
|
94
|
+
| -------- | ---------------------------- | ------------------------------- |
|
|
95
|
+
| {{type}} | {{id_a}}, {{id_b}}, {{id_c}} | e.g. tile colors share one type |
|
|
96
|
+
|
|
97
|
+
**Budget**: aim for **≤ 20 unique types** and **≤ ~24 ASR physical slots** (ui board ~12 + element board ~12). If types > 12, plan `element_state_sheet_[X]_2.png` or extra `mc-crop` + `ta-extends` rows.
|
|
98
|
+
|
|
99
|
+
Designer Coverage Matrix **elementType** column should match `typeId` here.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
85
103
|
## Asset Mapping
|
|
86
104
|
|
|
87
105
|
| elementId | visualAsset / atlas | frameId | sfx |
|
|
88
106
|
| -------------- | ------------------------------------- | ------- | ------------------------------------- |
|
|
89
107
|
| {{element_id}} | assets/images/tiles/tiles_atlas.webp | tile_01 | {{sfx_path_or_dash}} |
|
|
90
108
|
| — | assets/images/bg/{{bg_filename}}.webp | — | — |
|
|
109
|
+
| — | assets/images/ui/{{ui_element}}.webp | — | — |
|
|
110
|
+
| — | assets/images/txt/{{text}}.webp | — | — |
|
|
111
|
+
| — | assets/images/vfx/{{vfx}}.webp | — | — |
|
|
91
112
|
| — | — | — | assets/audio/sfx/{{sfx_filename}}.mp3 |
|
|
92
113
|
| — | — | — | assets/audio/bgm/{{bgm_filename}}.mp3 |
|
|
93
114
|
|
|
@@ -97,6 +118,17 @@ CRITICAL: This mapping is the integration contract!
|
|
|
97
118
|
- Developer references EXACTLY these paths in code
|
|
98
119
|
- Path mismatch = integration failure
|
|
99
120
|
- Use "—" for cells that don't apply
|
|
121
|
+
|
|
122
|
+
Transparency convention (TA auto-derives from path — PM does NOT define):
|
|
123
|
+
assets/images/bg/ → opaque, full-screen background (TA verifies edge-to-edge)
|
|
124
|
+
assets/images/ui/ → needs alpha (TA applies chroma key + remove-background)
|
|
125
|
+
assets/images/txt/ → needs alpha (TA applies chroma key + remove-background)
|
|
126
|
+
assets/images/vfx/ → needs alpha (TA applies chroma key + remove-background)
|
|
127
|
+
assets/images/tiles/ → needs alpha by default (except card faces / board pieces)
|
|
128
|
+
assets/audio/ → N/A (not image)
|
|
129
|
+
|
|
130
|
+
TA determines chroma key color (green/blue/magenta) based on element color palette
|
|
131
|
+
and color conflict rules — see ta-pipeline-cookbook.md Step 0e.
|
|
100
132
|
-->
|
|
101
133
|
|
|
102
134
|
## Text Assets
|
|
@@ -117,16 +149,38 @@ TA extracts each text element using segment and saves to the specified path.
|
|
|
117
149
|
|
|
118
150
|
### Digit Sprite Strip (for dynamic numbers)
|
|
119
151
|
|
|
120
|
-
- **Characters**: `{{digit_characters}}`
|
|
152
|
+
- **Characters**: `{{digit_characters}}` _(typical "0123456789" — frameCount = 10)_
|
|
121
153
|
- **Cell size**: {{cell_w}}x{{cell_h}}
|
|
122
|
-
- **Asset path**: `assets/images/
|
|
154
|
+
- **Asset path**: `assets/images/txt/digits.webp` _(recommended: text-class lives under `images/txt/` per Transparency Classification)_
|
|
155
|
+
- **Sidecar path (optional)**: `assets/images/txt/digits.json` _(only when laid out as multi-row grid; single-row strip can omit)_
|
|
156
|
+
- **Layout**: single-row horizontal strip (default) — total width = `cell_w × frameCount`, height = `cell_h`
|
|
157
|
+
- **Alpha**: required (channels = 4); TA uses **bluescreen** chroma (text typically gold/white — avoid green key)
|
|
123
158
|
|
|
124
159
|
<!--
|
|
125
160
|
PM defines the character set based on what dynamic text the game needs.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
- Score
|
|
129
|
-
- Score +
|
|
130
|
-
|
|
131
|
-
|
|
161
|
+
|
|
162
|
+
Common sets (always include digits 0–9 first, then any symbols):
|
|
163
|
+
- Score only: "0123456789" (frameCount = 10)
|
|
164
|
+
- Score + timer: "0123456789:." (frameCount = 12)
|
|
165
|
+
- Score + multiplier: "0123456789x+,." (frameCount = 14)
|
|
166
|
+
|
|
167
|
+
Path convention (TA Transparency Classification + Compliance Gate):
|
|
168
|
+
- `assets/images/txt/digits.webp` — preferred (text class → bluescreen, channels=4)
|
|
169
|
+
- `assets/images/txt/digits_{{label}}.webp` — when multiple digit styles exist (score / countdown / level)
|
|
170
|
+
- Legacy `assets/images/ui/digits.webp` works but TA must still classify it as text (bluescreen, not greenscreen).
|
|
171
|
+
|
|
172
|
+
Layout (default single horizontal row):
|
|
173
|
+
- Total width = cell_w × frameCount
|
|
174
|
+
- Total height = cell_h
|
|
175
|
+
- Cell origin (0-based, row-major): x = index × cell_w, y = 0
|
|
176
|
+
- Developer slices at runtime: char_x = index × cell_w
|
|
177
|
+
|
|
178
|
+
Multi-row digit grid (rare — e.g. small + large digits in one sheet) MUST supply a `.json` sidecar
|
|
179
|
+
describing each frame; Compliance Gate then checks dimensions against that sidecar.
|
|
180
|
+
|
|
181
|
+
Compliance Gate (TA verifies before STOP):
|
|
182
|
+
- frameCount = character count above
|
|
183
|
+
- total width × height matches the layout (single-row or sidecar)
|
|
184
|
+
- channels = 4 (alpha)
|
|
185
|
+
- dark-bg verify: no chroma residue around digit edges
|
|
132
186
|
-->
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
| Field | Value |
|
|
6
6
|
| ----------------------- | --------------------------------------------------------------------- |
|
|
7
|
-
| **workflowSpecVersion** | `
|
|
7
|
+
| **workflowSpecVersion** | `convergence-v1` |
|
|
8
8
|
| **Changelog** | [docs/team/workflow-changelog.md](../docs/team/workflow-changelog.md) |
|
|
9
9
|
|
|
10
10
|
<!--
|
|
11
|
-
|
|
11
|
+
convergence-v1: Three convergence loops — design_check (Gate #1/#2b) → ui_pass/ui_review/ui_rework → gameplay_pass/load_check → Gate #3.
|
|
12
12
|
Visual baseline (designer-handoff-v2): Phase 1 = MC + ASR; Phase 2 Designer = audio + digit strip + VisualAtom status only.
|
|
13
13
|
-->
|
|
14
14
|
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
|
|
33
33
|
**{{current_stage}}** — {{stage_description}}
|
|
34
34
|
|
|
35
|
-
`pm` → `style_exploration` → `production` → `
|
|
35
|
+
`pm` → `style_exploration` → `production` → `ui_pass` → `ui_review` ⇄ `ui_rework` → `gameplay_pass` → `done`
|
|
36
36
|
|
|
37
37
|
<!-- Stage definitions: see CLAUDE.md § Stage Model -->
|
|
38
38
|
|
|
@@ -40,12 +40,12 @@
|
|
|
40
40
|
|
|
41
41
|
> Only the **orchestrator** runs `AskUserQuestion` toward the user. Sub-agents set `pending` and STOP.
|
|
42
42
|
|
|
43
|
-
| Gate | Status | Notes
|
|
44
|
-
| ------------------ | ------------------ |
|
|
45
|
-
| #1 Direction | {{passed/pending}} | Orchestrator confirms after PM four docs + STOP
|
|
46
|
-
| #2a MC selection | {{passed/pending}} | Orchestrator picks A/B/C → sets `selectedMcOption` below
|
|
47
|
-
| #2b MC + ASR final | {{passed/pending}} | Orchestrator confirms MC + ASR
|
|
48
|
-
| #3 Dev acceptance | {{passed/pending}} |
|
|
43
|
+
| Gate | Status | Notes |
|
|
44
|
+
| ------------------ | ------------------ | ---------------------------------------------------------------------------- |
|
|
45
|
+
| #1 Direction | {{passed/pending}} | Orchestrator confirms after PM four docs + Reviewer design_check + STOP |
|
|
46
|
+
| #2a MC selection | {{passed/pending}} | Orchestrator picks A/B/C → sets `selectedMcOption` below |
|
|
47
|
+
| #2b MC + ASR final | {{passed/pending}} | Reviewer design_check → Orchestrator confirms MC + ASR → `stage: production` |
|
|
48
|
+
| #3 Dev acceptance | {{passed/pending}} | Reviewer load_check pass → user opens devUrl (orchestrator link only) |
|
|
49
49
|
|
|
50
50
|
## Agent handoff
|
|
51
51
|
|
|
@@ -82,13 +82,21 @@ Designer Gate #2a STOP:
|
|
|
82
82
|
next_orchestrator_action: "Run Gate #2a"
|
|
83
83
|
last_completed_by: designer
|
|
84
84
|
|
|
85
|
-
Developer
|
|
85
|
+
Developer ui_pass STOP:
|
|
86
86
|
subagent: developer
|
|
87
87
|
subagent_stop: true
|
|
88
88
|
waiting_for: orchestrator
|
|
89
89
|
gate_pending: null
|
|
90
|
-
next_orchestrator_action: "Invoke @reviewer"
|
|
90
|
+
next_orchestrator_action: "Invoke @reviewer ui_diff"
|
|
91
91
|
last_completed_by: developer
|
|
92
|
+
|
|
93
|
+
Reviewer ui_diff pass STOP:
|
|
94
|
+
subagent: reviewer
|
|
95
|
+
subagent_stop: true
|
|
96
|
+
waiting_for: orchestrator
|
|
97
|
+
gate_pending: null
|
|
98
|
+
next_orchestrator_action: "Set stage=gameplay_pass, invoke @developer"
|
|
99
|
+
last_completed_by: reviewer
|
|
92
100
|
-->
|
|
93
101
|
|
|
94
102
|
## Gate resume fields
|
|
@@ -96,30 +104,40 @@ Developer integration STOP:
|
|
|
96
104
|
| Field | Value |
|
|
97
105
|
| ---------------- | -------------------------------------------------- |
|
|
98
106
|
| selectedMcOption | {{A / B / C — set by orchestrator after Gate #2a}} |
|
|
99
|
-
|
|
|
107
|
+
| uiReworkRound | {{0–5 — incremented by Reviewer on ui_diff fail}} |
|
|
100
108
|
|
|
101
109
|
## Dev Preview
|
|
102
110
|
|
|
103
|
-
| Field
|
|
104
|
-
|
|
|
105
|
-
| devCommand
|
|
106
|
-
| devScript
|
|
107
|
-
| devUrl
|
|
108
|
-
| devStatus
|
|
109
|
-
| devBlockers
|
|
110
|
-
| devStartedBy
|
|
111
|
-
| devLastChecked
|
|
112
|
-
|
|
|
113
|
-
|
|
|
111
|
+
| Field | Value |
|
|
112
|
+
| -------------- | ---------------------------------------------------------------------------- |
|
|
113
|
+
| devCommand | npm run dev |
|
|
114
|
+
| devScript | {{from package.json scripts.dev}} |
|
|
115
|
+
| devUrl | {{http://... — Developer records when ready; orchestrator uses for Gate #3}} |
|
|
116
|
+
| devStatus | pending / ui_ready / ready / blocked_upstream / failed |
|
|
117
|
+
| devBlockers | {{list: assetPath, issue, routeTo (TA/Designer/PM), status}} |
|
|
118
|
+
| devStartedBy | developer / reviewer / orchestrator |
|
|
119
|
+
| devLastChecked | {{ISO timestamp}} |
|
|
120
|
+
| loadCheck | pending / passed / failed |
|
|
121
|
+
| loadCheckNotes | {{console errors, white screen, load time}} |
|
|
122
|
+
|
|
123
|
+
## UI Review
|
|
124
|
+
|
|
125
|
+
| Field | Value |
|
|
126
|
+
| ---------------- | ------------------------------------------ |
|
|
127
|
+
| uiReviewStatus | pending / passed / failed |
|
|
128
|
+
| uiReworkRound | {{0–5}} |
|
|
129
|
+
| uiDiffReportPath | logs/review-report.md |
|
|
130
|
+
| uiDiffNotes | {{summary of MC vs screenshot comparison}} |
|
|
114
131
|
|
|
115
132
|
<!--
|
|
116
133
|
devStatus:
|
|
117
|
-
pending —
|
|
118
|
-
|
|
134
|
+
pending — ui_pass or gameplay_pass not finished
|
|
135
|
+
ui_ready — UI shell complete (scene switch, layout, simple states); safe to invoke Reviewer ui_diff
|
|
136
|
+
ready — gameplay_pass complete; safe to invoke Reviewer load_check
|
|
119
137
|
blocked_upstream — Developer waiting on TA/Designer rework (orchestrator re-invokes)
|
|
120
138
|
failed — dev server could not start; document error
|
|
121
139
|
|
|
122
|
-
Developer MUST NOT set ready while devBlockers has open items.
|
|
140
|
+
Developer MUST NOT set ui_ready/ready while devBlockers has open items.
|
|
123
141
|
-->
|
|
124
142
|
|
|
125
143
|
## File Index
|
|
@@ -164,21 +182,21 @@ Developer MUST NOT set ready while devBlockers has open items.
|
|
|
164
182
|
|
|
165
183
|
### Reviewer Output
|
|
166
184
|
|
|
167
|
-
| File | Description
|
|
168
|
-
| --------------------------------------------------------- |
|
|
169
|
-
| [review-report.md](logs/review-report.md) |
|
|
170
|
-
| [intent-clarifications.md](docs/intent-clarifications.md) | Agent-to-agent Q&A (ICP)
|
|
185
|
+
| File | Description | Status |
|
|
186
|
+
| --------------------------------------------------------- | ------------------------------------------- | ---------- |
|
|
187
|
+
| [review-report.md](logs/review-report.md) | design_check / ui_diff / load_check reports | {{status}} |
|
|
188
|
+
| [intent-clarifications.md](docs/intent-clarifications.md) | Agent-to-agent Q&A (ICP) | {{status}} |
|
|
171
189
|
|
|
172
190
|
## Production Pipeline (Serial)
|
|
173
191
|
|
|
174
|
-
<!-- Only relevant when stage = production or transitioning to
|
|
192
|
+
<!-- Only relevant when stage = production or transitioning to ui_pass -->
|
|
175
193
|
|
|
176
194
|
| Wave | Agent | Status | Notes |
|
|
177
195
|
| ---- | ---------------- | ---------- | ------------------------------------------ |
|
|
178
196
|
| 1 | Designer | {{status}} | Ph.2: audio + digit + VisualAtom status |
|
|
179
197
|
| 2 | Technical Artist | {{status}} | Spec Quick-Check → bulk → Compliance green |
|
|
180
198
|
|
|
181
|
-
<!-- Wave 3 Developer runs in stage =
|
|
199
|
+
<!-- Wave 3 Developer runs in stage = ui_pass — not tracked here -->
|
|
182
200
|
|
|
183
201
|
## Intent Clarification Tracking
|
|
184
202
|
|
|
@@ -203,7 +221,7 @@ PM monitors this table:
|
|
|
203
221
|
Orchestrator serial rules:
|
|
204
222
|
- Gate #2b passed → invoke @designer only (Wave 1)
|
|
205
223
|
- Wave 1 = done → invoke @technical-artist (Wave 2)
|
|
206
|
-
- Wave 2 = done → stage:
|
|
224
|
+
- Wave 2 = done → stage: ui_pass → invoke @developer
|
|
207
225
|
- Optional: 30s spot-check ta-log Compliance + contract paths exist before @developer
|
|
208
226
|
-->
|
|
209
227
|
|