@bendyline/gilde 0.1.39 → 0.1.41

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 (434) hide show
  1. package/authoring/chat-models/muse-glimmer-30b-q4.json +3 -3
  2. package/authoring/chat-models/ornith-9b-q4.json +1 -1
  3. package/authoring/chat-models/ornith1.5-9b-q4.json +149 -0
  4. package/authoring/chat-models/qwen3.8-27b-iq1-s.json +190 -0
  5. package/authoring/chat-models/qwen3.8-27b-q2.json +189 -0
  6. package/authoring/gstack/overlays/investigate.json +1 -0
  7. package/authoring/gstack/overlays/qa-only.json +1 -0
  8. package/authoring/gstack/wave.json +12 -2
  9. package/authoring/tactical/books/accessibility-retrofit.json +188 -0
  10. package/authoring/tactical/books/apply-review-findings.json +189 -0
  11. package/authoring/tactical/books/bug-fix-tdd.json +237 -0
  12. package/authoring/tactical/books/ci-pipeline.json +168 -0
  13. package/authoring/tactical/books/codemod-sweep.json +182 -0
  14. package/authoring/tactical/books/dependency-upgrade.json +196 -0
  15. package/authoring/tactical/books/flaky-test-fix.json +238 -0
  16. package/authoring/tactical/books/hotfix-flow.json +187 -0
  17. package/authoring/tactical/books/perf-optimization.json +219 -0
  18. package/authoring/tactical/books/refactor-module.json +217 -0
  19. package/authoring/tactical/books/schema-migration.json +192 -0
  20. package/authoring/tactical/books/test-suite-backfill.json +172 -0
  21. package/authoring/tactical/books/type-safety-pass.json +185 -0
  22. package/authoring/tactical/books/ux-update.json +178 -0
  23. package/authoring/tactical/evals/accessibility-retrofit.json +230 -0
  24. package/authoring/tactical/evals/apply-review-findings.json +290 -0
  25. package/authoring/tactical/evals/bug-fix-tdd.json +221 -0
  26. package/authoring/tactical/evals/ci-pipeline.json +227 -0
  27. package/authoring/tactical/evals/codemod-sweep.json +252 -0
  28. package/authoring/tactical/evals/dependency-upgrade.json +235 -0
  29. package/authoring/tactical/evals/flaky-test-fix.json +239 -0
  30. package/authoring/tactical/evals/hotfix-flow.json +220 -0
  31. package/authoring/tactical/evals/perf-optimization.json +235 -0
  32. package/authoring/tactical/evals/refactor-module.json +241 -0
  33. package/authoring/tactical/evals/schema-migration.json +225 -0
  34. package/authoring/tactical/evals/test-suite-backfill.json +197 -0
  35. package/authoring/tactical/evals/type-safety-pass.json +221 -0
  36. package/authoring/tactical/evals/ux-update.json +206 -0
  37. package/authoring/tactical/wave.json +89 -0
  38. package/data/chat-models/de/deepseek-r1-8b-q4/manifest.json +56 -1
  39. package/data/chat-models/gl/glm-5.2-754b-q2/manifest.json +56 -0
  40. package/data/chat-models/gp/gpt-oss-120b-q4/manifest.json +73 -1
  41. package/data/chat-models/gp/gpt-oss-20b-q4/manifest.json +77 -1
  42. package/data/chat-models/index.json +1 -1
  43. package/data/chat-models/ll/llama3.2-3b-q4/manifest.json +3 -1
  44. package/data/chat-models/mi/mistral-7b-q4/manifest.json +54 -3
  45. package/data/chat-models/mi/mistral-medium-3.5-128b-q4/manifest.json +76 -1
  46. package/data/chat-models/mu/muse-glimmer-30b-q4/manifest.json +4 -3
  47. package/data/chat-models/mu/muse-glimmer-30b-q4/versions/1.0.2/manifest.json +20 -0
  48. package/data/chat-models/or/ornith-9b-q4/manifest.json +1 -1
  49. package/data/chat-models/or/ornith1.5-9b-q4/manifest.json +187 -0
  50. package/data/chat-models/or/ornith1.5-9b-q4/versions/1.0.0/manifest.json +53 -0
  51. package/data/chat-models/qw/qwen3.8-27b-iq1-s/manifest.json +195 -0
  52. package/data/chat-models/qw/qwen3.8-27b-iq1-s/versions/1.0.0/manifest.json +19 -0
  53. package/data/chat-models/qw/qwen3.8-27b-q2/manifest.json +194 -0
  54. package/data/chat-models/qw/qwen3.8-27b-q2/versions/1.0.0/manifest.json +19 -0
  55. package/data/craftbook-templates/a1/a11y-audit/manifest.json +1 -0
  56. package/data/craftbook-templates/ab/ab-test-readout/manifest.json +1 -0
  57. package/data/craftbook-templates/ac/accessibility-retrofit/manifest.json +6 -4
  58. package/data/craftbook-templates/ac/accessibility-retrofit/versions/2.0.0/craftbook.json +451 -0
  59. package/data/craftbook-templates/ac/accessibility-retrofit/versions/2.0.0/test.json +231 -0
  60. package/data/craftbook-templates/ad/ad-variations/manifest.json +1 -0
  61. package/data/craftbook-templates/al/album-curate/manifest.json +1 -0
  62. package/data/craftbook-templates/al/alert-rules/manifest.json +1 -0
  63. package/data/craftbook-templates/al/alt-text-pass/manifest.json +6 -1
  64. package/data/craftbook-templates/an/anniversary-cut/manifest.json +1 -0
  65. package/data/craftbook-templates/an/annotated-bibliography/manifest.json +1 -0
  66. package/data/craftbook-templates/an/annual-document-review/manifest.json +1 -0
  67. package/data/craftbook-templates/an/anomaly-scan/manifest.json +1 -0
  68. package/data/craftbook-templates/ap/api-contract-review/manifest.json +1 -0
  69. package/data/craftbook-templates/ap/apply-review-findings/art.json +12 -0
  70. package/data/craftbook-templates/ap/apply-review-findings/logo.webp +0 -0
  71. package/data/craftbook-templates/ap/apply-review-findings/manifest.json +23 -0
  72. package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.0/craftbook.json +436 -0
  73. package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.0/test.json +291 -0
  74. package/data/craftbook-templates/ar/artifact-integrity-review/manifest.json +1 -0
  75. package/data/craftbook-templates/au/audio-ad-spot/manifest.json +1 -0
  76. package/data/craftbook-templates/au/audio-highlight-reel/manifest.json +1 -0
  77. package/data/craftbook-templates/au/audiobook-master-pack/manifest.json +1 -0
  78. package/data/craftbook-templates/au/auth-flow/manifest.json +1 -0
  79. package/data/craftbook-templates/au/automation-recipe/manifest.json +1 -0
  80. package/data/craftbook-templates/ba/backup-routine/manifest.json +1 -0
  81. package/data/craftbook-templates/bl/blog-post/manifest.json +1 -0
  82. package/data/craftbook-templates/bo/board-deck/manifest.json +1 -0
  83. package/data/craftbook-templates/bo/board-game-web/manifest.json +1 -0
  84. package/data/craftbook-templates/bo/booking-automation/manifest.json +1 -0
  85. package/data/craftbook-templates/br/branding-website/manifest.json +1 -0
  86. package/data/craftbook-templates/br/broadcast-announcement/manifest.json +1 -0
  87. package/data/craftbook-templates/br/browser-qa-audit/manifest.json +6 -1
  88. package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.5/craftbook.json +438 -0
  89. package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.5/test.json +379 -0
  90. package/data/craftbook-templates/bu/bug-fix-tdd/manifest.json +4 -3
  91. package/data/craftbook-templates/bu/bug-fix-tdd/versions/2.0.0/craftbook.json +545 -0
  92. package/data/craftbook-templates/bu/bug-fix-tdd/versions/2.0.0/test.json +222 -0
  93. package/data/craftbook-templates/bu/build-loop/manifest.json +1 -0
  94. package/data/craftbook-templates/ca/calendar-brief/manifest.json +1 -0
  95. package/data/craftbook-templates/ca/canvas-generative-art/manifest.json +1 -0
  96. package/data/craftbook-templates/ca/careful-mode/manifest.json +1 -0
  97. package/data/craftbook-templates/ca/case-study/manifest.json +1 -0
  98. package/data/craftbook-templates/ca/case-study-writeup/manifest.json +1 -0
  99. package/data/craftbook-templates/ch/changelog-cut/manifest.json +6 -1
  100. package/data/craftbook-templates/ch/changelog-writeup/manifest.json +6 -1
  101. package/data/craftbook-templates/ch/chapter-narration-run/manifest.json +1 -0
  102. package/data/craftbook-templates/ch/chapter-weave/manifest.json +1 -0
  103. package/data/craftbook-templates/ch/character-sheet/manifest.json +1 -0
  104. package/data/craftbook-templates/ch/character-turnaround/manifest.json +1 -0
  105. package/data/craftbook-templates/ch/chart-pack/manifest.json +1 -0
  106. package/data/craftbook-templates/ch/chrome-extension/manifest.json +1 -0
  107. package/data/craftbook-templates/ci/ci-pipeline/manifest.json +6 -3
  108. package/data/craftbook-templates/ci/ci-pipeline/versions/2.0.0/craftbook.json +423 -0
  109. package/data/craftbook-templates/ci/ci-pipeline/versions/2.0.0/test.json +228 -0
  110. package/data/craftbook-templates/ci/citation-audit/manifest.json +1 -0
  111. package/data/craftbook-templates/cl/cli-tool/manifest.json +1 -0
  112. package/data/craftbook-templates/co/code-review/manifest.json +1 -0
  113. package/data/craftbook-templates/co/codebase-refactoring-review/manifest.json +1 -0
  114. package/data/craftbook-templates/co/codebase-ux-review/manifest.json +1 -0
  115. package/data/craftbook-templates/co/codemod-sweep/art.json +12 -0
  116. package/data/craftbook-templates/co/codemod-sweep/logo.webp +0 -0
  117. package/data/craftbook-templates/co/codemod-sweep/manifest.json +23 -0
  118. package/data/craftbook-templates/co/codemod-sweep/versions/1.0.0/craftbook.json +441 -0
  119. package/data/craftbook-templates/co/codemod-sweep/versions/1.0.0/test.json +253 -0
  120. package/data/craftbook-templates/co/cohort-analysis/manifest.json +1 -0
  121. package/data/craftbook-templates/co/company-research-brief/manifest.json +1 -0
  122. package/data/craftbook-templates/co/comparison-matrix/manifest.json +1 -0
  123. package/data/craftbook-templates/co/compat-check/manifest.json +1 -0
  124. package/data/craftbook-templates/co/competitive-analysis/manifest.json +1 -0
  125. package/data/craftbook-templates/co/comprehensive-codebase-review/art.json +12 -0
  126. package/data/craftbook-templates/co/comprehensive-codebase-review/logo.webp +0 -0
  127. package/data/craftbook-templates/co/comprehensive-codebase-review/manifest.json +27 -0
  128. package/data/craftbook-templates/co/comprehensive-codebase-review/versions/1.0.0/craftbook.json +337 -0
  129. package/data/craftbook-templates/co/comprehensive-codebase-review/versions/1.0.0/test.json +160 -0
  130. package/data/craftbook-templates/co/config-scaffold/manifest.json +1 -0
  131. package/data/craftbook-templates/co/content-accuracy-review/manifest.json +1 -0
  132. package/data/craftbook-templates/co/content-deck/manifest.json +1 -0
  133. package/data/craftbook-templates/co/contract-template/manifest.json +1 -0
  134. package/data/craftbook-templates/co/cookbook-layout/manifest.json +1 -0
  135. package/data/craftbook-templates/co/copy-review/manifest.json +1 -0
  136. package/data/craftbook-templates/co/corpus-email-digest/manifest.json +1 -0
  137. package/data/craftbook-templates/co/corpus-synthesis/manifest.json +1 -0
  138. package/data/craftbook-templates/co/cover-letter/manifest.json +1 -0
  139. package/data/craftbook-templates/cr/crm-update-batch/manifest.json +1 -0
  140. package/data/craftbook-templates/cr/cron-job/manifest.json +1 -0
  141. package/data/craftbook-templates/cr/crossword-forge/manifest.json +1 -0
  142. package/data/craftbook-templates/cs/csv-transformer/manifest.json +1 -0
  143. package/data/craftbook-templates/da/dashboard-spec/manifest.json +1 -0
  144. package/data/craftbook-templates/da/data-dictionary/manifest.json +1 -0
  145. package/data/craftbook-templates/da/data-export-migrate/manifest.json +1 -0
  146. package/data/craftbook-templates/da/data-join-merge/manifest.json +1 -0
  147. package/data/craftbook-templates/da/data-pipeline-etl/manifest.json +1 -0
  148. package/data/craftbook-templates/da/data-quality-audit/manifest.json +1 -0
  149. package/data/craftbook-templates/da/data-to-report/manifest.json +1 -0
  150. package/data/craftbook-templates/da/data-viz-page/manifest.json +1 -0
  151. package/data/craftbook-templates/da/dataset-clean/manifest.json +1 -0
  152. package/data/craftbook-templates/db/db-index-tuning/manifest.json +1 -0
  153. package/data/craftbook-templates/de/deep-security-review/manifest.json +1 -0
  154. package/data/craftbook-templates/de/dependency-audit/manifest.json +1 -0
  155. package/data/craftbook-templates/de/dependency-upgrade/art.json +12 -0
  156. package/data/craftbook-templates/de/dependency-upgrade/logo.webp +0 -0
  157. package/data/craftbook-templates/de/dependency-upgrade/manifest.json +23 -0
  158. package/data/craftbook-templates/de/dependency-upgrade/versions/1.0.0/craftbook.json +459 -0
  159. package/data/craftbook-templates/de/dependency-upgrade/versions/1.0.0/test.json +236 -0
  160. package/data/craftbook-templates/de/deploy-checklist/manifest.json +1 -0
  161. package/data/craftbook-templates/de/design-review/manifest.json +1 -0
  162. package/data/craftbook-templates/de/design-system-consultation/manifest.json +1 -0
  163. package/data/craftbook-templates/di/diagram-from-text/manifest.json +1 -0
  164. package/data/craftbook-templates/di/digest-from-feeds/manifest.json +1 -0
  165. package/data/craftbook-templates/do/doc-intake-pipeline/manifest.json +1 -0
  166. package/data/craftbook-templates/do/doc-rewrite/manifest.json +1 -0
  167. package/data/craftbook-templates/do/dockerize-app/manifest.json +1 -0
  168. package/data/craftbook-templates/do/docs-site/manifest.json +1 -0
  169. package/data/craftbook-templates/do/documentation-drift-review/manifest.json +1 -0
  170. package/data/craftbook-templates/dr/draft-social-post/manifest.json +1 -0
  171. package/data/craftbook-templates/dr/drive-wrap-up/manifest.json +1 -0
  172. package/data/craftbook-templates/du/due-diligence-brief/manifest.json +1 -0
  173. package/data/craftbook-templates/eb/ebook-compile/manifest.json +1 -0
  174. package/data/craftbook-templates/ed/edit-notes/manifest.json +1 -0
  175. package/data/craftbook-templates/em/email-sequence/manifest.json +1 -0
  176. package/data/craftbook-templates/em/email-template/manifest.json +1 -0
  177. package/data/craftbook-templates/en/engineering-retrospective/manifest.json +1 -0
  178. package/data/craftbook-templates/ep/episode-plan/manifest.json +1 -0
  179. package/data/craftbook-templates/es/escalation-playbook/manifest.json +1 -0
  180. package/data/craftbook-templates/ev/evidence-brief/manifest.json +1 -0
  181. package/data/craftbook-templates/ex/executive-level-review/manifest.json +1 -0
  182. package/data/craftbook-templates/ex/expense-categorize/manifest.json +1 -0
  183. package/data/craftbook-templates/fa/fact-check/manifest.json +1 -0
  184. package/data/craftbook-templates/fa/family-story-chapter/manifest.json +1 -0
  185. package/data/craftbook-templates/fa/faq-from-docs/manifest.json +1 -0
  186. package/data/craftbook-templates/fa/favicon-set/manifest.json +1 -0
  187. package/data/craftbook-templates/fe/feature-flag-release/manifest.json +6 -1
  188. package/data/craftbook-templates/fe/feature-flag-rollout/manifest.json +5 -1
  189. package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.1.0/craftbook.json +203 -0
  190. package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.1.0/test.json +165 -0
  191. package/data/craftbook-templates/fe/feedback-widget/manifest.json +1 -0
  192. package/data/craftbook-templates/fl/flaky-test-fix/art.json +12 -0
  193. package/data/craftbook-templates/fl/flaky-test-fix/logo.webp +0 -0
  194. package/data/craftbook-templates/fl/flaky-test-fix/manifest.json +24 -0
  195. package/data/craftbook-templates/fl/flaky-test-fix/versions/1.0.0/craftbook.json +534 -0
  196. package/data/craftbook-templates/fl/flaky-test-fix/versions/1.0.0/test.json +240 -0
  197. package/data/craftbook-templates/fo/folder-to-audio/manifest.json +1 -0
  198. package/data/craftbook-templates/fo/forecast-model/manifest.json +1 -0
  199. package/data/craftbook-templates/fo/form-fill-batch/manifest.json +1 -0
  200. package/data/craftbook-templates/fo/form-wizard/manifest.json +1 -0
  201. package/data/craftbook-templates/fr/freeze-scope/manifest.json +1 -0
  202. package/data/craftbook-templates/ga/game-with-screens/manifest.json +1 -0
  203. package/data/craftbook-templates/gl/glossary-build/manifest.json +1 -0
  204. package/data/craftbook-templates/gr/graphql-api/manifest.json +1 -0
  205. package/data/craftbook-templates/gr/grpc-service/manifest.json +1 -0
  206. package/data/craftbook-templates/ha/handbook-section/manifest.json +1 -0
  207. package/data/craftbook-templates/he/hero-image/manifest.json +1 -0
  208. package/data/craftbook-templates/ho/holiday-card-run/manifest.json +1 -0
  209. package/data/craftbook-templates/ho/hotfix-flow/manifest.json +6 -3
  210. package/data/craftbook-templates/ho/hotfix-flow/versions/2.0.0/craftbook.json +442 -0
  211. package/data/craftbook-templates/ho/hotfix-flow/versions/2.0.0/test.json +221 -0
  212. package/data/craftbook-templates/ht/html-arcade-game/manifest.json +1 -0
  213. package/data/craftbook-templates/ht/html-puzzle-game/manifest.json +1 -0
  214. package/data/craftbook-templates/ic/icon-pack/manifest.json +1 -0
  215. package/data/craftbook-templates/id/idea-office-hours/manifest.json +1 -0
  216. package/data/craftbook-templates/id/idle-clicker-game/manifest.json +1 -0
  217. package/data/craftbook-templates/im/image-batch-edit/manifest.json +1 -0
  218. package/data/craftbook-templates/im/image-dedup-cluster/manifest.json +1 -0
  219. package/data/craftbook-templates/im/image-palette-extract/manifest.json +1 -0
  220. package/data/craftbook-templates/im/image-seo-rename/manifest.json +1 -0
  221. package/data/craftbook-templates/im/image-set-index/manifest.json +1 -0
  222. package/data/craftbook-templates/in/inbox-triage/manifest.json +1 -0
  223. package/data/craftbook-templates/in/incident-comms-templates/manifest.json +1 -0
  224. package/data/craftbook-templates/in/incident-postmortem/manifest.json +1 -0
  225. package/data/craftbook-templates/in/insurance-inventory/manifest.json +1 -0
  226. package/data/craftbook-templates/in/interactive-quiz/manifest.json +1 -0
  227. package/data/craftbook-templates/in/investigate/manifest.json +5 -1
  228. package/data/craftbook-templates/in/investigate-root-cause/manifest.json +6 -1
  229. package/data/craftbook-templates/in/invitation-design/manifest.json +1 -0
  230. package/data/craftbook-templates/in/invoice-generator/manifest.json +1 -0
  231. package/data/craftbook-templates/in/invoice-run/manifest.json +1 -0
  232. package/data/craftbook-templates/index.json +1 -1
  233. package/data/craftbook-templates/it/item-intake/manifest.json +1 -0
  234. package/data/craftbook-templates/ju/juice-pass/manifest.json +1 -0
  235. package/data/craftbook-templates/kn/knowledge-base-article/manifest.json +1 -0
  236. package/data/craftbook-templates/kp/kpi-scorecard/manifest.json +1 -0
  237. package/data/craftbook-templates/la/landing-copy/manifest.json +1 -0
  238. package/data/craftbook-templates/la/landing-page/manifest.json +1 -0
  239. package/data/craftbook-templates/le/lead-enrichment/manifest.json +1 -0
  240. package/data/craftbook-templates/li/library-package/manifest.json +1 -0
  241. package/data/craftbook-templates/li/literature-review/manifest.json +1 -0
  242. package/data/craftbook-templates/li/live-browser-qa/manifest.json +6 -1
  243. package/data/craftbook-templates/lo/localize-content/manifest.json +1 -0
  244. package/data/craftbook-templates/lo/logo-set/manifest.json +1 -0
  245. package/data/craftbook-templates/ma/market-scan/manifest.json +1 -0
  246. package/data/craftbook-templates/me/meeting-minutes/manifest.json +1 -0
  247. package/data/craftbook-templates/me/meeting-notes-to-actions/manifest.json +1 -0
  248. package/data/craftbook-templates/me/meeting-prep-brief/manifest.json +1 -0
  249. package/data/craftbook-templates/me/meeting-summary-audio/manifest.json +1 -0
  250. package/data/craftbook-templates/me/memory-prompt-session/manifest.json +1 -0
  251. package/data/craftbook-templates/me/message-queue-consumer/manifest.json +1 -0
  252. package/data/craftbook-templates/mi/micro-game-jam/manifest.json +1 -0
  253. package/data/craftbook-templates/mo/mock-interview/manifest.json +1 -0
  254. package/data/craftbook-templates/mo/mod-scaffold/manifest.json +1 -0
  255. package/data/craftbook-templates/mo/monitor-and-alert/manifest.json +1 -0
  256. package/data/craftbook-templates/mo/month-close/manifest.json +1 -0
  257. package/data/craftbook-templates/mo/monthly-recording-review/manifest.json +1 -0
  258. package/data/craftbook-templates/mo/moodboard/manifest.json +1 -0
  259. package/data/craftbook-templates/mo/morning-brief/manifest.json +1 -0
  260. package/data/craftbook-templates/mo/morning-report/manifest.json +1 -0
  261. package/data/craftbook-templates/mu/music-metadata-tag/manifest.json +1 -0
  262. package/data/craftbook-templates/na/narrated-slideshow/manifest.json +1 -0
  263. package/data/craftbook-templates/ne/newsletter-issue/manifest.json +1 -0
  264. package/data/craftbook-templates/ni/nightly-fix-sweep/art.json +12 -0
  265. package/data/craftbook-templates/ni/nightly-fix-sweep/logo.webp +0 -0
  266. package/data/craftbook-templates/ni/nightly-fix-sweep/manifest.json +23 -0
  267. package/data/craftbook-templates/ni/nightly-fix-sweep/versions/1.0.0/craftbook.json +145 -0
  268. package/data/craftbook-templates/ni/nightly-fix-sweep/versions/1.0.0/test.json +121 -0
  269. package/data/craftbook-templates/no/notification-router/manifest.json +1 -0
  270. package/data/craftbook-templates/oc/ocr-extract/manifest.json +1 -0
  271. package/data/craftbook-templates/of/offer-compare/manifest.json +1 -0
  272. package/data/craftbook-templates/of/office-hours/manifest.json +1 -0
  273. package/data/craftbook-templates/on/onboarding-checklist/manifest.json +1 -0
  274. package/data/craftbook-templates/on/onboarding-flow/manifest.json +1 -0
  275. package/data/craftbook-templates/on/oncall-handoff/manifest.json +1 -0
  276. package/data/craftbook-templates/on/one-pager/manifest.json +1 -0
  277. package/data/craftbook-templates/op/ops-runbook/manifest.json +1 -0
  278. package/data/craftbook-templates/pa/page-spread/manifest.json +1 -0
  279. package/data/craftbook-templates/pa/parser-grammar/manifest.json +1 -0
  280. package/data/craftbook-templates/pe/perf-audit/manifest.json +1 -0
  281. package/data/craftbook-templates/pe/perf-audit/versions/1.1.0/craftbook.json +195 -0
  282. package/data/craftbook-templates/pe/perf-audit/versions/1.1.0/test.json +165 -0
  283. package/data/craftbook-templates/pe/perf-optimization/manifest.json +4 -3
  284. package/data/craftbook-templates/pe/perf-optimization/versions/2.0.0/craftbook.json +511 -0
  285. package/data/craftbook-templates/pe/perf-optimization/versions/2.0.0/test.json +236 -0
  286. package/data/craftbook-templates/pe/pest-diagnosis/manifest.json +1 -0
  287. package/data/craftbook-templates/ph/photo-cull/manifest.json +1 -0
  288. package/data/craftbook-templates/ph/physics-toy/manifest.json +1 -0
  289. package/data/craftbook-templates/pi/pitch-deck/manifest.json +1 -0
  290. package/data/craftbook-templates/pl/plan/manifest.json +1 -0
  291. package/data/craftbook-templates/pl/playtest-report/manifest.json +1 -0
  292. package/data/craftbook-templates/po/podcast-chaptering/manifest.json +1 -0
  293. package/data/craftbook-templates/po/portfolio-site/manifest.json +1 -0
  294. package/data/craftbook-templates/po/powerpoint-deck/manifest.json +1 -0
  295. package/data/craftbook-templates/pr/pr-security-review/manifest.json +1 -0
  296. package/data/craftbook-templates/pr/practice-exam/manifest.json +1 -0
  297. package/data/craftbook-templates/pr/practice-session/manifest.json +1 -0
  298. package/data/craftbook-templates/pr/pre-departure-countdown/manifest.json +1 -0
  299. package/data/craftbook-templates/pr/press-release/manifest.json +1 -0
  300. package/data/craftbook-templates/pr/price-tracker/manifest.json +1 -0
  301. package/data/craftbook-templates/pr/pricing-page/manifest.json +1 -0
  302. package/data/craftbook-templates/pr/product-descriptions/manifest.json +1 -0
  303. package/data/craftbook-templates/pr/proposal-sow/manifest.json +1 -0
  304. package/data/craftbook-templates/pu/pull-request-review/manifest.json +1 -0
  305. package/data/craftbook-templates/pu/puzzle-pack-layout/manifest.json +1 -0
  306. package/data/craftbook-templates/pw/pwa-offline/manifest.json +1 -0
  307. package/data/craftbook-templates/qa/qa/manifest.json +4 -1
  308. package/data/craftbook-templates/qu/quarterly-summary/manifest.json +1 -0
  309. package/data/craftbook-templates/re/reading-list/manifest.json +1 -0
  310. package/data/craftbook-templates/re/receipt-intake/manifest.json +1 -0
  311. package/data/craftbook-templates/re/receipt-ocr-ledger/manifest.json +1 -0
  312. package/data/craftbook-templates/re/reception-report/manifest.json +1 -0
  313. package/data/craftbook-templates/re/recipe-capture/manifest.json +1 -0
  314. package/data/craftbook-templates/re/record-a-relative/manifest.json +1 -0
  315. package/data/craftbook-templates/re/recurring-invoice-run/manifest.json +1 -0
  316. package/data/craftbook-templates/re/refactor-module/manifest.json +3 -2
  317. package/data/craftbook-templates/re/refactor-module/versions/1.0.4/craftbook.json +150 -0
  318. package/data/craftbook-templates/re/refactor-module/versions/1.0.4/test.json +95 -0
  319. package/data/craftbook-templates/re/refactor-module/versions/2.0.0/craftbook.json +509 -0
  320. package/data/craftbook-templates/re/refactor-module/versions/2.0.0/test.json +242 -0
  321. package/data/craftbook-templates/re/regex-builder/manifest.json +1 -0
  322. package/data/craftbook-templates/re/release-announcement/manifest.json +1 -0
  323. package/data/craftbook-templates/re/release-artifact-sanity-check/manifest.json +1 -0
  324. package/data/craftbook-templates/re/release-notes/manifest.json +6 -1
  325. package/data/craftbook-templates/re/release-notes/versions/1.0.3/craftbook.json +220 -0
  326. package/data/craftbook-templates/re/release-notes/versions/1.0.3/test.json +114 -0
  327. package/data/craftbook-templates/re/release-pipeline-ci/manifest.json +6 -1
  328. package/data/craftbook-templates/re/release-readiness-review/manifest.json +1 -0
  329. package/data/craftbook-templates/re/release-readiness-review/versions/1.1.0/craftbook.json +192 -0
  330. package/data/craftbook-templates/re/release-readiness-review/versions/1.1.0/test.json +113 -0
  331. package/data/craftbook-templates/re/reliability-review/manifest.json +1 -0
  332. package/data/craftbook-templates/re/report-pdf/manifest.json +1 -0
  333. package/data/craftbook-templates/re/research-report/manifest.json +1 -0
  334. package/data/craftbook-templates/re/research-to-document/manifest.json +1 -0
  335. package/data/craftbook-templates/re/rest-api/manifest.json +1 -0
  336. package/data/craftbook-templates/re/resume-cv/manifest.json +1 -0
  337. package/data/craftbook-templates/re/reviewer-loop/manifest.json +1 -0
  338. package/data/craftbook-templates/ro/rollback-plan/manifest.json +1 -0
  339. package/data/craftbook-templates/ro/root-cause-investigation/manifest.json +8 -1
  340. package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.5/craftbook.json +433 -0
  341. package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.5/test.json +157 -0
  342. package/data/craftbook-templates/ro/rough-cut-assembly/manifest.json +1 -0
  343. package/data/craftbook-templates/ru/runbook/manifest.json +1 -0
  344. package/data/craftbook-templates/sc/schema-migration/manifest.json +5 -4
  345. package/data/craftbook-templates/sc/schema-migration/versions/2.0.0/craftbook.json +459 -0
  346. package/data/craftbook-templates/sc/schema-migration/versions/2.0.0/test.json +226 -0
  347. package/data/craftbook-templates/sc/scrape-to-structured/manifest.json +1 -0
  348. package/data/craftbook-templates/sc/script-automation/manifest.json +1 -0
  349. package/data/craftbook-templates/sd/sdk-wrapper/manifest.json +1 -0
  350. package/data/craftbook-templates/se/seasonal-maintenance-sweep/manifest.json +1 -0
  351. package/data/craftbook-templates/se/security-architecture-review/manifest.json +1 -0
  352. package/data/craftbook-templates/se/seo-meta-pack/manifest.json +1 -0
  353. package/data/craftbook-templates/sh/ship/manifest.json +1 -0
  354. package/data/craftbook-templates/so/social-digest/manifest.json +1 -0
  355. package/data/craftbook-templates/so/social-thread/manifest.json +1 -0
  356. package/data/craftbook-templates/so/source-quality-audit/manifest.json +1 -0
  357. package/data/craftbook-templates/sp/spa-dashboard/manifest.json +1 -0
  358. package/data/craftbook-templates/sp/spec-authoring/manifest.json +1 -0
  359. package/data/craftbook-templates/sp/spec-doc/manifest.json +1 -0
  360. package/data/craftbook-templates/sp/spreadsheet-model/manifest.json +1 -0
  361. package/data/craftbook-templates/sp/sprite-sheet/manifest.json +1 -0
  362. package/data/craftbook-templates/sq/sql-analysis/manifest.json +1 -0
  363. package/data/craftbook-templates/st/standup-summary/manifest.json +1 -0
  364. package/data/craftbook-templates/st/state-machine/manifest.json +1 -0
  365. package/data/craftbook-templates/st/status-report/manifest.json +1 -0
  366. package/data/craftbook-templates/su/subscription-audit/manifest.json +1 -0
  367. package/data/craftbook-templates/su/subtitle-generator/manifest.json +1 -0
  368. package/data/craftbook-templates/su/summarize-long/manifest.json +1 -0
  369. package/data/craftbook-templates/su/survey-analysis/manifest.json +1 -0
  370. package/data/craftbook-templates/sv/svg-animation/manifest.json +1 -0
  371. package/data/craftbook-templates/ta/tailor-resume/manifest.json +1 -0
  372. package/data/craftbook-templates/te/technical-documentation/manifest.json +1 -0
  373. package/data/craftbook-templates/te/test-coverage-review/manifest.json +1 -0
  374. package/data/craftbook-templates/te/test-coverage-review/versions/1.2.0/craftbook.json +195 -0
  375. package/data/craftbook-templates/te/test-coverage-review/versions/1.2.0/test.json +116 -0
  376. package/data/craftbook-templates/te/test-suite-backfill/manifest.json +2 -2
  377. package/data/craftbook-templates/te/test-suite-backfill/versions/2.0.0/craftbook.json +428 -0
  378. package/data/craftbook-templates/te/test-suite-backfill/versions/2.0.0/test.json +198 -0
  379. package/data/craftbook-templates/th/thank-you-batch/manifest.json +1 -0
  380. package/data/craftbook-templates/th/thank-you-sweep/manifest.json +1 -0
  381. package/data/craftbook-templates/th/threat-model/manifest.json +1 -0
  382. package/data/craftbook-templates/th/thumbnail-generator/manifest.json +1 -0
  383. package/data/craftbook-templates/ti/tileset-batch/manifest.json +1 -0
  384. package/data/craftbook-templates/to/tone-rewrite/manifest.json +1 -0
  385. package/data/craftbook-templates/to/topic-explainer/manifest.json +1 -0
  386. package/data/craftbook-templates/tr/transcribe-and-shownotes/manifest.json +1 -0
  387. package/data/craftbook-templates/tr/transcribe-audio/manifest.json +1 -0
  388. package/data/craftbook-templates/tr/transcribe-index/manifest.json +1 -0
  389. package/data/craftbook-templates/tr/translate-content/manifest.json +1 -0
  390. package/data/craftbook-templates/ty/type-safety-pass/manifest.json +4 -3
  391. package/data/craftbook-templates/ty/type-safety-pass/versions/2.0.0/craftbook.json +428 -0
  392. package/data/craftbook-templates/ty/type-safety-pass/versions/2.0.0/test.json +222 -0
  393. package/data/craftbook-templates/ux/ux-update/art.json +12 -0
  394. package/data/craftbook-templates/ux/ux-update/logo.webp +0 -0
  395. package/data/craftbook-templates/ux/ux-update/manifest.json +22 -0
  396. package/data/craftbook-templates/ux/ux-update/versions/1.0.0/craftbook.json +439 -0
  397. package/data/craftbook-templates/ux/ux-update/versions/1.0.0/test.json +207 -0
  398. package/data/craftbook-templates/ve/version-bump/manifest.json +1 -0
  399. package/data/craftbook-templates/ve/version-bump/versions/1.1.0/craftbook.json +206 -0
  400. package/data/craftbook-templates/ve/version-bump/versions/1.1.0/test.json +95 -0
  401. package/data/craftbook-templates/vi/video-storyboard/manifest.json +1 -0
  402. package/data/craftbook-templates/vi/visit-prep/manifest.json +1 -0
  403. package/data/craftbook-templates/vo/voiceover-script/manifest.json +1 -0
  404. package/data/craftbook-templates/we/weak-spot-drill/manifest.json +1 -0
  405. package/data/craftbook-templates/we/web-app-crud/manifest.json +1 -0
  406. package/data/craftbook-templates/we/web-component/manifest.json +1 -0
  407. package/data/craftbook-templates/we/webhook-handler/manifest.json +1 -0
  408. package/data/craftbook-templates/we/week-plan/manifest.json +1 -0
  409. package/data/craftbook-templates/we/weekly-menu-plan/manifest.json +1 -0
  410. package/data/craftbook-templates/we/weekly-pipeline-review/manifest.json +1 -0
  411. package/data/craftbook-templates/we/weekly-review/manifest.json +1 -0
  412. package/data/craftbook-templates/we/weekly-walkthrough/manifest.json +1 -0
  413. package/data/craftbook-templates/wh/whitepaper/manifest.json +1 -0
  414. package/data/craftbook-templates/ye/year-in-review/manifest.json +1 -0
  415. package/data/craftbook-templates/yo/youtube-chapters-seo/manifest.json +1 -0
  416. package/data/gezel-templates/bo/boekwachter/versions/1.1.0/about.md +29 -0
  417. package/data/gezel-templates/bo/boekwachter/versions/1.1.0/manifest.json +16 -0
  418. package/data/gezel-templates/bu/builder/versions/1.5.0/about.md +34 -0
  419. package/data/gezel-templates/bu/builder/versions/1.5.0/manifest.json +16 -0
  420. package/data/gezel-templates/de/developer/versions/1.5.0/about.md +34 -0
  421. package/data/gezel-templates/de/developer/versions/1.5.0/manifest.json +21 -0
  422. package/data/gezel-templates/index.json +1 -1
  423. package/data/gezel-templates/re/reviewer/versions/1.4.0/about.md +49 -0
  424. package/data/gezel-templates/re/reviewer/versions/1.4.0/manifest.json +21 -0
  425. package/data/project-types/index.json +1 -1
  426. package/data/project-types/so/software-project/manifest.json +20 -0
  427. package/data/project-types/so/software-project/versions/1.0.0/about.md +3 -0
  428. package/data/project-types/so/software-project/versions/1.0.0/manifest.json +41 -0
  429. package/data/project-types/so/software-project/versions/1.0.0/mission.md +4 -0
  430. package/package.json +1 -1
  431. package/schemas/craftbook-doc.schema.json +248 -0
  432. package/schemas/craftbook-template-identity.schema.json +21 -0
  433. package/schemas/craftbook-template-version.schema.json +248 -0
  434. package/schemas/craftbook-test.schema.json +210 -0
