plumbbob 0.9.3 → 0.9.5

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 (278) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +15 -13
  3. package/dist/cli-core.js +19 -2
  4. package/dist/lib/check.js +46 -13
  5. package/dist/lib/intent.js +1 -1
  6. package/dist/lib/latch.js +3 -3
  7. package/dist/lib/reentry.js +70 -0
  8. package/dist/verbs/agent.js +2 -2
  9. package/dist/verbs/doctor.js +4 -4
  10. package/dist/verbs/finish.js +1 -1
  11. package/dist/verbs/recover.js +297 -0
  12. package/dist/verbs/revert.js +2 -2
  13. package/dist/verbs/spike.js +8 -2
  14. package/hooks/post-edit.sh +4 -4
  15. package/hooks/pre-bash-commit.sh +3 -3
  16. package/node_modules/checkride/.claude-plugin/plugin.json +11 -0
  17. package/node_modules/checkride/CHANGELOG.md +1003 -0
  18. package/node_modules/checkride/LICENSE +201 -21
  19. package/node_modules/checkride/README.md +171 -30
  20. package/node_modules/checkride/dist/__tests__/fixtures/released-stanzas.d.ts +15 -0
  21. package/node_modules/checkride/dist/__tests__/fixtures/released-stanzas.d.ts.map +1 -0
  22. package/node_modules/checkride/dist/__tests__/fixtures/released-stanzas.js +17 -0
  23. package/node_modules/checkride/dist/__tests__/fixtures/released-stanzas.js.map +1 -0
  24. package/node_modules/checkride/dist/adapters.d.ts +18 -6
  25. package/node_modules/checkride/dist/adapters.d.ts.map +1 -1
  26. package/node_modules/checkride/dist/adapters.js +42 -23
  27. package/node_modules/checkride/dist/adapters.js.map +1 -1
  28. package/node_modules/checkride/dist/agent-setup/claude.d.ts +88 -0
  29. package/node_modules/checkride/dist/agent-setup/claude.d.ts.map +1 -0
  30. package/node_modules/checkride/dist/agent-setup/claude.js +305 -0
  31. package/node_modules/checkride/dist/agent-setup/claude.js.map +1 -0
  32. package/node_modules/checkride/dist/agent-setup/command.d.ts +43 -0
  33. package/node_modules/checkride/dist/agent-setup/command.d.ts.map +1 -0
  34. package/node_modules/checkride/dist/agent-setup/command.js +77 -0
  35. package/node_modules/checkride/dist/agent-setup/command.js.map +1 -0
  36. package/node_modules/checkride/dist/agent-setup/cursor.d.ts +61 -0
  37. package/node_modules/checkride/dist/agent-setup/cursor.d.ts.map +1 -0
  38. package/node_modules/checkride/dist/agent-setup/cursor.js +189 -0
  39. package/node_modules/checkride/dist/agent-setup/cursor.js.map +1 -0
  40. package/node_modules/checkride/dist/agent-setup/files.d.ts +50 -0
  41. package/node_modules/checkride/dist/agent-setup/files.d.ts.map +1 -0
  42. package/node_modules/checkride/dist/agent-setup/files.js +80 -0
  43. package/node_modules/checkride/dist/agent-setup/files.js.map +1 -0
  44. package/node_modules/checkride/dist/agent-setup/harness.d.ts +101 -0
  45. package/node_modules/checkride/dist/agent-setup/harness.d.ts.map +1 -0
  46. package/node_modules/checkride/dist/agent-setup/harness.js +84 -0
  47. package/node_modules/checkride/dist/agent-setup/harness.js.map +1 -0
  48. package/node_modules/checkride/dist/agent-setup/hook.d.ts +45 -52
  49. package/node_modules/checkride/dist/agent-setup/hook.d.ts.map +1 -1
  50. package/node_modules/checkride/dist/agent-setup/hook.js +64 -95
  51. package/node_modules/checkride/dist/agent-setup/hook.js.map +1 -1
  52. package/node_modules/checkride/dist/agent-setup/index.d.ts +10 -4
  53. package/node_modules/checkride/dist/agent-setup/index.d.ts.map +1 -1
  54. package/node_modules/checkride/dist/agent-setup/index.js +9 -4
  55. package/node_modules/checkride/dist/agent-setup/index.js.map +1 -1
  56. package/node_modules/checkride/dist/agent-setup/scripts.d.ts +58 -0
  57. package/node_modules/checkride/dist/agent-setup/scripts.d.ts.map +1 -0
  58. package/node_modules/checkride/dist/agent-setup/scripts.js +299 -0
  59. package/node_modules/checkride/dist/agent-setup/scripts.js.map +1 -0
  60. package/node_modules/checkride/dist/agent-setup/skills.d.ts +31 -0
  61. package/node_modules/checkride/dist/agent-setup/skills.d.ts.map +1 -0
  62. package/node_modules/checkride/dist/agent-setup/skills.js +56 -0
  63. package/node_modules/checkride/dist/agent-setup/skills.js.map +1 -0
  64. package/node_modules/checkride/dist/artifacts/configured.d.ts +30 -0
  65. package/node_modules/checkride/dist/artifacts/configured.d.ts.map +1 -0
  66. package/node_modules/checkride/dist/artifacts/configured.js +45 -0
  67. package/node_modules/checkride/dist/artifacts/configured.js.map +1 -0
  68. package/node_modules/checkride/dist/artifacts/format.d.ts +33 -0
  69. package/node_modules/checkride/dist/artifacts/format.d.ts.map +1 -0
  70. package/node_modules/checkride/dist/artifacts/format.js +56 -0
  71. package/node_modules/checkride/dist/artifacts/format.js.map +1 -0
  72. package/node_modules/checkride/dist/artifacts/freshness.d.ts +32 -0
  73. package/node_modules/checkride/dist/artifacts/freshness.d.ts.map +1 -0
  74. package/node_modules/checkride/dist/artifacts/freshness.js +37 -0
  75. package/node_modules/checkride/dist/artifacts/freshness.js.map +1 -0
  76. package/node_modules/checkride/dist/artifacts/index.d.ts +22 -0
  77. package/node_modules/checkride/dist/artifacts/index.d.ts.map +1 -0
  78. package/node_modules/checkride/dist/artifacts/index.js +19 -0
  79. package/node_modules/checkride/dist/artifacts/index.js.map +1 -0
  80. package/node_modules/checkride/dist/artifacts/json.d.ts +31 -0
  81. package/node_modules/checkride/dist/artifacts/json.d.ts.map +1 -0
  82. package/node_modules/checkride/dist/artifacts/json.js +47 -0
  83. package/node_modules/checkride/dist/artifacts/json.js.map +1 -0
  84. package/node_modules/checkride/dist/artifacts/raw.d.ts +60 -0
  85. package/node_modules/checkride/dist/artifacts/raw.d.ts.map +1 -0
  86. package/node_modules/checkride/dist/artifacts/raw.js +91 -0
  87. package/node_modules/checkride/dist/artifacts/raw.js.map +1 -0
  88. package/node_modules/checkride/dist/artifacts/summary.d.ts +69 -0
  89. package/node_modules/checkride/dist/artifacts/summary.d.ts.map +1 -0
  90. package/node_modules/checkride/dist/artifacts/summary.js +108 -0
  91. package/node_modules/checkride/dist/artifacts/summary.js.map +1 -0
  92. package/node_modules/checkride/dist/atomic.d.ts +16 -1
  93. package/node_modules/checkride/dist/atomic.d.ts.map +1 -1
  94. package/node_modules/checkride/dist/atomic.js +25 -3
  95. package/node_modules/checkride/dist/atomic.js.map +1 -1
  96. package/node_modules/checkride/dist/baseline/fallow.d.ts +9 -5
  97. package/node_modules/checkride/dist/baseline/fallow.d.ts.map +1 -1
  98. package/node_modules/checkride/dist/baseline/fallow.js +161 -58
  99. package/node_modules/checkride/dist/baseline/fallow.js.map +1 -1
  100. package/node_modules/checkride/dist/baseline/fingerprint.d.ts +7 -7
  101. package/node_modules/checkride/dist/baseline/fingerprint.d.ts.map +1 -1
  102. package/node_modules/checkride/dist/baseline/fingerprint.js +16 -19
  103. package/node_modules/checkride/dist/baseline/fingerprint.js.map +1 -1
  104. package/node_modules/checkride/dist/baseline/index.d.ts +4 -4
  105. package/node_modules/checkride/dist/baseline/index.d.ts.map +1 -1
  106. package/node_modules/checkride/dist/baseline/index.js +4 -4
  107. package/node_modules/checkride/dist/baseline/index.js.map +1 -1
  108. package/node_modules/checkride/dist/baseline/store.d.ts +12 -4
  109. package/node_modules/checkride/dist/baseline/store.d.ts.map +1 -1
  110. package/node_modules/checkride/dist/baseline/store.js +16 -9
  111. package/node_modules/checkride/dist/baseline/store.js.map +1 -1
  112. package/node_modules/checkride/dist/baseline-command.d.ts +5 -5
  113. package/node_modules/checkride/dist/baseline-command.js +7 -7
  114. package/node_modules/checkride/dist/baseline-command.js.map +1 -1
  115. package/node_modules/checkride/dist/cli.d.ts +17 -4
  116. package/node_modules/checkride/dist/cli.d.ts.map +1 -1
  117. package/node_modules/checkride/dist/cli.js +259 -18
  118. package/node_modules/checkride/dist/cli.js.map +1 -1
  119. package/node_modules/checkride/dist/config.d.ts +84 -8
  120. package/node_modules/checkride/dist/config.d.ts.map +1 -1
  121. package/node_modules/checkride/dist/config.js +122 -18
  122. package/node_modules/checkride/dist/config.js.map +1 -1
  123. package/node_modules/checkride/dist/digest/digest.d.ts +5 -5
  124. package/node_modules/checkride/dist/digest/digest.js +5 -5
  125. package/node_modules/checkride/dist/digest/index.d.ts +2 -2
  126. package/node_modules/checkride/dist/digest/index.js +2 -2
  127. package/node_modules/checkride/dist/doctor.d.ts +25 -6
  128. package/node_modules/checkride/dist/doctor.d.ts.map +1 -1
  129. package/node_modules/checkride/dist/doctor.js +193 -27
  130. package/node_modules/checkride/dist/doctor.js.map +1 -1
  131. package/node_modules/checkride/dist/gate.d.ts +135 -0
  132. package/node_modules/checkride/dist/gate.d.ts.map +1 -0
  133. package/node_modules/checkride/dist/gate.js +490 -0
  134. package/node_modules/checkride/dist/gate.js.map +1 -0
  135. package/node_modules/checkride/dist/init.d.ts +72 -12
  136. package/node_modules/checkride/dist/init.d.ts.map +1 -1
  137. package/node_modules/checkride/dist/init.js +324 -81
  138. package/node_modules/checkride/dist/init.js.map +1 -1
  139. package/node_modules/checkride/dist/json.d.ts +21 -0
  140. package/node_modules/checkride/dist/json.d.ts.map +1 -0
  141. package/node_modules/checkride/dist/json.js +21 -0
  142. package/node_modules/checkride/dist/json.js.map +1 -0
  143. package/node_modules/checkride/dist/links.d.ts +31 -5
  144. package/node_modules/checkride/dist/links.d.ts.map +1 -1
  145. package/node_modules/checkride/dist/links.js +141 -32
  146. package/node_modules/checkride/dist/links.js.map +1 -1
  147. package/node_modules/checkride/dist/node-pin.d.ts +129 -0
  148. package/node_modules/checkride/dist/node-pin.d.ts.map +1 -0
  149. package/node_modules/checkride/dist/node-pin.js +211 -0
  150. package/node_modules/checkride/dist/node-pin.js.map +1 -0
  151. package/node_modules/checkride/dist/orchestrator.d.ts +40 -10
  152. package/node_modules/checkride/dist/orchestrator.d.ts.map +1 -1
  153. package/node_modules/checkride/dist/orchestrator.js +196 -102
  154. package/node_modules/checkride/dist/orchestrator.js.map +1 -1
  155. package/node_modules/checkride/dist/pack.d.ts +8 -9
  156. package/node_modules/checkride/dist/pack.d.ts.map +1 -1
  157. package/node_modules/checkride/dist/pack.js +53 -17
  158. package/node_modules/checkride/dist/pack.js.map +1 -1
  159. package/node_modules/checkride/dist/pm/detect.d.ts +6 -1
  160. package/node_modules/checkride/dist/pm/detect.d.ts.map +1 -1
  161. package/node_modules/checkride/dist/pm/detect.js +6 -1
  162. package/node_modules/checkride/dist/pm/detect.js.map +1 -1
  163. package/node_modules/checkride/dist/pm/index.d.ts +6 -2
  164. package/node_modules/checkride/dist/pm/index.d.ts.map +1 -1
  165. package/node_modules/checkride/dist/pm/index.js +6 -2
  166. package/node_modules/checkride/dist/pm/index.js.map +1 -1
  167. package/node_modules/checkride/dist/pm/launch.d.ts +51 -0
  168. package/node_modules/checkride/dist/pm/launch.d.ts.map +1 -0
  169. package/node_modules/checkride/dist/pm/launch.js +92 -0
  170. package/node_modules/checkride/dist/pm/launch.js.map +1 -0
  171. package/node_modules/checkride/dist/pm/tools.d.ts +73 -0
  172. package/node_modules/checkride/dist/pm/tools.d.ts.map +1 -0
  173. package/node_modules/checkride/dist/pm/tools.js +124 -0
  174. package/node_modules/checkride/dist/pm/tools.js.map +1 -0
  175. package/node_modules/checkride/dist/pm/translate.d.ts +35 -9
  176. package/node_modules/checkride/dist/pm/translate.d.ts.map +1 -1
  177. package/node_modules/checkride/dist/pm/translate.js +78 -18
  178. package/node_modules/checkride/dist/pm/translate.js.map +1 -1
  179. package/node_modules/checkride/dist/proc.d.ts +30 -0
  180. package/node_modules/checkride/dist/proc.d.ts.map +1 -0
  181. package/node_modules/checkride/dist/proc.js +42 -0
  182. package/node_modules/checkride/dist/proc.js.map +1 -0
  183. package/node_modules/checkride/dist/qa/cli.d.ts +20 -0
  184. package/node_modules/checkride/dist/qa/cli.d.ts.map +1 -0
  185. package/node_modules/checkride/dist/qa/cli.js +24 -0
  186. package/node_modules/checkride/dist/qa/cli.js.map +1 -0
  187. package/node_modules/checkride/dist/qa/dead.d.ts +39 -0
  188. package/node_modules/checkride/dist/qa/dead.d.ts.map +1 -0
  189. package/node_modules/checkride/dist/qa/dead.js +88 -0
  190. package/node_modules/checkride/dist/qa/dead.js.map +1 -0
  191. package/node_modules/checkride/dist/qa/dupes.d.ts +45 -0
  192. package/node_modules/checkride/dist/qa/dupes.d.ts.map +1 -0
  193. package/node_modules/checkride/dist/qa/dupes.js +62 -0
  194. package/node_modules/checkride/dist/qa/dupes.js.map +1 -0
  195. package/node_modules/checkride/dist/qa/health.d.ts +85 -0
  196. package/node_modules/checkride/dist/qa/health.d.ts.map +1 -0
  197. package/node_modules/checkride/dist/qa/health.js +109 -0
  198. package/node_modules/checkride/dist/qa/health.js.map +1 -0
  199. package/node_modules/checkride/dist/qa/index.d.ts +23 -0
  200. package/node_modules/checkride/dist/qa/index.d.ts.map +1 -0
  201. package/node_modules/checkride/dist/qa/index.js +22 -0
  202. package/node_modules/checkride/dist/qa/index.js.map +1 -0
  203. package/node_modules/checkride/dist/qa/mutation.d.ts +80 -0
  204. package/node_modules/checkride/dist/qa/mutation.d.ts.map +1 -0
  205. package/node_modules/checkride/dist/qa/mutation.js +195 -0
  206. package/node_modules/checkride/dist/qa/mutation.js.map +1 -0
  207. package/node_modules/checkride/dist/qa/qa.d.ts +71 -0
  208. package/node_modules/checkride/dist/qa/qa.d.ts.map +1 -0
  209. package/node_modules/checkride/dist/qa/qa.js +158 -0
  210. package/node_modules/checkride/dist/qa/qa.js.map +1 -0
  211. package/node_modules/checkride/dist/qa/read.d.ts +40 -0
  212. package/node_modules/checkride/dist/qa/read.d.ts.map +1 -0
  213. package/node_modules/checkride/dist/qa/read.js +47 -0
  214. package/node_modules/checkride/dist/qa/read.js.map +1 -0
  215. package/node_modules/checkride/dist/qa/render.d.ts +26 -0
  216. package/node_modules/checkride/dist/qa/render.d.ts.map +1 -0
  217. package/node_modules/checkride/dist/qa/render.js +310 -0
  218. package/node_modules/checkride/dist/qa/render.js.map +1 -0
  219. package/node_modules/checkride/dist/security.d.ts +45 -0
  220. package/node_modules/checkride/dist/security.d.ts.map +1 -0
  221. package/node_modules/checkride/dist/security.js +86 -0
  222. package/node_modules/checkride/dist/security.js.map +1 -0
  223. package/node_modules/checkride/dist/smoke.d.ts +5 -5
  224. package/node_modules/checkride/dist/smoke.js +5 -5
  225. package/node_modules/checkride/dist/snippets.d.ts +26 -29
  226. package/node_modules/checkride/dist/snippets.d.ts.map +1 -1
  227. package/node_modules/checkride/dist/snippets.js +26 -30
  228. package/node_modules/checkride/dist/snippets.js.map +1 -1
  229. package/node_modules/checkride/dist/tool-json.d.ts +33 -0
  230. package/node_modules/checkride/dist/tool-json.d.ts.map +1 -0
  231. package/node_modules/checkride/dist/tool-json.js +58 -0
  232. package/node_modules/checkride/dist/tool-json.js.map +1 -0
  233. package/node_modules/checkride/dist/triage/cli.d.ts +21 -0
  234. package/node_modules/checkride/dist/triage/cli.d.ts.map +1 -0
  235. package/node_modules/checkride/dist/triage/cli.js +26 -0
  236. package/node_modules/checkride/dist/triage/cli.js.map +1 -0
  237. package/node_modules/checkride/dist/triage/doctor-fold.d.ts +51 -0
  238. package/node_modules/checkride/dist/triage/doctor-fold.d.ts.map +1 -0
  239. package/node_modules/checkride/dist/triage/doctor-fold.js +88 -0
  240. package/node_modules/checkride/dist/triage/doctor-fold.js.map +1 -0
  241. package/node_modules/checkride/dist/triage/env.d.ts +54 -0
  242. package/node_modules/checkride/dist/triage/env.d.ts.map +1 -0
  243. package/node_modules/checkride/dist/triage/env.js +81 -0
  244. package/node_modules/checkride/dist/triage/env.js.map +1 -0
  245. package/node_modules/checkride/dist/triage/gate.d.ts +61 -0
  246. package/node_modules/checkride/dist/triage/gate.d.ts.map +1 -0
  247. package/node_modules/checkride/dist/triage/gate.js +121 -0
  248. package/node_modules/checkride/dist/triage/gate.js.map +1 -0
  249. package/node_modules/checkride/dist/triage/index.d.ts +22 -0
  250. package/node_modules/checkride/dist/triage/index.d.ts.map +1 -0
  251. package/node_modules/checkride/dist/triage/index.js +20 -0
  252. package/node_modules/checkride/dist/triage/index.js.map +1 -0
  253. package/node_modules/checkride/dist/triage/render.d.ts +19 -0
  254. package/node_modules/checkride/dist/triage/render.d.ts.map +1 -0
  255. package/node_modules/checkride/dist/triage/render.js +419 -0
  256. package/node_modules/checkride/dist/triage/render.js.map +1 -0
  257. package/node_modules/checkride/dist/triage/triage.d.ts +83 -0
  258. package/node_modules/checkride/dist/triage/triage.d.ts.map +1 -0
  259. package/node_modules/checkride/dist/triage/triage.js +131 -0
  260. package/node_modules/checkride/dist/triage/triage.js.map +1 -0
  261. package/node_modules/checkride/package.json +17 -15
  262. package/node_modules/checkride/schema/checkride.config.schema.json +62 -5
  263. package/node_modules/checkride/schema/checkride.summary.schema.json +1 -1
  264. package/node_modules/checkride/skills/check/SKILL.md +257 -0
  265. package/node_modules/checkride/skills/qa/SKILL.md +231 -0
  266. package/node_modules/checkride/templates/shared/cspell.json +1 -0
  267. package/node_modules/checkride/templates/shared/oxlintrc.json +1 -1
  268. package/package.json +2 -2
  269. package/skills/build/SKILL.md +23 -19
  270. package/skills/finish/SKILL.md +3 -1
  271. package/skills/harvest/SKILL.md +2 -1
  272. package/skills/plan/SKILL.md +8 -7
  273. package/skills/recover/SKILL.md +28 -0
  274. package/skills/refine/SKILL.md +5 -4
  275. package/skills/spike/SKILL.md +1 -1
  276. package/skills/step/SKILL.md +4 -4
  277. package/skills/verify/SKILL.md +19 -14
  278. package/templates/intent.md +8 -7
