@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
@@ -1,166 +1,91 @@
1
1
  # Review Report
2
2
 
3
+ > Fill **one section** matching the review mode orchestrator invoked: `design_check` | `ui_diff` | `load_check`.
4
+
5
+ ## Review Mode
6
+
7
+ **{{design_check / ui_diff / load_check}}** — {{ISO timestamp}}
8
+
3
9
  ## Verdict
4
10
 
5
- **{{pass/conditional-pass/fail}}** — Total Score: {{total}}/30
6
-
7
- ## Six-Dimension Scores
8
-
9
- | Dimension | Score | Details |
10
- | ----------------------- | --------- | ----------------------- |
11
- | Experience Flow | {{1-5}}/5 | {{specific_evaluation}} |
12
- | Creative Appeal | {{1-5}}/5 | {{specific_evaluation}} |
13
- | Style Consistency | {{1-5}}/5 | {{specific_evaluation}} |
14
- | Intent Fidelity | {{1-5}}/5 | {{specific_evaluation}} |
15
- | Difficulty Balance | {{1-5}}/5 | {{specific_evaluation}} |
16
- | **Intent Transmission** | {{1-5}}/5 | {{specific_evaluation}} |
17
-
18
- <!--
19
- Scoring guide:
20
- 5 — Excellent: exceeds expectations, ready to ship
21
- 4 — Good: meets standard, minor tweaks then ship
22
- 3 — Acceptable: basically works, needs improvement
23
- 2 — Below standard: obvious problems, partial redo
24
- 1 — Seriously deficient: directional error, full redo
25
-
26
- Pass thresholds (6 dimensions × 5 max = 30):
27
- >= 24: Pass (avg 4.0 per dimension)
28
- 18-23: Conditional pass (fix issues then re-review)
29
- < 18: Fail (route back to responsible agents)
30
-
31
- Intent Transmission scoring:
32
- 5 — Zero open clarifications, TA self-check all pass, Developer mapping complete
33
- 4 — 1-2 resolved clarifications, no impact on quality
34
- 3 — Unresolved clarifications exist, or TA has low-confidence items
35
- 2 — Multiple unresolved clarifications, or Developer missing visual mapping
36
- 1 — Severe intent transmission failure, downstream agents made major wrong assumptions
37
- -->
38
-
39
- ## DAG Coverage
40
-
41
- | Metric | Value |
42
- | ----------------------------------- | ------------------------ |
43
- | Total atoms | {{total}} |
44
- | Completed | {{completed}} |
45
- | Skipped | {{skipped}} |
46
- | Blocked | {{blocked}} |
47
- | Missing (not in plan but should be) | {{missing_list_or_none}} |
48
-
49
- ## DAG Revision Audit
50
-
51
- | Revision | Agent | Type | Reasonable? | Notes |
52
- | ------------------- | --------- | --------------------- | ----------------------- | -------------- |
53
- | {{revision_number}} | {{agent}} | {{add/remove/modify}} | {{yes/no/questionable}} | {{assessment}} |
54
-
55
- <!--
56
- Assess each revision:
57
- - Was the change necessary?
58
- - Was the reason documented?
59
- - Did it deviate from original intent?
60
- - Would it have been better to escalate?
61
- -->
62
-
63
- ## Layout Spec Compliance
64
-
65
- | Check | Pass? | Details |
66
- | --------------------------------- | ---------- | ----------- |
67
- | Asset sizes match `assetSpec` | {{yes/no}} | {{details}} |
68
- | Filenames match `assetMapping` | {{yes/no}} | {{details}} |
69
- | Color palette followed | {{yes/no}} | {{details}} |
70
- | Element IDs aligned in code | {{yes/no}} | {{details}} |
71
- | Grid config matches zones | {{yes/no}} | {{details}} |
72
- | Zone coordinates in scene correct | {{yes/no}} | {{details}} |
73
- | Binding completeness | {{yes/no}} | {{details}} |
74
- | Bidirectional closure | {{yes/no}} | {{details}} |
75
-
76
- ## Technical Checks
77
-
78
- | Check | Pass? | Value | Standard |
79
- | ------------------- | ---------- | --------------- | ---------------------------- |
80
- | Total file size | {{yes/no}} | {{actual_size}} | <= 5MB (ideal <= 2MB) |
81
- | External requests | {{yes/no}} | {{count}} | 0 |
82
- | CTA implementation | {{yes/no}} | — | Click triggers store/install |
83
- | Entry file exists | {{yes/no}} | — | game/index.html present |
84
- | Viewport meta | {{yes/no}} | — | user-scalable=no |
85
- | Orientation support | {{yes/no}} | — | At least portrait |
86
-
87
- ## Veto Items
88
-
89
- <!-- These cause automatic FAIL regardless of score -->
90
-
91
- - [ ] First level guarantees player success
92
- - [ ] CTA is implemented and functional
93
- - [ ] Zero external network requests
94
- - [ ] Entry file (game/index.html) exists
95
-
96
- ## Issues
97
-
98
- | # | Severity | Dimension | Description | Suggestion | Route To |
99
- | ----- | ------------------------ | ------------- | ----------------- | -------------- | ---------------------------- |
100
- | {{n}} | {{critical/major/minor}} | {{dimension}} | {{what_is_wrong}} | {{how_to_fix}} | {{PM/Designer/TA/Developer}} |
101
-
102
- <!--
103
- Severity levels:
104
- - critical: Blocks delivery, must fix
105
- - major: Significantly impacts quality, should fix
106
- - minor: Polish item, nice to fix
107
-
108
- Every issue MUST have:
109
- 1. Specific description (not vague)
110
- 2. Actionable fix suggestion
111
- 3. Clear routing to responsible agent
112
- -->
113
-
114
- ## Action Items
115
-
116
- <!--
117
- Aggregated from Issues table above.
118
- Grouped by target agent for easy handoff.
119
- -->
120
-
121
- ### For PM
122
-
123
- | # | Issue Ref | Action Required | Priority |
124
- | ----- | -------------- | ------------------- | ------------------- |
125
- | {{n}} | Issue #{{ref}} | {{specific_action}} | {{high/medium/low}} |
126
-
127
- ### For Designer
11
+ **{{pass / fail}}**
128
12
 
