@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.
Files changed (69) hide show
  1. package/dist/atom-plan/validate-asr-coverage.js +317 -0
  2. package/dist/commands/prad.js +61 -0
  3. package/dist/commands/remix.js +4 -2
  4. package/dist/commands/skills.js +24 -0
  5. package/dist/commands/tools-generation.js +2 -4
  6. package/dist/commands/tools-utils.js +19 -0
  7. package/dist/prad/atom-ref.js +23 -0
  8. package/dist/prad/check.js +377 -0
  9. package/dist/prad/check.test.js +27 -0
  10. package/dist/prad/explain.js +109 -0
  11. package/dist/prad/load-spec.js +23 -0
  12. package/dist/prad/paths.js +83 -0
  13. package/dist/prad/skills-index.js +60 -0
  14. package/dist/utils/version-checker.js +8 -11
  15. package/package.json +3 -3
  16. package/project-template/.claude/agents/designer.md +34 -26
  17. package/project-template/.claude/agents/developer.md +55 -62
  18. package/project-template/.claude/agents/pm.md +3 -1
  19. package/project-template/.claude/agents/refs/README.md +21 -15
  20. package/project-template/.claude/agents/refs/designer-deliverable-spec.md +70 -7
  21. package/project-template/.claude/agents/refs/designer-handoff-v2-checklist.md +21 -13
  22. package/project-template/.claude/agents/refs/designer-master-composite-recipes.md +20 -28
  23. package/project-template/.claude/agents/refs/designer-style-exploration-flow.md +39 -9
  24. package/project-template/.claude/agents/refs/developer-dev-handoff.md +1 -1
  25. package/project-template/.claude/agents/refs/developer-phase1-flow.md +81 -156
  26. package/project-template/.claude/agents/refs/pm-workflow-detail.md +24 -2
  27. package/project-template/.claude/agents/refs/reviewer-convergence-eval.md +142 -0
  28. package/project-template/.claude/agents/refs/reviewer-six-dimension-eval.md +4 -284
  29. package/project-template/.claude/agents/refs/ta-atlas-deliverable-standard.md +27 -6
  30. package/project-template/.claude/agents/refs/ta-pipeline-cookbook.md +474 -29
  31. package/project-template/.claude/agents/reviewer.md +65 -38
  32. package/project-template/.claude/agents/technical-artist.md +38 -25
  33. package/project-template/.claude/hooks/README.md +40 -4
  34. package/project-template/.claude/hooks/asr-coverage-validate.mjs +381 -0
  35. package/project-template/.claude/hooks/validate-workflow-stop.mjs +196 -5
  36. package/project-template/.claude/settings.json +4 -0
  37. package/project-template/.claude/skills/playcraft-asset-state-sheet/SKILL.md +76 -22
  38. package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +84 -15
  39. package/project-template/.claude/skills/playcraft-storyboard/SKILL.md +26 -7
  40. package/project-template/.claude/skills/playcraft-workflow/SKILL.md +104 -15
  41. package/project-template/.claude/skills/playwright-cli/SKILL.md +390 -0
  42. package/project-template/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
  43. package/project-template/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
  44. package/project-template/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
  45. package/project-template/.claude/skills/playwright-cli/references/running-code.md +240 -0
  46. package/project-template/.claude/skills/playwright-cli/references/session-management.md +226 -0
  47. package/project-template/.claude/skills/playwright-cli/references/spec-driven-testing.md +312 -0
  48. package/project-template/.claude/skills/playwright-cli/references/storage-state.md +275 -0
  49. package/project-template/.claude/skills/playwright-cli/references/test-generation.md +138 -0
  50. package/project-template/.claude/skills/playwright-cli/references/tracing.md +142 -0
  51. package/project-template/.claude/skills/playwright-cli/references/video-recording.md +157 -0
  52. package/project-template/.cursor/rules/playcraft-orchestrator.mdc +74 -24
  53. package/project-template/.cursor/rules/playcraft-subagent-boundary.mdc +1 -1
  54. package/project-template/CLAUDE.md +99 -59
  55. package/project-template/docs/team/agent-conduct.md +42 -26
  56. package/project-template/docs/team/agent-runtime-matrix.md +71 -39
  57. package/project-template/docs/team/atom-plan-format.md +101 -2
  58. package/project-template/docs/team/collaboration.md +57 -48
  59. package/project-template/docs/team/core-model.md +20 -19
  60. package/project-template/docs/team/workflow-changelog.md +28 -14
  61. package/project-template/docs/team/workflow-consistency-checklist.md +64 -0
  62. package/project-template/templates/atom-plan.template.json +18 -0
  63. package/project-template/templates/atom-plan.template.md +35 -3
  64. package/project-template/templates/designer-log.template.md +94 -5
  65. package/project-template/templates/developer-log.template.md +95 -101
  66. package/project-template/templates/layout-spec.template.md +62 -8
  67. package/project-template/templates/project-state.template.md +51 -33
  68. package/project-template/templates/review-report.template.md +76 -151
  69. package/project-template/templates/ta-log.template.md +180 -14
@@ -67,8 +67,107 @@ jq -n \
67
67
  | 角色 | 读 JSON | 读 MD | Skills 路径 |
68
68
  | ------------------------ | ------------------------ | ------------------------ | ------------------------------------------------ |
69
69
  | Orchestrator / Developer | `atoms[]`、`skillsMatch` | `## Impl Skill Context` | `playcraft.config.json` + `.claude/skills/` 软链 |
70
- | TA | `atoms[]` | `## TA Skill Context` | 同上 |
71
- | Designer | `atoms[]` | `## Asset Skill Context` | 同上 |
70
+ | TA | `atoms[]`、`mediaGroups` | `## TA Skill Context` | 同上 |
71
+ | Designer | `atoms[]`、`mediaGroups` | `## Asset Skill Context` | 同上 |
72
72
  | Reviewer | 两者只读 | 两者只读 | — |
73
73
 
74
74
  Developer 软链:`.claude/skills/<skillRef>/`(`playcraft skills link --from-atom-plan`)。断链时用 `playcraft skills read <skillRef>`(自动读 config,勿手抄 node_modules 路径)。
