@bendyline/gilde 0.1.55 → 0.1.57

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 (191) hide show
  1. package/authoring/chat-models/glm-5.3-flash-320b-q2.json +129 -0
  2. package/authoring/chat-models/qwen3.8-flash-next-iq3.json +198 -0
  3. package/authoring/chat-models/qwen3.8-flash-next-iq4.json +198 -0
  4. package/authoring/gstack/wave.json +2 -2
  5. package/data/chat-models/gl/glm-5.3-flash-320b-q2/manifest.json +137 -0
  6. package/data/chat-models/gl/glm-5.3-flash-320b-q2/versions/1.0.0/manifest.json +23 -0
  7. package/data/chat-models/index.json +1 -1
  8. package/data/chat-models/qw/qwen3.8-flash-next-iq3/manifest.json +221 -0
  9. package/data/chat-models/qw/qwen3.8-flash-next-iq3/versions/1.0.0/manifest.json +36 -0
  10. package/data/chat-models/qw/qwen3.8-flash-next-iq4/manifest.json +221 -0
  11. package/data/chat-models/qw/qwen3.8-flash-next-iq4/versions/1.0.0/manifest.json +36 -0
  12. package/data/craftbook-templates/a1/a11y-audit/versions/1.1.3/test.json +16 -8
  13. package/data/craftbook-templates/ac/accessibility-retrofit/versions/2.0.2/craftbook.json +618 -0
  14. package/data/craftbook-templates/ac/accessibility-retrofit/versions/2.0.2/test.json +228 -0
  15. package/data/craftbook-templates/al/album-curate/versions/1.0.3/test.json +6 -3
  16. package/data/craftbook-templates/al/alert-rules/versions/1.0.3/test.json +8 -8
  17. package/data/craftbook-templates/an/anniversary-cut/versions/1.0.5/test.json +10 -5
  18. package/data/craftbook-templates/an/annual-document-review/versions/1.0.3/test.json +16 -8
  19. package/data/craftbook-templates/an/anomaly-scan/versions/1.0.3/test.json +12 -6
  20. package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.2/craftbook.json +602 -0
  21. package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.2/test.json +290 -0
  22. package/data/craftbook-templates/ar/artifact-integrity-review/versions/1.0.3/test.json +18 -9
  23. package/data/craftbook-templates/au/audiobook-master-pack/versions/1.0.5/test.json +10 -5
  24. package/data/craftbook-templates/au/auth-flow/versions/1.0.3/test.json +12 -6
  25. package/data/craftbook-templates/au/auth-flow/versions/1.0.4/craftbook.json +282 -0
  26. package/data/craftbook-templates/au/auth-flow/versions/1.0.4/test.json +143 -0
  27. package/data/craftbook-templates/au/automation-recipe/versions/1.0.3/test.json +12 -6
  28. package/data/craftbook-templates/ba/backup-routine/versions/1.0.4/craftbook.json +282 -0
  29. package/data/craftbook-templates/ba/backup-routine/versions/1.0.4/test.json +108 -0
  30. package/data/craftbook-templates/bl/blog-post/versions/1.0.3/test.json +8 -8
  31. package/data/craftbook-templates/br/branding-website/versions/1.1.3/craftbook.json +335 -0
  32. package/data/craftbook-templates/br/branding-website/versions/1.1.3/test.json +164 -0
  33. package/data/craftbook-templates/br/broadcast-announcement/versions/1.0.3/test.json +8 -8
  34. package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.8/craftbook.json +621 -0
  35. package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.8/test.json +376 -0
  36. package/data/craftbook-templates/bu/bug-fix-tdd/versions/2.0.2/craftbook.json +730 -0
  37. package/data/craftbook-templates/bu/bug-fix-tdd/versions/2.0.2/test.json +221 -0
  38. package/data/craftbook-templates/bu/build-loop/versions/1.1.1/test.json +8 -8
  39. package/data/craftbook-templates/ca/case-study/versions/1.0.3/test.json +8 -8
  40. package/data/craftbook-templates/ch/chapter-narration-run/versions/1.0.4/test.json +10 -5
  41. package/data/craftbook-templates/ch/character-turnaround/versions/1.0.3/test.json +25 -11
  42. package/data/craftbook-templates/ci/ci-pipeline/versions/2.0.2/craftbook.json +587 -0
  43. package/data/craftbook-templates/ci/ci-pipeline/versions/2.0.2/test.json +225 -0
  44. package/data/craftbook-templates/ci/citation-audit/versions/1.0.3/test.json +28 -14
  45. package/data/craftbook-templates/cl/cli-tool/versions/1.1.3/test.json +8 -8
  46. package/data/craftbook-templates/co/codebase-refactoring-review/versions/1.0.3/test.json +16 -8
  47. package/data/craftbook-templates/co/codebase-ux-review/versions/1.0.3/test.json +18 -9
  48. package/data/craftbook-templates/co/codemod-sweep/versions/1.0.2/craftbook.json +605 -0
  49. package/data/craftbook-templates/co/codemod-sweep/versions/1.0.2/test.json +252 -0
  50. package/data/craftbook-templates/co/cohort-analysis/versions/1.0.3/test.json +18 -9
  51. package/data/craftbook-templates/co/competitive-analysis/versions/1.0.3/test.json +23 -15
  52. package/data/craftbook-templates/co/content-accuracy-review/versions/1.0.3/test.json +28 -14
  53. package/data/craftbook-templates/co/content-deck/versions/1.2.3/craftbook.json +4 -4
  54. package/data/craftbook-templates/co/content-deck/versions/1.2.3/test.json +3 -0
  55. package/data/craftbook-templates/co/content-deck/versions/1.2.4/craftbook.json +341 -0
  56. package/data/craftbook-templates/co/content-deck/versions/1.2.4/test.json +169 -0
  57. package/data/craftbook-templates/co/copy-review/versions/1.0.3/test.json +14 -7
  58. package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.3/craftbook.json +4 -4
  59. package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.3/test.json +3 -0
  60. package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.4/craftbook.json +345 -0
  61. package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.4/test.json +187 -0
  62. package/data/craftbook-templates/co/corpus-synthesis/versions/1.0.3/test.json +26 -13
  63. package/data/craftbook-templates/co/cover-letter/versions/1.0.3/test.json +8 -8
  64. package/data/craftbook-templates/cs/csv-transformer/versions/1.2.4/test.json +7 -7
  65. package/data/craftbook-templates/da/dashboard-spec/versions/1.0.3/test.json +7 -7
  66. package/data/craftbook-templates/da/data-export-migrate/versions/1.0.4/craftbook.json +285 -0
  67. package/data/craftbook-templates/da/data-export-migrate/versions/1.0.4/test.json +104 -0
  68. package/data/craftbook-templates/da/data-pipeline-etl/versions/1.0.5/craftbook.json +284 -0
  69. package/data/craftbook-templates/da/data-pipeline-etl/versions/1.0.5/test.json +162 -0
  70. package/data/craftbook-templates/da/data-quality-audit/versions/1.0.3/test.json +38 -19
  71. package/data/craftbook-templates/da/data-to-report/versions/1.0.3/test.json +12 -6
  72. package/data/craftbook-templates/db/db-index-tuning/versions/1.0.4/craftbook.json +286 -0
  73. package/data/craftbook-templates/db/db-index-tuning/versions/1.0.4/test.json +104 -0
  74. package/data/craftbook-templates/de/dependency-audit/versions/1.1.3/test.json +14 -7
  75. package/data/craftbook-templates/de/dependency-upgrade/versions/1.0.2/craftbook.json +621 -0
  76. package/data/craftbook-templates/de/dependency-upgrade/versions/1.0.2/test.json +235 -0
  77. package/data/craftbook-templates/de/design-review/versions/1.0.3/test.json +16 -8
  78. package/data/craftbook-templates/de/design-system-consultation/versions/2.0.8/craftbook.json +616 -0
  79. package/data/craftbook-templates/de/design-system-consultation/versions/2.0.8/test.json +201 -0
  80. package/data/craftbook-templates/do/doc-intake-pipeline/versions/1.0.4/craftbook.json +285 -0
  81. package/data/craftbook-templates/do/doc-intake-pipeline/versions/1.0.4/test.json +104 -0
  82. package/data/craftbook-templates/do/doc-rewrite/versions/1.0.3/test.json +119 -55
  83. package/data/craftbook-templates/do/dockerize-app/versions/1.0.4/craftbook.json +285 -0
  84. package/data/craftbook-templates/do/dockerize-app/versions/1.0.4/test.json +92 -0
  85. package/data/craftbook-templates/do/documentation-drift-review/versions/1.0.3/test.json +18 -9
  86. package/data/craftbook-templates/dr/draft-social-post/versions/1.0.2/craftbook.json +324 -0
  87. package/data/craftbook-templates/dr/draft-social-post/versions/1.0.2/test.json +161 -0
  88. package/data/craftbook-templates/ed/edit-notes/versions/1.0.3/test.json +11 -4
  89. package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.8/craftbook.json +566 -0
  90. package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.8/test.json +191 -0
  91. package/data/craftbook-templates/ep/episode-plan/versions/1.0.3/test.json +10 -5
  92. package/data/craftbook-templates/ex/executive-level-review/versions/2.0.7/test.json +7 -10
  93. package/data/craftbook-templates/ex/executive-level-review/versions/2.0.8/craftbook.json +595 -0
  94. package/data/craftbook-templates/ex/executive-level-review/versions/2.0.8/test.json +139 -0
  95. package/data/craftbook-templates/ex/expense-categorize/versions/1.0.4/craftbook.json +277 -0
  96. package/data/craftbook-templates/ex/expense-categorize/versions/1.0.4/test.json +104 -0
  97. package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.1.2/craftbook.json +327 -0
  98. package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.1.2/test.json +162 -0
  99. package/data/craftbook-templates/fl/flaky-test-fix/versions/1.0.2/craftbook.json +718 -0
  100. package/data/craftbook-templates/fl/flaky-test-fix/versions/1.0.2/test.json +239 -0
  101. package/data/craftbook-templates/fo/form-fill-batch/versions/1.0.4/craftbook.json +285 -0
  102. package/data/craftbook-templates/fo/form-fill-batch/versions/1.0.4/test.json +162 -0
  103. package/data/craftbook-templates/fo/form-wizard/versions/1.0.3/test.json +8 -8
  104. package/data/craftbook-templates/ho/holiday-card-run/versions/1.0.3/test.json +11 -4
  105. package/data/craftbook-templates/ho/hotfix-flow/versions/2.0.2/craftbook.json +610 -0
  106. package/data/craftbook-templates/ho/hotfix-flow/versions/2.0.2/test.json +220 -0
  107. package/data/craftbook-templates/ht/html-arcade-game/versions/1.2.3/craftbook.json +343 -0
  108. package/data/craftbook-templates/ht/html-arcade-game/versions/1.2.3/test.json +176 -0
  109. package/data/craftbook-templates/id/idea-office-hours/versions/2.0.8/craftbook.json +566 -0
  110. package/data/craftbook-templates/id/idea-office-hours/versions/2.0.8/test.json +141 -0
  111. package/data/craftbook-templates/im/image-set-index/versions/1.2.3/craftbook.json +298 -0
  112. package/data/craftbook-templates/im/image-set-index/versions/1.2.3/test.json +180 -0
  113. package/data/craftbook-templates/in/insurance-inventory/versions/1.0.3/test.json +11 -4
  114. package/data/craftbook-templates/in/interactive-quiz/versions/1.0.3/test.json +48 -23
  115. package/data/craftbook-templates/in/invitation-design/versions/1.0.3/test.json +1 -1
  116. package/data/craftbook-templates/index.json +1 -1
  117. package/data/craftbook-templates/it/item-intake/versions/1.0.3/test.json +11 -4
  118. package/data/craftbook-templates/le/lead-enrichment/versions/1.0.4/craftbook.json +277 -0
  119. package/data/craftbook-templates/le/lead-enrichment/versions/1.0.4/test.json +104 -0
  120. package/data/craftbook-templates/me/meeting-prep-brief/versions/1.0.3/test.json +16 -8
  121. package/data/craftbook-templates/me/memory-prompt-session/versions/1.0.3/test.json +3 -0
  122. package/data/craftbook-templates/mo/morning-report/versions/1.0.3/test.json +21 -9
  123. package/data/craftbook-templates/of/office-hours/versions/1.1.1/test.json +8 -8
  124. package/data/craftbook-templates/pe/perf-optimization/versions/2.0.2/craftbook.json +697 -0
  125. package/data/craftbook-templates/pe/perf-optimization/versions/2.0.2/test.json +235 -0
  126. package/data/craftbook-templates/pe/pest-diagnosis/versions/1.0.3/test.json +19 -8
  127. package/data/craftbook-templates/pl/plan/versions/1.0.2/test.json +8 -8
  128. package/data/craftbook-templates/pl/playtest-report/versions/1.0.3/test.json +17 -7
  129. package/data/craftbook-templates/pr/practice-exam/versions/1.0.3/test.json +7 -2
  130. package/data/craftbook-templates/pr/practice-session/versions/1.0.3/test.json +11 -4
  131. package/data/craftbook-templates/pu/pull-request-review/versions/1.9.2/craftbook.json +435 -0
  132. package/data/craftbook-templates/pu/pull-request-review/versions/1.9.2/test.json +141 -0
  133. package/data/craftbook-templates/qu/quarterly-summary/versions/1.0.3/test.json +16 -8
  134. package/data/craftbook-templates/re/receipt-intake/versions/1.0.3/test.json +11 -4
  135. package/data/craftbook-templates/re/receipt-ocr-ledger/versions/1.0.4/craftbook.json +277 -0
  136. package/data/craftbook-templates/re/receipt-ocr-ledger/versions/1.0.4/test.json +104 -0
  137. package/data/craftbook-templates/re/recipe-capture/versions/1.0.3/test.json +13 -5
  138. package/data/craftbook-templates/re/record-a-relative/versions/1.0.3/test.json +3 -0
  139. package/data/craftbook-templates/re/recurring-invoice-run/versions/1.0.4/craftbook.json +285 -0
  140. package/data/craftbook-templates/re/recurring-invoice-run/versions/1.0.4/test.json +104 -0
  141. package/data/craftbook-templates/re/refactor-module/versions/2.0.2/craftbook.json +695 -0
  142. package/data/craftbook-templates/re/refactor-module/versions/2.0.2/test.json +241 -0
  143. package/data/craftbook-templates/re/release-artifact-sanity-check/versions/1.0.4/craftbook.json +361 -0
  144. package/data/craftbook-templates/re/release-artifact-sanity-check/versions/1.0.4/test.json +138 -0
  145. package/data/craftbook-templates/re/release-notes/versions/1.0.4/test.json +8 -8
  146. package/data/craftbook-templates/re/release-notes/versions/1.0.5/craftbook.json +339 -0
  147. package/data/craftbook-templates/re/release-notes/versions/1.0.5/test.json +111 -0
  148. package/data/craftbook-templates/re/reliability-review/versions/1.0.3/test.json +16 -8
  149. package/data/craftbook-templates/re/research-report/versions/1.0.3/test.json +16 -8
  150. package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.8/craftbook.json +596 -0
  151. package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.8/test.json +157 -0
  152. package/data/craftbook-templates/ro/rough-cut-assembly/versions/1.0.4/test.json +13 -5
  153. package/data/craftbook-templates/sc/schema-migration/versions/2.0.2/craftbook.json +624 -0
  154. package/data/craftbook-templates/sc/schema-migration/versions/2.0.2/test.json +225 -0
  155. package/data/craftbook-templates/sc/script-automation/versions/1.0.4/craftbook.json +284 -0
  156. package/data/craftbook-templates/sc/script-automation/versions/1.0.4/test.json +162 -0
  157. package/data/craftbook-templates/se/security-architecture-review/versions/2.0.7/test.json +10 -13
  158. package/data/craftbook-templates/se/security-architecture-review/versions/2.0.8/craftbook.json +597 -0
  159. package/data/craftbook-templates/se/security-architecture-review/versions/2.0.8/test.json +157 -0
  160. package/data/craftbook-templates/so/social-digest/versions/1.0.3/craftbook.json +239 -0
  161. package/data/craftbook-templates/so/social-digest/versions/1.0.3/test.json +168 -0
  162. package/data/craftbook-templates/so/source-quality-audit/versions/1.0.3/test.json +25 -11
  163. package/data/craftbook-templates/sp/spec-authoring/versions/2.0.8/craftbook.json +599 -0
  164. package/data/craftbook-templates/sp/spec-authoring/versions/2.0.8/test.json +162 -0
  165. package/data/craftbook-templates/te/technical-documentation/versions/2.0.8/craftbook.json +577 -0
  166. package/data/craftbook-templates/te/technical-documentation/versions/2.0.8/test.json +174 -0
  167. package/data/craftbook-templates/te/test-coverage-review/versions/1.2.1/test.json +16 -8
  168. package/data/craftbook-templates/te/test-suite-backfill/versions/2.0.2/craftbook.json +592 -0
  169. package/data/craftbook-templates/te/test-suite-backfill/versions/2.0.2/test.json +195 -0
  170. package/data/craftbook-templates/th/thank-you-batch/versions/1.0.3/test.json +6 -3
  171. package/data/craftbook-templates/th/thank-you-sweep/versions/1.0.3/test.json +11 -4
  172. package/data/craftbook-templates/ti/tileset-batch/versions/1.0.3/test.json +9 -3
  173. package/data/craftbook-templates/tr/transcribe-and-shownotes/versions/1.0.3/test.json +10 -5
  174. package/data/craftbook-templates/tr/transcribe-index/versions/1.0.3/test.json +6 -3
  175. package/data/craftbook-templates/tr/translate-content/versions/1.1.3/craftbook.json +140 -0
  176. package/data/craftbook-templates/tr/translate-content/versions/1.1.3/test.json +141 -0
  177. package/data/craftbook-templates/ty/type-safety-pass/versions/2.0.2/craftbook.json +594 -0
  178. package/data/craftbook-templates/ty/type-safety-pass/versions/2.0.2/test.json +221 -0
  179. package/data/craftbook-templates/ux/ux-update/versions/1.0.2/craftbook.json +606 -0
  180. package/data/craftbook-templates/ux/ux-update/versions/1.0.2/test.json +206 -0
  181. package/data/craftbook-templates/we/weak-spot-drill/versions/1.0.3/test.json +11 -4
  182. package/data/craftbook-templates/we/weekly-walkthrough/versions/1.0.3/test.json +21 -9
  183. package/data/craftbook-templates/wh/whitepaper/versions/1.0.3/test.json +16 -8
  184. package/data/craftbook-templates/ye/year-in-review/versions/1.0.3/test.json +8 -4
  185. package/data/project-types/index.json +1 -1
  186. package/data/project-types/ju/just-chat/manifest.json +1 -1
  187. package/data/project-types/ju/just-chat/versions/1.0.1/about.md +5 -0
  188. package/data/project-types/ju/just-chat/versions/1.0.1/manifest.json +19 -0
  189. package/package.json +1 -1
  190. package/schemas/chat-model-identity.schema.json +27 -0
  191. package/schemas/chat-model-version.schema.json +22 -0
