@libar-dev/architect 1.0.0-pre.3

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 (800) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/LICENSE +25 -0
  3. package/LICENSE-MCP +62 -0
  4. package/README.md +147 -0
  5. package/dist/api/arch-queries.d.ts +95 -0
  6. package/dist/api/arch-queries.d.ts.map +1 -0
  7. package/dist/api/arch-queries.js +310 -0
  8. package/dist/api/arch-queries.js.map +1 -0
  9. package/dist/api/context-assembler.d.ts +124 -0
  10. package/dist/api/context-assembler.d.ts.map +1 -0
  11. package/dist/api/context-assembler.js +472 -0
  12. package/dist/api/context-assembler.js.map +1 -0
  13. package/dist/api/context-formatter.d.ts +26 -0
  14. package/dist/api/context-formatter.d.ts.map +1 -0
  15. package/dist/api/context-formatter.js +183 -0
  16. package/dist/api/context-formatter.js.map +1 -0
  17. package/dist/api/coverage-analyzer.d.ts +38 -0
  18. package/dist/api/coverage-analyzer.d.ts.map +1 -0
  19. package/dist/api/coverage-analyzer.js +117 -0
  20. package/dist/api/coverage-analyzer.js.map +1 -0
  21. package/dist/api/fuzzy-match.d.ts +75 -0
  22. package/dist/api/fuzzy-match.d.ts.map +1 -0
  23. package/dist/api/fuzzy-match.js +150 -0
  24. package/dist/api/fuzzy-match.js.map +1 -0
  25. package/dist/api/handoff-generator.d.ts +45 -0
  26. package/dist/api/handoff-generator.d.ts.map +1 -0
  27. package/dist/api/handoff-generator.js +139 -0
  28. package/dist/api/handoff-generator.js.map +1 -0
  29. package/dist/api/index.d.ts +61 -0
  30. package/dist/api/index.d.ts.map +1 -0
  31. package/dist/api/index.js +54 -0
  32. package/dist/api/index.js.map +1 -0
  33. package/dist/api/pattern-helpers.d.ts +51 -0
  34. package/dist/api/pattern-helpers.d.ts.map +1 -0
  35. package/dist/api/pattern-helpers.js +84 -0
  36. package/dist/api/pattern-helpers.js.map +1 -0
  37. package/dist/api/process-state.d.ts +224 -0
  38. package/dist/api/process-state.d.ts.map +1 -0
  39. package/dist/api/process-state.js +308 -0
  40. package/dist/api/process-state.js.map +1 -0
  41. package/dist/api/rules-query.d.ts +60 -0
  42. package/dist/api/rules-query.d.ts.map +1 -0
  43. package/dist/api/rules-query.js +154 -0
  44. package/dist/api/rules-query.js.map +1 -0
  45. package/dist/api/scope-validator.d.ts +56 -0
  46. package/dist/api/scope-validator.d.ts.map +1 -0
  47. package/dist/api/scope-validator.js +293 -0
  48. package/dist/api/scope-validator.js.map +1 -0
  49. package/dist/api/stub-resolver.d.ts +117 -0
  50. package/dist/api/stub-resolver.d.ts.map +1 -0
  51. package/dist/api/stub-resolver.js +154 -0
  52. package/dist/api/stub-resolver.js.map +1 -0
  53. package/dist/api/summarize.d.ts +75 -0
  54. package/dist/api/summarize.d.ts.map +1 -0
  55. package/dist/api/summarize.js +97 -0
  56. package/dist/api/summarize.js.map +1 -0
  57. package/dist/api/types.d.ts +221 -0
  58. package/dist/api/types.d.ts.map +1 -0
  59. package/dist/api/types.js +57 -0
  60. package/dist/api/types.js.map +1 -0
  61. package/dist/cache/file-cache.d.ts +72 -0
  62. package/dist/cache/file-cache.d.ts.map +1 -0
  63. package/dist/cache/file-cache.js +80 -0
  64. package/dist/cache/file-cache.js.map +1 -0
  65. package/dist/cache/index.d.ts +5 -0
  66. package/dist/cache/index.d.ts.map +1 -0
  67. package/dist/cache/index.js +5 -0
  68. package/dist/cache/index.js.map +1 -0
  69. package/dist/cli/cli-schema.d.ts +83 -0
  70. package/dist/cli/cli-schema.d.ts.map +1 -0
  71. package/dist/cli/cli-schema.js +505 -0
  72. package/dist/cli/cli-schema.js.map +1 -0
  73. package/dist/cli/dataset-cache.d.ts +66 -0
  74. package/dist/cli/dataset-cache.d.ts.map +1 -0
  75. package/dist/cli/dataset-cache.js +179 -0
  76. package/dist/cli/dataset-cache.js.map +1 -0
  77. package/dist/cli/error-handler.d.ts +84 -0
  78. package/dist/cli/error-handler.d.ts.map +1 -0
  79. package/dist/cli/error-handler.js +197 -0
  80. package/dist/cli/error-handler.js.map +1 -0
  81. package/dist/cli/generate-docs.d.ts +30 -0
  82. package/dist/cli/generate-docs.d.ts.map +1 -0
  83. package/dist/cli/generate-docs.js +370 -0
  84. package/dist/cli/generate-docs.js.map +1 -0
  85. package/dist/cli/lint-patterns.d.ts +57 -0
  86. package/dist/cli/lint-patterns.d.ts.map +1 -0
  87. package/dist/cli/lint-patterns.js +257 -0
  88. package/dist/cli/lint-patterns.js.map +1 -0
  89. package/dist/cli/lint-process.d.ts +54 -0
  90. package/dist/cli/lint-process.d.ts.map +1 -0
  91. package/dist/cli/lint-process.js +319 -0
  92. package/dist/cli/lint-process.js.map +1 -0
  93. package/dist/cli/lint-steps.d.ts +32 -0
  94. package/dist/cli/lint-steps.d.ts.map +1 -0
  95. package/dist/cli/lint-steps.js +172 -0
  96. package/dist/cli/lint-steps.js.map +1 -0
  97. package/dist/cli/mcp-server.d.ts +22 -0
  98. package/dist/cli/mcp-server.d.ts.map +1 -0
  99. package/dist/cli/mcp-server.js +57 -0
  100. package/dist/cli/mcp-server.js.map +1 -0
  101. package/dist/cli/output-pipeline.d.ts +130 -0
  102. package/dist/cli/output-pipeline.d.ts.map +1 -0
  103. package/dist/cli/output-pipeline.js +234 -0
  104. package/dist/cli/output-pipeline.js.map +1 -0
  105. package/dist/cli/process-api.d.ts +37 -0
  106. package/dist/cli/process-api.d.ts.map +1 -0
  107. package/dist/cli/process-api.js +1550 -0
  108. package/dist/cli/process-api.js.map +1 -0
  109. package/dist/cli/repl.d.ts +38 -0
  110. package/dist/cli/repl.d.ts.map +1 -0
  111. package/dist/cli/repl.js +239 -0
  112. package/dist/cli/repl.js.map +1 -0
  113. package/dist/cli/validate-patterns.d.ts +115 -0
  114. package/dist/cli/validate-patterns.d.ts.map +1 -0
  115. package/dist/cli/validate-patterns.js +707 -0
  116. package/dist/cli/validate-patterns.js.map +1 -0
  117. package/dist/cli/version.d.ts +35 -0
  118. package/dist/cli/version.d.ts.map +1 -0
  119. package/dist/cli/version.js +64 -0
  120. package/dist/cli/version.js.map +1 -0
  121. package/dist/config/config-loader.d.ts +167 -0
  122. package/dist/config/config-loader.d.ts.map +1 -0
  123. package/dist/config/config-loader.js +294 -0
  124. package/dist/config/config-loader.js.map +1 -0
  125. package/dist/config/defaults.d.ts +92 -0
  126. package/dist/config/defaults.d.ts.map +1 -0
  127. package/dist/config/defaults.js +103 -0
  128. package/dist/config/defaults.js.map +1 -0
  129. package/dist/config/define-config.d.ts +37 -0
  130. package/dist/config/define-config.d.ts.map +1 -0
  131. package/dist/config/define-config.js +38 -0
  132. package/dist/config/define-config.js.map +1 -0
  133. package/dist/config/factory.d.ts +79 -0
  134. package/dist/config/factory.d.ts.map +1 -0
  135. package/dist/config/factory.js +116 -0
  136. package/dist/config/factory.js.map +1 -0
  137. package/dist/config/index.d.ts +45 -0
  138. package/dist/config/index.d.ts.map +1 -0
  139. package/dist/config/index.js +48 -0
  140. package/dist/config/index.js.map +1 -0
  141. package/dist/config/merge-sources.d.ts +47 -0
  142. package/dist/config/merge-sources.d.ts.map +1 -0
  143. package/dist/config/merge-sources.js +61 -0
  144. package/dist/config/merge-sources.js.map +1 -0
  145. package/dist/config/presets.d.ts +115 -0
  146. package/dist/config/presets.d.ts.map +1 -0
  147. package/dist/config/presets.js +119 -0
  148. package/dist/config/presets.js.map +1 -0
  149. package/dist/config/project-config-schema.d.ts +192 -0
  150. package/dist/config/project-config-schema.d.ts.map +1 -0
  151. package/dist/config/project-config-schema.js +231 -0
  152. package/dist/config/project-config-schema.js.map +1 -0
  153. package/dist/config/project-config.d.ts +229 -0
  154. package/dist/config/project-config.d.ts.map +1 -0
  155. package/dist/config/project-config.js +37 -0
  156. package/dist/config/project-config.js.map +1 -0
  157. package/dist/config/regex-builders.d.ts +49 -0
  158. package/dist/config/regex-builders.d.ts.map +1 -0
  159. package/dist/config/regex-builders.js +85 -0
  160. package/dist/config/regex-builders.js.map +1 -0
  161. package/dist/config/resolve-config.d.ts +65 -0
  162. package/dist/config/resolve-config.d.ts.map +1 -0
  163. package/dist/config/resolve-config.js +150 -0
  164. package/dist/config/resolve-config.js.map +1 -0
  165. package/dist/config/types.d.ts +81 -0
  166. package/dist/config/types.d.ts.map +1 -0
  167. package/dist/config/types.js +22 -0
  168. package/dist/config/types.js.map +1 -0
  169. package/dist/config/workflow-loader.d.ts +90 -0
  170. package/dist/config/workflow-loader.d.ts.map +1 -0
  171. package/dist/config/workflow-loader.js +167 -0
  172. package/dist/config/workflow-loader.js.map +1 -0
  173. package/dist/extractor/doc-extractor.d.ts +233 -0
  174. package/dist/extractor/doc-extractor.d.ts.map +1 -0
  175. package/dist/extractor/doc-extractor.js +481 -0
  176. package/dist/extractor/doc-extractor.js.map +1 -0
  177. package/dist/extractor/dual-source-extractor.d.ts +161 -0
  178. package/dist/extractor/dual-source-extractor.d.ts.map +1 -0
  179. package/dist/extractor/dual-source-extractor.js +407 -0
  180. package/dist/extractor/dual-source-extractor.js.map +1 -0
  181. package/dist/extractor/gherkin-extractor.d.ts +170 -0
  182. package/dist/extractor/gherkin-extractor.d.ts.map +1 -0
  183. package/dist/extractor/gherkin-extractor.js +543 -0
  184. package/dist/extractor/gherkin-extractor.js.map +1 -0
  185. package/dist/extractor/index.d.ts +7 -0
  186. package/dist/extractor/index.d.ts.map +1 -0
  187. package/dist/extractor/index.js +11 -0
  188. package/dist/extractor/index.js.map +1 -0
  189. package/dist/extractor/layer-inference.d.ts +66 -0
  190. package/dist/extractor/layer-inference.d.ts.map +1 -0
  191. package/dist/extractor/layer-inference.js +93 -0
  192. package/dist/extractor/layer-inference.js.map +1 -0
  193. package/dist/extractor/shape-extractor.d.ts +79 -0
  194. package/dist/extractor/shape-extractor.d.ts.map +1 -0
  195. package/dist/extractor/shape-extractor.js +966 -0
  196. package/dist/extractor/shape-extractor.js.map +1 -0
  197. package/dist/generators/built-in/cli-recipe-generator.d.ts +30 -0
  198. package/dist/generators/built-in/cli-recipe-generator.d.ts.map +1 -0
  199. package/dist/generators/built-in/cli-recipe-generator.js +155 -0
  200. package/dist/generators/built-in/cli-recipe-generator.js.map +1 -0
  201. package/dist/generators/built-in/codec-generators.d.ts +29 -0
  202. package/dist/generators/built-in/codec-generators.d.ts.map +1 -0
  203. package/dist/generators/built-in/codec-generators.js +195 -0
  204. package/dist/generators/built-in/codec-generators.js.map +1 -0
  205. package/dist/generators/built-in/decision-doc-generator.d.ts +204 -0
  206. package/dist/generators/built-in/decision-doc-generator.d.ts.map +1 -0
  207. package/dist/generators/built-in/decision-doc-generator.js +654 -0
  208. package/dist/generators/built-in/decision-doc-generator.js.map +1 -0
  209. package/dist/generators/built-in/design-review-generator.d.ts +26 -0
  210. package/dist/generators/built-in/design-review-generator.d.ts.map +1 -0
  211. package/dist/generators/built-in/design-review-generator.js +94 -0
  212. package/dist/generators/built-in/design-review-generator.js.map +1 -0
  213. package/dist/generators/built-in/index.d.ts +22 -0
  214. package/dist/generators/built-in/index.d.ts.map +1 -0
  215. package/dist/generators/built-in/index.js +23 -0
  216. package/dist/generators/built-in/index.js.map +1 -0
  217. package/dist/generators/built-in/process-api-reference-generator.d.ts +18 -0
  218. package/dist/generators/built-in/process-api-reference-generator.d.ts.map +1 -0
  219. package/dist/generators/built-in/process-api-reference-generator.js +85 -0
  220. package/dist/generators/built-in/process-api-reference-generator.js.map +1 -0
  221. package/dist/generators/built-in/reference-generators.d.ts +51 -0
  222. package/dist/generators/built-in/reference-generators.d.ts.map +1 -0
  223. package/dist/generators/built-in/reference-generators.js +320 -0
  224. package/dist/generators/built-in/reference-generators.js.map +1 -0
  225. package/dist/generators/codec-based.d.ts +63 -0
  226. package/dist/generators/codec-based.d.ts.map +1 -0
  227. package/dist/generators/codec-based.js +88 -0
  228. package/dist/generators/codec-based.js.map +1 -0
  229. package/dist/generators/content-deduplicator.d.ts +114 -0
  230. package/dist/generators/content-deduplicator.d.ts.map +1 -0
  231. package/dist/generators/content-deduplicator.js +356 -0
  232. package/dist/generators/content-deduplicator.js.map +1 -0
  233. package/dist/generators/index.d.ts +50 -0
  234. package/dist/generators/index.d.ts.map +1 -0
  235. package/dist/generators/index.js +54 -0
  236. package/dist/generators/index.js.map +1 -0
  237. package/dist/generators/orchestrator.d.ts +265 -0
  238. package/dist/generators/orchestrator.d.ts.map +1 -0
  239. package/dist/generators/orchestrator.js +570 -0
  240. package/dist/generators/orchestrator.js.map +1 -0
  241. package/dist/generators/pipeline/build-pipeline.d.ts +131 -0
  242. package/dist/generators/pipeline/build-pipeline.d.ts.map +1 -0
  243. package/dist/generators/pipeline/build-pipeline.js +248 -0
  244. package/dist/generators/pipeline/build-pipeline.js.map +1 -0
  245. package/dist/generators/pipeline/context-inference.d.ts +55 -0
  246. package/dist/generators/pipeline/context-inference.d.ts.map +1 -0
  247. package/dist/generators/pipeline/context-inference.js +76 -0
  248. package/dist/generators/pipeline/context-inference.js.map +1 -0
  249. package/dist/generators/pipeline/index.d.ts +27 -0
  250. package/dist/generators/pipeline/index.d.ts.map +1 -0
  251. package/dist/generators/pipeline/index.js +34 -0
  252. package/dist/generators/pipeline/index.js.map +1 -0
  253. package/dist/generators/pipeline/merge-patterns.d.ts +33 -0
  254. package/dist/generators/pipeline/merge-patterns.d.ts.map +1 -0
  255. package/dist/generators/pipeline/merge-patterns.js +50 -0
  256. package/dist/generators/pipeline/merge-patterns.js.map +1 -0
  257. package/dist/generators/pipeline/relationship-resolver.d.ts +47 -0
  258. package/dist/generators/pipeline/relationship-resolver.d.ts.map +1 -0
  259. package/dist/generators/pipeline/relationship-resolver.js +132 -0
  260. package/dist/generators/pipeline/relationship-resolver.js.map +1 -0
  261. package/dist/generators/pipeline/sequence-utils.d.ts +49 -0
  262. package/dist/generators/pipeline/sequence-utils.d.ts.map +1 -0
  263. package/dist/generators/pipeline/sequence-utils.js +235 -0
  264. package/dist/generators/pipeline/sequence-utils.js.map +1 -0
  265. package/dist/generators/pipeline/transform-dataset.d.ts +82 -0
  266. package/dist/generators/pipeline/transform-dataset.d.ts.map +1 -0
  267. package/dist/generators/pipeline/transform-dataset.js +355 -0
  268. package/dist/generators/pipeline/transform-dataset.js.map +1 -0
  269. package/dist/generators/pipeline/transform-types.d.ts +96 -0
  270. package/dist/generators/pipeline/transform-types.d.ts.map +1 -0
  271. package/dist/generators/pipeline/transform-types.js +18 -0
  272. package/dist/generators/pipeline/transform-types.js.map +1 -0
  273. package/dist/generators/registry.d.ts +64 -0
  274. package/dist/generators/registry.d.ts.map +1 -0
  275. package/dist/generators/registry.js +77 -0
  276. package/dist/generators/registry.js.map +1 -0
  277. package/dist/generators/source-mapper.d.ts +143 -0
  278. package/dist/generators/source-mapper.d.ts.map +1 -0
  279. package/dist/generators/source-mapper.js +602 -0
  280. package/dist/generators/source-mapper.js.map +1 -0
  281. package/dist/generators/source-mapping-validator.d.ts +118 -0
  282. package/dist/generators/source-mapping-validator.d.ts.map +1 -0
  283. package/dist/generators/source-mapping-validator.js +334 -0
  284. package/dist/generators/source-mapping-validator.js.map +1 -0
  285. package/dist/generators/types.d.ts +104 -0
  286. package/dist/generators/types.d.ts.map +1 -0
  287. package/dist/generators/types.js +5 -0
  288. package/dist/generators/types.js.map +1 -0
  289. package/dist/generators/warning-collector.d.ts +144 -0
  290. package/dist/generators/warning-collector.d.ts.map +1 -0
  291. package/dist/generators/warning-collector.js +166 -0
  292. package/dist/generators/warning-collector.js.map +1 -0
  293. package/dist/git/branch-diff.d.ts +44 -0
  294. package/dist/git/branch-diff.d.ts.map +1 -0
  295. package/dist/git/branch-diff.js +57 -0
  296. package/dist/git/branch-diff.js.map +1 -0
  297. package/dist/git/helpers.d.ts +46 -0
  298. package/dist/git/helpers.d.ts.map +1 -0
  299. package/dist/git/helpers.js +67 -0
  300. package/dist/git/helpers.js.map +1 -0
  301. package/dist/git/index.d.ts +18 -0
  302. package/dist/git/index.d.ts.map +1 -0
  303. package/dist/git/index.js +18 -0
  304. package/dist/git/index.js.map +1 -0
  305. package/dist/git/name-status.d.ts +32 -0
  306. package/dist/git/name-status.d.ts.map +1 -0
  307. package/dist/git/name-status.js +66 -0
  308. package/dist/git/name-status.js.map +1 -0
  309. package/dist/index.d.ts +107 -0
  310. package/dist/index.d.ts.map +1 -0
  311. package/dist/index.js +122 -0
  312. package/dist/index.js.map +1 -0
  313. package/dist/lint/engine.d.ts +113 -0
  314. package/dist/lint/engine.d.ts.map +1 -0
  315. package/dist/lint/engine.js +228 -0
  316. package/dist/lint/engine.js.map +1 -0
  317. package/dist/lint/index.d.ts +26 -0
  318. package/dist/lint/index.d.ts.map +1 -0
  319. package/dist/lint/index.js +24 -0
  320. package/dist/lint/index.js.map +1 -0
  321. package/dist/lint/process-guard/decider.d.ts +166 -0
  322. package/dist/lint/process-guard/decider.d.ts.map +1 -0
  323. package/dist/lint/process-guard/decider.js +412 -0
  324. package/dist/lint/process-guard/decider.js.map +1 -0
  325. package/dist/lint/process-guard/derive-state.d.ts +96 -0
  326. package/dist/lint/process-guard/derive-state.d.ts.map +1 -0
  327. package/dist/lint/process-guard/derive-state.js +368 -0
  328. package/dist/lint/process-guard/derive-state.js.map +1 -0
  329. package/dist/lint/process-guard/detect-changes.d.ts +109 -0
  330. package/dist/lint/process-guard/detect-changes.d.ts.map +1 -0
  331. package/dist/lint/process-guard/detect-changes.js +487 -0
  332. package/dist/lint/process-guard/detect-changes.js.map +1 -0
  333. package/dist/lint/process-guard/index.d.ts +35 -0
  334. package/dist/lint/process-guard/index.d.ts.map +1 -0
  335. package/dist/lint/process-guard/index.js +39 -0
  336. package/dist/lint/process-guard/index.js.map +1 -0
  337. package/dist/lint/process-guard/types.d.ts +255 -0
  338. package/dist/lint/process-guard/types.d.ts.map +1 -0
  339. package/dist/lint/process-guard/types.js +31 -0
  340. package/dist/lint/process-guard/types.js.map +1 -0
  341. package/dist/lint/rules.d.ts +147 -0
  342. package/dist/lint/rules.d.ts.map +1 -0
  343. package/dist/lint/rules.js +289 -0
  344. package/dist/lint/rules.js.map +1 -0
  345. package/dist/lint/steps/cross-checks.d.ts +66 -0
  346. package/dist/lint/steps/cross-checks.d.ts.map +1 -0
  347. package/dist/lint/steps/cross-checks.js +290 -0
  348. package/dist/lint/steps/cross-checks.js.map +1 -0
  349. package/dist/lint/steps/feature-checks.d.ts +78 -0
  350. package/dist/lint/steps/feature-checks.d.ts.map +1 -0
  351. package/dist/lint/steps/feature-checks.js +279 -0
  352. package/dist/lint/steps/feature-checks.js.map +1 -0
  353. package/dist/lint/steps/index.d.ts +22 -0
  354. package/dist/lint/steps/index.d.ts.map +1 -0
  355. package/dist/lint/steps/index.js +26 -0
  356. package/dist/lint/steps/index.js.map +1 -0
  357. package/dist/lint/steps/pair-resolver.d.ts +29 -0
  358. package/dist/lint/steps/pair-resolver.d.ts.map +1 -0
  359. package/dist/lint/steps/pair-resolver.js +76 -0
  360. package/dist/lint/steps/pair-resolver.js.map +1 -0
  361. package/dist/lint/steps/runner.d.ts +28 -0
  362. package/dist/lint/steps/runner.d.ts.map +1 -0
  363. package/dist/lint/steps/runner.js +143 -0
  364. package/dist/lint/steps/runner.js.map +1 -0
  365. package/dist/lint/steps/step-checks.d.ts +41 -0
  366. package/dist/lint/steps/step-checks.d.ts.map +1 -0
  367. package/dist/lint/steps/step-checks.js +164 -0
  368. package/dist/lint/steps/step-checks.js.map +1 -0
  369. package/dist/lint/steps/types.d.ts +95 -0
  370. package/dist/lint/steps/types.d.ts.map +1 -0
  371. package/dist/lint/steps/types.js +79 -0
  372. package/dist/lint/steps/types.js.map +1 -0
  373. package/dist/lint/steps/utils.d.ts +22 -0
  374. package/dist/lint/steps/utils.d.ts.map +1 -0
  375. package/dist/lint/steps/utils.js +57 -0
  376. package/dist/lint/steps/utils.js.map +1 -0
  377. package/dist/mcp/file-watcher.d.ts +24 -0
  378. package/dist/mcp/file-watcher.d.ts.map +1 -0
  379. package/dist/mcp/file-watcher.js +75 -0
  380. package/dist/mcp/file-watcher.js.map +1 -0
  381. package/dist/mcp/index.d.ts +19 -0
  382. package/dist/mcp/index.d.ts.map +1 -0
  383. package/dist/mcp/index.js +21 -0
  384. package/dist/mcp/index.js.map +1 -0
  385. package/dist/mcp/pipeline-session.d.ts +33 -0
  386. package/dist/mcp/pipeline-session.d.ts.map +1 -0
  387. package/dist/mcp/pipeline-session.js +149 -0
  388. package/dist/mcp/pipeline-session.js.map +1 -0
  389. package/dist/mcp/server.d.ts +28 -0
  390. package/dist/mcp/server.d.ts.map +1 -0
  391. package/dist/mcp/server.js +197 -0
  392. package/dist/mcp/server.js.map +1 -0
  393. package/dist/mcp/tool-registry.d.ts +4 -0
  394. package/dist/mcp/tool-registry.d.ts.map +1 -0
  395. package/dist/mcp/tool-registry.js +525 -0
  396. package/dist/mcp/tool-registry.js.map +1 -0
  397. package/dist/renderable/codecs/adr.d.ts +4730 -0
  398. package/dist/renderable/codecs/adr.d.ts.map +1 -0
  399. package/dist/renderable/codecs/adr.js +590 -0
  400. package/dist/renderable/codecs/adr.js.map +1 -0
  401. package/dist/renderable/codecs/architecture.d.ts +4760 -0
  402. package/dist/renderable/codecs/architecture.d.ts.map +1 -0
  403. package/dist/renderable/codecs/architecture.js +524 -0
  404. package/dist/renderable/codecs/architecture.js.map +1 -0
  405. package/dist/renderable/codecs/business-rules.d.ts +4777 -0
  406. package/dist/renderable/codecs/business-rules.d.ts.map +1 -0
  407. package/dist/renderable/codecs/business-rules.js +648 -0
  408. package/dist/renderable/codecs/business-rules.js.map +1 -0
  409. package/dist/renderable/codecs/claude-module.d.ts +4710 -0
  410. package/dist/renderable/codecs/claude-module.d.ts.map +1 -0
  411. package/dist/renderable/codecs/claude-module.js +214 -0
  412. package/dist/renderable/codecs/claude-module.js.map +1 -0
  413. package/dist/renderable/codecs/composite.d.ts +84 -0
  414. package/dist/renderable/codecs/composite.d.ts.map +1 -0
  415. package/dist/renderable/codecs/composite.js +124 -0
  416. package/dist/renderable/codecs/composite.js.map +1 -0
  417. package/dist/renderable/codecs/convention-extractor.d.ts +105 -0
  418. package/dist/renderable/codecs/convention-extractor.d.ts.map +1 -0
  419. package/dist/renderable/codecs/convention-extractor.js +353 -0
  420. package/dist/renderable/codecs/convention-extractor.js.map +1 -0
  421. package/dist/renderable/codecs/decision-doc.d.ts +308 -0
  422. package/dist/renderable/codecs/decision-doc.d.ts.map +1 -0
  423. package/dist/renderable/codecs/decision-doc.js +485 -0
  424. package/dist/renderable/codecs/decision-doc.js.map +1 -0
  425. package/dist/renderable/codecs/design-review.d.ts +55 -0
  426. package/dist/renderable/codecs/design-review.d.ts.map +1 -0
  427. package/dist/renderable/codecs/design-review.js +532 -0
  428. package/dist/renderable/codecs/design-review.js.map +1 -0
  429. package/dist/renderable/codecs/diagram-utils.d.ts +62 -0
  430. package/dist/renderable/codecs/diagram-utils.d.ts.map +1 -0
  431. package/dist/renderable/codecs/diagram-utils.js +70 -0
  432. package/dist/renderable/codecs/diagram-utils.js.map +1 -0
  433. package/dist/renderable/codecs/helpers.d.ts +553 -0
  434. package/dist/renderable/codecs/helpers.d.ts.map +1 -0
  435. package/dist/renderable/codecs/helpers.js +913 -0
  436. package/dist/renderable/codecs/helpers.js.map +1 -0
  437. package/dist/renderable/codecs/index-codec.d.ts +4714 -0
  438. package/dist/renderable/codecs/index-codec.d.ts.map +1 -0
  439. package/dist/renderable/codecs/index-codec.js +250 -0
  440. package/dist/renderable/codecs/index-codec.js.map +1 -0
  441. package/dist/renderable/codecs/index.d.ts +46 -0
  442. package/dist/renderable/codecs/index.d.ts.map +1 -0
  443. package/dist/renderable/codecs/index.js +70 -0
  444. package/dist/renderable/codecs/index.js.map +1 -0
  445. package/dist/renderable/codecs/patterns.d.ts +4757 -0
  446. package/dist/renderable/codecs/patterns.d.ts.map +1 -0
  447. package/dist/renderable/codecs/patterns.js +462 -0
  448. package/dist/renderable/codecs/patterns.js.map +1 -0
  449. package/dist/renderable/codecs/planning.d.ts +14055 -0
  450. package/dist/renderable/codecs/planning.d.ts.map +1 -0
  451. package/dist/renderable/codecs/planning.js +449 -0
  452. package/dist/renderable/codecs/planning.js.map +1 -0
  453. package/dist/renderable/codecs/pr-changes.d.ts +4742 -0
  454. package/dist/renderable/codecs/pr-changes.d.ts.map +1 -0
  455. package/dist/renderable/codecs/pr-changes.js +425 -0
  456. package/dist/renderable/codecs/pr-changes.js.map +1 -0
  457. package/dist/renderable/codecs/reference.d.ts +215 -0
  458. package/dist/renderable/codecs/reference.d.ts.map +1 -0
  459. package/dist/renderable/codecs/reference.js +1578 -0
  460. package/dist/renderable/codecs/reference.js.map +1 -0
  461. package/dist/renderable/codecs/reporting.d.ts +14026 -0
  462. package/dist/renderable/codecs/reporting.d.ts.map +1 -0
  463. package/dist/renderable/codecs/reporting.js +365 -0
  464. package/dist/renderable/codecs/reporting.js.map +1 -0
  465. package/dist/renderable/codecs/requirements.d.ts +4743 -0
  466. package/dist/renderable/codecs/requirements.d.ts.map +1 -0
  467. package/dist/renderable/codecs/requirements.js +428 -0
  468. package/dist/renderable/codecs/requirements.js.map +1 -0
  469. package/dist/renderable/codecs/session.d.ts +9410 -0
  470. package/dist/renderable/codecs/session.d.ts.map +1 -0
  471. package/dist/renderable/codecs/session.js +848 -0
  472. package/dist/renderable/codecs/session.js.map +1 -0
  473. package/dist/renderable/codecs/shape-matcher.d.ts +54 -0
  474. package/dist/renderable/codecs/shape-matcher.d.ts.map +1 -0
  475. package/dist/renderable/codecs/shape-matcher.js +106 -0
  476. package/dist/renderable/codecs/shape-matcher.js.map +1 -0
  477. package/dist/renderable/codecs/shared-schema.d.ts +44 -0
  478. package/dist/renderable/codecs/shared-schema.d.ts.map +1 -0
  479. package/dist/renderable/codecs/shared-schema.js +43 -0
  480. package/dist/renderable/codecs/shared-schema.js.map +1 -0
  481. package/dist/renderable/codecs/taxonomy.d.ts +4733 -0
  482. package/dist/renderable/codecs/taxonomy.d.ts.map +1 -0
  483. package/dist/renderable/codecs/taxonomy.js +570 -0
  484. package/dist/renderable/codecs/taxonomy.js.map +1 -0
  485. package/dist/renderable/codecs/timeline.d.ts +14094 -0
  486. package/dist/renderable/codecs/timeline.d.ts.map +1 -0
  487. package/dist/renderable/codecs/timeline.js +906 -0
  488. package/dist/renderable/codecs/timeline.js.map +1 -0
  489. package/dist/renderable/codecs/types/base.d.ts +81 -0
  490. package/dist/renderable/codecs/types/base.d.ts.map +1 -0
  491. package/dist/renderable/codecs/types/base.js +56 -0
  492. package/dist/renderable/codecs/types/base.js.map +1 -0
  493. package/dist/renderable/codecs/types/index.d.ts +5 -0
  494. package/dist/renderable/codecs/types/index.d.ts.map +1 -0
  495. package/dist/renderable/codecs/types/index.js +5 -0
  496. package/dist/renderable/codecs/types/index.js.map +1 -0
  497. package/dist/renderable/codecs/validation-rules.d.ts +4773 -0
  498. package/dist/renderable/codecs/validation-rules.d.ts.map +1 -0
  499. package/dist/renderable/codecs/validation-rules.js +537 -0
  500. package/dist/renderable/codecs/validation-rules.js.map +1 -0
  501. package/dist/renderable/generate.d.ts +338 -0
  502. package/dist/renderable/generate.d.ts.map +1 -0
  503. package/dist/renderable/generate.js +437 -0
  504. package/dist/renderable/generate.js.map +1 -0
  505. package/dist/renderable/index.d.ts +36 -0
  506. package/dist/renderable/index.d.ts.map +1 -0
  507. package/dist/renderable/index.js +58 -0
  508. package/dist/renderable/index.js.map +1 -0
  509. package/dist/renderable/load-preamble.d.ts +56 -0
  510. package/dist/renderable/load-preamble.d.ts.map +1 -0
  511. package/dist/renderable/load-preamble.js +298 -0
  512. package/dist/renderable/load-preamble.js.map +1 -0
  513. package/dist/renderable/render.d.ts +61 -0
  514. package/dist/renderable/render.d.ts.map +1 -0
  515. package/dist/renderable/render.js +346 -0
  516. package/dist/renderable/render.js.map +1 -0
  517. package/dist/renderable/schema.d.ts +194 -0
  518. package/dist/renderable/schema.d.ts.map +1 -0
  519. package/dist/renderable/schema.js +197 -0
  520. package/dist/renderable/schema.js.map +1 -0
  521. package/dist/renderable/utils.d.ts +146 -0
  522. package/dist/renderable/utils.d.ts.map +1 -0
  523. package/dist/renderable/utils.js +362 -0
  524. package/dist/renderable/utils.js.map +1 -0
  525. package/dist/scanner/ast-parser.d.ts +75 -0
  526. package/dist/scanner/ast-parser.d.ts.map +1 -0
  527. package/dist/scanner/ast-parser.js +835 -0
  528. package/dist/scanner/ast-parser.js.map +1 -0
  529. package/dist/scanner/gherkin-ast-parser.d.ts +166 -0
  530. package/dist/scanner/gherkin-ast-parser.d.ts.map +1 -0
  531. package/dist/scanner/gherkin-ast-parser.js +507 -0
  532. package/dist/scanner/gherkin-ast-parser.js.map +1 -0
  533. package/dist/scanner/gherkin-scanner.d.ts +106 -0
  534. package/dist/scanner/gherkin-scanner.d.ts.map +1 -0
  535. package/dist/scanner/gherkin-scanner.js +149 -0
  536. package/dist/scanner/gherkin-scanner.js.map +1 -0
  537. package/dist/scanner/index.d.ts +85 -0
  538. package/dist/scanner/index.d.ts.map +1 -0
  539. package/dist/scanner/index.js +102 -0
  540. package/dist/scanner/index.js.map +1 -0
  541. package/dist/scanner/pattern-scanner.d.ts +83 -0
  542. package/dist/scanner/pattern-scanner.d.ts.map +1 -0
  543. package/dist/scanner/pattern-scanner.js +110 -0
  544. package/dist/scanner/pattern-scanner.js.map +1 -0
  545. package/dist/taxonomy/categories.d.ts +47 -0
  546. package/dist/taxonomy/categories.d.ts.map +1 -0
  547. package/dist/taxonomy/categories.js +175 -0
  548. package/dist/taxonomy/categories.js.map +1 -0
  549. package/dist/taxonomy/claude-section-values.d.ts +12 -0
  550. package/dist/taxonomy/claude-section-values.d.ts.map +1 -0
  551. package/dist/taxonomy/claude-section-values.js +17 -0
  552. package/dist/taxonomy/claude-section-values.js.map +1 -0
  553. package/dist/taxonomy/conventions.d.ts +13 -0
  554. package/dist/taxonomy/conventions.d.ts.map +1 -0
  555. package/dist/taxonomy/conventions.js +27 -0
  556. package/dist/taxonomy/conventions.js.map +1 -0
  557. package/dist/taxonomy/deliverable-status.d.ts +99 -0
  558. package/dist/taxonomy/deliverable-status.d.ts.map +1 -0
  559. package/dist/taxonomy/deliverable-status.js +131 -0
  560. package/dist/taxonomy/deliverable-status.js.map +1 -0
  561. package/dist/taxonomy/format-types.d.ts +17 -0
  562. package/dist/taxonomy/format-types.d.ts.map +1 -0
  563. package/dist/taxonomy/format-types.js +23 -0
  564. package/dist/taxonomy/format-types.js.map +1 -0
  565. package/dist/taxonomy/generator-options.d.ts +67 -0
  566. package/dist/taxonomy/generator-options.d.ts.map +1 -0
  567. package/dist/taxonomy/generator-options.js +75 -0
  568. package/dist/taxonomy/generator-options.js.map +1 -0
  569. package/dist/taxonomy/hierarchy-levels.d.ts +23 -0
  570. package/dist/taxonomy/hierarchy-levels.d.ts.map +1 -0
  571. package/dist/taxonomy/hierarchy-levels.js +22 -0
  572. package/dist/taxonomy/hierarchy-levels.js.map +1 -0
  573. package/dist/taxonomy/index.d.ts +35 -0
  574. package/dist/taxonomy/index.d.ts.map +1 -0
  575. package/dist/taxonomy/index.js +56 -0
  576. package/dist/taxonomy/index.js.map +1 -0
  577. package/dist/taxonomy/layer-types.d.ts +22 -0
  578. package/dist/taxonomy/layer-types.d.ts.map +1 -0
  579. package/dist/taxonomy/layer-types.js +28 -0
  580. package/dist/taxonomy/layer-types.js.map +1 -0
  581. package/dist/taxonomy/normalized-status.d.ts +99 -0
  582. package/dist/taxonomy/normalized-status.d.ts.map +1 -0
  583. package/dist/taxonomy/normalized-status.js +113 -0
  584. package/dist/taxonomy/normalized-status.js.map +1 -0
  585. package/dist/taxonomy/registry-builder.d.ts +104 -0
  586. package/dist/taxonomy/registry-builder.d.ts.map +1 -0
  587. package/dist/taxonomy/registry-builder.js +561 -0
  588. package/dist/taxonomy/registry-builder.js.map +1 -0
  589. package/dist/taxonomy/risk-levels.d.ts +16 -0
  590. package/dist/taxonomy/risk-levels.d.ts.map +1 -0
  591. package/dist/taxonomy/risk-levels.js +15 -0
  592. package/dist/taxonomy/risk-levels.js.map +1 -0
  593. package/dist/taxonomy/severity-types.d.ts +6 -0
  594. package/dist/taxonomy/severity-types.d.ts.map +1 -0
  595. package/dist/taxonomy/severity-types.js +5 -0
  596. package/dist/taxonomy/severity-types.js.map +1 -0
  597. package/dist/taxonomy/status-values.d.ts +39 -0
  598. package/dist/taxonomy/status-values.d.ts.map +1 -0
  599. package/dist/taxonomy/status-values.js +42 -0
  600. package/dist/taxonomy/status-values.js.map +1 -0
  601. package/dist/types/branded.d.ts +89 -0
  602. package/dist/types/branded.d.ts.map +1 -0
  603. package/dist/types/branded.js +57 -0
  604. package/dist/types/branded.js.map +1 -0
  605. package/dist/types/errors.d.ts +342 -0
  606. package/dist/types/errors.d.ts.map +1 -0
  607. package/dist/types/errors.js +251 -0
  608. package/dist/types/errors.js.map +1 -0
  609. package/dist/types/index.d.ts +41 -0
  610. package/dist/types/index.d.ts.map +1 -0
  611. package/dist/types/index.js +5 -0
  612. package/dist/types/index.js.map +1 -0
  613. package/dist/types/result.d.ts +78 -0
  614. package/dist/types/result.d.ts.map +1 -0
  615. package/dist/types/result.js +78 -0
  616. package/dist/types/result.js.map +1 -0
  617. package/dist/utils/collection-utils.d.ts +49 -0
  618. package/dist/utils/collection-utils.d.ts.map +1 -0
  619. package/dist/utils/collection-utils.js +58 -0
  620. package/dist/utils/collection-utils.js.map +1 -0
  621. package/dist/utils/id-utils.d.ts +46 -0
  622. package/dist/utils/id-utils.d.ts.map +1 -0
  623. package/dist/utils/id-utils.js +51 -0
  624. package/dist/utils/id-utils.js.map +1 -0
  625. package/dist/utils/index.d.ts +21 -0
  626. package/dist/utils/index.d.ts.map +1 -0
  627. package/dist/utils/index.js +21 -0
  628. package/dist/utils/index.js.map +1 -0
  629. package/dist/utils/string-utils.d.ts +150 -0
  630. package/dist/utils/string-utils.d.ts.map +1 -0
  631. package/dist/utils/string-utils.js +281 -0
  632. package/dist/utils/string-utils.js.map +1 -0
  633. package/dist/validation/anti-patterns.d.ts +134 -0
  634. package/dist/validation/anti-patterns.d.ts.map +1 -0
  635. package/dist/validation/anti-patterns.js +307 -0
  636. package/dist/validation/anti-patterns.js.map +1 -0
  637. package/dist/validation/dod-validator.d.ts +94 -0
  638. package/dist/validation/dod-validator.d.ts.map +1 -0
  639. package/dist/validation/dod-validator.js +198 -0
  640. package/dist/validation/dod-validator.js.map +1 -0
  641. package/dist/validation/fsm/index.d.ts +59 -0
  642. package/dist/validation/fsm/index.d.ts.map +1 -0
  643. package/dist/validation/fsm/index.js +64 -0
  644. package/dist/validation/fsm/index.js.map +1 -0
  645. package/dist/validation/fsm/states.d.ts +93 -0
  646. package/dist/validation/fsm/states.d.ts.map +1 -0
  647. package/dist/validation/fsm/states.js +98 -0
  648. package/dist/validation/fsm/states.js.map +1 -0
  649. package/dist/validation/fsm/transitions.d.ts +100 -0
  650. package/dist/validation/fsm/transitions.d.ts.map +1 -0
  651. package/dist/validation/fsm/transitions.js +122 -0
  652. package/dist/validation/fsm/transitions.js.map +1 -0
  653. package/dist/validation/fsm/validator.d.ts +163 -0
  654. package/dist/validation/fsm/validator.d.ts.map +1 -0
  655. package/dist/validation/fsm/validator.js +205 -0
  656. package/dist/validation/fsm/validator.js.map +1 -0
  657. package/dist/validation/index.d.ts +23 -0
  658. package/dist/validation/index.d.ts.map +1 -0
  659. package/dist/validation/index.js +25 -0
  660. package/dist/validation/index.js.map +1 -0
  661. package/dist/validation/types.d.ts +136 -0
  662. package/dist/validation/types.d.ts.map +1 -0
  663. package/dist/validation/types.js +56 -0
  664. package/dist/validation/types.js.map +1 -0
  665. package/dist/validation-schemas/codec-utils.d.ts +188 -0
  666. package/dist/validation-schemas/codec-utils.d.ts.map +1 -0
  667. package/dist/validation-schemas/codec-utils.js +258 -0
  668. package/dist/validation-schemas/codec-utils.js.map +1 -0
  669. package/dist/validation-schemas/config.d.ts +99 -0
  670. package/dist/validation-schemas/config.d.ts.map +1 -0
  671. package/dist/validation-schemas/config.js +178 -0
  672. package/dist/validation-schemas/config.js.map +1 -0
  673. package/dist/validation-schemas/doc-directive.d.ts +195 -0
  674. package/dist/validation-schemas/doc-directive.d.ts.map +1 -0
  675. package/dist/validation-schemas/doc-directive.js +239 -0
  676. package/dist/validation-schemas/doc-directive.js.map +1 -0
  677. package/dist/validation-schemas/dual-source.d.ts +167 -0
  678. package/dist/validation-schemas/dual-source.d.ts.map +1 -0
  679. package/dist/validation-schemas/dual-source.js +168 -0
  680. package/dist/validation-schemas/dual-source.js.map +1 -0
  681. package/dist/validation-schemas/export-info.d.ts +53 -0
  682. package/dist/validation-schemas/export-info.d.ts.map +1 -0
  683. package/dist/validation-schemas/export-info.js +101 -0
  684. package/dist/validation-schemas/export-info.js.map +1 -0
  685. package/dist/validation-schemas/extracted-pattern.d.ts +351 -0
  686. package/dist/validation-schemas/extracted-pattern.d.ts.map +1 -0
  687. package/dist/validation-schemas/extracted-pattern.js +459 -0
  688. package/dist/validation-schemas/extracted-pattern.js.map +1 -0
  689. package/dist/validation-schemas/extracted-shape.d.ts +200 -0
  690. package/dist/validation-schemas/extracted-shape.d.ts.map +1 -0
  691. package/dist/validation-schemas/extracted-shape.js +182 -0
  692. package/dist/validation-schemas/extracted-shape.js.map +1 -0
  693. package/dist/validation-schemas/feature.d.ts +554 -0
  694. package/dist/validation-schemas/feature.d.ts.map +1 -0
  695. package/dist/validation-schemas/feature.js +262 -0
  696. package/dist/validation-schemas/feature.js.map +1 -0
  697. package/dist/validation-schemas/index.d.ts +15 -0
  698. package/dist/validation-schemas/index.d.ts.map +1 -0
  699. package/dist/validation-schemas/index.js +32 -0
  700. package/dist/validation-schemas/index.js.map +1 -0
  701. package/dist/validation-schemas/lint.d.ts +46 -0
  702. package/dist/validation-schemas/lint.d.ts.map +1 -0
  703. package/dist/validation-schemas/lint.js +45 -0
  704. package/dist/validation-schemas/lint.js.map +1 -0
  705. package/dist/validation-schemas/master-dataset.d.ts +8299 -0
  706. package/dist/validation-schemas/master-dataset.d.ts.map +1 -0
  707. package/dist/validation-schemas/master-dataset.js +275 -0
  708. package/dist/validation-schemas/master-dataset.js.map +1 -0
  709. package/dist/validation-schemas/output-schemas.d.ts +183 -0
  710. package/dist/validation-schemas/output-schemas.d.ts.map +1 -0
  711. package/dist/validation-schemas/output-schemas.js +149 -0
  712. package/dist/validation-schemas/output-schemas.js.map +1 -0
  713. package/dist/validation-schemas/scenario-ref.d.ts +80 -0
  714. package/dist/validation-schemas/scenario-ref.d.ts.map +1 -0
  715. package/dist/validation-schemas/scenario-ref.js +73 -0
  716. package/dist/validation-schemas/scenario-ref.js.map +1 -0
  717. package/dist/validation-schemas/tag-registry.d.ts +210 -0
  718. package/dist/validation-schemas/tag-registry.d.ts.map +1 -0
  719. package/dist/validation-schemas/tag-registry.js +248 -0
  720. package/dist/validation-schemas/tag-registry.js.map +1 -0
  721. package/dist/validation-schemas/workflow-config.d.ts +125 -0
  722. package/dist/validation-schemas/workflow-config.d.ts.map +1 -0
  723. package/dist/validation-schemas/workflow-config.js +138 -0
  724. package/dist/validation-schemas/workflow-config.js.map +1 -0
  725. package/docs/ANNOTATION-GUIDE.md +271 -0
  726. package/docs/ARCHITECTURE.md +1636 -0
  727. package/docs/CONFIGURATION.md +337 -0
  728. package/docs/DOCS-GAP-ANALYSIS.md +811 -0
  729. package/docs/GHERKIN-PATTERNS.md +366 -0
  730. package/docs/INDEX.md +345 -0
  731. package/docs/MCP-SETUP.md +140 -0
  732. package/docs/METHODOLOGY.md +240 -0
  733. package/docs/PROCESS-API.md +65 -0
  734. package/docs/PROCESS-GUARD.md +341 -0
  735. package/docs/SESSION-GUIDES.md +391 -0
  736. package/docs/TAXONOMY.md +106 -0
  737. package/docs/VALIDATION.md +418 -0
  738. package/docs-live/ARCHITECTURE.md +362 -0
  739. package/docs-live/BUSINESS-RULES.md +24 -0
  740. package/docs-live/CHANGELOG-GENERATED.md +375 -0
  741. package/docs-live/DECISIONS.md +78 -0
  742. package/docs-live/INDEX.md +231 -0
  743. package/docs-live/PRODUCT-AREAS.md +255 -0
  744. package/docs-live/TAXONOMY.md +202 -0
  745. package/docs-live/VALIDATION-RULES.md +119 -0
  746. package/docs-live/_claude-md/annotation/annotation-overview.md +26 -0
  747. package/docs-live/_claude-md/annotation/annotation-reference.md +213 -0
  748. package/docs-live/_claude-md/architecture/architecture-codecs.md +160 -0
  749. package/docs-live/_claude-md/architecture/architecture-types.md +32 -0
  750. package/docs-live/_claude-md/architecture/reference-sample.md +162 -0
  751. package/docs-live/_claude-md/authoring/gherkin-authoring-guide.md +245 -0
  752. package/docs-live/_claude-md/configuration/configuration-guide.md +216 -0
  753. package/docs-live/_claude-md/configuration/configuration-overview.md +37 -0
  754. package/docs-live/_claude-md/core-types/core-types-overview.md +20 -0
  755. package/docs-live/_claude-md/data-api/data-api-overview.md +39 -0
  756. package/docs-live/_claude-md/generation/generation-overview.md +30 -0
  757. package/docs-live/_claude-md/process/process-overview.md +127 -0
  758. package/docs-live/_claude-md/validation/process-guard.md +185 -0
  759. package/docs-live/_claude-md/validation/validation-overview.md +37 -0
  760. package/docs-live/_claude-md/validation/validation-tools-guide.md +242 -0
  761. package/docs-live/_claude-md/workflow/session-workflow-guide.md +141 -0
  762. package/docs-live/business-rules/annotation.md +1462 -0
  763. package/docs-live/business-rules/configuration.md +465 -0
  764. package/docs-live/business-rules/core-types.md +531 -0
  765. package/docs-live/business-rules/data-api.md +1403 -0
  766. package/docs-live/business-rules/generation.md +4726 -0
  767. package/docs-live/business-rules/process.md +122 -0
  768. package/docs-live/business-rules/validation.md +998 -0
  769. package/docs-live/decisions/adr-001-taxonomy-canonical-values.md +197 -0
  770. package/docs-live/decisions/adr-002-gherkin-only-testing.md +57 -0
  771. package/docs-live/decisions/adr-003-source-first-pattern-architecture.md +147 -0
  772. package/docs-live/decisions/adr-004-session-workflow-commands.md +137 -0
  773. package/docs-live/decisions/adr-005-codec-based-markdown-rendering.md +150 -0
  774. package/docs-live/decisions/adr-006-single-read-model-architecture.md +136 -0
  775. package/docs-live/decisions/adr-021-doc-generation-proof-of-concept.md +489 -0
  776. package/docs-live/product-areas/ANNOTATION.md +591 -0
  777. package/docs-live/product-areas/CONFIGURATION.md +1048 -0
  778. package/docs-live/product-areas/CORE-TYPES.md +221 -0
  779. package/docs-live/product-areas/DATA-API.md +850 -0
  780. package/docs-live/product-areas/GENERATION.md +1200 -0
  781. package/docs-live/product-areas/PROCESS.md +351 -0
  782. package/docs-live/product-areas/VALIDATION.md +1135 -0
  783. package/docs-live/reference/ANNOTATION-REFERENCE.md +232 -0
  784. package/docs-live/reference/ARCHITECTURE-CODECS.md +675 -0
  785. package/docs-live/reference/ARCHITECTURE-TYPES.md +436 -0
  786. package/docs-live/reference/CONFIGURATION-GUIDE.md +235 -0
  787. package/docs-live/reference/GHERKIN-AUTHORING-GUIDE.md +270 -0
  788. package/docs-live/reference/PROCESS-API-RECIPES.md +476 -0
  789. package/docs-live/reference/PROCESS-API-REFERENCE.md +63 -0
  790. package/docs-live/reference/PROCESS-GUARD-REFERENCE.md +258 -0
  791. package/docs-live/reference/REFERENCE-SAMPLE.md +1135 -0
  792. package/docs-live/reference/SESSION-WORKFLOW-GUIDE.md +384 -0
  793. package/docs-live/reference/VALIDATION-TOOLS-GUIDE.md +263 -0
  794. package/docs-live/taxonomy/categories.md +33 -0
  795. package/docs-live/taxonomy/format-types.md +67 -0
  796. package/docs-live/taxonomy/metadata-tags.md +693 -0
  797. package/docs-live/validation/error-catalog.md +78 -0
  798. package/docs-live/validation/fsm-transitions.md +50 -0
  799. package/docs-live/validation/protection-levels.md +51 -0
  800. package/package.json +233 -0
