@bendyline/gilde 0.1.40 → 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 (147) hide show
  1. package/authoring/gstack/overlays/investigate.json +1 -0
  2. package/authoring/gstack/overlays/qa-only.json +1 -0
  3. package/authoring/gstack/wave.json +12 -2
  4. package/authoring/tactical/books/accessibility-retrofit.json +188 -0
  5. package/authoring/tactical/books/apply-review-findings.json +189 -0
  6. package/authoring/tactical/books/bug-fix-tdd.json +237 -0
  7. package/authoring/tactical/books/ci-pipeline.json +168 -0
  8. package/authoring/tactical/books/codemod-sweep.json +182 -0
  9. package/authoring/tactical/books/dependency-upgrade.json +196 -0
  10. package/authoring/tactical/books/flaky-test-fix.json +238 -0
  11. package/authoring/tactical/books/hotfix-flow.json +187 -0
  12. package/authoring/tactical/books/perf-optimization.json +219 -0
  13. package/authoring/tactical/books/refactor-module.json +217 -0
  14. package/authoring/tactical/books/schema-migration.json +192 -0
  15. package/authoring/tactical/books/test-suite-backfill.json +172 -0
  16. package/authoring/tactical/books/type-safety-pass.json +185 -0
  17. package/authoring/tactical/books/ux-update.json +178 -0
  18. package/authoring/tactical/evals/accessibility-retrofit.json +230 -0
  19. package/authoring/tactical/evals/apply-review-findings.json +290 -0
  20. package/authoring/tactical/evals/bug-fix-tdd.json +221 -0
  21. package/authoring/tactical/evals/ci-pipeline.json +227 -0
  22. package/authoring/tactical/evals/codemod-sweep.json +252 -0
  23. package/authoring/tactical/evals/dependency-upgrade.json +235 -0
  24. package/authoring/tactical/evals/flaky-test-fix.json +239 -0
  25. package/authoring/tactical/evals/hotfix-flow.json +220 -0
  26. package/authoring/tactical/evals/perf-optimization.json +235 -0
  27. package/authoring/tactical/evals/refactor-module.json +241 -0
  28. package/authoring/tactical/evals/schema-migration.json +225 -0
  29. package/authoring/tactical/evals/test-suite-backfill.json +197 -0
  30. package/authoring/tactical/evals/type-safety-pass.json +221 -0
  31. package/authoring/tactical/evals/ux-update.json +206 -0
  32. package/authoring/tactical/wave.json +89 -0
  33. package/data/chat-models/de/deepseek-r1-8b-q4/manifest.json +56 -1
  34. package/data/chat-models/gl/glm-5.2-754b-q2/manifest.json +56 -0
  35. package/data/chat-models/gp/gpt-oss-120b-q4/manifest.json +73 -1
  36. package/data/chat-models/gp/gpt-oss-20b-q4/manifest.json +77 -1
  37. package/data/chat-models/index.json +1 -1
  38. package/data/chat-models/ll/llama3.2-3b-q4/manifest.json +3 -1
  39. package/data/chat-models/mi/mistral-7b-q4/manifest.json +54 -3
  40. package/data/chat-models/mi/mistral-medium-3.5-128b-q4/manifest.json +76 -1
  41. package/data/craftbook-templates/ac/accessibility-retrofit/manifest.json +5 -4
  42. package/data/craftbook-templates/ac/accessibility-retrofit/versions/2.0.0/craftbook.json +451 -0
  43. package/data/craftbook-templates/ac/accessibility-retrofit/versions/2.0.0/test.json +231 -0
  44. package/data/craftbook-templates/al/alt-text-pass/manifest.json +5 -1
  45. package/data/craftbook-templates/ap/apply-review-findings/art.json +12 -0
  46. package/data/craftbook-templates/ap/apply-review-findings/logo.webp +0 -0
  47. package/data/craftbook-templates/ap/apply-review-findings/manifest.json +23 -0
  48. package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.0/craftbook.json +436 -0
  49. package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.0/test.json +291 -0
  50. package/data/craftbook-templates/br/browser-qa-audit/manifest.json +5 -1
  51. package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.5/craftbook.json +438 -0
  52. package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.5/test.json +379 -0
  53. package/data/craftbook-templates/bu/bug-fix-tdd/manifest.json +3 -3
  54. package/data/craftbook-templates/bu/bug-fix-tdd/versions/2.0.0/craftbook.json +545 -0
  55. package/data/craftbook-templates/bu/bug-fix-tdd/versions/2.0.0/test.json +222 -0
  56. package/data/craftbook-templates/ch/changelog-cut/manifest.json +5 -1
  57. package/data/craftbook-templates/ch/changelog-writeup/manifest.json +5 -1
  58. package/data/craftbook-templates/ci/ci-pipeline/manifest.json +5 -3
  59. package/data/craftbook-templates/ci/ci-pipeline/versions/2.0.0/craftbook.json +423 -0
  60. package/data/craftbook-templates/ci/ci-pipeline/versions/2.0.0/test.json +228 -0
  61. package/data/craftbook-templates/co/codemod-sweep/art.json +12 -0
  62. package/data/craftbook-templates/co/codemod-sweep/logo.webp +0 -0
  63. package/data/craftbook-templates/co/codemod-sweep/manifest.json +23 -0
  64. package/data/craftbook-templates/co/codemod-sweep/versions/1.0.0/craftbook.json +441 -0
  65. package/data/craftbook-templates/co/codemod-sweep/versions/1.0.0/test.json +253 -0
  66. package/data/craftbook-templates/de/dependency-upgrade/art.json +12 -0
  67. package/data/craftbook-templates/de/dependency-upgrade/logo.webp +0 -0
  68. package/data/craftbook-templates/de/dependency-upgrade/manifest.json +23 -0
  69. package/data/craftbook-templates/de/dependency-upgrade/versions/1.0.0/craftbook.json +459 -0
  70. package/data/craftbook-templates/de/dependency-upgrade/versions/1.0.0/test.json +236 -0
  71. package/data/craftbook-templates/fe/feature-flag-release/manifest.json +5 -1
  72. package/data/craftbook-templates/fe/feature-flag-rollout/manifest.json +4 -1
  73. package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.1.0/craftbook.json +203 -0
  74. package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.1.0/test.json +165 -0
  75. package/data/craftbook-templates/fl/flaky-test-fix/art.json +12 -0
  76. package/data/craftbook-templates/fl/flaky-test-fix/logo.webp +0 -0
  77. package/data/craftbook-templates/fl/flaky-test-fix/manifest.json +24 -0
  78. package/data/craftbook-templates/fl/flaky-test-fix/versions/1.0.0/craftbook.json +534 -0
  79. package/data/craftbook-templates/fl/flaky-test-fix/versions/1.0.0/test.json +240 -0
  80. package/data/craftbook-templates/ho/hotfix-flow/manifest.json +5 -3
  81. package/data/craftbook-templates/ho/hotfix-flow/versions/2.0.0/craftbook.json +442 -0
  82. package/data/craftbook-templates/ho/hotfix-flow/versions/2.0.0/test.json +221 -0
  83. package/data/craftbook-templates/in/investigate/manifest.json +4 -1
  84. package/data/craftbook-templates/in/investigate-root-cause/manifest.json +5 -1
  85. package/data/craftbook-templates/index.json +1 -1
  86. package/data/craftbook-templates/li/live-browser-qa/manifest.json +5 -1
  87. package/data/craftbook-templates/ni/nightly-fix-sweep/art.json +12 -0
  88. package/data/craftbook-templates/ni/nightly-fix-sweep/logo.webp +0 -0
  89. package/data/craftbook-templates/ni/nightly-fix-sweep/manifest.json +23 -0
  90. package/data/craftbook-templates/ni/nightly-fix-sweep/versions/1.0.0/craftbook.json +145 -0
  91. package/data/craftbook-templates/ni/nightly-fix-sweep/versions/1.0.0/test.json +121 -0
  92. package/data/craftbook-templates/pe/perf-audit/versions/1.1.0/craftbook.json +195 -0
  93. package/data/craftbook-templates/pe/perf-audit/versions/1.1.0/test.json +165 -0
  94. package/data/craftbook-templates/pe/perf-optimization/manifest.json +3 -3
  95. package/data/craftbook-templates/pe/perf-optimization/versions/2.0.0/craftbook.json +511 -0
  96. package/data/craftbook-templates/pe/perf-optimization/versions/2.0.0/test.json +236 -0
  97. package/data/craftbook-templates/qa/qa/manifest.json +3 -1
  98. package/data/craftbook-templates/re/refactor-module/manifest.json +2 -2
  99. package/data/craftbook-templates/re/refactor-module/versions/1.0.4/craftbook.json +150 -0
  100. package/data/craftbook-templates/re/refactor-module/versions/1.0.4/test.json +95 -0
  101. package/data/craftbook-templates/re/refactor-module/versions/2.0.0/craftbook.json +509 -0
  102. package/data/craftbook-templates/re/refactor-module/versions/2.0.0/test.json +242 -0
  103. package/data/craftbook-templates/re/release-notes/manifest.json +5 -1
  104. package/data/craftbook-templates/re/release-notes/versions/1.0.3/craftbook.json +220 -0
  105. package/data/craftbook-templates/re/release-notes/versions/1.0.3/test.json +114 -0
  106. package/data/craftbook-templates/re/release-pipeline-ci/manifest.json +5 -1
  107. package/data/craftbook-templates/re/release-readiness-review/versions/1.1.0/craftbook.json +192 -0
  108. package/data/craftbook-templates/re/release-readiness-review/versions/1.1.0/test.json +113 -0
  109. package/data/craftbook-templates/ro/root-cause-investigation/manifest.json +7 -1
  110. package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.5/craftbook.json +433 -0
  111. package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.5/test.json +157 -0
  112. package/data/craftbook-templates/sc/schema-migration/manifest.json +4 -4
  113. package/data/craftbook-templates/sc/schema-migration/versions/2.0.0/craftbook.json +459 -0
  114. package/data/craftbook-templates/sc/schema-migration/versions/2.0.0/test.json +226 -0
  115. package/data/craftbook-templates/te/test-coverage-review/versions/1.2.0/craftbook.json +195 -0
  116. package/data/craftbook-templates/te/test-coverage-review/versions/1.2.0/test.json +116 -0
  117. package/data/craftbook-templates/te/test-suite-backfill/manifest.json +1 -2
  118. package/data/craftbook-templates/te/test-suite-backfill/versions/2.0.0/craftbook.json +428 -0
  119. package/data/craftbook-templates/te/test-suite-backfill/versions/2.0.0/test.json +198 -0
  120. package/data/craftbook-templates/ty/type-safety-pass/manifest.json +3 -3
  121. package/data/craftbook-templates/ty/type-safety-pass/versions/2.0.0/craftbook.json +428 -0
  122. package/data/craftbook-templates/ty/type-safety-pass/versions/2.0.0/test.json +222 -0
  123. package/data/craftbook-templates/ux/ux-update/art.json +12 -0
  124. package/data/craftbook-templates/ux/ux-update/logo.webp +0 -0
  125. package/data/craftbook-templates/ux/ux-update/manifest.json +22 -0
  126. package/data/craftbook-templates/ux/ux-update/versions/1.0.0/craftbook.json +439 -0
  127. package/data/craftbook-templates/ux/ux-update/versions/1.0.0/test.json +207 -0
  128. package/data/craftbook-templates/ve/version-bump/versions/1.1.0/craftbook.json +206 -0
  129. package/data/craftbook-templates/ve/version-bump/versions/1.1.0/test.json +95 -0
  130. package/data/gezel-templates/bo/boekwachter/versions/1.1.0/about.md +29 -0
  131. package/data/gezel-templates/bo/boekwachter/versions/1.1.0/manifest.json +16 -0
  132. package/data/gezel-templates/bu/builder/versions/1.5.0/about.md +34 -0
  133. package/data/gezel-templates/bu/builder/versions/1.5.0/manifest.json +16 -0
  134. package/data/gezel-templates/de/developer/versions/1.5.0/about.md +34 -0
  135. package/data/gezel-templates/de/developer/versions/1.5.0/manifest.json +21 -0
  136. package/data/gezel-templates/index.json +1 -1
  137. package/data/gezel-templates/re/reviewer/versions/1.4.0/about.md +49 -0
  138. package/data/gezel-templates/re/reviewer/versions/1.4.0/manifest.json +21 -0
  139. package/data/project-types/index.json +1 -1
  140. package/data/project-types/so/software-project/manifest.json +20 -0
  141. package/data/project-types/so/software-project/versions/1.0.0/about.md +3 -0
  142. package/data/project-types/so/software-project/versions/1.0.0/manifest.json +41 -0
  143. package/data/project-types/so/software-project/versions/1.0.0/mission.md +4 -0
  144. package/package.json +1 -1
  145. package/schemas/craftbook-doc.schema.json +248 -0
  146. package/schemas/craftbook-template-version.schema.json +248 -0
  147. package/schemas/craftbook-test.schema.json +200 -0
