@bendyline/gilde 0.1.24 → 0.1.25

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 (26) hide show
  1. package/authoring/gstack/evals/cso.json +2 -0
  2. package/authoring/gstack/overlays/cso.json +1 -0
  3. package/authoring/gstack/wave.json +2 -2
  4. package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.1/craftbook.json +358 -0
  5. package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.1/test.json +376 -0
  6. package/data/craftbook-templates/de/design-system-consultation/versions/2.0.1/craftbook.json +385 -0
  7. package/data/craftbook-templates/de/design-system-consultation/versions/2.0.1/test.json +201 -0
  8. package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.1/craftbook.json +353 -0
  9. package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.1/test.json +191 -0
  10. package/data/craftbook-templates/ex/executive-level-review/versions/2.0.1/craftbook.json +347 -0
  11. package/data/craftbook-templates/ex/executive-level-review/versions/2.0.1/test.json +135 -0
  12. package/data/craftbook-templates/id/idea-office-hours/versions/2.0.1/craftbook.json +333 -0
  13. package/data/craftbook-templates/id/idea-office-hours/versions/2.0.1/test.json +141 -0
  14. package/data/craftbook-templates/index.json +1 -1
  15. package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.1/craftbook.json +348 -0
  16. package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.1/test.json +153 -0
  17. package/data/craftbook-templates/se/security-architecture-review/versions/2.0.1/craftbook.json +390 -0
  18. package/data/craftbook-templates/se/security-architecture-review/versions/2.0.1/test.json +154 -0
  19. package/data/craftbook-templates/sp/spec-authoring/versions/2.0.1/craftbook.json +391 -0
  20. package/data/craftbook-templates/sp/spec-authoring/versions/2.0.1/test.json +162 -0
  21. package/data/craftbook-templates/te/technical-documentation/versions/2.0.1/craftbook.json +343 -0
  22. package/data/craftbook-templates/te/technical-documentation/versions/2.0.1/test.json +174 -0
  23. package/package.json +1 -1
  24. package/schemas/craftbook-doc.schema.json +12 -0
  25. package/schemas/craftbook-template-version.schema.json +12 -0
  26. package/schemas/craftbook-test.schema.json +23 -0