@@ -22,7 +22,7 @@
22
22
  */
23
23
  import type { Fingerprint } from './fingerprint.js';
24
24
  /**
25
- * Fallow's fingerprint extractor (baseline part 1), for the extractor registry.
25
+ * Fallow's fingerprint extractor, for the extractor registry.
26
26
  * Returns the finding keys for a recognized, readable report and an empty set
27
27
  * for anything else — the "never throw, empty on malformed" contract every
28
28
  * extractor honours. The *gating* verdict (`fallowVerdict`) is where an
@@ -55,10 +55,14 @@ export type FallowVerdict = {
55
55
  * fallow found anything. With a baseline, findings are masked — the slot passes
56
56
  * when every current finding is grandfathered and fails on any new one.
57
57
  *
58
- * A report that parses to *fewer* fingerprints than its issue count has findings
59
- * that can't be individually grandfathered; a baseline must never mask such a
60
- * slot to green, so it stays at the raw findings-based verdict. Correctness over
61
- * precision: better to keep re-surfacing a finding than to silently pass one.
58
+ * A report whose keys don't map one-per-finding onto its issue count — an
59
+ * un-keyable finding, or a key produced for something the count doesn't include
60
+ * — has findings that can't be individually grandfathered; a baseline must never
61
+ * mask such a slot to green, so it stays at the raw findings-based verdict. A key
62
+ * *collision* (two findings sharing a key) is not un-keyable — both are keyed, so
63
+ * the baseline coarsens (grandfathering one grandfathers both) but stays active.
64
+ * Correctness over precision: better to keep re-surfacing a finding than to
65
+ * silently pass one.
62
66
  */