75
+
76
+ ## Status Update Protocol(所有产出 Agent 必须遵守)
77
+
78
+ **atom-plan.json 是活的追踪系统,不是一次性规划文档。** 每个 Agent 完成 atom 后立即更新:
79
+
80
+ ```json
81
+ {
82
+ "atomId": "<id>",
83
+ "status": "done", // or "skipped" with reason in dagRevisions
84
+ "actualOutput": "<path>" // the actual deliverable path on disk
85
+ }
86
+ ```
87
+
88
+ | Agent | 何时更新 | `actualOutput` 格式 |
89
+ | --------- | ------------------------------- | ----------------------------------------------------- |
90
+ | Designer | Phase 2 每完成一个 atom | `"assets/audio/bgm.mp3"` 或 `"ASR:ui_sheet:region_3"` |
91
+ | TA | 每完成一个 atlas/asset | `"assets/images/ui/ui_atlas.webp"` |
92
+ | Developer | 每完成一个 gameplay/config atom | `"game/gameplay/reducer.ts"` |
93
+
94
+ **Context 回填同样强制**:对应 agent 的 `atom-plan.md` § Context 区不得为空(`Pending`)。Orchestrator 在阶段转换前验证。
95
+
96
+ ## `asrSlot` 字段(可选 — VisualAtom 基线绑定)
97
+
98
+ `atoms[].asrSlot` 是 **VisualAtom**(`assignTo: Designer`)专用的可选字段,把"Designer ASR Coverage Matrix 上的网格坐标"机器可读化,TA 据此自动算 crop 像素坐标,省掉人工对照表的步骤。
99
+
100
+ ### Schema
101
+
102
+ ```ts
103
+ type AsrSlot = {
104
+ sheet: "ui" | "element" | "element_2"; // element_2 = overflow ASR board when types > 12
105
+ row: number; // 1-based 行号 (row-major)
106
+ col: number; // 1-based 列号
107
+ };
108
+
109
+ // 字段位置
110
+ atoms[i].asrSlot?: AsrSlot | null
111
+ ```
112
+
113
+ ### 谁写
114
+
115
+ | 谁 | 何时 | 写什么 |
116
+ | ------------ | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
117
+ | **PM** | Gate #1(可选) | 已知会出现在 ASR 的 VisualAtom 预填一个建议 slot(Designer 可改);不确定时留空 |
118
+ | **Designer** | Phase 1 完成 ASR 后(必填,所有 ASR-覆盖的 atom) | 与 `designer-log.md § ASR Coverage Matrix § Coverage` 一致;同时 `status: done` + `actualOutput: ASR:<sheet>:R{row}C{col}` |
119
+ | **TA** | 只读 | 用 `asrSlot.sheet/row/col` + `designer-log` § Sheet grid metadata → 算 `playcraft image crop` 像素 |
120
+
121
+ ### TA crop 自动化(参考公式)
122
+
123
+ `designer-log.md § ASR Coverage Matrix § Sheet grid metadata` 给出每张 sheet 的 `cellW × cellH × padding`。
124
+
125
+ ```
126
+ sheetPath = sheet === "ui"
127
+ ? "assets/images/reference/ui_state_sheet_<selectedMcOption>.png"
128
+ : sheet === "element_2"
129
+ ? "assets/images/reference/element_state_sheet_<selectedMcOption>_2.png"
130
+ : "assets/images/reference/element_state_sheet_<selectedMcOption>.png"
131
+
132
+ x = (col - 1) * (cellW + padding) + padding
133
+ y = (row - 1) * (cellH + padding) + padding
134
+ width = cellW
135
+ height = cellH
136
+
137
+ playcraft image crop <sheetPath> --x <x> --y <y> --width <width> --height <height> --output <assetMapping_path>
138
+ ```
139
+
140
+ ### 与 `actualOutput` 的关系
141
+
142
+ `asrSlot` 是**绑定信息**(这个 atom 对应 ASR 哪个格子),`actualOutput` 是**完成证明**(已交付到哪里)。
143
+ 两者并存而非互斥:
144
+
145
+ ```json
146
+ {
147
+ "atomId": "vatom_tile_default",
148
+ "type": "VisualAtom",
149
+ "assignTo": "Designer",
150
+ "asrSlot": { "sheet": "element", "row": 1, "col": 2 },
151
+ "status": "done",
152
+ "actualOutput": "ASR:element_state_sheet_B:R1C2"
153
+ }
154
+ ```
155
+
156
+ TA 之后用 `asrSlot` 提取出 PNG 到 `assets/images/tiles/tile_default.webp`;这一步发生时 TA atom(不同的 atomId)有自己的 `actualOutput`,**不修改** Designer atom 的 `actualOutput`。
157
+
158
+ ### 禁止
159
+
160
+ - 跨 ASR-mediaGroups 混用:`asrSlot` 只描述"本项目 Designer 产出的 ASR",**不**复用 `skillsMatch.mediaGroups`(那是技能库预制资产,不在项目 ASR 上)。
161
+ - ICP 补丁 PNG 的 VisualAtom 不设 `asrSlot`(已脱离 ASR 网格)。`actualOutput` 直接给文件路径。
162
+ - TA atom 不写 `asrSlot`(这是 Designer-owned 字段,TA 通过 `dependsOn` 引用 Designer atom)。
163
+
164
+ ## mediaGroups 使用规则
165
+
166
+ `skillsMatch.mediaGroups` 包含 `playcraft skills match` 自动发现的可复用预制资产(图片/音频/3D)。
167
+
168
+ **协议**:
169
+
170
+ 1. **Designer / TA 必须读** `mediaGroups` 并对每个 entry 判断是否匹配当前 atom
171
+ 2. **匹配 → 直接 link**:`playcraft skills link --atom <atomId>` → 后处理(resize/convert/mix)→ `status: done`
172
+ 3. **不匹配 → 跳过并记录**:在 `dagRevisions` 记录 skip 原因
173
+ 4. **禁止**:mediaGroups 中有匹配项却无视、从零生成
@@ -12,13 +12,20 @@ Canonical terms used across `CLAUDE.md`, agent L1 files, and `refs/`. Prefer the
12
12
  | **Designer Phase 1 / Phase 2** | — | Ph.1 = MC + ASR + Handoff Pack; Ph.2 = audio + digit + VisualAtom status (v2) |
13
13
  | **ASR Coverage Matrix** | — | `designer-log` table: every contract id → ASR slot; Gate #2b mandatory |
14
14
  | **Palette Locked** | — | MC-sampled hex in `designer-log`; delta vs `layout-spec` |
