@playcraft/cli 0.0.40 → 0.0.42

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.
Files changed (130) hide show
  1. package/README.md +66 -3
  2. package/dist/atom-plan/validate-atom-plan.js +298 -0
  3. package/dist/cli-root-help.js +1 -1
  4. package/dist/commands/3d.js +363 -0
  5. package/dist/commands/create.js +337 -0
  6. package/dist/commands/image.js +1337 -43
  7. package/dist/commands/recommend.js +1 -1
  8. package/dist/commands/remix.js +213 -0
  9. package/dist/commands/skills.js +1379 -0
  10. package/dist/commands/tools-3d.js +473 -0
  11. package/dist/commands/tools-generation.js +452 -0
  12. package/dist/commands/tools-project.js +400 -0
  13. package/dist/commands/tools-research.js +37 -0
  14. package/dist/commands/tools-research.test.js +216 -0
  15. package/dist/commands/tools-utils.js +183 -0
  16. package/dist/commands/tools.js +7 -616
  17. package/dist/config.js +2 -0
  18. package/dist/index.js +19 -1
  19. package/dist/utils/version-checker.js +8 -11
  20. package/package.json +9 -3
  21. package/project-template/.claude/agents/designer.md +120 -0
  22. package/project-template/.claude/agents/developer.md +124 -0
  23. package/project-template/.claude/agents/pm.md +164 -0
  24. package/project-template/.claude/agents/refs/README.md +73 -0
  25. package/project-template/.claude/agents/refs/designer-art-style-catalog.md +533 -0
  26. package/project-template/.claude/agents/refs/designer-color-audio-recipes.md +153 -0
  27. package/project-template/.claude/agents/refs/designer-deliverable-spec.md +191 -0
  28. package/project-template/.claude/agents/refs/designer-dimension-axis.md +27 -0
  29. package/project-template/.claude/agents/refs/designer-handoff-v2-checklist.md +68 -0
  30. package/project-template/.claude/agents/refs/designer-master-composite-recipes.md +208 -0
  31. package/project-template/.claude/agents/refs/designer-style-exploration-flow.md +37 -0
  32. package/project-template/.claude/agents/refs/developer-dev-handoff.md +109 -0
  33. package/project-template/.claude/agents/refs/developer-impl-cookbook.md +134 -0
  34. package/project-template/.claude/agents/refs/developer-phase1-flow.md +136 -0
  35. package/project-template/.claude/agents/refs/pm-workflow-detail.md +551 -0
  36. package/project-template/.claude/agents/refs/reviewer-convergence-eval.md +130 -0
  37. package/project-template/.claude/agents/refs/reviewer-six-dimension-eval.md +6 -0
  38. package/project-template/.claude/agents/refs/ta-3d-flip-recipe.md +85 -0
  39. package/project-template/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
  40. package/project-template/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
  41. package/project-template/.claude/agents/refs/ta-image-generation-detail.md +356 -0
  42. package/project-template/.claude/agents/refs/ta-image-ops-reference.md +495 -0
  43. package/project-template/.claude/agents/refs/ta-pipeline-cookbook.md +1108 -0
  44. package/project-template/.claude/agents/refs/ta-tools-reference.md +111 -0
  45. package/project-template/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
  46. package/project-template/.claude/agents/reviewer.md +127 -0
  47. package/project-template/.claude/agents/technical-artist.md +122 -0
  48. package/project-template/.claude/hooks/README.md +44 -0
  49. package/project-template/.claude/hooks/validate-atom-plan.mjs +224 -0
  50. package/project-template/.claude/hooks/validate-workflow-stop.mjs +343 -0
  51. package/project-template/.claude/settings.json +36 -0
  52. package/project-template/.claude/settings.local.json +4 -0
  53. package/project-template/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
  54. package/project-template/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
  55. package/project-template/.claude/skills/playcraft-asset-state-sheet/SKILL.md +141 -0
  56. package/project-template/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
  57. package/project-template/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
  58. package/project-template/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
  59. package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +279 -0
  60. package/project-template/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
  61. package/project-template/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
  62. package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +235 -0
  63. package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
  64. package/project-template/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
  65. package/project-template/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
  66. package/project-template/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
  67. package/project-template/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
  68. package/project-template/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
  69. package/project-template/.claude/skills/playcraft-masking/SKILL.md +373 -0
  70. package/project-template/.claude/skills/playcraft-research/SKILL.md +212 -0
  71. package/project-template/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
  72. package/project-template/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
  73. package/project-template/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
  74. package/project-template/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
  75. package/project-template/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
  76. package/project-template/.claude/skills/playcraft-workflow/SKILL.md +485 -0
  77. package/project-template/.claude/skills/playwright-cli/SKILL.md +390 -0
  78. package/project-template/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
  79. package/project-template/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
  80. package/project-template/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
  81. package/project-template/.claude/skills/playwright-cli/references/running-code.md +240 -0
  82. package/project-template/.claude/skills/playwright-cli/references/session-management.md +226 -0
  83. package/project-template/.claude/skills/playwright-cli/references/spec-driven-testing.md +312 -0
  84. package/project-template/.claude/skills/playwright-cli/references/storage-state.md +275 -0
  85. package/project-template/.claude/skills/playwright-cli/references/test-generation.md +138 -0
  86. package/project-template/.claude/skills/playwright-cli/references/tracing.md +142 -0
  87. package/project-template/.claude/skills/playwright-cli/references/video-recording.md +157 -0
  88. package/project-template/.cursor/hooks.json +17 -0
  89. package/project-template/.cursor/rules/playcraft-orchestrator.mdc +137 -0
  90. package/project-template/.cursor/rules/playcraft-subagent-boundary.mdc +18 -0
  91. package/project-template/CLAUDE.md +280 -0
  92. package/project-template/assets/audio/bgm/.gitkeep +0 -0
  93. package/project-template/assets/audio/sfx/.gitkeep +0 -0
  94. package/project-template/assets/bundles/.gitkeep +0 -0
  95. package/project-template/assets/images/bg/.gitkeep +0 -0
  96. package/project-template/assets/images/reference/.gitkeep +0 -0
  97. package/project-template/assets/images/storyboard/.gitkeep +0 -0
  98. package/project-template/assets/images/tiles/.gitkeep +0 -0
  99. package/project-template/assets/images/ui/.gitkeep +0 -0
  100. package/project-template/assets/images/vfx/.gitkeep +0 -0
  101. package/project-template/assets/models/.gitkeep +0 -0
  102. package/project-template/docs/team/agent-conduct.md +121 -0
  103. package/project-template/docs/team/agent-runtime-matrix.md +62 -0
  104. package/project-template/docs/team/atom-plan-format.md +105 -0
  105. package/project-template/docs/team/collaboration.md +297 -0
  106. package/project-template/docs/team/core-model.md +50 -0
  107. package/project-template/docs/team/platform-capabilities.md +15 -0
  108. package/project-template/docs/team/workflow-changelog.md +65 -0
  109. package/project-template/docs/team/workflow-consistency-checklist.md +140 -0
  110. package/project-template/game/config/.gitkeep +0 -0
  111. package/project-template/game/gameplay/.gitkeep +0 -0
  112. package/project-template/game/scenes/.gitkeep +0 -0
  113. package/project-template/logs/.gitkeep +0 -0
  114. package/project-template/ta-workspace/logs/.gitkeep +0 -0
  115. package/project-template/ta-workspace/scripts/.gitkeep +0 -0
  116. package/project-template/ta-workspace/tmp/.gitkeep +0 -0
  117. package/project-template/templates/atom-plan.template.json +26 -0
  118. package/project-template/templates/atom-plan.template.md +108 -0
  119. package/project-template/templates/design-brief.template.md +195 -0
  120. package/project-template/templates/design-lens-checklist.reference.md +117 -0
  121. package/project-template/templates/design-methodology.md +99 -0
  122. package/project-template/templates/designer-log.template.md +114 -0
  123. package/project-template/templates/developer-log.template.md +134 -0
  124. package/project-template/templates/five-axis-framework.md +186 -0
  125. package/project-template/templates/intent-clarifications.template.md +58 -0
  126. package/project-template/templates/layout-spec.template.md +146 -0
  127. package/project-template/templates/project-state.template.md +237 -0
  128. package/project-template/templates/review-report.template.md +91 -0
  129. package/project-template/templates/style-exploration.template.md +93 -0
  130. package/project-template/templates/ta-log.template.md +343 -0