63
67
  export declare function fallowVerdict(raw: string, baselineKeys: readonly string[] | null): FallowVerdict;
64
68
  //# sourceMappingURL=fallow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fallow.d.ts","sourceRoot":"","sources":["../../src/baseline/fallow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAmMpD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAGvD;AAED,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG;IAC1B,2CAA2C;IAC3C,EAAE,EAAE,OAAO,CAAC;IACZ,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gEAAgE;IAChE,QAAQ,EAAE,WAAW,CAAC;IACtB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,aAAa,CAuBhG"}
1
+ {"version":3,"file":"fallow.d.ts","sourceRoot":"","sources":["../../src/baseline/fallow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAgTpD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAGvD;AAED,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG;IAC1B,2CAA2C;IAC3C,EAAE,EAAE,OAAO,CAAC;IACZ,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gEAAgE;IAChE,QAAQ,EAAE,WAAW,CAAC;IACtB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,aAAa,CA0BhG"}
@@ -20,12 +20,14 @@
20
20
  * schema 4 with a different layout and is no longer supported). Each analysis
21
21
  * kind has its own layout, so parsing dispatches on the top-level `kind`.
22
22
  */
23
+ import { parseToolJson } from '../tool-json.js';
23
24
  import { applyBaseline } from './store.js';