@@ -1,110 +1,174 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "title": "Documentation Rewrite smoke eval",
4
- "objective": "Self-contained smoke eval for the Documentation Rewrite craftbook using the external generic harness.",
3
+ "title": "Documentation Rewrite confusing ops doc made usable",
4
+ "objective": "Measure whether the rewrite makes a genuinely confusing procedure usable WITHOUT losing any technical fact, which is the craftbook's own critical criterion.",
5
5
  "tags": [
6
- "corpus"
6
+ "writing",
7
+ "documentation"
7
8
  ],
8
- "prompt": "Theres a fake service set up for this so nothing real gets touched details are in fixtures/fake-service.md. Can you work out the automation and write up how it woudl run in automation.md?",
9
+ "prompt": "Use the Documentation Rewrite craftbook on `docs/backup-restore.md`. It is the doc our on-call engineers complain about most. Produce the rewritten version at `rewritten-doc.md`. Do not edit the original.",
9
10
  "setup": {
10
- "projectName": "Documentation Rewrite Eval",
11
- "about": "Self-contained eval project for doc-rewrite. Seeded inputs are under workspace/source or workspace/fixtures; final deliverable is workspace/automation.md.",
12
- "missionObjectives": "Use the Documentation Rewrite craftbook/template, read the seeded local fixtures, and write automation.md without network calls, real credentials, or live services.",
11
+ "projectName": "Doc Rewrite Eval",
12
+ "about": "A single confusing operations document is the only input. Everything needed is in the workspace; no network access and no live services.",
13
+ "missionObjectives": "Rewrite docs/backup-restore.md into rewritten-doc.md so an on-call engineer can follow it under pressure: prerequisites up front, numbered imperative steps in execution order, jargon defined on first use. Every technical fact in the original must survive the rewrite — dropping one is the failure mode this task exists to catch. Leave the original file unchanged.",
13
14
  "files": [
14
15
  {
15
- "path": "source/brief.md",
16
- "content": "# Documentation Rewrite 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: doc-rewrite - Documentation Rewrite.\n"
17
- },
18
- {
19
- "path": "fixtures/fake-service.md",
20
- "content": "# Fake Service Fixture\n\nThis eval must stay in dry-run mode.\n\nAvailable fake endpoints and commands:\n- GET /api/bookings/open returns BKG-1001, BKG-1002, BKG-1003.\n- POST /api/bookings/dry-run records a simulated submission and returns DRY_RUN_OK.\n- fake-ci status returns pending twice and success on the third poll.\n- fake-github pr create returns https://example.invalid/pull/42.\n\nThe deliverable must reference these fixture names instead of real services or credentials.\n"
16
+ "path": "docs/backup-restore.md",
17
+ "content": "# Backup and Restore\n\nBackups are taken by the platform automatically. The RPO for the tier-1 stores is 15 minutes,\nand it should be noted that snapshots older than 14 days are garbage-collected and cannot be\nrestored from, so restores must be initiated within that window.\n\nRestoring is done by running the restore tool. Before this can be done it is necessary that the\noperator has been granted the ops-admin role, otherwise the command will be rejected. The\nsnapshot id can be found by listing snapshots. The verification flag should always be passed so\nthat the restored copy is checked against the manifest; skipping it has caused silent corruption\nto be shipped in the past.\n\nThe command is `gezel-restore --snapshot <id> --verify`. It is also worth mentioning that the\nservice must be drained first, which is done from the ops console, and that the restore will\nfail if the target volume has less than 2x the snapshot size free.\n\nAfter the restore has completed the service can be undrained. Post-restore the integrity report\nis written to /var/log/gezel/restore-report.json and this should be reviewed before undraining.\n"
21
18
  }
22
19
  ],
23
20
  "worker": {
24
- "name": "Jules",
25
- "role": "Developer"
21
+ "name": "Wieke",
22
+ "role": "Copywriter"
23
+ },
24
+ "craftbookParams": {
25
+ "workPath": "tasks/eval"
26
26
  }
27
27
  },