@@ -0,0 +1,134 @@
1
+ # Developer Log
2
+
3
+ ## Upstream Intake
4
+
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}} |
17
+
18
+ ---
19
+
20
+ ## Skill Preflight
21
+
22
+ > **Before any `game/` edits (ui_pass).** See `refs/developer-phase1-flow.md` Step 3.
23
+
24
+ | skillRef | access | `ref/` files read (paths) | `scaffold` included |
25
+ | ------------ | --------------------- | ------------------------- | ------------------- |
26
+ | {{skillRef}} | linked / cli-fallback | {{paths}} | yes / no |
27
+
28
+ ---
29
+
30
+ ## UI Pass Plan
31
+
32
+ > **ui_pass only — mandatory before UI implementation.** Hook enforces on STOP.
33
+
34
+ ### Architecture
35
+
36
+ - **Engine**: {{engine}}
37
+ - **Entry**: `game/index.html`
38
+ - **Scene flow**: Hook → Tutorial → EndCard → CTA (navigation only in ui_pass)
39
+
40
+ ### Scene-Asset Binding Plan
41
+
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}} |
47
+
48
+ ### Scene navigation (for Reviewer ui_diff)
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 | {{...}} |
57
+
58
+ ### Risk Checklist (ui_pass)
59
+
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
64
+
65
+ ---
66
+
67
+ ## Gameplay Pass Plan
68
+
69
+ > **gameplay_pass only — mandatory before PGS / rules implementation.**
70
+
71
+ ### PGS Strategy
72
+
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}}
77
+
78
+ ### Risk Checklist (gameplay_pass)
79
+
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
89
+
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
+ ---
98
+
99
+ ## Dev self-check
100
+
101
+ ### ui_pass completion
102
+
103
+ - **devUrl**: {{http://localhost:...}}
104
+ - **devStatus**: ui_ready
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
113
+ - **Gameplay vs design-brief + PGS**: {{pass/fail — notes}}
114
+ - **Runtime** (CTA, audio, state machine): {{pass/fail — notes}}
115
+ - **Ready for Reviewer load_check**: {{yes/no}}
116
+
117
+ ---
118
+
119
+ ## Upstream blockers
120
+
121
+ | Path | Issue | Expected | routeTo | Status |
122
+ | -------- | --------- | -------------- | ------------------ | --------------- |
123
+ | {{path}} | {{issue}} | {{acceptance}} | TA / Designer / PM | open / resolved |
124
+
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}}
@@ -0,0 +1,186 @@
1
+ # Five-Axis Analysis Framework
2
+
3
+ > **When to read**: PM reads this during Step 4 (Five-Axis Evaluation).
4
+ > Every playable ad request must be classified along all five orthogonal axes before generating options.
5
+
6
+ The five axes are **orthogonal** — each is an independent decision. The same Match-3 game can be Flat 2D or 2.5D, Tap-only or Drag, L0 or L1, Competence Arc or Challenge Arc. PM evaluates all five internally, then presents 2-3 complete options (covering all axes) for the user to choose from.
7
+
8
+ ---
9
+
10
+ ## Axis 1 — Mechanic (Gameplay Fusion Types)
11
+
12
+ | Type | Definition | Tutorial Overhead | Risk |
13
+ |------|-----------|-------------------|------|
14
+ | **Single** | One mechanic, no fusion | Baseline | None |
15
+ | **Type A — Visual Fusion** | Mechanics unchanged; elements re-skinned to another game's visual language | None | Very Low |
16
+ | **Type B1 — Passive Borrowing** | Primary mechanic + secondary mechanic auto-triggers (no extra user gesture) | Minimal | Low |
17
+ | **Type B2 — Active Borrowing** | Primary mechanic + secondary mechanic requires user activation (1.5 core gestures) | Slight increase | Medium |
18
+ | **Type C — Sequential Fusion** | Two mechanic sets appear in sequence (includes rotation/alternating mode) | High | High |
19
+ | **Type D — Parallel Fusion** | Two mechanic sets active simultaneously, sharing the screen | Extreme | Extreme (almost never viable for ads) |
20
+
21
+ ### Pseudo-Fusion Technique
22
+
23
+ When the user insists on Type C/D, recommend pseudo-fusion: **visually appear as two systems, but the underlying mechanic is single**. Example: Match-3 elimination count drives a monster HP bar — the user only performs match-3 the entire time, but perceives "elimination + combat."
24
+
25
+ ### Decision Rules
26
+
27
+ ```
28
+ User prompt contains fusion intent?
29
+ YES → Classify A / B1 / B2 / C / D
30
+ Type C/D → Auto-generate downgrade option (pseudo-fusion B1) as recommended
31
+ NO → Single gameplay → PGS priority check:
32
+ 1. Implemented PGS (Match-3, Triple Match, Path Elimination, Arrow Pick Match) — lowest risk
33
+ 2. Existing Skill (ball_sort, bubble_shooter, etc.) — medium risk
34
+ 3. Needs new development — highest risk
35
+ ```
36
+
37
+ ---
38
+
39
+ ## Axis 2 — Dimension (Gameplay Dimension Spectrum)
40
+
41
+ | Dimension | Description | Designer Impact | Developer Impact | Risk Delta |
42
+ |-----------|------------|----------------|-----------------|------------|
43
+ | **Flat 2D** | Pure 2D sprites, no depth | Standard 2D illustration assets | Standard 2D logic | None |
44
+ | **2.5D Visual** | 3D rendered look, but game logic remains 2D grid (depth is decorative) | 3D-feel rendering / model textures, ~3x cost | Logic stays 2D, add depth rendering | +Medium |
45
+ | **Isometric** | Fixed 45° angle, depth is aesthetic not mechanic | Isometric assets, strict pixel alignment required | Isometric coordinate transforms | +Low |
46
+ | **True 3D** | Z-axis is a live mechanic (rotation/depth participates in interaction) | Full 3D models via AI (`generate-3d`) or white model + texture pipeline; 3–5x cost | 3D engine, physics, camera management; all existing PGS invalidated | +High (tool support available, not BLOCKED) |
47
+
48
+ ### Key Judgment
49
+
50
+ Is the dimension upgrade "purely visual decoration" (2.5D Visual) or "Z-axis participates in mechanics" (True 3D)? The former only affects Designer asset cost; the latter requires entirely new PGS — fundamentally different risk profiles.
51
+
52
+ ### True 3D Tool Support (Available as of 2026-05)
53
+
54
+ True 3D is **High Risk** but no longer blocked. Designer has two asset pipelines:
55
+
56
+ **Pipeline A — AI Generation (best quality, ~1–5 min per model)**
57
+ ```bash
58
+ playcraft tools generate-3d --prompt "low-poly wooden crate" --output assets/models/crate.glb
59
+ playcraft 3d optimize --input crate.glb --output crate_opt.glb
60
+ ```
61
+
62
+ **Pipeline B — White Model + Texture (fastest, predictable UV)**
63
+ ```bash
64
+ playcraft 3d list-models # sphere, cube, cylinder, cone, torus, plane, capsule
65
+ playcraft tools generate-image --prompt "texture" --output tex.png
66
+ playcraft 3d apply-texture --model cube --texture tex.png --output crate.glb
67
+ ```
68
+
69
+ ### Decision Rules
70
+
71
+ ```
72
+ Z-axis is a live mechanic (rotation/depth affects gameplay)?
73
+ → True 3D — tool pipeline available (Pipeline A or B above)
74
+ still recommend generating 2.5D Visual option as fallback
75
+ 3D visual feel but 2D interaction grid?
76
+ → 2.5D Visual (Designer cost ~3x, Developer logic unchanged)
77
+ Fixed isometric perspective?
78
+ → Isometric
79
+ Otherwise → Flat 2D (default, zero additional risk)
80
+ ```
81
+
82
+ ---
83
+
84
+ ## Axis 3 — Interaction Modality
85
+
86
+ | Modality | Description | Tutorial Time | Audience Width | Risk Delta |
87
+ |----------|------------|--------------|---------------|------------|
88
+ | **Tap Only** | Single-finger single-tap | ≤1s | Broadest (includes elderly, children) | None |
89
+ | **Tap + Swipe** | Tap + directional swipe | ~3s | Broad | +Low |
90
+ | **Drag** | Press-hold and drag to target | ~5s | Medium | +Low |
91
+ | **Tap + Hold** | Tap + long-press with timing | ~5s | Medium | +Medium |
92
+ | **Multi-touch** | Two or more fingers simultaneously | ≥10s | Very narrow | +Extreme (almost never viable for ads) |
93
+
94
+ ### Key Insight
95
+
96
+ The **same mechanic** can have different interaction implementations. Arrow gameplay can be "tap a cell" (Tap Only) or "drag to draw a path" (Drag) — Tutorial time differs by 5x, audience width differs dramatically.
97
+
98
+ ### Decision Rules
99
+
100
+ ```
101
+ What gesture does the mechanic naturally map to?
102
+ → Select the most natural modality
103
+ Does a simpler modality (Tap Only) serve the mechanic adequately?
104
+ → If yes, prefer simpler — wider audience, shorter tutorial
105
+ Multi-touch required?
106
+ → Flag as high risk for 30s ad; recommend single-touch alternative
107
+ Note tutorial time budget: Tap=1s / Tap+Swipe=3s / Drag=5s / Tap+Hold=5s
108
+ ```
109
+
110
+ ---
111
+
112
+ ## Axis 4 — Narrative Level
113
+
114
+ | Level | Definition | Designer Impact | Tutorial Method | 30s Fitness |
115
+ |-------|-----------|----------------|----------------|------------|
116
+ | **L0 Pure Mechanic** | No character, no story, pure gameplay showcase | No character assets | Highlight hints + text | High (concise) |
117
+ | **L1 Character Present** | Protagonist exists but no plot ("help the kitten match!") | 1 character sprite set needed | Character performs demo action | **Highest (recommended)** |
118
+ | **L2 Scenario Wrapper** | Character + problem scenario ("princess trapped, clear obstacles") | Protagonist + scenario narrative assets | Character dialogue + demo | Medium (must be tight) |
119
+ | **L3 Story-Driven** | Narrative is core, mechanics serve the story | Heavy story assets + storyboards | Cinematic storytelling | Low (almost never fits 30s) |
120
+
121
+ ### Key Insights
122
+
123
+ - **L1 is the sweet spot for playable ads** — emotional connection without time overhead.
124
+ - L1+ means Designer needs character assets; PM must define character concept.
125
+ - L3 is **incompatible with 30s format** — auto-downgrade to L2 with explanation.
126
+
127
+ ### Decision Rules
128
+
129
+ ```
130
+ User mentions character / hero / story? → L1 or L2
131
+ Game genre typically story-heavy (RPG, adventure)? → L2 recommended
132
+ No character signal, generic product? → L0 or L1
133
+ Default for playable ads: L1
134
+ L2+: flag that Designer needs character asset set
135
+ L3: auto-downgrade to L2 — incompatible with 30s format
136
+ ```
137
+
138
+ ---
139
+
140
+ ## Axis 5 — Emotional Arc
141
+
142
+ | Arc Type | Player Journey | Hook Design | Gameplay Feel | EndCard Tone |
143
+ |----------|---------------|-------------|--------------|-------------|
144
+ | **Competence** | Confused → Learned → "I'm smart!" | Show "looks hard but has a pattern" | Generous, guarantee success | "Easy and fun, keep playing" |
145
+ | **Challenge** | Looks hard → All-out effort → Achievement | Create difficult scenario | Difficulty ramp, allow failure | "Think you can beat it?" |
146
+ | **Curiosity** | What is this? → Aha! → Surprise | Show counter-intuitive mechanic | Full of surprises | "More to explore" |
147
+ | **Relaxation** | Enter flow → Enjoy rhythm → Satisfaction | Serene, beautiful imagery | Steady pace, low pressure | "Come relax anytime" |
148
+ | **Urgency** | Crisis → Frantic action → Narrow escape | Emergency scene, countdown | High pressure, fast pace | "One more round!" |
149
+
150
+ ### Key Principle
151
+
152
+ The Emotional Arc is the **unified throughline** across Hook → Tutorial → Gameplay → EndCard. If the Hook creates curiosity but Gameplay delivers relaxation, the experience fractures. The arc must be locked at the PM stage; all downstream Agents execute along this arc.
153
+
154
+ ### Decision Rules
155
+
156
+ ```
157
+ Map user motivation type (JTBD) to arc:
158
+ Stress Relief → Relaxation or Competence Arc
159
+ Challenge/Mastery → Challenge Arc
160
+ Collection/Growth → Competence Arc
161
+ Creativity/Expression or Immersion/Escape → Curiosity Arc
162
+ Time pressure / urgency game → Urgency Arc
163
+ Select ONE arc. Lock it as the throughline for all 4 stages.
164
+ ```
165
+
166
+ ---
167
+
168
+ ## Option Generation (After All Five Axes)
169
+
170
+ After completing all five internal classifications, generate 2-3 complete options:
171
+
172
+ ```
173
+ Each option includes:
174
+ - Mechanic Axis (type + PGS coverage)
175
+ - Dimension Axis (type + Designer impact)
176
+ - Interaction Modality (modality + tutorial time estimate)
177
+ - Narrative Level (level + asset impact)
178
+ - Emotional Arc (arc type + Hook/EndCard tone)
179
+ - Overall Risk Rating (Low / Medium / High / Extreme)
180
+
181
+ Option A (recommended) = lowest-risk viable option, listed first
182
+ Option B = stronger visual/experience but with extra cost
183
+ Option C = user's original request (if extreme risk, mark with warning)
184
+
185
+ User only needs to answer "choose A/B/C" or "agree with recommendation"
186
+ ```
@@ -0,0 +1,58 @@
1
+ # Intent Clarifications
2
+
3
+ > **Living Document**: Agent 间异步澄清的共享空间。
4
+ > 所有 Agent 可读;提问 Agent 和目标 Agent 可写。
5
+ > 不阻塞流水线 — 提问 Agent 先用合理推断继续,回答到达后评估是否调整。
6
+
7
+ ## Open Questions
8
+
9
+ | # | From | To | Atom/Topic | Question | Raised At | Status |
10
+ | ----- | -------------- | ---------------- | -------------------- | --------------------- | -------------- | ------ |
11
+ | {{n}} | {{agent_name}} | {{target_agent}} | {{atom_id_or_topic}} | {{specific_question}} | {{stage_name}} | open |
12
+
13
+ <!--
14
+ Status values:
15
+ open — 等待目标 Agent 回答
16
+ pending — 目标 Agent 已看到,正在处理
17
+ answered — 目标 Agent 已回答,提问 Agent 尚未确认
18
+ resolved — 双方达成一致,已移入 Resolved 表
19
+
20
+ Rules:
21
+ - 提问必须具体,不能是"风格不对"这种模糊描述
22
+ - 必须引用具体文件路径或 atomId,方便目标 Agent 定位
23
+ - Confidence = low 的风格解读问题必须写入此表
24
+ - Developer 发现故事板与 layout-spec 坐标不一致时,必须向 PM 提问
25
+ -->
26
+
27
+ ## Resolved
28
+
29
+ | # | From | To | Question Summary | Answer | Resolution | Closed By |
30
+ | ----- | -------------- | ---------------- | -------------------- | --------------- | ----------------------- | -------------- |
31
+ | {{n}} | {{agent_name}} | {{target_agent}} | {{one_line_summary}} | {{answer_text}} | {{how_it_was_resolved}} | {{agent_name}} |
32
+
33
+ <!--
34
+ Resolution examples:
35
+ - "已补充到 designer-log.md Style Intent Notes"
36
+ - "已更新 layout-spec.md zones 坐标"
37
+ - "PM 裁决:以故事板为准,layout-spec 将修正"
38
+ - "双方同意保持现状,偏差在可接受范围"
39
+ -->
40
+
41
+ ## Metrics
42
+
43
+ | Metric | Value |
44
+ | ---------------------- | --------- |
45
+ | Total questions raised | {{count}} |
46
+ | Unresolved | {{count}} |
47
+ | By Designer | {{count}} |
48
+ | By TA | {{count}} |
49
+ | By Developer | {{count}} |
50
+ | By PM | {{count}} |
51
+ | By Reviewer | {{count}} |
52
+
53
+ <!--
54
+ PM monitors this table:
55
+ - If single Agent receives >3 questions → intent transmission fault, record in DAG Revisions
56
+ - If unresolved >3 at any time → PM must intervene and assign priority
57
+ - If Reviewer finds unresolved questions at review stage → deduct Intent Transmission score
58
+ -->
@@ -0,0 +1,146 @@
1
+ # Layout Spec
2
+
3
+ <!--
4
+ PM owns paths + specs (Gate #1 lock). CONTRACT only — zones, palette ids, assetMapping, atlas table, WxH/format.
5
+ Do NOT add: storyboard prose, Style Intent Notes, TA logs (→ designer-log / ta-log).
6
+ -->
7
+
8
+ > Shared contract between Designer, TA, and Developer. All MUST follow this document.
9
+
10
+ ## Screen
11
+
12
+ - Orientation: {{portrait/landscape}}
13
+ - Resolution: {{width}} x {{height}}
14
+ - Safe area: top {{top_safe}}px, bottom {{bottom_safe}}px
15
+
16
+ ## Zones
17
+
18
+ | id | role | rect (x, y, w, h) | owner |
19
+ | ----------- | ------------- | -------------------------- | --------------------------- |
20
+ | {{zone_id}} | {{zone_role}} | {{x}}, {{y}}, {{w}}, {{h}} | {{Designer/Developer/both}} |
21
+
22
+ <!--
23
+ Add one row per zone. Common zones:
24
+ - header: HUD (score/progress), usually at top
25
+ - board: Main game area (grid/play field)
26
+ - footer: Extended background area
27
+ - endcard: CTA region, usually at bottom
28
+
29
+ ASCII diagram (update to match your zones):
30
+ ┌─────────────────────────┐ y=0
31
+ │ {{zone_1}} │ {{h1}}px
32
+ ├─────────────────────────┤
33
+ │ {{zone_2}} │ {{h2}}px
34
+ ├─────────────────────────┤
35
+ │ {{zone_3}} │ {{h3}}px
36
+ └─────────────────────────┘
37
+ -->
38
+
39
+ ## Color Palette
40
+
41
+ ### Element Colors
42
+
43
+ | id | hex | label |
44
+ | -------------- | ------------- | ---------------- |
45
+ | {{element_id}} | {{hex_color}} | {{display_name}} |
46
+
47
+ <!--
48
+ - Element IDs are used by Developer in PGS config
49
+ - Hex colors guide Designer's generation prompts
50
+ - Labels are human-readable names for the elements
51
+ - Typically 4-6 elements for a playable ad
52
+ -->
53
+
54
+ ### Other Colors
55
+
56
+ - Background: primary `{{bg_primary_hex}}`, secondary `{{bg_secondary_hex}}`
57
+ - UI: text `{{ui_text_hex}}`, accent `{{ui_accent_hex}}`
58
+
59
+ ## Asset Spec
60
+
61
+ | Type | Dimensions | Format |
62
+ | --------------- | --------------------- | ------ |
63
+ | tileSize | {{tile_w}}x{{tile_h}} | webp |
64
+ | backgroundSize | {{bg_w}}x{{bg_h}} | webp |
65
+ | iconSize | {{icon_w}}x{{icon_h}} | webp |
66
+ | audio (BGM/SFX) | — | mp3 |
67
+
68
+ <!--
69
+ Default runtime formats: images WebP, audio MP3. TA delivers atlas groups as .webp + .json sidecar.
70
+ -->
71
+
72
+ ## Atlas grouping (Gate #1 — PM defines)
73
+
74
+ | groupId | elementIds | atlasPath | sidecarPath |
75
+ | ------- | ---------------- | ------------------------------------ | ------------------------------------ |
76
+ | tiles | {{id1}}, {{id2}} | assets/images/tiles/tiles_atlas.webp | assets/images/tiles/tiles_atlas.json |
77
+ | ui | {{id3}}, {{id4}} | assets/images/ui/ui_atlas.webp | assets/images/ui/ui_atlas.json |
78
+
79
+ <!--
80
+ Rules: ≥2 elements in same logical class (tiles / ui / vfx) → ONE webp+json atlas.
81
+ Single large assets (full-screen bg) → one webp path only. Digit strip → separate webp (see Text Assets).
82
+ Each elementId in assetMapping uses atlasPath + frameId OR single visualAsset path.
83
+ -->
84
+
85
+ ## Asset Mapping
86
+
87
+ | elementId | visualAsset / atlas | frameId | sfx |
88
+ | -------------- | ------------------------------------- | ------- | ------------------------------------- |
89
+ | {{element_id}} | assets/images/tiles/tiles_atlas.webp | tile_01 | {{sfx_path_or_dash}} |
90
+ | — | assets/images/bg/{{bg_filename}}.webp | — | — |
91
+ | — | assets/images/ui/{{ui_element}}.webp | — | — |
92
+ | — | assets/images/txt/{{text}}.webp | — | — |
93
+ | — | assets/images/vfx/{{vfx}}.webp | — | — |
94
+ | — | — | — | assets/audio/sfx/{{sfx_filename}}.mp3 |
95
+ | — | — | — | assets/audio/bgm/{{bgm_filename}}.mp3 |
96
+
97
+ <!--
98
+ CRITICAL: This mapping is the integration contract!
99
+ - Designer saves files at EXACTLY these paths
100
+ - Developer references EXACTLY these paths in code
101
+ - Path mismatch = integration failure
102
+ - Use "—" for cells that don't apply
103
+
104
+ Transparency convention (TA auto-derives from path — PM does NOT define):
105
+ assets/images/bg/ → opaque, full-screen background (TA verifies edge-to-edge)
106
+ assets/images/ui/ → needs alpha (TA applies chroma key + remove-background)
107
+ assets/images/txt/ → needs alpha (TA applies chroma key + remove-background)
108
+ assets/images/vfx/ → needs alpha (TA applies chroma key + remove-background)
109
+ assets/images/tiles/ → needs alpha by default (except card faces / board pieces)
110
+ assets/audio/ → N/A (not image)
111
+
112
+ TA determines chroma key color (green/blue/magenta) based on element color palette
113
+ and color conflict rules — see ta-pipeline-cookbook.md Step 0e.
114
+ -->
115
+
116
+ ## Text Assets
117
+
118
+ All visible text is rendered as image assets — no font files in the final build.
119
+
120
+ ### Static Text (baked into Master Composite concept panel)
121
+
122
+ | id | text content | asset path | notes |
123
+ | ----------- | --------------- | --------------------------------------- | ------------------------ |
124
+ | {{text_id}} | {{text_string}} | assets/images/ui/{{text_filename}}.webp | TA extracts from concept |
125
+
126
+ <!--
127
+ Common static text: game title, CTA button label, tutorial instructions, "YOU WIN", stage labels.
128
+ Designer includes all static text in the Master Composite concept panel.
129
+ TA extracts each text element using segment and saves to the specified path.
130
+ -->
131
+
132
+ ### Digit Sprite Strip (for dynamic numbers)
133
+
134
+ - **Characters**: `{{digit_characters}}`
135
+ - **Cell size**: {{cell_w}}x{{cell_h}}
136
+ - **Asset path**: `assets/images/ui/digits.webp`
137
+
138
+ <!--
139
+ PM defines the character set based on what dynamic text the game needs.
140
+ Common sets:
141
+ - Score only: "0123456789"
142
+ - Score + timer: "0123456789:."
143
+ - Score + multiplier: "0123456789x+,."
144
+ Designer generates a single horizontal strip image with all characters in order.
145
+ Developer slices by character index at runtime (char_x = index * cell_w).
146
+ -->