@bendyline/gilde 0.2.5 → 0.2.6

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 (67) hide show
  1. package/authoring/LICENSE-HankenGrotesk-OFL-1.1.txt +94 -0
  2. package/authoring/LICENSE-PTSerif-OFL-1.1.txt +94 -0
  3. package/authoring/page-demo-bootstrap.js +209 -0
  4. package/authoring/page-demo-injector.mjs +7 -0
  5. package/authoring/page-demo-typography.css +88 -0
  6. package/data/craftbook-templates/ch/character-sheet/versions/1.0.4/craftbook.json +213 -0
  7. package/data/craftbook-templates/ch/character-sheet/versions/1.0.4/test.json +143 -0
  8. package/data/craftbook-templates/ch/character-turnaround/versions/1.0.4/craftbook.json +254 -0
  9. package/data/craftbook-templates/ch/character-turnaround/versions/1.0.4/test.json +189 -0
  10. package/data/craftbook-templates/fa/favicon-set/versions/1.0.5/craftbook.json +282 -0
  11. package/data/craftbook-templates/fa/favicon-set/versions/1.0.5/test.json +94 -0
  12. package/data/craftbook-templates/he/hero-image/versions/1.0.5/craftbook.json +287 -0
  13. package/data/craftbook-templates/he/hero-image/versions/1.0.5/test.json +94 -0
  14. package/data/craftbook-templates/ic/icon-pack/versions/1.0.5/craftbook.json +279 -0
  15. package/data/craftbook-templates/ic/icon-pack/versions/1.0.5/test.json +94 -0
  16. package/data/craftbook-templates/index.json +1 -1
  17. package/data/craftbook-templates/lo/logo-set/versions/1.0.5/craftbook.json +279 -0
  18. package/data/craftbook-templates/lo/logo-set/versions/1.0.5/test.json +94 -0
  19. package/data/craftbook-templates/mo/moodboard/versions/1.0.5/craftbook.json +219 -0
  20. package/data/craftbook-templates/mo/moodboard/versions/1.0.5/test.json +89 -0
  21. package/data/craftbook-templates/pa/page-spread/versions/1.0.4/craftbook.json +214 -0
  22. package/data/craftbook-templates/pa/page-spread/versions/1.0.4/test.json +132 -0
  23. package/data/craftbook-templates/raw-index.json +1 -1
  24. package/data/craftbook-templates/sp/sprite-sheet/versions/1.0.5/craftbook.json +269 -0
  25. package/data/craftbook-templates/sp/sprite-sheet/versions/1.0.5/test.json +94 -0
  26. package/data/craftbook-templates/ti/tileset-batch/versions/1.0.4/craftbook.json +319 -0
  27. package/data/craftbook-templates/ti/tileset-batch/versions/1.0.4/test.json +162 -0
  28. package/data/gezel-templates/il/illustrator/manifest.json +21 -0
  29. package/data/gezel-templates/il/illustrator/versions/1.0.0/about.md +28 -0
  30. package/data/gezel-templates/il/illustrator/versions/1.0.0/manifest.json +9 -0
  31. package/data/gezel-templates/index.json +1 -1
  32. package/data/gezel-templates/raw-index.json +1 -1
  33. package/data/image-models/an/animagine-xl-4/manifest.json +2 -0
  34. package/data/image-models/fl/flux-2-klein-4b-q4/manifest.json +3 -1
  35. package/data/image-models/index.json +1 -1
  36. package/data/image-models/ir/iris-3b-f32/manifest.json +4 -2
  37. package/data/image-models/ir/iris-3b-f32/versions/1.0.2/manifest.json +25 -0
  38. package/data/image-models/kr/krea-2-turbo-q4/manifest.json +2 -0
  39. package/data/image-models/kr/krea-2-turbo-q6/manifest.json +2 -0
  40. package/data/image-models/kr/krea-2-turbo-q8/manifest.json +2 -0
  41. package/data/image-models/mi/ming-image-0.1-design-bf16/manifest.json +2 -0
  42. package/data/image-models/mi/ming-image-0.1-design-bf16/versions/1.0.2/manifest.json +50 -0
  43. package/data/image-models/mo/moss-image-sft-q4/manifest.json +3 -1
  44. package/data/image-models/mo/moss-image-sft-q4/versions/1.0.0/manifest.json +1 -1
  45. package/data/image-models/mo/moss-image-sft-q4/versions/1.0.1/manifest.json +37 -0
  46. package/data/image-models/raw-index.json +1 -1
  47. package/data/image-models/sd/sd-1.5/manifest.json +2 -0
  48. package/data/image-models/sd/sd-turbo/manifest.json +2 -0
  49. package/data/image-models/sd/sdxl-base-1.0/manifest.json +2 -0
  50. package/data/image-models/sd/sdxl-lightning-4step/manifest.json +2 -0
  51. package/data/image-models/sd/sdxl-turbo/manifest.json +2 -0
  52. package/data/project-types/da/data-analysis/versions/1.0.0/about.md +2 -0
  53. package/data/project-types/da/data-analysis/versions/1.0.0/manifest.json +44 -0
  54. package/data/project-types/da/data-analysis/versions/1.0.0/pages/dashboard.css +5 -8
  55. package/data/project-types/da/data-analysis/versions/1.0.0/pages/dashboard.js +11 -31
  56. package/data/project-types/da/data-analysis/versions/1.0.0/pages/demo.js +9 -0
  57. package/data/project-types/da/data-analysis/versions/1.0.0/pages/index.html +3 -91
  58. package/data/project-types/index.json +1 -1
  59. package/data/project-types/me/media-library/versions/1.0.0/about.md +1 -1
  60. package/data/project-types/me/media-library/versions/1.0.0/manifest.json +53 -0
  61. package/data/project-types/me/media-library/versions/1.0.0/pages/gallery.css +3 -14
  62. package/data/project-types/me/media-library/versions/1.0.0/pages/gallery.js +16 -28
  63. package/data/project-types/me/media-library/versions/1.0.0/pages/index.html +3 -90
  64. package/data/project-types/raw-index.json +1 -1
  65. package/package.json +3 -2
  66. package/schemas/image-model-identity.schema.json +10 -0
  67. package/schemas/project-type-version.schema.json +40 -0