28
28
  "mocks": [],
29
29
  "success": {
30
- "summary": "automation.md is a dry-run external-automation artifact grounded in fake service fixtures.",
30
+ "summary": "rewritten-doc.md is a usable procedure that preserves every fact from the original, and the audit that drove it is on record.",
31
31
  "deliverables": [
32
32
  {
33
- "path": "automation.md",
33
+ "path": "tasks/eval/audit.md",
34
+ "kind": "markdown-notes",
35
+ "artifact": true,
36
+ "minBytes": 250,
37
+ "checks": [
38
+ {
39
+ "kind": "contains",
40
+ "file": "tasks/eval/audit.md",
41
+ "pattern": "RPO|jargon|acronym",
42
+ "flags": "i",
43
+ "label": "names the undefined jargon",
44
+ "artifact": true
45
+ },
46
+ {
47
+ "kind": "contains",
48
+ "file": "tasks/eval/audit.md",
49
+ "pattern": "prerequisit|ops-admin|up front",
50
+ "flags": "i",
51
+ "label": "names the buried prerequisite",
52
+ "artifact": true
53
+ }
54
+ ]
55
+ },
56
+ {
57
+ "path": "rewritten-doc.md",
34
58
  "kind": "markdown-report",
35
59
  "minBytes": 900,
36
60
  "checks": [
37
61
  {
38
62
  "kind": "contains",
39
- "file": "automation.md",
40
- "pattern": "(?:^|\\n)#{1,3}\\s+\\S",
41
- "flags": "i"
63
+ "file": "rewritten-doc.md",
64
+ "pattern": "14[\\s-]?day|14 days",
65
+ "flags": "i",
66
+ "label": "preserves the 14-day restore window"
67
+ },
68
+ {
69
+ "kind": "contains",
70
+ "file": "rewritten-doc.md",
71
+ "pattern": "gezel-restore --snapshot",
72
+ "flags": "i",
73
+ "label": "preserves the exact command"
74
+ },
75
+ {
76
+ "kind": "contains",
77
+ "file": "rewritten-doc.md",
78
+ "pattern": "--verify",
79
+ "flags": "i",
80
+ "label": "preserves the verification flag"
81
+ },
82
+ {
83
+ "kind": "contains",
84
+ "file": "rewritten-doc.md",
85
+ "pattern": "ops-admin",
86
+ "flags": "i",
87
+ "label": "preserves the required role"
88
+ },
89
+ {
90
+ "kind": "contains",
91
+ "file": "rewritten-doc.md",
92
+ "pattern": "2x|twice the snapshot|two times the snapshot",
93
+ "flags": "i",
94
+ "label": "preserves the free-space requirement"
95
+ },
96
+ {
97
+ "kind": "contains",
98
+ "file": "rewritten-doc.md",
99
+ "pattern": "restore-report\\.json",
100
+ "flags": "i",
101
+ "label": "preserves the integrity-report path"
42
102
  },
43
103
  {
44
104
  "kind": "contains",
45
- "file": "automation.md",
46
- "pattern": "DRY_RUN_OK|dry-run|dry run",
47
- "flags": "i"
105
+ "file": "rewritten-doc.md",
106
+ "pattern": "recovery[\\s-]point[\\s-]objective",
107
+ "flags": "i",
108
+ "label": "defines RPO on first use"
48
109
  },
49
110
  {
50
111
  "kind": "contains",
51
- "file": "automation.md",
52
- "pattern": "fake-ci|fake-github|/api/bookings",
53
- "flags": "i"
112
+ "file": "rewritten-doc.md",
113
+ "pattern": "(?:^|\\n)#{1,3}\\s*[^\\n]*(prerequisit|before you (begin|start)|requirements)",
114
+ "flags": "i",
115
+ "label": "prerequisites are a section, not buried prose"
54
116
  },
55
117
  {
56
118
  "kind": "contains",
57
- "file": "automation.md",
58
- "pattern": "no real|credentials|safety|guard",
59
- "flags": "i"
119
+ "file": "rewritten-doc.md",
120
+ "pattern": "(?:^|\\n)\\s*1\\.\\s+\\S",
121
+ "flags": "",
122
+ "label": "numbered procedure"
60
123
  },
61
124
  {
62
125
  "kind": "contains",
63
- "file": "automation.md",
64
- "pattern": "success|failure|retry|abort",
65
- "flags": "i"
126
+ "file": "rewritten-doc.md",
127
+ "pattern": "(?:^|\\n)\\s*2\\.\\s+\\S",
128
+ "flags": "",
129
+ "label": "more than one numbered step"
130
+ },
131
+ {
132
+ "kind": "contains",
133
+ "file": "rewritten-doc.md",
134
+ "pattern": "drain",
135
+ "flags": "i",
136
+ "label": "preserves the drain-before-restore step"
66
137
  }
67
138
  ]
68
139
  }
140
+ ],
141
+ "unchangedFixtures": [
142
+ "docs/backup-restore.md"
69
143
  ]
70
144
  },