@@ -0,0 +1,439 @@
1
+ {
2
+ "id": "ux-update",
3
+ "name": "Implement a UX Change",
4
+ "description": "Implement a UX change the way a careful product engineer would — grounded in the real code at every step, not in a redescription of it. First UNDERSTAND: restate the requested change as the user would experience it, find the involved surfaces in the actual pages, components, styles, and scripts, and capture the BEFORE state by quoting the real markup and wiring — including every behavior attached to those surfaces (handlers, keyboard shortcuts, ids, state), because each must still work afterwards. Then IMPLEMENT the smallest coherent change at those real sites, matching the surrounding product's conventions — its spacing, naming, and markup patterns — rather than inventing a new style, and moving existing behaviors with the elements rather than dropping them. Then VALIDATE by walking the changed flow and building a concrete before/after comparison grounded in the files, honest about what was inspected versus actually exercised. Finally an independent reviewer grades the delivered change as a user would judge it — request delivered, conventions respected, nothing that worked before broken — and a REVISE verdict routes the work back automatically with concrete findings. This is the fix-applying sibling of the report-only codebase UX review: that book tells you what is wrong, this one delivers the change. Works identically whether the run edits the project directly or drafts a change proposal for the user to apply.",
5
+ "plan": "Understand the request and capture the before state from the real code -> implement the smallest coherent change at the real sites in the product's own conventions -> validate the flow with a concrete before/after -> enforced independent review.",
6
+ "entryStepId": "understand",
7
+ "triggers": [
8
+ "make this ux change",
9
+ "move the button",
10
+ "improve this flow",
11
+ "update the ui"
12
+ ],
13
+ "paramSchema": {
14
+ "type": "object",
15
+ "properties": {
16
+ "scope": {
17
+ "type": "string",
18
+ "title": "The UX change",
19
+ "description": "What should change for the user, in plain words. Leave empty when the task description carries it.",
20
+ "default": ""
21
+ },
22
+ "workPath": {
23
+ "type": "string",
24
+ "title": "Working folder",
25
+ "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.",
26
+ "default": "{{task.dir}}"
27
+ }
28
+ }
29
+ },
30
+ "steps": [
31
+ {
32
+ "id": "understand",
33
+ "name": "Understand and capture the before state",
34
+ "description": "Restate the change as the user experiences it, find the real surfaces, and quote the current markup and wiring.",
35
+ "prompt": "The UX change to deliver: {{scope}}\n\nUnderstand before touching anything. Restate the requested change as the USER would experience it — what they see and do today, what they should see and do afterwards. Then find the involved surfaces in the REAL code: read the actual pages, components, styles, and scripts with `read_file` until you can point at the exact markup and wiring behind the current experience. Capture the BEFORE state from those files — quote the relevant snippets (the current markup, the handler, the shortcut wiring) so the change can later be judged against reality rather than memory. Catalogue every behavior attached to the surfaces you will touch — handlers, keyboard shortcuts, element ids other code references, state — because each of them must still work afterwards. If the request is ambiguous, record the reading you chose and why; if the described surface cannot be located in this codebase at all, say so honestly and stop rather than inventing one.\n\nWrite `{{workPath}}/before.md` with exactly these sections: `## Request` (the change in the user's terms), `## Current behavior` (what happens today, with the quoted snippets), `## Surfaces involved` (each file and the part it plays, with backtick paths). Every path you cite must be real.\n\nObservable handoff: write the completed result to `{{workPath}}/before.md` in the project's artifacts drawer with `write_artifact`. Do not merely describe what the file would contain. Re-read it with `read_artifact` before finishing this phase and repair any incomplete sections.",
36
+ "suggestedRole": "product engineer",
37
+ "capabilityFloor": "small",
38
+ "advanceWhen": {
39
+ "file": "{{workPath}}/before.md",
40
+ "minBytes": 500,
41
+ "sniff": "nonempty",
42
+ "requireChange": true,
43
+ "artifact": true,
44
+ "goto": "implement"
45
+ },
46
+ "gate": {
47
+ "at": "completion",
48
+ "checks": [
49
+ {
50
+ "kind": "minBytes",
51
+ "file": "{{workPath}}/before.md",
52
+ "bytes": 500,
53
+ "artifact": true
54
+ },
55
+ {
56
+ "kind": "sniff",
57
+ "file": "{{workPath}}/before.md",
58
+ "sniff": "nonempty",
59
+ "artifact": true
60
+ },
61
+ {
62
+ "kind": "contains",
63
+ "file": "{{workPath}}/before.md",
64
+ "pattern": "^##\\s+Request",
65
+ "flags": "im",
66
+ "label": "Request section",
67
+ "artifact": true
68
+ },
69
+ {
70
+ "kind": "contains",
71
+ "file": "{{workPath}}/before.md",
72
+ "pattern": "^##\\s+Current behavior",
73
+ "flags": "im",
74
+ "label": "Current behavior section",
75
+ "artifact": true
76
+ },
77
+ {
78
+ "kind": "contains",
79
+ "file": "{{workPath}}/before.md",
80
+ "pattern": "^##\\s+Surfaces involved",
81
+ "flags": "im",
82
+ "label": "Surfaces involved section",
83
+ "artifact": true
84
+ },
85
+ {
86
+ "kind": "citationsResolve",
87
+ "file": "{{workPath}}/before.md",
88
+ "minCitations": 2,
89
+ "artifact": true
90
+ }
91
+ ],
92
+ "onReject": "understand",
93
+ "maxAttempts": 4
94
+ },
95
+ "next": "implement"
96
+ },
97
+ {
98
+ "id": "implement",
99
+ "name": "Implement the smallest coherent change",
100
+ "description": "Deliver the request at the real sites, in the product's own conventions, keeping existing behaviors wired.",
101
+ "prompt": "Read `{{workPath}}/before.md` and deliver the SMALLEST coherent change at the real sites it names — edit the actual files with `read_file` plus `write_file`/`replace_in_file`; there is no prescribed output path for the change itself. Match the surrounding product's conventions: reuse its spacing, naming, class patterns, and markup style rather than inventing a new one — open neighboring code to see how this product already does the same kind of thing. Keep every existing behavior working: the handlers, keyboard shortcuts, element ids, and state catalogued in before.md must still be wired when you are done — move them with the element rather than dropping or duplicating them. Do not smuggle in unrequested changes; polish beyond the request is scope creep, not generosity.\n\nThen write `{{workPath}}/fix-notes.md` with exactly these sections: `## Problem` (the request, one paragraph), `## Change` (what you altered and how it delivers the request), `## Files touched` (backtick path per line), `## Consistency notes` (which existing conventions you followed and where you saw them), `## Risk` (what could break; be honest about anything unverified), `## How to verify` (the exact steps a person follows to see the new experience). Before working, open `{{workPath}}/before.md` with `read_artifact`.\n\nObservable handoff: write the completed result to `{{workPath}}/fix-notes.md` in the project's artifacts drawer with `write_artifact`. Do not merely describe what the file would contain. Re-read it with `read_artifact` before finishing this phase and repair any incomplete sections.",
102
+ "suggestedRole": "frontend engineer",
103
+ "capabilityFloor": "small",
104
+ "consumes": [
105
+ {
106
+ "file": "{{workPath}}/before.md",
107
+ "artifact": true
108
+ }
109
+ ],
110
+ "advanceWhen": {
111
+ "file": "{{workPath}}/fix-notes.md",
112
+ "minBytes": 700,
113
+ "sniff": "nonempty",
114
+ "requireChange": true,
115
+ "artifact": true,
116
+ "goto": "validate"
117
+ },
118
+ "gate": {
119
+ "at": "completion",
120
+ "checks": [
121
+ {
122
+ "kind": "minBytes",
123
+ "file": "{{workPath}}/fix-notes.md",
124
+ "bytes": 700,
125
+ "artifact": true
126
+ },
127
+ {
128
+ "kind": "sniff",
129
+ "file": "{{workPath}}/fix-notes.md",
130
+ "sniff": "nonempty",
131
+ "artifact": true
132
+ },
133
+ {
134
+ "kind": "contains",
135
+ "file": "{{workPath}}/fix-notes.md",
136
+ "pattern": "^##\\s+Problem",
137
+ "flags": "im",
138
+ "label": "Problem section",
139
+ "artifact": true
140
+ },
141
+ {
142
+ "kind": "contains",
143
+ "file": "{{workPath}}/fix-notes.md",
144
+ "pattern": "^##\\s+Change",
145
+ "flags": "im",
146
+ "label": "Change section",
147
+ "artifact": true
148
+ },
149
+ {
150
+ "kind": "contains",
151
+ "file": "{{workPath}}/fix-notes.md",
152
+ "pattern": "^##\\s+Files touched",
153
+ "flags": "im",
154
+ "label": "Files touched section",
155
+ "artifact": true
156
+ },
157
+ {
158
+ "kind": "contains",
159
+ "file": "{{workPath}}/fix-notes.md",
160
+ "pattern": "^##\\s+Consistency notes",
161
+ "flags": "im",
162
+ "label": "Consistency notes section",
163
+ "artifact": true
164
+ },
165
+ {
166
+ "kind": "contains",
167
+ "file": "{{workPath}}/fix-notes.md",
168
+ "pattern": "^##\\s+Risk",
169
+ "flags": "im",
170
+ "label": "Risk section",
171
+ "artifact": true
172
+ },
173
+ {
174
+ "kind": "contains",
175
+ "file": "{{workPath}}/fix-notes.md",
176
+ "pattern": "^##\\s+How to verify",
177
+ "flags": "im",
178
+ "label": "How to verify section",
179
+ "artifact": true
180
+ },
181
+ {
182
+ "kind": "citationsResolve",
183
+ "file": "{{workPath}}/fix-notes.md",
184
+ "minCitations": 2,
185
+ "artifact": true
186
+ }
187
+ ],
188
+ "onReject": "implement",
189
+ "maxAttempts": 4
190
+ },
191
+ "next": "validate"
192
+ },
193
+ {
194
+ "id": "validate",
195
+ "name": "Validate the changed flow",
196
+ "description": "Walk the new experience and build a concrete before/after grounded in the real files.",
197
+ "prompt": "Prove the change as the user would experience it. Read `{{workPath}}/before.md` and `{{workPath}}/fix-notes.md`, then re-open the changed files with `read_file` and walk the flow: where the element lives now, what happens on each interaction, where focus goes, what each shortcut does. Build a concrete before/after comparison grounded in the real files — quote the after state next to the before state that before.md recorded. Re-check every behavior from before.md's catalogue: each handler, shortcut, and id must be verifiably still wired in the current code. Say plainly which parts you INSPECTED (read the code) versus EXERCISED (actually ran or interacted with) — anything that is neither is unverified and must be named, never claimed.\n\nWrite `{{workPath}}/validation.md` with exactly these sections: `## Before / after` (the concrete comparison, quoting both states), `## What was exercised` (inspected versus exercised, honestly), `## Result` (delivered as requested, or what remains open and why). Before working, open `{{workPath}}/before.md`, `{{workPath}}/fix-notes.md` with `read_artifact`.\n\nObservable handoff: write the completed result to `{{workPath}}/validation.md` in the project's artifacts drawer with `write_artifact`. Do not merely describe what the file would contain. Re-read it with `read_artifact` before finishing this phase and repair any incomplete sections.",
198
+ "suggestedRole": "product engineer",
199
+ "capabilityFloor": "small",
200
+ "consumes": [
201
+ {
202
+ "file": "{{workPath}}/before.md",
203
+ "artifact": true
204
+ },
205
+ {
206
+ "file": "{{workPath}}/fix-notes.md",
207
+ "artifact": true
208
+ }
209
+ ],
210
+ "advanceWhen": {
211
+ "file": "{{workPath}}/validation.md",
212
+ "minBytes": 500,
213
+ "sniff": "nonempty",
214
+ "requireChange": true,
215
+ "artifact": true,
216
+ "goto": "evaluate"
217
+ },
218
+ "gate": {
219
+ "at": "completion",
220
+ "checks": [
221
+ {
222
+ "kind": "minBytes",
223
+ "file": "{{workPath}}/validation.md",
224
+ "bytes": 500,
225
+ "artifact": true
226
+ },
227
+ {
228
+ "kind": "sniff",
229
+ "file": "{{workPath}}/validation.md",
230
+ "sniff": "nonempty",
231
+ "artifact": true
232
+ },
233
+ {
234
+ "kind": "contains",
235
+ "file": "{{workPath}}/validation.md",
236
+ "pattern": "^##\\s+Before\\s*/\\s*after",
237
+ "flags": "im",
238
+ "label": "Before / after section",
239
+ "artifact": true
240
+ },
241
+ {
242
+ "kind": "contains",
243
+ "file": "{{workPath}}/validation.md",
244
+ "pattern": "^##\\s+What was exercised",
245
+ "flags": "im",
246
+ "label": "What was exercised section",
247
+ "artifact": true
248
+ },
249
+ {
250
+ "kind": "contains",
251
+ "file": "{{workPath}}/validation.md",
252
+ "pattern": "^##\\s+Result",
253
+ "flags": "im",
254
+ "label": "Result section",
255
+ "artifact": true
256
+ },
257
+ {
258
+ "kind": "citationsResolve",
259
+ "file": "{{workPath}}/validation.md",
260
+ "minCitations": 2,
261
+ "artifact": true
262
+ }
263
+ ],
264
+ "onReject": "validate",
265
+ "maxAttempts": 4
266
+ },
267
+ "next": "evaluate"
268
+ },
269
+ {
270
+ "id": "evaluate",
271
+ "name": "Evaluate the deliverable",
272
+ "description": "Independently grade the observable deliverable and route it to finish, repair, or user escalation.",
273
+ "prompt": "Review `{{workPath}}/validation.md`, `{{workPath}}/before.md`, `{{workPath}}/fix-notes.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. The delivered change matches the request as a user would judge it — open the changed files and walk the flow; do not grade from fix-notes.md alone.\n2. The change respects the surrounding product's conventions — open neighboring code and compare naming, spacing, and markup patterns; a one-off new style where an existing pattern served does not pass.\n3. Nothing that worked before broke: every handler, keyboard shortcut, and id catalogued in before.md is still wired in the current code — check the wiring, not the claim.\n4. before.md quotes the real prior state and validation.md's before/after is grounded in the current files, not reconstructed from memory.\n5. The change is minimal: no unrequested alterations rode along with it.\n\nOpen `{{workPath}}/validation.md`, `{{workPath}}/before.md`, `{{workPath}}/fix-notes.md` with `read_artifact`. Write the evidence-backed review to `{{workPath}}/review.md` in the artifacts drawer with `write_artifact`.\n\nList the findings as a markdown table with columns `| Severity | File | Line | Problem | Fix |` (severities: critical/major/minor/nit; empty table only on PASS). Give each criterion a PASS or FAIL with a concrete path, excerpt, measurement, or observed behavior. End with exactly `Verdict: PASS` or `Verdict: REVISE`. The gate ENFORCES the verdict: a well-formed REVISE is rejected and routed back to `repair` automatically, carrying your findings — so list every finding in the table with a concrete fix. On PASS, `advance_task_step` to `finish`. Never write PASS while a criterion is unmet.",
274
+ "suggestedRole": "ux reviewer",
275
+ "consumes": [
276
+ {
277
+ "file": "{{workPath}}/validation.md",
278
+ "artifact": true
279
+ },
280
+ {
281
+ "file": "{{workPath}}/before.md",
282
+ "artifact": true
283
+ },
284
+ {
285
+ "file": "{{workPath}}/fix-notes.md",
286
+ "artifact": true
287
+ }
288
+ ],
289
+ "gate": {
290
+ "at": "completion",
291
+ "checks": [
292
+ {
293
+ "kind": "minBytes",
294
+ "file": "{{workPath}}/review.md",
295
+ "bytes": 400,
296
+ "artifact": true
297
+ },
298
+ {
299
+ "kind": "contains",
300
+ "file": "{{workPath}}/review.md",
301
+ "pattern": "Verdict:\\s*(?:PASS|REVISE)",
302
+ "flags": "i",
303
+ "label": "explicit PASS or REVISE verdict",
304
+ "artifact": true
305
+ }
306
+ ],
307
+ "scripts": [
308
+ {
309
+ "name": "checkFixReview",
310
+ "scope": "standard",
311
+ "inputs": {
312
+ "reviewPath": "{{workPath}}/review.md",
313
+ "fixStepId": "repair"
314
+ }
315
+ }
316
+ ],
317
+ "onReject": "evaluate",
318
+ "maxAttempts": 4
319
+ },
320
+ "next": "finish"
321
+ },
322
+ {
323
+ "id": "repair",
324
+ "name": "Repair the deliverable",
325
+ "description": "Fix only the concrete gaps from the latest independent review.",
326
+ "prompt": "Read `{{workPath}}/review.md` with `read_artifact` and repair every failed criterion in `{{workPath}}/validation.md`, `{{workPath}}/before.md`, `{{workPath}}/fix-notes.md`. Make changes on each file's declared surface (`write_artifact` for artifact inputs, `write_file` for workspace inputs), not in task notes or a reply. Preserve evidence that already passed. Re-run or re-check anything the reviewer found unproven. Ensure `{{workPath}}/validation.md` is genuinely updated this turn so the repair is observable, then hand it back for independent evaluation.",
327
+ "suggestedRole": "frontend engineer",
328
+ "consumes": [
329
+ {
330
+ "file": "{{workPath}}/review.md",
331
+ "artifact": true
332
+ },
333
+ {
334
+ "file": "{{workPath}}/validation.md",
335
+ "artifact": true
336
+ },
337
+ {
338
+ "file": "{{workPath}}/before.md",
339
+ "artifact": true
340
+ },
341
+ {
342
+ "file": "{{workPath}}/fix-notes.md",
343
+ "artifact": true
344
+ }
345
+ ],
346
+ "advanceWhen": {
347
+ "file": "{{workPath}}/validation.md",
348
+ "minBytes": 500,
349
+ "sniff": "nonempty",
350
+ "requireChange": true,
351
+ "artifact": true,
352
+ "goto": "evaluate"
353
+ },
354
+ "gate": {
355
+ "at": "completion",
356
+ "checks": [
357
+ {
358
+ "kind": "minBytes",
359
+ "file": "{{workPath}}/validation.md",
360
+ "bytes": 500,
361
+ "artifact": true
362
+ },
363
+ {
364
+ "kind": "sniff",
365
+ "file": "{{workPath}}/validation.md",
366
+ "sniff": "nonempty",
367
+ "artifact": true
368
+ },
369
+ {
370
+ "kind": "contains",
371
+ "file": "{{workPath}}/validation.md",
372
+ "pattern": "^##\\s+Before\\s*/\\s*after",
373
+ "flags": "im",
374
+ "label": "Before / after section",
375
+ "artifact": true
376
+ },
377
+ {
378
+ "kind": "contains",
379
+ "file": "{{workPath}}/validation.md",
380
+ "pattern": "^##\\s+What was exercised",
381
+ "flags": "im",
382
+ "label": "What was exercised section",
383
+ "artifact": true
384
+ },
385
+ {
386
+ "kind": "contains",
387
+ "file": "{{workPath}}/validation.md",
388
+ "pattern": "^##\\s+Result",
389
+ "flags": "im",
390
+ "label": "Result section",
391
+ "artifact": true
392
+ },
393
+ {
394
+ "kind": "citationsResolve",
395
+ "file": "{{workPath}}/validation.md",
396
+ "minCitations": 2,
397
+ "artifact": true
398
+ }
399
+ ],
400
+ "onReject": "repair",
401
+ "maxAttempts": 4
402
+ },
403
+ "next": "evaluate"
404
+ },
405
+ {
406
+ "id": "finish",
407
+ "name": "Finish",
408
+ "description": "All deterministic and reviewer criteria passed.",
409
+ "prompt": "The independent review passed. Read `{{workPath}}/review.md` with `read_artifact`, then use `write_task_note` to record a concise DONE summary with the final deliverable paths (`{{workPath}}/validation.md`, `{{workPath}}/before.md`, `{{workPath}}/fix-notes.md`) and the evidence that each acceptance criterion passed. Report DONE without starting new work.",
410
+ "suggestedRole": "project lead",
411
+ "consumes": [
412
+ {
413
+ "file": "{{workPath}}/review.md",
414
+ "artifact": true
415
+ }
416
+ ],
417
+ "terminal": true
418
+ },
419
+ {
420
+ "id": "needs-user",
421
+ "name": "Escalate unresolved concerns",
422
+ "description": "The bounded repair loop ended without a defensible pass.",
423
+ "prompt": "The deliverable did not pass after 3 review rounds. Do not claim success. Read `{{workPath}}/review.md` with `read_artifact`, 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.",
424
+ "suggestedRole": "project lead",
425
+ "consumes": [
426
+ {
427
+ "file": "{{workPath}}/review.md",
428
+ "artifact": true
429
+ }
430
+ ],
431
+ "terminal": true
432
+ }
433
+ ],
434
+ "diffpackCapable": true,
435
+ "capabilityFloor": "small",
436
+ "version": "1.0.0",
437
+ "releasedAt": "2026-08-24T00:00:00.000Z",
438
+ "minGezelVersion": "1.26236"
439
+ }
@@ -0,0 +1,207 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "title": "UX change with before/after proof",
4
+ "objective": "The craftbook drives a described UX change on a small orders page: move the bottom-of-page search into the header next to the title with an exact requested placeholder, while the / keyboard shortcut and the list-filter handler keep working. Placement, placeholder, and surviving wiring are verified mechanically against the fixed markup.",
5
+ "tags": [
6
+ "code",
7
+ "ux",
8
+ "frontend",
9
+ "tactical-fleet"
10
+ ],
11
+ "prompt": "Use the Implement a UX Change craftbook: nobody finds the search on the Orderboard page because it sits at the very bottom. Move the search into the header next to the title, set its placeholder to 'Search orders…', and keep the / keyboard shortcut working. The full request is in source/change-request.md.",
12
+ "setup": {
13
+ "projectName": "Orderboard",
14
+ "about": "A single-page order list for a small furniture shop: index.html with an inline script, plus styles.css. No build step and no test suite.",
15
+ "files": [
16
+ {
17
+ "path": "package.json",
18
+ "content": "{\n \"name\": \"orderboard\",\n \"private\": true,\n \"version\": \"1.0.0\",\n \"type\": \"module\"\n}\n"
19
+ },
20
+ {
21
+ "path": "index.html",
22
+ "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Orderboard</title>\n<link rel=\"stylesheet\" href=\"styles.css\">\n</head>\n<body>\n<header class=\"topbar\">\n <h1>Orderboard</h1>\n</header>\n<main>\n <ul id=\"orders\">\n <li>#1042 Walnut writing desk</li>\n <li>#1043 Oak bookshelf</li>\n <li>#1044 Cherry side table</li>\n <li>#1045 Maple bench</li>\n <li>#1046 Walnut picture frame</li>\n </ul>\n</main>\n<section class=\"search-row\">\n <input id=\"search\" type=\"search\" placeholder=\"Filter orders\">\n</section>\n<script>\nconst search = document.getElementById('search');\nsearch.addEventListener('input', () => {\n const q = search.value.toLowerCase();\n for (const item of document.querySelectorAll('#orders li')) {\n item.hidden = q !== '' && !item.textContent.toLowerCase().includes(q);\n }\n});\ndocument.addEventListener('keydown', (event) => {\n if (event.key === '/' && document.activeElement !== search) {\n event.preventDefault();\n search.focus();\n }\n});\n</script>\n</body>\n</html>\n"
23
+ },
24
+ {
25
+ "path": "styles.css",
26
+ "content": "body { margin: 0; font-family: system-ui, sans-serif; color: #1c2430; background: #f5f6f8; }\n.topbar { display: flex; align-items: center; gap: 1rem; padding: 0.75rem 1.25rem; background: #223047; color: #fff; }\n.topbar h1 { margin: 0; font-size: 1.2rem; }\nmain { max-width: 40rem; padding: 1rem 1.25rem; }\n#orders { list-style: none; padding: 0; }\n#orders li { padding: 0.5rem 0.25rem; border-bottom: 1px solid #dde1e8; }\n.search-row { padding: 1rem 1.25rem; }\n#search { padding: 0.4rem 0.6rem; width: 16rem; }\n"
27
+ },
28
+ {
29
+ "path": "source/change-request.md",
30
+ "content": "# Change request\n\nFrom the product owner: \"Nobody finds the search — it sits at the very bottom of the page. Move the search into the header, next to the Orderboard title. Set its placeholder to 'Search orders…'. The / keyboard shortcut people already use must keep working, and typing in the box must still filter the list.\"\n"
31
+ },
32
+ {
33
+ "path": "tests/verify-ux-update.mjs",
34
+ "content": "import assert from 'node:assert/strict';\nimport { readFileSync } from 'node:fs';\n\nconst html = readFileSync('index.html', 'utf8');\nlet code = html;\nfor (const m of html.matchAll(/<script\\b[^>]*\\bsrc\\s*=\\s*[\"']([^\"']+)[\"']/gi)) {\n try { code += readFileSync(m[1], 'utf8'); } catch {}\n}\n\n// 1) Exactly one search input, and it lives inside the header, next to the title.\nconst inputs = [...html.matchAll(/<input\\b[^>]*>/gi)].map((m) => m[0]).filter((t) => /\\bid\\s*=\\s*[\"']search[\"']/i.test(t));\nassert.equal(inputs.length, 1, 'exactly one #search input exists');\nconst header = html.match(/<header\\b[^>]*>([\\s\\S]*?)<\\/header>/i);\nassert.ok(header, 'the header still exists');\nassert.ok(/\\bid\\s*=\\s*[\"']search[\"']/i.test(header[1]), 'the search input lives inside the header');\nassert.ok(/<h1\\b[^>]*>[^<]*Orderboard/i.test(header[1]), 'the Orderboard title is still in the header');\nconsole.log('UXUPDATE_ORACLE placement ok');\n\n// 2) The placeholder is exactly as requested.\nconst ph = inputs[0].match(/\\bplaceholder\\s*=\\s*[\"']([^\"']*)[\"']/i);\nassert.ok(ph, 'the search input has a placeholder');\nassert.equal(ph[1], 'Search orders…', 'placeholder is exactly \"Search orders…\"');\nconsole.log('UXUPDATE_ORACLE placeholder ok');\n\n// 3) The / shortcut still targets and focuses the search input.\nassert.ok(/['\"]\\/['\"]/.test(code), 'the / key hook survives');\nassert.ok(/getElementById\\(\\s*['\"]search['\"]\\s*\\)|querySelector\\(\\s*['\"]#search['\"]\\s*\\)/.test(code), 'the script still targets #search');\nassert.ok(/\\.focus\\s*\\(\\s*\\)/.test(code), 'the shortcut still focuses the search input');\nconsole.log('UXUPDATE_ORACLE shortcut ok');\n\n// 4) The list-filter behavior is still wired.\nassert.ok(/addEventListener\\s*\\(\\s*['\"]input['\"]/.test(code) || /\\boninput\\s*=/i.test(html), 'the input filter handler is still wired');\nassert.ok(/#orders/.test(code), 'the filter still targets the order list');\nconsole.log('UXUPDATE_ORACLE filter ok');\nconsole.log('UXUPDATE_ORACLE done');\n",
35
+ "surface": "harness"
36
+ }
37
+ ],
38
+ "craftbookParams": {
39
+ "workPath": "tasks/eval",
40
+ "scope": "Move the search into the header next to the Orderboard title, set its placeholder to 'Search orders…', and keep the / keyboard shortcut and the list filtering working; see source/change-request.md."
41
+ }
42
+ },
43
+ "mocks": [],
44
+ "success": {
45
+ "summary": "The search input sits inside the header next to the title with the exact requested placeholder, the old bottom-of-page placement is gone, and the / shortcut plus the filter handler still work — with every fleet artifact present and honestly cited.",
46
+ "deliverables": [
47
+ {
48
+ "path": "tasks/eval/before.md",
49
+ "kind": "markdown-notes",
50
+ "artifact": true,
51
+ "minBytes": 500,
52
+ "checks": [
53
+ {
54
+ "kind": "contains",
55
+ "file": "tasks/eval/before.md",
56
+ "pattern": "^##\\s+Request[\\s\\S]*^##\\s+Current behavior[\\s\\S]*^##\\s+Surfaces involved",
57
+ "flags": "im",
58
+ "label": "before sections in order"
59
+ },
60
+ {
61
+ "kind": "citationsResolve",
62
+ "file": "tasks/eval/before.md",
63
+ "minCitations": 2,
64
+ "artifact": true
65
+ },
66
+ {
67
+ "kind": "contains",
68
+ "file": "tasks/eval/before.md",
69
+ "pattern": "index\\.html",
70
+ "label": "names the real page"
71
+ }
72
+ ]
73
+ },
74
+ {
75
+ "path": "tasks/eval/fix-notes.md",
76
+ "kind": "markdown-notes",
77
+ "artifact": true,
78
+ "minBytes": 700,
79
+ "checks": [
80
+ {
81
+ "kind": "contains",
82
+ "file": "tasks/eval/fix-notes.md",
83
+ "pattern": "^##\\s+Problem[\\s\\S]*^##\\s+Change[\\s\\S]*^##\\s+Files touched[\\s\\S]*^##\\s+Consistency notes[\\s\\S]*^##\\s+Risk[\\s\\S]*^##\\s+How to verify",
84
+ "flags": "im",
85
+ "label": "fix-notes sections in order"
86
+ },
87
+ {
88
+ "kind": "citationsResolve",
89
+ "file": "tasks/eval/fix-notes.md",
90
+ "minCitations": 2,
91
+ "artifact": true
92
+ }
93
+ ]
94
+ },
95
+ {
96
+ "path": "tasks/eval/validation.md",
97
+ "kind": "markdown-notes",
98
+ "artifact": true,
99
+ "minBytes": 500,
100
+ "checks": [
101
+ {
102
+ "kind": "contains",
103
+ "file": "tasks/eval/validation.md",
104
+ "pattern": "^##\\s+Before\\s*/\\s*after[\\s\\S]*^##\\s+What was exercised[\\s\\S]*^##\\s+Result",
105
+ "flags": "im",
106
+ "label": "validation sections in order"
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ "path": "tasks/eval/review.md",
112
+ "kind": "markdown-report",
113
+ "artifact": true,
114
+ "minBytes": 400,
115
+ "checks": [
116
+ {
117
+ "kind": "contains",
118
+ "file": "tasks/eval/review.md",
119
+ "pattern": "Verdict:\\s*(?:PASS|REVISE)",
120
+ "flags": "i",
121
+ "label": "explicit reviewer verdict"
122
+ }
123
+ ]
124
+ }
125
+ ],
126
+ "checks": [
127
+ {
128
+ "kind": "notContains",
129
+ "file": "index.html",
130
+ "pattern": "placeholder=[\"']Filter orders[\"']",
131
+ "label": "the old bottom-of-page search placeholder is gone"
132
+ },
133
+ {
134
+ "kind": "htmlLint",
135
+ "file": "index.html"
136
+ },
137
+ {
138
+ "kind": "nodeScriptPasses",
139
+ "script": "tests/verify-ux-update.mjs",
140
+ "timeoutMs": 60000,
141
+ "requiredOutput": [
142
+ {
143
+ "pattern": "UXUPDATE_ORACLE placement ok",
144
+ "label": "search moved into the header next to the title"
145
+ },
146
+ {
147
+ "pattern": "UXUPDATE_ORACLE placeholder ok",
148
+ "label": "placeholder is exactly as requested"
149
+ },
150
+ {
151
+ "pattern": "UXUPDATE_ORACLE shortcut ok",
152
+ "label": "the / shortcut still focuses the search"
153
+ },
154
+ {
155
+ "pattern": "UXUPDATE_ORACLE filter ok",
156
+ "label": "the list filter is still wired"
157
+ }
158
+ ]
159
+ }
160
+ ],
161
+ "taskNotes": {
162
+ "minBytes": 120,
163
+ "checks": [
164
+ {
165
+ "kind": "contains",
166
+ "file": "task-notes.md",
167
+ "pattern": "\\bDONE\\b[\\s\\S]*(validation\\.md|fix-notes\\.md|before\\.md)",
168
+ "flags": "i",
169
+ "label": "DONE note names the deliverables"
170
+ }
171
+ ]
172
+ },
173
+ "taskGraph": {
174
+ "requireCraftbookTask": true,
175
+ "requireTerminalStep": true
176
+ },
177
+ "unchangedFixtures": [
178
+ "package.json",
179
+ "source/change-request.md"
180
+ ]
181
+ },
182
+ "rubric": {
183
+ "artifact": {
184
+ "path": "tasks/eval/fix-notes.md",
185
+ "kind": "markdown"
186
+ },
187
+ "axes": [
188
+ {
189
+ "name": "Request fidelity",
190
+ "description": "The delivered change is what was asked, judged as a user would: search in the header next to the title, the exact placeholder, nothing extra smuggled in."
191
+ },
192
+ {
193
+ "name": "Convention respect",
194
+ "description": "The edit reuses the page's existing structure, naming, and style patterns — the topbar's own layout — rather than inventing a new one-off style."
195
+ },
196
+ {
197
+ "name": "Behavior preservation with honest verification",
198
+ "description": "The / shortcut and the input filter still work after the move, and validation separates what was inspected in the code from what was actually exercised."
199
+ }
200
+ ]
201
+ },
202
+ "qualityFocus": [
203
+ "before/after grounded in real markup",
204
+ "existing behaviors preserved",
205
+ "enforced review loop"
206
+ ]
207
+ }
@@ -3,6 +3,7 @@
3
3
  "kind": "craftbook-template",
4
4
  "id": "version-bump",
5
5
  "role": "general",
6
+ "category": "code-release",
6
7
  "name": "Version Bump",
7
8
  "description": "Perform a coordinated, semver-correct version bump across a project — deciding MAJOR/MINOR/PATCH from the actual change set, then updating every place the version is stamped in lockstep (package manifest(s), version constant, lockfile, badges, docs) plus the changelog header, so nothing drifts out of sync. A planner determines the correct semver level and enumerates every file that carries the version, a developer applies the bump everywhere consistently, and a reviewer verifies no location was missed and the new version is internally consistent. Use this when 'bumping the version', preparing a tag, or releasing a new package version where a half-applied bump (manifest says 2.0.0 but the constant says 1.9.0) is a classic ship bug.",
8
9
  "tags": [