@@ -0,0 +1,835 @@
1
+ /**
2
+ * @architect
3
+ * @architect-core @architect-scanner
4
+ * @architect-pattern TypeScript AST Parser
5
+ * @architect-status completed
6
+ * @architect-arch-role infrastructure
7
+ * @architect-arch-context scanner
8
+ * @architect-arch-layer infrastructure
9
+ * @architect-uses TagRegistry, DocDirectiveSchema, typescript-estree
10
+ * @architect-used-by Pattern Scanner, Doc Extractor
11
+ * @architect-usecase "When parsing JSDoc comments for @architect-* directives"
12
+ * @architect-usecase "When extracting code blocks following documentation comments"
13
+ *
14
+ * ## TypeScript AST Parser - JSDoc Directive Extraction
15
+ *
16
+ * Parses TypeScript source files using @typescript-eslint/typescript-estree
17
+ * to extract @architect-* directives with their associated code blocks.
18
+ * First stage of the three-stage pipeline: Scanner → Extractor → Generator.
19
+ *
20
+ * ### When to Use
21
+ *
22
+ * - Scanning TypeScript files for documentation directives
23
+ * - Extracting code snippets following JSDoc comments
24
+ * - Building pattern metadata from JSDoc tags
25
+ *
26
+ * ### Key Concepts
27
+ *
28
+ * - **Data-Driven Extraction**: Tag formats defined in registry, not hardcoded
29
+ * - **Schema-First Validation**: All directives validated against Zod schemas
30
+ * - **Result Monad**: Returns Result<T, E> for explicit error handling
31
+ */
32
+ import { Result } from '../types/index.js';
33
+ import { parse } from '@typescript-eslint/typescript-estree';
34
+ import { asDirectiveTag, createDirectiveValidationError, createFileParseError, } from '../types/index.js';
35
+ import { DocDirectiveSchema, createDefaultTagRegistry, } from '../validation-schemas/index.js';
36
+ import { createRegexBuilders } from '../config/regex-builders.js';
37
+ /**
38
+ * Module-level regex cache for performance optimization.
39
+ *
40
+ * Regex compilation is expensive (~50μs per pattern). In hot paths where
41
+ * the same patterns are used repeatedly (e.g., extracting metadata tags),
42
+ * caching provides ~80x fewer RegExp instantiations.
43
+ *
44
+ * @internal
45
+ */
46
+ const REGEX_CACHE = new Map();
47
+ /**
48
+ * Get or create a cached RegExp instance.
49
+ *
50
+ * @param pattern - Regex pattern string
51
+ * @param flags - Optional regex flags (g, i, m, etc.)
52
+ * @returns Cached or newly created RegExp
53
+ *
54
+ * @internal
55
+ */
56
+ function getCachedRegex(pattern, flags) {
57
+ const key = flags ? `${pattern}|${flags}` : pattern;
58
+ let regex = REGEX_CACHE.get(key);
59
+ if (!regex) {
60
+ regex = new RegExp(pattern, flags);
61
+ REGEX_CACHE.set(key, regex);
62
+ }
63
+ // Reset lastIndex for stateful regexes (those with 'g' flag)
64
+ if (regex.global) {
65
+ regex.lastIndex = 0;
66
+ }
67
+ return regex;
68
+ }
69
+ /**
70
+ * Extract single value from comment text for format="value"
71
+ *
72
+ * @example
73
+ * ```
74
+ * @architect-pattern MyPattern
75
+ * ```
76
+ */
77
+ function extractSingleValue(commentText, fullTag) {
78
+ const regex = getCachedRegex(`(?:^|\\n)\\s*\\*?\\s*${escapeRegex(fullTag)}\\s+(.+?)(?:\\n|\\*|$)`);
79
+ const match = regex.exec(commentText);
80
+ return match?.[1]?.trim();
81
+ }
82
+ /**
83
+ * Extract enum value from comment text for format="enum"
84
+ *
85
+ * @example
86
+ * ```
87
+ * @architect-status completed
88
+ * ```
89
+ */
90
+ function extractEnumValue(commentText, fullTag, validValues) {
91
+ const valuesPattern = validValues.join('|');
92
+ const regex = getCachedRegex(`${escapeRegex(fullTag)}\\s+(${valuesPattern})`);
93
+ const match = regex.exec(commentText);
94
+ return match?.[1];
95
+ }
96
+ /**
97
+ * Extract quoted value from comment text for format="quoted-value"
98
+ *
99
+ * @example
100
+ * ```
101
+ * @architect-usecase "When implementing a new command"
102
+ * ```
103
+ */
104
+ function extractQuotedValue(commentText, fullTag) {
105
+ const regex = getCachedRegex(`${escapeRegex(fullTag)}\\s+(?:"([^"]+)"|([^\\n*]+?)(?:\\n|\\*|$))`, 'g');
106
+ const values = [];
107
+ let match;
108
+ while ((match = regex.exec(commentText)) !== null) {
109
+ const value = (match[1] ?? match[2])?.trim();
110
+ if (value) {
111
+ values.push(value);
112
+ }
113
+ }
114
+ return values;
115
+ }
116
+ /**
117
+ * Extract comma-separated values from comment text for format="csv"
118
+ *
119
+ * @example
120
+ * ```
121
+ * @architect-uses PatternA, PatternB, PatternC
122
+ * ```
123
+ */
124
+ function extractCsvValue(commentText, fullTag) {
125
+ const regex = getCachedRegex(`${escapeRegex(fullTag)}\\s+([^\\n@*]+)`);
126
+ const match = regex.exec(commentText);
127
+ if (!match?.[1])
128
+ return undefined;
129
+ return match[1]
130
+ .split(',')
131
+ .map((s) => s.trim())
132
+ .filter(Boolean);
133
+ }
134
+ /**
135
+ * Extract number value from comment text for format="number"
136
+ *
137
+ * @example
138
+ * ```
139
+ * @architect-phase 14
140
+ * ```
141
+ */
142
+ function extractNumberValue(commentText, fullTag) {
143
+ const regex = getCachedRegex(`${escapeRegex(fullTag)}\\s+(\\d+)`);
144
+ const match = regex.exec(commentText);
145
+ return match?.[1] ? parseInt(match[1], 10) : undefined;
146
+ }
147
+ /**
148
+ * Check if flag is present in comment text for format="flag"
149
+ *
150
+ * @example
151
+ * ```
152
+ * @architect-core
153
+ * ```
154
+ */
155
+ function checkFlagPresent(commentText, fullTag) {
156
+ const regex = getCachedRegex(`${escapeRegex(fullTag)}(?:\\s|$|\\*)`);
157
+ return regex.test(commentText);
158
+ }
159
+ /**
160
+ * Escape special regex characters
161
+ */
162
+ function escapeRegex(str) {
163
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
164
+ }
165
+ /**
166
+ * Build regex patterns for directive parsing from registry configuration.
167
+ *
168
+ * @param registry - Tag registry with prefix and opt-in tag configuration
169
+ * @returns Object with compiled regex patterns for directive parsing
170
+ *
171
+ * @internal
172
+ */
173
+ function buildDirectivePatterns(registry) {
174
+ // Extract prefix without @ for pattern construction
175
+ const prefixWithoutAt = registry.tagPrefix.startsWith('@')
176
+ ? registry.tagPrefix.substring(1)
177
+ : registry.tagPrefix;
178
+ const escapedPrefixWithoutAt = escapeRegex(prefixWithoutAt);
179
+ // Extract opt-in tag without @ for pattern construction
180
+ const optInWithoutAt = registry.fileOptInTag.startsWith('@')
181
+ ? registry.fileOptInTag.substring(1)
182
+ : registry.fileOptInTag;
183
+ const escapedOptInWithoutAt = escapeRegex(optInWithoutAt);
184
+ return {
185
+ // Match directive tags: @prefix-pattern, @prefix-core, etc. (prefix includes trailing -)
186
+ tagRegex: new RegExp(`@${escapedPrefixWithoutAt}[\\w-]+`, 'g'),
187
+ // Check if line starts with opt-in or directive
188
+ // e.g., ^@architect or ^@architect-pattern
189
+ startsWithOptInOrDirective: new RegExp(`^@${escapedOptInWithoutAt}(?:-[\\w-]+)?`),
190
+ // Match opt-in tag for removal (not followed by -)
191
+ // e.g., @architect followed by whitespace or end
192
+ optInTagPattern: new RegExp(`@${escapedOptInWithoutAt}(?!-)(\\s|$)?`, 'g'),
193
+ // Match any @ tag that is NOT our prefix
194
+ // e.g., @param, @returns, @example (not @architect)
195
+ nonOptInAtTagPattern: new RegExp(`^@(?!${escapedOptInWithoutAt})`),
196
+ };
197
+ }
198
+ /**
199
+ * Build regex pattern for value-taking tags from registry.
200
+ *
201
+ * Value-taking tags are all metadata tags except those with format="flag".
202
+ * This pattern detects when a line contains a metadata directive whose
203
+ * value should NOT be captured as inline description text.
204
+ *
205
+ * @param registry - Tag registry to extract metadata tags from
206
+ * @returns RegExp pattern string (without surrounding slashes)
207
+ *
208
+ * @internal
209
+ */
210
+ function buildValueTakingTagsPattern(registry) {
211
+ const valueTakingTags = registry.metadataTags
212
+ .filter((tag) => tag.format !== 'flag')
213
+ .map((tag) => escapeRegex(tag.tag));
214
+ const tagPrefix = escapeRegex(registry.tagPrefix);
215
+ return `${tagPrefix}(?:${valueTakingTags.join('|')})\\s`;
216
+ }
217
+ /**
218
+ * Pre-compiled regex for detecting value-taking metadata directives.
219
+ *
220
+ * Built at module load time from the default registry to:
221
+ * 1. Avoid regex compilation on every parse call
222
+ * 2. Eliminate hardcoded tag lists that fall out of sync with registry
223
+ *
224
+ * Matches lines containing tags like @architect-pattern, @architect-status, etc.
225
+ * Does NOT match flag-only tags like @architect-core.
226
+ *
227
+ * @internal
228
+ */
229
+ const _VALUE_TAKING_TAGS_REGEX = (() => {
230
+ const defaultRegistry = createDefaultTagRegistry();
231
+ return new RegExp(buildValueTakingTagsPattern(defaultRegistry));
232
+ })();
233
+ /**
234
+ * Extract metadata tag value based on format type
235
+ *
236
+ * Dispatches to the appropriate extraction function based on the tag's format.
237
+ * This enables data-driven metadata extraction without hardcoded patterns.
238
+ *
239
+ * @param commentText - Full JSDoc comment text
240
+ * @param tagDef - Metadata tag definition from registry
241
+ * @param prefix - Tag prefix (e.g., "@architect-")
242
+ * @returns Extracted value in appropriate format, or undefined if not found
243
+ */
244
+ function extractMetadataTag(commentText, tagDef, prefix) {
245
+ const fullTag = `${prefix}${tagDef.tag}`;
246
+ switch (tagDef.format) {
247
+ case 'value':
248
+ return extractSingleValue(commentText, fullTag);
249
+ case 'enum':
250
+ return extractEnumValue(commentText, fullTag, tagDef.values ?? []);
251
+ case 'quoted-value':
252
+ // For repeatable tags, return array; otherwise return single value
253
+ if (tagDef.repeatable) {
254
+ const values = extractQuotedValue(commentText, fullTag);
255
+ return values.length > 0 ? values : undefined;
256
+ }
257
+ else {
258
+ const values = extractQuotedValue(commentText, fullTag);
259
+ return values[0];
260
+ }
261
+ case 'csv':
262
+ return extractCsvValue(commentText, fullTag);
263
+ case 'number':
264
+ return extractNumberValue(commentText, fullTag);
265
+ case 'flag':
266
+ return checkFlagPresent(commentText, fullTag);
267
+ default:
268
+ return undefined;
269
+ }
270
+ }
271
+ /**
272
+ * Parses TypeScript content and extracts all @architect-* directives
273
+ * with their associated code blocks and exports.
274
+ *
275
+ * **Error Handling**: Returns Result type to surface parse errors:
276
+ * - Ok: Contains successfully parsed directives and any skipped directive errors
277
+ * - Err: Contains FileParseError when the entire file fails to parse
278
+ *
279
+ * @param content - TypeScript file content
280
+ * @param filePath - Path to TypeScript file (for error messages)
281
+ * @param registry - Tag registry for metadata extraction (optional, defaults to generic registry)
282
+ * @returns Result with parsed directives or parse error
283
+ *
284
+ * @example
285
+ * ```typescript
286
+ * const content = await fs.readFile(filePath, "utf-8");
287
+ * const result = parseFileDirectives(content, filePath, registry);
288
+ *
289
+ * if (Result.isOk(result)) {
290
+ * const { directives, skippedDirectives } = result.value;
291
+ * console.log(`Parsed ${directives.length} directives`);
292
+ * console.log(`Skipped ${skippedDirectives.length} invalid directives`);
293
+ * } else {
294
+ * console.error(`Parse error: ${result.error.message}`);
295
+ * }
296
+ * ```
297
+ */
298
+ export function parseFileDirectives(content, filePath, registry) {
299
+ const effectiveRegistry = registry ?? createDefaultTagRegistry();
300
+ let ast;
301
+ try {
302
+ ast = parse(content, {
303
+ loc: true,
304
+ range: true,
305
+ comment: true,
306
+ tokens: false,
307
+ });
308
+ }
309
+ catch (error) {
310
+ // Surface parse errors instead of silently returning empty
311
+ const tsError = error;
312
+ const location = 'lineNumber' in tsError && 'column' in tsError
313
+ ? { line: tsError.lineNumber, column: tsError.column }
314
+ : undefined;
315
+ return Result.err(createFileParseError(filePath, tsError.message || 'Unknown parse error', location, error));
316
+ }
317
+ const results = [];
318
+ const skippedDirectives = [];
319
+ const comments = ast.comments ?? [];
320
+ // Create regex builders for directive detection using registry configuration
321
+ const builders = createRegexBuilders(effectiveRegistry.tagPrefix, effectiveRegistry.fileOptInTag);
322
+ for (const comment of comments) {
323
+ if (comment.type !== 'Block')
324
+ continue;
325
+ const commentText = comment.value;
326
+ if (!builders.hasDocDirectives(commentText))
327
+ continue;
328
+ // Extract directive information (with schema validation)
329
+ if (!comment.loc)
330
+ continue; // Skip if no location info
331
+ const directiveResult = parseDirective(commentText, comment.loc, filePath, effectiveRegistry);
332
+ if (Result.isErr(directiveResult)) {
333
+ // Collect directive validation errors instead of silently skipping
334
+ skippedDirectives.push(directiveResult.error);
335
+ continue;
336
+ }
337
+ const directive = directiveResult.value;
338
+ if (directive.tags.length === 0)
339
+ continue;
340
+ // Find the code block following this comment
341
+ const codeBlock = extractCodeBlockAfterComment(content, ast, comment);
342
+ if (!codeBlock)
343
+ continue;
344
+ // Extract exports from the code block (DD-1: thread content for signature slicing)
345
+ const exports = extractExportsFromBlock(ast, codeBlock, content);
346
+ results.push({
347
+ directive,
348
+ code: codeBlock.code,
349
+ exports,
350
+ });
351
+ }
352
+ return Result.ok({ directives: results, skippedDirectives });
353
+ }
354
+ /**
355
+ * Parse JSDoc comment to extract directive information
356
+ *
357
+ * **Schema-First Enforcement**: Validates constructed directive against schema
358
+ * to ensure data integrity at the boundary.
359
+ *
360
+ * **Directive-Level Tag Extraction**: Only extracts `@architect-*` tags from
361
+ * the directive section (first lines before description content). Tags mentioned
362
+ * in descriptions, examples, or other sections are NOT extracted.
363
+ *
364
+ * JSDoc structure:
365
+ * ```
366
+ * /**
367
+ * * @architect-core @architect-api <- Directive tags (extracted)
368
+ * *
369
+ * * Description mentioning @architect-x <- NOT extracted
370
+ * * @example
371
+ * * hasTag('@architect-y'); <- NOT extracted
372
+ * *\/
373
+ * ```
374
+ */
375
+ function parseDirective(commentText, loc, filePath, registry) {
376
+ const lines = commentText.split('\n').map((l) => l.trim().replace(/^\*\s?/, ''));
377
+ // Build registry-based regex patterns for directive parsing
378
+ const patterns = buildDirectivePatterns(registry);
379
+ const valueTakingTagsRegex = new RegExp(buildValueTakingTagsPattern(registry));
380
+ // Extract directive tags ONLY from directive section
381
+ // Directive section = lines where tags appear at the START (not mentioned in text)
382
+ // A directive tag line: "@architect-core @architect-api Some brief description"
383
+ // A description line: "This works with @architect-api patterns" (tag not at start)
384
+ const tags = [];
385
+ let inlineDescription = ''; // Capture description on same line as tags
386
+ for (const line of lines) {
387
+ const trimmedLine = line.trim();
388
+ // Skip empty lines at the start (before we've found any tags)
389
+ if (trimmedLine === '' && tags.length === 0)
390
+ continue;
391
+ // Stop at empty lines after we've found tags (description section started)
392
+ if (trimmedLine === '' && tags.length > 0)
393
+ break;
394
+ // Check if line starts with a standard JSDoc tag (@param, @returns, @example, etc.)
395
+ // but NOT our doc directives
396
+ if (patterns.nonOptInAtTagPattern.exec(trimmedLine)) {
397
+ break; // Stop at other @ tags
398
+ }
399
+ // Check if line STARTS with opt-in or directive tag
400
+ // e.g., @architect (no suffix) = file opt-in tag
401
+ // e.g., @architect-* (with suffix) = section tag to extract
402
+ const startsWithDocTag = patterns.startsWithOptInOrDirective.exec(trimmedLine);
403
+ if (startsWithDocTag) {
404
+ // This is a directive line - extract only directive tags (with suffix)
405
+ // Skip opt-in tag (no suffix) which is just the opt-in marker
406
+ // e.g., "@architect @architect-core Brief description" extracts only @architect-core
407
+ let match;
408
+ let lastTagEnd = 0;
409
+ patterns.tagRegex.lastIndex = 0;
410
+ while ((match = patterns.tagRegex.exec(trimmedLine)) !== null) {
411
+ // Only extract tags that are at the start (consecutive, separated by whitespace or opt-in)
412
+ const textBefore = trimmedLine.slice(lastTagEnd, match.index).trim();
413
+ // Allow opt-in tag and whitespace between directive tags
414
+ const cleanedBefore = textBefore.replace(patterns.optInTagPattern, '').trim();
415
+ if (lastTagEnd > 0 && cleanedBefore !== '') {
416
+ // There's non-whitespace content between tags - this tag is in description
417
+ break;
418
+ }
419
+ tags.push(match[0]);
420
+ lastTagEnd = match.index + match[0].length;
421
+ }
422
+ // Capture any description text after the tags on the same line
423
+ // e.g., "@architect-core Brief description on same line" -> "Brief description on same line"
424
+ // But skip lines with metadata directives that take values (all non-flag tags)
425
+ // to prevent their values from leaking into the description
426
+ // (e.g., "@architect-phase 01" would incorrectly capture "01")
427
+ const hasMetadataDirective = valueTakingTagsRegex.test(trimmedLine);
428
+ if (!hasMetadataDirective) {
429
+ const textAfterTags = trimmedLine
430
+ .slice(lastTagEnd)
431
+ .replace(patterns.optInTagPattern, '') // Remove any opt-in markers
432
+ .trim();
433
+ if (textAfterTags) {
434
+ inlineDescription = textAfterTags;
435
+ }
436
+ }
437
+ // Continue to next line - there might be more directive tags
438
+ }
439
+ else {
440
+ // Line doesn't start with doc tag - it's description content
441
+ break;
442
+ }
443
+ }
444
+ // Data-driven metadata extraction using registry
445
+ // Build map of metadata tag results: tagName -> extracted value
446
+ const metadataResults = new Map();
447
+ for (const tagDef of registry.metadataTags) {
448
+ const result = extractMetadataTag(commentText, tagDef, registry.tagPrefix);
449
+ if (result !== undefined) {
450
+ metadataResults.set(tagDef.tag, result);
451
+ }
452
+ }
453
+ // Map extracted metadata to directive fields
454
+ // This mapping translates registry tag names to DocDirective field names
455
+ const patternName = metadataResults.get('pattern');
456
+ const status = metadataResults.get('status');
457
+ const isCore = metadataResults.get('core');
458
+ const useCases = metadataResults.get('usecase');
459
+ const uses = metadataResults.get('uses');
460
+ const usedBy = metadataResults.get('used-by');
461
+ const phase = metadataResults.get('phase');
462
+ const brief = metadataResults.get('brief');
463
+ const dependsOn = metadataResults.get('depends-on');
464
+ const enables = metadataResults.get('enables');
465
+ // UML-inspired relationship tags (PatternRelationshipModel)
466
+ const implementsPatterns = metadataResults.get('implements');
467
+ const extendsPattern = metadataResults.get('extends');
468
+ // Cross-reference and API navigation tags (PatternRelationshipModel enhancement)
469
+ const seeAlso = metadataResults.get('see-also');
470
+ const apiRef = metadataResults.get('api-ref');
471
+ // Architecture diagram generation tags
472
+ const archRole = metadataResults.get('arch-role');
473
+ const archContext = metadataResults.get('arch-context');
474
+ const archLayer = metadataResults.get('arch-layer');
475
+ const includeRaw = metadataResults.get('include');
476
+ const include = Array.isArray(includeRaw) ? includeRaw : undefined;
477
+ // Design session stub metadata tags
478
+ const target = metadataResults.get('target');
479
+ const since = metadataResults.get('since');
480
+ // Shape extraction tags
481
+ const extractShapes = metadataResults.get('extract-shapes');
482
+ // PRD metadata tags (product area, user role, business value)
483
+ const productArea = metadataResults.get('product-area');
484
+ // Convention tags for reference document generation
485
+ const convention = metadataResults.get('convention');
486
+ // Claude module generation tags
487
+ const claudeModule = metadataResults.get('claude-module');
488
+ const claudeSection = metadataResults.get('claude-section');
489
+ const claudeTags = metadataResults.get('claude-tags');
490
+ // Extract "### When to Use" section or "**When to use:**" inline format
491
+ // Returns array of bullet points, stopping at section boundaries
492
+ // This is a special format that extracts from description, not a metadata tag
493
+ const whenToUse = extractWhenToUse(commentText, registry.fileOptInTag);
494
+ // Extract description and examples
495
+ const descriptionLines = [];
496
+ const examples = [];
497
+ let inExample = false;
498
+ let exampleBuffer = [];
499
+ for (const line of lines) {
500
+ if (line.startsWith('@example')) {
501
+ inExample = true;
502
+ if (exampleBuffer.length > 0) {
503
+ examples.push(exampleBuffer.join('\n'));
504
+ exampleBuffer = [];
505
+ }
506
+ continue;
507
+ }
508
+ if (line.startsWith('@param') || line.startsWith('@returns') || line.startsWith('@')) {
509
+ if (inExample && exampleBuffer.length > 0) {
510
+ examples.push(exampleBuffer.join('\n'));
511
+ exampleBuffer = [];
512
+ }
513
+ inExample = false;
514
+ continue;
515
+ }
516
+ if (inExample) {
517
+ // Remove code fence markers
518
+ if (!line.startsWith('```')) {
519
+ exampleBuffer.push(line);
520
+ }
521
+ }
522
+ else if (!line.startsWith('@')) {
523
+ descriptionLines.push(line);
524
+ }
525
+ }
526
+ if (exampleBuffer.length > 0) {
527
+ examples.push(exampleBuffer.join('\n'));
528
+ }
529
+ // Build directive object
530
+ // Combine inline description (from same line as tags) with multi-line description
531
+ const fullDescription = inlineDescription
532
+ ? [inlineDescription, ...descriptionLines].join('\n').trim()
533
+ : descriptionLines.join('\n').trim();
534
+ const directive = {
535
+ tags: tags.map((tag) => asDirectiveTag(tag)),
536
+ description: fullDescription,
537
+ examples,
538
+ position: {
539
+ startLine: loc.start.line,
540
+ endLine: loc.end.line,
541
+ },
542
+ // Include optional fields only if present
543
+ ...(patternName && { patternName }),
544
+ ...(status && { status }),
545
+ ...(isCore && { isCore }),
546
+ ...(useCases && useCases.length > 0 && { useCases }),
547
+ ...(whenToUse && { whenToUse }),
548
+ ...(uses && uses.length > 0 && { uses }),
549
+ ...(usedBy && usedBy.length > 0 && { usedBy }),
550
+ ...(phase !== undefined && { phase }),
551
+ ...(brief && { brief }),
552
+ ...(dependsOn && dependsOn.length > 0 && { dependsOn }),
553
+ ...(enables && enables.length > 0 && { enables }),
554
+ // UML-inspired relationship fields (PatternRelationshipModel)
555
+ ...(implementsPatterns && implementsPatterns.length > 0 && { implements: implementsPatterns }),
556
+ ...(extendsPattern && { extends: extendsPattern }),
557
+ // Cross-reference and API navigation fields (PatternRelationshipModel enhancement)
558
+ ...(seeAlso && seeAlso.length > 0 && { seeAlso }),
559
+ ...(apiRef && apiRef.length > 0 && { apiRef }),
560
+ // Design session stub metadata fields
561
+ ...(target && { target }),
562
+ ...(since && { since }),
563
+ // Architecture diagram generation fields
564
+ ...(archRole && { archRole }),
565
+ ...(archContext && { archContext }),
566
+ ...(archLayer && { archLayer }),
567
+ ...(include && include.length > 0 && { include }),
568
+ ...(claudeModule && { claudeModule }),
569
+ ...(claudeSection && { claudeSection }),
570
+ ...(claudeTags && claudeTags.length > 0 && { claudeTags }),
571
+ // Shape extraction fields
572
+ ...(extractShapes && extractShapes.length > 0 && { extractShapes }),
573
+ // PRD metadata fields
574
+ ...(productArea && { productArea }),
575
+ // Convention tags for reference document generation
576
+ ...(convention && convention.length > 0 && { convention }),
577
+ };
578
+ // Validate against schema (schema-first enforcement)
579
+ const validation = DocDirectiveSchema.safeParse(directive);
580
+ if (!validation.success) {
581
+ const error = createDirectiveValidationError(filePath, loc.start.line, 'Invalid directive structure', commentText.substring(0, 100));
582
+ return Result.err(error);
583
+ }
584
+ return Result.ok(validation.data);
585
+ }
586
+ /**
587
+ * Extract code block immediately following a comment
588
+ */
589
+ function extractCodeBlockAfterComment(content, ast, comment) {
590
+ if (!comment.range)
591
+ return null;
592
+ const commentEnd = comment.range[1];
593
+ // Find the first meaningful AST node after this comment
594
+ const nextNode = findNextNodeAfterPosition(ast, commentEnd);
595
+ if (!nextNode?.range || !nextNode.loc)
596
+ return null;
597
+ const lines = content.split('\n');
598
+ const startLine = nextNode.loc.start.line;
599
+ const endLine = nextNode.loc.end.line;
600
+ // Extract the code block
601
+ const codeLines = lines.slice(startLine - 1, endLine);
602
+ return {
603
+ code: codeLines.join('\n'),
604
+ startLine,
605
+ endLine,
606
+ };
607
+ }
608
+ /**
609
+ * Find the first AST node after a given position
610
+ */
611
+ function findNextNodeAfterPosition(ast, position) {
612
+ for (const node of ast.body) {
613
+ if (node.range && node.range[0] > position) {
614
+ return node;
615
+ }
616
+ }
617
+ return null;
618
+ }
619
+ /**
620
+ * Extract export information from a code block
621
+ */
622
+ function extractExportsFromBlock(ast, block, sourceCode) {
623
+ const exports = [];
624
+ for (const node of ast.body) {
625
+ if (!node.loc)
626
+ continue;
627
+ if (node.loc.start.line < block.startLine || node.loc.end.line > block.endLine)
628
+ continue;
629
+ if (node.type === 'ExportNamedDeclaration') {
630
+ if (node.declaration) {
631
+ exports.push(...extractFromDeclaration(node.declaration, sourceCode));
632
+ }
633
+ // Handle re-exports like: export { foo, bar } from './module'
634
+ // or type exports: export type { Foo } from './module'
635
+ if (node.specifiers) {
636
+ // Check if parent ExportNamedDeclaration is type-only
637
+ const isTypeExport = node.exportKind === 'type';
638
+ for (const spec of node.specifiers) {
639
+ if (spec.type === 'ExportSpecifier') {
640
+ // TypeScript 5.9.0+: exported can be Identifier or Literal (StringLiteral)
641
+ // Handles cases like: export { "foo-bar" as baz } from './module'
642
+ // Type union exhaustion: only Identifier and Literal are valid types here
643
+ const exportedName = spec.exported.type === 'Identifier'
644
+ ? spec.exported.name
645
+ : spec.exported.value; // Literal type - extract value
646
+ exports.push({
647
+ name: exportedName,
648
+ type: isTypeExport ? 'type' : 'const',
649
+ });
650
+ }
651
+ }
652
+ }
653
+ }
654
+ else if (node.type === 'ExportDefaultDeclaration') {
655
+ exports.push({
656
+ name: 'default',
657
+ type: getExportType(node.declaration),
658
+ });
659
+ }
660
+ }
661
+ return exports;
662
+ }
663
+ /**
664
+ * Build a clean function signature from AST node and source code.
665
+ *
666
+ * DD-1: Uses AST body range to precisely locate the function body start,
667
+ * then slices everything before it as the signature. This avoids flawed
668
+ * brace-matching that fails on object parameter types like `{ timeout: number }`.
669
+ * Strips `export ` prefix but keeps `async` (semantically meaningful).
670
+ */
671
+ function buildFunctionSignature(declaration, sourceCode) {
672
+ // Use AST body range for precise body location (no brace-matching needed)
673
+ if (declaration.body) {
674
+ const bodyStart = declaration.body.range[0];
675
+ const declStart = declaration.range[0];
676
+ const beforeBody = sourceCode.slice(declStart, bodyStart);
677
+ // Strip 'export ' prefix for clean display
678
+ const withoutExport = beforeBody.startsWith('export ')
679
+ ? beforeBody.slice('export '.length)
680
+ : beforeBody;
681
+ return withoutExport.trim() + ';';
682
+ }
683
+ // Fallback for declarations without body (ambient/abstract)
684
+ const fullText = sourceCode.slice(declaration.range[0], declaration.range[1]);
685
+ return fullText.startsWith('export ') ? fullText.slice('export '.length).trim() : fullText.trim();
686
+ }
687
+ /**
688
+ * Extract exports from a declaration node
689
+ */
690
+ function extractFromDeclaration(declaration, sourceCode) {
691
+ const exports = [];
692
+ switch (declaration.type) {
693
+ case 'FunctionDeclaration':
694
+ if (declaration.id) {
695
+ exports.push({
696
+ name: declaration.id.name,
697
+ type: 'function',
698
+ signature: buildFunctionSignature(declaration, sourceCode),
699
+ });
700
+ }
701
+ break;
702
+ case 'VariableDeclaration':
703
+ for (const declarator of declaration.declarations) {
704
+ if (declarator.id.type === 'Identifier') {
705
+ exports.push({
706
+ name: declarator.id.name,
707
+ type: 'const',
708
+ });
709
+ }
710
+ }
711
+ break;
712
+ case 'TSTypeAliasDeclaration':
713
+ exports.push({
714
+ name: declaration.id.name,
715
+ type: 'type',
716
+ });
717
+ break;
718
+ case 'TSInterfaceDeclaration':
719
+ exports.push({
720
+ name: declaration.id.name,
721
+ type: 'interface',
722
+ });
723
+ break;
724
+ case 'ClassDeclaration':
725
+ if (declaration.id) {
726
+ exports.push({
727
+ name: declaration.id.name,
728
+ type: 'class',
729
+ });
730
+ }
731
+ break;
732
+ case 'TSEnumDeclaration':
733
+ if (declaration.id) {
734
+ exports.push({
735
+ name: declaration.id.name,
736
+ type: 'enum',
737
+ });
738
+ }
739
+ break;
740
+ }
741
+ return exports;
742
+ }
743
+ /**
744
+ * Get export type from declaration
745
+ */
746
+ function getExportType(declaration) {
747
+ switch (declaration.type) {
748
+ case 'FunctionDeclaration':
749
+ return 'function';
750
+ case 'ClassDeclaration':
751
+ return 'class';
752
+ case 'TSInterfaceDeclaration':
753
+ return 'interface';
754
+ case 'TSTypeAliasDeclaration':
755
+ return 'type';
756
+ default:
757
+ return 'const';
758
+ }
759
+ }
760
+ /**
761
+ * Extract "When to Use" bullet points from JSDoc comment
762
+ *
763
+ * Handles two formats:
764
+ * - Heading format: `### When to Use\n- bullet 1\n- bullet 2`
765
+ * - Inline format: `**When to use:** Single line description`
766
+ *
767
+ * Key improvements over naive regex:
768
+ * - Strips JSDoc `* ` markers before matching
769
+ * - Only captures actual bullet points (lines starting with `- ` or `* `)
770
+ * - Stops at section boundaries (empty lines, headings, tables, JSDoc tags)
771
+ *
772
+ * **Limitation:** Multi-line bullets (continuation lines) are not supported.
773
+ * Each bullet must be a single line. For example:
774
+ * ```
775
+ * ### When to Use
776
+ * - This works (single line)
777
+ * - This is broken because it
778
+ * continues on the next line // <-- Not captured
779
+ * ```
780
+ * Recommendation: Keep all bullet points as single lines.
781
+ *
782
+ * @param commentText - Raw JSDoc comment content
783
+ * @param fileOptInTag - The file opt-in tag (e.g., "@docs" or "@architect")
784
+ * @returns Array of bullet point strings, or undefined if no "When to Use" section
785
+ */
786
+ function extractWhenToUse(commentText, fileOptInTag) {
787
+ // Strip JSDoc markers and normalize lines
788
+ const cleanedLines = commentText.split('\n').map((line) => line
789
+ .trim()
790
+ .replace(/^\*\s?/, '')
791
+ .trim());
792
+ const cleanedText = cleanedLines.join('\n');
793
+ // Try heading format first: ### When to Use
794
+ const headingMatch = /###\s*When to Use\s*\n/i.exec(cleanedText);
795
+ if (headingMatch) {
796
+ const startIndex = headingMatch.index + headingMatch[0].length;
797
+ const afterHeading = cleanedText.slice(startIndex);
798
+ const lines = afterHeading.split('\n');
799
+ const bullets = [];
800
+ for (const line of lines) {
801
+ const trimmed = line.trim();
802
+ // Stop conditions: empty line, new heading, table, JSDoc tag (but not doc directives)
803
+ if (trimmed === '')
804
+ break;
805
+ if (trimmed.startsWith('#'))
806
+ break;
807
+ if (trimmed.startsWith('|'))
808
+ break;
809
+ if (trimmed.startsWith('@') && !trimmed.startsWith(fileOptInTag))
810
+ break;
811
+ // Extract bullet point content (must start with - or * followed by space)
812
+ const bulletMatch = /^[-*]\s+(.+)$/.exec(trimmed);
813
+ if (bulletMatch?.[1]) {
814
+ bullets.push(bulletMatch[1].trim());
815
+ }
816
+ else {
817
+ // Line doesn't start with bullet - stop extraction
818
+ break;
819
+ }
820
+ }
821
+ if (bullets.length > 0) {
822
+ return bullets;
823
+ }
824
+ }
825
+ // Try inline format: **When to use:** description
826
+ const inlineMatch = /\*\*When to use:\*\*\s*([^\n]+)/i.exec(cleanedText);
827
+ if (inlineMatch?.[1]) {
828
+ const description = inlineMatch[1].trim();
829
+ if (description) {
830
+ return [description];
831
+ }
832
+ }
833
+ return undefined;
834
+ }
835
+ //# sourceMappingURL=ast-parser.js.map