24
25
  /**
25
- * Minimum fallow JSON schema version checkride understands. fallow 3.5.0 and
26
- * 3.6.0 both emit schema_version 7; 2.x emitted 4 with an incompatible layout.
27
- * A report below this floor — or one whose kind/shape we can't read — is a
28
- * hard failure, never a silent pass.
26
+ * Minimum fallow JSON schema version checkride understands. Every fallow from
27
+ * 3.5.0 through 3.9.1 emits schema_version 7 (verified: dead-code, dupes, and
28
+ * health all report 7, with identical top-level layouts); 2.x emitted 4 with an
29
+ * incompatible layout. A report below this floor — or one whose kind/shape we
30
+ * can't read — is a hard failure, never a silent pass.
29
31
  */
30
32
  const FALLOW_SCHEMA_MIN = 7;
31
33
  /** Narrow to a plain object (arrays and null excluded). */
@@ -37,32 +39,74 @@ function str(value) {
37
39
  return typeof value === 'string' ? value.trim() : '';
38
40
  }
39
41
  /**
40
- * Fingerprint key for one dead-code finding: `dead-code:<category>:<identity>`,
41
- * where identity is a file and/or symbol (never a line or column, so the key
42
- * survives edits that only move the code). Cross-file findings (cycles) key on
43
- * the sorted set of files. Returns `null` when no stable identity can be read —
44
- * the finding still counts toward `issueCount`, it just can't be individually
45
- * grandfathered (which keeps the slot conservatively red, never silently green).
42
+ * Fields naming the declaration that owns a member-scoped finding, in priority
43
+ * order. fallow reports an unused class/enum/store member as `parent_name` +
44
+ * `member_name`, a component binding as `component_name` + `prop_name` /
45
+ * `input_name` / `output_name` / `emit_name` / `event_name`, and a catalog entry
46
+ * as `catalog_name` + `entry_name`. Both halves are needed: the leaf alone is
47
+ * ambiguous (two classes in one file can each have a `render`), and the
48
+ * container alone collapses every member of one declaration onto one key.
46
49
  */
47
- /** Finding fields that carry a single stable symbol identity, in priority order. */
50
+ const CONTAINER_FIELDS = ['parent_name', 'component_name', 'catalog_name'];
51
+ /** Finding fields that carry a stable leaf symbol, in priority order. */
48
52
  const SYMBOL_FIELDS = [
49
53
  'export_name',
50
54
  'name',
51
55
  'type_name',
52
56
  'member',
57
+ 'member_name',
58
+ 'prop_name',
59
+ 'emit_name',
60
+ 'input_name',
61
+ 'output_name',
62
+ 'event_name',
63
+ 'entry_name',
64
+ 'action_name',
65
+ 'key_name',
53
66
  'package_name',
54
67
  'dependency',
55
68
  'specifier',
56
69
  ];