@@ -0,0 +1,343 @@
1
+ {
2
+ "id": "technical-documentation",
3
+ "name": "Technical Documentation",
4
+ "description": "Generate a coherent documentation set from a codebase, organized by the Diataxis model (tutorials, how-to guides, reference, explanation), with cross-links and a coverage pass.",
5
+ "basedOn": {
6
+ "name": "gstack",
7
+ "url": "https://github.com/garrytan/gstack"
8
+ },
9
+ "plan": "Treat documentation as a tested product surface. Research implementation, tests, configuration, and existing prose before writing. Separate learning-oriented tutorials, task-oriented how-to guides, factual reference, and explanatory rationale. Every public claim must trace to a workspace source, every example must be verified when the environment permits, and every produced page must be reachable from the documentation index.",
10
+ "entryStepId": "inventory",
11
+ "triggers": [
12
+ "write docs for this",
13
+ "generate documentation",
14
+ "document this feature",
15
+ "create a tutorial",
16
+ "write a how-to",
17
+ "explain this module",
18
+ "docs for this project"
19
+ ],
20
+ "command": "technical-documentation",
21
+ "steps": [
22
+ {
23
+ "id": "inventory",
24
+ "name": "Inventory the documentation surface",
25
+ "description": "Map readers, public interfaces, source evidence, existing coverage, and gaps.",
26
+ "prompt": "Confirm the requested scope from the task and project context. Inspect the project guide, package or build metadata, entry points, public interfaces, configuration, examples, tests, and current docs with workspace tools. Build an exact inventory of the entities in scope, their source paths, intended readers, existing documentation, missing coverage, and risky claims that need verification. Do not start polished prose yet.\n\nObservable handoff: write the completed result to `notes/documentation-inventory.md` in the workspace. Do not merely describe what the file would contain. Re-read it before finishing this phase and repair any incomplete sections.",
27
+ "suggestedRole": "technical researcher",
28
+ "advanceWhen": {
29
+ "file": "notes/documentation-inventory.md",
30
+ "minBytes": 900,
31
+ "sniff": "nonempty",
32
+ "requireChange": true,
33
+ "goto": "plan-docs"
34
+ },
35
+ "gate": {
36
+ "at": "completion",
37
+ "checks": [
38
+ {
39
+ "kind": "minBytes",
40
+ "file": "notes/documentation-inventory.md",
41
+ "bytes": 900
42
+ },
43
+ {
44
+ "kind": "sniff",
45
+ "file": "notes/documentation-inventory.md",
46
+ "sniff": "nonempty"
47
+ },
48
+ {
49
+ "kind": "contains",
50
+ "file": "notes/documentation-inventory.md",
51
+ "pattern": "^##\\s+Scope",
52
+ "flags": "im",
53
+ "label": "Scope section"
54
+ },
55
+ {
56
+ "kind": "contains",
57
+ "file": "notes/documentation-inventory.md",
58
+ "pattern": "^##\\s+Readers",
59
+ "flags": "im",
60
+ "label": "Readers section"
61
+ },
62
+ {
63
+ "kind": "contains",
64
+ "file": "notes/documentation-inventory.md",
65
+ "pattern": "^##\\s+Public surface",
66
+ "flags": "im",
67
+ "label": "Public surface section"
68
+ },
69
+ {
70
+ "kind": "contains",
71
+ "file": "notes/documentation-inventory.md",
72
+ "pattern": "^##\\s+Source map",
73
+ "flags": "im",
74
+ "label": "Source map section"
75
+ },
76
+ {
77
+ "kind": "contains",
78
+ "file": "notes/documentation-inventory.md",
79
+ "pattern": "^##\\s+Coverage gaps",
80
+ "flags": "im",
81
+ "label": "Coverage gaps section"
82
+ }
83
+ ],
84
+ "onReject": "inventory",
85
+ "maxAttempts": 3
86
+ },
87
+ "next": "plan-docs"
88
+ },
89
+ {
90
+ "id": "plan-docs",
91
+ "name": "Design the documentation set",
92
+ "description": "Choose the right document type for each reader need and lock verification criteria.",
93
+ "prompt": "Turn `notes/documentation-inventory.md` into a document plan. For each proposed page, state its reader, job, quadrant, destination path, evidence sources, prerequisites, cross-links, and pass/fail checks. Reuse existing conventions and update existing pages when that is clearer than duplication. Keep the set proportional to the scope, but cover every public item in the inventory or explicitly defer it with a reason.\n\nObservable handoff: write the completed result to `notes/documentation-plan.md` in the workspace. Do not merely describe what the file would contain. Re-read it before finishing this phase and repair any incomplete sections.",
94
+ "suggestedRole": "documentation architect",
95
+ "advanceWhen": {
96
+ "file": "notes/documentation-plan.md",
97
+ "minBytes": 900,
98
+ "sniff": "nonempty",
99
+ "requireChange": true,
100
+ "goto": "author-and-verify"
101
+ },
102
+ "gate": {
103
+ "at": "completion",
104
+ "checks": [
105
+ {
106
+ "kind": "minBytes",
107
+ "file": "notes/documentation-plan.md",
108
+ "bytes": 900
109
+ },
110
+ {
111
+ "kind": "sniff",
112
+ "file": "notes/documentation-plan.md",
113
+ "sniff": "nonempty"
114
+ },
115
+ {
116
+ "kind": "contains",
117
+ "file": "notes/documentation-plan.md",
118
+ "pattern": "^##\\s+Document matrix",
119
+ "flags": "im",
120
+ "label": "Document matrix section"
121
+ },
122
+ {
123
+ "kind": "contains",
124
+ "file": "notes/documentation-plan.md",
125
+ "pattern": "^##\\s+Information architecture",
126
+ "flags": "im",
127
+ "label": "Information architecture section"
128
+ },
129
+ {
130
+ "kind": "contains",
131
+ "file": "notes/documentation-plan.md",
132
+ "pattern": "^##\\s+Verification plan",
133
+ "flags": "im",
134
+ "label": "Verification plan section"
135
+ },
136
+ {
137
+ "kind": "contains",
138
+ "file": "notes/documentation-plan.md",
139
+ "pattern": "^##\\s+Deferred coverage",
140
+ "flags": "im",
141
+ "label": "Deferred coverage section"
142
+ }
143
+ ],
144
+ "onReject": "plan-docs",
145
+ "maxAttempts": 3
146
+ },
147
+ "next": "author-and-verify"
148
+ },
149
+ {
150
+ "id": "author-and-verify",
151
+ "name": "Author, link, and verify the docs",
152
+ "description": "Write the planned pages, validate examples and links, and expose the complete set through one index.",
153
+ "prompt": "Implement the approved document plan in the workspace. Keep reference factual, how-to steps actionable, tutorials quick to first result, and explanations explicit about trade-offs. Verify commands, code examples, option names, defaults, and constraints against implementation and tests; run safe examples where possible and label anything not executed. Add troubleshooting based on real failure paths. Cross-link related pages and write an index that lists every created or updated document, its reader job, quadrant, source evidence, and verification status.\n\nObservable handoff: write the completed result to `docs/documentation-index.md` in the workspace. Do not merely describe what the file would contain. Re-read it before finishing this phase and repair any incomplete sections.",
154
+ "suggestedRole": "technical writer",
155
+ "advanceWhen": {
156
+ "file": "docs/documentation-index.md",
157
+ "minBytes": 1200,
158
+ "sniff": "nonempty",
159
+ "requireChange": true,
160
+ "goto": "evaluate"
161
+ },
162
+ "gate": {
163
+ "at": "completion",
164
+ "checks": [
165
+ {
166
+ "kind": "minBytes",
167
+ "file": "docs/documentation-index.md",
168
+ "bytes": 1200
169
+ },
170
+ {
171
+ "kind": "sniff",
172
+ "file": "docs/documentation-index.md",
173
+ "sniff": "nonempty"
174
+ },
175
+ {
176
+ "kind": "contains",
177
+ "file": "docs/documentation-index.md",
178
+ "pattern": "^##\\s+Documentation map",
179
+ "flags": "im",
180
+ "label": "Documentation map section"
181
+ },
182
+ {
183
+ "kind": "contains",
184
+ "file": "docs/documentation-index.md",
185
+ "pattern": "^##\\s+Tutorials",
186
+ "flags": "im",
187
+ "label": "Tutorials section"
188
+ },
189
+ {
190
+ "kind": "contains",
191
+ "file": "docs/documentation-index.md",
192
+ "pattern": "^##\\s+How-to guides",
193
+ "flags": "im",
194
+ "label": "How-to guides section"
195
+ },
196
+ {
197
+ "kind": "contains",
198
+ "file": "docs/documentation-index.md",
199
+ "pattern": "^##\\s+Reference",
200
+ "flags": "im",
201
+ "label": "Reference section"
202
+ },
203
+ {
204
+ "kind": "contains",
205
+ "file": "docs/documentation-index.md",
206
+ "pattern": "^##\\s+Explanation",
207
+ "flags": "im",
208
+ "label": "Explanation section"
209
+ },
210
+ {
211
+ "kind": "contains",
212
+ "file": "docs/documentation-index.md",
213
+ "pattern": "^##\\s+Verification",
214
+ "flags": "im",
215
+ "label": "Verification section"
216
+ }
217
+ ],
218
+ "onReject": "author-and-verify",
219
+ "maxAttempts": 3
220
+ },
221
+ "next": "evaluate"
222
+ },
223
+ {
224
+ "id": "evaluate",
225
+ "name": "Evaluate the deliverable",
226
+ "description": "Independently grade the observable deliverable and route it to finish, repair, or user escalation.",
227
+ "prompt": "Review `docs/documentation-index.md`, `notes/documentation-inventory.md`, `notes/documentation-plan.md` against every criterion below. Inspect the underlying evidence files named by the workflow; do not grade from the author's summary alone.\n\n1. Every in-scope public item is documented or explicitly deferred with a reason.\n2. Claims, types, defaults, constraints, and examples agree with the cited implementation or tests.\n3. Tutorial, how-to, reference, and explanation content serve distinct reader jobs without needless duplication.\n4. Commands and examples have credible verification results or are clearly marked unexecuted.\n5. Every produced page is linked from the index and all internal links resolve.\n6. The prose is concrete, readable, and includes real troubleshooting and trade-offs where relevant.\n\nWrite an evidence-backed review to `reviews/technical-documentation-review.md`. Give each criterion a PASS or FAIL with a concrete path, excerpt, measurement, or observed behavior. End with exactly `Verdict: PASS` or `Verdict: REVISE`. Then use `advance_task_step` for the active task: PASS routes to `finish`; REVISE routes to `repair` for review rounds 1 through 2, and the 3th REVISE routes to `needs-user`. Never route to finish while a criterion is unmet.",
228
+ "suggestedRole": "technical editor",
229
+ "gate": {
230
+ "at": "completion",
231
+ "checks": [
232
+ {
233
+ "kind": "minBytes",
234
+ "file": "reviews/technical-documentation-review.md",
235
+ "bytes": 400
236
+ },
237
+ {
238
+ "kind": "contains",
239
+ "file": "reviews/technical-documentation-review.md",
240
+ "pattern": "Verdict:\\s*(?:PASS|REVISE)",
241
+ "flags": "i",
242
+ "label": "explicit PASS or REVISE verdict"
243
+ }
244
+ ],
245
+ "onReject": "evaluate",
246
+ "maxAttempts": 3
247
+ },
248
+ "next": "repair"
249
+ },
250
+ {
251
+ "id": "repair",
252
+ "name": "Repair the deliverable",
253
+ "description": "Fix only the concrete gaps from the latest independent review.",
254
+ "prompt": "Read `reviews/technical-documentation-review.md` and repair every failed criterion in `docs/documentation-index.md`, `notes/documentation-inventory.md`, `notes/documentation-plan.md`. Make the changes in the actual workspace files, not just in task notes or a reply. Preserve evidence that already passed. Re-run or re-check anything the reviewer found unproven. Ensure `docs/documentation-index.md` is genuinely updated this turn so the repair is observable, then hand it back for independent evaluation.",
255
+ "suggestedRole": "technical writer",
256
+ "advanceWhen": {
257
+ "file": "docs/documentation-index.md",
258
+ "minBytes": 1200,
259
+ "sniff": "nonempty",
260
+ "requireChange": true,
261
+ "goto": "evaluate"
262
+ },
263
+ "gate": {
264
+ "at": "completion",
265
+ "checks": [
266
+ {
267
+ "kind": "minBytes",
268
+ "file": "docs/documentation-index.md",
269
+ "bytes": 1200
270
+ },
271
+ {
272
+ "kind": "sniff",
273
+ "file": "docs/documentation-index.md",
274
+ "sniff": "nonempty"
275
+ },
276
+ {
277
+ "kind": "contains",
278
+ "file": "docs/documentation-index.md",
279
+ "pattern": "^##\\s+Documentation map",
280
+ "flags": "im",
281
+ "label": "Documentation map section"
282
+ },
283
+ {
284
+ "kind": "contains",
285
+ "file": "docs/documentation-index.md",
286
+ "pattern": "^##\\s+Tutorials",
287
+ "flags": "im",
288
+ "label": "Tutorials section"
289
+ },
290
+ {
291
+ "kind": "contains",
292
+ "file": "docs/documentation-index.md",
293
+ "pattern": "^##\\s+How-to guides",
294
+ "flags": "im",
295
+ "label": "How-to guides section"
296
+ },
297
+ {
298
+ "kind": "contains",
299
+ "file": "docs/documentation-index.md",
300
+ "pattern": "^##\\s+Reference",
301
+ "flags": "im",
302
+ "label": "Reference section"
303
+ },
304
+ {
305
+ "kind": "contains",
306
+ "file": "docs/documentation-index.md",
307
+ "pattern": "^##\\s+Explanation",
308
+ "flags": "im",
309
+ "label": "Explanation section"
310
+ },
311
+ {
312
+ "kind": "contains",
313
+ "file": "docs/documentation-index.md",
314
+ "pattern": "^##\\s+Verification",
315
+ "flags": "im",
316
+ "label": "Verification section"
317
+ }
318
+ ],
319
+ "onReject": "repair",
320
+ "maxAttempts": 3
321
+ },
322
+ "next": "evaluate"
323
+ },
324
+ {
325
+ "id": "finish",
326
+ "name": "Finish",
327
+ "description": "All deterministic and reviewer criteria passed.",
328
+ "prompt": "The independent review passed. Read `reviews/technical-documentation-review.md`, then use `write_task_note` to record a concise DONE summary with the final deliverable paths (`docs/documentation-index.md`, `notes/documentation-inventory.md`, `notes/documentation-plan.md`) and the evidence that each acceptance criterion passed. Report DONE without starting new work.",
329
+ "suggestedRole": "project lead",
330
+ "terminal": true
331
+ },
332
+ {
333
+ "id": "needs-user",
334
+ "name": "Escalate unresolved concerns",
335
+ "description": "The bounded repair loop ended without a defensible pass.",
336
+ "prompt": "The deliverable did not pass after 3 review rounds. Do not claim success. Read `reviews/technical-documentation-review.md`, then use `write_task_note` to record DONE_WITH_CONCERNS: the unmet criteria, what was attempted, the affected paths, and the smallest user decision or missing input needed to continue.",
337
+ "suggestedRole": "project lead",
338
+ "terminal": true
339
+ }
340
+ ],
341
+ "version": "2.0.1",
342
+ "releasedAt": "2026-08-13T00:00:00Z"
343
+ }
@@ -0,0 +1,174 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "title": "Technical Documentation — rate limiter Diataxis set",
4
+ "objective": "Exercise the Technical Documentation craftbook on a small real code surface and require a coherent, cross-linked Diataxis documentation set grounded in source behavior.",
5
+ "tags": [
6
+ "workflow",
7
+ "documentation",
8
+ "diataxis",
9
+ "typescript"
10
+ ],
11
+ "prompt": "Use the Technical Documentation craftbook to document the dependency-free rate limiter in this workspace. Inspect the source and test rather than guessing. Produce the craftbook inventory and plan plus a coherent set under `docs/`: `documentation-index.md`, `tutorial-rate-limit.md`, `how-to-configure-rate-limit.md`, `reference-rate-limit.md`, and `explanation-fixed-window.md`. The index must clearly organize tutorials, how-to, reference, and explanation, link to every page, cite the implementation/test where claims come from, and state how the documented examples were verified.",
12
+ "setup": {
13
+ "projectName": "Rate limiter documentation",
14
+ "about": "A hermetic TypeScript library documentation exercise. There are no external APIs or package dependencies.",
15
+ "missionObjectives": "Create accurate, navigable documentation that helps a first-time adopter use `createFixedWindowLimiter` and understand its tradeoffs without reading all source code.",
16
+ "files": [
17
+ {
18
+ "path": "README.md",
19
+ "content": "# tiny-limit\n\nA dependency-free fixed-window request limiter. Public behavior is defined by `src/rate-limit.ts` and its test. Documentation is intentionally incomplete.\n"
20
+ },
21
+ {
22
+ "path": "src/rate-limit.ts",
23
+ "content": "export interface RateLimitOptions {\n windowMs: number;\n max: number;\n}\n\nexport interface RateLimitDecision {\n allowed: boolean;\n remaining: number;\n resetAt: number;\n}\n\nexport function createFixedWindowLimiter(options: RateLimitOptions) {\n if (!Number.isInteger(options.max) || options.max < 1) throw new RangeError('max must be a positive integer');\n if (!Number.isFinite(options.windowMs) || options.windowMs <= 0) throw new RangeError('windowMs must be positive');\n const buckets = new Map<string, { count: number; resetAt: number }>();\n\n return function check(key: string, now = Date.now()): RateLimitDecision {\n const current = buckets.get(key);\n const bucket = !current || now >= current.resetAt\n ? { count: 0, resetAt: now + options.windowMs }\n : current;\n bucket.count += 1;\n buckets.set(key, bucket);\n return {\n allowed: bucket.count <= options.max,\n remaining: Math.max(0, options.max - bucket.count),\n resetAt: bucket.resetAt,\n };\n };\n}\n"
24
+ },
25
+ {
26
+ "path": "test/rate-limit.test.ts",
27
+ "content": "import { strict as assert } from 'node:assert';\nimport { createFixedWindowLimiter } from '../src/rate-limit.js';\n\nconst check = createFixedWindowLimiter({ windowMs: 1000, max: 2 });\nassert.deepEqual(check('ada', 100), { allowed: true, remaining: 1, resetAt: 1100 });\nassert.deepEqual(check('ada', 200), { allowed: true, remaining: 0, resetAt: 1100 });\nassert.deepEqual(check('ada', 300), { allowed: false, remaining: 0, resetAt: 1100 });\nassert.deepEqual(check('ada', 1100), { allowed: true, remaining: 1, resetAt: 2100 });\n"
28
+ }
29
+ ]
30
+ },
31
+ "mocks": [],
32
+ "success": {
33
+ "summary": "The craftbook produces a complete, grounded five-page Diataxis set with a navigable index and terminal task evidence.",
34
+ "deliverables": [
35
+ {
36
+ "path": "docs/documentation-index.md",
37
+ "kind": "markdown-doc",
38
+ "minBytes": 850,
39
+ "checks": [
40
+ {
41
+ "kind": "contains",
42
+ "file": "docs/documentation-index.md",
43
+ "pattern": "^#{1,3}\\s+Tutorials?\\b[\\s\\S]*^#{1,3}\\s+How-to guides?\\b[\\s\\S]*^#{1,3}\\s+Reference\\b[\\s\\S]*^#{1,3}\\s+Explanation\\b[\\s\\S]*^#{1,3}\\s+Verification\\b",
44
+ "flags": "im",
45
+ "label": "Diataxis map and verification"
46
+ },
47
+ {
48
+ "kind": "contains",
49
+ "file": "docs/documentation-index.md",
50
+ "pattern": "tutorial-rate-limit\\.md[\\s\\S]*how-to-configure-rate-limit\\.md[\\s\\S]*reference-rate-limit\\.md[\\s\\S]*explanation-fixed-window\\.md",
51
+ "flags": "i",
52
+ "label": "all requested pages linked"
53
+ },
54
+ {
55
+ "kind": "citationsResolve",
56
+ "file": "docs/documentation-index.md",
57
+ "minCitations": 4
58
+ }
59
+ ]
60
+ },
61
+ {
62
+ "path": "docs/tutorial-rate-limit.md",
63
+ "kind": "markdown-doc",
64
+ "minBytes": 650,
65
+ "checks": [
66
+ {
67
+ "kind": "contains",
68
+ "file": "docs/tutorial-rate-limit.md",
69
+ "pattern": "createFixedWindowLimiter[\\s\\S]*windowMs[\\s\\S]*max[\\s\\S]*(allowed|remaining|resetAt)",
70
+ "label": "runnable API walkthrough"
71
+ }
72
+ ]
73
+ },
74
+ {
75
+ "path": "docs/how-to-configure-rate-limit.md",
76
+ "kind": "markdown-doc",
77
+ "minBytes": 550,
78
+ "checks": [
79
+ {
80
+ "kind": "contains",
81
+ "file": "docs/how-to-configure-rate-limit.md",
82
+ "pattern": "windowMs[\\s\\S]*max[\\s\\S]*(positive|greater than|at least)[\\s\\S]*(integer|finite)",
83
+ "flags": "i",
84
+ "label": "configuration constraints"
85
+ }
86
+ ]
87
+ },
88
+ {
89
+ "path": "docs/reference-rate-limit.md",
90
+ "kind": "markdown-doc",
91
+ "minBytes": 650,
92
+ "checks": [
93
+ {
94
+ "kind": "contains",
95
+ "file": "docs/reference-rate-limit.md",
96
+ "pattern": "RateLimitOptions[\\s\\S]*RateLimitDecision[\\s\\S]*allowed[\\s\\S]*remaining[\\s\\S]*resetAt",
97
+ "label": "public type reference"
98
+ }
99
+ ]
100
+ },
101
+ {
102
+ "path": "docs/explanation-fixed-window.md",
103
+ "kind": "markdown-doc",
104
+ "minBytes": 600,
105
+ "checks": [
106
+ {
107
+ "kind": "contains",
108
+ "file": "docs/explanation-fixed-window.md",
109
+ "pattern": "fixed[- ]window[\\s\\S]*(boundary|burst|trade[- ]?off)[\\s\\S]*(memory|Map|process)",
110
+ "flags": "i",
111
+ "label": "mechanism and tradeoffs"
112
+ }
113
+ ]
114
+ }
115
+ ],
116
+ "checks": [
117
+ {
118
+ "kind": "fileCount",
119
+ "ext": [
120
+ ".md"
121
+ ],
122
+ "min": 5,
123
+ "dir": "docs"
124
+ }
125
+ ],
126
+ "taskNotes": {
127
+ "minBytes": 180,
128
+ "checks": [
129
+ {
130
+ "kind": "contains",
131
+ "file": "task-notes.md",
132
+ "pattern": "\\bDONE\\b[\\s\\S]*docs/documentation-index\\.md[\\s\\S]*(5|five)\\s+(pages|documents)",
133
+ "flags": "i",
134
+ "label": "terminal note records the documentation set"
135
+ }
136
+ ],
137
+ "requireCraftbookTask": true
138
+ },
139
+ "taskGraph": {
140
+ "requireCraftbookTask": true,
141
+ "requireTerminalStep": true
142
+ },
143
+ "unchangedFixtures": [
144
+ "README.md",
145
+ "src/rate-limit.ts",
146
+ "test/rate-limit.test.ts"
147
+ ]
148
+ },
149
+ "rubric": {
150
+ "artifact": {
151
+ "path": "docs/documentation-index.md",
152
+ "kind": "markdown"
153
+ },
154
+ "axes": [
155
+ {
156
+ "name": "Source fidelity",
157
+ "description": "Claims, examples, inputs, outputs, and edge cases agree with the supplied implementation and test."
158
+ },
159
+ {
160
+ "name": "Diataxis separation",
161
+ "description": "Tutorial, how-to, reference, and explanation pages each serve their distinct reader need without becoming duplicate summaries."
162
+ },
163
+ {
164
+ "name": "Navigation and verification",
165
+ "description": "The set is cross-linked, easy to scan, and transparent about how examples and factual claims were checked."
166
+ }
167
+ ]
168
+ },
169
+ "qualityFocus": [
170
+ "Every public option and result field matches the source",
171
+ "Each Diataxis page has a distinct job",
172
+ "The index links the complete set and explains verification"
173
+ ]
174
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bendyline/gilde",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "description": "The gilde catalog: model manifests, toolsets, craftbooks, roles, and project types for gezel.",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -1374,6 +1374,9 @@
1374
1374
  "label": {
1375
1375
  "type": "string",
1376
1376
  "minLength": 1
1377
+ },
1378
+ "artifact": {
1379
+ "type": "boolean"
1377
1380
  }
