@bendyline/gilde 0.1.17 → 0.1.19

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 (160) hide show
  1. package/README.md +11 -2
  2. package/authoring/chat-models/README.md +26 -0
  3. package/authoring/chat-models/btl4-35b-q4.json +142 -0
  4. package/authoring/chat-models/btl4-compact-iq2.json +142 -0
  5. package/authoring/chat-models/deepseek-r1-8b-q4.json +53 -0
  6. package/authoring/chat-models/deepseek-v4-flash-284b-mxfp4.json +110 -0
  7. package/authoring/chat-models/deepseek-v4-flash-284b-q2.json +110 -0
  8. package/authoring/chat-models/deepseek-v4-flash-284b-q2q4.json +111 -0
  9. package/authoring/chat-models/deepseek-v4-flash-284b-q4.json +113 -0
  10. package/authoring/chat-models/gemma4-12b-q4.json +190 -0
  11. package/authoring/chat-models/gemma4-12b-q8.json +164 -0
  12. package/authoring/chat-models/gemma4-26b-q4.json +90 -0
  13. package/authoring/chat-models/gemma4-31b-q4.json +81 -0
  14. package/authoring/chat-models/gemma4-e2b-q4.json +76 -0
  15. package/authoring/chat-models/gemma4-e4b-q4.json +71 -0
  16. package/authoring/chat-models/glm-5.2-754b-q2.json +60 -0
  17. package/authoring/chat-models/gpt-oss-120b-q4.json +48 -0
  18. package/authoring/chat-models/gpt-oss-20b-q4.json +47 -0
  19. package/authoring/chat-models/laguna-s-2.1-118b-q4.json +127 -0
  20. package/authoring/chat-models/laguna-s-2.1-118b-q6.json +121 -0
  21. package/authoring/chat-models/laguna-s-2.1-118b-q8.json +127 -0
  22. package/authoring/chat-models/lfm2.5-2.6b-q4.json +39 -0
  23. package/authoring/chat-models/llama3.2-3b-q4.json +42 -0
  24. package/authoring/chat-models/mistral-7b-q4.json +53 -0
  25. package/authoring/chat-models/mistral-medium-3.5-128b-q4.json +57 -0
  26. package/authoring/chat-models/muse-glimmer-30b-q4.json +126 -0
  27. package/authoring/chat-models/nemotron3-nano-30b-q4.json +49 -0
  28. package/authoring/chat-models/nemotron3-super-120b-q4.json +41 -0
  29. package/authoring/chat-models/ornith-35b-q4.json +145 -0
  30. package/authoring/chat-models/ornith-35b-q8.json +145 -0
  31. package/authoring/chat-models/ornith-9b-q4.json +146 -0
  32. package/authoring/chat-models/qwen3.5-122b-a10b-q4.json +172 -0
  33. package/authoring/chat-models/qwen3.5-2b-q4.json +70 -0
  34. package/authoring/chat-models/qwen3.5-4b-q4.json +61 -0
  35. package/authoring/chat-models/qwen3.5-9b-q4.json +61 -0
  36. package/authoring/chat-models/qwen3.6-27b-q4.json +66 -0
  37. package/authoring/chat-models/qwen3.6-27b-q8.json +153 -0
  38. package/authoring/chat-models/qwen3.6-35b-a3b-q4.json +154 -0
  39. package/authoring/chat-models/qwen3.6-35b-a3b-q8.json +154 -0
  40. package/authoring/chat-models/talkie-1930-13b-q4.json +74 -0
  41. package/authoring/chat-models/ternary-bonsai-27b-q2.json +144 -0
  42. package/authoring/gstack/LICENSE.gstack +21 -0
  43. package/authoring/gstack/README.md +50 -0
  44. package/authoring/gstack/evals/cso.json +152 -0
  45. package/authoring/gstack/evals/design-consultation.json +201 -0
  46. package/authoring/gstack/evals/document-generate.json +174 -0
  47. package/authoring/gstack/evals/investigate.json +153 -0
  48. package/authoring/gstack/evals/office-hours.json +141 -0
  49. package/authoring/gstack/evals/plan-ceo-review.json +135 -0
  50. package/authoring/gstack/evals/qa-only.json +376 -0
  51. package/authoring/gstack/evals/retro.json +191 -0
  52. package/authoring/gstack/evals/spec.json +162 -0
  53. package/authoring/gstack/overlays/cso.json +132 -0
  54. package/authoring/gstack/overlays/design-consultation.json +153 -0
  55. package/authoring/gstack/overlays/document-generate.json +124 -0
  56. package/authoring/gstack/overlays/investigate.json +128 -0
  57. package/authoring/gstack/overlays/office-hours.json +119 -0
  58. package/authoring/gstack/overlays/plan-ceo-review.json +128 -0
  59. package/authoring/gstack/overlays/qa-only.json +145 -0
  60. package/authoring/gstack/overlays/retro.json +132 -0
  61. package/authoring/gstack/overlays/spec.json +140 -0
  62. package/authoring/gstack/persona-drafts/cso.about.md +9 -0
  63. package/authoring/gstack/persona-drafts/design-consultation.about.md +9 -0
  64. package/authoring/gstack/persona-drafts/office-hours.about.md +9 -0
  65. package/authoring/gstack/persona-drafts/qa-only.about.md +5 -0
  66. package/authoring/gstack/persona-drafts/spec.about.md +26 -0
  67. package/authoring/gstack/snapshots/cso/SKILL.md +1285 -0
  68. package/authoring/gstack/snapshots/design-consultation/SKILL.md +1230 -0
  69. package/authoring/gstack/snapshots/document-generate/SKILL.md +1252 -0
  70. package/authoring/gstack/snapshots/investigate/SKILL.md +1074 -0
  71. package/authoring/gstack/snapshots/office-hours/SKILL.md +1697 -0
  72. package/authoring/gstack/snapshots/plan-ceo-review/SKILL.md +1476 -0
  73. package/authoring/gstack/snapshots/qa-only/SKILL.md +1256 -0
  74. package/authoring/gstack/snapshots/retro/SKILL.md +1812 -0
  75. package/authoring/gstack/snapshots/spec/SKILL.md +2359 -0
  76. package/authoring/gstack/wave.json +103 -0
  77. package/data/chat-models/gl/glm-5.2-754b-q2/manifest.json +65 -0
  78. package/data/chat-models/gl/glm-5.2-754b-q2/versions/1.0.0/manifest.json +18 -0
  79. package/data/chat-models/gp/gpt-oss-120b-q4/manifest.json +5 -5
  80. package/data/chat-models/gp/gpt-oss-120b-q4/versions/1.1.0/manifest.json +135 -0
  81. package/data/chat-models/index.json +1 -1
  82. package/data/chat-models/mu/muse-glimmer-30b-q4/manifest.json +135 -0
  83. package/data/chat-models/mu/muse-glimmer-30b-q4/versions/1.0.0/manifest.json +20 -0
  84. package/data/connector-types/gi/github-releases/manifest.json +17 -0
  85. package/data/connector-types/gi/github-releases/versions/1.0.0/manifest.json +71 -0
  86. package/data/connector-types/index.json +1 -1
  87. package/data/craftbook-templates/br/branding-website/versions/1.1.0/craftbook.json +190 -0
  88. package/data/craftbook-templates/br/branding-website/versions/1.1.0/test.json +164 -0
  89. package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.0/craftbook.json +358 -0
  90. package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.0/test.json +376 -0
  91. package/data/craftbook-templates/ca/careful-mode/versions/1.1.0/craftbook.json +43 -0
  92. package/data/craftbook-templates/ca/careful-mode/versions/1.1.0/test.json +110 -0
  93. package/data/craftbook-templates/ca/careful-mode/versions/1.2.0/craftbook.json +43 -0
  94. package/data/craftbook-templates/ca/careful-mode/versions/1.2.0/test.json +110 -0
  95. package/data/craftbook-templates/co/content-deck/versions/1.1.0/craftbook.json +185 -0
  96. package/data/craftbook-templates/co/content-deck/versions/1.1.0/test.json +166 -0
  97. package/data/craftbook-templates/co/content-deck/versions/1.2.0/craftbook.json +185 -0
  98. package/data/craftbook-templates/co/content-deck/versions/1.2.0/test.json +169 -0
  99. package/data/craftbook-templates/co/corpus-email-digest/versions/1.1.0/craftbook.json +189 -0
  100. package/data/craftbook-templates/co/corpus-email-digest/versions/1.1.0/test.json +182 -0
  101. package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.0/craftbook.json +189 -0
  102. package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.0/test.json +187 -0
  103. package/data/craftbook-templates/de/design-system-consultation/versions/2.0.0/craftbook.json +385 -0
  104. package/data/craftbook-templates/de/design-system-consultation/versions/2.0.0/test.json +201 -0
  105. package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.0/craftbook.json +353 -0
  106. package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.0/test.json +191 -0
  107. package/data/craftbook-templates/ex/executive-level-review/versions/2.0.0/craftbook.json +347 -0
  108. package/data/craftbook-templates/ex/executive-level-review/versions/2.0.0/test.json +135 -0
  109. package/data/craftbook-templates/fr/freeze-scope/versions/1.2.0/craftbook.json +50 -0
  110. package/data/craftbook-templates/fr/freeze-scope/versions/1.2.0/test.json +131 -0
  111. package/data/craftbook-templates/fr/freeze-scope/versions/1.3.0/craftbook.json +50 -0
  112. package/data/craftbook-templates/fr/freeze-scope/versions/1.3.0/test.json +131 -0
  113. package/data/craftbook-templates/ht/html-arcade-game/versions/1.1.0/craftbook.json +197 -0
  114. package/data/craftbook-templates/ht/html-arcade-game/versions/1.1.0/test.json +173 -0
  115. package/data/craftbook-templates/ht/html-arcade-game/versions/1.2.0/craftbook.json +197 -0
  116. package/data/craftbook-templates/ht/html-arcade-game/versions/1.2.0/test.json +176 -0
  117. package/data/craftbook-templates/id/idea-office-hours/versions/2.0.0/craftbook.json +333 -0
  118. package/data/craftbook-templates/id/idea-office-hours/versions/2.0.0/test.json +141 -0
  119. package/data/craftbook-templates/im/image-set-index/versions/1.1.0/craftbook.json +163 -0
  120. package/data/craftbook-templates/im/image-set-index/versions/1.1.0/test.json +177 -0
  121. package/data/craftbook-templates/im/image-set-index/versions/1.2.0/craftbook.json +163 -0
  122. package/data/craftbook-templates/im/image-set-index/versions/1.2.0/test.json +180 -0
  123. package/data/craftbook-templates/index.json +1 -1
  124. package/data/craftbook-templates/pu/pull-request-review/manifest.json +5 -1
  125. package/data/craftbook-templates/pu/pull-request-review/versions/1.2.0/craftbook.json +159 -0
  126. package/data/craftbook-templates/pu/pull-request-review/versions/1.2.0/test.json +172 -0
  127. package/data/craftbook-templates/re/release-artifact-sanity-check/art.json +13 -0
  128. package/data/craftbook-templates/re/release-artifact-sanity-check/logo.webp +0 -0
  129. package/data/craftbook-templates/re/release-artifact-sanity-check/manifest.json +24 -0
  130. package/data/craftbook-templates/re/release-artifact-sanity-check/versions/1.0.0/craftbook.json +202 -0
  131. package/data/craftbook-templates/re/release-artifact-sanity-check/versions/1.0.0/test.json +138 -0
  132. package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.0/craftbook.json +348 -0
  133. package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.0/test.json +153 -0
  134. package/data/craftbook-templates/se/security-architecture-review/versions/2.0.0/craftbook.json +353 -0
  135. package/data/craftbook-templates/se/security-architecture-review/versions/2.0.0/test.json +152 -0
  136. package/data/craftbook-templates/sp/spec-authoring/versions/2.0.0/craftbook.json +391 -0
  137. package/data/craftbook-templates/sp/spec-authoring/versions/2.0.0/test.json +162 -0
  138. package/data/craftbook-templates/te/technical-documentation/versions/2.0.0/craftbook.json +343 -0
  139. package/data/craftbook-templates/te/technical-documentation/versions/2.0.0/test.json +174 -0
  140. package/data/craftbook-templates/tr/translate-content/versions/1.1.0/craftbook.json +84 -0
  141. package/data/craftbook-templates/tr/translate-content/versions/1.1.0/test.json +141 -0
  142. package/package.json +10 -4
  143. package/schemas/chat-model-identity.schema.json +44 -0
  144. package/schemas/chat-model-version.schema.json +3 -0
  145. package/schemas/connector-type-identity.schema.json +3 -0
  146. package/schemas/connector-type-version.schema.json +3 -0
  147. package/schemas/craftbook-doc.schema.json +3 -0
  148. package/schemas/craftbook-template-identity.schema.json +3 -0
  149. package/schemas/craftbook-template-version.schema.json +3 -0
  150. package/schemas/craftbook-test.schema.json +232 -3
  151. package/schemas/gezel-template-identity.schema.json +3 -0
  152. package/schemas/gezel-template-version.schema.json +3 -0
  153. package/schemas/image-model-identity.schema.json +3 -0
  154. package/schemas/image-model-version.schema.json +3 -0
  155. package/schemas/project-type-identity.schema.json +3 -0
  156. package/schemas/project-type-version.schema.json +3 -0
  157. package/schemas/toolset-identity.schema.json +3 -0
  158. package/schemas/toolset-version.schema.json +3 -0
  159. package/schemas/video-model-identity.schema.json +3 -0
  160. package/schemas/video-model-version.schema.json +3 -0