57
- /** The first non-empty symbol field on a finding, or `''` when none is present. */
58
- function symbolIdentity(item) {
59
- for (const field of SYMBOL_FIELDS) {
70
+ /** The first non-empty field of `fields` on a finding, or `''` when none is set. */
71
+ function firstField(item, fields) {
72
+ for (const field of fields) {
60
73
  const value = str(item[field]);
61
74
  if (value)
62
75
  return value;
63
76
  }
64
77
  return '';
65
78
  }
79
+ /**
80
+ * A finding's stable symbol identity: `<container>.<leaf>` when it carries both
81
+ * (`Svc.unusedOne`), otherwise whichever half it has, otherwise `''`. Composing
82
+ * the two is what keeps a member-scoped finding line-free — with neither half
83
+ * recognized such a finding has no symbol at all and falls back to
84
+ * `<path>:<line>:<col>`, a key that moves whenever code above it does, so a
85
+ * grandfathered finding resurfaces as new on the next unrelated edit.
86
+ */
87
+ function symbolIdentity(item) {
88
+ return [firstField(item, CONTAINER_FIELDS), firstField(item, SYMBOL_FIELDS)].filter(Boolean).join('.');
89
+ }
90
+ /**
91
+ * A finding's `line[:col]` position, or `''` when it carries neither. Only used
92
+ * to disambiguate findings that share every stable identity field (see
93
+ * {@link withPosition}); a keyable finding never falls back to this.
94
+ */
95
+ function position(item) {
96
+ return [item['line'], item['col']].filter((n) => typeof n === 'number').join(':');
97
+ }
98
+ /** Append `:<line>[:<col>]` to a key when the finding has a position, else leave it. */
99
+ function withPosition(key, item) {
100
+ const pos = position(item);
101
+ return pos ? `${key}:${pos}` : key;
102
+ }
103
+ /**
104
+ * A function name that is a real, stable identifier (kept line-free so its key
105
+ * survives edits above it). Fallow wraps names it can't resolve to an identity
106
+ * in angle brackets (`<arrow>`, `<anonymous>`); those fail this test and get a
107
+ * position appended, since every such placeholder in a file is otherwise equal.
108
+ */
109
+ const STABLE_IDENTIFIER = /^[A-Za-z_$][\w$.]*$/;
66
110
  /**
67
111
  * Key a cross-file finding (circular_dependencies, re_export_cycles) on its
68
112
  * sorted file membership — a list of files/segments rather than one location.
@@ -82,17 +126,67 @@ function cycleKey(category, item) {
82
126
  }
83
127
  return null;
84
128
  }
129
+ /**
130
+ * Fingerprint key for one dead-code finding: `dead-code:<category>:<identity>`,
131
+ * where identity is a file and symbol (never a line or column, so the key
132
+ * survives edits that only move the code). When a finding has a file but no
133
+ * symbol — `stale_suppressions`, `policy_violations` and the boundary
134
+ * categories carry only a path — the path alone would collide with its siblings
135
+ * in the same file, so the position is appended to keep them distinct, at the
136
+ * cost of a key that moves. Cross-file findings (cycles) key on the
137
+ * sorted set of files. Returns `null` when no stable identity can be read — the
138
+ * finding still counts toward `issueCount`, it just can't be individually
139
+ * grandfathered (which keeps the slot conservatively red, never silently green).
140
+ */
85
141
  function deadKey(category, item) {
86
142
  if (!isPlainObject(item))
87
143
  return null;
88
144
  const file = str(item['path']) || str(item['file']);
89
145
  const symbol = symbolIdentity(item);
90
- if (file || symbol) {
91
- const identity = [file, symbol].filter(Boolean).join(':');
92
- return `dead-code:${category}:${identity}`;
93
- }
146
+ if (symbol)
147
+ return `dead-code:${category}:${[file, symbol].filter(Boolean).join(':')}`;
148
+ if (file)
149
+ return withPosition(`dead-code:${category}:${file}`, item);
94
150
  return cycleKey(category, item);
95
151
  }
152
+ /**
153
+ * Top-level arrays that are NOT counted in `total_issues`, so keying them would
154
+ * push the key count past the issue count and leave the two out of step: the
155
+ * advisory `next_steps`, the project-level `workspace_diagnostics`, and the
156
+ * three opt-in "health signal" rules that fallow's own `issue-registry.json`
157
+ * marks `counts_in_total: false`. They have to be skipped by name rather than
158
+ * left to {@link deadKey} — `workspace_diagnostics` carries a `path`, and
159
+ * `thin_wrappers` and `duplicate_prop_shapes` a `file`, so all three key
160
+ * readily. Verified against fallow 3.9.1's registry; every other array counts.
161
+ */
162
+ const UNCOUNTED_ARRAYS = new Set([
163
+ 'next_steps',
164
+ 'workspace_diagnostics',
165
+ 'prop_drilling_chains',
166
+ 'thin_wrappers',
167
+ 'duplicate_prop_shapes',
168
+ ]);
169
+ /**
170
+ * Key every counted finding in a dead-code report. Returns the keys — duplicates
171
+ * intact, so a collision stays visible to the caller's tracking check — and how
172
+ * many items carried no stable identity to key on.
173
+ */
174
+ function collectDeadKeys(j) {
175
+ const keys = [];
176
+ let unkeyed = 0;
177
+ for (const [category, value] of Object.entries(j)) {
178
+ if (!Array.isArray(value) || UNCOUNTED_ARRAYS.has(category))
179
+ continue;
180
+ for (const item of value) {
181
+ const key = deadKey(category, item);
182
+ if (key === null)
183
+ unkeyed += 1;
184
+ else
185
+ keys.push(key);
186
+ }
187
+ }
188
+ return { keys, unkeyed };
189
+ }
96
190
  /**
97
191
  * Extract dead-code findings and the authoritative issue count (`total_issues`).
98
192
  * Findings come from the top-level detail arrays (`unused_exports`,
@@ -100,10 +194,10 @@ function deadKey(category, item) {
100
194
  * keys: the summary aggregates a few categories under one name (e.g. dev and
101
195
  * optional deps both count as `unused_dependencies`) whose items live in
102
196
  * separately-named arrays, so keying off the summary would miss them. Iterating
103
- * every array and letting {@link deadKey} return `null` for non-finding arrays
104
- * (`next_steps`) covers whatever categories fallow reports — including ones added
105
- * in a future minor — without a hand-maintained list. A category whose items
106
- * carry no stable identity simply isn't fingerprinted; it still counts toward
197
+ * every array except the {@link UNCOUNTED_ARRAYS} covers whatever categories
198
+ * fallow reports — including ones added in a future minor — without a
199
+ * hand-maintained list of the ones that do count. A category whose items carry
200
+ * no stable identity simply isn't fingerprinted; it still counts toward
107
201
  * `total_issues`, so the slot stays red (never masked) until it's fixed.
108
202
  */
109
203
  function parseDeadCode(j) {
@@ -112,17 +206,17 @@ function parseDeadCode(j) {
112
206
  if (typeof total !== 'number') {
113
207
  return { ok: false, reason: 'fallow dead-code JSON missing summary.total_issues' };
114
208
  }
115
- const findings = [];
116
- for (const [category, value] of Object.entries(j)) {
117
- if (!Array.isArray(value))
118
- continue;
119
- for (const item of value) {
120
- const key = deadKey(category, item);
121
- if (key !== null)
122
- findings.push(key);
123
- }
124
- }
125
- return { ok: true, kind: 'dead-code', findings, issueCount: total };
209
+ const { keys, unkeyed } = collectDeadKeys(j);
210
+ // Two independent ways the keys can fail to cover the findings, both required
211
+ // because either alone has a blind spot. Counting the items we could not key
212
+ // is direct and exact. Comparing against the authoritative `total` catches
213
+ // findings the iteration never reached at all (nothing to count) — and cannot
214
+ // be substituted for the direct count, because a key produced for something
215
+ // `total` omits would otherwise offset a real un-keyable finding back to zero.
216
+ // `keys.length` is taken BEFORE the Set collapses collisions, so a collision
217
+ // still reads as fully tracked.
218
+ const fullyTracked = unkeyed === 0 && keys.length === total;
219
+ return { ok: true, kind: 'dead-code', findings: keys, issueCount: total, fullyTracked };
126
220
  }
127
221
  /**
128
222
  * Extract duplication findings. Each clone group carries a content-hash
@@ -142,12 +236,14 @@ function parseDupes(j) {
142
236
  if (fp)
143
237
  findings.push(`dupes:${fp}`);
144
238
  }
145
- return { ok: true, kind: 'dupes', findings, issueCount: groups.length };
239
+ return { ok: true, kind: 'dupes', findings, issueCount: groups.length, fullyTracked: findings.length === groups.length };
146
240
  }
147
241
  /**
148
242
  * Extract health (complexity) findings — one per function over threshold, keyed
149
- * on file + function name (no line, so the key survives edits above it). The
150
- * issue count is the number of findings.
243
+ * on file + function name. A named function stays line-free so its key survives
244
+ * edits above it; an anonymous placeholder (`<arrow>`, `<anonymous>`) shares its
245
+ * name with every sibling in the file, so it gets a position appended to stay
246
+ * distinct. The issue count is the number of findings.
151
247
  */
152
248
  function parseHealth(j) {
153
249
  const findings = j['findings'];
@@ -158,16 +254,12 @@ function parseHealth(j) {
158
254
  for (const f of findings) {
159
255
  if (!isPlainObject(f))
160
256
  continue;
161
- keys.push(`health:${str(f['path'])}:${str(f['name'])}`);
257
+ const name = str(f['name']);
258
+ const base = `health:${str(f['path'])}:${name}`;
259
+ keys.push(STABLE_IDENTIFIER.test(name) ? base : withPosition(base, f));
162
260
  }
163
- return { ok: true, kind: 'health', findings: keys, issueCount: findings.length };
261
+ return { ok: true, kind: 'health', findings: keys, issueCount: findings.length, fullyTracked: keys.length === findings.length };
164
262
  }
165
- /**
166
- * Parse a fallow report into findings + an issue count, or the reason it could
167
- * not be trusted. Every failure path (bad JSON, missing/old schema, unknown
168
- * kind, missing count field) is a *loud* failure the caller turns into a red
169
- * slot — checkride never treats an unreadable fallow report as "clean".
170
- */
171
263
  /**
172
264
  * The reason a report's schema can't be trusted, or `null` when it is a
173
265
  * supported version. Split out so {@link parseFallow} stays a thin dispatcher.
@@ -181,16 +273,20 @@ function fallowSchemaError(j) {
181
273
  }
182
274
  return null;
183
275
  }
276
+ /**
277
+ * Parse a fallow report into findings + an issue count, or the reason it could
278
+ * not be trusted. Every failure path (bad JSON, missing/old schema, unknown
279
+ * kind, missing count field) is a *loud* failure the caller turns into a red
280
+ * slot — checkride never treats an unreadable fallow report as "clean".
281
+ */
184
282
  function parseFallow(raw) {
185
283
  if (raw.trim() === '')
186
284
  return { ok: false, reason: 'fallow produced no JSON output' };
187
- let j;
188
- try {
189
- j = JSON.parse(raw);
190
- }
191
- catch {
285
+ // Tolerant of a launcher preamble ahead of the report — see `parseToolJson`.
286
+ const parsed = parseToolJson(raw);
287
+ if (!parsed)
192
288
  return { ok: false, reason: 'fallow did not emit valid JSON' };
193
- }
289
+ const j = parsed.value;
194
290
  if (!isPlainObject(j))
195
291
  return { ok: false, reason: 'fallow output was not a JSON object' };
196
292
  const schemaError = fallowSchemaError(j);
@@ -209,7 +305,7 @@ function parseFallow(raw) {
209
305
  }
210
306
  }
211
307
  /**
212
- * Fallow's fingerprint extractor (baseline part 1), for the extractor registry.
308
+ * Fallow's fingerprint extractor, for the extractor registry.
213
309
  * Returns the finding keys for a recognized, readable report and an empty set
214
310
  * for anything else — the "never throw, empty on malformed" contract every
215
311
  * extractor honours. The *gating* verdict (`fallowVerdict`) is where an
@@ -226,10 +322,14 @@ export function fallowFindings(raw) {
226
322
  * fallow found anything. With a baseline, findings are masked — the slot passes
227
323
  * when every current finding is grandfathered and fails on any new one.
228
324
  *
229
- * A report that parses to *fewer* fingerprints than its issue count has findings
230
- * that can't be individually grandfathered; a baseline must never mask such a
231
- * slot to green, so it stays at the raw findings-based verdict. Correctness over
232
- * precision: better to keep re-surfacing a finding than to silently pass one.
325
+ * A report whose keys don't map one-per-finding onto its issue count — an
326
+ * un-keyable finding, or a key produced for something the count doesn't include
327
+ * — has findings that can't be individually grandfathered; a baseline must never
328
+ * mask such a slot to green, so it stays at the raw findings-based verdict. A key
329
+ * *collision* (two findings sharing a key) is not un-keyable — both are keyed, so
330
+ * the baseline coarsens (grandfathering one grandfathers both) but stays active.
331
+ * Correctness over precision: better to keep re-surfacing a finding than to
332
+ * silently pass one.
233
333
  */
234
334
  export function fallowVerdict(raw, baselineKeys) {
235
335
  const parsed = parseFallow(raw);
@@ -243,9 +343,12 @@ export function fallowVerdict(raw, baselineKeys) {
243
343
  return { ok: rawOk, baselined: 0, newKeys: [], findings, observed: true, reason: issueReason };
244
344
  }
245
345
  const adj = applyBaseline(findings, baselineKeys, rawOk);
246
- const fullyTracked = findings.size === parsed.issueCount;
247
- // Untracked findings block masking: hold the slot at its raw verdict.
248
- if (!fullyTracked) {
346
+ // Findings the keys don't cover block masking: hold the slot at its raw
347
+ // verdict. A key collision does NOT (both findings are keyed, so the report
348
+ // stays fully tracked), so it coarsens the baseline instead of disabling it. A
349
+ // *deduplicated* size comparison could not tell the two apart, which is what
350
+ // disabled the whole slot on any collision.
351
+ if (!parsed.fullyTracked) {
249
352
  return { ok: rawOk, baselined: adj.baselined, newKeys: adj.newKeys, findings, observed: true, reason: issueReason };
250
353
  }
251
354
  // Fully tracked: a masked slot (all findings grandfathered) is green; a slot
@@ -1 +1 @@
1
- {"version":3,"file":"fallow.js","sourceRoot":"","sources":["../../src/baseline/fallow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fallow.js","sourceRoot":"","sources":["../../src/baseline/fallow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAiB5B,2DAA2D;AAC3D,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,2EAA2E;AAC3E,SAAS,GAAG,CAAC,KAAc;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,gBAAgB,GAAG,CAAC,aAAa,EAAE,gBAAgB,EAAE,cAAc,CAAU,CAAC;AAEpF,yEAAyE;AACzE,MAAM,aAAa,GAAG;IACpB,aAAa;IACb,MAAM;IACN,WAAW;IACX,QAAQ;IACR,aAAa;IACb,WAAW;IACX,WAAW;IACX,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,UAAU;IACV,cAAc;IACd,YAAY;IACZ,WAAW;CACH,CAAC;AAEX,oFAAoF;AACpF,SAAS,UAAU,CAAC,IAA6B,EAAE,MAAyB;IAC1E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,IAA6B;IACnD,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzG,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,IAA6B;IAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjG,CAAC;AAED,wFAAwF;AACxF,SAAS,YAAY,CAAC,GAAW,EAAE,IAA6B;IAC9D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEhD;;;;GAIG;AACH,SAAS,QAAQ,CAAC,QAAgB,EAAE,IAA6B;IAC/D,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,MAAM,KAAK,GAAG,GAAG;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAClG,MAAM,CAAC,OAAO,CAAC;aACf,QAAQ,EAAE,CAAC;QACd,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,aAAa,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,OAAO,CAAC,QAAgB,EAAE,IAAa;IAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,MAAM;QAAE,OAAO,aAAa,QAAQ,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACvF,IAAI,IAAI;QAAE,OAAO,YAAY,CAAC,aAAa,QAAQ,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IACrE,OAAO,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS;IACvC,YAAY;IACZ,uBAAuB;IACvB,sBAAsB;IACtB,eAAe;IACf,uBAAuB;CACxB,CAAC,CAAC;AAEH;;;;GAIG;AACH,SAAS,eAAe,CAAC,CAA0B;IACjD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,SAAS;QACtE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpC,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,CAAC;;gBAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,aAAa,CAAC,CAA0B;IAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC;IACrF,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAC7C,8EAA8E;IAC9E,6EAA6E;IAC7E,2EAA2E;IAC3E,8EAA8E;IAC9E,4EAA4E;IAC5E,+EAA+E;IAC/E,6EAA6E;IAC7E,gCAAgC;IAChC,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC;IAC5D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AAC1F,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,CAA0B;IAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC;IACzE,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAAE,SAAS;QAChC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QACjC,IAAI,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;AAC3H,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,CAA0B;IAC7C,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;IACtE,CAAC;IACD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAAE,SAAS;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;AAClI,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,CAA0B;IACnD,MAAM,MAAM,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACnC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,mCAAmC,CAAC;IAC3E,IAAI,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAC/B,OAAO,qCAAqC,MAAM,mDAAmD,iBAAiB,4BAA4B,CAAC;IACrJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;IACtF,6EAA6E;IAC7E,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;IAC5E,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;IACvB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;IAE3F,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAEpE,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB;YACE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oCAAoC,IAAI,IAAI,WAAW,GAAG,EAAE,CAAC;IAC7F,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,CAAC;AAsBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,YAAsC;IAC/E,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC/G,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,aAAa,CAAC;IAErE,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjG,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACzD,wEAAwE;IACxE,4EAA4E;IAC5E,+EAA+E;IAC/E,6EAA6E;IAC7E,4CAA4C;IAC5C,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACtH,CAAC;IACD,6EAA6E;IAC7E,8EAA8E;IAC9E,oCAAoC;IACpC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAChH,CAAC"}
@@ -1,18 +1,18 @@
1
1
  /**
2
- * Per-adapter diagnostic fingerprints (baseline part 1).
2
+ * Per-adapter diagnostic fingerprints.
3
3
  *
4
4
  * A *fingerprint* is a stable, order-independent set of key strings extracted
5
5
  * from one adapter's raw output. Each key names a single finding by what it is
6
6
  * (`<file>:<rule>:<message>`) rather than where it sits, so a finding keeps its
7
- * key when unrelated edits shift its line and column — that is what later lets
8
- * the baseline (steps 5–6) subtract already-known findings without re-flagging
7
+ * key when unrelated edits shift its line and column — that is what lets
8
+ * the baseline subtract already-known findings without re-flagging
9
9
  * them every time surrounding code moves.
10
10
  *
11
- * This is deliberately NOT a normalized diagnostic schema (D3): each adapter
11
+ * This is deliberately NOT a normalized diagnostic schema: each adapter
12
12
  * owns its own key string, the raw `.check/<slot>.json` stays authoritative, and
13
13
  * an adapter whose output isn't a stable diagnostic set simply has no extractor
14
14
  * and returns `null` — baseline is unsupported for that slot, decided
15
- * per-adapter against real fixtures (D12), not from an up-front list. Extractors
15
+ * per-adapter against real fixtures, not from an up-front list. Extractors
16
16
  * ship for the blessed lint/struct/spell adapters (oxlint, ast-grep, cspell) and
17
17
  * for fallow's three analyses (dead-code, dupes, health — see `./fallow.ts`,
18
18
  * which also owns fallow's gating verdict).
@@ -25,8 +25,8 @@ export type Fingerprint = ReadonlySet<string>;
25
25
  * alternate tool that shares a slot with a supported default (biome/eslint for
26
26
  * `lint`, knip for `dead`) opts out until it grows its own extractor. A
27
27
  * supported adapter with zero findings returns an empty set, never `null` —
28
- * "supported but clean" and "unsupported" are distinct, and steps 5–6 depend on
29
- * the difference.
28
+ * "supported but clean" and "unsupported" are distinct, and masking and the
29
+ * ratchet depend on the difference.
30
30
  */
31
31
  export declare function fingerprint(adapter: string, raw: string): Fingerprint | null;
32
32
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../src/baseline/fingerprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AA0F9C;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAG5E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D"}
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../src/baseline/fingerprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAqF9C;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAG5E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D"}
@@ -1,22 +1,24 @@
1
1
  /**
2
- * Per-adapter diagnostic fingerprints (baseline part 1).
2
+ * Per-adapter diagnostic fingerprints.
3
3
  *
4
4
  * A *fingerprint* is a stable, order-independent set of key strings extracted
5
5
  * from one adapter's raw output. Each key names a single finding by what it is
6
6
  * (`<file>:<rule>:<message>`) rather than where it sits, so a finding keeps its
7
- * key when unrelated edits shift its line and column — that is what later lets
8
- * the baseline (steps 5–6) subtract already-known findings without re-flagging
7
+ * key when unrelated edits shift its line and column — that is what lets
8
+ * the baseline subtract already-known findings without re-flagging
9
9
  * them every time surrounding code moves.
10
10
  *
11
- * This is deliberately NOT a normalized diagnostic schema (D3): each adapter
11
+ * This is deliberately NOT a normalized diagnostic schema: each adapter
12
12
  * owns its own key string, the raw `.check/<slot>.json` stays authoritative, and
13
13
  * an adapter whose output isn't a stable diagnostic set simply has no extractor
14
14
  * and returns `null` — baseline is unsupported for that slot, decided
15
- * per-adapter against real fixtures (D12), not from an up-front list. Extractors
15
+ * per-adapter against real fixtures, not from an up-front list. Extractors
16
16
  * ship for the blessed lint/struct/spell adapters (oxlint, ast-grep, cspell) and
17
17
  * for fallow's three analyses (dead-code, dupes, health — see `./fallow.ts`,
18
18
  * which also owns fallow's gating verdict).
19
19
  */
20
+ import { isRecord } from '../json.js';
21
+ import { parseToolJson } from '../tool-json.js';
20
22
  import { fallowFindings } from './fallow.js';
21
23
  /**
22
24
  * Build a finding's key from its identity. Line and column are intentionally
@@ -27,19 +29,14 @@ import { fallowFindings } from './fallow.js';
27
29
  function key(file, rule, message) {
28
30
  return `${file}:${rule}:${message.replace(/\s+/g, ' ').trim()}`;
29
31
  }
30
- /** Parse JSON output defensively; malformed input yields `null`, never a throw. */
32
+ /**
33
+ * Parse JSON output defensively; malformed input yields `null`, never a throw.
34
+ * Tolerant of a launcher preamble ahead of the JSON — see `parseToolJson` —
35
+ * because an extractor that silently finds no findings would quietly stop
36
+ * masking the baseline rather than fail loudly.
37
+ */
31
38
  function parseJson(raw) {
32
- try {
33
- const parsed = JSON.parse(raw);
34
- return parsed;
35
- }
36
- catch {
37
- return null;
38
- }
39
- }
40
- /** Narrow to a plain object so string fields can be read without assertions. */
41
- function isRecord(value) {
42
- return typeof value === 'object' && value !== null;
39
+ return parseToolJson(raw)?.value ?? null;
43
40
  }
44
41
  /** Read a field as a string, or `''` when it is missing or not a string. */
45
42
  function str(value) {
@@ -105,8 +102,8 @@ const EXTRACTORS = {
105
102
  * alternate tool that shares a slot with a supported default (biome/eslint for
106
103
  * `lint`, knip for `dead`) opts out until it grows its own extractor. A
107
104
  * supported adapter with zero findings returns an empty set, never `null` —
108
- * "supported but clean" and "unsupported" are distinct, and steps 5–6 depend on
109
- * the difference.
105
+ * "supported but clean" and "unsupported" are distinct, and masking and the
106
+ * ratchet depend on the difference.
110
107
  */
111
108
  export function fingerprint(adapter, raw) {
112
109
  const extractor = EXTRACTORS[adapter];
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/baseline/fingerprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQ7C;;;;;GAKG;AACH,SAAS,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,OAAe;IACtD,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AAClE,CAAC;AAED,mFAAmF;AACnF,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,SAAS,GAAG,CAAC,KAAc;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,2EAA2E;AAC3E,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,gFAAgF;AAChF,MAAM,aAAa,GAAc,CAAC,GAAG,EAAE,EAAE;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,IAAI,OAAO;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,cAAc,GAAc,CAAC,GAAG,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,IAAI,OAAO;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,uEAAuE;AACvE,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAE7C,kFAAkF;AAClF,MAAM,aAAa,GAAc,CAAC,GAAG,EAAE,EAAE;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,UAAU,GAAwC;IACtD,MAAM,EAAE,aAAa;IACrB,UAAU,EAAE,cAAc;IAC1B,MAAM,EAAE,aAAa;IACrB,6EAA6E;IAC7E,+EAA+E;IAC/E,iCAAiC;IACjC,MAAM,EAAE,cAAc;CACvB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,GAAW;IACtD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/baseline/fingerprint.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  /**
2
- * Baseline module — per-adapter diagnostic fingerprints (step 4) and, in later
3
- * steps, the baseline read/write/ratchet built on top of them. This barrel is
4
- * the module's only public surface (C2): siblings import from `../baseline`,
2
+ * Baseline module — per-adapter diagnostic fingerprints and the baseline
3
+ * read/write/ratchet built on top of them. This barrel is
4
+ * the module's only public surface: siblings import from `../baseline`,
5
5
  * never from `./fingerprint.js` directly.
6
6
  */
7
7
  export type { Fingerprint } from './fingerprint.js';
8
8
  export { fingerprint, isFingerprintable } from './fingerprint.js';
9
9
  export { fallowVerdict } from './fallow.js';
10
10
  export type { Baseline } from './store.js';
11
- export { applyBaseline, BASELINE_FILE, baselinesEqual, countBaselineKeys, loadBaseline, ratchet, writeBaseline, } from './store.js';
11
+ export { applyBaseline, BASELINE_FILE, BASELINE_SCHEMA_VERSION, baselinesEqual, countBaselineKeys, loadBaseline, ratchet, writeBaseline, } from './store.js';
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Baseline module — per-adapter diagnostic fingerprints (step 4) and, in later
3
- * steps, the baseline read/write/ratchet built on top of them. This barrel is
4
- * the module's only public surface (C2): siblings import from `../baseline`,
2
+ * Baseline module — per-adapter diagnostic fingerprints and the baseline
3
+ * read/write/ratchet built on top of them. This barrel is
4
+ * the module's only public surface: siblings import from `../baseline`,
5
5
  * never from `./fingerprint.js` directly.
6
6
  */
7
7
  export { fingerprint, isFingerprintable } from './fingerprint.js';
8
8
  export { fallowVerdict } from './fallow.js';
9
- export { applyBaseline, BASELINE_FILE, baselinesEqual, countBaselineKeys, loadBaseline, ratchet, writeBaseline, } from './store.js';
9
+ export { applyBaseline, BASELINE_FILE, BASELINE_SCHEMA_VERSION, baselinesEqual, countBaselineKeys, loadBaseline, ratchet, writeBaseline, } from './store.js';
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EACL,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * The baseline artifact: its on-disk shape and the pure read / write / apply /
3
- * ratchet operations a baseline-aware run (step 6) is built from.
3
+ * ratchet operations a baseline-aware run is built from.
4
4
  *
5
5
  * This file imports nothing from the orchestrator on purpose: the `baseline`
6
- * command (command.ts) bridges to the run pipeline, but a *run* only needs to
6
+ * command (`../baseline-command.ts`) bridges to the run pipeline, but a *run* only needs to
7
7
  * mask and ratchet an already-captured baseline, so the orchestrator can depend
8
8
  * on these helpers without a load-order cycle. Keeping the file I/O and the
9
9
  * set algebra here (not in the orchestrator) also preserves the orchestrator's
@@ -12,7 +12,7 @@
12
12
  import type { Fingerprint } from './fingerprint.js';
13
13
  /** The committed baseline artifact, at repo root beside `checkride.config.json`. */
14
14
  export declare const BASELINE_FILE = "checkride.baseline.json";
15
- /** Schema version of the baseline file; independent of the summary schema (D8). */
15
+ /** Schema version of the baseline file; independent of the summary schema. */
16
16
  export declare const BASELINE_SCHEMA_VERSION = 1;
17
17
  /** Shape of `checkride.baseline.json`: per-slot sets of grandfathered keys. */
18
18
  export type Baseline = {
@@ -33,6 +33,14 @@ export type BaselineAdjustment = {
33
33
  * baseline is a committed file a run reads on every invocation, so a malformed
34
34
  * one is coerced into a clean shape (or dropped) rather than thrown — a corrupt
35
35
  * baseline must never break `checkride`.
36
+ *
37
+ * A file from a *newer* schema is dropped rather than read optimistically. The
38
+ * fields it does not have yet are the ones that would say which findings are
39
+ * masked and why, so guessing means either masking findings it never
40
+ * grandfathered or claiming ones it did. Dropping it fails closed: the run
41
+ * reports the diagnostics that are actually there — more red than the author
42
+ * intended, never a green that was not earned. Same direction as
43
+ * {@link applyBaseline}'s refusal to mask an unparseable run.
36
44
  */
37
45
  export declare function loadBaseline(cwd: string): Baseline | null;
38
46
  /** Serialize and write the baseline to `cwd` (pretty-printed, trailing newline, atomic). */
@@ -57,7 +65,7 @@ export declare function applyBaseline(current: Fingerprint, baselinedKeys: reado
57
65
  * are the run's failures, not new debt, so only a `checkride baseline` capture
58
66
  * ever adds keys. Callers gate this on a full run (no `--only`/`--skip`/
59
67
  * `--changed`, no early `--bail` break) so a partial run can't prune keys it
60
- * simply didn't observe (a1).
68
+ * simply didn't observe.
61
69
  */
62
70
  export declare function ratchet(baseline: Baseline, observed: ReadonlyMap<string, Fingerprint>): Baseline;
63
71
  /** Total grandfathered diagnostics across every slot. */