1378
1381
  },
1379
1382
  "required": [
@@ -2242,6 +2245,9 @@
2242
2245
  "label": {
2243
2246
  "type": "string",
2244
2247
  "minLength": 1
2248
+ },
2249
+ "artifact": {
2250
+ "type": "boolean"
2245
2251
  }
2246
2252
  },
2247
2253
  "required": [
@@ -4015,6 +4021,9 @@
4015
4021
  "label": {
4016
4022
  "type": "string",
4017
4023
  "minLength": 1
4024
+ },
4025
+ "artifact": {
4026
+ "type": "boolean"
4018
4027
  }
4019
4028
  },
4020
4029
  "required": [
@@ -4883,6 +4892,9 @@
4883
4892
  "label": {
4884
4893
  "type": "string",
4885
4894
  "minLength": 1
4895
+ },
4896
+ "artifact": {
4897
+ "type": "boolean"
4886
4898
  }
4887
4899
  },
4888
4900
  "required": [
@@ -1027,6 +1027,9 @@
1027
1027
  "label": {
1028
1028
  "type": "string",
1029
1029
  "minLength": 1
1030
+ },
1031
+ "artifact": {
1032
+ "type": "boolean"
1030
1033
  }
1031
1034
  },
1032
1035
  "required": [
@@ -1895,6 +1898,9 @@
1895
1898
  "label": {
1896
1899
  "type": "string",
1897
1900
  "minLength": 1
1901
+ },
1902
+ "artifact": {
1903
+ "type": "boolean"
1898
1904
  }
1899
1905
  },
