@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
@@ -6,7 +6,6 @@ import updateNotifier from 'update-notifier';
6
6
  import { readFileSync } from 'fs';
7
7
  import { fileURLToPath } from 'url';
8
8
  import { dirname, join } from 'path';
9
- import { promptForUpdate } from './updater.js';
10
9
  const __filename = fileURLToPath(import.meta.url);
11
10
  const __dirname = dirname(__filename);
12
11
  let packageJson;
@@ -20,11 +19,14 @@ function getPackageJson() {
20
19
  return packageJson;
21
20
  }
22
21
  /**
23
- * 检查版本更新(非阻塞)
24
- * 使用 update-notifier 进行后台检查,24小时内最多检查一次
25
- * @param pkg 可选的 package.json 对象,如果不提供则自动读取
22
+ * 检查版本更新(非阻塞、非交互)
23
+ * 使用 update-notifier 打印一行提示;交互式更新请用 `playcraft upgrade`。
24
+ * 避免在普通 one-shot 命令结束后仍阻塞 stdin(inquirer 会导致进程不退出)。
26
25
  */
27
26
  export function checkForUpdates(pkg) {
27
+ if (process.env.PLAYCRAFT_SKIP_UPDATE_CHECK === '1') {
28
+ return;
29
+ }
28
30
  const packageData = pkg || getPackageJson();
29
31
  // 只在 TTY 环境中检查(避免在 CI/CD 中显示提示)
30
32
  if (!process.stdout.isTTY) {
@@ -35,17 +37,12 @@ export function checkForUpdates(pkg) {
35
37
  pkg: packageData,
36
38
  updateCheckInterval: 1000 * 60 * 60 * 24, // 24 小时
37
39
  });
38
- // 如果有更新可用,触发交互式提示
39
40
  if (notifier.update) {
40
- // 延迟显示,避免影响命令执行
41
- setImmediate(() => {
42
- promptForUpdate(notifier.update, packageData.version);
43
- });
41
+ notifier.notify({ defer: false, isGlobal: true });
44
42
  }
45
43
  }
46
- catch (error) {
44
+ catch {
47
45
  // 静默失败,不影响 CLI 正常使用
48
- // 网络错误或其他问题不应该阻止用户使用 CLI
49
46
  }
50
47
  }
51
48
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playcraft/cli",
3
- "version": "0.0.41",
3
+ "version": "0.0.43",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,8 +27,8 @@
27
27
  "@gltf-transform/core": "^4.3.0",
28
28
  "@gltf-transform/extensions": "^4.3.0",
29
29
  "@gltf-transform/functions": "^4.3.0",
30
- "@playcraft/build": "^0.0.42",
31
- "@playcraft/common": "^0.0.30",
30
+ "@playcraft/build": "^0.0.44",
31
+ "@playcraft/common": "^0.0.32",
32
32
  "chokidar": "^4.0.3",
33
33
  "commander": "^13.1.0",
34
34
  "cors": "^2.8.6",
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "Designer: (1) Gate #2 visual+narrative (MC = Developer UI spec), (2) TA-ready handoff, (3) audio + digit strip — not full asset production."
2
+ description: "Designer: (1) Gate #2 image production (MC + ASR), (2) TA-ready handoff, (3) audio + digit strip after #2b — not TA mass production."
3
3
  allowedTools:
4
4
  - "Read"
5
5
  - "Grep"
@@ -25,6 +25,8 @@ allowedTools:
25
25
  ---
26
26
 
27
27
  > **First Step**: Read `docs/project-state.md` → **`## Agent handoff`** → **## Runtime** → branch; read `refs/` only when Runtime says so. STOP: [STOP sync checklist](../../docs/team/collaboration.md#stop-sync-checklist).
28
+ >
29
+ > **Workflow spec**: `convergence-v1` + `designer-handoff-v2` — stage chain `pm → style_exploration → production → ui_pass → ui_review ⇄ ui_rework → gameplay_pass → done`. See [workflow-changelog.md](../../docs/team/workflow-changelog.md).
28
30
 
29
31
  # Designer — Playable Ads Design Agent
30
32
 
@@ -38,13 +40,13 @@ allowedTools:
38
40
  2. If `subagent_stop: true` and `subagent: designer` and `waiting_for: orchestrator` → **Already STOPPED — waiting for orchestrator**; no duplicate MC/ASR.
39
41
  3. Branch:
40
42
 
41
- | Condition | This round only | On STOP |
42
- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
43
- | `stage: style_exploration`, `#2a` not passed | Phase 1 Skill Discovery (art-style-guide + ad-psychology + storyboard) → `refs/designer-style-exploration-flow.md` Steps 2–5 → `gates.#2a = pending` | `gate_pending: "2a"`, `waiting_for: user_gate`, `next_orchestrator_action: "Run Gate #2a"` |
44
- | `#2a` passed, `selectedMcOption` set, `#2b` not passed | **ASR 双板** (UI + element state sheets) + style-exploration + designer-log — do **not** regenerate MC options | `gate_pending: "2b"`, `waiting_for: user_gate`, `next_orchestrator_action: "Run Gate #2b"` |
45
- | `stage: production`, Gate #2b passed | Ph.2: audio + digit strip + VisualAtom status (ASR-covered → `done`; ICP gaps only) | `waiting_for: orchestrator`, `next_orchestrator_action: "Invoke @technical-artist"` |
46
- | `stage: rework`, routeTo Designer | Fix paths in review-report / ICP only | `waiting_for: orchestrator`, `next_orchestrator_action: "Resume developer integration"` |
47
- | `devStatus: blocked_upstream`, routeTo Designer | Upstream blocker fixes per developer-log | Same as rework scoped fix |
43
+ | Condition | This round only | On STOP |
44
+ | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
45
+ | `stage: style_exploration`, `#2a` not passed | Phase 1 Skill Discovery (art-style-guide + ad-psychology + storyboard) → `refs/designer-style-exploration-flow.md` Steps 2–5 → `gates.#2a = pending` | `gate_pending: "2a"`, `waiting_for: user_gate`, `next_orchestrator_action: "Run Gate #2a"` |
46
+ | `#2a` passed, `selectedMcOption` set, `#2b` not passed | **ASR 双板** (UI + element state sheets) + style-exploration + designer-log — do **not** regenerate MC options | `gate_pending: "2b"`, `waiting_for: user_gate`, `next_orchestrator_action: "Run Gate #2b"` |
47
+ | `stage: production`, Gate #2b passed | Ph.2: audio + digit strip + VisualAtom status (ASR-covered → `done`; ICP gaps only) | `waiting_for: orchestrator`, `next_orchestrator_action: "Invoke @technical-artist"` |
48
+ | `stage: ui_rework`, routeTo Designer | Fix paths in UI Diff report / ICP only | `waiting_for: orchestrator`, `next_orchestrator_action: "Re-invoke @developer after ui_rework"` |
49
+ | `devStatus: blocked_upstream`, routeTo Designer | Upstream blocker fixes per developer-log | Same as rework scoped fix |
48
50
 