@@ -0,0 +1,173 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "title": "Playable single-file arcade-game workflow",
4
+ "objective": "Run the HTML Arcade Game craftbook and verify concrete game/visual design artifacts precede a complete playable canvas game with end state and restart behavior.",
5
+ "tags": [
6
+ "html-game",
7
+ "workflow"
8
+ ],
9
+ "prompt": "Use the HTML Arcade Game craftbook. Read workspace `source/game-brief.md`, then build workspace `index.html` as a self-contained canvas game called Returns Rush. The player moves a sorting cart left/right, catches accepted parcels for points, avoids exception parcels that cost a life, wins at 10 points, loses at zero lives, and can restart in-page after either end state. Use keyboard controls, a visible score/lives HUD, inline CSS/JS, and no external assets. Complete game-design and visual-design artifacts before implementation.",
10
+ "setup": {
11
+ "projectName": "HTML Arcade Game Eval",
12
+ "about": "Self-contained workflow eval for the HTML Arcade Game craftbook. The brief is in the workspace, design deliverables belong in artifacts, and the playable game belongs at workspace/index.html.",
13
+ "missionObjectives": "Ship a playable Returns Rush canvas game with real input, score/lives state, win and lose states, restart behavior, visual feedback, and no external dependencies.",
14
+ "files": [
15
+ {
16
+ "path": "source/game-brief.md",
17
+ "content": "# Returns Rush Game Brief\n\nTheme: a busy returns desk sorting accepted parcels from exception parcels.\n\nRequired mechanics:\n- Move a sorting cart left and right with ArrowLeft/ArrowRight (A/D may also work).\n- Accepted parcels add one point.\n- Exception parcels remove one life.\n- Start with three lives.\n- Win at 10 points and lose at zero lives.\n- Show score, lives, controls, and current state on screen.\n- After win or game over, an in-page control restarts a fresh round.\n- Keep the game self-contained in one index.html with no network assets.\n"
18
+ }
19
+ ],
20
+ "worker": {
21
+ "name": "Jules",
22
+ "role": "Developer"
23
+ }
24
+ },
25
+ "mocks": [],
26
+ "success": {
27
+ "summary": "A craftbook task records game/visual designs and ships a parseable, substantial Returns Rush game with input, end states, and restart behavior.",
28
+ "deliverables": [
29
+ {
30
+ "path": "index.html",
31
+ "kind": "html-game",
32
+ "minBytes": 4200,
33
+ "checks": [
34
+ {
35
+ "kind": "cssMinBytes",
36
+ "bytes": 600,
37
+ "file": "index.html"
38
+ },
39
+ {
40
+ "kind": "jsParses",
41
+ "file": "index.html"
42
+ },
43
+ {
44
+ "kind": "contains",
45
+ "file": "index.html",
46
+ "pattern": "<canvas\\b",
47
+ "flags": "i"
48
+ },
49
+ {
50
+ "kind": "contains",
51
+ "file": "index.html",
52
+ "pattern": "Returns Rush|returns desk",
53
+ "flags": "i"
54
+ },
55
+ {
56
+ "kind": "contains",
57
+ "file": "index.html",
58
+ "pattern": "ArrowLeft|ArrowRight|keydown"
59
+ },
60
+ {
61
+ "kind": "contains",
62
+ "file": "index.html",
63
+ "pattern": "score[\\s\\S]*lives|lives[\\s\\S]*score",
64
+ "flags": "i"
65
+ },
66
+ {
67
+ "kind": "contains",
68
+ "file": "index.html",
69
+ "pattern": "game\\s*-?\\s*over|you\\s+(?:win|lose)|victory|defeat",
70
+ "flags": "i"
71
+ },
72
+ {
73
+ "kind": "contains",
74
+ "file": "index.html",
75
+ "pattern": "restart|play\\s*again|new\\s*game|try\\s*again",
76
+ "flags": "i"
77
+ },
78
+ {
79
+ "kind": "contains",
80
+ "file": "index.html",
81
+ "pattern": "requestAnimationFrame"
82
+ }
83
+ ]
84
+ }
85
+ ],
86
+ "checks": [
87
+ {
88
+ "kind": "minBytes",
89
+ "file": "design/game-design.md",
90
+ "bytes": 600,
91
+ "artifact": true
92
+ },
93
+ {
94
+ "kind": "contains",
95
+ "file": "design/game-design.md",
96
+ "pattern": "(?:acceptance|criteria)[\\s\\S]*(?:control|input)[\\s\\S]*(?:win|lose|game over)",
97
+ "flags": "i",
98
+ "artifact": true
99
+ },
100
+ {
101
+ "kind": "minBytes",
102
+ "file": "design/visual-design.md",
103
+ "bytes": 450,
104
+ "artifact": true
105
+ },
106
+ {
107
+ "kind": "contains",
108
+ "file": "design/visual-design.md",
109
+ "pattern": "#[0-9a-f]{3,8}[\\s\\S]*(?:HUD|score|lives)",
110
+ "flags": "i",
111
+ "artifact": true
112
+ }
113
+ ],
114
+ "taskNotes": {
115
+ "minBytes": 160,
116
+ "requireCraftbookTask": true,
117
+ "checks": [
118
+ {
119
+ "kind": "contains",
120
+ "file": "task-notes.md",
121
+ "pattern": "game-design\\.md",
122
+ "flags": "i"
123
+ },
124
+ {
125
+ "kind": "contains",
126
+ "file": "task-notes.md",
127
+ "pattern": "visual-design\\.md",
128
+ "flags": "i"
129
+ },
130
+ {
131
+ "kind": "contains",
132
+ "file": "task-notes.md",
133
+ "pattern": "index\\.html",
134
+ "flags": "i"
135
+ }
136
+ ]
137
+ },
138
+ "taskGraph": {
139
+ "requireCraftbookTask": true,
140
+ "requireTerminalStep": true
141
+ }
142
+ },
143
+ "rubric": {
144
+ "artifact": {
145
+ "path": "index.html",
146
+ "kind": "html"
147
+ },
148
+ "axes": [
149
+ {
150
+ "name": "playability",
151
+ "description": "Keyboard input moves the player, collisions change score/lives, and a round can reach both win and lose states."
152
+ },
153
+ {
154
+ "name": "completeness",
155
+ "description": "The game includes a real loop, visible HUD, end-state feedback, and a reliable fresh-round restart."
156
+ },
157
+ {
158
+ "name": "visual feedback",
159
+ "description": "The locked palette, readable game objects, HUD hierarchy, and collision/end-state feedback are applied intentionally."
160
+ },
161
+ {
162
+ "name": "workflow evidence",
163
+ "description": "The game and visual design artifacts are concrete and agree with the implementation."
164
+ }
165
+ ]
166
+ },
167
+ "qualityFocus": [
168
+ "craftbook attribution",
169
+ "design-before-build ordering",
170
+ "runtime playability",
171
+ "end-state and restart behavior"
172
+ ]
173
+ }
@@ -0,0 +1,197 @@
1
+ {
2
+ "id": "html-arcade-game",
3
+ "name": "HTML Arcade Game",
4
+ "description": "Build a playable single-file HTML/canvas arcade game (shooter, runner, dodger, etc.). Splits design into game-mechanics and visual look, builds, then evaluates against a playability bar and loops until it is actually fun and bug-free.\n\nA gallery craftbook generated from an archetype spec. It runs\n`phase → (per-phase gate) → … → evaluate → (loop) → finish`. Each build\nphase that produces a checkable artifact is followed by a **runtime\ngate-checkpoint** — the runtime verifies the artifact and routes with no\nmodel turn, looping back to redo the phase on a miss. The final `evaluate`\nstep holds a static deliverable gate plus a reviewer QA pass. What it adds\nover the generic `build-loop`: a specialist role per phase, a\ndomain-correct ordering, and a concrete per-phase quality bar.\n\nDeliverables marked \"artifact\" land in the project's artifacts drawer (`write_artifact` / `read_artifact`), not the shipped workspace — review output is not product source.\n\nPhases:\n\n1. Game design (game-designer) — mechanics, controls, win/lose, difficulty → gated on artifact `design/game-design.md` (markdown-notes)\n2. Visual design (visual-designer) — palette, shapes/sprites, layout, juice → gated on artifact `design/visual-design.md` (markdown-notes)\n3. Build (developer) — implement the game in one index.html → gated on `index.html` (html-game)\n\nThe gates never advance with an unmet criterion, and loop back to the\nowning phase to fix named gaps.\n",
5
+ "entryStepId": "game-design",
6
+ "triggers": [
7
+ "arcade game",
8
+ "space shooter",
9
+ "html game",
10
+ "build a game"
11
+ ],
12
+ "steps": [
13
+ {
14
+ "id": "game-design",
15
+ "name": "Game design",
16
+ "description": "mechanics, controls, win/lose, difficulty",
17
+ "prompt": "Design the GAME, not the code. Decide: core mechanic (what the player does), controls (keys/mouse/touch), win and lose conditions, scoring, restart behavior, and the difficulty curve. Then write an **acceptance-criteria checklist** (4-8 concrete, checkable items, e.g. \"arrow keys move the ship\", \"colliding with an enemy ends the game\", \"score increments on hit\", \"restart resets the score\", \"game is playable for >30s without a JS error\"). Save the complete mechanics + checklist to artifact `design/game-design.md` with `write_artifact`, and summarize the path in task notes. No code, no visuals yet.",
18
+ "suggestedRole": "game-designer",
19
+ "advanceWhen": {
20
+ "file": "design/game-design.md",
21
+ "minBytes": 1,
22
+ "sniff": "nonempty",
23
+ "artifact": true
24
+ },
25
+ "gate": {
26
+ "at": "completion",
27
+ "checks": [
28
+ {
29
+ "kind": "minBytes",
30
+ "file": "design/game-design.md",
31
+ "bytes": 600,
32
+ "artifact": true
33
+ },
34
+ {
35
+ "kind": "sniff",
36
+ "file": "design/game-design.md",
37
+ "sniff": "nonempty",
38
+ "artifact": true
39
+ },
40
+ {
41
+ "kind": "contains",
42
+ "file": "design/game-design.md",
43
+ "pattern": "acceptance|criteria|checklist",
44
+ "flags": "i",
45
+ "label": "acceptance criteria",
46
+ "artifact": true
47
+ },
48
+ {
49
+ "kind": "contains",
50
+ "file": "design/game-design.md",
51
+ "pattern": "control|input|keyboard|mouse|touch",
52
+ "flags": "i",
53
+ "label": "control scheme",
54
+ "artifact": true
55
+ },
56
+ {
57
+ "kind": "contains",
58
+ "file": "design/game-design.md",
59
+ "pattern": "win|lose|game over|victory|defeat",
60
+ "flags": "i",
61
+ "label": "end-state rules",
62
+ "artifact": true
63
+ }
64
+ ],
65
+ "onReject": "game-design",
66
+ "maxAttempts": 3
67
+ },
68
+ "next": "visual-design"
69
+ },
70
+ {
71
+ "id": "visual-design",
72
+ "name": "Visual design",
73
+ "description": "palette, shapes/sprites, layout, juice",
74
+ "prompt": "Read artifact `design/game-design.md` with `read_artifact`, then decide how the game LOOKS. Pick a palette with exact color values, the canvas shapes or sprites for player/enemies/projectiles, the HUD layout (score, lives or timer), and at least one feedback effect (hit flash, screen shake, or particles). Keep it self-contained — canvas drawing or CSS, no external asset downloads. Save the concrete visual target to artifact `design/visual-design.md` with `write_artifact`, and summarize the path in task notes. Still no game code.",
75
+ "suggestedRole": "visual-designer",
76
+ "advanceWhen": {
77
+ "file": "design/visual-design.md",
78
+ "minBytes": 1,
79
+ "sniff": "nonempty",
80
+ "artifact": true
81
+ },
82
+ "gate": {
83
+ "at": "completion",
84
+ "checks": [
85
+ {
86
+ "kind": "minBytes",
87
+ "file": "design/visual-design.md",
88
+ "bytes": 450,
89
+ "artifact": true
90
+ },
91
+ {
92
+ "kind": "sniff",
93
+ "file": "design/visual-design.md",
94
+ "sniff": "nonempty",
95
+ "artifact": true
96
+ },
97
+ {
98
+ "kind": "contains",
99
+ "file": "design/visual-design.md",
100
+ "pattern": "#[0-9a-f]{3,8}|rgb\\(|hsl\\(",
101
+ "flags": "i",
102
+ "label": "concrete palette",
103
+ "artifact": true
104
+ },
105
+ {
106
+ "kind": "contains",
107
+ "file": "design/visual-design.md",
108
+ "pattern": "HUD|score|lives|timer",
109
+ "flags": "i",
110
+ "label": "HUD design",
111
+ "artifact": true
112
+ }
113
+ ],
114
+ "onReject": "visual-design",
115
+ "maxAttempts": 3
116
+ },
117
+ "next": "build"
118
+ },
119
+ {
120
+ "id": "build",
121
+ "name": "Build",
122
+ "description": "implement the game in one index.html",
123
+ "prompt": "Read artifacts `design/game-design.md` and `design/visual-design.md` with `read_artifact`. Implement the game in workspace `index.html` with `write_file` (inline CSS + JS) so it satisfies the acceptance criteria and matches the visual spec. Include a real game loop, real input handling, score/state, a visible win or lose state, and an in-page restart path. Keep it self-contained with no network assets. On a loop-back, fix only the gaps the reviewer named — do not regress criteria that already passed. `write_task_note` the workspace path and which criteria now pass.",
124
+ "suggestedRole": "developer",
125
+ "advanceWhen": {
126
+ "file": "index.html",
127
+ "minBytes": 1,
128
+ "sniff": "html-complete"
129
+ },
130
+ "gate": {
131
+ "at": "completion",
132
+ "checks": [
133
+ {
134
+ "kind": "minBytes",
135
+ "file": "index.html",
136
+ "bytes": 3200
137
+ },
138
+ {
139
+ "kind": "htmlLint",
140
+ "file": "index.html"
141
+ },
142
+ {
143
+ "kind": "contains",
144
+ "file": "index.html",
145
+ "pattern": "game\\s*-?\\s*over|you\\s+(?:win|won|lose|lost)|victory|defeat",
146
+ "flags": "i",
147
+ "label": "visible end state"
148
+ },
149
+ {
150
+ "kind": "contains",
151
+ "file": "index.html",
152
+ "pattern": "restart|play\\s*again|new\\s*game|try\\s*again",
153
+ "flags": "i",
154
+ "label": "restart path"
155
+ }
156
+ ],
157
+ "scripts": [
158
+ {
159
+ "name": "checkHtmlGame",
160
+ "scope": "standard",
161
+ "inputs": {
162
+ "file": "index.html"
163
+ }
164
+ },
165
+ {
166
+ "name": "checkJsParses",
167
+ "scope": "standard",
168
+ "inputs": {
169
+ "file": "index.html"
170
+ }
171
+ }
172
+ ],
173
+ "onReject": "build",
174
+ "maxAttempts": 4
175
+ },
176
+ "next": "evaluate"
177
+ },
178
+ {
179
+ "id": "evaluate",
180
+ "name": "Evaluate",
181
+ "description": "Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.",
182
+ "prompt": "Read workspace `index.html` with `read_file` and actually exercise the game. If a browser/QA capability is available, load it, play it, test restart, and watch the console for errors; otherwise trace the game loop, input listeners, end-state transition, and reset path in source. Check every criterion from artifact `design/game-design.md` and write PASS/FAIL per criterion.\n\nThen route — this is the whole point of the loop:\n\n- **Every criterion PASSES →** call `advance_task_step({ ref, stepId: \"evaluate\", next: \"finish\" })`.\n- **Any criterion FAILS →** write the specific gaps to notes, then call `advance_task_step({ ref, stepId: \"evaluate\", next: \"build\" })` to loop back. The builder fixes exactly those gaps.\n\nNever route to `finish` while any criterion is unmet. The build phase's completion gate already blocked a grossly-incomplete deliverable; your job is the judgment an automated check cannot make (does it actually work, read well, look right). After ~3 unproductive loops, stop and report DONE_WITH_CONCERNS so the user can step in.",
183
+ "suggestedRole": "reviewer",
184
+ "next": "build"
185
+ },
186
+ {
187
+ "id": "finish",
188
+ "name": "Finish",
189
+ "description": "All acceptance criteria met. Stamp a short summary and report DONE.",
190
+ "prompt": "Every acceptance criterion passed. Write a one-paragraph DONE summary to task notes via `write_task_note`: what was built, the deliverable path(s), and a one-line confirmation that each criterion is met. Then report DONE.",
191
+ "suggestedRole": "developer",
192
+ "terminal": true
193
+ }
194
+ ],
195
+ "version": "1.2.0",
196
+ "releasedAt": "2026-08-10T00:00:00Z"
197
+ }
@@ -0,0 +1,176 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "title": "Playable single-file arcade-game workflow",
4
+ "objective": "Run the HTML Arcade Game craftbook and verify concrete game/visual design artifacts precede a complete playable canvas game with end state and restart behavior.",
5
+ "tags": [
6
+ "html-game",
7
+ "workflow"
8
+ ],
9
+ "prompt": "Use the HTML Arcade Game craftbook. Read workspace `source/game-brief.md`, then build workspace `index.html` as a self-contained canvas game called Returns Rush. The player moves a sorting cart left/right, catches accepted parcels for points, avoids exception parcels that cost a life, wins at 10 points, loses at zero lives, and can restart in-page after either end state. Use keyboard controls, a visible score/lives HUD, inline CSS/JS, and no external assets. Complete game-design and visual-design artifacts before implementation.",
10
+ "setup": {
11
+ "projectName": "HTML Arcade Game Eval",
12
+ "about": "Self-contained workflow eval for the HTML Arcade Game craftbook. The brief is in the workspace, design deliverables belong in artifacts, and the playable game belongs at workspace/index.html.",
13
+ "missionObjectives": "Ship a playable Returns Rush canvas game with real input, score/lives state, win and lose states, restart behavior, visual feedback, and no external dependencies.",
14
+ "files": [
15
+ {
16
+ "path": "source/game-brief.md",
17
+ "content": "# Returns Rush Game Brief\n\nTheme: a busy returns desk sorting accepted parcels from exception parcels.\n\nRequired mechanics:\n- Move a sorting cart left and right with ArrowLeft/ArrowRight (A/D may also work).\n- Accepted parcels add one point.\n- Exception parcels remove one life.\n- Start with three lives.\n- Win at 10 points and lose at zero lives.\n- Show score, lives, controls, and current state on screen.\n- After win or game over, an in-page control restarts a fresh round.\n- Keep the game self-contained in one index.html with no network assets.\n"
18
+ }
19
+ ],
20
+ "worker": {
21
+ "name": "Jules",
22
+ "role": "Developer"
23
+ }
24
+ },
25
+ "mocks": [],
26
+ "success": {
27
+ "summary": "A craftbook task records game/visual designs and ships a parseable, substantial Returns Rush game with input, end states, and restart behavior.",
28
+ "deliverables": [
29
+ {
30
+ "path": "index.html",
31
+ "kind": "html-game",
32
+ "minBytes": 4200,
33
+ "checks": [
34
+ {
35
+ "kind": "cssMinBytes",
36
+ "bytes": 600,
37
+ "file": "index.html"
38
+ },
39
+ {
40
+ "kind": "jsParses",
41
+ "file": "index.html"
42
+ },
43
+ {
44
+ "kind": "contains",
45
+ "file": "index.html",
46
+ "pattern": "<canvas\\b",
47
+ "flags": "i"
48
+ },
49
+ {
50
+ "kind": "contains",
51
+ "file": "index.html",
52
+ "pattern": "Returns Rush|returns desk",
53
+ "flags": "i"
54
+ },
55
+ {
56
+ "kind": "contains",
57
+ "file": "index.html",
58
+ "pattern": "ArrowLeft|ArrowRight|keydown"
59
+ },
60
+ {
61
+ "kind": "contains",
62
+ "file": "index.html",
63
+ "pattern": "score[\\s\\S]*lives|lives[\\s\\S]*score",
64
+ "flags": "i"
65
+ },
66
+ {
67
+ "kind": "contains",
68
+ "file": "index.html",
69
+ "pattern": "game\\s*-?\\s*over|you\\s+(?:win|lose)|victory|defeat",
70
+ "flags": "i"
71
+ },
72
+ {
73
+ "kind": "contains",
74
+ "file": "index.html",
75
+ "pattern": "restart|play\\s*again|new\\s*game|try\\s*again",
76
+ "flags": "i"
77
+ },
78
+ {
79
+ "kind": "contains",
80
+ "file": "index.html",
81
+ "pattern": "requestAnimationFrame"
82
+ }
83
+ ]
84
+ }
85
+ ],
86
+ "checks": [
87
+ {
88
+ "kind": "minBytes",
89
+ "file": "design/game-design.md",
90
+ "bytes": 600,
91
+ "artifact": true
92
+ },
93
+ {
94
+ "kind": "contains",
95
+ "file": "design/game-design.md",
96
+ "pattern": "(?:acceptance|criteria)[\\s\\S]*(?:control|input)[\\s\\S]*(?:win|lose|game over)",
97
+ "flags": "i",
98
+ "artifact": true
99
+ },
100
+ {
101
+ "kind": "minBytes",
102
+ "file": "design/visual-design.md",
103
+ "bytes": 450,
104
+ "artifact": true
105
+ },
106
+ {
107
+ "kind": "contains",
108
+ "file": "design/visual-design.md",
109
+ "pattern": "#[0-9a-f]{3,8}[\\s\\S]*(?:HUD|score|lives)",
110
+ "flags": "i",
111
+ "artifact": true
112
+ }
113
+ ],
114
+ "taskNotes": {
115
+ "minBytes": 160,
116
+ "checks": [
117
+ {
118
+ "kind": "contains",
119
+ "file": "task-notes.md",
120
+ "pattern": "game-design\\.md",
121
+ "flags": "i"
122
+ },
123
+ {
124
+ "kind": "contains",
125
+ "file": "task-notes.md",
126
+ "pattern": "visual-design\\.md",
127
+ "flags": "i"
128
+ },
129
+ {
130
+ "kind": "contains",
131
+ "file": "task-notes.md",
132
+ "pattern": "index\\.html",
133
+ "flags": "i"
134
+ }
135
+ ],
136
+ "requireCraftbookTask": true
137
+ },
138
+ "taskGraph": {
139
+ "requireCraftbookTask": true,
140
+ "requireTerminalStep": true
141
+ },
142
+ "unchangedFixtures": [
143
+ "source/game-brief.md"
144
+ ]
145
+ },
146
+ "rubric": {
147
+ "artifact": {
148
+ "path": "index.html",
149
+ "kind": "html"
150
+ },
151
+ "axes": [
152
+ {
153
+ "name": "playability",
154
+ "description": "Keyboard input moves the player, collisions change score/lives, and a round can reach both win and lose states."
155
+ },
156
+ {
157
+ "name": "completeness",
158
+ "description": "The game includes a real loop, visible HUD, end-state feedback, and a reliable fresh-round restart."
159
+ },
160
+ {
161
+ "name": "visual feedback",
162
+ "description": "The locked palette, readable game objects, HUD hierarchy, and collision/end-state feedback are applied intentionally."
163
+ },
164
+ {
165
+ "name": "workflow evidence",
166
+ "description": "The game and visual design artifacts are concrete and agree with the implementation."
167
+ }
168
+ ]
169
+ },
170
+ "qualityFocus": [
171
+ "craftbook attribution",
172
+ "design-before-build ordering",
173
+ "runtime playability",
174
+ "end-state and restart behavior"
175
+ ]
176
+ }