1900
1906
  "required": [
@@ -3662,6 +3668,9 @@
3662
3668
  "label": {
3663
3669
  "type": "string",
3664
3670
  "minLength": 1
3671
+ },
3672
+ "artifact": {
3673
+ "type": "boolean"
3665
3674
  }
3666
3675
  },
3667
3676
  "required": [
@@ -4530,6 +4539,9 @@
4530
4539
  "label": {
4531
4540
  "type": "string",
4532
4541
  "minLength": 1
4542
+ },
4543
+ "artifact": {
4544
+ "type": "boolean"
4533
4545
  }
4534
4546
  },
4535
4547
  "required": [
@@ -40,6 +40,14 @@
40
40
  "missionObjectives": {
41
41
  "type": "string"
42
42
  },
43
+ "managedWorkspaceWritePolicy": {
44
+ "type": "string",
45
+ "enum": [
46
+ "auto",
47
+ "allow",
48
+ "deny"
49
+ ]
50
+ },
43
51
  "files": {
44
52
  "default": [],
45
53
  "type": "array",
@@ -412,6 +420,9 @@
412
420
  "generic-file"
413
421
  ]
414
422
  },
423
+ "artifact": {
424
+ "type": "boolean"
425
+ },
415
426
  "minBytes": {
416
427
  "type": "integer",
417
428
  "exclusiveMinimum": 0,
@@ -712,6 +723,9 @@
712
723
  "label": {
713
724
  "type": "string",
714
725
  "minLength": 1
726
+ },
727
+ "artifact": {
728
+ "type": "boolean"
715
729
  }
716
730
  },
717
731
  "required": [
@@ -1658,6 +1672,9 @@
1658
1672
  "label": {
1659
1673
  "type": "string",
1660
1674
  "minLength": 1
1675
+ },
1676
+ "artifact": {
1677
+ "type": "boolean"
1661
1678
  }
1662
1679
  },
1663
1680
  "required": [
@@ -2604,6 +2621,9 @@
2604
2621
  "label": {
2605
2622
  "type": "string",
2606
2623
  "minLength": 1
2624
+ },
2625
+ "artifact": {
2626
+ "type": "boolean"
2607
2627
  }
2608
2628
  },
2609
2629
  "required": [
@@ -3551,6 +3571,9 @@
3551
3571
  "label": {
3552
3572
  "type": "string",
3553
3573
  "minLength": 1
3574
+ },
3575
+ "artifact": {
3576
+ "type": "boolean"
3554
3577
  }
3555
3578
  },
3556
3579
  "required": [