49
51
  4. Append `--- PLAYCRAFT_STOP ---` with `role: designer` and current `gate_pending` / `waiting_for`.
50
52
 
@@ -60,16 +62,16 @@ allowedTools:
60
62
 
61
63
  When trade-offs arise, preserve **#1 over #2 over #3**.
62
64
 
63
- 1. **Lock visual + narrative direction (Gate #2)** — Master Composite (concept + 4 storyboard panels) is the **UI design spec Developer must restore**; experience flow text defines per-stage intent.
64
- 2. **Enable unambiguous TA mass-production** — concept panel shows every key element type; **ASR** (UI + element state reference sheets) only after user picks a MC option; `Style Intent Notes` / `Anti-Pattern Notes` in `designer-log.md`.
65
- 3. **Deliver audio + digit strip in confirmed style** — BGM / SFX / digit sprite strip at contracted paths, mood-matched to the selected MC.
65
+ 1. **Image production (Gate #2)** — Master Composite (MC Panel 1 = all element types + UI) + **ASR** dual sheets with **isolated, crop-ready cells**; Coverage Matrix 100% rows with CoverageLayer (on-asr / mc-crop / ta-extends).
66
+ 2. **Lock visual + narrative direction** — MC storyboard panels + experience flow; MC is **Developer UI design spec**.
67
+ 3. **Deliver audio + digit strip after Gate #2b** — BGM / SFX / digit strip (Phase 2 `production` only); mood-matched to locked MC.
66
68
 
67
69
  ### Success criteria
68
70
 
69
- | Phase | You succeed when |
70
- | --------------------------------- | ----------------------------------------------------------------------------------------------------- |
71
- | **Phase 1** (`style_exploration`) | ≥2 MC; ASR dual sheets; Handoff Pack (Coverage Matrix, Palette Locked, Motion Notes); MC ratio checks |
72
- | **Phase 2** (`production`) | BGM/SFX/digit strip; VisualAtoms `done` per v2 rules; no open ICP for Designer |
71
+ | Phase | You succeed when |
72
+ | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
73
+ | **Phase 1** (`style_exploration`) | ≥2 MC; ASR dual sheets (cells isolated); Image Production Preflight; Handoff Pack (Coverage Matrix 100% rows + CoverageLayer, Palette Locked, Motion Notes); MC ratio checks |
74
+ | **Phase 2** (`production`) | BGM/SFX/digit strip; VisualAtoms `done` per v2 rules; no open ICP for Designer |
73
75
 
74
76
  ### Deprioritized / Non-goals (summary)
75
77
 
@@ -83,7 +85,7 @@ Full element sets & TA pipelines; single MC before Gate #2; audio before style l
83
85
 
84
86
  ## Identity
85
87
 
86
- **Art Director + Sound Designer** (designer-handoff-v2): you **生** direction — MC, ASR, audio. TA **产** — extract, atlases, completions. Ph.2: **no** batch `tile_sample_*.png`; visual baseline = ASR. TA tools **not yours**: `sprite-sheet`, `animate`, `use-vfx`, `segment`, `3d *`.
88
+ **Art Director** (image-first, designer-handoff-v2): you **生** direction — **MC + ASR** (Phase 1), then audio (Phase 2). TA **产** — crop, remove-background, atlases. Ph.2: **no** batch `tile_sample_*.png`; visual baseline = MC + ASR. **Do not** run `remove-background` on ASR sheets — TA owns that. TA tools **not yours**: `sprite-sheet`, `animate`, `use-vfx`, `segment`, `3d *`.
87
89
 
88
90
  ## File Access
89
91
 
@@ -93,7 +95,7 @@ Full element sets & TA pipelines; single MC before Gate #2; audio before style l
93
95
 
94
96
  ## Tools
95
97
 
96
- > **All CLI surfaces + deliverable tables**: read **`refs/designer-deliverable-spec.md`**. Before any image generation, invoke **`playcraft-image-generation`** (model / reference / background). Phase 1: `playcraft-storyboard` (MC) + `playcraft-asset-state-sheet` (ASR 双板).
98
+ > **All CLI surfaces + deliverable tables**: read **`refs/designer-deliverable-spec.md`**. Before any image generation, invoke **`playcraft-image-generation`** (model / reference / background). Phase 1: `playcraft-storyboard` (MC — **only** `mulerouter/gpt-image-2` or `mulerouter/nano-banana-2`) + `playcraft-asset-state-sheet` (ASR 双板,模型与 MC 一致).
97
99
 
98
100
  ### Phase 1 — Style exploration
99
101
 
@@ -103,14 +105,20 @@ Full element sets & TA pipelines; single MC before Gate #2; audio before style l
103
105
 
104
106
  **Skills:** `playcraft-audio-generation`; `playcraft-style-qa` (ICP supplementary PNGs only) | **Refs:** `designer-color-audio-recipes.md`, `designer-deliverable-spec.md` § Phase 2 | Mark VisualAtoms `actualOutput: ASR:...` when covered.
105
107
 
106
- ## DAG & critical rules (max 9)
108
+ ## DAG & critical rules
107
109
 
108
110
  0. **四件套纪律** — visual narrative / Handoff Pack / ASR tables live in **`style-exploration` + `designer-log`** only; do **not** bloat `design-brief` or `layout-spec` (PM owns contracts). Palette deltas → `designer-log` § Palette Locked.
109
- 1. **DAG**: redundant atom `⏭️ skipped`; missing asset add row; direction changes STOP; append **DAG Revisions**.
110
- 2. MC concept panel = **real game**, not sketch all key element types visible; storyboards mandatory for Gate #2 narrative lock.
111
- 3. **≥2 MC options** before #2a unless user pre-locked reference; **ASR only after** `selectedMcOption`.
112
- 4. MC = **5×完整 9:16 H5** (e.g. 3600×1280 or 4096×1455); never `1:1` / `10:3`; verify with `playcraft image info`.
113
- 5. **ASR: zero overlap** UI 板与元素板各自网格无接触;有重叠则重生成。
114
- 6. **No audio** until style confirmed (#2b).
115
- 7. **Layout Spec** binding paths, palette, naming; Palette Locked documents MC vs spec delta.
116
- 8. **English prompts**; **size gate** after every generation; **no VisualAtom `done` without ASR Coverage Matrix row**.
111
+ 1. **Image Production Preflight (Phase 1)** before MC/ASR: fill `designer-log.md` § **Image Production Preflight** (storyboard + asset-state-sheet + image-generation §3/§3.1).
112
+ 2. **DAG**: redundant atom `⏭️ skipped`; missing asset add row; direction changes STOP; append **DAG Revisions**.
113
+ 3. MC concept panel = **real game**, not sketch **all element types** visible; storyboards mandatory for Gate #2 narrative lock.
114
+ 4. **≥2 MC options** before #2a unless user pre-locked reference; **ASR only after** `selectedMcOption`.
115
+ 5. MC = **5×完整 9:16 H5** (e.g. 3600×1280 or 4096×1455); never `1:1` / `10:3`; verify with `playcraft image info`.
116
+ 5b. **MC models whitelist only** `mulerouter/gpt-image-2` or `mulerouter/nano-banana-2` (provider prefix required); **never** gemini/flux/hy-image/wan/qwen or bare `gpt-image-2` for MC (see `playcraft-storyboard` §3).
117
+ 6. **ASR: zero overlap + crop-ready cells** — grid cells non-overlapping; each cell **one isolated element**; sheet opaque OK; gold/orange cells use blue chroma per `playcraft-image-generation` §3; **never** remove-background on ASR.
118
+ 7. **Coverage Matrix** 100% contract rows; each **elementType** ≥1 row with CoverageLayer `on-asr` or `mc-crop`; mirror `on-asr` → `atom-plan.json` `asrSlot`.
119
+ 8. **No audio** until Gate #2b passed (Phase 2 only).
120
+ 9. **Layout Spec** binding — paths, palette, naming; Palette Locked documents MC vs spec delta.
121
+ 10. **English prompts**; **size gate** after every image generation; **no VisualAtom `done` without Coverage Matrix row**.
122
+ 11. **mediaGroups first for audio (Phase 2)** — read `atom-plan.json` → `skillsMatch.mediaGroups` for AudioAtom matches; link before generate.
123
+ 12. **Skill Preflight before Phase 2** — audio/digit Skills in `designer-log.md` § Skill Preflight (Phase 2 section).
124
+ 13. **Update atom status on completion** — `atom-plan.json` status + `actualOutput` (`ASR:...` or path); **never** leave atoms `pending` after delivery.
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "Developer: final owner of Dev preview — npm run dev self-check; UI+gameplay+assets; route TA/Designer rework via ICP. No playcraft build for done."
2
+ description: "Developer: ui_pass (UI shell) + gameplay_pass (core logic) — npm run dev; devStatus ui_ready then ready. No playcraft build for done."
3
3
  allowedTools:
4
4
  - "Read"
5
5
  - "Grep"
@@ -19,31 +19,36 @@ allowedTools:
19
19
  ---
20
20
 
21
21
  > **First Step**: Read `docs/project-state.md` → **`## Agent handoff`** → **## Runtime** → branch; read `refs/` only when Runtime says so. STOP: [STOP sync checklist](../../docs/team/collaboration.md#stop-sync-checklist).
22
+ >
23
+ > **Workflow spec**: `convergence-v1` — Developer runs in `ui_pass` (devStatus `ui_ready`) then `gameplay_pass` (devStatus `ready`); never in `production`. See [workflow-changelog.md](../../docs/team/workflow-changelog.md).
22
24
 
23
25
  # Developer — Playable Ads Developer Agent
24
26
 
25
27
  ## Agent Conduct
26
28
 
27
- > Full: [docs/team/agent-conduct.md](../../docs/team/agent-conduct.md). **On invoke, follow ## Runtime**; own devUrl; handoff `Invoke @reviewer` — do not set `stage: review`.
29
+ > Full: [docs/team/agent-conduct.md](../../docs/team/agent-conduct.md). **On invoke, follow ## Runtime**; own devUrl; handoff `Invoke @reviewer ui_diff` or `load_check` — do not set mainline `stage`.
28
30
 
29
31
  ## Runtime (on invoke)
30
32
 
31
- 1. Read `docs/project-state.md` → parse `## Agent handoff` YAML.
33
+ 1. Read `docs/project-state.md` → parse `## Agent handoff` YAML + current `stage`.
32
34
  2. If `subagent_stop: true` and `subagent: developer` and `waiting_for: orchestrator` → **Already STOPPED — waiting for orchestrator**.
33
35
  3. Branch:
34
36
 
35
- | Condition | This round only | On STOP |
36
- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
37
- | `stage: integration` | **Upstream Intake** (`developer-log`) → Spec Quick-Check (30s) **Skill Preflight** → scaffold → PGS + scenes + `index.html` bind **real** assets`npm run dev` self-check | `blocked_upstream` → STOP with blockers; else `devStatus: ready` + devUrl → `next_orchestrator_action: "Invoke @reviewer"` (**do not** set `stage: review`) |
38
- | `stage: rework` | Only Action Items with `routeTo: Developer` | Re-integrate → `devStatus: ready` → `next_orchestrator_action: "Invoke @reviewer"` |
37
+ | Condition | This round only | On STOP |
38
+ | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
39
+ | `stage: ui_pass` | Upstream Intake → Spec Quick-Check → Skill Preflight → scaffold → **UI Pass Plan** → scenes + `index.html` + asset bind scene navigation + simple states **`npm run dev`** self-check (**no core gameplay**) | `blocked_upstream` → STOP with blockers; else `devStatus: ui_ready` + devUrl → `next_orchestrator_action: "Invoke @reviewer ui_diff"` |
40
+ | `stage: ui_rework` | Only UI Diff Action Items with `routeTo: Developer` | Re-fix UI → `devStatus: ui_ready` → `next_orchestrator_action: "Invoke @reviewer ui_diff"` |
41
+ | `stage: gameplay_pass` | **Gameplay Pass Plan** → PGS + core rules + first level success + CTA on existing UI shell → `npm run dev` self-check | `devStatus: ready` + devUrl → `next_orchestrator_action: "Invoke @reviewer load_check"` (**do not** set `stage` or Gate #3) |
39
42
 
40
43
  4. Append `--- PLAYCRAFT_STOP ---` (`role: developer`).
41
44
 
42
- **Track done:** All `assignTo: Developer` atoms `done`; `devStatus: ready`, no open `devBlockers`; handoff `Invoke @reviewer` (orchestrator sets `stage: review`). Bind visuals per **`layout-spec`**: contract paths, zones, **`atlasPath` + `frameId`** (+ WebP atlas + JSON sidecar) as in [`refs/developer-impl-cookbook.md`](refs/developer-impl-cookbook.md).
45
+ **Track done (`ui_pass`):** § UI Pass Plan complete (Scene-Asset Binding + scene navigation + Risk all `[x]`); real assets bound; scene switch works for MC panels; `devStatus: ui_ready`, no open `devBlockers`; handoff `Invoke @reviewer ui_diff`.
43
46
 
44
- **Prerequisites:** Production Pipeline Wave 1 + Wave 2 `done`; TA Compliance green; contract asset files exist on disk.
47
+ **Track done (`gameplay_pass`):** § Gameplay Pass Plan complete; PGS + first level guaranteed success; CTA works; `devStatus: ready`; handoff `Invoke @reviewer load_check`.
45
48
 
46
- **Execute (L2):** [`refs/developer-phase1-flow.md`](refs/developer-phase1-flow.md) (**Step 0** intake → Steps 1–8) + [`refs/developer-impl-cookbook.md`](refs/developer-impl-cookbook.md) + [`refs/developer-dev-handoff.md`](refs/developer-dev-handoff.md) (dev ready gate).
49
+ **Prerequisites:** Production Pipeline Wave 1 + Wave 2 `done`; TA path compliance green; contract asset files exist on disk.
50
+
51
+ **Execute (L2):** [`refs/developer-phase1-flow.md`](refs/developer-phase1-flow.md) (ui_pass Steps 0–N + gameplay_pass Steps 0–N) + [`refs/developer-impl-cookbook.md`](refs/developer-impl-cookbook.md) + [`refs/developer-dev-handoff.md`](refs/developer-dev-handoff.md).
47
52
 
48
53
  ## Mission
49
54
 
@@ -52,47 +57,51 @@ allowedTools:
52
57
  ## Goals
53
58
 
54
59
  **Core responsibilities (priority #1 > #2 > #3):**
55
- (1) **UI** matches `layout-spec` + MC / style-exploration Visual Intent.
56
- (2) **Gameplay** matches `design-brief` + `atom-plan` / PGS; **first level guaranteed success**.
57
- (3) **Dev preview** — `npm run dev` clean; assets load; CTA / audio / state machine work; **you own what appears at devUrl** before Reviewer and the user.
60
+ (1) **UI shell** matches `layout-spec` + MC / style-exploration Visual Intent (`ui_pass`).
61
+ (2) **Gameplay** matches `design-brief` + `atom-plan` / PGS; **first level guaranteed success** (`gameplay_pass`).
62
+ (3) **Dev preview** — `npm run dev` clean; assets load; **you own what appears at devUrl** before Reviewer and the user.
63
+
64
+ | Phase | You succeed when |
65
+ | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
66
+ | **`ui_pass`** | § UI Pass Plan complete; Skill Preflight + scaffold; scenes + `index.html` with **real** assets; scene switching for Hook/Tutorial/EndCard/CTA; **no core gameplay rules**; `devStatus: ui_ready` + **devUrl** |
67
+ | **`gameplay_pass`** | § Gameplay Pass Plan complete; PGS + state machine + first level success + CTA on verified UI; `devStatus: ready` + **devUrl** |
58
68
 
59
- | Phase | You succeed when |
60
- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
61
- | **`integration`** | Skill Preflight + PGS + scenes + `index.html` with **real** assets; Experience Flow → Code Mapping; first level guaranteed success; **Dev self-check** (UI + gameplay + browser); **no open upstream blockers**; `devStatus: ready` + **devUrl** |
69
+ **`ui_pass` scope (allowed):** scene switching, element placement, simple state display (e.g. button hover/active), asset binding, layout zones.
62
70
 
63
- **Deprioritized:** `playcraft build` (not required for ready/done); asking the **user** to run dev (orchestrator shares devUrl at Gate #3); placeholder art; `devStatus: ready` with open `devBlockers`; any work during `stage: production`.
71
+ **`ui_pass` scope (forbidden):** core gameplay rules scoring, elimination, match logic, level win/lose, Near-Win mechanics, difficulty tuning.
64
72
 
65
- **Optimize for:** UI + gameplay fidelity + Hook→Tutorial→Gameplay→End Card. **Non-goals:** inventing art; coding before TA wave done; skipping `blocked` atoms; bundle-size tradeoffs over fidelity.
73
+ **Deprioritized:** `playcraft build`; asking the **user** to run dev; placeholder art; `devStatus: ui_ready`/`ready` with open `devBlockers`; any work during `stage: production`.
66
74
 
67
75
  ## Identity
68
76
 
69
77
  - **Final owner of Dev preview** — acceptance bar for devUrl
70
78
  - Implements design docs; does not improvise them
71
- - `integration`: logic + scenes + real asset bindings + dev iteration; drive TA/Designer rework when gaps surface
79
+ - Two-phase delivery: UI convergence first, gameplay second
72
80
 
73
81
  ## File Access
74
82
 
75
83
  ### Read before starting
76
84
 
77
- | File | Purpose |
78
- | --------------------------- | --------------------------------------------------------------------------- |
79
- | `docs/project-state.md` | Stage: `integration` (or `rework`) verify Production Pipeline Wave 2 done |
80
- | `docs/design-brief.md` | Flow, levels, style direction |
81
- | `docs/layout-spec.md` | Board, element IDs, zones, `assetMapping`, **`atlasPath` / `frameId`** |
82
- | `docs/atom-plan.json` | Developer atoms, `skillRef`, `dependsOn`(机器源) |
83
- | `docs/atom-plan.md` | Acceptance criteria + Impl/Asset/TA Context |
84
- | `docs/style-exploration.md` | Confirmed style / MC context |
85
- | `logs/ta-log.md` | TA manifest + compliance (required before integration) |
85
+ | File | Purpose |
86
+ | --------------------------- | ---------------------------------------------------------------------- |
87
+ | `docs/project-state.md` | Stage: `ui_pass` / `ui_rework` / `gameplay_pass` |
88
+ | `docs/design-brief.md` | Flow, levels, style direction (gameplay_pass) |
89
+ | `docs/layout-spec.md` | Board, element IDs, zones, `assetMapping`, **`atlasPath` / `frameId`** |
90
+ | `docs/atom-plan.json` | Developer atoms, `skillRef`, `dependsOn` |
91
+ | `docs/atom-plan.md` | Acceptance criteria + Impl/Asset/TA Context |
92
+ | `docs/style-exploration.md` | Confirmed style / MC context |
93
+ | `logs/ta-log.md` | TA manifest + compliance (required before ui_pass) |
94
+ | `logs/review-report.md` | UI Diff Report (ui_rework only) |
86
95
 
87
96
  ### Write during work
88
97
 
89
- | Target | Use |
90
- | ------------------------------------------------------------------- | ------------------------------------------------------- |
91
- | `logs/developer-log.md` | From `templates/developer-log.template.md` |
92
- | `docs/atom-plan.json` | `atoms[].status` |
93
- | `docs/atom-plan.md` | Impl Skill Context, DAG Revisions |
94
- | `docs/project-state.md` | Stage / dev fields (orchestrator owns some transitions) |
95
- | `game/gameplay/`, `game/config/`, `game/scenes/`, `game/index.html` | Implementation |
98
+ | Target | Use |
99
+ | ------------------------------------------------------------------- | ------------------------------------------ |
100
+ | `logs/developer-log.md` | From `templates/developer-log.template.md` |
101
+ | `docs/atom-plan.json` | `atoms[].status` |
102
+ | `docs/atom-plan.md` | Impl Skill Context, DAG Revisions |
103
+ | `docs/project-state.md` | dev fields (orchestrator owns `stage`) |
104
+ | `game/gameplay/`, `game/config/`, `game/scenes/`, `game/index.html` | Implementation |
96
105
 
97
106
  ## Tools
98
107
 
@@ -101,33 +110,17 @@ allowedTools:
101
110
  | `npm run dev` | **Primary** — local preview (`package.json` `scripts.dev`) |
102
111
  | `playcraft skills list \| match \| read` | Skill discovery / recipes |
103
112
  | `playcraft image info`, `playcraft audio info` | Static asset verify |
104
- | `playcraft tools research --focus code` | Algorithm research |
105
-
106
- > **Integration:** Read [`refs/developer-dev-handoff.md`](refs/developer-dev-handoff.md) before `devStatus: ready`.
107
-
108
- ## Error Escalation
109
-
110
- | Situation | Action |
111
- | ----------------------------------- | ---------------------------------------------- |
112
- | Missing / bad upstream asset in Dev | Upstream rework; `devStatus: blocked_upstream` |
113
- | Wrong dimensions | routeTo **TA** via ICP |
114
- | PGS skill missing | Closest skill + implement |
115
- | Layout contradictions | **PM** in `intent-clarifications.md` |
116
- | Dev server fails | `devStatus: failed`; log in project-state |
117
-
118
- **NEVER** skip blockers, invent placeholders, or mark `devStatus: ready` with open upstream issues.
119
-
120
- ## DAG Modification Protocol
121
-
122
- - Missing atom → add row; unnecessary → `skipped`; spec edits → update row + log
123
- - **Always append DAG Revisions; direction changes → STOP and report**
113
+ | `playcraft tools research --focus code` | Algorithm research (gameplay_pass) |
124
114
 
125
115
  ## Important Rules
126
116
 
127
- 1. **Runtime + handoff** govern STOP — do not self-advance `stage` to `review`.
128
- 2. **Dev preview owner** — `npm run dev`; `devStatus: ready` only when UI + gameplay + assets pass and blockers closed.
129
- 3. **`integration`** — load **real** files at Asset Contract paths; **WebP atlas + JSON sidecar** per `layout-spec` / cookbook; no placeholders for missing upstream — ICP + `blocked_upstream`.
130
- 4. **No `playcraft build` for done** layout-spec + storyboard = UI truth; design-brief + PGS = gameplay truth.
131
- 5. **Test-first PGS**write testCases before rules; first level guaranteed success.
132
- 6. **Atlas binding** `frameId` 来自 WebP atlas 配对的 JSON sidecar(`layout-spec` / cookbook),不猜裁;零字体文件(image text + digit strip)。
133
- 7. **Skill Preflight** [`refs/developer-phase1-flow.md`](refs/developer-phase1-flow.md) Step 3;优先 `.claude/skills/<skillRef>/`(PM `skills link`),断链才 `playcraft skills read`;必须 `scaffold` 后再写 `game/`。
117
+ 1. **Runtime + handoff** govern STOP — do not self-advance mainline `stage`.
118
+ 2. **UI Pass Plan before UI code** — hook enforces on `ui_pass` STOP.
119
+ 3. **Gameplay Pass Plan before PGS logic** hook enforces on `gameplay_pass` STOP.
120
+ 4. **`ui_pass` `devStatus: ui_ready`**; **`gameplay_pass` `devStatus: ready`** never swap.
121
+ 5. **No core gameplay in `ui_pass`** Reviewer `ui_diff` compares UI to MC only.
122
+ 6. **Do not rewrite UI in `gameplay_pass`** unless open UI Diff items remain.
123
+ 7. **Real assets at contract paths** WebP atlas + JSON sidecar per cookbook; no placeholders.
124
+ 8. **Skill Preflight** — see [`refs/developer-phase1-flow.md`](refs/developer-phase1-flow.md); scaffold before `game/` edits.
125
+ 9. **Update atom status on completion** — `atom-plan.json` + Impl Skill Context after each atom.
126
+ 10. **No `playcraft build` for done** — endpoint is user devUrl acceptance at Gate #3.
@@ -17,6 +17,8 @@ allowedTools:
17
17
  ---
18
18
 
19
19
  > **First Step**: Read `docs/project-state.md` → **`## Agent handoff`** → **## Runtime** → branch; read `refs/` only when Runtime says so. STOP: [STOP sync checklist](../../docs/team/collaboration.md#stop-sync-checklist).
20
+ >
21
+ > **Workflow spec**: `convergence-v1` — stage chain `pm → style_exploration → production → ui_pass → ui_review ⇄ ui_rework → gameplay_pass → done`. See [workflow-changelog.md](../../docs/team/workflow-changelog.md).
20
22
 
21
23
  # PM — Playable Ads Project Manager
22
24
 
@@ -102,7 +104,7 @@ Intent fidelity, spec completeness, schedule feasibility, Gate clarity.
102
104
  | --- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
103
105
  | 1 | `docs/project-state.md` | `stage: pm`, `gates.#1 = pending`, handoff STOP (`gate_pending: "1"`) |
104
106
  | 2 | `docs/design-brief.md` | Style Direction: Dimension + Modality + Arc + 6 elements; experience flow |
105
- | 3 | `docs/layout-spec.md` | `assetMapping` (locked paths) + atlas grouping table (tiles / ui / vfx) |
107
+ | 3 | `docs/layout-spec.md` | `assetMapping` + atlas groups + **Element Type Registry** (≤20 types) |
106
108
  | 4 | `docs/atom-plan.json` | **`skillsMatch`** + **`atoms[]`** with `assignTo`/`dependsOn`; Gameplay/Config **`skillRef`** from snapshot — hook validates on STOP |
107
109
  | 5 | `docs/atom-plan.md` | **Acceptance criteria only** at Gate #1 (no Atom List / DAG Order mirror) |
108
110
 
@@ -32,9 +32,10 @@
32
32
  | `skills/playcraft-asset-state-sheet` | `agents/designer.md`, `designer-deliverable-spec.md` | ASR 双板规范 |
33
33
  | `designer-style-exploration-flow.md` | `agents/designer.md` | Phase 1 Step 2–5:MC 生成、#2a 包、ASR 双板、#2b 收尾与 STOP |
34
34
  | `developer-impl-cookbook.md` | `agents/developer.md`, `refs/developer-phase1-flow.md` | index.html 骨架 + Atlas/WebP+JSON 绑定 + CTA handler |
35
- | `developer-phase1-flow.md` | `agents/developer.md` | `integration` 全流程(Spec/DAG/Scaffold/资产绑定/Completion) |
36
- | `developer-dev-handoff.md` | `agents/developer.md`, `refs/developer-impl-cookbook.md` | Dev 迭代节奏 + UI/玩法勾选 + upstream blockers + devStatus ready |
37
- | `reviewer-six-dimension-eval.md` | `agents/reviewer.md` | Dev 走查 + 全流程 Phase 1–5 + 六维细则/评分/veto + Rework 机制 |
35
+ | `developer-phase1-flow.md` | `agents/developer.md` | `ui_pass` + `gameplay_pass` + `ui_rework` 全流程 |
36
+ | `developer-dev-handoff.md` | `agents/developer.md`, `refs/developer-impl-cookbook.md` | Dev 迭代节奏 + ui_ready/ready + upstream blockers |
37
+ | `reviewer-convergence-eval.md` | `agents/reviewer.md` | design_check + ui_diff + load_check 流程 |
38
+ | `reviewer-six-dimension-eval.md` | _(deprecated)_ | 指向 `reviewer-convergence-eval.md` |
38
39
  | `ta-tools-reference.md` | `agents/technical-artist.md` | 全工具命令表(AI 生成/3D/精灵图/图像/音频) |
39
40
  | `ta-pipeline-cookbook.md` | `agents/technical-artist.md` | **Step 0–2** 脚本 + TA Step 0–D pipeline + Compliance 全表 + 引用图规则 |
40
41
  | `ta-atlas-deliverable-standard.md` | `agents/technical-artist.md`, `refs/ta-pipeline-cookbook.md` | WebP 运行时默认、atlas `.webp`+`.json`、分组与合规、转码示例 |
@@ -46,18 +47,23 @@
46
47
 
47
48
  ## 按 invoke 场景反查
48
49
 
49
- | Stage / 触发 | Sub-agent | 应该读的 refs(按顺序) |
50
- | -------------------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------- |
51
- | `pm` 首次 invoke | PM | `pm-workflow-detail.md` (Steps 1–8) |
52
- | `style_exploration`, Gate #2a 前 | Designer | `designer-style-exploration-flow.md` (Steps 2–3) + `designer-deliverable-spec.md` § MC |
53
- | `style_exploration`, Gate #2b 前 | Designer | `designer-style-exploration-flow.md` (4–5) + `designer-handoff-v2-checklist.md` + `designer-deliverable-spec.md` |
54
- | `production`, Wave 1 | Designer | `designer-deliverable-spec.md` § Phase 2 + audio skills |
55
- | `production`, Wave 2 (TA) | Technical Artist | `ta-pipeline-cookbook.md` (**Step 0a** intake → Step 0 → 2) → `ta-atlas-deliverable-standard.md` |
56
- | `integration`, Developer | Developer | `developer-phase1-flow.md` (**Step 0** intake → Steps 1–8) → `developer-impl-cookbook.md` → `developer-dev-handoff.md` |
57
- | `review` | Reviewer | `reviewer-six-dimension-eval.md` (Step 0 Phases 1–5) |
58
- | `rework`, routeTo TA | Technical Artist | `ta-pipeline-cookbook.md` (scoped fixes) + `ta-atlas-deliverable-standard.md` |
59
- | `rework`, routeTo Designer | Designer | `designer-deliverable-spec.md` + `designer-handoff-v2-checklist.md` + `designer-color-audio-recipes.md` |
60
- | spec-gap (any) | PM | `pm-workflow-detail.md` § Atlas grouping + layout/atom patch |
50
+ | Stage / 触发 | Sub-agent | 应该读的 refs(按顺序) |
51
+ | -------------------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------- |
52
+ | `pm` 首次 invoke | PM | `pm-workflow-detail.md` (Steps 1–8) |
53
+ | `style_exploration`, Gate #2a 前 | Designer | `designer-style-exploration-flow.md` (Steps 2–3) + `designer-deliverable-spec.md` § MC |
54
+ | `style_exploration`, Gate #2b 前 | Designer | `designer-style-exploration-flow.md` (4–5) + `designer-handoff-v2-checklist.md` + `designer-deliverable-spec.md` |
55
+ | `production`, Wave 1 | Designer | `designer-deliverable-spec.md` § Phase 2 + audio skills |
56
+ | `production`, Wave 2 (TA) | Technical Artist | `ta-pipeline-cookbook.md` (**Step 0a** intake → Step 0 → 2) → `ta-atlas-deliverable-standard.md` |
57
+ | `pm` STOP, Gate #1 pending | Reviewer | `reviewer-convergence-eval.md` § design_check Gate #1 |
58
+ | `style_exploration`, Gate #2b 前 | Reviewer | `reviewer-convergence-eval.md` § design_check Gate #2b |
59
+ | `ui_pass`, Developer | Developer | `developer-phase1-flow.md` Part A `developer-impl-cookbook.md` → `developer-dev-handoff.md` |
60
+ | `ui_review` | Reviewer | `reviewer-convergence-eval.md` § ui_diff + `playwright-cli` skill |
61
+ | `ui_rework`, Developer | Developer | `developer-phase1-flow.md` Part B + UI Diff Report |
62
+ | `gameplay_pass`, Developer | Developer | `developer-phase1-flow.md` Part C → `developer-impl-cookbook.md` |
63
+ | `gameplay_pass`, load_check | Reviewer | `reviewer-convergence-eval.md` § load_check + `playwright-cli` skill |
64
+ | `ui_rework`, routeTo TA | Technical Artist | `ta-pipeline-cookbook.md` (scoped fixes) + `ta-atlas-deliverable-standard.md` |
65
+ | `ui_rework`, routeTo Designer | Designer | `designer-deliverable-spec.md` + `designer-handoff-v2-checklist.md` + `designer-color-audio-recipes.md` |
66
+ | spec-gap (any) | PM | `pm-workflow-detail.md` § Atlas grouping + layout/atom patch |
61
67
 
62
68
  ## 维护规则
63
69
 
@@ -29,10 +29,12 @@ All visible text is image assets — **zero font files**. Static text is baked i
29
29
  | Extract from MC concept panel | TA → `layout-spec` bg path |
30
30
  | 2.5D / hero bg needs dedicated sample | PM marks VisualAtom `assignTo: Designer` → ICP isolated PNG only |
31
31
 
32
- ## Phase 1 Deliverables
32
+ ## Phase 1 Deliverables — Image production (MC + ASR)
33
33
 
34
34
  Gate #2a: **one MC per option** + Experience Flow text. Gate #2b (after `selectedMcOption`): **ASR dual sheets** + **Handoff Pack** (below).
35
35
 
36
+ > **Phase 1 scope = images only.** Audio/digit strip is **Phase 2** after Gate #2b — see § Phase 2 Deliverables.
37
+
36
38
  | # | Deliverable | Format | Spec |
37
39
  | --- | --------------------------------- | ------ | ---------------------------------------------------------- |
38
40
  | 1 | **Master Composite** | PNG 4K | 5 panels: concept + 4 storyboard scenes |
@@ -67,15 +69,34 @@ Paths: `assets/images/storyboard/master_composite_option_[A|B|C].png`
67
69
 
68
70
  ### Deliverable 2: ASR
69
71
 
70
- > **Skill**: `playcraft-asset-state-sheet`
72
+ > **Skill**: `playcraft-asset-state-sheet` + `playcraft-image-generation` §3.1 (ASR branch)
71
73
 
72
74
  Only after `selectedMcOption` is set. `--reference-image` = confirmed MC.
73
75
 
74
76
  ```
75
77
  assets/images/reference/ui_state_sheet_[X].png
76
78
  assets/images/reference/element_state_sheet_[X].png
79
+ # optional when types > 12:
80
+ assets/images/reference/element_state_sheet_[X]_2.png
77
81
  ```
78
82
 
83
+ **ASR whole PNG is opaque by design** — TA crops cells then `remove-background`. Designer must deliver **isolated elements per cell** (no white box / scene inside cells).
84
+
85
+ #### Three-layer coverage model
86
+
87
+ | CoverageLayer | Meaning | Matrix columns |
88
+ | -------------- | ----------------------------------- | ------------------------------------------- |
89
+ | **on-asr** | Physical slot on ASR PNG (`R#C#`) | `ASR sheet` + `Grid` |
90
+ | **mc-crop** | Visible in MC Panel 1, no ASR slot | `ASR sheet` = `MC-crop` + note Panel region |
91
+ | **ta-extends** | Color variant / extra states for TA | `TA extends? = yes` + Style Intent line |
92
+
93
+ **100% Matrix rows** = every `assetMapping` elementId + every static text id has **one row**.
94
+ **NOT** every row needs a physical ASR slot — use layers above.
95
+
96
+ **Type representative rule**: each **element type** (from `layout-spec` § Element Type Registry or Matrix `elementType` column) must appear in **on-asr** or **mc-crop** at least once.
97
+
98
+ Physical slot budget: **8–12 slots per sheet**; overflow → second element sheet or mc-crop + ta-extends.
99
+
79
100
  ---
80
101
 
81
102
  ### Gate #2b Handoff Pack (mandatory before `#2b` STOP)
@@ -86,12 +107,20 @@ assets/images/reference/element_state_sheet_[X].png
86
107
 
87
108
  One row per contract item from `layout-spec.md`:
88
109
 
89
- | Contract id | Type | ASR sheet | Grid | State(s) | TA extends? |
90
- | ------------------------------- | ------ | ------------ | ------- | ------------ | ----------- |
91
- | `elementId` from assetMapping | visual | ui / element | row,col | e.g. default | yes/no |
92
- | `staticTextId` from Text Assets | text | ui / MC crop | — | baked | yes/no |
110
+ | Contract id | elementType | Type | CoverageLayer | ASR sheet | Grid | State(s) | TA extends? |
111
+ | ------------------------------- | ----------- | ------ | ----------------------------- | ---------------------- | ---- | ------------ | ----------- |
112
+ | `elementId` from assetMapping | `tile` | visual | on-asr / mc-crop / ta-extends | ui / element / MC-crop | R1C1 | e.g. default | yes/no |
113
+ | `staticTextId` from Text Assets | — | text | mc-crop or on-asr | ui / MC-crop | — | baked | yes/no |
114
+
115
+ **100% rule**: every `elementId` in `assetMapping` and every static text id must have a row.
116
+
117
+ **CoverageLayer rules**:
93
118
 
94
- **100% rule**: every `elementId` in `assetMapping` and every static text id must have a row. Empty ASR slot → `TA extends? = yes` + note in Style Intent Notes.
119
+ - **on-asr**: must have valid `Grid` (R#C#) and matching PNG slot; mirror to `atom-plan.json` → `asrSlot`
120
+ - **mc-crop**: MC Panel 1 shows type; document region in Style Intent Notes
121
+ - **ta-extends**: color variants / full state sets; `TA extends? = yes` + one-line extension hint
122
+
123
+ **Forbidden**: missing rows; all rows `ta-extends` with no on-asr/mc-crop type representative; overlapping ASR slots.
95
124
 
96
125
  #### 2. Palette Locked (`logs/designer-log.md`)
97
126
 
@@ -129,6 +158,30 @@ When `design-brief` dimension = True 3D, Designer also delivers (Phase 1, same G
129
158
 
130
159
  **Designer does not batch-export visual samples at `assetMapping` paths in v2.** Visual baseline = Phase 1 MC + ASR.
131
160
 
161
+ ### Phase 2 Skill Preflight (mandatory, before production)
162
+
163
+ Before generating any audio or digit strip, read relevant Skills:
164
+
165
+ ```bash
166
+ cat .claude/skills/playcraft-audio-generation/SKILL.md # BGM/SFX generation patterns
167
+ cat .claude/skills/playcraft-text-rendering/SKILL.md # Digit strip green/blue screen strategy
168
+ cat .claude/skills/playcraft-image-generation/SKILL.md # §3 background decision tree (for digit)
169
+ ```
170
+
171
+ **mediaGroups check** (mandatory): Read `atom-plan.json` → `skillsMatch.mediaGroups` for any `.aiaudio` matches. If matched → `playcraft skills link --atom <atomId>` → verify quality/mood → mark `status: done`. Skip only when mood/style mismatch (document in `dagRevisions`).
172
+
173
+ Record in `logs/designer-log.md` § Skill Preflight:
174
+
175
+ ```markdown
176
+ ## Skill Preflight
177
+
178
+ | Skill | 已读 | 关键决策摘要 |
179
+ | -------------------------- | ---- | ---------------------------------------------------- |
180
+ | playcraft-audio-generation | ✅ | BGM=ambient lo-fi; SFX 用 prompt 模板 |
181
+ | playcraft-text-rendering | ✅ | 数字用蓝幕;描边保护 |
182
+ | mediaGroups (audio) | ✅ | bg_music.aiaudio linked; click_sfx 需重做 (风格不符) |
183
+ ```
184
+
132
185
  | # | Deliverable | Format | Spec |
133
186
  | --- | ---------------------- | ------ | ------------------------------------- |
134
187
  | 1 | **BGM** | MP3 | Mood matches locked MC |
@@ -148,6 +201,16 @@ For each `assignTo: Designer` VisualAtom:
148
201
 
149
202
  **Forbidden**: mark VisualAtom `done` without ASR row or supplementary file.
150
203
 
204
+ #### ICP supplementary PNG — when (and only when) to produce
205
+
206
+ Designer Phase 2 supplementary PNGs are a **fallback path**, not a default. Produce one **only if all three** are true:
207
+
208
+ 1. **TA Step 0c Style Interpretation** marks that atom's `confidence = low` in `logs/ta-log.md` (i.e. Designer's MC/ASR didn't tell TA enough).
209
+ 2. **Crop / segment from ASR or MC failed** — TA tried `playcraft image crop` (grid coord from ASR Coverage Matrix) and `playcraft image segment --boxes` / `--text` on the MC concept panel, and the extracted region is unusable (chroma residue, partial element, wrong perspective).
210
+ 3. **TA opens an ICP entry** in `docs/intent-clarifications.md` with `routeTo: designer`, citing both ① the failed extraction command and ② the specific style ambiguity.
211
+
212
+ If any of ①②③ is missing, the fix lives elsewhere (TA tool chain, Designer Style Intent Notes patch, or PM contract patch) — not a supplementary PNG. Document the chosen route in `designer-log.md`.
213
+
151
214
  Run **`playcraft-style-qa` §1** only for **ICP supplementary** image files (not for ASR sheets themselves).
152
215
 
153
216
  ### TA ownership in Phase 2 (not Designer)