71
145
  "rubric": {
72
146
  "artifact": {
73
- "path": "automation.md",
147
+ "path": "rewritten-doc.md",
74
148
  "kind": "markdown"
75
149
  },
76
150
  "axes": [
77
151
  {
78
- "name": "safety",
79
- "description": "Dry-run posture is explicit: no real credentials, clear stop-before-side-effect boundary."
152
+ "name": "fact-preservation",
153
+ "description": "Every technical fact, value, path, flag and constraint in the original survives the rewrite."
80
154
  },
81
155
  {
82
- "name": "mapping",
83
- "description": "Fake endpoints/commands are mapped completely to the workflow steps."
156
+ "name": "structure",
157
+ "description": "Prerequisites come first and the procedure is ordered, numbered steps in execution order."
84
158
  },
85
159
  {
86
- "name": "signals",
87
- "description": "Success, failure, retry, and abort conditions are all defined."
160
+ "name": "clarity",
161
+ "description": "Jargon is defined on first use and instructions are imperative and unambiguous."
88
162
  },
89
163
  {
90
- "name": "containment",
91
- "description": "The plan cannot accidentally reach a real service from a mock context."
164
+ "name": "usability",
165
+ "description": "An on-call engineer could follow this under pressure without consulting the original."
92
166
  }
93
167
  ]
94
168
  },
