@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,189 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "title": "Character Turnaround — the knight from all sides, seeds kept",
4
+ "objective": "Measure whether the character-turnaround craftbook produces front, side, back, and three-quarter views of one consistent figure and records every view in the manifest with the seed and prompt that made it — paths real, ids unique.",
5
+ "tags": [
6
+ "data"
7
+ ],
8
+ "prompt": "can you do a full turnaround for the knight charcter? we'll need it for the sprite work later",
9
+ "setup": {
10
+ "projectName": "Foxglove Platformer Assets",
11
+ "about": "Asset foundry project. The library's records live at workspace/assets/manifest.json (a JSON array, one record per asset) and the style anchor at workspace/assets/style.md. The knight's turnaround lands in workspace/assets/characters/knight; the summary goes to workspace/report.md.",
12
+ "missionObjectives": "One figure, four angles, reproducible later: every view generated against the style anchor and recorded with its seed and prompt, and no manifest record pointing at a file that is not there. No live services, no real credentials.",
13
+ "files": [
14
+ {
15
+ "path": "assets/style.md",
16
+ "content": "# Asset library style anchor\n\n- Character art: 96x128 pixel figures, heroic proportion (5 heads tall).\n- Palette: iron gray #6e7681, brass trim #b08d3f, cloak red #7a2e2e,\n highlight cream #e8dcb8, outline near-black #22201c.\n- Look: chunky 2px outlines, flat interior shading, one highlight edge\n top-left. No gradients, no anti-aliased edges.\n- Turnarounds: assets/characters/<name>/<angle>.png — front, side, back,\n three-quarter — same figure, same scale, same palette in every view.\n- Every shipped asset gets a manifest record: id, file, size, tags,\n seed, prompt — the seed and prompt are how the next sprite stays in style.\n"
17
+ },
18
+ {
19
+ "path": "assets/manifest.json",
20
+ "content": "[\n {\n \"id\": \"tile-stone-01\",\n \"file\": \"assets/tiles/tile-stone-01.png\",\n \"size\": \"32x32\",\n \"tags\": [\n \"stone\",\n \"ground\"\n ]\n },\n {\n \"id\": \"banner-keep\",\n \"file\": \"assets/banners/banner-keep.png\",\n \"size\": \"64x96\",\n \"tags\": [\n \"banner\",\n \"keep\"\n ]\n }\n]\n"
21
+ },
22
+ {
23
+ "path": "assets/tiles/tile-stone-01.png",
24
+ "content": "placeholder tile image: stone ground\n"
25
+ },
26
+ {
27
+ "path": "assets/banners/banner-keep.png",
28
+ "content": "placeholder banner image: keep banner\n"
29
+ }
30
+ ],
31
+ "worker": {
32
+ "name": "Ellen",
33
+ "role": "Assetsmid"
34
+ }
35
+ },
36
+ "mocks": [],
37
+ "success": {
38
+ "summary": "assets/characters/knight holds the four turnaround views; the manifest records each with seed and prompt; report.md in this task's own artifacts working folder hands the set to the sprite work.",
39
+ "checks": [
40
+ {
41
+ "kind": "fileCount",
42
+ "ext": [
43
+ "png"
44
+ ],
45
+ "min": 4,
46
+ "dir": "assets/characters/knight"
47
+ }
48
+ ],
49
+ "deliverables": [
50
+ {
51
+ "path": "assets/manifest.json",
52
+ "kind": "json",
53
+ "minBytes": 400,
54
+ "checks": [
55
+ {
56
+ "kind": "sniff",
57
+ "file": "assets/manifest.json",
58
+ "sniff": "json-valid",
59
+ "artifact": true
60
+ },
61
+ {
62
+ "kind": "recordSchema",
63
+ "file": "assets/manifest.json",
64
+ "fields": [
65
+ {
66
+ "name": "id",
67
+ "type": "nonempty"
68
+ },
69
+ {
70
+ "name": "file",
71
+ "type": "nonempty"
72
+ },
73
+ {
74
+ "name": "size",
75
+ "required": false
76
+ },
77
+ {
78
+ "name": "tags",
79
+ "required": false
80
+ },
81
+ {
82
+ "name": "seed",
83
+ "required": false
84
+ },
85
+ {
86
+ "name": "prompt",
87
+ "required": false
88
+ }
89
+ ],
90
+ "minRows": 6,
91
+ "uniqueBy": "id",
92
+ "artifact": true
93
+ },
94
+ {
95
+ "kind": "contains",
96
+ "file": "assets/manifest.json",
97
+ "pattern": "\"seed\"",
98
+ "label": "seeds persisted in the records",
99
+ "artifact": true
100
+ },
101
+ {
102
+ "kind": "contains",
103
+ "file": "assets/manifest.json",
104
+ "pattern": "\"prompt\"",
105
+ "label": "prompts persisted in the records",
106
+ "artifact": true
107
+ },
108
+ {
109
+ "kind": "citationsResolve",
110
+ "file": "assets/manifest.json",
111
+ "pattern": "\"file\"\\s*:\\s*\"([^\"]+)\"",
112
+ "minCitations": 6,
113
+ "label": "every recorded file exists on disk",
114
+ "artifact": true
115
+ }
116
+ ],
117
+ "artifact": true
118
+ },
119
+ {
120
+ "path": "{{task.dir}}/report.md",
121
+ "kind": "markdown-report",
122
+ "minBytes": 600,
123
+ "checks": [
124
+ {
125
+ "kind": "contains",
126
+ "file": "{{task.dir}}/report.md",
127
+ "pattern": "(?:^|\\n)#{1,3}\\s+\\S",
128
+ "flags": "i",
129
+ "artifact": true
130
+ },
131
+ {
132
+ "kind": "contains",
133
+ "file": "{{task.dir}}/report.md",
134
+ "pattern": "front",
135
+ "flags": "i",
136
+ "label": "front view named",
137
+ "artifact": true
138
+ },
139
+ {
140
+ "kind": "contains",
141
+ "file": "{{task.dir}}/report.md",
142
+ "pattern": "side|profile",
143
+ "flags": "i",
144
+ "label": "side view named",
145
+ "artifact": true
146
+ },
147
+ {
148
+ "kind": "contains",
149
+ "file": "{{task.dir}}/report.md",
150
+ "pattern": "back",
151
+ "flags": "i",
152
+ "label": "back view named",
153
+ "artifact": true
154
+ }
155
+ ],
156
+ "artifact": true
157
+ }
158
+ ]
159
+ },
160
+ "rubric": {
161
+ "artifact": {
162
+ "path": "{{task.dir}}/report.md",
163
+ "kind": "markdown"
164
+ },
165
+ "axes": [
166
+ {
167
+ "name": "angle coverage",
168
+ "description": "Front, side, back, and three-quarter are all present at the convention names — a usable model sheet, not a portrait set."
169
+ },
170
+ {
171
+ "name": "consistency",
172
+ "description": "The views read as one figure — same silhouette, proportions, palette, and scale in every view."
173
+ },
174
+ {
175
+ "name": "silhouette readability",
176
+ "description": "The knight reads clearly at sprite distance; the shape survives shrinking."
177
+ },
178
+ {
179
+ "name": "manifest quality",
180
+ "description": "Every view's record carries id, file, seed, and prompt; existing records untouched, ids unique, paths real."
181
+ }
182
+ ]
183
+ },
184
+ "qualityFocus": [
185
+ "one consistent figure",
186
+ "seeds and prompts persisted",
187
+ "manifest honesty"
188
+ ]
189
+ }
@@ -0,0 +1,282 @@
1
+ {
2
+ "id": "favicon-set",
3
+ "name": "Favicon & App-Icon Set",
4
+ "description": "Generate the complete favicon and app-icon set a modern site needs — the multi-size favicon, Apple touch icon, Android/maskable icons, and the web app manifest plus the exact HTML link/meta tags — from a single source mark, ensuring the icon stays legible at 16px and the maskable variant survives platform cropping. Lock FIRST the source mark, the exact size matrix, and the safe-area/padding rules (maskable icons need extra padding or platforms clip them) because favicon sets fail when the icon is illegible tiny or gets cropped on Android; then generate every size and emit the manifest + install snippet. Covers favicons, app icons, PWA icons, touch icons, maskable icons, and the web app manifest.\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. Scope the icon set (planner) — lock source mark, size matrix, and maskable safe-area → gated on artifact `{{workPath}}/scope.md` (markdown-notes)\n2. Generate the icons (image-generator) — render every size, including a safe-area maskable → gated on `assets` (image-set)\n3. Manifest & install snippet (developer) — emit manifest.json and the HTML head snippet → 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": "scope",
6
+ "triggers": [
7
+ "generate a favicon set",
8
+ "make app icons",
9
+ "pwa icons and manifest",
10
+ "apple touch icon",
11
+ "favicon from my logo"
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": "scope",
27
+ "name": "Scope the icon set",
28
+ "description": "lock source mark, size matrix, and maskable safe-area",
29
+ "prompt": "1) Identify the source mark/logo (or a simplified glyph version suited to tiny sizes) and the brand background color. 2) Lock the SIZE MATRIX: favicon 16/32/48 (ICO + PNG), apple-touch-icon 180, Android/PWA 192 and 512, plus a 512 MASKABLE variant. 3) Lock the maskable SAFE-AREA rule: the icon content must sit within the central ~80% (≈10% padding each side) so Android's mask doesn't clip it, with a solid background fill. 4) Decide the manifest fields (name, short_name, theme_color, background_color, icons array with purpose: any/maskable). 5) Write an acceptance-criteria checklist: 'all matrix sizes produced', 'icon is legible at 16px (simplified if needed)', 'maskable variant keeps content in the safe area on a filled background', 'manifest.json is valid and lists every icon with correct sizes/purpose', 'the HTML link/meta snippet references the real files'. 6) Record matrix + rules + checklist via write_task_note AND to {{workPath}}/scope.md.\n\nThe deliverable `{{workPath}}/scope.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": "planner",
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}}/scope.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}}/scope.md",
69
+ "bytes": 120,
70
+ "artifact": true
71
+ },
72
+ {
73
+ "kind": "sniff",
74
+ "file": "{{workPath}}/scope.md",
75
+ "sniff": "nonempty",
76
+ "artifact": true
77
+ }
78
+ ],
79
+ "onReject": "scope",
80
+ "maxAttempts": 3
81
+ },
82
+ "next": "generate"
83
+ },
84
+ {
85
+ "id": "generate",
86
+ "name": "Generate the icons",
87
+ "description": "render every size, including a safe-area maskable",
88
+ "prompt": "1) Read scope.md. 2) Produce each size in the matrix from the source mark, saving into assets/ with conventional names (favicon-16.png, favicon-32.png, apple-touch-icon.png, icon-192.png, icon-512.png, maskable-512.png, and favicon.ico). 3) For the smallest sizes, use the SIMPLIFIED glyph so it stays legible at 16px — fine detail that vanishes tiny must be dropped. 4) For the maskable variant, render the icon within the central safe area on a solid background fill so platform masks (circle/squircle) never clip it. 5) Keep the mark and colors consistent across sizes. 6) Eyeball the 16px and the masked 512 to confirm legibility and no clipping. write_task_note the produced files. Good looks like: a crisp tiny favicon and a maskable icon that survives any crop.",
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": "assets",
116
+ "minBytes": 1,
117
+ "sniff": "nonempty"
118
+ },
119
+ "gate": {
120
+ "at": "completion",
121
+ "checks": [
122
+ {
123
+ "kind": "fileCount",
124
+ "ext": [
125
+ "png",
126
+ "jpg",
127
+ "jpeg",
128
+ "svg",
129
+ "webp"
130
+ ],
131
+ "min": 3,
132
+ "dir": "assets"
133
+ }
134
+ ],
135
+ "onReject": "generate",
136
+ "maxAttempts": 3
137
+ },
138
+ "next": "manifest"
139
+ },
140
+ {
141
+ "id": "manifest",
142
+ "name": "Manifest & install snippet",
143
+ "description": "emit manifest.json and the HTML head snippet",
144
+ "prompt": "1) Write manifest.json with name, short_name, theme_color, background_color, and an icons array entry for each generated icon (src, sizes, type, and purpose: \"any\" or \"maskable\" for the maskable one) — referencing the real files in assets/. 2) Build index.html whose <head> contains the full install snippet: the favicon link tags (ICO + PNG sizes), the apple-touch-icon link, the manifest link, and a theme-color meta — all pointing at the real assets/ paths — and whose body shows a small preview rendering each icon at its native size plus a 16px row. 3) Validate manifest.json parses and every src resolves to a real file. 4) On a loop-back, fix only named gaps (missing icon entry, wrong purpose, broken path). 5) write_task_note the manifest and page paths. The gated deliverable is index.html.",
145
+ "suggestedRole": "developer",
146
+ "toolPolicy": {
147
+ "disallowBuiltinToolsets": [
148
+ "ai-apps",
149
+ "archives",
150
+ "artifacts",
151
+ "audio",
152
+ "browser-automation",
153
+ "code-execution",
154
+ "craftbooks",
155
+ "data-tables",
156
+ "entity-intel",
157
+ "git",
158
+ "image-intel",
159
+ "images",
160
+ "role-delegation",
161
+ "role-delegation-escalation",
162
+ "security-intel",
163
+ "team-management",
164
+ "videos",
165
+ "web"
166
+ ],
167
+ "outputMedium": "workspace",
168
+ "additionalOutputMedia": [
169
+ "task-note"
170
+ ]
171
+ },
172
+ "consumes": [
173
+ {
174
+ "file": "assets"
175
+ }
176
+ ],
177
+ "advanceWhen": {
178
+ "file": "index.html",
179
+ "minBytes": 1,
180
+ "sniff": "html-complete"
181
+ },
182
+ "gate": {
183
+ "at": "completion",
184
+ "checks": [
185
+ {
186
+ "kind": "minBytes",
187
+ "file": "index.html",
188
+ "bytes": 800
189
+ },
190
+ {
191
+ "kind": "htmlLint",
192
+ "file": "index.html"
193
+ }
194
+ ],
195
+ "scripts": [
196
+ {
197
+ "name": "checkHtmlComplete",
198
+ "scope": "standard",
199
+ "inputs": {
200
+ "file": "index.html"
201
+ }
202
+ }
203
+ ],
204
+ "onReject": "manifest",
205
+ "maxAttempts": 4
206
+ },
207
+ "next": "evaluate"
208
+ },
209
+ {
210
+ "id": "evaluate",
211
+ "name": "Evaluate",
212
+ "description": "Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.",
213
+ "prompt": "1) Open assets/ and confirm every matrix size exists (16/32/48, 180, 192, 512, maskable-512, favicon.ico) (PASS/FAIL). 2) Open manifest.json — it parses, theme/background colors set, and every icon listed with correct sizes and purpose (any vs maskable) pointing at real files (PASS/FAIL). 3) Open index.html and verify the head snippet links the favicon, apple-touch-icon, and manifest at real paths; view the 16px preview row — is the icon legible tiny (PASS/FAIL)? 4) Inspect the maskable icon — is content within the safe area on a filled background so it won't clip (PASS/FAIL)? 5) Write PASS/FAIL per criterion. Missing sizes, illegible 16px, clipped maskable, or a broken manifest → loop back to manifest (or generate if an icon is wrong).\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: \"manifest\" })` 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.",
214
+ "suggestedRole": "reviewer",
215
+ "toolPolicy": {
216
+ "disallowBuiltinToolsets": [
217
+ "ai-apps",
218
+ "archives",
219
+ "artifacts",
220
+ "audio",
221
+ "browser-automation",
222
+ "code-execution",
223
+ "craftbooks",
224
+ "data-tables",
225
+ "entity-intel",
226
+ "git",
227
+ "image-intel",
228
+ "images",
229
+ "role-delegation",
230
+ "role-delegation-escalation",
231
+ "security-intel",
232
+ "team-management",
233
+ "videos",
234
+ "web",
235
+ "workspace-fs-write"
236
+ ],
237
+ "outputMedium": "task-note"
238
+ },
239
+ "consumes": [
240
+ {
241
+ "file": "index.html"
242
+ }
243
+ ],
244
+ "next": "manifest"
245
+ },
246
+ {
247
+ "id": "finish",
248
+ "name": "Finish",
249
+ "description": "All acceptance criteria met. Stamp a short summary and report DONE.",
250
+ "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.",
251
+ "suggestedRole": "developer",
252
+ "toolPolicy": {
253
+ "disallowBuiltinToolsets": [
254
+ "ai-apps",
255
+ "archives",
256
+ "artifacts",
257
+ "audio",
258
+ "browser-automation",
259
+ "code-execution",
260
+ "craftbooks",
261
+ "data-tables",
262
+ "entity-intel",
263
+ "git",
264
+ "image-intel",
265
+ "images",
266
+ "role-delegation",
267
+ "role-delegation-escalation",
268
+ "security-intel",
269
+ "team-management",
270
+ "videos",
271
+ "web",
272
+ "workspace-fs-write"
273
+ ],
274
+ "outputMedium": "task-note"
275
+ },
276
+ "terminal": true
277
+ }
278
+ ],
279
+ "version": "1.0.5",
280
+ "releasedAt": "2026-10-19T00:00:00Z",
281
+ "minGezelVersion": "1.26233"
282
+ }
@@ -0,0 +1,94 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "mode": "workflow",
4
+ "title": "Favicon & App-Icon Set workflow processability",
5
+ "objective": "Prove that a medium local model can parse and execute the Favicon & App-Icon 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 `favicon-set` (Favicon & App-Icon 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 the complete favicon and app-icon set a modern site needs — the multi-size favicon, Apple touch icon, Android/maskable icons, and the web app manifest plus the exact HTML link/meta tags — from a single source mark, ensuring the icon stays legible at 16px and the maskable variant survives platform cropping. Lock FIRST the source mark, the exact size matrix, and the safe-area/padding rules (maskable icons need extra padding or platforms clip them) because favicon sets fail when the icon is illegible tiny or gets cropped on Android; then generate every size and emit the manifest + install snippet. Covers favicons, app icons, PWA icons, touch icons, maskable icons, and the web app manifest.\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. Scope the icon set (planner) — lock source mark, size matrix, and maskable safe-area → gated on artifact `{{workPath}}/scope.md` (markdown-notes)\n2. Generate the icons (image-generator) — render every size, including a safe-area maskable → gated on `assets` (image-set)\n3. Manifest & install snippet (developer) — emit manifest.json and the HTML head snippet → 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 `scope.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": "Favicon & App-Icon Set Workflow Eval",
12
+ "about": "A hermetic workflow evaluation for the Favicon & App-Icon Set craftbook. No live dependency or external network is authorized.",
13
+ "missionObjectives": "Run the Favicon & App-Icon 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": "# Favicon & App-Icon Set — local evaluation brief\n\nThis is a hermetic processability evaluation of the `favicon-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 the complete favicon and app-icon set a modern site needs — the multi-size favicon, Apple touch icon, Android/maskable icons, and the web app manifest plus the exact HTML link/meta tags — from a single source mark, ensuring the icon stays legible at 16px and the maskable variant survives platform cropping. Lock FIRST the source mark, the exact size matrix, and the safe-area/padding rules (maskable icons need extra padding or platforms clip them) because favicon sets fail when the icon is illegible tiny or gets cropped on Android; then generate every size and emit the manifest + install snippet. Covers favicons, app icons, PWA icons, touch icons, maskable icons, and the web app manifest.\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. Scope the icon set (planner) — lock source mark, size matrix, and maskable safe-area → gated on artifact `{{workPath}}/scope.md` (markdown-notes)\n2. Generate the icons (image-generator) — render every size, including a safe-area maskable → gated on `assets` (image-set)\n3. Manifest & install snippet (developer) — emit manifest.json and the HTML head snippet → 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. Scope the icon set\n2. Generate the icons\n3. Manifest & install snippet\n4. Evaluate\n5. Finish (terminal)\n\n## Declared outputs\n\n- `scope.md` in this task's artifact working folder\n- `assets`\n- `index.html`\n"
19
+ },
20
+ {
21
+ "path": "source/brief.md",
22
+ "content": "# Favicon & App-Icon 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: favicon-set - Favicon & App-Icon 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 favicon-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}}/scope.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}}/scope.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 favicon-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": "favicon-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
+ }