@@ -0,0 +1,279 @@
1
+ {
2
+ "id": "logo-set",
3
+ "name": "Logo & Variant Set",
4
+ "description": "Generate a coherent logo and the full set of variants a real brand needs — primary mark, horizontal lockup, stacked lockup, icon-only/favicon, plus light-on-dark and monochrome versions — from a written brief. Lock the brief (concept, geometry, palette, typography, do/don'ts) BEFORE generating pixels so every variant shares one visual DNA instead of looking like five unrelated logos; then assemble them into a delivered folder with a contact sheet. Covers logo design, brand mark, wordmark, logo variations, and brand-asset packs.\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. Logo brief (visual-designer) — lock concept, geometry, palette, type, and the variant list → gated on artifact `{{workPath}}/brief.md` (markdown-notes)\n2. Generate the marks (image-generator) — produce every variant to the locked brief → gated on `assets` (image-set)\n3. Assemble the delivery (developer) — contact sheet + usage page tying the set together → gated on `index.html` (html-page)\n\nThe gates never advance with an unmet criterion, and loop back to the\nowning phase to fix named gaps.\n",
5
+ "entryStepId": "brief",
6
+ "triggers": [
7
+ "design a logo",
8
+ "make a logo set",
9
+ "logo variants",
10
+ "brand mark",
11
+ "logo with variations"
12
+ ],
13
+ "paramSchema": {
14
+ "type": "object",
15
+ "properties": {
16
+ "workPath": {
17
+ "type": "string",
18
+ "title": "Working folder",
19
+ "description": "Per-task working folder in the artifacts drawer. Defaults to this task's own folder so runs never collide; override with a stable name when you deliberately want runs to share files.",
20
+ "default": "{{task.dir}}"
21
+ }
22
+ }
23
+ },
24
+ "steps": [
25
+ {
26
+ "id": "brief",
27
+ "name": "Logo brief",
28
+ "description": "lock concept, geometry, palette, type, and the variant list",
29
+ "prompt": "1) Capture the brand essence in one sentence (what it is, the feeling). 2) Decide the core concept and geometry of the mark (e.g. 'abstract folded ribbon', 'monoline fox head') — concrete enough to redraw. 3) Lock the palette with exact hex values and the type treatment for any wordmark. 4) Enumerate the EXACT variant list to produce: primary, horizontal lockup, stacked lockup, icon-only, monochrome (black), and reversed (white on dark) — name each output filename. 5) Write do/don't rules (clear-space, what not to recolor). 6) Write an acceptance-criteria checklist: 'all variants share the same core mark', 'palette is exactly <hex list>', 'icon-only is legible at 32px', 'reversed version works on a dark background', 'at least 5 variant files are produced'. 7) Record everything via write_task_note AND to {{workPath}}/brief.md. No pixels yet — this is the single source of truth all variants must obey.\n\nThe deliverable `{{workPath}}/brief.md` lands in the project's artifacts drawer — write it with `write_artifact` and read it back with `read_artifact`; the shipped workspace stays untouched.",
30
+ "suggestedRole": "visual-designer",
31
+ "toolPolicy": {
32
+ "disallowBuiltinToolsets": [
33
+ "ai-apps",
34
+ "archives",
35
+ "audio",
36
+ "browser-automation",
37
+ "code-execution",
38
+ "craftbooks",
39
+ "data-tables",
40
+ "entity-intel",
41
+ "git",
42
+ "image-intel",
43
+ "images",
44
+ "role-delegation",
45
+ "role-delegation-escalation",
46
+ "security-intel",
47
+ "team-management",
48
+ "videos",
49
+ "web",
50
+ "workspace-fs-write"
51
+ ],
52
+ "outputMedium": "artifact",
53
+ "additionalOutputMedia": [
54
+ "task-note"
55
+ ]
56
+ },
57
+ "advanceWhen": {
58
+ "file": "{{workPath}}/brief.md",
59
+ "minBytes": 1,
60
+ "sniff": "nonempty",
61
+ "artifact": true
62
+ },
63
+ "gate": {
64
+ "at": "completion",
65
+ "checks": [
66
+ {
67
+ "kind": "minBytes",
68
+ "file": "{{workPath}}/brief.md",
69
+ "bytes": 120,
70
+ "artifact": true
71
+ },
72
+ {
73
+ "kind": "sniff",
74
+ "file": "{{workPath}}/brief.md",
75
+ "sniff": "nonempty",
76
+ "artifact": true
77
+ }
78
+ ],
79
+ "onReject": "brief",
80
+ "maxAttempts": 3
81
+ },
82
+ "next": "generate"
83
+ },
84
+ {
85
+ "id": "generate",
86
+ "name": "Generate the marks",
87
+ "description": "produce every variant to the locked brief",
88
+ "prompt": "1) Read brief.md. 2) Using the image-generation capability (or hand-authored SVG if no image model is available), produce the PRIMARY mark first and treat it as the master. 3) Derive each remaining variant FROM the primary so geometry and proportions stay identical — horizontal lockup, stacked lockup, icon-only crop, monochrome black, reversed white-on-dark. 4) Honor the exact palette hex values; the monochrome and reversed versions are recolors of the same shape, not redesigns. 5) Save each into the assets/ directory with the filenames named in the brief (e.g. primary.svg, horizontal.svg, icon.svg, mono.svg, reversed.svg). 6) Sanity-check the icon at small size — it must read at 32px. Good looks like: 5+ files that are unmistakably the same logo in different configurations.",
89
+ "suggestedRole": "image-generator",
90
+ "toolPolicy": {
91
+ "disallowBuiltinToolsets": [
92
+ "ai-apps",
93
+ "archives",
94
+ "audio",
95
+ "browser-automation",
96
+ "code-execution",
97
+ "craftbooks",
98
+ "data-tables",
99
+ "entity-intel",
100
+ "git",
101
+ "image-intel",
102
+ "role-delegation",
103
+ "role-delegation-escalation",
104
+ "security-intel",
105
+ "team-management",
106
+ "videos",
107
+ "web"
108
+ ],
109
+ "outputMedium": "workspace"
110
+ },
111
+ "advanceWhen": {
112
+ "file": "assets",
113
+ "minBytes": 1,
114
+ "sniff": "nonempty"
115
+ },
116
+ "gate": {
117
+ "at": "completion",
118
+ "checks": [
119
+ {
120
+ "kind": "fileCount",
121
+ "ext": [
122
+ "png",
123
+ "jpg",
124
+ "jpeg",
125
+ "svg",
126
+ "webp"
127
+ ],
128
+ "min": 3,
129
+ "dir": "assets"
130
+ }
131
+ ],
132
+ "onReject": "generate",
133
+ "maxAttempts": 3
134
+ },
135
+ "next": "assemble"
136
+ },
137
+ {
138
+ "id": "assemble",
139
+ "name": "Assemble the delivery",
140
+ "description": "contact sheet + usage page tying the set together",
141
+ "prompt": "1) Build a single index.html contact sheet that displays every variant on appropriate backgrounds (light variants on white, the reversed variant on a dark panel) at multiple sizes including a tiny 32px row to prove favicon legibility. 2) Include a short usage section restating the palette hex, clear-space, and the do/don'ts from the brief. 3) Reference the real files in assets/ (relative paths) so the page renders the actual marks. 4) On a loop-back, fix only the named gaps (missing variant, wrong background, broken reference). 5) write_task_note the contact-sheet path and the list of variant files. Good looks like: one page a client could approve from, showing the whole coherent set in context.",
142
+ "suggestedRole": "developer",
143
+ "toolPolicy": {
144
+ "disallowBuiltinToolsets": [
145
+ "ai-apps",
146
+ "archives",
147
+ "artifacts",
148
+ "audio",
149
+ "browser-automation",
150
+ "code-execution",
151
+ "craftbooks",
152
+ "data-tables",
153
+ "entity-intel",
154
+ "git",
155
+ "image-intel",
156
+ "images",
157
+ "role-delegation",
158
+ "role-delegation-escalation",
159
+ "security-intel",
160
+ "team-management",
161
+ "videos",
162
+ "web"
163
+ ],
164
+ "outputMedium": "workspace",
165
+ "additionalOutputMedia": [
166
+ "task-note"
167
+ ]
168
+ },
169
+ "consumes": [
170
+ {
171
+ "file": "assets"
172
+ }
173
+ ],
174
+ "advanceWhen": {
175
+ "file": "index.html",
176
+ "minBytes": 1,
177
+ "sniff": "html-complete"
178
+ },
179
+ "gate": {
180
+ "at": "completion",
181
+ "checks": [
182
+ {
183
+ "kind": "minBytes",
184
+ "file": "index.html",
185
+ "bytes": 800
186
+ },
187
+ {
188
+ "kind": "htmlLint",
189
+ "file": "index.html"
190
+ }
191
+ ],
192
+ "scripts": [
193
+ {
194
+ "name": "checkHtmlComplete",
195
+ "scope": "standard",
196
+ "inputs": {
197
+ "file": "index.html"
198
+ }
199
+ }
200
+ ],
201
+ "onReject": "assemble",
202
+ "maxAttempts": 4
203
+ },
204
+ "next": "evaluate"
205
+ },
206
+ {
207
+ "id": "evaluate",
208
+ "name": "Evaluate",
209
+ "description": "Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.",
210
+ "prompt": "1) Open assets/ and confirm at least 5 variant files exist matching the brief's filenames (PASS/FAIL). 2) Open index.html and visually verify each variant renders, including the reversed mark on a dark panel and the 32px icon row. 3) Check coherence: do all variants read as the SAME mark (same geometry/concept)? 4) Check the palette matches the brief's exact hex list. 5) Confirm the icon is legible at 32px. 6) Write PASS/FAIL per criterion. Any FAIL → loop back to generate (for missing/wrong marks) or assemble (for presentation issues).\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: \"assemble\" })` 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.",
211
+ "suggestedRole": "reviewer",
212
+ "toolPolicy": {
213
+ "disallowBuiltinToolsets": [
214
+ "ai-apps",
215
+ "archives",
216
+ "artifacts",
217
+ "audio",
218
+ "browser-automation",
219
+ "code-execution",
220
+ "craftbooks",
221
+ "data-tables",
222
+ "entity-intel",
223
+ "git",
224
+ "image-intel",
225
+ "images",
226
+ "role-delegation",
227
+ "role-delegation-escalation",
228
+ "security-intel",
229
+ "team-management",
230
+ "videos",
231
+ "web",
232
+ "workspace-fs-write"
233
+ ],
234
+ "outputMedium": "task-note"
235
+ },
236
+ "consumes": [
237
+ {
238
+ "file": "index.html"
239
+ }
240
+ ],
241
+ "next": "assemble"
242
+ },
243
+ {
244
+ "id": "finish",
245
+ "name": "Finish",
246
+ "description": "All acceptance criteria met. Stamp a short summary and report DONE.",
247
+ "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.",
248
+ "suggestedRole": "developer",
249
+ "toolPolicy": {
250
+ "disallowBuiltinToolsets": [
251
+ "ai-apps",
252
+ "archives",
253
+ "artifacts",
254
+ "audio",
255
+ "browser-automation",
256
+ "code-execution",
257
+ "craftbooks",
258
+ "data-tables",
259
+ "entity-intel",
260
+ "git",
261
+ "image-intel",
262
+ "images",
263
+ "role-delegation",
264
+ "role-delegation-escalation",
265
+ "security-intel",
266
+ "team-management",
267
+ "videos",
268
+ "web",
269
+ "workspace-fs-write"
270
+ ],
271
+ "outputMedium": "task-note"
272
+ },
273
+ "terminal": true
274
+ }
275
+ ],
276
+ "version": "1.0.5",
277
+ "releasedAt": "2026-10-19T00:00:00Z",
278
+ "minGezelVersion": "1.26233"
279
+ }
@@ -0,0 +1,94 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "mode": "workflow",
4
+ "title": "Logo & Variant Set workflow processability",
5
+ "objective": "Prove that a medium local model can parse and execute the Logo & Variant Set craftbook, satisfy its declared runtime gates, and reach a terminal step using only local fixtures.",
6
+ "tags": [
7
+ "media"
8
+ ],
9
+ "prompt": "Use the `logo-set` (Logo & Variant Set) craftbook for this self-contained local evaluation. Open `source/craftbook-eval-brief.md` first, then follow the craftbook's actual steps and gates through its terminal step. Complete this request: Generate a coherent logo and the full set of variants a real brand needs — primary mark, horizontal lockup, stacked lockup, icon-only/favicon, plus light-on-dark and monochrome versions — from a written brief. Lock the brief (concept, geometry, palette, typography, do/don'ts) BEFORE generating pixels so every variant shares one visual DNA instead of looking like five unrelated logos; then assemble them into a delivered folder with a contact sheet. Covers logo design, brand mark, wordmark, logo variations, and brand-asset packs.\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. Logo brief (visual-designer) — lock concept, geometry, palette, type, and the variant list → gated on artifact `{{workPath}}/brief.md` (markdown-notes)\n2. Generate the marks (image-generator) — produce every variant to the locked brief → gated on `assets` (image-set)\n3. Assemble the delivery (developer) — contact sheet + usage page tying the set together → gated on `index.html` (html-page)\n\nThe gates never advance with an unmet criterion, and loop back to the\nowning phase to fix named gaps.\n Produce `brief.md` in this task's artifact working folder, `assets`, `index.html`. Use only seeded project files and installed local simulators. Do not call a real external service, fetch live data, or claim an external side effect occurred; an explicit dry-run record is the correct result when a dependency is unavailable.",
10
+ "setup": {
11
+ "projectName": "Logo & Variant Set Workflow Eval",
12
+ "about": "A hermetic workflow evaluation for the Logo & Variant Set craftbook. No live dependency or external network is authorized.",
13
+ "missionObjectives": "Run the Logo & Variant Set craftbook end to end, use the local evaluation brief and fixtures as truth, produce its declared outputs, and reach a terminal step without fabricating external effects.",
14
+ "managedWorkspaceWritePolicy": "allow",
15
+ "files": [
16
+ {
17
+ "path": "source/craftbook-eval-brief.md",
18
+ "content": "# Logo & Variant Set — local evaluation brief\n\nThis is a hermetic processability evaluation of the `logo-set` craftbook.\nDo not contact real services, use real credentials, or fetch live data. Treat\nthe project fixtures and installed local simulators as authoritative. If a\ndependency is intentionally unavailable, document an honest dry run instead\nof claiming a real side effect.\n\n## Request\n\nGenerate a coherent logo and the full set of variants a real brand needs — primary mark, horizontal lockup, stacked lockup, icon-only/favicon, plus light-on-dark and monochrome versions — from a written brief. Lock the brief (concept, geometry, palette, typography, do/don'ts) BEFORE generating pixels so every variant shares one visual DNA instead of looking like five unrelated logos; then assemble them into a delivered folder with a contact sheet. Covers logo design, brand mark, wordmark, logo variations, and brand-asset packs.\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. Logo brief (visual-designer) — lock concept, geometry, palette, type, and the variant list → gated on artifact `{{workPath}}/brief.md` (markdown-notes)\n2. Generate the marks (image-generator) — produce every variant to the locked brief → gated on `assets` (image-set)\n3. Assemble the delivery (developer) — contact sheet + usage page tying the set together → gated on `index.html` (html-page)\n\nThe gates never advance with an unmet criterion, and loop back to the\nowning phase to fix named gaps.\n\n\n## Required workflow\n\n1. Logo brief\n2. Generate the marks\n3. Assemble the delivery\n4. Evaluate\n5. Finish (terminal)\n\n## Declared outputs\n\n- `brief.md` in this task's artifact working folder\n- `assets`\n- `index.html`\n"
19
+ },
20
+ {
21
+ "path": "source/brief.md",
22
+ "content": "# Logo & Variant Set Eval Brief\n\nClient: Boreal Desk, a home-office accessories company.\nAudience: operations leads who need an artifact they can use this week.\n\nFixed source facts for grounding:\n- The returns desk pilot covered 18 SKUs.\n- Median first response improved from 18 hours to 6 hours.\n- Preventable refund leakage fell from 14.2% to 8.9%.\n- The top unresolved complaint is status silence after photo submission.\n- Required next actions are automated status emails, barcode-exception training, and a weekly Finance exception export.\n\nUse these facts when the task asks for prose, analysis, copy, UI content, or test data. Do not use live web services, real credentials, or current outside data.\n\nCraftbook under test: logo-set - Logo & Variant Set.\n"
23
+ },
24
+ {
25
+ "path": "source/media-index.csv",
26
+ "content": "filename,type,duration_or_size,notes\npilot-interview.wav,audio,00:02:15,mentions response time and status silence\nreturns-desk.png,image,1600x900,shows intake form and photo evidence step\nlaunch-clip.mp4,video,00:01:05,shows barcode exception handling\n"
27
+ }
28
+ ],
29
+ "worker": {
30
+ "name": "Craftbook Runner",
31
+ "role": "Workflow Operator",
32
+ "about": "Execute the assigned craftbook exactly. Read local fixtures, satisfy each runtime gate, record honest dry-run evidence for unavailable dependencies, and continue until a terminal step is active or the task is complete."
33
+ }
34
+ },
35
+ "mocks": [],
36
+ "success": {
37
+ "summary": "The attributed logo-set task satisfied its own gates, produced its declared outputs, and reached a terminal step without using external services.",
38
+ "deliverables": [
39
+ {
40
+ "path": "{{task.dir}}/brief.md",
41
+ "kind": "markdown-report",
42
+ "artifact": true,
43
+ "minBytes": 120
44
+ },
45
+ {
46
+ "path": "assets",
47
+ "kind": "generic-file",
48
+ "minBytes": 1
49
+ },
50
+ {
51
+ "path": "index.html",
52
+ "kind": "html-page",
53
+ "minBytes": 800
54
+ }
55
+ ],
56
+ "taskGraph": {
57
+ "requireCraftbookTask": true,
58
+ "requireTerminalStep": true
59
+ }
60
+ },
61
+ "rubric": {
62
+ "artifact": {
63
+ "path": "{{task.dir}}/brief.md",
64
+ "kind": "markdown"
65
+ },
66
+ "axes": [
67
+ {
68
+ "name": "workflow fidelity",
69
+ "description": "The result reflects the named craftbook sequence and its declared acceptance gates rather than a freehand substitute."
70
+ },
71
+ {
72
+ "name": "usefulness",
73
+ "description": "The deliverable is coherent, actionable, and suitable for the craftbook purpose stated in the local brief."
74
+ }
75
+ ],
76
+ "contextNote": "Advisory only. Deterministic pass/fail comes from the craftbook runtime gates, deliverable existence, attribution, and terminal progress."
77
+ },
78
+ "qualityFocus": [
79
+ "real logo-set craftbook task attribution",
80
+ "declared runtime gate satisfaction",
81
+ "terminal workflow progress",
82
+ "offline fixture and simulator discipline"
83
+ ],
84
+ "extensions": {
85
+ "legacySimulators": [
86
+ {
87
+ "id": "logo-set-media-fixtures",
88
+ "kind": "data-source",
89
+ "status": "implemented",
90
+ "description": "Seeded local media index replacing real audio, video, image generation, and external media metadata services."
91
+ }
92
+ ]
93
+ }
94
+ }
@@ -0,0 +1,219 @@
1
+ {
2
+ "id": "moodboard",
3
+ "name": "Visual Moodboard",
4
+ "description": "Compose a visual moodboard that captures a direction — palette, textures, type vibe, imagery, and reference tiles — from a written brief, so a team can align on a look before any production work begins. Lock the brief and the explicit dimensions of the mood (e.g. 'warm/editorial/handmade' vs 'cool/technical/precise') FIRST, then assemble a coherent grid of generated or sourced tiles plus a swatch strip and keyword callouts. Covers moodboards, style boards, visual direction, design inspiration, brand mood, and look-and-feel exploration.\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. Moodboard brief (visual-designer) — lock the mood dimensions, palette, and tile plan → gated on artifact `{{workPath}}/brief.md` (markdown-notes)\n2. Assemble the board (image-generator) — compose the coherent tile grid into one deliverable → gated on `index.html` (html-page)\n\nThe gates never advance with an unmet criterion, and loop back to the\nowning phase to fix named gaps.\n",
5
+ "entryStepId": "brief",
6
+ "triggers": [
7
+ "make a moodboard",
8
+ "create a style board",
9
+ "visual direction board",
10
+ "design inspiration board",
11
+ "look and feel board"
12
+ ],
13
+ "paramSchema": {
14
+ "type": "object",
15
+ "properties": {
16
+ "workPath": {
17
+ "type": "string",
18
+ "title": "Working folder",
19
+ "description": "Per-task working folder in the artifacts drawer. Defaults to this task's own folder so runs never collide; override with a stable name when you deliberately want runs to share files.",
20
+ "default": "{{task.dir}}"
21
+ }
22
+ }
23
+ },
24
+ "steps": [
25
+ {
26
+ "id": "brief",
27
+ "name": "Moodboard brief",
28
+ "description": "lock the mood dimensions, palette, and tile plan",
29
+ "prompt": "1) Distill the direction into 3-5 mood keywords (e.g. warm, editorial, handmade, calm). 2) Lock a palette with hex swatches and the type vibe (serif/sans, weight, feeling). 3) Plan the tile grid: enumerate the tiles you'll include — e.g. 2-3 imagery tiles, a texture tile, a typography specimen tile, a palette strip — and what each should evoke. 4) Note explicit anti-references (what this is NOT) so the board has a point of view. 5) Write an acceptance-criteria checklist: 'board expresses the 3-5 keywords', 'palette swatches show exact hex', 'a typography specimen is present', 'tiles are cohesive (one direction, not a scrapbook)', 'at least 6 tiles'. 6) Record brief + checklist via write_task_note AND to {{workPath}}/brief.md. No assembly yet.\n\nThe deliverable `{{workPath}}/brief.md` lands in the project's artifacts drawer — write it with `write_artifact` and read it back with `read_artifact`; the shipped workspace stays untouched.",
30
+ "suggestedRole": "visual-designer",
31
+ "toolPolicy": {
32
+ "disallowBuiltinToolsets": [
33
+ "ai-apps",
34
+ "archives",
35
+ "audio",
36
+ "browser-automation",
37
+ "code-execution",
38
+ "craftbooks",
39
+ "data-tables",
40
+ "entity-intel",
41
+ "git",
42
+ "image-intel",
43
+ "images",
44
+ "role-delegation",
45
+ "role-delegation-escalation",
46
+ "security-intel",
47
+ "team-management",
48
+ "videos",
49
+ "web",
50
+ "workspace-fs-write"
51
+ ],
52
+ "outputMedium": "artifact",
53
+ "additionalOutputMedia": [
54
+ "task-note"
55
+ ]
56
+ },
57
+ "advanceWhen": {
58
+ "file": "{{workPath}}/brief.md",
59
+ "minBytes": 1,
60
+ "sniff": "nonempty",
61
+ "artifact": true
62
+ },
63
+ "gate": {
64
+ "at": "completion",
65
+ "checks": [
66
+ {
67
+ "kind": "minBytes",
68
+ "file": "{{workPath}}/brief.md",
69
+ "bytes": 120,
70
+ "artifact": true
71
+ },
72
+ {
73
+ "kind": "sniff",
74
+ "file": "{{workPath}}/brief.md",
75
+ "sniff": "nonempty",
76
+ "artifact": true
77
+ }
78
+ ],
79
+ "onReject": "brief",
80
+ "maxAttempts": 3
81
+ },
82
+ "next": "assemble"
83
+ },
84
+ {
85
+ "id": "assemble",
86
+ "name": "Assemble the board",
87
+ "description": "compose the coherent tile grid into one deliverable",
88
+ "prompt": "1) Read brief.md. 2) Generate or compose each planned tile to express the locked keywords and palette — imagery tiles via the image-generation capability (or curated solid/gradient/texture blocks if no image model is available), a swatch strip rendering the exact hex values, and a type specimen tile showing the chosen pairing with sample words. 3) Assemble everything into ONE deliverable: a single index.html grid (preferred — easy to render and tweak) laying out at least 6 cohesive tiles with the keyword list as a caption. 4) Keep the direction tight: every tile should feel like the same world. 5) Reference any generated files from assets/ if produced. 6) write_task_note the board path and tile count. Good looks like: someone could brief a designer from this board alone.",
89
+ "suggestedRole": "image-generator",
90
+ "toolPolicy": {
91
+ "disallowBuiltinToolsets": [
92
+ "ai-apps",
93
+ "archives",
94
+ "audio",
95
+ "browser-automation",
96
+ "code-execution",
97
+ "craftbooks",
98
+ "data-tables",
99
+ "entity-intel",
100
+ "git",
101
+ "image-intel",
102
+ "role-delegation",
103
+ "role-delegation-escalation",
104
+ "security-intel",
105
+ "team-management",
106
+ "videos",
107
+ "web"
108
+ ],
109
+ "outputMedium": "workspace",
110
+ "additionalOutputMedia": [
111
+ "task-note"
112
+ ]
113
+ },
114
+ "advanceWhen": {
115
+ "file": "index.html",
116
+ "minBytes": 1,
117
+ "sniff": "html-complete"
118
+ },
119
+ "gate": {
120
+ "at": "completion",
121
+ "checks": [
122
+ {
123
+ "kind": "minBytes",
124
+ "file": "index.html",
125
+ "bytes": 800
126
+ },
127
+ {
128
+ "kind": "htmlLint",
129
+ "file": "index.html"
130
+ }
131
+ ],
132
+ "scripts": [
133
+ {
134
+ "name": "checkHtmlComplete",
135
+ "scope": "standard",
136
+ "inputs": {
137
+ "file": "index.html"
138
+ }
139
+ }
140
+ ],
141
+ "onReject": "assemble",
142
+ "maxAttempts": 4
143
+ },
144
+ "next": "evaluate"
145
+ },
146
+ {
147
+ "id": "evaluate",
148
+ "name": "Evaluate",
149
+ "description": "Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.",
150
+ "prompt": "1) Open index.html and confirm it renders a grid of at least 6 tiles (PASS/FAIL). 2) Check it expresses the 3-5 mood keywords from brief.md — is the direction legible and cohesive, not a random scrapbook (PASS/FAIL)? 3) Confirm a palette swatch strip shows the exact hex values and a typography specimen is present. 4) Verify any referenced image files actually load. 5) Write PASS/FAIL per criterion. Incoherent/off-brief → loop back to assemble.\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: \"assemble\" })` 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.",
151
+ "suggestedRole": "reviewer",
152
+ "toolPolicy": {
153
+ "disallowBuiltinToolsets": [
154
+ "ai-apps",
155
+ "archives",
156
+ "artifacts",
157
+ "audio",
158
+ "browser-automation",
159
+ "code-execution",
160
+ "craftbooks",
161
+ "data-tables",
162
+ "entity-intel",
163
+ "git",
164
+ "image-intel",
165
+ "images",
166
+ "role-delegation",
167
+ "role-delegation-escalation",
168
+ "security-intel",
169
+ "team-management",
170
+ "videos",
171
+ "web",
172
+ "workspace-fs-write"
173
+ ],
174
+ "outputMedium": "task-note"
175
+ },
176
+ "consumes": [
177
+ {
178
+ "file": "index.html"
179
+ }
180
+ ],
181
+ "next": "assemble"
182
+ },
183
+ {
184
+ "id": "finish",
185
+ "name": "Finish",
186
+ "description": "All acceptance criteria met. Stamp a short summary and report DONE.",
187
+ "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.",
188
+ "suggestedRole": "developer",
189
+ "toolPolicy": {
190
+ "disallowBuiltinToolsets": [
191
+ "ai-apps",
192
+ "archives",
193
+ "artifacts",
194
+ "audio",
195
+ "browser-automation",
196
+ "code-execution",
197
+ "craftbooks",
198
+ "data-tables",
199
+ "entity-intel",
200
+ "git",
201
+ "image-intel",
202
+ "images",
203
+ "role-delegation",
204
+ "role-delegation-escalation",
205
+ "security-intel",
206
+ "team-management",
207
+ "videos",
208
+ "web",
209
+ "workspace-fs-write"
210
+ ],
211
+ "outputMedium": "task-note"
212
+ },
213
+ "terminal": true
214
+ }
215
+ ],
216
+ "version": "1.0.5",
217
+ "releasedAt": "2026-10-19T00:00:00Z",
218
+ "minGezelVersion": "1.26233"
219
+ }