@manehorizons/cadence-core 1.1.1

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 (476) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/bin/cadence.cjs +4 -0
  4. package/dist/build/record.d.ts +16 -0
  5. package/dist/build/record.d.ts.map +1 -0
  6. package/dist/build/record.js +33 -0
  7. package/dist/build/record.js.map +1 -0
  8. package/dist/checks/boundary.d.ts +35 -0
  9. package/dist/checks/boundary.d.ts.map +1 -0
  10. package/dist/checks/boundary.js +29 -0
  11. package/dist/checks/boundary.js.map +1 -0
  12. package/dist/checks/skill-audit.d.ts +29 -0
  13. package/dist/checks/skill-audit.d.ts.map +1 -0
  14. package/dist/checks/skill-audit.js +57 -0
  15. package/dist/checks/skill-audit.js.map +1 -0
  16. package/dist/classify/tier.d.ts +9 -0
  17. package/dist/classify/tier.d.ts.map +1 -0
  18. package/dist/classify/tier.js +15 -0
  19. package/dist/classify/tier.js.map +1 -0
  20. package/dist/cli/commands/assumption.d.ts +3 -0
  21. package/dist/cli/commands/assumption.d.ts.map +1 -0
  22. package/dist/cli/commands/assumption.js +313 -0
  23. package/dist/cli/commands/assumption.js.map +1 -0
  24. package/dist/cli/commands/block.d.ts +3 -0
  25. package/dist/cli/commands/block.d.ts.map +1 -0
  26. package/dist/cli/commands/block.js +23 -0
  27. package/dist/cli/commands/block.js.map +1 -0
  28. package/dist/cli/commands/build.d.ts +3 -0
  29. package/dist/cli/commands/build.d.ts.map +1 -0
  30. package/dist/cli/commands/build.js +89 -0
  31. package/dist/cli/commands/build.js.map +1 -0
  32. package/dist/cli/commands/config.d.ts +3 -0
  33. package/dist/cli/commands/config.d.ts.map +1 -0
  34. package/dist/cli/commands/config.js +91 -0
  35. package/dist/cli/commands/config.js.map +1 -0
  36. package/dist/cli/commands/context.d.ts +3 -0
  37. package/dist/cli/commands/context.d.ts.map +1 -0
  38. package/dist/cli/commands/context.js +31 -0
  39. package/dist/cli/commands/context.js.map +1 -0
  40. package/dist/cli/commands/decision.d.ts +3 -0
  41. package/dist/cli/commands/decision.d.ts.map +1 -0
  42. package/dist/cli/commands/decision.js +390 -0
  43. package/dist/cli/commands/decision.js.map +1 -0
  44. package/dist/cli/commands/done.d.ts +3 -0
  45. package/dist/cli/commands/done.d.ts.map +1 -0
  46. package/dist/cli/commands/done.js +23 -0
  47. package/dist/cli/commands/done.js.map +1 -0
  48. package/dist/cli/commands/draft-new.d.ts +4 -0
  49. package/dist/cli/commands/draft-new.d.ts.map +1 -0
  50. package/dist/cli/commands/draft-new.js +108 -0
  51. package/dist/cli/commands/draft-new.js.map +1 -0
  52. package/dist/cli/commands/draft.d.ts +4 -0
  53. package/dist/cli/commands/draft.d.ts.map +1 -0
  54. package/dist/cli/commands/draft.js +125 -0
  55. package/dist/cli/commands/draft.js.map +1 -0
  56. package/dist/cli/commands/hook.d.ts +3 -0
  57. package/dist/cli/commands/hook.d.ts.map +1 -0
  58. package/dist/cli/commands/hook.js +50 -0
  59. package/dist/cli/commands/hook.js.map +1 -0
  60. package/dist/cli/commands/init.d.ts +21 -0
  61. package/dist/cli/commands/init.d.ts.map +1 -0
  62. package/dist/cli/commands/init.js +255 -0
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/inspect.d.ts +3 -0
  65. package/dist/cli/commands/inspect.d.ts.map +1 -0
  66. package/dist/cli/commands/inspect.js +24 -0
  67. package/dist/cli/commands/inspect.js.map +1 -0
  68. package/dist/cli/commands/intelligence.d.ts +3 -0
  69. package/dist/cli/commands/intelligence.d.ts.map +1 -0
  70. package/dist/cli/commands/intelligence.js +173 -0
  71. package/dist/cli/commands/intelligence.js.map +1 -0
  72. package/dist/cli/commands/milestone.d.ts +3 -0
  73. package/dist/cli/commands/milestone.d.ts.map +1 -0
  74. package/dist/cli/commands/milestone.js +119 -0
  75. package/dist/cli/commands/milestone.js.map +1 -0
  76. package/dist/cli/commands/needs-context.d.ts +3 -0
  77. package/dist/cli/commands/needs-context.d.ts.map +1 -0
  78. package/dist/cli/commands/needs-context.js +23 -0
  79. package/dist/cli/commands/needs-context.js.map +1 -0
  80. package/dist/cli/commands/progress.d.ts +3 -0
  81. package/dist/cli/commands/progress.d.ts.map +1 -0
  82. package/dist/cli/commands/progress.js +21 -0
  83. package/dist/cli/commands/progress.js.map +1 -0
  84. package/dist/cli/commands/recommend.d.ts +3 -0
  85. package/dist/cli/commands/recommend.d.ts.map +1 -0
  86. package/dist/cli/commands/recommend.js +24 -0
  87. package/dist/cli/commands/recommend.js.map +1 -0
  88. package/dist/cli/commands/recommendation.d.ts +3 -0
  89. package/dist/cli/commands/recommendation.d.ts.map +1 -0
  90. package/dist/cli/commands/recommendation.js +360 -0
  91. package/dist/cli/commands/recommendation.js.map +1 -0
  92. package/dist/cli/commands/settle.d.ts +3 -0
  93. package/dist/cli/commands/settle.d.ts.map +1 -0
  94. package/dist/cli/commands/settle.js +453 -0
  95. package/dist/cli/commands/settle.js.map +1 -0
  96. package/dist/cli/commands/spec.d.ts +10 -0
  97. package/dist/cli/commands/spec.d.ts.map +1 -0
  98. package/dist/cli/commands/spec.js +246 -0
  99. package/dist/cli/commands/spec.js.map +1 -0
  100. package/dist/cli/commands/status.d.ts +11 -0
  101. package/dist/cli/commands/status.d.ts.map +1 -0
  102. package/dist/cli/commands/status.js +211 -0
  103. package/dist/cli/commands/status.js.map +1 -0
  104. package/dist/cli/index.d.ts +3 -0
  105. package/dist/cli/index.d.ts.map +1 -0
  106. package/dist/cli/index.js +21 -0
  107. package/dist/cli/index.js.map +1 -0
  108. package/dist/cli/register.d.ts +3 -0
  109. package/dist/cli/register.d.ts.map +1 -0
  110. package/dist/cli/register.js +43 -0
  111. package/dist/cli/register.js.map +1 -0
  112. package/dist/coherence/check.d.ts +11 -0
  113. package/dist/coherence/check.d.ts.map +1 -0
  114. package/dist/coherence/check.js +34 -0
  115. package/dist/coherence/check.js.map +1 -0
  116. package/dist/config/loader.d.ts +4 -0
  117. package/dist/config/loader.d.ts.map +1 -0
  118. package/dist/config/loader.js +40 -0
  119. package/dist/config/loader.js.map +1 -0
  120. package/dist/errors.d.ts +23 -0
  121. package/dist/errors.d.ts.map +1 -0
  122. package/dist/errors.js +31 -0
  123. package/dist/errors.js.map +1 -0
  124. package/dist/gates/approve.d.ts +20 -0
  125. package/dist/gates/approve.d.ts.map +1 -0
  126. package/dist/gates/approve.js +55 -0
  127. package/dist/gates/approve.js.map +1 -0
  128. package/dist/gates/build-context.d.ts +17 -0
  129. package/dist/gates/build-context.d.ts.map +1 -0
  130. package/dist/gates/build-context.js +81 -0
  131. package/dist/gates/build-context.js.map +1 -0
  132. package/dist/gates/build-test-must-pass.d.ts +12 -0
  133. package/dist/gates/build-test-must-pass.d.ts.map +1 -0
  134. package/dist/gates/build-test-must-pass.js +23 -0
  135. package/dist/gates/build-test-must-pass.js.map +1 -0
  136. package/dist/gates/build-types.d.ts +54 -0
  137. package/dist/gates/build-types.d.ts.map +1 -0
  138. package/dist/gates/build-types.js +2 -0
  139. package/dist/gates/build-types.js.map +1 -0
  140. package/dist/gates/code-review.d.ts +20 -0
  141. package/dist/gates/code-review.d.ts.map +1 -0
  142. package/dist/gates/code-review.js +137 -0
  143. package/dist/gates/code-review.js.map +1 -0
  144. package/dist/gates/coherence.d.ts +26 -0
  145. package/dist/gates/coherence.d.ts.map +1 -0
  146. package/dist/gates/coherence.js +59 -0
  147. package/dist/gates/coherence.js.map +1 -0
  148. package/dist/gates/coverage.d.ts +8 -0
  149. package/dist/gates/coverage.d.ts.map +1 -0
  150. package/dist/gates/coverage.js +26 -0
  151. package/dist/gates/coverage.js.map +1 -0
  152. package/dist/gates/deep-verify.d.ts +7 -0
  153. package/dist/gates/deep-verify.d.ts.map +1 -0
  154. package/dist/gates/deep-verify.js +77 -0
  155. package/dist/gates/deep-verify.js.map +1 -0
  156. package/dist/gates/draft-context.d.ts +20 -0
  157. package/dist/gates/draft-context.d.ts.map +1 -0
  158. package/dist/gates/draft-context.js +87 -0
  159. package/dist/gates/draft-context.js.map +1 -0
  160. package/dist/gates/draft-read.d.ts +10 -0
  161. package/dist/gates/draft-read.d.ts.map +1 -0
  162. package/dist/gates/draft-read.js +24 -0
  163. package/dist/gates/draft-read.js.map +1 -0
  164. package/dist/gates/draft-types.d.ts +75 -0
  165. package/dist/gates/draft-types.d.ts.map +1 -0
  166. package/dist/gates/draft-types.js +2 -0
  167. package/dist/gates/draft-types.js.map +1 -0
  168. package/dist/gates/engine.d.ts +21 -0
  169. package/dist/gates/engine.d.ts.map +1 -0
  170. package/dist/gates/engine.js +98 -0
  171. package/dist/gates/engine.js.map +1 -0
  172. package/dist/gates/interactive.d.ts +11 -0
  173. package/dist/gates/interactive.d.ts.map +1 -0
  174. package/dist/gates/interactive.js +55 -0
  175. package/dist/gates/interactive.js.map +1 -0
  176. package/dist/gates/per-task-verify.d.ts +12 -0
  177. package/dist/gates/per-task-verify.d.ts.map +1 -0
  178. package/dist/gates/per-task-verify.js +52 -0
  179. package/dist/gates/per-task-verify.js.map +1 -0
  180. package/dist/gates/plan-review.d.ts +13 -0
  181. package/dist/gates/plan-review.d.ts.map +1 -0
  182. package/dist/gates/plan-review.js +98 -0
  183. package/dist/gates/plan-review.js.map +1 -0
  184. package/dist/gates/registry.d.ts +53 -0
  185. package/dist/gates/registry.d.ts.map +1 -0
  186. package/dist/gates/registry.js +66 -0
  187. package/dist/gates/registry.js.map +1 -0
  188. package/dist/gates/security-audit.d.ts +11 -0
  189. package/dist/gates/security-audit.d.ts.map +1 -0
  190. package/dist/gates/security-audit.js +40 -0
  191. package/dist/gates/security-audit.js.map +1 -0
  192. package/dist/gates/structural-verifier.d.ts +8 -0
  193. package/dist/gates/structural-verifier.d.ts.map +1 -0
  194. package/dist/gates/structural-verifier.js +25 -0
  195. package/dist/gates/structural-verifier.js.map +1 -0
  196. package/dist/gates/types.d.ts +202 -0
  197. package/dist/gates/types.d.ts.map +1 -0
  198. package/dist/gates/types.js +12 -0
  199. package/dist/gates/types.js.map +1 -0
  200. package/dist/hooks/dispatcher.d.ts +8 -0
  201. package/dist/hooks/dispatcher.d.ts.map +1 -0
  202. package/dist/hooks/dispatcher.js +31 -0
  203. package/dist/hooks/dispatcher.js.map +1 -0
  204. package/dist/hooks/handlers.d.ts +21 -0
  205. package/dist/hooks/handlers.d.ts.map +1 -0
  206. package/dist/hooks/handlers.js +121 -0
  207. package/dist/hooks/handlers.js.map +1 -0
  208. package/dist/index.d.ts +2 -0
  209. package/dist/index.d.ts.map +1 -0
  210. package/dist/index.js +2 -0
  211. package/dist/index.js.map +1 -0
  212. package/dist/init/claude-md-template.d.ts +34 -0
  213. package/dist/init/claude-md-template.d.ts.map +1 -0
  214. package/dist/init/claude-md-template.js +72 -0
  215. package/dist/init/claude-md-template.js.map +1 -0
  216. package/dist/intelligence/backend/cadence.d.ts +21 -0
  217. package/dist/intelligence/backend/cadence.d.ts.map +1 -0
  218. package/dist/intelligence/backend/cadence.js +127 -0
  219. package/dist/intelligence/backend/cadence.js.map +1 -0
  220. package/dist/intelligence/context.d.ts +11 -0
  221. package/dist/intelligence/context.d.ts.map +1 -0
  222. package/dist/intelligence/context.js +197 -0
  223. package/dist/intelligence/context.js.map +1 -0
  224. package/dist/intelligence/graph-decision.d.ts +9 -0
  225. package/dist/intelligence/graph-decision.d.ts.map +1 -0
  226. package/dist/intelligence/graph-decision.js +55 -0
  227. package/dist/intelligence/graph-decision.js.map +1 -0
  228. package/dist/intelligence/inspect.d.ts +9 -0
  229. package/dist/intelligence/inspect.d.ts.map +1 -0
  230. package/dist/intelligence/inspect.js +93 -0
  231. package/dist/intelligence/inspect.js.map +1 -0
  232. package/dist/intelligence/milestone.d.ts +40 -0
  233. package/dist/intelligence/milestone.d.ts.map +1 -0
  234. package/dist/intelligence/milestone.js +312 -0
  235. package/dist/intelligence/milestone.js.map +1 -0
  236. package/dist/intelligence/recommend.d.ts +20 -0
  237. package/dist/intelligence/recommend.d.ts.map +1 -0
  238. package/dist/intelligence/recommend.js +185 -0
  239. package/dist/intelligence/recommend.js.map +1 -0
  240. package/dist/intelligence/render-assumption-detail.d.ts +3 -0
  241. package/dist/intelligence/render-assumption-detail.d.ts.map +1 -0
  242. package/dist/intelligence/render-assumption-detail.js +16 -0
  243. package/dist/intelligence/render-assumption-detail.js.map +1 -0
  244. package/dist/intelligence/render-assumption.d.ts +3 -0
  245. package/dist/intelligence/render-assumption.d.ts.map +1 -0
  246. package/dist/intelligence/render-assumption.js +37 -0
  247. package/dist/intelligence/render-assumption.js.map +1 -0
  248. package/dist/intelligence/render-context.d.ts +3 -0
  249. package/dist/intelligence/render-context.d.ts.map +1 -0
  250. package/dist/intelligence/render-context.js +92 -0
  251. package/dist/intelligence/render-context.js.map +1 -0
  252. package/dist/intelligence/render-decision-detail.d.ts +3 -0
  253. package/dist/intelligence/render-decision-detail.d.ts.map +1 -0
  254. package/dist/intelligence/render-decision-detail.js +30 -0
  255. package/dist/intelligence/render-decision-detail.js.map +1 -0
  256. package/dist/intelligence/render-decision-graph.d.ts +3 -0
  257. package/dist/intelligence/render-decision-graph.d.ts.map +1 -0
  258. package/dist/intelligence/render-decision-graph.js +49 -0
  259. package/dist/intelligence/render-decision-graph.js.map +1 -0
  260. package/dist/intelligence/render-decision.d.ts +3 -0
  261. package/dist/intelligence/render-decision.d.ts.map +1 -0
  262. package/dist/intelligence/render-decision.js +45 -0
  263. package/dist/intelligence/render-decision.js.map +1 -0
  264. package/dist/intelligence/render-inspection.d.ts +3 -0
  265. package/dist/intelligence/render-inspection.d.ts.map +1 -0
  266. package/dist/intelligence/render-inspection.js +69 -0
  267. package/dist/intelligence/render-inspection.js.map +1 -0
  268. package/dist/intelligence/render-intelligence-audit.d.ts +5 -0
  269. package/dist/intelligence/render-intelligence-audit.d.ts.map +1 -0
  270. package/dist/intelligence/render-intelligence-audit.js +93 -0
  271. package/dist/intelligence/render-intelligence-audit.js.map +1 -0
  272. package/dist/intelligence/render-intelligence-stats.d.ts +6 -0
  273. package/dist/intelligence/render-intelligence-stats.d.ts.map +1 -0
  274. package/dist/intelligence/render-intelligence-stats.js +76 -0
  275. package/dist/intelligence/render-intelligence-stats.js.map +1 -0
  276. package/dist/intelligence/render-milestone.d.ts +3 -0
  277. package/dist/intelligence/render-milestone.d.ts.map +1 -0
  278. package/dist/intelligence/render-milestone.js +80 -0
  279. package/dist/intelligence/render-milestone.js.map +1 -0
  280. package/dist/intelligence/render-recommend.d.ts +3 -0
  281. package/dist/intelligence/render-recommend.d.ts.map +1 -0
  282. package/dist/intelligence/render-recommend.js +62 -0
  283. package/dist/intelligence/render-recommend.js.map +1 -0
  284. package/dist/intelligence/render-recommendation-detail.d.ts +7 -0
  285. package/dist/intelligence/render-recommendation-detail.d.ts.map +1 -0
  286. package/dist/intelligence/render-recommendation-detail.js +93 -0
  287. package/dist/intelligence/render-recommendation-detail.js.map +1 -0
  288. package/dist/intelligence/render.d.ts +3 -0
  289. package/dist/intelligence/render.d.ts.map +1 -0
  290. package/dist/intelligence/render.js +57 -0
  291. package/dist/intelligence/render.js.map +1 -0
  292. package/dist/intelligence/scan.d.ts +3 -0
  293. package/dist/intelligence/scan.d.ts.map +1 -0
  294. package/dist/intelligence/scan.js +103 -0
  295. package/dist/intelligence/scan.js.map +1 -0
  296. package/dist/intelligence/store.d.ts +143 -0
  297. package/dist/intelligence/store.d.ts.map +1 -0
  298. package/dist/intelligence/store.js +701 -0
  299. package/dist/intelligence/store.js.map +1 -0
  300. package/dist/notify/code-review.d.ts +34 -0
  301. package/dist/notify/code-review.d.ts.map +1 -0
  302. package/dist/notify/code-review.js +56 -0
  303. package/dist/notify/code-review.js.map +1 -0
  304. package/dist/notify/collect.d.ts +31 -0
  305. package/dist/notify/collect.d.ts.map +1 -0
  306. package/dist/notify/collect.js +127 -0
  307. package/dist/notify/collect.js.map +1 -0
  308. package/dist/notify/emit-unconverged.d.ts +26 -0
  309. package/dist/notify/emit-unconverged.d.ts.map +1 -0
  310. package/dist/notify/emit-unconverged.js +31 -0
  311. package/dist/notify/emit-unconverged.js.map +1 -0
  312. package/dist/notify/factory.d.ts +12 -0
  313. package/dist/notify/factory.d.ts.map +1 -0
  314. package/dist/notify/factory.js +29 -0
  315. package/dist/notify/factory.js.map +1 -0
  316. package/dist/notify/file.d.ts +13 -0
  317. package/dist/notify/file.d.ts.map +1 -0
  318. package/dist/notify/file.js +21 -0
  319. package/dist/notify/file.js.map +1 -0
  320. package/dist/notify/loop-violation.d.ts +10 -0
  321. package/dist/notify/loop-violation.d.ts.map +1 -0
  322. package/dist/notify/loop-violation.js +46 -0
  323. package/dist/notify/loop-violation.js.map +1 -0
  324. package/dist/notify/notifier.d.ts +13 -0
  325. package/dist/notify/notifier.d.ts.map +1 -0
  326. package/dist/notify/notifier.js +2 -0
  327. package/dist/notify/notifier.js.map +1 -0
  328. package/dist/notify/null.d.ts +11 -0
  329. package/dist/notify/null.d.ts.map +1 -0
  330. package/dist/notify/null.js +11 -0
  331. package/dist/notify/null.js.map +1 -0
  332. package/dist/notify/plan-review.d.ts +20 -0
  333. package/dist/notify/plan-review.d.ts.map +1 -0
  334. package/dist/notify/plan-review.js +15 -0
  335. package/dist/notify/plan-review.js.map +1 -0
  336. package/dist/notify/skill-audit.d.ts +18 -0
  337. package/dist/notify/skill-audit.d.ts.map +1 -0
  338. package/dist/notify/skill-audit.js +33 -0
  339. package/dist/notify/skill-audit.js.map +1 -0
  340. package/dist/notify/spec-review.d.ts +20 -0
  341. package/dist/notify/spec-review.d.ts.map +1 -0
  342. package/dist/notify/spec-review.js +15 -0
  343. package/dist/notify/spec-review.js.map +1 -0
  344. package/dist/notify/stderr.d.ts +17 -0
  345. package/dist/notify/stderr.d.ts.map +1 -0
  346. package/dist/notify/stderr.js +17 -0
  347. package/dist/notify/stderr.js.map +1 -0
  348. package/dist/notify/webhook.d.ts +33 -0
  349. package/dist/notify/webhook.d.ts.map +1 -0
  350. package/dist/notify/webhook.js +55 -0
  351. package/dist/notify/webhook.js.map +1 -0
  352. package/dist/parse/draft-parser.d.ts +3 -0
  353. package/dist/parse/draft-parser.d.ts.map +1 -0
  354. package/dist/parse/draft-parser.js +99 -0
  355. package/dist/parse/draft-parser.js.map +1 -0
  356. package/dist/parse/draft-scaffold.d.ts +14 -0
  357. package/dist/parse/draft-scaffold.d.ts.map +1 -0
  358. package/dist/parse/draft-scaffold.js +31 -0
  359. package/dist/parse/draft-scaffold.js.map +1 -0
  360. package/dist/parse/spec-parser.d.ts +3 -0
  361. package/dist/parse/spec-parser.d.ts.map +1 -0
  362. package/dist/parse/spec-parser.js +68 -0
  363. package/dist/parse/spec-parser.js.map +1 -0
  364. package/dist/parse/summary-writer.d.ts +3 -0
  365. package/dist/parse/summary-writer.d.ts.map +1 -0
  366. package/dist/parse/summary-writer.js +41 -0
  367. package/dist/parse/summary-writer.js.map +1 -0
  368. package/dist/progress.d.ts +7 -0
  369. package/dist/progress.d.ts.map +1 -0
  370. package/dist/progress.js +37 -0
  371. package/dist/progress.js.map +1 -0
  372. package/dist/render/state-md.d.ts +3 -0
  373. package/dist/render/state-md.d.ts.map +1 -0
  374. package/dist/render/state-md.js +33 -0
  375. package/dist/render/state-md.js.map +1 -0
  376. package/dist/state/atomic-write.d.ts +3 -0
  377. package/dist/state/atomic-write.d.ts.map +1 -0
  378. package/dist/state/atomic-write.js +52 -0
  379. package/dist/state/atomic-write.js.map +1 -0
  380. package/dist/state/backend.d.ts +13 -0
  381. package/dist/state/backend.d.ts.map +1 -0
  382. package/dist/state/backend.js +2 -0
  383. package/dist/state/backend.js.map +1 -0
  384. package/dist/state/simple.d.ts +18 -0
  385. package/dist/state/simple.d.ts.map +1 -0
  386. package/dist/state/simple.js +67 -0
  387. package/dist/state/simple.js.map +1 -0
  388. package/dist/status.d.ts +47 -0
  389. package/dist/status.d.ts.map +1 -0
  390. package/dist/status.js +209 -0
  391. package/dist/status.js.map +1 -0
  392. package/dist/verify/anthropic-verifier.d.ts +28 -0
  393. package/dist/verify/anthropic-verifier.d.ts.map +1 -0
  394. package/dist/verify/anthropic-verifier.js +109 -0
  395. package/dist/verify/anthropic-verifier.js.map +1 -0
  396. package/dist/verify/code-review-factory.d.ts +103 -0
  397. package/dist/verify/code-review-factory.d.ts.map +1 -0
  398. package/dist/verify/code-review-factory.js +11 -0
  399. package/dist/verify/code-review-factory.js.map +1 -0
  400. package/dist/verify/code-review.d.ts +65 -0
  401. package/dist/verify/code-review.d.ts.map +1 -0
  402. package/dist/verify/code-review.js +189 -0
  403. package/dist/verify/code-review.js.map +1 -0
  404. package/dist/verify/converge.d.ts +14 -0
  405. package/dist/verify/converge.d.ts.map +1 -0
  406. package/dist/verify/converge.js +17 -0
  407. package/dist/verify/converge.js.map +1 -0
  408. package/dist/verify/coverage.d.ts +31 -0
  409. package/dist/verify/coverage.d.ts.map +1 -0
  410. package/dist/verify/coverage.js +125 -0
  411. package/dist/verify/coverage.js.map +1 -0
  412. package/dist/verify/factory.d.ts +107 -0
  413. package/dist/verify/factory.d.ts.map +1 -0
  414. package/dist/verify/factory.js +17 -0
  415. package/dist/verify/factory.js.map +1 -0
  416. package/dist/verify/interactive.d.ts +22 -0
  417. package/dist/verify/interactive.d.ts.map +1 -0
  418. package/dist/verify/interactive.js +61 -0
  419. package/dist/verify/interactive.js.map +1 -0
  420. package/dist/verify/local-client.d.ts +13 -0
  421. package/dist/verify/local-client.d.ts.map +1 -0
  422. package/dist/verify/local-client.js +73 -0
  423. package/dist/verify/local-client.js.map +1 -0
  424. package/dist/verify/mock-verifier.d.ts +16 -0
  425. package/dist/verify/mock-verifier.d.ts.map +1 -0
  426. package/dist/verify/mock-verifier.js +30 -0
  427. package/dist/verify/mock-verifier.js.map +1 -0
  428. package/dist/verify/per-task-factory.d.ts +103 -0
  429. package/dist/verify/per-task-factory.d.ts.map +1 -0
  430. package/dist/verify/per-task-factory.js +11 -0
  431. package/dist/verify/per-task-factory.js.map +1 -0
  432. package/dist/verify/per-task.d.ts +69 -0
  433. package/dist/verify/per-task.d.ts.map +1 -0
  434. package/dist/verify/per-task.js +154 -0
  435. package/dist/verify/per-task.js.map +1 -0
  436. package/dist/verify/plan-review-factory.d.ts +103 -0
  437. package/dist/verify/plan-review-factory.d.ts.map +1 -0
  438. package/dist/verify/plan-review-factory.js +11 -0
  439. package/dist/verify/plan-review-factory.js.map +1 -0
  440. package/dist/verify/plan-review.d.ts +67 -0
  441. package/dist/verify/plan-review.d.ts.map +1 -0
  442. package/dist/verify/plan-review.js +196 -0
  443. package/dist/verify/plan-review.js.map +1 -0
  444. package/dist/verify/prompter.d.ts +40 -0
  445. package/dist/verify/prompter.d.ts.map +1 -0
  446. package/dist/verify/prompter.js +48 -0
  447. package/dist/verify/prompter.js.map +1 -0
  448. package/dist/verify/security-audit-factory.d.ts +103 -0
  449. package/dist/verify/security-audit-factory.d.ts.map +1 -0
  450. package/dist/verify/security-audit-factory.js +11 -0
  451. package/dist/verify/security-audit-factory.js.map +1 -0
  452. package/dist/verify/security-audit.d.ts +63 -0
  453. package/dist/verify/security-audit.d.ts.map +1 -0
  454. package/dist/verify/security-audit.js +196 -0
  455. package/dist/verify/security-audit.js.map +1 -0
  456. package/dist/verify/skill-match.d.ts +10 -0
  457. package/dist/verify/skill-match.d.ts.map +1 -0
  458. package/dist/verify/skill-match.js +15 -0
  459. package/dist/verify/skill-match.js.map +1 -0
  460. package/dist/verify/spec-review-factory.d.ts +103 -0
  461. package/dist/verify/spec-review-factory.d.ts.map +1 -0
  462. package/dist/verify/spec-review-factory.js +11 -0
  463. package/dist/verify/spec-review-factory.js.map +1 -0
  464. package/dist/verify/spec-review.d.ts +63 -0
  465. package/dist/verify/spec-review.d.ts.map +1 -0
  466. package/dist/verify/spec-review.js +182 -0
  467. package/dist/verify/spec-review.js.map +1 -0
  468. package/dist/verify/verifier-factory.d.ts +45 -0
  469. package/dist/verify/verifier-factory.d.ts.map +1 -0
  470. package/dist/verify/verifier-factory.js +38 -0
  471. package/dist/verify/verifier-factory.js.map +1 -0
  472. package/dist/verify/verifier.d.ts +63 -0
  473. package/dist/verify/verifier.d.ts.map +1 -0
  474. package/dist/verify/verifier.js +32 -0
  475. package/dist/verify/verifier.js.map +1 -0
  476. package/package.json +62 -0
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Drop-on-the-floor notifier. Used for `transport: 'none'` and tests that
3
+ * want to verify silence.
4
+ */
5
+ export class NullNotifier {
6
+ name = 'null';
7
+ async notify(_events) {
8
+ // intentional no-op
9
+ }
10
+ }
11
+ //# sourceMappingURL=null.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null.js","sourceRoot":"","sources":["../../src/notify/null.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,MAAM,CAAC,OAAuB;QAClC,oBAAoB;IACtB,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { selectNotifier } from './factory.js';
2
+ /**
3
+ * Phase 35.1 — emits a single `plan-review-unconverged` anomaly when
4
+ * plan-review fails to converge after maxAttempts. UNCONDITIONAL by design
5
+ * (mirrors emitSkillAuditMiss): plan-review fires only `strict×complex`, and
6
+ * strict cells carry NO `anomaly-notify` gate — a hard human-escalation must
7
+ * still leave an audit trail, so the caller does NOT gate this on
8
+ * `anomaly-notify`. Phase 42.1 — transport/ts-stamp/degrade live in the shared
9
+ * `emitUnconverged` spine; this is now just the payload builder.
10
+ */
11
+ export declare function emitPlanReviewUnconverged(notifier: ReturnType<typeof selectNotifier>, ctx: {
12
+ draftId: string;
13
+ attempts: number;
14
+ maxAttempts: number;
15
+ findings: number;
16
+ provider: string;
17
+ model?: string;
18
+ bypassed?: boolean;
19
+ }): Promise<void>;
20
+ //# sourceMappingURL=plan-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-review.d.ts","sourceRoot":"","sources":["../../src/notify/plan-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,EAC3C,GAAG,EAAE;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GACA,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,15 @@
1
+ import { emitUnconverged } from './emit-unconverged.js';
2
+ /**
3
+ * Phase 35.1 — emits a single `plan-review-unconverged` anomaly when
4
+ * plan-review fails to converge after maxAttempts. UNCONDITIONAL by design
5
+ * (mirrors emitSkillAuditMiss): plan-review fires only `strict×complex`, and
6
+ * strict cells carry NO `anomaly-notify` gate — a hard human-escalation must
7
+ * still leave an audit trail, so the caller does NOT gate this on
8
+ * `anomaly-notify`. Phase 42.1 — transport/ts-stamp/degrade live in the shared
9
+ * `emitUnconverged` spine; this is now just the payload builder.
10
+ */
11
+ export function emitPlanReviewUnconverged(notifier, ctx) {
12
+ const { draftId, ...rest } = ctx;
13
+ return emitUnconverged(notifier, 'plan-review', { entityId: draftId, ...rest });
14
+ }
15
+ //# sourceMappingURL=plan-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-review.js","sourceRoot":"","sources":["../../src/notify/plan-review.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA2C,EAC3C,GAQC;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IACjC,OAAO,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { selectNotifier } from './factory.js';
2
+ /**
3
+ * Phase 34.1 — emits a single `skill-audit-miss` anomaly. UNCONDITIONAL by
4
+ * design: unlike `emitCodeReviewHigh`/`emitLoopViolation` the caller does NOT
5
+ * gate this on the `anomaly-notify` gate (strict cells lack it; a strict
6
+ * phase that fails the skill requirement must still leave an audit trail).
7
+ * Transport failure → one stderr warning, never throws (refusal is computed
8
+ * independently of whether the anomaly write succeeded).
9
+ */
10
+ export declare function emitSkillAuditMiss(notifier: ReturnType<typeof selectNotifier>, ctx: {
11
+ required: string[];
12
+ invoked: string[];
13
+ missing: string[];
14
+ severity: 'warn' | 'error';
15
+ bypassed?: boolean;
16
+ unenforceable?: boolean;
17
+ }): Promise<void>;
18
+ //# sourceMappingURL=skill-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-audit.d.ts","sourceRoot":"","sources":["../../src/notify/skill-audit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,EAC3C,GAAG,EAAE;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GACA,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Phase 34.1 — emits a single `skill-audit-miss` anomaly. UNCONDITIONAL by
3
+ * design: unlike `emitCodeReviewHigh`/`emitLoopViolation` the caller does NOT
4
+ * gate this on the `anomaly-notify` gate (strict cells lack it; a strict
5
+ * phase that fails the skill requirement must still leave an audit trail).
6
+ * Transport failure → one stderr warning, never throws (refusal is computed
7
+ * independently of whether the anomaly write succeeded).
8
+ */
9
+ export async function emitSkillAuditMiss(notifier, ctx) {
10
+ const event = {
11
+ type: 'skill-audit-miss',
12
+ severity: ctx.severity,
13
+ message: ctx.unenforceable === true
14
+ ? `skill-audit unenforceable — telemetry.skillInvocations disabled; required [${ctx.required.join(', ')}] not verified`
15
+ : `skill-audit miss — required skill(s) not invoked: ${ctx.missing.join(', ')}`,
16
+ context: {
17
+ required: ctx.required,
18
+ invoked: ctx.invoked,
19
+ missing: ctx.missing,
20
+ ...(ctx.bypassed !== undefined ? { bypassed: ctx.bypassed } : {}),
21
+ ...(ctx.unenforceable !== undefined ? { unenforceable: ctx.unenforceable } : {}),
22
+ },
23
+ ts: new Date().toISOString(),
24
+ };
25
+ try {
26
+ await notifier.notify([event]);
27
+ }
28
+ catch (err) {
29
+ const msg = err instanceof Error ? err.message : String(err);
30
+ process.stderr.write(`cadence-notify: ${notifier.name} transport failed — ${msg} (continuing)\n`);
31
+ }
32
+ }
33
+ //# sourceMappingURL=skill-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-audit.js","sourceRoot":"","sources":["../../src/notify/skill-audit.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAA2C,EAC3C,GAOC;IAED,MAAM,KAAK,GAAiB;QAC1B,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,OAAO,EACL,GAAG,CAAC,aAAa,KAAK,IAAI;YACxB,CAAC,CAAC,8EAA8E,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB;YACvH,CAAC,CAAC,qDAAqD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACnF,OAAO,EAAE;YACP,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF;QACD,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC7B,CAAC;IACF,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mBAAmB,QAAQ,CAAC,IAAI,uBAAuB,GAAG,iBAAiB,CAC5E,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { selectNotifier } from './factory.js';
2
+ /**
3
+ * Phase 36.1 — emits a single `spec-review-unconverged` anomaly when
4
+ * spec-review fails to converge after maxAttempts. UNCONDITIONAL by design
5
+ * (mirrors emitPlanReviewUnconverged / emitSkillAuditMiss): spec-review is
6
+ * not a gate-matrix cell at all, so there is no `anomaly-notify` gate to key
7
+ * off, and a hard human-escalation must still leave an audit trail. Phase 42.1
8
+ * — transport/ts-stamp/degrade live in the shared `emitUnconverged` spine;
9
+ * this is now just the payload builder.
10
+ */
11
+ export declare function emitSpecReviewUnconverged(notifier: ReturnType<typeof selectNotifier>, ctx: {
12
+ specId: string;
13
+ attempts: number;
14
+ maxAttempts: number;
15
+ findings: number;
16
+ provider: string;
17
+ model?: string;
18
+ bypassed?: boolean;
19
+ }): Promise<void>;
20
+ //# sourceMappingURL=spec-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-review.d.ts","sourceRoot":"","sources":["../../src/notify/spec-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,EAC3C,GAAG,EAAE;IACH,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GACA,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,15 @@
1
+ import { emitUnconverged } from './emit-unconverged.js';
2
+ /**
3
+ * Phase 36.1 — emits a single `spec-review-unconverged` anomaly when
4
+ * spec-review fails to converge after maxAttempts. UNCONDITIONAL by design
5
+ * (mirrors emitPlanReviewUnconverged / emitSkillAuditMiss): spec-review is
6
+ * not a gate-matrix cell at all, so there is no `anomaly-notify` gate to key
7
+ * off, and a hard human-escalation must still leave an audit trail. Phase 42.1
8
+ * — transport/ts-stamp/degrade live in the shared `emitUnconverged` spine;
9
+ * this is now just the payload builder.
10
+ */
11
+ export function emitSpecReviewUnconverged(notifier, ctx) {
12
+ const { specId, ...rest } = ctx;
13
+ return emitUnconverged(notifier, 'spec-review', { entityId: specId, ...rest });
14
+ }
15
+ //# sourceMappingURL=spec-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-review.js","sourceRoot":"","sources":["../../src/notify/spec-review.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA2C,EAC3C,GAQC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAChC,OAAO,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { AnomalyEvent } from '@manehorizons/cadence-types';
2
+ import type { Notifier } from './notifier.js';
3
+ export interface StderrNotifierOptions {
4
+ /** Test seam: stand in for `process.stderr.write`. */
5
+ write?: (chunk: string) => void;
6
+ }
7
+ /**
8
+ * Renders one line per event to stderr (or an injected writer) in the form:
9
+ * `cadence anomaly [severity] type: message`
10
+ */
11
+ export declare class StderrNotifier implements Notifier {
12
+ readonly name = "stderr";
13
+ private readonly write;
14
+ constructor(opts?: StderrNotifierOptions);
15
+ notify(events: AnomalyEvent[]): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=stderr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stderr.d.ts","sourceRoot":"","sources":["../../src/notify/stderr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED;;;GAGG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;gBAEpC,IAAI,GAAE,qBAA0B;IAItC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAKpD"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Renders one line per event to stderr (or an injected writer) in the form:
3
+ * `cadence anomaly [severity] type: message`
4
+ */
5
+ export class StderrNotifier {
6
+ name = 'stderr';
7
+ write;
8
+ constructor(opts = {}) {
9
+ this.write = opts.write ?? ((c) => process.stderr.write(c));
10
+ }
11
+ async notify(events) {
12
+ for (const e of events) {
13
+ this.write(`cadence anomaly [${e.severity}] ${e.type}: ${e.message}\n`);
14
+ }
15
+ }
16
+ }
17
+ //# sourceMappingURL=stderr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stderr.js","sourceRoot":"","sources":["../../src/notify/stderr.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,QAAQ,CAAC;IACR,KAAK,CAA0B;IAEhD,YAAY,OAA8B,EAAE;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAsB;QACjC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ import type { AnomalyEvent } from '@manehorizons/cadence-types';
2
+ import type { Notifier } from './notifier.js';
3
+ export interface WebhookNotifierOptions {
4
+ url: string;
5
+ headers?: Record<string, string>;
6
+ /** Per-request timeout in ms. Defaults to 5000. */
7
+ timeoutMs?: number;
8
+ /** Test seam: stand in for `process.stderr.write`. */
9
+ stderrWrite?: (chunk: string) => void;
10
+ /** Test seam: stand in for global `fetch`. */
11
+ fetchImpl?: typeof fetch;
12
+ }
13
+ /**
14
+ * POSTs the batched anomaly events to a user-provided URL as
15
+ * `{events: AnomalyEvent[]}` JSON. Phase 19.1 generic webhook primitive —
16
+ * bring your own bridge (Slack incoming, Discord webhook, Zapier catch,
17
+ * n8n hook, continuity-runtime ingester, etc.). On any transport failure
18
+ * (network / non-2xx / timeout) the notifier writes one stderr warning and
19
+ * resolves — settle never breaks on transport errors. The URL is sensitive
20
+ * (may carry a token) and is NEVER included in the failure message.
21
+ */
22
+ export declare class WebhookNotifier implements Notifier {
23
+ readonly name = "webhook";
24
+ private readonly url;
25
+ private readonly headers;
26
+ private readonly timeoutMs;
27
+ private readonly stderrWrite;
28
+ private readonly fetchImpl;
29
+ constructor(opts: WebhookNotifierOptions);
30
+ notify(events: AnomalyEvent[]): Promise<void>;
31
+ private warn;
32
+ }
33
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/notify/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAID;;;;;;;;GAQG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE7B,IAAI,EAAE,sBAAsB;IAQlC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBnD,OAAO,CAAC,IAAI;CAIb"}
@@ -0,0 +1,55 @@
1
+ const DEFAULT_TIMEOUT_MS = 5000;
2
+ /**
3
+ * POSTs the batched anomaly events to a user-provided URL as
4
+ * `{events: AnomalyEvent[]}` JSON. Phase 19.1 generic webhook primitive —
5
+ * bring your own bridge (Slack incoming, Discord webhook, Zapier catch,
6
+ * n8n hook, continuity-runtime ingester, etc.). On any transport failure
7
+ * (network / non-2xx / timeout) the notifier writes one stderr warning and
8
+ * resolves — settle never breaks on transport errors. The URL is sensitive
9
+ * (may carry a token) and is NEVER included in the failure message.
10
+ */
11
+ export class WebhookNotifier {
12
+ name = 'webhook';
13
+ url;
14
+ headers;
15
+ timeoutMs;
16
+ stderrWrite;
17
+ fetchImpl;
18
+ constructor(opts) {
19
+ this.url = opts.url;
20
+ this.headers = opts.headers ?? {};
21
+ this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
22
+ this.stderrWrite = opts.stderrWrite ?? ((c) => process.stderr.write(c));
23
+ this.fetchImpl = opts.fetchImpl ?? fetch;
24
+ }
25
+ async notify(events) {
26
+ if (events.length === 0)
27
+ return;
28
+ const body = JSON.stringify({ events });
29
+ const headers = {
30
+ ...this.headers,
31
+ // Content-Type is fixed — overlaying caller headers ensures application/json wins.
32
+ 'Content-Type': 'application/json',
33
+ };
34
+ try {
35
+ const res = await this.fetchImpl(this.url, {
36
+ method: 'POST',
37
+ headers,
38
+ body,
39
+ signal: AbortSignal.timeout(this.timeoutMs),
40
+ });
41
+ if (!res.ok) {
42
+ this.warn(`HTTP ${res.status} ${res.statusText}`);
43
+ }
44
+ }
45
+ catch (err) {
46
+ const msg = err instanceof Error ? err.message : String(err);
47
+ this.warn(msg);
48
+ }
49
+ }
50
+ warn(message) {
51
+ // Intentionally never log the URL or headers (URL may carry a secret).
52
+ this.stderrWrite(`cadence-notify: webhook transport failed — ${message} (continuing)\n`);
53
+ }
54
+ }
55
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/notify/webhook.ts"],"names":[],"mappings":"AAcA,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAe;IACjB,IAAI,GAAG,SAAS,CAAC;IACT,GAAG,CAAS;IACZ,OAAO,CAAyB;IAChC,SAAS,CAAS;IAClB,WAAW,CAA0B;IACrC,SAAS,CAAe;IAEzC,YAAY,IAA4B;QACtC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAsB;QACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,MAAM,OAAO,GAA2B;YACtC,GAAG,IAAI,CAAC,OAAO;YACf,mFAAmF;YACnF,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;gBACzC,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI;gBACJ,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;aAC5C,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,OAAe;QAC1B,uEAAuE;QACvE,IAAI,CAAC,WAAW,CAAC,8CAA8C,OAAO,iBAAiB,CAAC,CAAC;IAC3F,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import { type Draft } from '@manehorizons/cadence-types';
2
+ export declare function parseDraftMd(raw: string): Draft;
3
+ //# sourceMappingURL=draft-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-parser.d.ts","sourceRoot":"","sources":["../../src/parse/draft-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,KAAK,EAAE,MAAM,6BAA6B,CAAC;AA4EjE,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CA2B/C"}
@@ -0,0 +1,99 @@
1
+ import { DraftZ } from '@manehorizons/cadence-types';
2
+ import { CadenceError } from '../errors.js';
3
+ const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---\n/;
4
+ function parseFrontmatter(raw) {
5
+ const m = FRONTMATTER_RE.exec(raw);
6
+ if (!m)
7
+ throw new CadenceError('DRAFT.md missing frontmatter');
8
+ const out = {};
9
+ for (const line of m[1].split('\n')) {
10
+ const [k, ...rest] = line.split(':');
11
+ if (k && rest.length > 0)
12
+ out[k.trim()] = rest.join(':').trim();
13
+ }
14
+ return out;
15
+ }
16
+ function stripFrontmatter(raw) {
17
+ return raw.replace(FRONTMATTER_RE, '');
18
+ }
19
+ function extractSection(body, heading) {
20
+ const re = new RegExp(`(^|\\n)## ${heading}\\s*\\n([\\s\\S]*?)(?=\\n## |$)`);
21
+ const m = re.exec(body);
22
+ return m ? m[2].trim() : '';
23
+ }
24
+ function parseAcceptanceCriteria(section) {
25
+ const out = [];
26
+ const blocks = section.split(/\n(?=### AC-)/);
27
+ for (const block of blocks) {
28
+ const head = /^### (AC-\d+):\s*(.*)$/m.exec(block);
29
+ if (!head)
30
+ continue;
31
+ const id = head[1];
32
+ const name = head[2]?.trim() ?? '';
33
+ const given = /Given\s+(.+)/.exec(block)?.[1]?.trim() ?? '';
34
+ const when = /When\s+(.+)/.exec(block)?.[1]?.trim() ?? '';
35
+ const then = /Then\s+(.+)/.exec(block)?.[1]?.trim() ?? '';
36
+ out.push({ id, name, given, when, then });
37
+ }
38
+ return out;
39
+ }
40
+ function parseTasks(section) {
41
+ const out = [];
42
+ const blocks = section.split(/\n(?=### )/);
43
+ for (const block of blocks) {
44
+ const head = /^### (T\d+):\s*(.*)$/m.exec(block);
45
+ if (!head)
46
+ continue;
47
+ const id = head[1];
48
+ const name = head[2].trim();
49
+ const filesLine = /-\s*files:\s*(.+)/.exec(block)?.[1] ?? '';
50
+ const files = [...filesLine.matchAll(/`([^`]+)`/g)].map((m) => m[1]);
51
+ const action = /-\s*action:\s*(.+)/.exec(block)?.[1]?.trim() ?? '';
52
+ const verify = /-\s*verify:\s*(.+)/.exec(block)?.[1]?.trim() ?? '';
53
+ const done = /-\s*done:\s*(.+)/.exec(block)?.[1]?.trim() ?? '';
54
+ out.push({ id, name, files, action, verify, done });
55
+ }
56
+ return out;
57
+ }
58
+ function parseBoundaries(section) {
59
+ return section
60
+ .split('\n')
61
+ .map((l) => l.replace(/^-\s*/, '').trim())
62
+ .filter((l) => l.length > 0);
63
+ }
64
+ /** `requiredSkills: a, b` or `["a", , b]` → ['a','b'] (bracket/quote tolerant). */
65
+ function parseSkillList(v) {
66
+ return v
67
+ .replace(/^\[|\]$/g, '')
68
+ .split(',')
69
+ .map((s) => s.replace(/['"]/g, '').trim())
70
+ .filter((s) => s.length > 0);
71
+ }
72
+ export function parseDraftMd(raw) {
73
+ const fm = parseFrontmatter(raw);
74
+ const body = stripFrontmatter(raw);
75
+ const titleMatch = /^#\s+\S+\s+—\s+(.+)$/m.exec(body);
76
+ const title = titleMatch ? titleMatch[1].trim() : (fm.id ?? 'untitled');
77
+ const objective = extractSection(body, 'Objective').split('\n')[0] ?? '';
78
+ const acceptanceCriteria = parseAcceptanceCriteria(extractSection(body, 'Acceptance Criteria'));
79
+ const tasks = parseTasks(extractSection(body, 'Tasks'));
80
+ const boundaries = parseBoundaries(extractSection(body, 'Boundaries'));
81
+ const draft = {
82
+ schemaVersion: 1,
83
+ id: fm.id ?? '',
84
+ phase: fm.phase ?? '',
85
+ tier: fm.tier ?? 'standard',
86
+ title,
87
+ objective,
88
+ acceptanceCriteria,
89
+ tasks,
90
+ boundaries,
91
+ status: fm.status ?? 'PENDING',
92
+ ...(fm.profile !== undefined ? { profile: fm.profile } : {}),
93
+ ...(fm.requiredSkills !== undefined
94
+ ? { requiredSkills: parseSkillList(fm.requiredSkills) }
95
+ : {}),
96
+ };
97
+ return DraftZ.parse(draft);
98
+ }
99
+ //# sourceMappingURL=draft-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-parser.js","sourceRoot":"","sources":["../../src/parse/draft-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Spec } from '@manehorizons/cadence-types';
2
+ /**
3
+ * Phase 38.1 (#1b) — pure DRAFT.md body renderer. The `spec`-absent branch is
4
+ * a VERBATIM lift of the pre-#1b inline scaffold (was `draft.ts`'s
5
+ * `const body = \`…\``) and MUST stay byte-identical (existing `draft new` /
6
+ * `draft check` / draft-parser round-trips depend on the exact bytes — the
7
+ * unit test locks this). With a `spec`, only `## Objective` and the
8
+ * `## Acceptance Criteria` block are seeded; Tasks/Boundaries stay placeholder
9
+ * and the title is always the caller's arg (never the SPEC title).
10
+ */
11
+ export declare function renderDraftBody(phase: string, id: string, tier: string, title: string, spec?: Spec): string;
12
+ /** First-frontmatter-block `status:` value, trimmed; undefined if absent. */
13
+ export declare function frontmatterStatus(raw: string): string | undefined;
14
+ //# sourceMappingURL=draft-scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-scaffold.d.ts","sourceRoot":"","sources":["../../src/parse/draft-scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAExD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,IAAI,GACV,MAAM,CAkBR;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIjE"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Phase 38.1 (#1b) — pure DRAFT.md body renderer. The `spec`-absent branch is
3
+ * a VERBATIM lift of the pre-#1b inline scaffold (was `draft.ts`'s
4
+ * `const body = \`…\``) and MUST stay byte-identical (existing `draft new` /
5
+ * `draft check` / draft-parser round-trips depend on the exact bytes — the
6
+ * unit test locks this). With a `spec`, only `## Objective` and the
7
+ * `## Acceptance Criteria` block are seeded; Tasks/Boundaries stay placeholder
8
+ * and the title is always the caller's arg (never the SPEC title).
9
+ */
10
+ export function renderDraftBody(phase, id, tier, title, spec) {
11
+ const objective = spec ? spec.objective : '_(one sentence)_';
12
+ const acBlock = spec
13
+ ? spec.acceptanceCriteria
14
+ .map((ac) => `### ${ac.id}: ${ac.name}\nGiven ${ac.given}\nWhen ${ac.when}\nThen ${ac.then}`)
15
+ .join('\n\n')
16
+ : '### AC-1: _(name)_\nGiven _(precondition)_\nWhen _(action)_\nThen _(outcome)_';
17
+ return (`---\nphase: ${phase}\nid: ${id}\ntier: ${tier}\nstatus: PENDING\n---\n\n` +
18
+ `# ${id} — ${title}\n\n` +
19
+ `## Objective\n\n${objective}\n\n` +
20
+ `## Acceptance Criteria\n\n${acBlock}\n\n` +
21
+ `## Tasks\n\n### T1: _(task name)_\n- files: \`path/to/file.ts\`\n- action: _(what to do)_\n- verify: _(how to verify)_\n- done: AC-1\n\n` +
22
+ `## Boundaries\n\n- _(DO NOT change …)_\n`);
23
+ }
24
+ /** First-frontmatter-block `status:` value, trimmed; undefined if absent. */
25
+ export function frontmatterStatus(raw) {
26
+ const fm = /^---\n([\s\S]*?)\n---/.exec(raw);
27
+ if (!fm)
28
+ return undefined;
29
+ return /(^|\n)status:\s*(.+)/.exec(fm[1])?.[2]?.trim();
30
+ }
31
+ //# sourceMappingURL=draft-scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-scaffold.js","sourceRoot":"","sources":["../../src/parse/draft-scaffold.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,EAAU,EACV,IAAY,EACZ,KAAa,EACb,IAAW;IAEX,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI;QAClB,CAAC,CAAC,IAAI,CAAC,kBAAkB;aACpB,GAAG,CACF,CAAC,EAAE,EAAE,EAAE,CACL,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,KAAK,UAAU,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,EAAE,CAClF;aACA,IAAI,CAAC,MAAM,CAAC;QACjB,CAAC,CAAC,+EAA+E,CAAC;IACpF,OAAO,CACL,eAAe,KAAK,SAAS,EAAE,WAAW,IAAI,4BAA4B;QAC1E,KAAK,EAAE,MAAM,KAAK,MAAM;QACxB,mBAAmB,SAAS,MAAM;QAClC,6BAA6B,OAAO,MAAM;QAC1C,0IAA0I;QAC1I,0CAA0C,CAC3C,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,EAAE,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1B,OAAO,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Spec } from '@manehorizons/cadence-types';
2
+ export declare function parseSpecMd(raw: string): Spec;
3
+ //# sourceMappingURL=spec-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-parser.d.ts","sourceRoot":"","sources":["../../src/parse/spec-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAqD/D,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAkB7C"}
@@ -0,0 +1,68 @@
1
+ import { SpecZ } from '@manehorizons/cadence-types';
2
+ import { CadenceError } from '../errors.js';
3
+ // Helpers reproduced verbatim from draft-parser.ts (those are module-private
4
+ // there — not exported; copying is the only path, no shared refactor).
5
+ const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---\n/;
6
+ function parseFrontmatter(raw) {
7
+ const m = FRONTMATTER_RE.exec(raw);
8
+ if (!m)
9
+ throw new CadenceError('SPEC.md missing frontmatter');
10
+ const out = {};
11
+ for (const line of m[1].split('\n')) {
12
+ const [k, ...rest] = line.split(':');
13
+ if (k && rest.length > 0)
14
+ out[k.trim()] = rest.join(':').trim();
15
+ }
16
+ return out;
17
+ }
18
+ function stripFrontmatter(raw) {
19
+ return raw.replace(FRONTMATTER_RE, '');
20
+ }
21
+ function extractSection(body, heading) {
22
+ const re = new RegExp(`(^|\\n)## ${heading}\\s*\\n([\\s\\S]*?)(?=\\n## |$)`);
23
+ const m = re.exec(body);
24
+ return m ? m[2].trim() : '';
25
+ }
26
+ function parseAcceptanceCriteria(section) {
27
+ const out = [];
28
+ const blocks = section.split(/\n(?=### AC-)/);
29
+ for (const block of blocks) {
30
+ const head = /^### (AC-\d+):\s*(.*)$/m.exec(block);
31
+ if (!head)
32
+ continue;
33
+ const id = head[1];
34
+ const name = head[2]?.trim() ?? '';
35
+ const given = /Given\s+(.+)/.exec(block)?.[1]?.trim() ?? '';
36
+ const when = /When\s+(.+)/.exec(block)?.[1]?.trim() ?? '';
37
+ const then = /Then\s+(.+)/.exec(block)?.[1]?.trim() ?? '';
38
+ out.push({ id, name, given, when, then });
39
+ }
40
+ return out;
41
+ }
42
+ /** Generic `- ` bullet list (identical to draft-parser's parseBoundaries). */
43
+ function parseBulletList(section) {
44
+ return section
45
+ .split('\n')
46
+ .map((l) => l.replace(/^-\s*/, '').trim())
47
+ .filter((l) => l.length > 0);
48
+ }
49
+ export function parseSpecMd(raw) {
50
+ const fm = parseFrontmatter(raw);
51
+ const body = stripFrontmatter(raw);
52
+ const objective = extractSection(body, 'Objective').split('\n')[0] ?? '';
53
+ const acceptanceCriteria = parseAcceptanceCriteria(extractSection(body, 'Acceptance Criteria'));
54
+ const constraints = parseBulletList(extractSection(body, 'Constraints'));
55
+ const openQuestions = parseBulletList(extractSection(body, 'Open Questions'));
56
+ const spec = {
57
+ schemaVersion: 1,
58
+ id: fm.id ?? '',
59
+ phase: fm.phase ?? '',
60
+ objective,
61
+ acceptanceCriteria,
62
+ constraints,
63
+ openQuestions,
64
+ status: fm.status ?? 'PENDING',
65
+ };
66
+ return SpecZ.parse(spec);
67
+ }
68
+ //# sourceMappingURL=spec-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-parser.js","sourceRoot":"","sources":["../../src/parse/spec-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Summary } from '@manehorizons/cadence-types';
2
+ export declare function renderSummaryMd(s: Summary): string;
3
+ //# sourceMappingURL=summary-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-writer.d.ts","sourceRoot":"","sources":["../../src/parse/summary-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAoClD"}
@@ -0,0 +1,41 @@
1
+ export function renderSummaryMd(s) {
2
+ const lines = [
3
+ `# SETTLE Summary — ${s.draftId}`,
4
+ '',
5
+ `**Completed:** ${s.completedAt}`,
6
+ '',
7
+ '## Acceptance Criteria',
8
+ '',
9
+ ];
10
+ for (const ac of s.acResults) {
11
+ const badge = ac.pass ? 'PASS' : 'FAIL';
12
+ lines.push(`- ${ac.id}: ${badge}${ac.note ? ` — ${ac.note}` : ''}`);
13
+ }
14
+ lines.push('', '## Tasks', '');
15
+ for (const t of s.taskResults) {
16
+ lines.push(`- ${t.id}: ${t.status}${t.notes ? ` — ${t.notes}` : ''}`);
17
+ }
18
+ lines.push('', '## Decisions', '');
19
+ if (s.decisions.length === 0)
20
+ lines.push('_(none)_');
21
+ for (const d of s.decisions) {
22
+ lines.push(`- ${d.id} (${d.phase}): ${d.title}`);
23
+ }
24
+ lines.push('', '## Deferred', '');
25
+ if (s.deferred.length === 0)
26
+ lines.push('_(none)_');
27
+ for (const d of s.deferred) {
28
+ lines.push(`- ${d.id} (from ${d.from}): ${d.title}`);
29
+ }
30
+ lines.push('', '## Skill audit', '');
31
+ const required = new Set(s.skillAudit.required);
32
+ const invoked = new Set(s.skillAudit.invoked);
33
+ for (const r of required) {
34
+ lines.push(`- ${r}: ${invoked.has(r) ? 'invoked' : 'NOT INVOKED'}`);
35
+ }
36
+ if (required.size === 0)
37
+ lines.push('_(none)_');
38
+ lines.push('');
39
+ return lines.join('\n');
40
+ }
41
+ //# sourceMappingURL=summary-writer.js.map