@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
|
@@ -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[]`
|
|
71
|
-
| Designer | `atoms[]`
|
|
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 (
|
|
16
|
-
| **
|
|
17
|
-
| **
|
|
18
|
-
| **
|
|
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`
|
|
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`
|
|
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
|
|
54
|
-
| -------------------------- |
|
|
55
|
-
| `subagent` | Sub-agent on STOP
|
|
56
|
-
| `subagent_stop` | Sub-agent on STOP
|
|
57
|
-
| `waiting_for` | Both
|
|
58
|
-
| `gate_pending` | Sub-agent when gate pending
|
|
59
|
-
| `next_orchestrator_action` | Sub-agent on STOP (**required**)
|
|
60
|
-
| `last_completed_by` | Sub-agent on STOP
|
|
61
|
-
| `rework_round` | Reviewer on fail / orchestrator
|
|
62
|
-
| `block_reason` | Optional
|
|
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
|
|
89
|
-
|
|
|
90
|
-
| `gates.#N = pending`
|
|
91
|
-
| `gates.#N = passed`
|
|
92
|
-
| Mainline `stage` (`pm` → `style_exploration` → `production` → `
|
|
93
|
-
| `selectedMcOption`
|
|
94
|
-
| `devStatus`, `devUrl`, `devBlockers`
|
|
95
|
-
| `
|
|
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
|
-
##
|
|
107
|
+
## UI rework sequence (orchestrator-owned)
|
|
101
108
|
|
|
102
|
-
1. **Reviewer** —
|
|
103
|
-
2. **Orchestrator** — Set `stage:
|
|
104
|
-
3. **Developer** (
|
|
105
|
-
4. **Orchestrator** — Invoke `@reviewer` again; on pass →
|
|
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 (`
|
|
120
|
-
| **C — Dev delivery** | **Gate #3 only**: open **devUrl** from orchestrator | Developer
|
|
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
|
|
127
|
-
| -------- | --------------------------------------------------------- | ----------------------------------------------------------------- |
|
|
128
|
-
| **1** | Define experience + gameplay (`design-brief`, flow) | Lock visual + narrative — **MC = UI spec for Developer** | Style-faithful mass production from MC/ASR
|
|
129
|
-
| **2** | Zero-ambiguity contracts (`layout-spec`, `atom-plan`) | Handoff Pack: ASR Coverage Matrix, Palette Locked, Motion Notes | 100% `assetMapping` at spec
|
|
130
|
-
| **3** | Gates + ICP; **spec-gap** vs **asset rework** arbitration | Audio + digit strip; **respond to Developer visual/audio rework** | Production-grade assets; **respond
|
|
131
|
-
| **Last** | — | — | —
|
|
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** (`
|
|
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
|
|
269
|
-
| --------- |
|
|
270
|
-
| TA | Production Pipeline Wave 2 (TA entry)
|
|
271
|
-
| Developer | `
|
|
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
|
|
45
|
-
|
|
|
46
|
-
| `assignTo`
|
|
47
|
-
| `referenceSource`
|
|
48
|
-
| `dependsOn: [atomId]`
|
|
49
|
-
| `priority: high/normal/low`
|
|
50
|
-
| `parallelGroup`
|
|
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
|
-
##
|
|
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
|
-
- **
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
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
|
-
- **
|
|
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
|
|
20
|
-
| ---- | ---------------- |
|
|
21
|
-
| 1 | Designer | `production`
|
|
22
|
-
| 2 | Technical Artist | `production`
|
|
23
|
-
| 3 | Developer | `
|
|
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
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
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
|
|