@sdd-method/sdd-cli 0.9.0

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 (373) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +17 -0
  3. package/README.md +151 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +8 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +66 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/lib/bundle.d.ts +20 -0
  13. package/dist/lib/bundle.d.ts.map +1 -0
  14. package/dist/lib/bundle.js +75 -0
  15. package/dist/lib/bundle.js.map +1 -0
  16. package/dist/lib/generate-claude-md/index.d.ts +16 -0
  17. package/dist/lib/generate-claude-md/index.d.ts.map +1 -0
  18. package/dist/lib/generate-claude-md/index.js +89 -0
  19. package/dist/lib/generate-claude-md/index.js.map +1 -0
  20. package/dist/lib/hooks-seed/entries.d.ts +16 -0
  21. package/dist/lib/hooks-seed/entries.d.ts.map +1 -0
  22. package/dist/lib/hooks-seed/entries.js +47 -0
  23. package/dist/lib/hooks-seed/entries.js.map +1 -0
  24. package/dist/lib/hooks-seed/index.d.ts +17 -0
  25. package/dist/lib/hooks-seed/index.d.ts.map +1 -0
  26. package/dist/lib/hooks-seed/index.js +15 -0
  27. package/dist/lib/hooks-seed/index.js.map +1 -0
  28. package/dist/lib/hooks-seed/merge.d.ts +24 -0
  29. package/dist/lib/hooks-seed/merge.d.ts.map +1 -0
  30. package/dist/lib/hooks-seed/merge.js +73 -0
  31. package/dist/lib/hooks-seed/merge.js.map +1 -0
  32. package/dist/lib/hooks-seed/types.d.ts +27 -0
  33. package/dist/lib/hooks-seed/types.d.ts.map +1 -0
  34. package/dist/lib/hooks-seed/types.js +20 -0
  35. package/dist/lib/hooks-seed/types.js.map +1 -0
  36. package/dist/lib/init/app.d.ts +21 -0
  37. package/dist/lib/init/app.d.ts.map +1 -0
  38. package/dist/lib/init/app.js +132 -0
  39. package/dist/lib/init/app.js.map +1 -0
  40. package/dist/lib/init/ci-workflow.d.ts +29 -0
  41. package/dist/lib/init/ci-workflow.d.ts.map +1 -0
  42. package/dist/lib/init/ci-workflow.js +78 -0
  43. package/dist/lib/init/ci-workflow.js.map +1 -0
  44. package/dist/lib/init/claude-md.d.ts +19 -0
  45. package/dist/lib/init/claude-md.d.ts.map +1 -0
  46. package/dist/lib/init/claude-md.js +140 -0
  47. package/dist/lib/init/claude-md.js.map +1 -0
  48. package/dist/lib/init/index.d.ts +33 -0
  49. package/dist/lib/init/index.d.ts.map +1 -0
  50. package/dist/lib/init/index.js +232 -0
  51. package/dist/lib/init/index.js.map +1 -0
  52. package/dist/lib/init/integration.d.ts +53 -0
  53. package/dist/lib/init/integration.d.ts.map +1 -0
  54. package/dist/lib/init/integration.js +237 -0
  55. package/dist/lib/init/integration.js.map +1 -0
  56. package/dist/lib/init/platform.d.ts +26 -0
  57. package/dist/lib/init/platform.d.ts.map +1 -0
  58. package/dist/lib/init/platform.js +188 -0
  59. package/dist/lib/init/platform.js.map +1 -0
  60. package/dist/lib/list/discover.d.ts +8 -0
  61. package/dist/lib/list/discover.d.ts.map +1 -0
  62. package/dist/lib/list/discover.js +77 -0
  63. package/dist/lib/list/discover.js.map +1 -0
  64. package/dist/lib/list/format.d.ts +9 -0
  65. package/dist/lib/list/format.d.ts.map +1 -0
  66. package/dist/lib/list/format.js +44 -0
  67. package/dist/lib/list/format.js.map +1 -0
  68. package/dist/lib/list/index.d.ts +12 -0
  69. package/dist/lib/list/index.d.ts.map +1 -0
  70. package/dist/lib/list/index.js +15 -0
  71. package/dist/lib/list/index.js.map +1 -0
  72. package/dist/lib/lock-file.d.ts +14 -0
  73. package/dist/lib/lock-file.d.ts.map +1 -0
  74. package/dist/lib/lock-file.js +80 -0
  75. package/dist/lib/lock-file.js.map +1 -0
  76. package/dist/lib/mcp/build-info.d.ts +9 -0
  77. package/dist/lib/mcp/build-info.d.ts.map +1 -0
  78. package/dist/lib/mcp/build-info.js +10 -0
  79. package/dist/lib/mcp/build-info.js.map +1 -0
  80. package/dist/lib/mcp/errors.d.ts +23 -0
  81. package/dist/lib/mcp/errors.d.ts.map +1 -0
  82. package/dist/lib/mcp/errors.js +25 -0
  83. package/dist/lib/mcp/errors.js.map +1 -0
  84. package/dist/lib/mcp/parse/frontmatter.d.ts +22 -0
  85. package/dist/lib/mcp/parse/frontmatter.d.ts.map +1 -0
  86. package/dist/lib/mcp/parse/frontmatter.js +49 -0
  87. package/dist/lib/mcp/parse/frontmatter.js.map +1 -0
  88. package/dist/lib/mcp/parse/gate-registry.d.ts +19 -0
  89. package/dist/lib/mcp/parse/gate-registry.d.ts.map +1 -0
  90. package/dist/lib/mcp/parse/gate-registry.js +68 -0
  91. package/dist/lib/mcp/parse/gate-registry.js.map +1 -0
  92. package/dist/lib/mcp/parse/paths.d.ts +21 -0
  93. package/dist/lib/mcp/parse/paths.d.ts.map +1 -0
  94. package/dist/lib/mcp/parse/paths.js +83 -0
  95. package/dist/lib/mcp/parse/paths.js.map +1 -0
  96. package/dist/lib/mcp/pin/errors.d.ts +11 -0
  97. package/dist/lib/mcp/pin/errors.d.ts.map +1 -0
  98. package/dist/lib/mcp/pin/errors.js +32 -0
  99. package/dist/lib/mcp/pin/errors.js.map +1 -0
  100. package/dist/lib/mcp/pin/index.d.ts +18 -0
  101. package/dist/lib/mcp/pin/index.d.ts.map +1 -0
  102. package/dist/lib/mcp/pin/index.js +29 -0
  103. package/dist/lib/mcp/pin/index.js.map +1 -0
  104. package/dist/lib/mcp/pin/read.d.ts +24 -0
  105. package/dist/lib/mcp/pin/read.d.ts.map +1 -0
  106. package/dist/lib/mcp/pin/read.js +64 -0
  107. package/dist/lib/mcp/pin/read.js.map +1 -0
  108. package/dist/lib/mcp/pin/resolve.d.ts +12 -0
  109. package/dist/lib/mcp/pin/resolve.d.ts.map +1 -0
  110. package/dist/lib/mcp/pin/resolve.js +33 -0
  111. package/dist/lib/mcp/pin/resolve.js.map +1 -0
  112. package/dist/lib/mcp/prompts/evaluate-cascade.d.ts +14 -0
  113. package/dist/lib/mcp/prompts/evaluate-cascade.d.ts.map +1 -0
  114. package/dist/lib/mcp/prompts/evaluate-cascade.js +147 -0
  115. package/dist/lib/mcp/prompts/evaluate-cascade.js.map +1 -0
  116. package/dist/lib/mcp/prompts/index.d.ts +9 -0
  117. package/dist/lib/mcp/prompts/index.d.ts.map +1 -0
  118. package/dist/lib/mcp/prompts/index.js +23 -0
  119. package/dist/lib/mcp/prompts/index.js.map +1 -0
  120. package/dist/lib/mcp/prompts/propose-adr.d.ts +12 -0
  121. package/dist/lib/mcp/prompts/propose-adr.d.ts.map +1 -0
  122. package/dist/lib/mcp/prompts/propose-adr.js +94 -0
  123. package/dist/lib/mcp/prompts/propose-adr.js.map +1 -0
  124. package/dist/lib/mcp/prompts/review-data-model-change.d.ts +10 -0
  125. package/dist/lib/mcp/prompts/review-data-model-change.d.ts.map +1 -0
  126. package/dist/lib/mcp/prompts/review-data-model-change.js +134 -0
  127. package/dist/lib/mcp/prompts/review-data-model-change.js.map +1 -0
  128. package/dist/lib/mcp/prompts/template-loader.d.ts +29 -0
  129. package/dist/lib/mcp/prompts/template-loader.d.ts.map +1 -0
  130. package/dist/lib/mcp/prompts/template-loader.js +44 -0
  131. package/dist/lib/mcp/prompts/template-loader.js.map +1 -0
  132. package/dist/lib/mcp/prompts/types.d.ts +17 -0
  133. package/dist/lib/mcp/prompts/types.d.ts.map +1 -0
  134. package/dist/lib/mcp/prompts/types.js +10 -0
  135. package/dist/lib/mcp/prompts/types.js.map +1 -0
  136. package/dist/lib/mcp/prompts/write-capability-spec.d.ts +8 -0
  137. package/dist/lib/mcp/prompts/write-capability-spec.d.ts.map +1 -0
  138. package/dist/lib/mcp/prompts/write-capability-spec.js +85 -0
  139. package/dist/lib/mcp/prompts/write-capability-spec.js.map +1 -0
  140. package/dist/lib/mcp/prompts/write-feature-spec.d.ts +10 -0
  141. package/dist/lib/mcp/prompts/write-feature-spec.d.ts.map +1 -0
  142. package/dist/lib/mcp/prompts/write-feature-spec.js +94 -0
  143. package/dist/lib/mcp/prompts/write-feature-spec.js.map +1 -0
  144. package/dist/lib/mcp/prompts/write-work-order.d.ts +7 -0
  145. package/dist/lib/mcp/prompts/write-work-order.d.ts.map +1 -0
  146. package/dist/lib/mcp/prompts/write-work-order.js +69 -0
  147. package/dist/lib/mcp/prompts/write-work-order.js.map +1 -0
  148. package/dist/lib/mcp/reader.d.ts +37 -0
  149. package/dist/lib/mcp/reader.d.ts.map +1 -0
  150. package/dist/lib/mcp/reader.js +93 -0
  151. package/dist/lib/mcp/reader.js.map +1 -0
  152. package/dist/lib/mcp/resources/adrs.d.ts +3 -0
  153. package/dist/lib/mcp/resources/adrs.d.ts.map +1 -0
  154. package/dist/lib/mcp/resources/adrs.js +97 -0
  155. package/dist/lib/mcp/resources/adrs.js.map +1 -0
  156. package/dist/lib/mcp/resources/data-models.d.ts +14 -0
  157. package/dist/lib/mcp/resources/data-models.d.ts.map +1 -0
  158. package/dist/lib/mcp/resources/data-models.js +81 -0
  159. package/dist/lib/mcp/resources/data-models.js.map +1 -0
  160. package/dist/lib/mcp/resources/gates.d.ts +9 -0
  161. package/dist/lib/mcp/resources/gates.d.ts.map +1 -0
  162. package/dist/lib/mcp/resources/gates.js +90 -0
  163. package/dist/lib/mcp/resources/gates.js.map +1 -0
  164. package/dist/lib/mcp/resources/glossary.d.ts +16 -0
  165. package/dist/lib/mcp/resources/glossary.d.ts.map +1 -0
  166. package/dist/lib/mcp/resources/glossary.js +87 -0
  167. package/dist/lib/mcp/resources/glossary.js.map +1 -0
  168. package/dist/lib/mcp/resources/specs.d.ts +23 -0
  169. package/dist/lib/mcp/resources/specs.d.ts.map +1 -0
  170. package/dist/lib/mcp/resources/specs.js +151 -0
  171. package/dist/lib/mcp/resources/specs.js.map +1 -0
  172. package/dist/lib/mcp/resources/version.d.ts +3 -0
  173. package/dist/lib/mcp/resources/version.d.ts.map +1 -0
  174. package/dist/lib/mcp/resources/version.js +45 -0
  175. package/dist/lib/mcp/resources/version.js.map +1 -0
  176. package/dist/lib/mcp/server.d.ts +29 -0
  177. package/dist/lib/mcp/server.d.ts.map +1 -0
  178. package/dist/lib/mcp/server.js +104 -0
  179. package/dist/lib/mcp/server.js.map +1 -0
  180. package/dist/lib/mcp/tools/cascade-impact.d.ts +22 -0
  181. package/dist/lib/mcp/tools/cascade-impact.d.ts.map +1 -0
  182. package/dist/lib/mcp/tools/cascade-impact.js +53 -0
  183. package/dist/lib/mcp/tools/cascade-impact.js.map +1 -0
  184. package/dist/lib/mcp/tools/find-consumers-of-contract.d.ts +7 -0
  185. package/dist/lib/mcp/tools/find-consumers-of-contract.d.ts.map +1 -0
  186. package/dist/lib/mcp/tools/find-consumers-of-contract.js +70 -0
  187. package/dist/lib/mcp/tools/find-consumers-of-contract.js.map +1 -0
  188. package/dist/lib/mcp/tools/find-consumers.d.ts +7 -0
  189. package/dist/lib/mcp/tools/find-consumers.d.ts.map +1 -0
  190. package/dist/lib/mcp/tools/find-consumers.js +52 -0
  191. package/dist/lib/mcp/tools/find-consumers.js.map +1 -0
  192. package/dist/lib/mcp/tools/find-dependencies.d.ts +8 -0
  193. package/dist/lib/mcp/tools/find-dependencies.d.ts.map +1 -0
  194. package/dist/lib/mcp/tools/find-dependencies.js +89 -0
  195. package/dist/lib/mcp/tools/find-dependencies.js.map +1 -0
  196. package/dist/lib/mcp/tools/find-dependents.d.ts +8 -0
  197. package/dist/lib/mcp/tools/find-dependents.d.ts.map +1 -0
  198. package/dist/lib/mcp/tools/find-dependents.js +89 -0
  199. package/dist/lib/mcp/tools/find-dependents.js.map +1 -0
  200. package/dist/lib/mcp/tools/find-producers.d.ts +8 -0
  201. package/dist/lib/mcp/tools/find-producers.d.ts.map +1 -0
  202. package/dist/lib/mcp/tools/find-producers.js +57 -0
  203. package/dist/lib/mcp/tools/find-producers.js.map +1 -0
  204. package/dist/lib/mcp/tools/find-related-specs.d.ts +9 -0
  205. package/dist/lib/mcp/tools/find-related-specs.d.ts.map +1 -0
  206. package/dist/lib/mcp/tools/find-related-specs.js +92 -0
  207. package/dist/lib/mcp/tools/find-related-specs.js.map +1 -0
  208. package/dist/lib/mcp/tools/list-adrs.d.ts +3 -0
  209. package/dist/lib/mcp/tools/list-adrs.d.ts.map +1 -0
  210. package/dist/lib/mcp/tools/list-adrs.js +73 -0
  211. package/dist/lib/mcp/tools/list-adrs.js.map +1 -0
  212. package/dist/lib/mcp/tools/query-gate-status.d.ts +3 -0
  213. package/dist/lib/mcp/tools/query-gate-status.d.ts.map +1 -0
  214. package/dist/lib/mcp/tools/query-gate-status.js +82 -0
  215. package/dist/lib/mcp/tools/query-gate-status.js.map +1 -0
  216. package/dist/lib/mcp/tools/search-specs.d.ts +12 -0
  217. package/dist/lib/mcp/tools/search-specs.d.ts.map +1 -0
  218. package/dist/lib/mcp/tools/search-specs.js +151 -0
  219. package/dist/lib/mcp/tools/search-specs.js.map +1 -0
  220. package/dist/lib/mcp/workspace.d.ts +25 -0
  221. package/dist/lib/mcp/workspace.d.ts.map +1 -0
  222. package/dist/lib/mcp/workspace.js +129 -0
  223. package/dist/lib/mcp/workspace.js.map +1 -0
  224. package/dist/lib/mcp-seed/entries.d.ts +19 -0
  225. package/dist/lib/mcp-seed/entries.d.ts.map +1 -0
  226. package/dist/lib/mcp-seed/entries.js +14 -0
  227. package/dist/lib/mcp-seed/entries.js.map +1 -0
  228. package/dist/lib/mcp-seed/index.d.ts +36 -0
  229. package/dist/lib/mcp-seed/index.d.ts.map +1 -0
  230. package/dist/lib/mcp-seed/index.js +28 -0
  231. package/dist/lib/mcp-seed/index.js.map +1 -0
  232. package/dist/lib/mcp-seed/merge.d.ts +34 -0
  233. package/dist/lib/mcp-seed/merge.d.ts.map +1 -0
  234. package/dist/lib/mcp-seed/merge.js +99 -0
  235. package/dist/lib/mcp-seed/merge.js.map +1 -0
  236. package/dist/lib/mcp-seed/types.d.ts +24 -0
  237. package/dist/lib/mcp-seed/types.d.ts.map +1 -0
  238. package/dist/lib/mcp-seed/types.js +13 -0
  239. package/dist/lib/mcp-seed/types.js.map +1 -0
  240. package/dist/lib/plan/index.d.ts +19 -0
  241. package/dist/lib/plan/index.d.ts.map +1 -0
  242. package/dist/lib/plan/index.js +69 -0
  243. package/dist/lib/plan/index.js.map +1 -0
  244. package/dist/lib/plan/read-sdd.d.ts +46 -0
  245. package/dist/lib/plan/read-sdd.d.ts.map +1 -0
  246. package/dist/lib/plan/read-sdd.js +102 -0
  247. package/dist/lib/plan/read-sdd.js.map +1 -0
  248. package/dist/lib/plan/render-template.d.ts +8 -0
  249. package/dist/lib/plan/render-template.d.ts.map +1 -0
  250. package/dist/lib/plan/render-template.js +60 -0
  251. package/dist/lib/plan/render-template.js.map +1 -0
  252. package/dist/lib/repo-kind.d.ts +20 -0
  253. package/dist/lib/repo-kind.d.ts.map +1 -0
  254. package/dist/lib/repo-kind.js +73 -0
  255. package/dist/lib/repo-kind.js.map +1 -0
  256. package/dist/lib/scripts.d.ts +2 -0
  257. package/dist/lib/scripts.d.ts.map +1 -0
  258. package/dist/lib/scripts.js +7 -0
  259. package/dist/lib/scripts.js.map +1 -0
  260. package/dist/lib/sdd-index/cascade.d.ts +46 -0
  261. package/dist/lib/sdd-index/cascade.d.ts.map +1 -0
  262. package/dist/lib/sdd-index/cascade.js +91 -0
  263. package/dist/lib/sdd-index/cascade.js.map +1 -0
  264. package/dist/lib/sdd-index/contracts.d.ts +29 -0
  265. package/dist/lib/sdd-index/contracts.d.ts.map +1 -0
  266. package/dist/lib/sdd-index/contracts.js +216 -0
  267. package/dist/lib/sdd-index/contracts.js.map +1 -0
  268. package/dist/lib/sdd-index/data-model.d.ts +13 -0
  269. package/dist/lib/sdd-index/data-model.d.ts.map +1 -0
  270. package/dist/lib/sdd-index/data-model.js +23 -0
  271. package/dist/lib/sdd-index/data-model.js.map +1 -0
  272. package/dist/lib/sdd-index/execution-map.d.ts +34 -0
  273. package/dist/lib/sdd-index/execution-map.d.ts.map +1 -0
  274. package/dist/lib/sdd-index/execution-map.js +105 -0
  275. package/dist/lib/sdd-index/execution-map.js.map +1 -0
  276. package/dist/lib/sdd-index/graph.d.ts +28 -0
  277. package/dist/lib/sdd-index/graph.d.ts.map +1 -0
  278. package/dist/lib/sdd-index/graph.js +122 -0
  279. package/dist/lib/sdd-index/graph.js.map +1 -0
  280. package/dist/lib/sdd-index/index.d.ts +29 -0
  281. package/dist/lib/sdd-index/index.d.ts.map +1 -0
  282. package/dist/lib/sdd-index/index.js +79 -0
  283. package/dist/lib/sdd-index/index.js.map +1 -0
  284. package/dist/lib/sdd-index/repo-config.d.ts +23 -0
  285. package/dist/lib/sdd-index/repo-config.d.ts.map +1 -0
  286. package/dist/lib/sdd-index/repo-config.js +150 -0
  287. package/dist/lib/sdd-index/repo-config.js.map +1 -0
  288. package/dist/lib/sdd-index/types.d.ts +106 -0
  289. package/dist/lib/sdd-index/types.d.ts.map +1 -0
  290. package/dist/lib/sdd-index/types.js +13 -0
  291. package/dist/lib/sdd-index/types.js.map +1 -0
  292. package/dist/lib/sdd-index/watch.d.ts +24 -0
  293. package/dist/lib/sdd-index/watch.d.ts.map +1 -0
  294. package/dist/lib/sdd-index/watch.js +112 -0
  295. package/dist/lib/sdd-index/watch.js.map +1 -0
  296. package/dist/lib/spawn.d.ts +8 -0
  297. package/dist/lib/spawn.d.ts.map +1 -0
  298. package/dist/lib/spawn.js +16 -0
  299. package/dist/lib/spawn.js.map +1 -0
  300. package/dist/lib/sync/apply.d.ts +3 -0
  301. package/dist/lib/sync/apply.d.ts.map +1 -0
  302. package/dist/lib/sync/apply.js +16 -0
  303. package/dist/lib/sync/apply.js.map +1 -0
  304. package/dist/lib/sync/diff.d.ts +8 -0
  305. package/dist/lib/sync/diff.d.ts.map +1 -0
  306. package/dist/lib/sync/diff.js +48 -0
  307. package/dist/lib/sync/diff.js.map +1 -0
  308. package/dist/lib/sync/index.d.ts +17 -0
  309. package/dist/lib/sync/index.d.ts.map +1 -0
  310. package/dist/lib/sync/index.js +184 -0
  311. package/dist/lib/sync/index.js.map +1 -0
  312. package/dist/lib/sync/settings-merge.d.ts +45 -0
  313. package/dist/lib/sync/settings-merge.d.ts.map +1 -0
  314. package/dist/lib/sync/settings-merge.js +109 -0
  315. package/dist/lib/sync/settings-merge.js.map +1 -0
  316. package/dist/lib/sync/source-tag.d.ts +5 -0
  317. package/dist/lib/sync/source-tag.d.ts.map +1 -0
  318. package/dist/lib/sync/source-tag.js +34 -0
  319. package/dist/lib/sync/source-tag.js.map +1 -0
  320. package/dist/lib/sync/yaml-block-merge.d.ts +50 -0
  321. package/dist/lib/sync/yaml-block-merge.d.ts.map +1 -0
  322. package/dist/lib/sync/yaml-block-merge.js +113 -0
  323. package/dist/lib/sync/yaml-block-merge.js.map +1 -0
  324. package/dist/lib/validate/aggregate.d.ts +13 -0
  325. package/dist/lib/validate/aggregate.d.ts.map +1 -0
  326. package/dist/lib/validate/aggregate.js +35 -0
  327. package/dist/lib/validate/aggregate.js.map +1 -0
  328. package/dist/lib/validate/dispatch.d.ts +34 -0
  329. package/dist/lib/validate/dispatch.d.ts.map +1 -0
  330. package/dist/lib/validate/dispatch.js +167 -0
  331. package/dist/lib/validate/dispatch.js.map +1 -0
  332. package/dist/lib/validate/index.d.ts +13 -0
  333. package/dist/lib/validate/index.d.ts.map +1 -0
  334. package/dist/lib/validate/index.js +69 -0
  335. package/dist/lib/validate/index.js.map +1 -0
  336. package/dist/lib/validate/runner.d.ts +16 -0
  337. package/dist/lib/validate/runner.d.ts.map +1 -0
  338. package/dist/lib/validate/runner.js +66 -0
  339. package/dist/lib/validate/runner.js.map +1 -0
  340. package/dist/verbs/generate-claude-md.d.ts +3 -0
  341. package/dist/verbs/generate-claude-md.d.ts.map +1 -0
  342. package/dist/verbs/generate-claude-md.js +36 -0
  343. package/dist/verbs/generate-claude-md.js.map +1 -0
  344. package/dist/verbs/init.d.ts +3 -0
  345. package/dist/verbs/init.d.ts.map +1 -0
  346. package/dist/verbs/init.js +90 -0
  347. package/dist/verbs/init.js.map +1 -0
  348. package/dist/verbs/list.d.ts +3 -0
  349. package/dist/verbs/list.d.ts.map +1 -0
  350. package/dist/verbs/list.js +43 -0
  351. package/dist/verbs/list.js.map +1 -0
  352. package/dist/verbs/mcp.d.ts +3 -0
  353. package/dist/verbs/mcp.d.ts.map +1 -0
  354. package/dist/verbs/mcp.js +22 -0
  355. package/dist/verbs/mcp.js.map +1 -0
  356. package/dist/verbs/plan.d.ts +3 -0
  357. package/dist/verbs/plan.d.ts.map +1 -0
  358. package/dist/verbs/plan.js +41 -0
  359. package/dist/verbs/plan.js.map +1 -0
  360. package/dist/verbs/sync.d.ts +3 -0
  361. package/dist/verbs/sync.d.ts.map +1 -0
  362. package/dist/verbs/sync.js +27 -0
  363. package/dist/verbs/sync.js.map +1 -0
  364. package/dist/verbs/validate.d.ts +3 -0
  365. package/dist/verbs/validate.d.ts.map +1 -0
  366. package/dist/verbs/validate.js +21 -0
  367. package/dist/verbs/validate.js.map +1 -0
  368. package/package.json +61 -0
  369. package/scripts/README.md +48 -0
  370. package/scripts/sync-method-baseline.sh +258 -0
  371. package/scripts/validate-app-dependencies.sh +289 -0
  372. package/scripts/validate-app-docs.sh +185 -0
  373. package/scripts/validate-integration-docs.sh +222 -0
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Pinned-SDD materialisation via `git worktree add --detach`.
3
+ *
4
+ * The pinned reader is just a liveReader pointed at a temporary
5
+ * worktree checked out at the resolved SHA. This lets every existing
6
+ * filesystem helper keep working unchanged, and it's mandatory for
7
+ * WS5's cascade_impact which shells out to a bash script that expects
8
+ * a real working tree.
9
+ *
10
+ * Cost: one `git worktree add` per (SDD, SHA) pair per server
11
+ * lifetime. Cached; cleaned up when releasePinnedWorktrees() is called
12
+ * on shutdown.
13
+ */
14
+ /**
15
+ * Ensure a worktree exists for (sddRoot, sha) and return its absolute
16
+ * path. Reuses an existing cached worktree if present.
17
+ */
18
+ export declare function materialisePinnedWorktree(sddRoot: string, sha: string): string;
19
+ /**
20
+ * Remove every cached worktree. Called on server shutdown; safe to
21
+ * call multiple times.
22
+ */
23
+ export declare function releasePinnedWorktrees(): void;
24
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/pin/read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAcH;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,MAAM,CA0BR;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAkB7C"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Pinned-SDD materialisation via `git worktree add --detach`.
3
+ *
4
+ * The pinned reader is just a liveReader pointed at a temporary
5
+ * worktree checked out at the resolved SHA. This lets every existing
6
+ * filesystem helper keep working unchanged, and it's mandatory for
7
+ * WS5's cascade_impact which shells out to a bash script that expects
8
+ * a real working tree.
9
+ *
10
+ * Cost: one `git worktree add` per (SDD, SHA) pair per server
11
+ * lifetime. Cached; cleaned up when releasePinnedWorktrees() is called
12
+ * on shutdown.
13
+ */
14
+ import { spawnSync } from "node:child_process";
15
+ import { mkdtempSync, rmSync } from "node:fs";
16
+ import { tmpdir } from "node:os";
17
+ import { join } from "node:path";
18
+ const cache = new Map();
19
+ /**
20
+ * Ensure a worktree exists for (sddRoot, sha) and return its absolute
21
+ * path. Reuses an existing cached worktree if present.
22
+ */
23
+ export function materialisePinnedWorktree(sddRoot, sha) {
24
+ const key = `${sddRoot}|${sha}`;
25
+ const cached = cache.get(key);
26
+ if (cached)
27
+ return cached.path;
28
+ const wtRoot = mkdtempSync(join(tmpdir(), "sdd-mcp-pin-"));
29
+ const wtPath = join(wtRoot, "sdd");
30
+ const r = spawnSync("git", ["-C", sddRoot, "worktree", "add", "--detach", "--quiet", wtPath, sha], { encoding: "utf8" });
31
+ if (r.status !== 0) {
32
+ try {
33
+ rmSync(wtRoot, { recursive: true, force: true });
34
+ }
35
+ catch {
36
+ /* best-effort */
37
+ }
38
+ throw new Error(`git worktree add failed for ${sha} in ${sddRoot}: ${r.stderr.trim()}`);
39
+ }
40
+ cache.set(key, { path: wtPath, sddRoot });
41
+ return wtPath;
42
+ }
43
+ /**
44
+ * Remove every cached worktree. Called on server shutdown; safe to
45
+ * call multiple times.
46
+ */
47
+ export function releasePinnedWorktrees() {
48
+ for (const [key, wt] of cache) {
49
+ try {
50
+ spawnSync("git", ["-C", wt.sddRoot, "worktree", "remove", "--force", wt.path], { encoding: "utf8" });
51
+ }
52
+ catch {
53
+ /* best-effort */
54
+ }
55
+ try {
56
+ rmSync(wt.path, { recursive: true, force: true });
57
+ }
58
+ catch {
59
+ /* best-effort */
60
+ }
61
+ cache.delete(key);
62
+ }
63
+ }
64
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../../src/lib/mcp/pin/read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,OAAe,EACf,GAAW;IAEX,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAE/B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEnC,MAAM,CAAC,GAAG,SAAS,CACjB,KAAK,EACL,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EACtE,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;IACF,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,+BAA+B,GAAG,OAAO,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CACvE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,SAAS,CACP,KAAK,EACL,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAC5D,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Resolve a user-supplied pin_to_commit argument to a validated SHA,
3
+ * confirming the SDD marker file (.sdd-repo-kind) exists at that
4
+ * tree. Surfaces the structured errors from ./errors.ts rather than
5
+ * leaking raw git output.
6
+ */
7
+ export interface ResolvedPin {
8
+ /** Full 40-char SHA the caller should echo in responses. */
9
+ readonly sha: string;
10
+ }
11
+ export declare function resolvePin(sddRoot: string, raw: string): ResolvedPin;
12
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/pin/resolve.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CA6BpE"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Resolve a user-supplied pin_to_commit argument to a validated SHA,
3
+ * confirming the SDD marker file (.sdd-repo-kind) exists at that
4
+ * tree. Surfaces the structured errors from ./errors.ts rather than
5
+ * leaking raw git output.
6
+ */
7
+ import { spawnSync } from "node:child_process";
8
+ import { pinNotFound, pinPreMarker, shallowCloneInsufficient, } from "./errors.js";
9
+ export function resolvePin(sddRoot, raw) {
10
+ const ref = raw.trim();
11
+ if (ref.length === 0) {
12
+ throw pinNotFound(raw, sddRoot);
13
+ }
14
+ const resolved = spawnSync("git", ["-C", sddRoot, "rev-parse", "--verify", `${ref}^{commit}`], { encoding: "utf8" });
15
+ if (resolved.status !== 0) {
16
+ if (isShallow(sddRoot)) {
17
+ throw shallowCloneInsufficient(ref, sddRoot);
18
+ }
19
+ throw pinNotFound(ref, sddRoot);
20
+ }
21
+ const sha = resolved.stdout.trim();
22
+ // Ensure the marker file exists at this tree.
23
+ const markerCheck = spawnSync("git", ["-C", sddRoot, "cat-file", "-e", `${sha}:.sdd-repo-kind`], { encoding: "utf8" });
24
+ if (markerCheck.status !== 0) {
25
+ throw pinPreMarker(sha, sddRoot);
26
+ }
27
+ return { sha };
28
+ }
29
+ function isShallow(sddRoot) {
30
+ const r = spawnSync("git", ["-C", sddRoot, "rev-parse", "--is-shallow-repository"], { encoding: "utf8" });
31
+ return r.status === 0 && r.stdout.trim() === "true";
32
+ }
33
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../src/lib/mcp/pin/resolve.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,WAAW,EACX,YAAY,EACZ,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAOrB,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,GAAW;IACrD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CACxB,KAAK,EACL,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,GAAG,WAAW,CAAC,EAC3D,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,MAAM,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAEnC,8CAA8C;IAC9C,MAAM,WAAW,GAAG,SAAS,CAC3B,KAAK,EACL,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,GAAG,iBAAiB,CAAC,EAC1D,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;IACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,MAAM,CAAC,GAAG,SAAS,CACjB,KAAK,EACL,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,yBAAyB,CAAC,EACvD,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;IACF,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;AACtD,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * evaluate_cascade — walk the agent through the cascade-update
3
+ * checklist for a proposed change. Shares its argument shape with the
4
+ * `cascade_impact` tool (via the exported zod schema) and calls the
5
+ * same underlying library function.
6
+ *
7
+ * Errors from the validator are embedded in the returned message
8
+ * (open-question resolution (b)) rather than thrown — the agent can
9
+ * surface the error with context instead of receiving an opaque
10
+ * transport-level failure.
11
+ */
12
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
13
+ export declare function register(server: McpServer, sddRoot: string): void;
14
+ //# sourceMappingURL=evaluate-cascade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate-cascade.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/prompts/evaluate-cascade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA+DjE"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * evaluate_cascade — walk the agent through the cascade-update
3
+ * checklist for a proposed change. Shares its argument shape with the
4
+ * `cascade_impact` tool (via the exported zod schema) and calls the
5
+ * same underlying library function.
6
+ *
7
+ * Errors from the validator are embedded in the returned message
8
+ * (open-question resolution (b)) rather than thrown — the agent can
9
+ * surface the error with context instead of receiving an opaque
10
+ * transport-level failure.
11
+ */
12
+ import { z } from "zod";
13
+ import { CascadeImpactError, runCascadeImpact, } from "../../sdd-index/cascade.js";
14
+ import { readerFor } from "../pin/index.js";
15
+ export function register(server, sddRoot) {
16
+ server.registerPrompt("evaluate_cascade", {
17
+ title: "Evaluate cascade for a proposed change",
18
+ description: "Dry-run the cascade-update checklist (docs/method/methods/cascade-update-checklist.md) for a proposed change. Reports affected services, capabilities, entities, and contracts, plus any missing cascade destinations. Read-only.",
19
+ argsSchema: {
20
+ change_type: z
21
+ .enum(["service", "capability", "entity"])
22
+ .describe("What kind of thing is changing: a service, a capability, or a domain-model entity (aggregate/event)."),
23
+ target: z
24
+ .string()
25
+ .min(1)
26
+ .describe("Name of the changed artefact (service id, capability slug, or entity name)."),
27
+ pin_to_commit: z
28
+ .string()
29
+ .optional()
30
+ .describe("Optional commit SHA (or ref) to pin the SDD to."),
31
+ },
32
+ }, (args) => {
33
+ const reader = readerFor(sddRoot, args.pin_to_commit);
34
+ try {
35
+ const payload = runCascadeImpact(reader, {
36
+ change_type: args.change_type,
37
+ target: args.target,
38
+ });
39
+ return {
40
+ messages: [
41
+ {
42
+ role: "user",
43
+ content: {
44
+ type: "text",
45
+ text: renderCascadeSummary(payload),
46
+ },
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ catch (err) {
52
+ if (err instanceof CascadeImpactError) {
53
+ return {
54
+ messages: [
55
+ {
56
+ role: "user",
57
+ content: {
58
+ type: "text",
59
+ text: renderCascadeError(err, reader.sddRoot, reader.pin),
60
+ },
61
+ },
62
+ ],
63
+ };
64
+ }
65
+ throw err;
66
+ }
67
+ });
68
+ }
69
+ function renderCascadeSummary(payload) {
70
+ const { query, affected, missing_cascades, links } = payload;
71
+ const lines = [];
72
+ lines.push(`**Cascade dry-run for ${query.change_type} \`${query.target}\`** (pin: ${payload.pin_to_commit})`, "", "## Affected artefacts", "");
73
+ if (affected.services.length === 0) {
74
+ lines.push("_No services flagged._");
75
+ }
76
+ else {
77
+ lines.push("### Services");
78
+ lines.push("");
79
+ for (const svc of affected.services) {
80
+ const deps = svc.internal_dependencies.length
81
+ ? ` — deps: ${svc.internal_dependencies.join(", ")}`
82
+ : "";
83
+ const aggs = svc.aggregates.length
84
+ ? ` — aggregates: ${svc.aggregates.join(", ")}`
85
+ : "";
86
+ lines.push(`- \`${svc.service}\` (domain: ${svc.domain ?? "(unknown)"})${aggs}${deps}`);
87
+ }
88
+ lines.push("");
89
+ }
90
+ if (affected.capabilities.length > 0) {
91
+ lines.push("### Capabilities");
92
+ for (const c of affected.capabilities)
93
+ lines.push(`- \`${c}\``);
94
+ lines.push("");
95
+ }
96
+ if (affected.entities.length > 0) {
97
+ lines.push("### Entities");
98
+ for (const e of affected.entities)
99
+ lines.push(`- \`${e}\``);
100
+ lines.push("");
101
+ }
102
+ if (affected.contracts.length > 0) {
103
+ lines.push("### Contracts");
104
+ for (const c of affected.contracts)
105
+ lines.push(`- \`${c}\``);
106
+ lines.push("");
107
+ }
108
+ const missingKeys = Object.keys(missing_cascades);
109
+ lines.push("## Missing cascades");
110
+ lines.push("");
111
+ if (missingKeys.length === 0) {
112
+ lines.push("_None reported by the validator._");
113
+ lines.push("");
114
+ }
115
+ else {
116
+ for (const k of missingKeys) {
117
+ const v = missing_cascades[k];
118
+ const list = Array.isArray(v) ? v : [];
119
+ lines.push(`- **${k}:** ${list.length === 0 ? "(none)" : list.join(", ")}`);
120
+ }
121
+ lines.push("");
122
+ }
123
+ if (links.length > 0) {
124
+ lines.push("## Evidence links");
125
+ lines.push("");
126
+ for (const l of links)
127
+ lines.push(`- ${l}`);
128
+ lines.push("");
129
+ }
130
+ lines.push("**Reminder:** this is a dry-run. Run the full cascade validator (`orchestration/scripts/validate-cascade-completeness.sh`) before merging to catch anything the impact report missed.");
131
+ return lines.join("\n");
132
+ }
133
+ function renderCascadeError(err, sddRoot, pin) {
134
+ return [
135
+ `**Cascade evaluation failed** (pin: ${pin})`,
136
+ "",
137
+ `- **Error code:** \`${err.code}\``,
138
+ `- **Message:** ${err.message}`,
139
+ `- **Remediation:** ${err.remediation}`,
140
+ `- **SDD root:** \`${sddRoot}\``,
141
+ "",
142
+ "The agent should surface this error to the user and suggest the",
143
+ "remediation above. No dry-run output is available until the",
144
+ "underlying tool is resolved.",
145
+ ].join("\n");
146
+ }
147
+ //# sourceMappingURL=evaluate-cascade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate-cascade.js","sourceRoot":"","sources":["../../../../src/lib/mcp/prompts/evaluate-cascade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,OAAe;IACzD,MAAM,CAAC,cAAc,CACnB,kBAAkB,EAClB;QACE,KAAK,EAAE,wCAAwC;QAC/C,WAAW,EACT,mOAAmO;QACrO,UAAU,EAAE;YACV,WAAW,EAAE,CAAC;iBACX,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;iBACzC,QAAQ,CACP,sGAAsG,CACvG;YACH,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACP,6EAA6E,CAC9E;YACH,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,iDAAiD,CAClD;SACJ;KACF,EACD,CAAC,IAAI,EAAE,EAAE;QACP,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE;gBACvC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC;yBACpC;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;gBACtC,OAAO;oBACL,QAAQ,EAAE;wBACR;4BACE,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE;gCACP,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;6BAC1D;yBACF;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAA4C;IAE5C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CACR,yBAAyB,KAAK,CAAC,WAAW,MAAM,KAAK,CAAC,MAAM,cAAc,OAAO,CAAC,aAAa,GAAG,EAClG,EAAE,EACF,uBAAuB,EACvB,EAAE,CACH,CAAC;IAEF,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,CAAC,MAAM;gBAC3C,CAAC,CAAC,YAAY,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACpD,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM;gBAChC,CAAC,CAAC,kBAAkB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC/C,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,CAAC,IAAI,CACR,OAAO,GAAG,CAAC,OAAO,eAAe,GAAG,CAAC,MAAM,IAAI,WAAW,IAAI,IAAI,GAAG,IAAI,EAAE,CAC5E,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAI,gBAA4C,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAe,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CACR,uLAAuL,CACxL,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CACzB,GAAuB,EACvB,OAAe,EACf,GAAW;IAEX,OAAO;QACL,uCAAuC,GAAG,GAAG;QAC7C,EAAE;QACF,uBAAuB,GAAG,CAAC,IAAI,IAAI;QACnC,kBAAkB,GAAG,CAAC,OAAO,EAAE;QAC/B,sBAAsB,GAAG,CAAC,WAAW,EAAE;QACvC,qBAAqB,OAAO,IAAI;QAChC,EAAE;QACF,iEAAiE;QACjE,6DAA6D;QAC7D,8BAA8B;KAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Phase 5 prompt registration entry-point. Mirrors the
3
+ * resources/index.ts and tools/ registration pattern so server.ts
4
+ * can call a single `registerAllPrompts(server, sddRoot)`.
5
+ */
6
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ export declare function registerAllPrompts(server: McpServer, sddRoot: string): void;
8
+ export { TEMPLATES_DIR } from "./template-loader.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAU3E;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Phase 5 prompt registration entry-point. Mirrors the
3
+ * resources/index.ts and tools/ registration pattern so server.ts
4
+ * can call a single `registerAllPrompts(server, sddRoot)`.
5
+ */
6
+ import { register as registerProposeAdr } from "./propose-adr.js";
7
+ import { register as registerWriteCapabilitySpec } from "./write-capability-spec.js";
8
+ import { register as registerWriteFeatureSpec } from "./write-feature-spec.js";
9
+ import { register as registerWriteWorkOrder } from "./write-work-order.js";
10
+ import { register as registerReviewDataModelChange } from "./review-data-model-change.js";
11
+ import { register as registerEvaluateCascade } from "./evaluate-cascade.js";
12
+ export function registerAllPrompts(server, sddRoot) {
13
+ // 5a — authoring prompts (Phase-1-only dependency).
14
+ registerProposeAdr(server, sddRoot);
15
+ registerWriteCapabilitySpec(server, sddRoot);
16
+ registerWriteFeatureSpec(server, sddRoot);
17
+ registerWriteWorkOrder(server, sddRoot);
18
+ // 5b — impact prompts (Phase-2-dependent).
19
+ registerReviewDataModelChange(server, sddRoot);
20
+ registerEvaluateCascade(server, sddRoot);
21
+ }
22
+ export { TEMPLATES_DIR } from "./template-loader.js";
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/mcp/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC1F,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAE5E,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,OAAe;IACnE,oDAAoD;IACpD,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAExC,2CAA2C;IAC3C,6BAA6B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * propose_adr — scaffold a new ADR matching the method's house
3
+ * frontmatter schema. Binds to docs/method/methods/adr-template.md.
4
+ *
5
+ * Arguments become an instruction preamble the agent uses to fill
6
+ * the template (which is embedded verbatim in the returned message).
7
+ * The rendered draft is not committed; the agent hands it to the
8
+ * user, who saves it manually as docs/{scope}/adr/ADR NNNN: Title.md.
9
+ */
10
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
+ export declare function register(server: McpServer, sddRoot: string): void;
12
+ //# sourceMappingURL=propose-adr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose-adr.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/prompts/propose-adr.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA0FjE"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * propose_adr — scaffold a new ADR matching the method's house
3
+ * frontmatter schema. Binds to docs/method/methods/adr-template.md.
4
+ *
5
+ * Arguments become an instruction preamble the agent uses to fill
6
+ * the template (which is embedded verbatim in the returned message).
7
+ * The rendered draft is not committed; the agent hands it to the
8
+ * user, who saves it manually as docs/{scope}/adr/ADR NNNN: Title.md.
9
+ */
10
+ import { z } from "zod";
11
+ import { liveReader } from "../reader.js";
12
+ import { loadTemplate, renderMissingTemplateMessage, templateAt, } from "./template-loader.js";
13
+ const scopeSchema = z
14
+ .string()
15
+ .min(1)
16
+ .describe("ADR scope: 'method', 'platform', or 'domain:<name>' (e.g. 'domain:party').");
17
+ export function register(server, sddRoot) {
18
+ server.registerPrompt("propose_adr", {
19
+ title: "Propose an ADR",
20
+ description: "Scaffold a new ADR draft matching the method's frontmatter schema (validated by orchestration/scripts/validate-adr-structure.sh). Returns a ready-to-fill template the user can save as docs/{scope}/adr/ADR NNNN: Title.md.",
21
+ argsSchema: {
22
+ title: z
23
+ .string()
24
+ .min(1)
25
+ .describe("Decision title (e.g. 'Adopt PostgreSQL for event store')."),
26
+ scope: scopeSchema,
27
+ decision_type: z
28
+ .string()
29
+ .optional()
30
+ .describe("Optional: architecture-pattern | process | policy | technology-choice | other."),
31
+ deciders: z
32
+ .string()
33
+ .optional()
34
+ .describe("Optional: named people or group with authority to accept."),
35
+ },
36
+ }, (args) => {
37
+ const reader = liveReader(sddRoot);
38
+ const location = templateAt("adr-template.md", "ADR template");
39
+ const loaded = loadTemplate(reader, location);
40
+ if (loaded === null) {
41
+ return {
42
+ messages: [
43
+ {
44
+ role: "user",
45
+ content: {
46
+ type: "text",
47
+ text: renderMissingTemplateMessage(location, reader.sddRoot, reader.pin),
48
+ },
49
+ },
50
+ ],
51
+ };
52
+ }
53
+ const preamble = [
54
+ "Please scaffold a new ADR using the template below. Fill in the",
55
+ "frontmatter and sections with the values provided; replace any",
56
+ "remaining placeholder text with concrete content or leave a clear",
57
+ "`TODO` where the author still needs to think.",
58
+ "",
59
+ "**Inputs:**",
60
+ `- **Title:** ${args.title}`,
61
+ `- **Scope:** ${args.scope}`,
62
+ args.decision_type
63
+ ? `- **Decision Type:** ${args.decision_type}`
64
+ : "- **Decision Type:** (not provided — fill from the list in the template)",
65
+ args.deciders
66
+ ? `- **Deciders:** ${args.deciders}`
67
+ : "- **Deciders:** (not provided — must be populated before submission)",
68
+ "",
69
+ "**Target path:**",
70
+ `- \`docs/${args.scope.startsWith("domain:") ? `domains/${args.scope.slice("domain:".length)}/adr` : `${args.scope}/adr`}/ADR NNNN: ${args.title}.md\``,
71
+ " (replace `NNNN` with the next free number in that directory).",
72
+ "",
73
+ "**House-style requirements** (enforced by `orchestration/scripts/validate-adr-structure.sh`):",
74
+ "- `**Date:**`, `**Status:**`, and `**Deciders:**` metadata bullets are required.",
75
+ "- `**Status:**` must be one of: Accepted | Proposed | Superseded | Deprecated | Deferred.",
76
+ "- If Status is Superseded, include a `Superseded by ADR NNNN` reference in the body.",
77
+ "",
78
+ "**Template to fill** (verbatim from the SDD):",
79
+ "",
80
+ "```markdown",
81
+ loaded.body.trimEnd(),
82
+ "```",
83
+ ].join("\n");
84
+ return {
85
+ messages: [
86
+ {
87
+ role: "user",
88
+ content: { type: "text", text: preamble },
89
+ },
90
+ ],
91
+ };
92
+ });
93
+ }
94
+ //# sourceMappingURL=propose-adr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose-adr.js","sourceRoot":"","sources":["../../../../src/lib/mcp/prompts/propose-adr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * review_data_model_change — help the agent reason about a proposed
3
+ * change to a mermaid data model. Identifies entities in the model,
4
+ * runs `cascade_impact` for each, and includes consumer lookups from
5
+ * the SDD index so the agent has structured input to shape its
6
+ * review around.
7
+ */
8
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ export declare function register(server: McpServer, sddRoot: string): void;
10
+ //# sourceMappingURL=review-data-model-change.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-data-model-change.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/prompts/review-data-model-change.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAiFjE"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * review_data_model_change — help the agent reason about a proposed
3
+ * change to a mermaid data model. Identifies entities in the model,
4
+ * runs `cascade_impact` for each, and includes consumer lookups from
5
+ * the SDD index so the agent has structured input to shape its
6
+ * review around.
7
+ */
8
+ import { z } from "zod";
9
+ import { CascadeImpactError, runCascadeImpact, } from "../../sdd-index/cascade.js";
10
+ import { extractEntities } from "../../sdd-index/data-model.js";
11
+ import { getSddIndex } from "../../sdd-index/index.js";
12
+ import { readerFor } from "../pin/index.js";
13
+ export function register(server, sddRoot) {
14
+ server.registerPrompt("review_data_model_change", {
15
+ title: "Review a data-model change",
16
+ description: "Structured review shell for a proposed data-model change. Extracts entities from the mermaid source, runs cascade_impact per entity, and lists consumers with version pins so the agent can reason about breaking-change risk.",
17
+ argsSchema: {
18
+ data_model_path: z
19
+ .string()
20
+ .min(1)
21
+ .describe("SDD-relative path to the data model (e.g. 'docs/domains/party/architecture/data-model.mermaid.md')."),
22
+ change_description: z
23
+ .string()
24
+ .min(1)
25
+ .describe("One or two sentences describing the proposed change (for context in the review shell)."),
26
+ pin_to_commit: z
27
+ .string()
28
+ .optional()
29
+ .describe("Optional commit SHA (or ref) to pin the SDD to."),
30
+ },
31
+ }, (args) => {
32
+ const reader = readerFor(sddRoot, args.pin_to_commit);
33
+ const body = reader.readFile(args.data_model_path);
34
+ if (body === null) {
35
+ return {
36
+ messages: [
37
+ {
38
+ role: "user",
39
+ content: {
40
+ type: "text",
41
+ text: renderMissingModel(args.data_model_path, reader.sddRoot),
42
+ },
43
+ },
44
+ ],
45
+ };
46
+ }
47
+ const entities = extractEntities(body);
48
+ const index = getSddIndex(reader);
49
+ const perEntity = entities.map((entity) => {
50
+ const consumers = index.consumers.get(entity) ?? [];
51
+ const producers = index.producers.get(entity) ?? [];
52
+ let cascade = null;
53
+ let cascadeError = null;
54
+ try {
55
+ cascade = runCascadeImpact(reader, {
56
+ change_type: "entity",
57
+ target: entity,
58
+ });
59
+ }
60
+ catch (err) {
61
+ if (err instanceof CascadeImpactError) {
62
+ cascadeError = err;
63
+ }
64
+ else {
65
+ throw err;
66
+ }
67
+ }
68
+ return { entity, consumers, producers, cascade, cascadeError };
69
+ });
70
+ return {
71
+ messages: [
72
+ {
73
+ role: "user",
74
+ content: {
75
+ type: "text",
76
+ text: renderReviewShell(args, entities, perEntity, reader.pin),
77
+ },
78
+ },
79
+ ],
80
+ };
81
+ });
82
+ }
83
+ function renderMissingModel(relPath, sddRoot) {
84
+ return [
85
+ `**Data model not found:** \`${relPath}\``,
86
+ "",
87
+ `The SDD at \`${sddRoot}\` does not have this file. Confirm the path and re-run.`,
88
+ ].join("\n");
89
+ }
90
+ function renderReviewShell(args, entities, perEntity, pin) {
91
+ const lines = [];
92
+ lines.push(`**Data-model change review** (pin: ${pin})`, "", `- **Model:** \`${args.data_model_path}\``, `- **Proposed change:** ${args.change_description}`, "", "## Entities identified", "");
93
+ if (entities.length === 0) {
94
+ lines.push("_No entities extracted from the mermaid source._ Check that the", "file uses the standard `EntityName {` block syntax.");
95
+ lines.push("");
96
+ return lines.join("\n");
97
+ }
98
+ for (const e of entities)
99
+ lines.push(`- \`${e}\``);
100
+ lines.push("");
101
+ for (const item of perEntity) {
102
+ lines.push(`## ${item.entity}`);
103
+ lines.push("");
104
+ if (item.producers.length > 0) {
105
+ lines.push(`- **Producers:** ${item.producers.map((p) => `\`${p}\``).join(", ")}`);
106
+ }
107
+ else {
108
+ lines.push("- **Producers:** _none identified in the SDD index_");
109
+ }
110
+ if (item.consumers.length > 0) {
111
+ lines.push(`- **Consumers:** ${item.consumers.map((c) => `\`${c}\``).join(", ")}`);
112
+ }
113
+ else {
114
+ lines.push("- **Consumers:** _none identified in the SDD index_");
115
+ }
116
+ lines.push("");
117
+ if (item.cascadeError) {
118
+ lines.push(`_cascade_impact unavailable: ${item.cascadeError.code} — ${item.cascadeError.message}_`);
119
+ lines.push("");
120
+ continue;
121
+ }
122
+ if (item.cascade) {
123
+ const a = item.cascade.affected;
124
+ lines.push("**Cascade summary:**");
125
+ lines.push(`- services: ${a.services.length === 0 ? "none" : a.services.map((s) => `\`${s.service}\``).join(", ")}`);
126
+ lines.push(`- capabilities: ${a.capabilities.length === 0 ? "none" : a.capabilities.map((c) => `\`${c}\``).join(", ")}`);
127
+ lines.push(`- contracts: ${a.contracts.length === 0 ? "none" : a.contracts.map((c) => `\`${c}\``).join(", ")}`);
128
+ lines.push("");
129
+ }
130
+ }
131
+ lines.push("## Review checklist", "", "1. Is the change backwards-compatible at the contract boundary (see per-entity contracts above)?", "2. Have all listed consumers been notified / had their specs updated?", "3. Does the cascade summary surface any missing feature-spec, capability-spec, or glossary updates?", "4. Pin this review to a commit (`pin_to_commit`) before citing it in a work order.");
132
+ return lines.join("\n");
133
+ }
134
+ //# sourceMappingURL=review-data-model-change.js.map