15
- | **production-serial-v1** | workflow spec version (current) | See `workflow-changelog.md`; serial production waves + `integration` Developer |
16
- | **designer-handoff-v2** | visual handoff spec | MC + ASR + Handoff Pack; bundled in `production-serial-v1` changelog |
17
- | **Production Pipeline** | serial waves in `project-state` | Wave 1 Designer Ph.2 Wave 2 TA; Developer only in `integration` |
18
- | **Developer integration** | | Single `integration` stage: Skill Preflight + PGS + asset bind + Dev self-check (replaces parallel Ph.1 in `production`) |
15
+ | **production-serial-v1** | workflow spec version (superseded) | See `workflow-changelog.md`; serial production waves within `production` stage |
16
+ | **convergence-v1** | workflow spec version (current) | Three convergence loops: design_check ui_diff load_check + Gate #3 user |
17
+ | **design_check** | Reviewer mode | Soft checklist before Gate #1 / #2b completeness only, not subjective quality |
18
+ | **ui_diff** | Reviewer mode | Browser screenshots vs MC panels; routes ui_rework (max 5 rounds) |
19
+ | **load_check** | Reviewer mode | Page loads + no console errors before Gate #3; no gameplay walkthrough |
20
+ | **ui_ready** | devStatus value | UI shell complete; gameplay rules not yet implemented |
21
+ | **designer-handoff-v2** | visual handoff spec | MC + ASR + Handoff Pack; bundled in convergence-v1 |
22
+ | **Production Pipeline** | serial waves in `project-state` | Wave 1 Designer Ph.2 → Wave 2 TA; Developer in `ui_pass` |
23
+ | **Developer ui_pass** | — | UI shell + scene switch + simple states; no core gameplay rules |
24
+ | **Developer gameplay_pass** | — | Core gameplay on verified UI; PGS + first level success |
19
25
  | **Four-doc discipline** | 四件套写作纪律 | PM/Designer: contracts only in four docs; narrative in style-exploration + designer-log; TA/Dev intake: agent-conduct + log templates |
20
26
  | **TA Step 0 / 1 / 2** | (not "Phase") | **TA cookbook only**: Step 0 = Skill Discovery; Step 1 = Asset Completion; Step 2 = Technical Pipeline — TA runs all three in one `production` invoke |
21
- | **reworkRound** | `handoff.rework_round` | Counts **review failures** (0 → 1 → 2). At `2`, next fail forced Gate #3 (3rd failure) |
27
+ | **reworkRound** | `handoff.rework_round` (legacy) | Superseded by **`uiReworkRound`** for UI convergence (0–5) |
28
+ | **uiReworkRound** | `handoff.ui_rework_round` | Counts **ui_diff failures** (0 → 5 max); at 5 → orchestrator decision |
22
29
  | **ICP** | Intent Clarification Protocol | Async agent Q&A in `docs/intent-clarifications.md`; orchestrator does not interrupt user |
23
30
  | **MC** | Master Composite | Five 9:16 panels in one image: concept panel + Hook / Onboarding / End Card / CTA storyboards |
24
31
  | **ASR** | Asset State Reference Sheet | 资产状态参考精灵图板:UI 组件状态板 + 元素状态板;Gate #2a 后产出;供 TA crop 量产(非 runtime atlas) |
@@ -37,12 +44,12 @@ When instructions conflict: **Goals § Core responsibilities** wins over workflo
37
44
 
38
45
  Only the **Orchestrator** (main session) may use `AskUserQuestion` toward the user. Sub-agents prepare materials, update `project-state`, then **STOP**.
39
46
 
40
- | Gate | Sub-agent deliverable | STOP signal (`project-state`) | Orchestrator action |
41
- | ------- | ---------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------- |
42
- | **#1** | PM: four design docs ready for review | `gates.#1 = pending` | `AskUserQuestion` → on pass: `gates.#1 = passed`, `stage: style_exploration`, invoke `@designer` |
43
- | **#2a** | Designer: MC options A/B[/C] + partial `style-exploration.md` | `gates.#2a = pending` | `AskUserQuestion` pick option → set `selectedMcOption` → resume `@designer` |
44
- | **#2b** | Designer: ASR 双板 + complete `style-exploration` + designer-log | `gates.#2b = pending` | `AskUserQuestion` confirm MC+ASR → `gates.#2b = passed`, `stage: production`, invoke `@designer` Ph.2 only |
45
- | **#3** | Reviewer pass + `devStatus: ready` | `gates.#3 = pending` | Show **devUrl** → user accept → `stage: done` |
47
+ | Gate | Sub-agent deliverable | STOP signal (`project-state`) | Orchestrator action |
48
+ | ------- | ---------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
49
+ | **#1** | PM: four design docs ready for review | `gates.#1 = pending` | Invoke `@reviewer design_check` → pass → `AskUserQuestion` → on pass: `gates.#1 = passed`, `stage: style_exploration`, invoke `@designer` |
50
+ | **#2a** | Designer: MC options A/B[/C] + partial `style-exploration.md` | `gates.#2a = pending` | `AskUserQuestion` pick option → set `selectedMcOption` → resume `@designer` (no Reviewer pre-check) |
51
+ | **#2b** | Designer: ASR 双板 + complete `style-exploration` + designer-log | `gates.#2b = pending` | Invoke `@reviewer design_check` → pass → `AskUserQuestion` confirm MC+ASR → `gates.#2b = passed`, `stage: production`, invoke `@designer` Ph.2 only |
52
+ | **#3** | Reviewer `load_check` pass + `devStatus: ready` | `gates.#3 = pending` | Show **devUrl** → user accept → `stage: done` (gameplay judged by user) |
46
53
 
47
54
  Sub-agent pattern: **write artifacts → update `## Agent handoff` + gates → STOP (no user questions).**
48
55
 
@@ -50,16 +57,16 @@ Sub-agent pattern: **write artifacts → update `## Agent handoff` + gates → S
50
57
 
51
58
  Machine-readable runtime block in `docs/project-state.md` (YAML fence under `## Agent handoff`). Sub-agents and orchestrator use it as the **single source** for STOP / resume / next step.
52
59
 