95
169
  "qualityFocus": [
96
- "dry-run safety",
97
- "fake tool mapping",
98
- "side-effect containment"
99
- ],
100
- "extensions": {
101
- "legacySimulators": [
102
- {
103
- "id": "doc-rewrite-fake-service-fixture",
104
- "kind": "data-source",
105
- "status": "implemented",
106
- "description": "Seeded local fake service contract replacing live CLIs, HTTP APIs, credentials, and side effects."
107
- }
108
- ]
109
- }
170
+ "fact preservation",
171
+ "procedure structure",
172
+ "defined jargon"
173
+ ]
110
174
  }
@@ -0,0 +1,285 @@
1
+ {
2
+ "id": "dockerize-app",
3
+ "name": "Containerize a Service",
4
+ "description": "Containerize an application with a production-grade Dockerfile — small, secure, reproducible, and buildable — plus the supporting files to run it. Scopes the container contract FIRST — base image, build vs runtime stages, dependencies, exposed port, entrypoint, env config, and the size/security bar — then writes the Dockerfile + .dockerignore + compose, then a reviewer confirms it builds, runs, and meets the bar. Covers multi-stage builds, slim base images, layer caching, non-root user, .dockerignore, healthchecks, EXPOSE/ENTRYPOINT, and reproducible image builds.\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 container (planner) — lock base image, stages, port, entrypoint, bar → gated on artifact `{{workPath}}/scope.md` (markdown-notes)\n2. Write the Dockerfile (developer) — implement the multi-stage Dockerfile + support files → gated on `Dockerfile` (code-module)\n3. Verify the image (reviewer) — confirm it builds, runs, and meets the bar → gated on artifact `{{workPath}}/verify.md` (markdown-notes)\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
+ "dockerize this app",
8
+ "write a dockerfile",
9
+ "containerize a service",
10
+ "create a docker image",
11
+ "docker compose setup"
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 container",
28
+ "description": "lock base image, stages, port, entrypoint, bar",
29
+ "prompt": "Scope the container before writing the Dockerfile. Step 1: Identify the runtime (language/version) and pick a slim, pinned base image. Step 2: Decide the build strategy: a multi-stage build (build deps in one stage, copy only artifacts to a slim runtime stage) and what gets copied forward. Step 3: List the dependencies to install, the port to EXPOSE, the ENTRYPOINT/CMD, and the env vars the app needs at runtime. Step 4: Set the bar: run as a non-root user, a .dockerignore that excludes junk, a healthcheck, and a rough image-size target. Step 5: Write a numbered acceptance-criteria checklist of 5-9 items (e.g. 'docker build succeeds from a clean context', 'the container starts and serves on the exposed port', 'runs as non-root', 'final image uses a multi-stage slim base'). `write_task_note` the scope + checklist and write the same to the produces path.\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": "build"
83
+ },
84
+ {
85
+ "id": "build",
86
+ "name": "Write the Dockerfile",
87
+ "description": "implement the multi-stage Dockerfile + support files",
88
+ "prompt": "Author the containerization files to the scope. Step 1: Write a multi-stage `Dockerfile` — a build stage that installs deps and builds, then a slim runtime stage that copies only the needed artifacts. Step 2: Order layers for cache efficiency (copy manifest + install deps BEFORE copying source), pin the base image, set a non-root USER, EXPOSE the port, and define ENTRYPOINT/CMD and a HEALTHCHECK. Step 3: Write a `.dockerignore` that excludes node_modules, .git, build output, and secrets. Step 4: If a service needs orchestration, add a minimal compose/run file. Step 5: Build the image and confirm it succeeds and the container starts. Write the Dockerfile to the produces path. On a loop-back, fix only the named gaps. `write_task_note` the file paths and which criteria now pass.",
89
+ "suggestedRole": "developer",
90
+ "toolPolicy": {
91
+ "disallowBuiltinToolsets": [
92
+ "ai-apps",
93
+ "archives",
94
+ "artifacts",
95
+ "audio",
96
+ "browser-automation",
97
+ "code-execution",
98
+ "craftbooks",
99
+ "data-tables",
100
+ "entity-intel",
101
+ "image-intel",
102
+ "images",
103
+ "role-delegation",
104
+ "role-delegation-escalation",
105
+ "security-intel",
106
+ "team-management",
107
+ "videos",
108
+ "web"
109
+ ],
110
+ "outputMedium": "workspace",
111
+ "additionalOutputMedia": [
112
+ "task-note"
113
+ ]
114
+ },
115
+ "advanceWhen": {
116
+ "file": "Dockerfile",
117
+ "minBytes": 1,
118
+ "sniff": "nonempty"
119
+ },
120
+ "gate": {
121
+ "at": "completion",
122
+ "checks": [
123
+ {
124
+ "kind": "minBytes",
125
+ "file": "Dockerfile",
126
+ "bytes": 200
127
+ },
128
+ {
129
+ "kind": "sniff",
130
+ "file": "Dockerfile",
131
+ "sniff": "nonempty"
132
+ },
133
+ {
134
+ "kind": "esmImports",
135
+ "file": "Dockerfile"
136
+ },
137
+ {
138
+ "kind": "sourceParses",
139
+ "file": "Dockerfile"
140
+ }
141
+ ],
142
+ "onReject": "build",
143
+ "maxAttempts": 3
144
+ },
145
+ "next": "verify"
146
+ },
147
+ {
148
+ "id": "verify",
149
+ "name": "Verify the image",
150
+ "description": "confirm it builds, runs, and meets the bar",
151
+ "prompt": "Verify the container build. Step 1: Build the image from a clean context and confirm the build succeeds. Step 2: Run the container and confirm it starts and serves on the exposed port (hit the healthcheck/endpoint). Step 3: Confirm the bar: multi-stage slim base, non-root user, a real .dockerignore, pinned base image, and a sane final size. Step 4: Confirm no secrets or junk were baked into the image layers. Write a verification note with the build result, run check, and size to the produces path.\n\nThe deliverable `{{workPath}}/verify.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.",
152
+ "suggestedRole": "reviewer",
153
+ "toolPolicy": {
154
+ "disallowBuiltinToolsets": [
155
+ "ai-apps",
156
+ "archives",
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": "artifact",
175
+ "additionalOutputMedia": [
176
+ "task-note"
177
+ ]
178
+ },
179
+ "advanceWhen": {
180
+ "file": "{{workPath}}/verify.md",
181
+ "minBytes": 1,
182
+ "sniff": "nonempty",
183
+ "artifact": true
184
+ },
185
+ "gate": {
186
+ "at": "completion",
187
+ "checks": [
188
+ {
189
+ "kind": "minBytes",
190
+ "file": "Dockerfile",
191
+ "bytes": 200
192
+ },
193
+ {
194
+ "kind": "sniff",
195
+ "file": "Dockerfile",
196
+ "sniff": "nonempty"
197
+ },
198
+ {
199
+ "kind": "esmImports",
200
+ "file": "Dockerfile"
201
+ },
202
+ {
203
+ "kind": "sourceParses",
204
+ "file": "Dockerfile"
205
+ }
206
+ ],
207
+ "onReject": "verify",
208
+ "maxAttempts": 4
209
+ },
210
+ "next": "evaluate"
211
+ },
212
+ {
213
+ "id": "evaluate",
214
+ "name": "Evaluate",
215
+ "description": "Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.",
216
+ "prompt": "Build and run the image. For EACH acceptance criterion: confirm `docker build` succeeds from a clean context, confirm the container starts and serves on the exposed port, confirm it runs as non-root with a multi-stage slim base and a .dockerignore, and confirm no secrets/junk were baked in. Write PASS/FAIL per criterion.\n\nThen route — this is the whole point of the loop:\n\n- **Every criterion PASSES →** call `advance_task_step({ ref, stepId: \"evaluate\", next: \"finish\" })`.\n- **Any criterion FAILS →** write the specific gaps to notes, then call `advance_task_step({ ref, stepId: \"evaluate\", next: \"build\" })` to loop back. The builder fixes exactly those gaps.\n\nNever route to `finish` while any criterion is unmet. The build phase's completion gate already blocked a grossly-incomplete deliverable; your job is the judgment an automated check cannot make (does it actually work, read well, look right). After ~3 unproductive loops, stop and report DONE_WITH_CONCERNS so the user can step in.",
217
+ "suggestedRole": "reviewer",
218
+ "toolPolicy": {
219
+ "disallowBuiltinToolsets": [
220
+ "ai-apps",
221
+ "archives",
222
+ "artifacts",
223
+ "audio",
224
+ "browser-automation",
225
+ "code-execution",
226
+ "craftbooks",
227
+ "data-tables",
228
+ "entity-intel",
229
+ "git",
230
+ "image-intel",
231
+ "images",
232
+ "role-delegation",
233
+ "role-delegation-escalation",
234
+ "security-intel",
235
+ "team-management",
236
+ "videos",
237
+ "web",
238
+ "workspace-fs-write"
239
+ ],
240
+ "outputMedium": "task-note"
241
+ },
242
+ "consumes": [
243
+ {
244
+ "file": "Dockerfile"
245
+ }
246
+ ],
247
+ "next": "build"
248
+ },
249
+ {
250
+ "id": "finish",
251
+ "name": "Finish",
252
+ "description": "All acceptance criteria met. Stamp a short summary and report DONE.",
253
+ "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.",
254
+ "suggestedRole": "developer",
255
+ "toolPolicy": {
256
+ "disallowBuiltinToolsets": [
257
+ "ai-apps",
258
+ "archives",
259
+ "artifacts",
260
+ "audio",
261
+ "browser-automation",
262
+ "code-execution",
263
+ "craftbooks",
264
+ "data-tables",
265
+ "entity-intel",
266
+ "git",
267
+ "image-intel",
268
+ "images",
269
+ "role-delegation",
270
+ "role-delegation-escalation",
271
+ "security-intel",
272
+ "team-management",
273
+ "videos",
274
+ "web",
275
+ "workspace-fs-write"
276
+ ],
277
+ "outputMedium": "task-note"
278
+ },
279
+ "terminal": true
280
+ }
281
+ ],
282
+ "version": "1.0.4",
283
+ "releasedAt": "2026-09-05T03:30:00Z",
284
+ "minGezelVersion": "1.26233"
285
+ }
@@ -0,0 +1,92 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "title": "Containerize a Service smoke eval",
4
+ "objective": "Self-contained smoke eval for the Containerize a Service craftbook using the code generic harness.",
5
+ "tags": [
6
+ "code"
7
+ ],
8
+ "prompt": "We need a small Node helper for this — the requirments are in source/requirements.md. Put it in src/solution.mjs.",
9
+ "setup": {
10
+ "projectName": "Containerize a Service Eval",
11
+ "about": "Self-contained eval project for dockerize-app. Seeded inputs are under workspace/source or workspace/fixtures; final deliverable is workspace/src/solution.mjs.",
12
+ "missionObjectives": "Use the Containerize a Service craftbook/template, read the seeded local fixtures, and write src/solution.mjs without network calls, real credentials, or live services.",
13
+ "files": [
14
+ {
15
+ "path": "source/brief.md",
16
+ "content": "# Containerize a Service 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: dockerize-app - Containerize a Service.\n"
17
+ },
18
+ {
19
+ "path": "source/requirements.md",
20
+ "content": "# Runner Requirements\n\nBuild a dependency-free Node ESM helper for Boreal Desk support operations. Export at least one function. Include a tiny self-test section using node:assert or an equivalent assertion helper. Use fixture values for 18 -> 6 hour response time and 14.2 -> 8.9 refund leakage.\n"
21
+ }
22
+ ],
23
+ "worker": {
24
+ "name": "Jules",
25
+ "role": "Developer"
26
+ }
27
+ },
28
+ "mocks": [],
29
+ "success": {
30
+ "summary": "src/solution.mjs is a local ESM module with basic self-test scaffolding.",
31
+ "deliverables": [
32
+ {
33
+ "path": "src/solution.mjs",
34
+ "kind": "code-with-tests",
35
+ "minBytes": 1500,
36
+ "checks": [
37
+ {
38
+ "kind": "esmImports",
39
+ "file": "src/solution.mjs"
40
+ },
41
+ {
42
+ "kind": "contains",
43
+ "file": "src/solution.mjs",
44
+ "pattern": "export\\s+(function|const|class)|export\\s*\\{",
45
+ "flags": "i"
46
+ },
47
+ {
48
+ "kind": "contains",
49
+ "file": "src/solution.mjs",
50
+ "pattern": "assert|test|describe|it|expect",
51
+ "flags": "i"
52
+ },
53
+ {
54
+ "kind": "contains",
55
+ "file": "src/solution.mjs",
56
+ "pattern": "18|6|14\\.2|8\\.9|Boreal",
57
+ "flags": "i"
58
+ }
59
+ ]
60
+ }
61
+ ]
62
+ },
63
+ "rubric": {
64
+ "artifact": {
65
+ "path": "src/solution.mjs",
66
+ "kind": "typescript"
67
+ },
68
+ "axes": [
69
+ {
70
+ "name": "correctness",
71
+ "description": "The module does what the requirements ask, with sensible edge handling."
72
+ },
73
+ {
74
+ "name": "verification",
75
+ "description": "Self-tests exercise real behavior, not trivial truths."
76
+ },
77
+ {
78
+ "name": "clarity",
79
+ "description": "Exports, naming, and structure make the module usable without reading every line."
80
+ },
81
+ {
82
+ "name": "robustness",
83
+ "description": "Invalid input and boundary cases fail loudly rather than silently."
84
+ }
85
+ ]
86
+ },
87
+ "qualityFocus": [
88
+ "runnable ESM",
89
+ "test scaffolding",
90
+ "local fixtures"
91
+ ]
92
+ }