129
- | # | Issue Ref | Action Required | Priority |
130
- | ----- | -------------- | ------------------- | ------------------- |
131
- | {{n}} | Issue #{{ref}} | {{specific_action}} | {{high/medium/low}} |
13
+ ---
132
14
 
133
- ### For Technical Artist
15
+ ## design_check (Gate #1 / #2b)
134
16
 
135
- | # | Issue Ref | Action Required | Priority |
136
- | ----- | -------------- | ------------------- | ------------------- |
137
- | {{n}} | Issue #{{ref}} | {{specific_action}} | {{high/medium/low}} |
17
+ ### Gate
138
18
 
139
- ### For Developer
19
+ **{{#1 / #2b}}**
140
20
 
141
- | # | Issue Ref | Action Required | Priority |
142
- | ----- | -------------- | ------------------- | ------------------- |
143
- | {{n}} | Issue #{{ref}} | {{specific_action}} | {{high/medium/low}} |
21
+ ### Checklist
144
22
 
145
- ## Rework Status
23
+ | Item | Pass? | Notes |
24
+ | ------------------ | ---------- | ----------- |
25
+ | {{checklist item}} | {{yes/no}} | {{details}} |
146
26
 
147
- <!-- Only fill if verdict is not "pass" -->
27
+ ### Missing / defects
148
28
 
149
- | Field | Value |
150
- | ------------------------ | --------------------------------- |
151
- | Rework round | {{1st / 2nd / N/A}} |
152
- | Force Gate #3? | {{yes (2nd round exceeded) / no}} |
153
- | Previous issues resolved | {{list resolved issue #s}} |
29
+ | # | Issue | routeTo |
30
+ | ----- | --------------- | ------------- |
31
+ | {{n}} | {{description}} | pm / designer |
154
32
 
155
- ## Summary
33
+ ### Outcome
34
+
35
+ {{pass → Run Gate / fail → re-invoke agent}}
36
+
37
+ ---
38
+
39
+ ## ui_diff (MC screenshot comparison)
40
+
41
+ ### devUrl
42
+
43
+ {{http://...}}
44
+
45
+ ### Scene comparisons
46
+
47
+ | Scene | Screenshot | MC reference | Severity | Match? | routeTo | Fix suggestion |
48
+ | ----- | --------------------- | ------------ | ------------------------ | ---------- | ------------------------- | -------------- |
49
+ | hook | logs/ui-diff-hook.png | {{mc path}} | {{critical/major/minor}} | {{yes/no}} | {{developer/ta/designer}} | {{fix}} |
50
+
51
+ ### Summary
52
+
53
+ - **uiReworkRound**: {{0–5}}
54
+ - **Blocking issues**: {{count critical + major}}
55
+ - **Minor only**: {{yes/no — does not block pass}}
56
+
57
+ ### Action Items
156
58
 
157
- {{overall_assessment_paragraph}}
59
+ | # | Severity | routeTo | Action |
60
+ | ----- | ------------ | --------- | ---------------- |
61
+ | {{n}} | {{severity}} | {{agent}} | {{specific fix}} |
62
+
63
+ ---
64
+
65
+ ## load_check (pre-Gate #3)
66
+
67
+ ### devUrl
68
+
69
+ {{http://...}}
70
+
71
+ ### Checks
72
+
73
+ | Check | Pass? | Notes |
74
+ | ---------------------- | ---------- | ------------------------- |
75
+ | Page loads ≤10s | {{yes/no}} | {{load time}} |
76
+ | No console Error logs | {{yes/no}} | {{error summary or none}} |
77
+ | game/index.html exists | {{yes/no}} | — |
78
+
79
+ ### Screenshot
80
+
81
+ `logs/load-check.png`
82
+
83
+ ### Outcome
84
+
85
+ {{pass → Run Gate #3 / fail → route Developer}}
86
+
87
+ ---
88
+
89
+ ## Summary
158
90
 
159
- <!--
160
- Include:
161
- - Overall impression from player perspective
162
- - Strongest dimension
163
- - Weakest dimension
164
- - Key recommendation for next iteration
165
- - Whether re-review is needed after fixes
166
- -->
91
+ {{one paragraph overall assessment for this review mode}}
@@ -30,6 +30,57 @@
30
30
  - **Designer samples received**: {{designer_sample_count}} files
31
31
  - **TA-completed elements**: {{ta_completed_count}} files
32
32
 
33
+ ---
34
+
35
+ ## mediaGroups Reuse
36
+
37
+ > **Step 0 Pre — mandatory before Skill Discovery.** Filter `atom-plan.json` → `skillsMatch.mediaGroups` by `extension`; TA is responsible for **`.aiimage` + `.aisprite`** (Designer handles `.aiaudio`).
38
+
39
+ | mediaGroup atomId | extension | Matches TA atom? | Disposition | Reason (if skipped) | Output path (if linked) |
40
+ | ----------------- | ------------------ | ---------------- | ------------- | ------------------------------- | ----------------------- |
41
+ | {{mg_atomId}} | .aiimage/.aisprite | {{atom_id / —}} | linked / skip | {{style mismatch / wrong dims}} | {{path / —}} |
42
+
43
+ <!--
44
+ TA scope (this table):
45
+ .aiimage — single-shot image bundles (bg, single ui element, single tile)
46
+ .aisprite — sprite-sheet bundles (multi-frame: tile sets, vfx, animations)
47
+
48
+ Out of TA scope (do NOT fill rows for these — Designer owns them):
49
+ .aiaudio — BGM / SFX → see designer-log.md § mediaGroups Reuse
50
+
51
+ Filter command:
52
+ cat docs/atom-plan.json | jq '.skillsMatch.mediaGroups[] | select(.extension == ".aiimage" or .extension == ".aisprite")'
53
+
54
+ Disposition rules:
55
+ linked → playcraft skills link → post-process (resize/convert/transparency) → status=done
56
+ skip → quality / style / wrong dimensions → document reason → generate from scratch
57
+
58
+ This section MUST be filled before proceeding to Step 0 Skill Discovery.
59
+ -->
60
+
61
+ ---
62
+
63
+ ## Skill Preflight
64
+
65
+ > **Step 0 Part C — mandatory before production.** Read all relevant playcraft pipeline Skills.
66
+
67
+ | Skill | 已读 | 关键决策摘要 |
68
+ | --------------------------- | ---- | --------------------------------------------------------- |
69
+ | playcraft-image-generation | ☐ | {{model choice, reference-image strategy, background}} |
70
+ | playcraft-masking | ☐ | {{floodfill tolerance, segment fallback, method-ai case}} |
71
+ | playcraft-sprite-generation | ☐ | {{single-frame→merge workflow, batch threshold}} |
72
+ | playcraft-text-rendering | ☐ | {{blue screen for text, stroke protection}} |
73
+ | playcraft-vfx-animation | ☐ | {{per-frame generation, blue screen for VFX}} |
74
+ | playcraft-batch-pipeline | ☐ | {{>5 elements → script, reference anchoring}} |
75
+ | playcraft-style-qa | ☐ | {{dark-bg verify, MC consistency check}} |
76
+
77
+ <!--
78
+ MUST be filled before Step 1 bulk generation. Each row: ✅ after reading + one-line decision summary.
79
+ Without this table → no bulk generation → no STOP.
80
+ -->
81
+
82
+ ---
83
+
33
84
  ## Style Interpretation
34
85
 
35
86
  > **Step 0c — Mandatory before any completion work.**
@@ -40,14 +91,106 @@
40
91
  | {{n}} | "{{designer_quote}}" | {{my_interpretation}} | high/medium/low | proceed / clarify |
41
92
 
42
93
  <!--
43
- Confidence rules:
94
+ Confidence rules (atom-granularity — hold only the affected asset type, not the whole Wave 2):
44
95
  high → proceed with completion
45
96
  medium → proceed, but include style interpretation in --reference-image prompt
46
- low → MUST write question to docs/intent-clarifications.md before proceeding
97
+ low → HOLD that asset type only: write question to docs/intent-clarifications.md
98
+ (routeTo: designer if style ambiguity; routeTo: pm if contract ambiguity)
99
+ → continue producing OTHER asset types where confidence ≥ medium
100
+ → resume the held type only after ICP answer (or Designer supplementary PNG per
101
+ designer-deliverable-spec.md § "ICP supplementary PNG — when (and only when)")
102
+
103
+ You may STOP only when EVERY remaining asset type is held at confidence=low — otherwise keep
104
+ making progress on the producible ones in parallel with the ICP wait.
105
+ -->
106
+
107
+ ## Production Plan
108
+
109
+ > **Step 0d — mandatory before any asset generation.** Plan WHAT to produce, in WHAT order, using WHAT pipeline.
110
+
111
+ ### Coverage Plan
112
+
113
+ | assetMapping id | Contract path | Pipeline | Reference source | Priority |
114
+ | --------------- | ------------------------- | ---------------------- | ----------------- | --------------- |
115
+ | {{elementId}} | {{path from layout-spec}} | {{extract/generate/…}} | {{MC/ASR/sample}} | {{high/normal}} |
47
116
 
48
- Do NOT proceed with any asset type where confidence = low.
117
+ <!--
118
+ One row per layout-spec assetMapping entry. Row count must match assetMapping count (no gaps).
49
119
  -->
50
120
 
121
+ ### Atlas Assembly Plan
122
+
123
+ | Atlas group | Output path (.webp + .json) | Elements (frameIds) | Layout |
124
+ | ----------- | ------------------------------- | -------------------- | ------------ |
125
+ | {{tiles}} | {{assets/images/tiles/…_atlas}} | {{tile_01..tile_06}} | {{3x2 grid}} |
126
+
127
+ <!--
128
+ Must match layout-spec § atlas grouping table.
129
+ -->
130
+
131
+ ### Pipeline Order
132
+
133
+ 1. Extract: crop MC/ASR reference elements (Stage E)
134
+ 2. Complete: batch generate remaining elements (Stage A)
135
+ 3. Process: resize + format convert to WebP (Stage B)
136
+ 4. Assemble: build atlases with JSON sidecars (Stage C)
137
+ 5. Verify: Compliance Gate on all paths
138
+
139
+ ### Risk Checklist
140
+
141
+ - [ ] Every assetMapping entry in Coverage Plan (no gaps)
142
+ - [ ] Atlas groups match layout-spec grouping table
143
+ - [ ] MC + ASR reference images accessible
144
+ - [ ] Style Interpretation confidence ≥ medium for all asset types
145
+ - [ ] Transparency Classification table complete (Step 0e below)
146
+
147
+ **MUST NOT** start bulk generation until every Risk Checklist item is checked `[x]`.
148
+
149
+ ---
150
+
151
+ ## Transparency Classification
152
+
153
+ > **Step 0e — mandatory before any generation.** TA auto-derives `needsAlpha` from path convention + `bgStrategy` from element color palette. See `ta-pipeline-cookbook.md` Step 0e for full rules.
154
+
155
+ | # | assetMapping path | needsAlpha | bgStrategy | 推导依据 | 去背工具 | 回退工具 | 验证结果 |
156
+ | ----- | ----------------- | -------------- | --------------------------------------------------------------- | --------------------------------- | ---------------------------------------------------- | ----------------------------------------- | ----------- |
157
+ | {{n}} | {{path}} | {{true/false}} | {{greenscreen/bluescreen/magenta/extract/full-coverage/opaque}} | {{路径: ui/ + 色彩: 红色系→绿幕}} | {{remove-bg floodfill t=25 / segment --boxes / N/A}} | {{segment / remove-bg --method ai / N/A}} | {{✅ / ❓}} |
158
+
159
+ <!--
160
+ TA auto-derives transparency — does NOT depend on PM fields.
161
+
162
+ needsAlpha derivation (from assetMapping path):
163
+ images/bg/ → false (full-screen background)
164
+ images/ui/ → true (UI overlay)
165
+ images/txt/ → true (text image)
166
+ images/vfx/ → true (VFX sprite)
167
+ images/tiles/ → true (default; unless card/board rect body → false)
168
+
169
+ bgStrategy derivation (from element color palette):
170
+ Gold/yellow/orange/amber → bluescreen (NEVER green — color bleed)
171
+ Green/teal/cyan → bluescreen (NEVER green — same family)
172
+ Blue/indigo/purple → greenscreen (NEVER blue — same family)
173
+ VFX glow/particle → bluescreen (warm tones common)
174
+ Text/digit images → bluescreen (often gold/white)
175
+ Multi-color/rainbow → magenta (last resort)
176
+ Red/pink/white/black → greenscreen or bluescreen (both safe)
177
+
178
+ TA tool chain (must use, never skip):
179
+ 1st: playcraft image remove-background --method floodfill --tolerance 25
180
+ 2nd: playcraft image segment --boxes (complex edges, known position)
181
+ 3rd: playcraft image remove-background --method ai (hair/transparency)
182
+ 4th: playcraft image segment --text (unknown position, last resort)
183
+ Extract: playcraft image crop (grid) or decompose-layers (multi-layer MC)
184
+
185
+ Post-verify: overlay on #1A1A2E dark bg to check:
186
+ ✅ No white edges, no chroma residue, no black blocks, clean edges
187
+ ❌ If any issue → escalate through fallback tool chain
188
+ -->
189
+
190
+ **MUST NOT** proceed to Step 1 bulk generation if any row has `❓ pending` in 验证结果.
191
+
192
+ ---
193
+
51
194
  ## Style Reference
52
195
 
53
196
  - **Master reference (MC)**: `assets/images/storyboard/master_composite_option_{{selectedMcOption}}.png`
@@ -162,17 +305,40 @@ Every row must be PASS before advancing to integration.
162
305
 
163
306
  ### Spec Compliance Summary
164
307
 
165
- | Check | Target | Actual | Result |
166
- | ------------------------ | -------------------------- | ---------- | ------------- |
167
- | Background dimensions | {{assetSpec}} | {{actual}} | {{PASS/FAIL}} |
168
- | Tile dimensions | {{assetSpec}} | {{actual}} | {{PASS/FAIL}} |
169
- | UI element dimensions | {{assetSpec}} | {{actual}} | {{PASS/FAIL}} |
170
- | Background file size | < 500KB | {{actual}} | {{PASS/FAIL}} |
171
- | Tile file size | < 100KB per tile | {{actual}} | {{PASS/FAIL}} |
172
- | BGM file size | < 300KB | {{actual}} | {{PASS/FAIL}} |
173
- | SFX file size | < 50KB per SFX | {{actual}} | {{PASS/FAIL}} |
174
- | Total assets size | 2-3MB | {{actual}} | {{PASS/FAIL}} |
175
- | Sprite sheet JSON paired | Every .png sheet has .json | {{yes/no}} | {{PASS/FAIL}} |
308
+ | Check | Target | Actual | Result |
309
+ | -------------------------- | ---------------------------------------------------------- | ---------- | ------------- |
310
+ | Background dimensions | {{assetSpec}} | {{actual}} | {{PASS/FAIL}} |
311
+ | Tile dimensions | {{assetSpec}} | {{actual}} | {{PASS/FAIL}} |
312
+ | UI element dimensions | {{assetSpec}} | {{actual}} | {{PASS/FAIL}} |
313
+ | **Text dimensions** | `images/txt/*` per `layout-spec` text spec (W×H per label) | {{actual}} | {{PASS/FAIL}} |
314
+ | **Digit Strip dimensions** | `images/txt/digits*` cellW × cellH × frameCount (0–9 = 10) | {{actual}} | {{PASS/FAIL}} |
315
+ | Background file size | < 500KB | {{actual}} | {{PASS/FAIL}} |
316
+ | Tile file size | < 100KB per tile | {{actual}} | {{PASS/FAIL}} |
317
+ | BGM file size | < 300KB | {{actual}} | {{PASS/FAIL}} |
318
+ | SFX file size | < 50KB per SFX | {{actual}} | {{PASS/FAIL}} |
319
+ | Total assets size | ≤ 2-3MB | {{actual}} | {{PASS/FAIL}} |
320
+ | Sprite sheet JSON paired | Every .png sheet has .json | {{yes/no}} | {{PASS/FAIL}} |
321
+
322
+ <!--
323
+ Text dimensions: every `images/txt/*` asset must match per-label W×H from layout-spec § Static text (or atlas grouping for text atlas).
324
+ Digit Strip dimensions: digit sprite (typically `images/txt/digits.webp` or `images/ui/digits.webp`) must satisfy:
325
+ - frameCount = 10 (0–9) — for score / countdown / level display
326
+ - width == cellW × frameCount (when laid out as a single row)
327
+ - height == cellH (single-row strip) OR width × height matches multi-row grid in JSON sidecar
328
+ - channels = 4 (alpha for overlay)
329
+ If digit strip is split across multiple paths (e.g. small + large) each needs its own row.
330
+ -->
331
+
332
+ ### Transparency Compliance
333
+
334
+ | Check | Target | Actual | Result |
335
+ | ---------------------------- | -------------------------------------------------- | ---------- | ------------- |
336
+ | Classification table | All rows filled, no ❓ pending | {{status}} | {{PASS/FAIL}} |
337
+ | Alpha channels (transparent) | All transparent assets channels=4 | {{count}} | {{PASS/FAIL}} |
338
+ | Dark-bg verify (transparent) | All transparent assets clean on #1A1A2E overlay | {{count}} | {{PASS/FAIL}} |
339
+ | BG full-coverage | All backgrounds edge-to-edge, no fade/white corner | {{status}} | {{PASS/FAIL}} |
340
+ | Atlas per-frame verify | VFX/atlas each frame verified on dark bg | {{status}} | {{PASS/FAIL}} |
341
+ | Chroma residue | Zero color residue from chroma key removal | {{status}} | {{PASS/FAIL}} |
176
342
 
177
343
  ### Compliance Verdict
178
344