53
- | Field | Writer | Meaning |
54
- | -------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------ |
55
- | `subagent` | Sub-agent on STOP | Role that just finished (`pm`, `designer`, `technical-artist`, `developer`, `reviewer`, `none`) |
56
- | `subagent_stop` | Sub-agent on STOP | `true` = do not continue work until orchestrator acts |
57
- | `waiting_for` | Both | `user_gate` = orchestrator must run Gate; `orchestrator` = wait for invoke; `none` = active work |
58
- | `gate_pending` | Sub-agent when gate pending | `"1"` \| `"2a"` \| `"2b"` \| `"3"` \| `null` — sync with Gates table |
59
- | `next_orchestrator_action` | Sub-agent on STOP (**required**) | One sentence: the **only** legal next step for orchestrator |
60
- | `last_completed_by` | Sub-agent on STOP | Same as `subagent` or action label |
61
- | `rework_round` | Reviewer on fail / orchestrator | Keep in sync with `reworkRound` in Gate resume fields |
62
- | `block_reason` | Optional | Why pipeline cannot advance |
60
+ | Field | Writer | Meaning |
61
+ | -------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------ |
62
+ | `subagent` | Sub-agent on STOP | Role that just finished (`pm`, `designer`, `technical-artist`, `developer`, `reviewer`, `none`) |
63
+ | `subagent_stop` | Sub-agent on STOP | `true` = do not continue work until orchestrator acts |
64
+ | `waiting_for` | Both | `user_gate` = orchestrator must run Gate; `orchestrator` = wait for invoke; `none` = active work |
65
+ | `gate_pending` | Sub-agent when gate pending | `"1"` \| `"2a"` \| `"2b"` \| `"3"` \| `null` — sync with Gates table |
66
+ | `next_orchestrator_action` | Sub-agent on STOP (**required**) | One sentence: the **only** legal next step for orchestrator |
67
+ | `last_completed_by` | Sub-agent on STOP | Same as `subagent` or action label |
68
+ | `rework_round` | Reviewer on ui_diff fail / orchestrator | Keep in sync with `uiReworkRound` in Gate resume fields (legacy alias) |
69
+ | `block_reason` | Optional | Why pipeline cannot advance |
63
70
 
64
71
  **Orchestrator loop:** read handoff → if `gate_pending` + `user_gate` → Gate only → else if `subagent_stop` → execute `next_orchestrator_action` → reset handoff before invoke.
65
72
 