@@ -0,0 +1,222 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "title": "Bug fix with red-then-green proof",
4
+ "objective": "The craftbook drives a disciplined fix of a seeded boundary bug: a failing reproduction test written into the real test layout, the smallest change at the real defect site, a green suite afterwards, and an enforced review — all verified mechanically, including a mutant run proving the regression guard bites.",
5
+ "tags": [
6
+ "code",
7
+ "bug-fix",
8
+ "tdd",
9
+ "tactical-fleet"
10
+ ],
11
+ "prompt": "Use the Reproduce-Then-Fix a Bug craftbook for this: customers report that buying exactly 10 of an item does not get the bulk discount, but the pricing page promises the discount at 10 or more. The report is in source/bug-report.md. Reproduce it with a failing test first, then fix it properly.",
12
+ "setup": {
13
+ "projectName": "Orderly Pricing",
14
+ "about": "A tiny order-pricing module for a web shop. Tests run with `npm run test` (node --test).",
15
+ "files": [
16
+ {
17
+ "path": "package.json",
18
+ "content": "{\n \"name\": \"orderly\",\n \"private\": true,\n \"version\": \"1.0.0\",\n \"type\": \"module\",\n \"scripts\": {\n \"test\": \"node --test\"\n }\n}\n"
19
+ },
20
+ {
21
+ "path": "src/pricing.js",
22
+ "content": "const BULK_THRESHOLD = 10;\nconst BULK_DISCOUNT = 0.15;\n\nexport function lineTotal(unitPrice, qty) {\n if (!Number.isFinite(unitPrice) || unitPrice < 0) throw new Error('bad unitPrice');\n if (!Number.isInteger(qty) || qty < 0) throw new Error('bad qty');\n const subtotal = unitPrice * qty;\n if (qty > BULK_THRESHOLD) {\n return round2(subtotal * (1 - BULK_DISCOUNT));\n }\n return round2(subtotal);\n}\n\nfunction round2(value) {\n return Math.round(value * 100) / 100;\n}\n"
23
+ },
24
+ {
25
+ "path": "tests/pricing.test.mjs",
26
+ "content": "import assert from 'node:assert/strict';\nimport { test } from 'node:test';\nimport { lineTotal } from '../src/pricing.js';\n\ntest('small orders pay full price', () => {\n assert.equal(lineTotal(4, 5), 20);\n});\n\ntest('large orders get the bulk discount', () => {\n assert.equal(lineTotal(10, 20), 170);\n});\n\ntest('rejects bad quantities', () => {\n assert.throws(() => lineTotal(4, -1));\n});\n"
27
+ },
28
+ {
29
+ "path": "source/bug-report.md",
30
+ "content": "# Bug report\n\nFrom support: \"Our pricing page says 'buy 10 or more, save 15%'. A customer bought exactly 10 units at 8.00 and was charged 80.00 - no discount. Buying 11 units gives the discount. Exactly 10 does not.\"\n\nExpected: 10 units at 8.00 with the 15% bulk discount = 68.00.\nActual: charged the full 80.00.\n"
31
+ },
32
+ {
33
+ "path": "tests/verify-pricing.mjs",
34
+ "content": "import assert from 'node:assert/strict';\nimport { execFileSync } from 'node:child_process';\nimport { cpSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { lineTotal } from '../src/pricing.js';\n\n// 1) Behavior: the boundary is fixed and the neighborhood still holds.\nassert.equal(lineTotal(8, 10), 68, 'exactly 10 units must get the bulk discount');\nassert.equal(lineTotal(8, 11), 74.8, 'above the threshold keeps the discount');\nassert.equal(lineTotal(8, 9), 72, 'below the threshold pays full price');\nassert.equal(lineTotal(4, 5), 20, 'small orders unchanged');\nconsole.log('BUGFIX_ORACLE behavior ok');\n\n// 2) Regression guard bites: rebuild the tree with the ORIGINAL seeded\n// defect and the test suite must now FAIL - proof that a reproduction\n// test exists and would catch a revert. The current tree's suite must\n// pass (green after the fix).\nconst root = process.cwd();\nconst mutantRoot = join(root, '.oracle-mutant');\nrmSync(mutantRoot, { recursive: true, force: true });\nmkdirSync(join(mutantRoot, 'src'), { recursive: true });\ncpSync(join(root, 'tests'), join(mutantRoot, 'tests'), { recursive: true });\nrmSync(join(mutantRoot, 'tests', 'verify-pricing.mjs'), { force: true });\ncpSync(join(root, 'package.json'), join(mutantRoot, 'package.json'));\nconst current = readFileSync(join(root, 'src', 'pricing.js'), 'utf8');\nconst mutant = current.replace(/qty\\s*>=\\s*BULK_THRESHOLD/g, 'qty > BULK_THRESHOLD').replace(/qty\\s*>=\\s*10/g, 'qty > 10');\nassert.notEqual(mutant, current, 'could not re-seed the defect - the fix should have made the threshold inclusive');\nwriteFileSync(join(mutantRoot, 'src', 'pricing.js'), mutant);\n\nfunction runSuite(cwd) {\n try {\n execFileSync(process.execPath, ['--test'], { cwd, stdio: 'pipe', timeout: 30000 });\n return 0;\n } catch (err) {\n return typeof err.status === 'number' ? err.status : 1;\n }\n}\n\nassert.equal(runSuite(root), 0, 'the suite must be green on the fixed tree');\nconsole.log('BUGFIX_ORACLE suite green');\nassert.notEqual(runSuite(mutantRoot), 0, 'reverting the fix must make at least one test fail - the regression guard is missing or toothless');\nconsole.log('BUGFIX_ORACLE mutant caught');\nconst testFiles = readdirSync(join(root, 'tests')).filter((f) => f.endsWith('.mjs') && f !== 'verify-pricing.mjs');\nassert.ok(testFiles.length >= 1, 'test layout missing');\nconsole.log('BUGFIX_ORACLE done');\n",
35
+ "surface": "harness"
36
+ }
37
+ ],
38
+ "craftbookParams": {
39
+ "workPath": "tasks/eval",
40
+ "scope": "Buying exactly 10 units does not get the bulk discount; see source/bug-report.md."
41
+ }
42
+ },
43
+ "mocks": [],
44
+ "success": {
45
+ "summary": "The seeded boundary defect is fixed at the real site, the suite is green, a regression test catches a revert (mutant run), and every fleet artifact exists with honest citations.",
46
+ "deliverables": [
47
+ {
48
+ "path": "tasks/eval/repro.md",
49
+ "kind": "markdown-notes",
50
+ "artifact": true,
51
+ "minBytes": 500,
52
+ "checks": [
53
+ {
54
+ "kind": "contains",
55
+ "file": "tasks/eval/repro.md",
56
+ "pattern": "^##\\s+Symptom[\\s\\S]*^##\\s+Repro command[\\s\\S]*^##\\s+Expected[\\s\\S]*^##\\s+Actual[\\s\\S]*^##\\s+Red evidence",
57
+ "flags": "im",
58
+ "label": "reproduction sections in order"
59
+ },
60
+ {
61
+ "kind": "citationsResolve",
62
+ "file": "tasks/eval/repro.md",
63
+ "minCitations": 2,
64
+ "artifact": true
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ "path": "tasks/eval/diagnosis.md",
70
+ "kind": "markdown-notes",
71
+ "artifact": true,
72
+ "minBytes": 600,
73
+ "checks": [
74
+ {
75
+ "kind": "contains",
76
+ "file": "tasks/eval/diagnosis.md",
77
+ "pattern": "^##\\s+Defect site[\\s\\S]*^##\\s+Causal chain[\\s\\S]*^##\\s+Siblings checked",
78
+ "flags": "im",
79
+ "label": "diagnosis sections in order"
80
+ },
81
+ {
82
+ "kind": "contains",
83
+ "file": "tasks/eval/diagnosis.md",
84
+ "pattern": "src/pricing\\.js",
85
+ "label": "names the real defect site"
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ "path": "tasks/eval/fix-notes.md",
91
+ "kind": "markdown-notes",
92
+ "artifact": true,
93
+ "minBytes": 700,
94
+ "checks": [
95
+ {
96
+ "kind": "contains",
97
+ "file": "tasks/eval/fix-notes.md",
98
+ "pattern": "^##\\s+Problem[\\s\\S]*^##\\s+Change[\\s\\S]*^##\\s+Files touched[\\s\\S]*^##\\s+Regression coverage[\\s\\S]*^##\\s+Risk[\\s\\S]*^##\\s+How to verify",
99
+ "flags": "im",
100
+ "label": "fix-notes sections in order"
101
+ },
102
+ {
103
+ "kind": "citationsResolve",
104
+ "file": "tasks/eval/fix-notes.md",
105
+ "minCitations": 2,
106
+ "artifact": true
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ "path": "tasks/eval/validation.md",
112
+ "kind": "markdown-notes",
113
+ "artifact": true,
114
+ "minBytes": 400,
115
+ "checks": [
116
+ {
117
+ "kind": "contains",
118
+ "file": "tasks/eval/validation.md",
119
+ "pattern": "^##\\s+Repro re-run[\\s\\S]*^##\\s+Suite[\\s\\S]*^##\\s+Result",
120
+ "flags": "im",
121
+ "label": "validation sections in order"
122
+ }
123
+ ]
124
+ },
125
+ {
126
+ "path": "tasks/eval/review.md",
127
+ "kind": "markdown-report",
128
+ "artifact": true,
129
+ "minBytes": 400,
130
+ "checks": [
131
+ {
132
+ "kind": "contains",
133
+ "file": "tasks/eval/review.md",
134
+ "pattern": "Verdict:\\s*(?:PASS|REVISE)",
135
+ "flags": "i",
136
+ "label": "explicit reviewer verdict"
137
+ }
138
+ ]
139
+ }
140
+ ],
141
+ "checks": [
142
+ {
143
+ "kind": "notContains",
144
+ "file": "src/pricing.js",
145
+ "pattern": "qty\\s*>\\s*BULK_THRESHOLD|qty\\s*>\\s*10\\b",
146
+ "label": "the seeded exclusive-threshold defect is gone"
147
+ },
148
+ {
149
+ "kind": "sourceParses",
150
+ "file": "src/pricing.js"
151
+ },
152
+ {
153
+ "kind": "nodeRuns",
154
+ "file": "tests/pricing.test.mjs"
155
+ },
156
+ {
157
+ "kind": "nodeScriptPasses",
158
+ "script": "tests/verify-pricing.mjs",
159
+ "timeoutMs": 60000,
160
+ "requiredOutput": [
161
+ {
162
+ "pattern": "BUGFIX_ORACLE behavior ok",
163
+ "label": "boundary behavior fixed"
164
+ },
165
+ {
166
+ "pattern": "BUGFIX_ORACLE suite green",
167
+ "label": "suite green on the fixed tree"
168
+ },
169
+ {
170
+ "pattern": "BUGFIX_ORACLE mutant caught",
171
+ "label": "regression guard catches a revert"
172
+ }
173
+ ]
174
+ }
175
+ ],
176
+ "taskNotes": {
177
+ "minBytes": 120,
178
+ "checks": [
179
+ {
180
+ "kind": "contains",
181
+ "file": "task-notes.md",
182
+ "pattern": "\\bDONE\\b[\\s\\S]*(npm\\s+run\\s+test|node\\s+--test)",
183
+ "flags": "i",
184
+ "label": "DONE note names the real test command"
185
+ }
186
+ ]
187
+ },
188
+ "taskGraph": {
189
+ "requireCraftbookTask": true,
190
+ "requireTerminalStep": true
191
+ },
192
+ "unchangedFixtures": [
193
+ "source/bug-report.md",
194
+ "package.json"
195
+ ]
196
+ },
197
+ "rubric": {
198
+ "artifact": {
199
+ "path": "tasks/eval/fix-notes.md",
200
+ "kind": "markdown"
201
+ },
202
+ "axes": [
203
+ {
204
+ "name": "Repro-first discipline",
205
+ "description": "A failing test was genuinely written and run before the fix, in the project's real test layout, and the red evidence quotes a real run rather than a claim."
206
+ },
207
+ {
208
+ "name": "Fix minimality",
209
+ "description": "The change is the smallest correct edit at the real defect site; no special-casing of the reported input, no unrelated churn."
210
+ },
211
+ {
212
+ "name": "Honest verification",
213
+ "description": "Validation re-ran the original reproduction, distinguishes verified results from anything unverified, and the review graded evidence rather than summaries."
214
+ }
215
+ ]
216
+ },
217
+ "qualityFocus": [
218
+ "red-then-green proof",
219
+ "real-path citations",
220
+ "enforced review loop"
221
+ ]
222
+ }
@@ -19,6 +19,10 @@
19
19
  },
20
20
  "logo": "logo.webp",
21
21
  "license": "MIT",
22
- "yankedVersions": [],
22
+ "yankedVersions": [
23
+ "1.0.0",
24
+ "1.0.1",
25
+ "1.0.2"
26
+ ],
23
27
  "workflow": "build-loop"
24
28
  }
@@ -19,6 +19,10 @@
19
19
  },
20
20
  "logo": "logo.webp",
21
21
  "license": "MIT",
22
- "yankedVersions": [],
22
+ "yankedVersions": [
23
+ "1.0.0",
24
+ "1.0.1",
25
+ "1.0.2"
26
+ ],
23
27
  "workflow": "build-loop"
24
28
  }
@@ -5,14 +5,16 @@
5
5
  "role": "maintenance-review",
6
6
  "category": "code-release",
7
7
  "name": "CI Pipeline from Scratch",
8
- "description": "Build a continuous-integration pipeline that installs, lints, tests, and builds on every push/PR fast, cached, and gating merges on green. Scopes the pipeline contract FIRST — triggers, the job/stage graph, the matrix, caching strategy, and the gates then writes the CI workflow YAML, then a reviewer validates the syntax, stage ordering, caching, and that it actually fails on a broken build. Covers CI triggers, job/stage dependencies, dependency caching, build matrices, status checks, fail-fast gating, and a valid workflow file.",
8
+ "description": "Author a CI pipeline grounded in what the repo actually has: inventory the real package scripts, write the workflow at the conventional location with caching and merge-gating on green, and verify every command it invokes against the manifests honest that CI itself cannot run locally. Adds a publish-on-tag release job only when the repo shows one.",
9
9
  "tags": [
10
- "gallery",
11
10
  "ci",
12
11
  "devops",
13
12
  "pipeline",
14
13
  "automation",
15
- "github-actions"
14
+ "github-actions",
15
+ "cd",
16
+ "release",
17
+ "yaml"
16
18
  ],
17
19
  "maintainer": {
18
20
  "name": "Gezel"