@@ -73,6 +80,7 @@ On every sub-agent STOP, update **in order** (see [agent-conduct.md § Invoke pr
73
80
  2. **`## Agent handoff`** — all fields; `subagent_stop: true`; `next_orchestrator_action` required.
74
81
  3. **Progress Checkpoint** — one row (stage, agent, action, outcome).
75
82
  4. **Production Pipeline** — when `stage: production`, set this role's wave row to `done` + notes when wave complete.
83
+ 5. **Plan convergence (TA / Developer only)** — before STOP, ensure `logs/ta-log.md` § **Production Plan** or `logs/developer-log.md` § **UI Pass Plan** / **Gameplay Pass Plan** is complete (Risk Checklist all `[x]`, no `{{placeholders}}`). Hook `validate-workflow-stop.mjs` enforces on subagent stop.
76
84
 
77
85
  Example (update only your row when track complete):
78
86
 
@@ -85,24 +93,25 @@ Checkpoint is a **human log** for context — **not** the routing source (handof
85
93
 
86
94
  ## Stage field ownership
87
95
 
88
- | Field / transition | Writer |
89
- | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
90
- | `gates.#N = pending` | Sub-agent before STOP |
91
- | `gates.#N = passed` | **Orchestrator** after user confirms Gate |
92
- | Mainline `stage` (`pm` → `style_exploration` → `production` → `integration` → `review` → `rework` → `done`) | **Orchestrator only** |
93
- | `selectedMcOption` | Orchestrator after Gate #2a |
94
- | `devStatus`, `devUrl`, `devBlockers` | Developer |
95
- | `reviewerDevCheck`, `reviewerDevNotes` | Reviewer |
96
- | `reworkRound` | Reviewer on fail (+1); orchestrator may read for Gate #3 forced path |
96
+ | Field / transition | Writer |
97
+ | ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
98
+ | `gates.#N = pending` | Sub-agent before STOP |
99
+ | `gates.#N = passed` | **Orchestrator** after user confirms Gate |
100
+ | Mainline `stage` (`pm` → `style_exploration` → `production` → `ui_pass` → `ui_review` → `ui_rework` → `gameplay_pass` → `done`) | **Orchestrator only** |
101
+ | `selectedMcOption` | Orchestrator after Gate #2a |
102
+ | `devStatus`, `devUrl`, `devBlockers` | Developer |
103
+ | `uiReviewStatus`, `uiReworkRound`, `loadCheck` | Reviewer |
97
104
 
98
105
  Sub-agents **MUST NOT** set mainline `stage`. They request orchestrator via `next_orchestrator_action` (e.g. `Invoke @reviewer`).
99
106
 
100
- ## Rework sequence (orchestrator-owned)
107
+ ## UI rework sequence (orchestrator-owned)
101
108
 
102
- 1. **Reviewer** — Dev walkthrough + six dimensions → fail: `review-report.md`, `reworkRound` +1, handoff `next_orchestrator_action: "Set stage=rework, invoke routed agents per review-report"` → STOP (**no** `stage: rework` in reviewer write).
103
- 2. **Orchestrator** — Set `stage: rework`, clear `subagent_stop`, invoke `@developer` / `@technical-artist` / `@designer` per Action Items (parallel when independent).
104
- 3. **Developer** (and others) — Fix scoped items → `devStatus: ready` → handoff `Invoke @reviewer` → STOP.
105
- 4. **Orchestrator** — Invoke `@reviewer` again; on pass → Gate #3.
109
+ 1. **Reviewer** (`ui_diff`) screenshots vs MC panels → fail: UI Diff Report in `review-report.md`, `uiReworkRound` +1, handoff `next_orchestrator_action: "Set stage=ui_rework, invoke routed agents per review-report"` → STOP (**no** `stage: ui_rework` in reviewer write).
110
+ 2. **Orchestrator** — Set `stage: ui_rework`, invoke `@developer` / `@technical-artist` / `@designer` per Action Items (`routeTo`).
111
+ 3. **Developer** (primary) — Fix UI issues → `devStatus: ui_ready` → handoff `Invoke @reviewer ui_diff` → STOP.
112
+ 4. **Orchestrator** — Invoke `@reviewer ui_diff` again; on pass (or `uiReworkRound == 5`) `stage: gameplay_pass`.
113
+
114
+ Max **5** UI rework rounds. Gameplay has no AI rework loop — only `load_check` before Gate #3.
106
115
 
107
116
  ## Master Composite — five panels
108
117
 
@@ -116,19 +125,19 @@ Sub-agents **MUST NOT** set mainline `stage`. They request orchestrator via `nex
116
125
  | Phase | User | Agents |
117
126
  | -------------------- | --------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
118
127
  | **A — Choose** | **Orchestrator only** — `AskUserQuestion` for Gate #1, #2a, #2b | Sub-agents STOP when gate materials ready; no mass production until Gate #2b passed |
119
- | **B — Produce** | Not interrupted for terminal commands | Serial: Designer Ph.2 → TA → Developer (`integration`) |
120
- | **C — Dev delivery** | **Gate #3 only**: open **devUrl** from orchestrator | Developer owns Dev quality → Reviewer Dev walkthrough → user accepts |
128
+ | **B — Produce** | Not interrupted for terminal commands | Serial: Designer Ph.2 → TA → Developer (`ui_pass` → `gameplay_pass`) |
129
+ | **C — Dev delivery** | **Gate #3 only**: open **devUrl** from orchestrator | Developer UI+gameplay → Reviewer `load_check` → user accepts gameplay in browser |
121
130
 
122
131
  **User never runs `npm run dev`.** Delivery endpoint = Dev URL acceptance (`done`), not `playcraft build`.
123
132
 
124
133
  ## Agent responsibility matrix (priority order)
125
134
 
126
- | # | PM | Designer | Technical Artist | Developer | Reviewer |
127
- | -------- | --------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------ |
128
- | **1** | Define experience + gameplay (`design-brief`, flow) | Lock visual + narrative — **MC = UI spec for Developer** | Style-faithful mass production from MC/ASR | **Restore UI** (`layout-spec` + MC storyboard) | Audit intent vs design docs |
129
- | **2** | Zero-ambiguity contracts (`layout-spec`, `atom-plan`) | Handoff Pack: ASR Coverage Matrix, Palette Locked, Motion Notes | 100% `assetMapping` at spec | **Restore PM gameplay** (PGS, first level success) | Audit player experience (UI + gameplay fidelity) |
130
- | **3** | Gates + ICP; **spec-gap** vs **asset rework** arbitration | Audio + digit strip; **respond to Developer visual/audio rework** | Production-grade assets; **respond to Developer TA rework** | **Dev preview owner** (`npm run dev`, devUrl, upstream blockers) | **Dev walkthrough** UI + gameplay, then verdict |
131
- | **Last** | — | — | — | `playcraft build` = **future**, not `done` | — |
135
+ | # | PM | Designer | Technical Artist | Developer | Reviewer |
136
+ | -------- | --------------------------------------------------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------ |
137
+ | **1** | Define experience + gameplay (`design-brief`, flow) | Lock visual + narrative — **MC = UI spec for Developer** | Style-faithful mass production from MC/ASR | **UI shell** (`ui_pass`: layout + scene switch) | `design_check` before Gates; `ui_diff` vs MC |
138
+ | **2** | Zero-ambiguity contracts (`layout-spec`, `atom-plan`) | Handoff Pack: ASR Coverage Matrix, Palette Locked, Motion Notes | 100% `assetMapping` at spec (path check only) | **Gameplay** (`gameplay_pass`: PGS, first level success) | `load_check` before Gate #3 |
139
+ | **3** | Gates + ICP; **spec-gap** vs **asset rework** arbitration | Audio + digit strip; **respond to Developer visual/audio rework** | Production-grade assets; **respond on `routeTo: ta` in ui_diff** | **Dev preview owner** (`npm run dev`, devUrl, upstream blockers) | Route UI issues in ui_diff; no gameplay AI audit |
140
+ | **Last** | — | — | — | `playcraft build` = **future**, not `done` | — |
132
141
 
133
142
  Full detail: `.claude/agents/<role>.md` § Goals.
134
143
 
@@ -245,7 +254,7 @@ Full detail: `.claude/agents/<role>.md` § Goals.
245
254
  - **Exceptions**: full-screen bg (single webp), digit strip (single webp), MC/ASR reference (non-runtime)
246
255
  - **Designer** delivers MP3 audio + digit strip webp at contracted paths
247
256
  - **TA** delivers runtime atlases + post-processed MP3 per [ta-atlas-deliverable-standard.md](../../.claude/agents/refs/ta-atlas-deliverable-standard.md)
248
- - **Developer** (`integration`) binds `loadImage`/atlas+frame at contract paths with **real files** on disk, then integrates in Dev
257
+ - **Developer** (`ui_pass` / `gameplay_pass`) binds `loadImage`/atlas+frame at contract paths with **real files** on disk, then integrates in Dev
249
258
  - **Path / frame mismatch = integration failure** — TA Compliance + Reviewer check
250
259
  - **No unilateral path changes** — PM + user-approved contract change only
251
260
 
@@ -265,10 +274,10 @@ Enforceable rules: [agent-conduct.md](agent-conduct.md) (§ PM / Designer / TA /
265
274
 
266
275
  Within 30 seconds of each wave start, the active agent validates Layout Spec:
267
276
 
268
- | Checker | When | Checks | On Gap |
269
- | --------- | -------------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------- |
270
- | TA | Production Pipeline Wave 2 (TA entry) | Every assetMapping entry has clear size/format specs | Write `spec-gap` to project-state.md, PM supplements within 5 min |
271
- | Developer | `integration` start (after TA Wave 2 `done`) | Every GameplayAtom reference exists in assetMapping | Same |
277
+ | Checker | When | Checks | On Gap |
278
+ | --------- | ---------------------------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------- |
279
+ | TA | Production Pipeline Wave 2 (TA entry) | Every assetMapping entry has clear size/format specs | Write `spec-gap` to project-state.md, PM supplements within 5 min |
280
+ | Developer | `ui_pass` / `gameplay_pass` start (after TA Wave 2 `done`) | Every GameplayAtom reference exists in assetMapping | Same |
272
281
 
273
282
  ## DAG Modification Protocol
274
283
 
@@ -24,27 +24,28 @@ ScaffoldAtom (skeleton)
24
24
 
25
25
  ## Atom Assignment Rules (5 Agents)
26
26
 
27
- | Atom Type | assignTo | Notes |
28
- | ---------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
29
- | `GameplayAtom` | Developer | PGS rules, state machine |
30
- | `ConfigAtom` | Developer | Level config, difficulty curve |
31
- | `VisualAtom` (baseline) | Designer | **designer-handoff-v2**: baseline = ASR slots in Phase 1; Phase 2 mark `done` with `actualOutput: ASR:...` or ICP supplementary PNG only |
32
- | `VisualAtom` (completions: remaining elements) | TA | Derive full set from samples |
33
- | `VisualAtom` (sprite sheets/animation/VFX) | TA | Technical pipeline |
34
- | `VisualAtom` (3D models/GLB) | TA | 3D pipeline; needs `referenceSource` |
35
- | `AudioAtom` (original generation) | Designer | BGM/SFX generation |
36
- | `AudioAtom` (post-processing) | TA | compress/trim/loop |
37
- | `VFXAtom` | TA | VFX sprite sheets |
38
- | `AnimationAtom` | TA | Animation sprite sheets |
27
+ | Atom Type | assignTo | Notes |
28
+ | ---------------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
29
+ | `GameplayAtom` | Developer | PGS rules, state machine |
30
+ | `ConfigAtom` | Developer | Level config, difficulty curve |
31
+ | `VisualAtom` (baseline) | Designer | **designer-handoff-v2**: baseline = ASR slots in Phase 1; set `atoms[].asrSlot: { sheet, row, col }` (see [atom-plan-format.md § `asrSlot`](atom-plan-format.md#asrslot-字段可选--visualatom-基线绑定)); Phase 2 mark `done` with `actualOutput: ASR:...` or ICP supplementary PNG only |
32
+ | `VisualAtom` (completions: remaining elements) | TA | Derive full set from samples |
33
+ | `VisualAtom` (sprite sheets/animation/VFX) | TA | Technical pipeline |
34
+ | `VisualAtom` (3D models/GLB) | TA | 3D pipeline; needs `referenceSource` |
35
+ | `AudioAtom` (original generation) | Designer | BGM/SFX generation |
36
+ | `AudioAtom` (post-processing) | TA | compress/trim/loop |
37
+ | `VFXAtom` | TA | VFX sprite sheets |
38
+ | `AnimationAtom` | TA | Animation sprite sheets |
39
39
 
40
40
  **Simple rule** (v2): Designer locks **MC + ASR** direction; TA mass-produces from ASR/MC to contract paths. Designer does not batch-export tile/UI PNGs at `assetMapping` in Phase 2.
41
41
 
42
42
  ## Scheduling Metadata (PM injects into `docs/atom-plan.json` → `atoms[]`)
43
43
 
44
- | Field | Meaning | Impact |
45
- | --------------------------- | ----------------------------------- | ------------------------------------------------------------------- |
46
- | `assignTo` | Which agent executes | Required for all atoms |
47
- | `referenceSource` | Reference image source for 3D atoms | `"designer-sample"` → starts immediately; `"ta-completion"` → waits |
48
- | `dependsOn: [atomId]` | Explicit prerequisites | Determines execution order |
49
- | `priority: high/normal/low` | Priority level | Affects TA scheduling |
50
- | `parallelGroup` | Parallel execution group | Same-group atoms start simultaneously |
44
+ | Field | Meaning | Impact |
45
+ | ------------------------------ | ---------------------------------------------- | ------------------------------------------------------------------------------------------------ |
46
+ | `assignTo` | Which agent executes | Required for all atoms |
47
+ | `referenceSource` | Reference image source for 3D atoms | `"designer-sample"` → starts immediately; `"ta-completion"` → waits |
48
+ | `dependsOn: [atomId]` | Explicit prerequisites | Determines execution order |
49
+ | `priority: high/normal/low` | Priority level | Affects TA scheduling |
50
+ | `parallelGroup` | Parallel execution group | Same-group atoms start simultaneously |
51
+ | `asrSlot: { sheet, row, col }` | VisualAtom baseline → ASR grid cell (optional) | TA auto-derives crop pixels from `designer-log § Sheet grid metadata` — eliminates manual lookup |
@@ -2,32 +2,46 @@
2
2
 
3
3
  Template workflow spec versions for `packages/cli/project-template`. New projects from `playcraft create` copy the current template; record the version in each project's `docs/project-state.md` § Workflow spec.
4
4
 
5
- ## production-serial-v1 (current)
5
+ ## convergence-v1 (current)
6
6
 
7
7
  **Effective**: project-template default for new playable-ad projects.
8
8
 
9
9
  ### Summary
10
10
 
11
- - **Production orchestration**: after Gate #2b, **strict serial** Designer Ph.2 TA Developer (`integration`). No parallel spawn of `@developer` during `production`.
12
- - **Production Pipeline** replaces Parallel Tracking: Wave 1 Designer, Wave 2 TA; Developer runs only in `integration` with real assets on disk.
13
- - **Developer**: single `integration` invoke — Spec Quick-Check, Skill Preflight, PGS/scenes, asset bind, `npm run dev` → `devStatus: ready`.
11
+ - **Three convergence loops**: (1) Reviewer `design_check` before Gate #1 / #2b; (2) `ui_pass` `ui_review` `ui_rework` (max 5 rounds) with `ui_diff` (browser screenshots vs MC); (3) `gameplay_pass` Reviewer `load_check` Gate #3 user gameplay acceptance.
12
+ - **Developer split**: `ui_pass` (UI shell + light logic, `devStatus: ui_ready`) then `gameplay_pass` (core gameplay, `devStatus: ready`).
13
+ - **Removed**: `integration`, `review`, `rework`, six-dimension final review, AI gameplay walkthrough.
14
+ - **Production orchestration** unchanged: after Gate #2b, **strict serial** — Designer Ph.2 → TA → Developer (`ui_pass`).
14
15
  - Visual delivery unchanged from **designer-handoff-v2** (MC + ASR, Handoff Pack, Phase 2 audio/digit only).
15
- - **atom-plan Gate #1**: PM writes `docs/atom-plan.json` (`skillsMatch` + `atoms[]`); `skillRef` only from `skillsMatch.items`; `playcraft skills validate-atom-plan` + PM STOP hook; `atom-plan.md` for Context 富集 only.
16
+ - **Reviewer tooling**: `playwright-cli` skill for browser automation (screenshot, console, resize).
17
+
18
+ ### Stage chain
19
+
20
+ ```
21
+ pm → style_exploration → production → ui_pass → ui_review ⇄ ui_rework → gameplay_pass → done
22
+ ```
16
23
 
17
24
  ### Production waves (serial)
18
25
 
19
- | Wave | Agent | Stage | Orchestrator invoke |
20
- | ---- | ---------------- | ------------- | --------------------------------------------------- |
21
- | 1 | Designer | `production` | `@designer` Ph.2 only after Gate #2b |
22
- | 2 | Technical Artist | `production` | `@technical-artist` after Wave 1 `done` |
23
- | 3 | Developer | `integration` | `@developer` after Wave 2 `done` + Compliance green |
26
+ | Wave | Agent | Stage | Orchestrator invoke |
27
+ | ---- | ---------------- | ------------ | --------------------------------------------------- |
28
+ | 1 | Designer | `production` | `@designer` Ph.2 only after Gate #2b |
29
+ | 2 | Technical Artist | `production` | `@technical-artist` after Wave 1 `done` |
30
+ | 3 | Developer | `ui_pass` | `@developer` after Wave 2 `done` + Compliance green |
24
31
 
25
32
  ### Trade-offs
26
33
 
27
- | Benefit | Cost |
28
- | ------------------------------------------------------------------------ | ------------------------------------------------------------------ |
29
- | Developer codes against real TA output; fewer integration visual reworks | Longer wall-clock before `integration` (no TA Developer overlap) |
30
- | TA Compliance before gameplay code | Spec-gap blocks the whole chain until PM supplements |
34
+ | Benefit | Cost |
35
+ | ------------------------------------------------------------ | ------------------------------------------------- |
36
+ | UI convergence independently verifiable before gameplay | Extra Reviewer round + up to 5 UI rework cycles |
37
+ | Design defects caught before user Gates | Gate #1/#2b require extra Reviewer invoke |
38
+ | Gameplay quality left to human (Canvas opaque to automation) | No AI gameplay audit — user must judge at Gate #3 |
39
+
40
+ ---
41
+
42
+ ## production-serial-v1
43
+
44
+ **Superseded by** `convergence-v1` for orchestration; serial production waves below still apply within `production` stage.
31
45
 
32
46
  ---
33
47
 
@@ -121,6 +121,70 @@ Maintenance checklist after editing `packages/cli/project-template`. Run before
121
121
  - [x] `CLAUDE.md` + `playcraft-orchestrator.mdc` + `collaboration.md` + `agent-conduct.md` + `agent-runtime-matrix.md` aligned
122
122
  - [x] Vitest `production-serial-v1` cases pass
123
123
 
124
+ ## Phase K — Plan convergence (TA + Developer)
125
+
126
+ - [x] `templates/ta-log.template.md`: § Production Plan (Coverage / Atlas / Pipeline Order / Risk)
127
+ - [x] `templates/developer-log.template.md`: § Implementation Plan (Architecture / Scene-Asset / PGS / Risk)
128
+ - [x] `validate-workflow-stop.mjs`: validates Plan section + Risk Checklist + no placeholders
129
+ - [x] `.claude/hooks/README.md`: documents Plan validation on STOP
130
+ - [x] `technical-artist.md` + `developer.md`: Runtime + Track done + Important Rules reference Plan
131
+ - [x] `ta-pipeline-cookbook.md` Step 0d + `developer-phase1-flow.md` Step 3b
132
+ - [x] `agent-conduct.md`: TA/Developer MUST/MUST NOT for Plan before production/code
133
+ - [x] `collaboration.md` § STOP sync checklist step 5 (Plan convergence)
134
+ - [x] Vitest `validate-workflow-stop.test.ts` covers `validatePlan`
135
+
136
+ ## Phase L — convergence-v1 doc alignment audit (2026-05)
137
+
138
+ Documents missed during the `production-serial-v1` → `convergence-v1` upgrade (commit `9fdc39a06`). Each item below has a [W#] tag indicating which audit wave applied the fix.
139
+
140
+ > **⚠️ Critical finding** — commit `9fdc39a06` introduced `convergence-v1` but did **not modify any vitest test files**. Result: 23 tests under `packages/cli/test/project-template-workflow.test.ts` + `validate-workflow-stop.test.ts` are pre-existing failures against the new spec. Audit Wave W4 includes the full test suite re-alignment.
141
+
142
+ ### W1 — Doc alignment
143
+
144
+ - [x] `agent-runtime-matrix.md`: rewritten — replaced `integration` / `review` / `rework` with `ui_pass` / `ui_review` / `ui_rework` / `gameplay_pass`; `reworkRound` → `uiReworkRound`; added `devStatus` / `loadCheck` columns; added Post-STOP verification table
145
+ - [x] All five agent L1 files (`pm.md`, `designer.md`, `technical-artist.md`, `developer.md`, `reviewer.md`): added `> **Workflow spec**: convergence-v1` declaration line at top
146
+ - [x] `pm-workflow-detail.md`: `integration` → `ui_pass` (lines 144, 247)
147
+ - [x] `developer-dev-handoff.md`: `stage → review` → `devStatus: ui_ready` / `ready` + handoff `Invoke @reviewer ui_diff/load_check` (line 99)
148
+
149
+ ### W2 — Term alignment (ASR)
150
+
151
+ - [ ] `playcraft-asset-state-sheet` Skill: "ASR State Inventory" → "ASR Coverage Matrix" (designer-log only has Coverage Matrix)
152
+ - [ ] `designer-log.template.md` § ASR Coverage Matrix: add "Sheet grid" metadata (rows × cols + cell width × height + cell padding)
153
+ - [ ] `ta-pipeline-cookbook.md` Step 0a + ASR extraction: aligned references
154
+
155
+ ### W3 — Machine-readable ASR binding
156
+
157
+ - [x] `atom-plan.template.json`: add `atoms[].asrSlot?: { sheet, row, col }` optional field (example VisualAtom row included)
158
+ - [x] `atom-plan-format.md`: document `asrSlot` field semantics + crop formula + ownership table
159
+ - [x] `core-model.md`: VisualAtom baseline → `asrSlot` linkage (assignment rule + scheduling metadata table)
160
+ - [x] `ta-pipeline-cookbook.md` § ASR 提取方法: prepend "优先路径" reading `atom-plan.json` → `atoms[].asrSlot` for batch crop
161
+ - [x] `designer-log.template.md` § Coverage: instruct Designer to mirror Coverage rows into `atom-plan.json asrSlot`
162
+
163
+ ### W4 — Hook hardening + test suite re-alignment
164
+
165
+ - [ ] `validate-workflow-stop.mjs`: add `designer` branch validating `designer-log.md § Skill Preflight`
166
+ - [ ] `validate-workflow-stop.mjs`: `readStage()` regex accepts `stage: ui_pass` (YAML, no backticks)
167
+ - [ ] `packages/cli/test/validate-workflow-stop.test.ts`: add designer + YAML stage test cases; rewrite `Developer Implementation Plan sample` → use `UI Pass Plan` / `Gameplay Pass Plan`
168
+ - [ ] `packages/cli/test/project-template-workflow.test.ts`: rewrite stale describes (originally pre-existing failures from commit `9fdc39a06`):
169
+ - `workflow-docs` (9 tests): replace six-dimension scoring / `rework_round` / `stage: review` assertions with `convergence-v1` equivalents (`uiReworkRound`, `ui_diff`, `load_check`)
170
+ - `production-serial-v1` (6 tests): delete or migrate to `convergence-v1` describe
171
+ - `upstream-intake-four-doc-discipline` (1 test): align with current `developer-phase1-flow.md`
172
+ - `plan-convergence-ta-developer` (6 tests): "Implementation Plan" → "UI Pass Plan" / "Gameplay Pass Plan"
173
+ - hooks README test: same alignment
174
+
175
+ ### W5 — TA Compliance Gate coverage
176
+
177
+ - [x] `ta-log.template.md` § Compliance Gate: add `Text dimensions` row (for `images/txt/*`)
178
+ - [x] `ta-log.template.md` § Compliance Gate: add `Digit Strip dimensions` row (separate from UI)
179
+ - [x] `layout-spec.template.md` Digit Sprite Strip section: recommend `images/txt/digits.webp` path
180
+ - [x] `ta-pipeline-cookbook.md` § Transparency Classification example table: align digit path with `images/txt/` recommendation
181
+
182
+ ### W6 — Interface polish
183
+
184
+ - [x] `designer-deliverable-spec.md` § Phase 2: clarify ICP supplementary PNG trigger condition (only when TA Step 0c confidence=low **and** crop/segment failed)
185
+ - [x] `ta-log.template.md` Style Interpretation: change "Do NOT proceed with any asset type where confidence = low" → atom-granularity ("hold that asset type; other types continue")
186
+ - [x] `designer-log.template.md` + `ta-log.template.md` § mediaGroups Reuse: add `extension` column + filter note (Designer: `.aiaudio` only; TA: `.aiimage` + `.aisprite`)
187
+
124
188
  ## Automated
125
189
 
126
190
  ```bash
@@ -20,6 +20,24 @@
20
20
  "referenceSource": null,
21
21
  "status": "pending",
22
22
  "actualOutput": null
23
+ },
24
+ {
25
+ "atomId": "{{visual_atom_id}}",
26
+ "slot": "{{element_id_from_assetMapping}}",
27
+ "type": "VisualAtom",
28
+ "assignTo": "Designer",
29
+ "dependsOn": [],
30
+ "skillRef": null,
31
+ "priority": "normal",
32
+ "parallelGroup": null,
33
+ "referenceSource": null,
34
+ "asrSlot": {
35
+ "sheet": "element",
36
+ "row": 1,
37
+ "col": 1
38
+ },
39
+ "status": "pending",
40
+ "actualOutput": null
23
41
  }
24
42
  ],
25
43
  "dagRevisions": []
@@ -11,6 +11,8 @@
11
11
 
12
12
  > **Living Document**: Designer / TA / Developer enrich **their** sections below without overwriting PM's JSON.
13
13
 
14
+ > **⚠️ Status Contract**: Every agent MUST update `atom-plan.json` → `atoms[].status` + `atoms[].actualOutput` upon completing each assigned atom. Atoms left at `pending` with `actualOutput: null` after delivery = workflow violation.
15
+
14
16
  ## JSON 主文件(PM Gate #1)
15
17
 
16
18
  ```bash
@@ -21,6 +23,16 @@ playcraft skills link --from-atom-plan --prune
21
23
 
22
24
  - **Never** use `playcraft-*` in `skillRef`; values must come from `skillsMatch.items[].atomId` (or `null` + `dagRevisions` gap)
23
25
 
26
+ ## mediaGroups — Pre-Matched Reusable Assets
27
+
28
+ > **`skillsMatch.mediaGroups`** lists assets from the skills library that match this project's needs. Downstream agents (Designer for audio, TA for images) **MUST check mediaGroups before generating from scratch**.
29
+
30
+ **Usage protocol:**
31
+
32
+ 1. **Designer (audio)**: Read `mediaGroups` → any `.aiaudio` match? → `playcraft skills link --atom <atomId>` → post-process → mark `status: done`
33
+ 2. **TA (visual)**: Read `mediaGroups` → any `.aiimage` / `.aisprite` match? → `playcraft skills link --atom <atomId>` → post-process (resize/convert/transparency) → mark `status: done`
34
+ 3. **Skip only when**: quality/style/mood mismatch — document reason in `## DAG Revisions`
35
+
24
36
  ---
25
37
 
26
38
  ## Acceptance Criteria
@@ -40,7 +52,13 @@ Gate #1 — one line per atom in atoms[]; point elsewhere for details:
40
52
 
41
53
  ## Asset Skill Context
42
54
 
43
- > **Designer fills** after Phase 1 Skill Discovery.
55
+ > **Designer fills** after Phase 1 Skill Discovery. **MUST NOT** leave empty after Phase 2 delivery.
56
+
57
+ <!-- Designer: for each assigned atom, record:
58
+ - Which Skills you read and applied (playcraft-audio-generation, playcraft-text-rendering, etc.)
59
+ - Whether a mediaGroup match was used or skipped (with reason)
60
+ - Key generation parameters (model, prompt strategy, reference images)
61
+ -->
44
62
 
45
63
  (Pending Designer Phase 1)
46
64
 
@@ -48,7 +66,14 @@ Gate #1 — one line per atom in atoms[]; point elsewhere for details:
48
66
 
49
67
  ## TA Skill Context
50
68
 
51
- > **Technical Artist fills** during production Wave 2.
69
+ > **Technical Artist fills** during production Wave 2. **MUST NOT** leave empty after delivery.
70
+
71
+ <!-- TA: for each assigned atom, record:
72
+ - Production approach (linked from mediaGroups / generated from scratch)
73
+ - Atom Skill recipe (if skillRef present): base prompt, model, variants
74
+ - Matched pipeline Skills: which playcraft-* skills were applied
75
+ - Pipeline decision: key choices made during production
76
+ -->
52
77
 
53
78
  (Pending Technical Artist Phase 1)
54
79
 
@@ -56,7 +81,14 @@ Gate #1 — one line per atom in atoms[]; point elsewhere for details:
56
81
 
57
82
  ## Impl Skill Context
58
83
 
59
- > **Developer fills** during integration Skill Preflight.
84
+ > **Developer fills** during integration Skill Preflight. **MUST NOT** leave empty after implementation.
85
+
86
+ <!-- Developer: for each assigned atom, record:
87
+ - Implementation approach (based on SKILL.md Recipe)
88
+ - Matched Skills: which .aigameplay / .aiconfig skills were scaffolded
89
+ - ref files used: PGS schemas, reducer templates, etc.
90
+ - Implementation decisions: deviations from Skill template + reason
91
+ -->
60
92
 
61
93
  (Pending Developer Phase 1)
62
94