@seanmars/tospec 0.19.0-beta.1 → 0.19.0-beta.13

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 (428) hide show
  1. package/CHANGELOG.md +530 -0
  2. package/README.md +71 -77
  3. package/assets/dashboard/app.js +14 -3
  4. package/assets/dashboard/style.css +7 -0
  5. package/assets/rules/tospec/decision.md +3 -0
  6. package/assets/rules/tospec/single-source-of-truth.md +19 -0
  7. package/dist/cli/index.d.ts.map +1 -1
  8. package/dist/cli/index.js +254 -83
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/commands/config.d.ts +9 -17
  11. package/dist/commands/config.d.ts.map +1 -1
  12. package/dist/commands/config.js +374 -98
  13. package/dist/commands/config.js.map +1 -1
  14. package/dist/commands/dashboard.d.ts +64 -81
  15. package/dist/commands/dashboard.d.ts.map +1 -1
  16. package/dist/commands/dashboard.js +346 -230
  17. package/dist/commands/dashboard.js.map +1 -1
  18. package/dist/commands/decision.d.ts +41 -19
  19. package/dist/commands/decision.d.ts.map +1 -1
  20. package/dist/commands/decision.js +400 -70
  21. package/dist/commands/decision.js.map +1 -1
  22. package/dist/commands/metrics.d.ts +28 -51
  23. package/dist/commands/metrics.d.ts.map +1 -1
  24. package/dist/commands/metrics.js +69 -85
  25. package/dist/commands/metrics.js.map +1 -1
  26. package/dist/commands/shared-output.d.ts +18 -21
  27. package/dist/commands/shared-output.d.ts.map +1 -1
  28. package/dist/commands/shared-output.js +49 -23
  29. package/dist/commands/shared-output.js.map +1 -1
  30. package/dist/commands/show.d.ts +7 -0
  31. package/dist/commands/show.d.ts.map +1 -1
  32. package/dist/commands/show.js +39 -8
  33. package/dist/commands/show.js.map +1 -1
  34. package/dist/commands/validate.d.ts +47 -30
  35. package/dist/commands/validate.d.ts.map +1 -1
  36. package/dist/commands/validate.js +282 -108
  37. package/dist/commands/validate.js.map +1 -1
  38. package/dist/commands/workflow/index.d.ts +6 -10
  39. package/dist/commands/workflow/index.d.ts.map +1 -1
  40. package/dist/commands/workflow/index.js +6 -10
  41. package/dist/commands/workflow/index.js.map +1 -1
  42. package/dist/commands/workflow/instructions.d.ts +21 -8
  43. package/dist/commands/workflow/instructions.d.ts.map +1 -1
  44. package/dist/commands/workflow/instructions.js +254 -95
  45. package/dist/commands/workflow/instructions.js.map +1 -1
  46. package/dist/commands/workflow/new-change.d.ts +4 -5
  47. package/dist/commands/workflow/new-change.d.ts.map +1 -1
  48. package/dist/commands/workflow/new-change.js +90 -25
  49. package/dist/commands/workflow/new-change.js.map +1 -1
  50. package/dist/commands/workflow/schemas.d.ts +3 -5
  51. package/dist/commands/workflow/schemas.d.ts.map +1 -1
  52. package/dist/commands/workflow/schemas.js +37 -11
  53. package/dist/commands/workflow/schemas.js.map +1 -1
  54. package/dist/commands/workflow/shared.d.ts +48 -21
  55. package/dist/commands/workflow/shared.d.ts.map +1 -1
  56. package/dist/commands/workflow/shared.js +36 -33
  57. package/dist/commands/workflow/shared.js.map +1 -1
  58. package/dist/commands/workflow/status.d.ts +10 -6
  59. package/dist/commands/workflow/status.d.ts.map +1 -1
  60. package/dist/commands/workflow/status.js +84 -42
  61. package/dist/commands/workflow/status.js.map +1 -1
  62. package/dist/commands/workflow/templates.d.ts +10 -3
  63. package/dist/commands/workflow/templates.d.ts.map +1 -1
  64. package/dist/commands/workflow/templates.js +39 -40
  65. package/dist/commands/workflow/templates.js.map +1 -1
  66. package/dist/core/archive.d.ts +26 -21
  67. package/dist/core/archive.d.ts.map +1 -1
  68. package/dist/core/archive.js +386 -205
  69. package/dist/core/archive.js.map +1 -1
  70. package/dist/core/artifact-graph/graph.d.ts +29 -36
  71. package/dist/core/artifact-graph/graph.d.ts.map +1 -1
  72. package/dist/core/artifact-graph/graph.js +50 -58
  73. package/dist/core/artifact-graph/graph.js.map +1 -1
  74. package/dist/core/artifact-graph/index.d.ts +1 -1
  75. package/dist/core/artifact-graph/index.d.ts.map +1 -1
  76. package/dist/core/artifact-graph/index.js +1 -1
  77. package/dist/core/artifact-graph/index.js.map +1 -1
  78. package/dist/core/artifact-graph/instruction-loader.d.ts +105 -100
  79. package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
  80. package/dist/core/artifact-graph/instruction-loader.js +176 -110
  81. package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
  82. package/dist/core/artifact-graph/outputs.d.ts +11 -14
  83. package/dist/core/artifact-graph/outputs.d.ts.map +1 -1
  84. package/dist/core/artifact-graph/outputs.js +47 -29
  85. package/dist/core/artifact-graph/outputs.js.map +1 -1
  86. package/dist/core/artifact-graph/resolver.d.ts +44 -63
  87. package/dist/core/artifact-graph/resolver.d.ts.map +1 -1
  88. package/dist/core/artifact-graph/resolver.js +85 -86
  89. package/dist/core/artifact-graph/resolver.js.map +1 -1
  90. package/dist/core/artifact-graph/schema.d.ts +0 -6
  91. package/dist/core/artifact-graph/schema.d.ts.map +1 -1
  92. package/dist/core/artifact-graph/schema.js +7 -32
  93. package/dist/core/artifact-graph/schema.js.map +1 -1
  94. package/dist/core/artifact-graph/state.d.ts +1 -8
  95. package/dist/core/artifact-graph/state.d.ts.map +1 -1
  96. package/dist/core/artifact-graph/state.js +2 -17
  97. package/dist/core/artifact-graph/state.js.map +1 -1
  98. package/dist/core/artifact-graph/stub-detection.d.ts +12 -0
  99. package/dist/core/artifact-graph/stub-detection.d.ts.map +1 -0
  100. package/dist/core/artifact-graph/stub-detection.js +39 -0
  101. package/dist/core/artifact-graph/stub-detection.js.map +1 -0
  102. package/dist/core/artifact-graph/types.d.ts +4 -0
  103. package/dist/core/artifact-graph/types.d.ts.map +1 -1
  104. package/dist/core/artifact-graph/types.js +30 -10
  105. package/dist/core/artifact-graph/types.js.map +1 -1
  106. package/dist/core/available-tools.d.ts +3 -12
  107. package/dist/core/available-tools.d.ts.map +1 -1
  108. package/dist/core/available-tools.js +4 -13
  109. package/dist/core/available-tools.js.map +1 -1
  110. package/dist/core/change-metadata/schema.d.ts +1 -1
  111. package/dist/core/change-metadata/schema.d.ts.map +1 -1
  112. package/dist/core/change-metadata/schema.js +10 -7
  113. package/dist/core/change-metadata/schema.js.map +1 -1
  114. package/dist/core/change-presenter.d.ts +23 -18
  115. package/dist/core/change-presenter.d.ts.map +1 -1
  116. package/dist/core/change-presenter.js +102 -43
  117. package/dist/core/change-presenter.js.map +1 -1
  118. package/dist/core/change-status-policy.d.ts +8 -1
  119. package/dist/core/change-status-policy.d.ts.map +1 -1
  120. package/dist/core/change-status-policy.js +25 -1
  121. package/dist/core/change-status-policy.js.map +1 -1
  122. package/dist/core/codex-metrics.d.ts +25 -45
  123. package/dist/core/codex-metrics.d.ts.map +1 -1
  124. package/dist/core/codex-metrics.js +44 -88
  125. package/dist/core/codex-metrics.js.map +1 -1
  126. package/dist/core/codex-residue.d.ts +22 -0
  127. package/dist/core/codex-residue.d.ts.map +1 -0
  128. package/dist/core/codex-residue.js +61 -0
  129. package/dist/core/codex-residue.js.map +1 -0
  130. package/dist/core/command-generation/adapters/claude.d.ts +2 -9
  131. package/dist/core/command-generation/adapters/claude.d.ts.map +1 -1
  132. package/dist/core/command-generation/adapters/claude.js +2 -12
  133. package/dist/core/command-generation/adapters/claude.js.map +1 -1
  134. package/dist/core/command-generation/adapters/index.d.ts +1 -9
  135. package/dist/core/command-generation/adapters/index.d.ts.map +1 -1
  136. package/dist/core/command-generation/adapters/index.js +1 -9
  137. package/dist/core/command-generation/adapters/index.js.map +1 -1
  138. package/dist/core/command-generation/generator.d.ts +0 -17
  139. package/dist/core/command-generation/generator.d.ts.map +1 -1
  140. package/dist/core/command-generation/generator.js +0 -17
  141. package/dist/core/command-generation/generator.js.map +1 -1
  142. package/dist/core/command-generation/index.d.ts +2 -5
  143. package/dist/core/command-generation/index.d.ts.map +1 -1
  144. package/dist/core/command-generation/index.js +0 -9
  145. package/dist/core/command-generation/index.js.map +1 -1
  146. package/dist/core/command-generation/types.d.ts +10 -36
  147. package/dist/core/command-generation/types.d.ts.map +1 -1
  148. package/dist/core/command-generation/types.js +0 -6
  149. package/dist/core/command-generation/types.js.map +1 -1
  150. package/dist/core/command-generation/yaml.d.ts +3 -18
  151. package/dist/core/command-generation/yaml.d.ts.map +1 -1
  152. package/dist/core/command-generation/yaml.js +5 -23
  153. package/dist/core/command-generation/yaml.js.map +1 -1
  154. package/dist/core/config-prompts.d.ts +2 -4
  155. package/dist/core/config-prompts.d.ts.map +1 -1
  156. package/dist/core/config-prompts.js +2 -7
  157. package/dist/core/config-prompts.js.map +1 -1
  158. package/dist/core/config-schema.d.ts +8 -53
  159. package/dist/core/config-schema.d.ts.map +1 -1
  160. package/dist/core/config-schema.js +49 -62
  161. package/dist/core/config-schema.js.map +1 -1
  162. package/dist/core/config.d.ts +56 -0
  163. package/dist/core/config.d.ts.map +1 -1
  164. package/dist/core/config.js +73 -2
  165. package/dist/core/config.js.map +1 -1
  166. package/dist/core/converters/json-converter.d.ts.map +1 -1
  167. package/dist/core/dashboard-activity.d.ts +7 -9
  168. package/dist/core/dashboard-activity.d.ts.map +1 -1
  169. package/dist/core/dashboard-activity.js +26 -24
  170. package/dist/core/dashboard-activity.js.map +1 -1
  171. package/dist/core/dashboard-data.d.ts +40 -22
  172. package/dist/core/dashboard-data.d.ts.map +1 -1
  173. package/dist/core/dashboard-data.js +62 -70
  174. package/dist/core/dashboard-data.js.map +1 -1
  175. package/dist/core/global-config.d.ts +24 -53
  176. package/dist/core/global-config.d.ts.map +1 -1
  177. package/dist/core/global-config.js +38 -67
  178. package/dist/core/global-config.js.map +1 -1
  179. package/dist/core/init.d.ts +29 -11
  180. package/dist/core/init.d.ts.map +1 -1
  181. package/dist/core/init.js +232 -164
  182. package/dist/core/init.js.map +1 -1
  183. package/dist/core/list.d.ts +1 -1
  184. package/dist/core/list.d.ts.map +1 -1
  185. package/dist/core/list.js +121 -28
  186. package/dist/core/list.js.map +1 -1
  187. package/dist/core/local-server.d.ts +60 -50
  188. package/dist/core/local-server.d.ts.map +1 -1
  189. package/dist/core/local-server.js +94 -66
  190. package/dist/core/local-server.js.map +1 -1
  191. package/dist/core/markdown-render.d.ts +25 -0
  192. package/dist/core/markdown-render.d.ts.map +1 -0
  193. package/dist/core/markdown-render.js +94 -0
  194. package/dist/core/markdown-render.js.map +1 -0
  195. package/dist/core/migrate.d.ts +32 -15
  196. package/dist/core/migrate.d.ts.map +1 -1
  197. package/dist/core/migrate.js +220 -108
  198. package/dist/core/migrate.js.map +1 -1
  199. package/dist/core/parsers/change-parser.d.ts +7 -10
  200. package/dist/core/parsers/change-parser.d.ts.map +1 -1
  201. package/dist/core/parsers/change-parser.js +48 -56
  202. package/dist/core/parsers/change-parser.js.map +1 -1
  203. package/dist/core/parsers/markdown-parser.d.ts +8 -9
  204. package/dist/core/parsers/markdown-parser.d.ts.map +1 -1
  205. package/dist/core/parsers/markdown-parser.js +31 -22
  206. package/dist/core/parsers/markdown-parser.js.map +1 -1
  207. package/dist/core/parsers/requirement-blocks.d.ts +43 -15
  208. package/dist/core/parsers/requirement-blocks.d.ts.map +1 -1
  209. package/dist/core/parsers/requirement-blocks.js +169 -54
  210. package/dist/core/parsers/requirement-blocks.js.map +1 -1
  211. package/dist/core/parsers/requirement-text.d.ts +73 -79
  212. package/dist/core/parsers/requirement-text.d.ts.map +1 -1
  213. package/dist/core/parsers/requirement-text.js +137 -79
  214. package/dist/core/parsers/requirement-text.js.map +1 -1
  215. package/dist/core/parsers/spec-structure.d.ts.map +1 -1
  216. package/dist/core/parsers/spec-structure.js +10 -6
  217. package/dist/core/parsers/spec-structure.js.map +1 -1
  218. package/dist/core/planning-home.js.map +1 -1
  219. package/dist/core/profiles.d.ts +3 -10
  220. package/dist/core/profiles.d.ts.map +1 -1
  221. package/dist/core/profiles.js +5 -12
  222. package/dist/core/profiles.js.map +1 -1
  223. package/dist/core/project-config.d.ts +43 -44
  224. package/dist/core/project-config.d.ts.map +1 -1
  225. package/dist/core/project-config.js +107 -82
  226. package/dist/core/project-config.js.map +1 -1
  227. package/dist/core/project-layout.d.ts +10 -18
  228. package/dist/core/project-layout.d.ts.map +1 -1
  229. package/dist/core/project-layout.js +16 -26
  230. package/dist/core/project-layout.js.map +1 -1
  231. package/dist/core/root-selection.d.ts +11 -7
  232. package/dist/core/root-selection.d.ts.map +1 -1
  233. package/dist/core/root-selection.js +7 -8
  234. package/dist/core/root-selection.js.map +1 -1
  235. package/dist/core/rules.d.ts +10 -0
  236. package/dist/core/rules.d.ts.map +1 -0
  237. package/dist/core/rules.js +43 -0
  238. package/dist/core/rules.js.map +1 -0
  239. package/dist/core/schema-names.d.ts +16 -0
  240. package/dist/core/schema-names.d.ts.map +1 -0
  241. package/dist/core/schema-names.js +16 -0
  242. package/dist/core/schema-names.js.map +1 -0
  243. package/dist/core/schemas/base.schema.d.ts +3 -0
  244. package/dist/core/schemas/base.schema.d.ts.map +1 -1
  245. package/dist/core/schemas/base.schema.js +22 -6
  246. package/dist/core/schemas/base.schema.js.map +1 -1
  247. package/dist/core/schemas/change.schema.d.ts +16 -0
  248. package/dist/core/schemas/change.schema.d.ts.map +1 -1
  249. package/dist/core/schemas/change.schema.js +41 -10
  250. package/dist/core/schemas/change.schema.js.map +1 -1
  251. package/dist/core/schemas/spec.schema.d.ts +2 -0
  252. package/dist/core/schemas/spec.schema.d.ts.map +1 -1
  253. package/dist/core/shared/index.d.ts +3 -8
  254. package/dist/core/shared/index.d.ts.map +1 -1
  255. package/dist/core/shared/index.js +3 -8
  256. package/dist/core/shared/index.js.map +1 -1
  257. package/dist/core/shared/rules-generation.d.ts +27 -8
  258. package/dist/core/shared/rules-generation.d.ts.map +1 -1
  259. package/dist/core/shared/rules-generation.js +151 -16
  260. package/dist/core/shared/rules-generation.js.map +1 -1
  261. package/dist/core/shared/skill-generation.d.ts +38 -53
  262. package/dist/core/shared/skill-generation.d.ts.map +1 -1
  263. package/dist/core/shared/skill-generation.js +82 -51
  264. package/dist/core/shared/skill-generation.js.map +1 -1
  265. package/dist/core/shared/tool-detection.d.ts +40 -62
  266. package/dist/core/shared/tool-detection.d.ts.map +1 -1
  267. package/dist/core/shared/tool-detection.js +88 -80
  268. package/dist/core/shared/tool-detection.js.map +1 -1
  269. package/dist/core/skill-metrics.d.ts +36 -63
  270. package/dist/core/skill-metrics.d.ts.map +1 -1
  271. package/dist/core/skill-metrics.js +34 -73
  272. package/dist/core/skill-metrics.js.map +1 -1
  273. package/dist/core/spec-presenter.d.ts.map +1 -1
  274. package/dist/core/spec-presenter.js +6 -6
  275. package/dist/core/spec-presenter.js.map +1 -1
  276. package/dist/core/specs-apply.d.ts +22 -23
  277. package/dist/core/specs-apply.d.ts.map +1 -1
  278. package/dist/core/specs-apply.js +166 -193
  279. package/dist/core/specs-apply.js.map +1 -1
  280. package/dist/core/templates/fragments/interview.d.ts +2 -6
  281. package/dist/core/templates/fragments/interview.d.ts.map +1 -1
  282. package/dist/core/templates/fragments/interview.js +2 -6
  283. package/dist/core/templates/fragments/interview.js.map +1 -1
  284. package/dist/core/templates/fragments/next-step.d.ts +4 -8
  285. package/dist/core/templates/fragments/next-step.d.ts.map +1 -1
  286. package/dist/core/templates/fragments/next-step.js +4 -8
  287. package/dist/core/templates/fragments/next-step.js.map +1 -1
  288. package/dist/core/templates/fragments/verify.d.ts +9 -12
  289. package/dist/core/templates/fragments/verify.d.ts.map +1 -1
  290. package/dist/core/templates/fragments/verify.js +9 -12
  291. package/dist/core/templates/fragments/verify.js.map +1 -1
  292. package/dist/core/templates/index.d.ts +0 -6
  293. package/dist/core/templates/index.d.ts.map +1 -1
  294. package/dist/core/templates/index.js +0 -7
  295. package/dist/core/templates/index.js.map +1 -1
  296. package/dist/core/templates/skill-templates.d.ts +1 -5
  297. package/dist/core/templates/skill-templates.d.ts.map +1 -1
  298. package/dist/core/templates/skill-templates.js +0 -5
  299. package/dist/core/templates/skill-templates.js.map +1 -1
  300. package/dist/core/templates/types.d.ts +3 -7
  301. package/dist/core/templates/types.d.ts.map +1 -1
  302. package/dist/core/templates/types.js +0 -3
  303. package/dist/core/templates/types.js.map +1 -1
  304. package/dist/core/templates/workflows/apply.d.ts +3 -9
  305. package/dist/core/templates/workflows/apply.d.ts.map +1 -1
  306. package/dist/core/templates/workflows/apply.js +9 -12
  307. package/dist/core/templates/workflows/apply.js.map +1 -1
  308. package/dist/core/templates/workflows/archive.d.ts +0 -6
  309. package/dist/core/templates/workflows/archive.d.ts.map +1 -1
  310. package/dist/core/templates/workflows/archive.js +7 -5
  311. package/dist/core/templates/workflows/archive.js.map +1 -1
  312. package/dist/core/templates/workflows/decision.js +4 -4
  313. package/dist/core/templates/workflows/decision.js.map +1 -1
  314. package/dist/core/templates/workflows/explore.js +1 -1
  315. package/dist/core/templates/workflows/grill.d.ts.map +1 -1
  316. package/dist/core/templates/workflows/grill.js +0 -2
  317. package/dist/core/templates/workflows/grill.js.map +1 -1
  318. package/dist/core/templates/workflows/issue.d.ts +0 -6
  319. package/dist/core/templates/workflows/issue.d.ts.map +1 -1
  320. package/dist/core/templates/workflows/issue.js +3 -0
  321. package/dist/core/templates/workflows/issue.js.map +1 -1
  322. package/dist/core/templates/workflows/propose.d.ts +0 -6
  323. package/dist/core/templates/workflows/propose.d.ts.map +1 -1
  324. package/dist/core/templates/workflows/propose.js +0 -1
  325. package/dist/core/templates/workflows/propose.js.map +1 -1
  326. package/dist/core/templates/workflows/sync.d.ts +2 -8
  327. package/dist/core/templates/workflows/sync.d.ts.map +1 -1
  328. package/dist/core/templates/workflows/sync.js +2 -2
  329. package/dist/core/templates/workflows/sync.js.map +1 -1
  330. package/dist/core/templates/workflows/update.d.ts +0 -6
  331. package/dist/core/templates/workflows/update.d.ts.map +1 -1
  332. package/dist/core/templates/workflows/update.js.map +1 -1
  333. package/dist/core/update.d.ts +26 -21
  334. package/dist/core/update.d.ts.map +1 -1
  335. package/dist/core/update.js +165 -116
  336. package/dist/core/update.js.map +1 -1
  337. package/dist/core/user-state-migration.d.ts +13 -15
  338. package/dist/core/user-state-migration.d.ts.map +1 -1
  339. package/dist/core/user-state-migration.js +16 -20
  340. package/dist/core/user-state-migration.js.map +1 -1
  341. package/dist/core/validation/constants.d.ts +19 -25
  342. package/dist/core/validation/constants.d.ts.map +1 -1
  343. package/dist/core/validation/constants.js +25 -20
  344. package/dist/core/validation/constants.js.map +1 -1
  345. package/dist/core/validation/prose-length.d.ts +15 -0
  346. package/dist/core/validation/prose-length.d.ts.map +1 -0
  347. package/dist/core/validation/prose-length.js +29 -0
  348. package/dist/core/validation/prose-length.js.map +1 -0
  349. package/dist/core/validation/purpose-placeholder.d.ts +9 -16
  350. package/dist/core/validation/purpose-placeholder.d.ts.map +1 -1
  351. package/dist/core/validation/purpose-placeholder.js +30 -44
  352. package/dist/core/validation/purpose-placeholder.js.map +1 -1
  353. package/dist/core/validation/section-validator.d.ts +4 -4
  354. package/dist/core/validation/section-validator.d.ts.map +1 -1
  355. package/dist/core/validation/section-validator.js +43 -7
  356. package/dist/core/validation/section-validator.js.map +1 -1
  357. package/dist/core/validation/task-numbering.d.ts +6 -3
  358. package/dist/core/validation/task-numbering.d.ts.map +1 -1
  359. package/dist/core/validation/task-numbering.js +23 -11
  360. package/dist/core/validation/task-numbering.js.map +1 -1
  361. package/dist/core/validation/types.d.ts +18 -0
  362. package/dist/core/validation/types.d.ts.map +1 -1
  363. package/dist/core/validation/types.js +12 -1
  364. package/dist/core/validation/types.js.map +1 -1
  365. package/dist/core/validation/validator.d.ts +50 -51
  366. package/dist/core/validation/validator.d.ts.map +1 -1
  367. package/dist/core/validation/validator.js +478 -269
  368. package/dist/core/validation/validator.js.map +1 -1
  369. package/dist/prompts/searchable-multi-select.d.ts +3 -8
  370. package/dist/prompts/searchable-multi-select.d.ts.map +1 -1
  371. package/dist/prompts/searchable-multi-select.js +16 -39
  372. package/dist/prompts/searchable-multi-select.js.map +1 -1
  373. package/dist/utils/change-metadata.d.ts +11 -50
  374. package/dist/utils/change-metadata.d.ts.map +1 -1
  375. package/dist/utils/change-metadata.js +48 -67
  376. package/dist/utils/change-metadata.js.map +1 -1
  377. package/dist/utils/change-utils.d.ts +31 -54
  378. package/dist/utils/change-utils.d.ts.map +1 -1
  379. package/dist/utils/change-utils.js +143 -100
  380. package/dist/utils/change-utils.js.map +1 -1
  381. package/dist/utils/file-lock.d.ts +39 -0
  382. package/dist/utils/file-lock.d.ts.map +1 -0
  383. package/dist/utils/file-lock.js +149 -0
  384. package/dist/utils/file-lock.js.map +1 -0
  385. package/dist/utils/file-system.d.ts +12 -32
  386. package/dist/utils/file-system.d.ts.map +1 -1
  387. package/dist/utils/file-system.js +16 -40
  388. package/dist/utils/file-system.js.map +1 -1
  389. package/dist/utils/frontmatter.d.ts +7 -11
  390. package/dist/utils/frontmatter.d.ts.map +1 -1
  391. package/dist/utils/frontmatter.js +11 -11
  392. package/dist/utils/frontmatter.js.map +1 -1
  393. package/dist/utils/interactive.d.ts +4 -9
  394. package/dist/utils/interactive.d.ts.map +1 -1
  395. package/dist/utils/interactive.js +2 -4
  396. package/dist/utils/interactive.js.map +1 -1
  397. package/dist/utils/item-discovery.d.ts +15 -10
  398. package/dist/utils/item-discovery.d.ts.map +1 -1
  399. package/dist/utils/item-discovery.js +42 -47
  400. package/dist/utils/item-discovery.js.map +1 -1
  401. package/dist/utils/link.d.ts +13 -4
  402. package/dist/utils/link.d.ts.map +1 -1
  403. package/dist/utils/link.js +13 -4
  404. package/dist/utils/link.js.map +1 -1
  405. package/dist/utils/match.js.map +1 -1
  406. package/dist/utils/requirement-diff.d.ts +13 -23
  407. package/dist/utils/requirement-diff.d.ts.map +1 -1
  408. package/dist/utils/requirement-diff.js +13 -23
  409. package/dist/utils/requirement-diff.js.map +1 -1
  410. package/dist/utils/spec-files.d.ts +10 -11
  411. package/dist/utils/spec-files.d.ts.map +1 -1
  412. package/dist/utils/spec-files.js +31 -22
  413. package/dist/utils/spec-files.js.map +1 -1
  414. package/dist/utils/task-progress.d.ts +11 -9
  415. package/dist/utils/task-progress.d.ts.map +1 -1
  416. package/dist/utils/task-progress.js +53 -32
  417. package/dist/utils/task-progress.js.map +1 -1
  418. package/dist/utils/timestamp.d.ts +5 -8
  419. package/dist/utils/timestamp.d.ts.map +1 -1
  420. package/dist/utils/timestamp.js +5 -8
  421. package/dist/utils/timestamp.js.map +1 -1
  422. package/package.json +9 -10
  423. package/schemas/decision/templates/decision.md +3 -1
  424. package/schemas/decision/templates/index.md +2 -2
  425. package/schemas/issue/schema.yaml +11 -2
  426. package/schemas/issue/templates/spec.md +37 -3
  427. package/schemas/sdd/schema.yaml +24 -1
  428. package/schemas/sdd/templates/spec.md +37 -3
@@ -3,27 +3,30 @@ export function normalizeRequirementName(name) {
3
3
  return name.trim();
4
4
  }
5
5
  /**
6
- * Case- and whitespace-insensitive fold of a requirement name. Requirement
7
- * matching itself is case-sensitive (normalizeRequirementName); this fold
8
- * exists only for typo detection - near-miss REMOVED headers and the
9
- * RENAMED+REMOVED cross-section conflict - where two spellings that differ
10
- * only in case or interior whitespace mean a mistake, never two requirements.
6
+ * Case- and whitespace-insensitive fold, for typo detection only: two spellings
7
+ * differing only in case or interior whitespace mean a mistake, never two
8
+ * requirements. Requirement matching itself stays case-sensitive
9
+ * (normalizeRequirementName).
11
10
  */
12
11
  export function foldRequirementName(name) {
13
12
  return normalizeRequirementName(name).toLowerCase().replace(/\s+/g, ' ');
14
13
  }
15
- const REQUIREMENT_HEADER_REGEX = /^###\s*Requirement:\s*(.+)\s*$/i;
16
14
  /**
17
- * Extracts the Requirements section from a spec file and parses requirement blocks.
15
+ * The one spelling of a requirement header, shared with the main-spec structure
16
+ * guard and the merge. `\s*` on purpose: `###Requirement:` is accepted here (see
17
+ * the no-space regressions in requirement-blocks.test.ts), so a guard using a
18
+ * stricter `\s+` let a duplicate slip past and the merge's Map collapsed it.
18
19
  */
20
+ export const REQUIREMENT_HEADER_REGEX = /^###\s*Requirement:\s*(.+)\s*$/i;
19
21
  export function extractRequirementsSection(content) {
20
- const normalized = normalizeLineEndings(content);
21
- const lines = normalized.split('\n');
22
+ const lines = normalizeDocument(content).split('\n');
22
23
  const fenceMask = buildCodeFenceMask(lines);
23
24
  const reqHeaderIndex = lines.findIndex((l, i) => !fenceMask[i] && /^##\s+Requirements\s*$/i.test(l));
24
25
  if (reqHeaderIndex === -1) {
25
- // No requirements section; create an empty one at the end
26
- const before = content.trimEnd();
26
+ // No Requirements section: hand back an empty one appended at the end.
27
+ // From the normalized text, not `content`: the parts are written back, and
28
+ // the raw string still carries the BOM and CRs every other branch strips.
29
+ const before = normalizeDocument(content).trimEnd();
27
30
  const headerLine = '## Requirements';
28
31
  return {
29
32
  before: before ? before + '\n\n' : '',
@@ -33,7 +36,7 @@ export function extractRequirementsSection(content) {
33
36
  after: '\n',
34
37
  };
35
38
  }
36
- // Find end of this section: next line that starts with '## ' at same or higher level
39
+ // The section ends at the next unfenced '## ' header.
37
40
  let endIndex = lines.length;
38
41
  for (let i = reqHeaderIndex + 1; i < lines.length; i++) {
39
42
  if (!fenceMask[i] && /^##\s+/.test(lines[i])) {
@@ -47,11 +50,9 @@ export function extractRequirementsSection(content) {
47
50
  const sectionBodyMask = fenceMask.slice(reqHeaderIndex + 1, endIndex);
48
51
  const isRequirementHeader = (cursor) => !sectionBodyMask[cursor] && REQUIREMENT_HEADER_REGEX.test(sectionBodyLines[cursor]);
49
52
  const isTopLevelHeader = (cursor) => !sectionBodyMask[cursor] && /^##\s+/.test(sectionBodyLines[cursor]);
50
- // Parse requirement blocks within section body
51
53
  const blocks = [];
52
54
  let cursor = 0;
53
- let preambleLines = [];
54
- // Collect preamble lines until first requirement header
55
+ const preambleLines = [];
55
56
  while (cursor < sectionBodyLines.length && !isRequirementHeader(cursor)) {
56
57
  preambleLines.push(sectionBodyLines[cursor]);
57
58
  cursor++;
@@ -59,7 +60,6 @@ export function extractRequirementsSection(content) {
59
60
  while (cursor < sectionBodyLines.length) {
60
61
  const headerLineCandidate = sectionBodyLines[cursor];
61
62
  if (!isRequirementHeader(cursor)) {
62
- // Not a requirement header (or fenced); skip line defensively
63
63
  cursor++;
64
64
  continue;
65
65
  }
@@ -67,7 +67,6 @@ export function extractRequirementsSection(content) {
67
67
  const name = normalizeRequirementName(headerMatch[1]);
68
68
  const startLine = reqHeaderIndex + 1 + cursor + 1;
69
69
  cursor++;
70
- // Gather lines until next requirement header or end of section
71
70
  const bodyLines = [headerLineCandidate];
72
71
  while (cursor < sectionBodyLines.length && !isRequirementHeader(cursor) && !isTopLevelHeader(cursor)) {
73
72
  bodyLines.push(sectionBodyLines[cursor]);
@@ -86,28 +85,22 @@ export function extractRequirementsSection(content) {
86
85
  after: after.startsWith('\n') ? after : '\n' + after,
87
86
  };
88
87
  }
89
- function normalizeLineEndings(content) {
90
- return normalizeDocument(content);
91
- }
92
- /**
93
- * Parse a delta-formatted spec change file content into a DeltaPlan with raw blocks.
94
- */
95
88
  export function parseDeltaSpec(content) {
96
- const normalized = normalizeLineEndings(content);
97
- const lines = normalized.split('\n');
89
+ const lines = normalizeDocument(content).split('\n');
98
90
  const fenceMask = buildCodeFenceMask(lines);
99
91
  const sections = splitTopLevelSections(lines, fenceMask);
100
- const addedLookup = getSections(sections, 'ADDED Requirements');
101
- const modifiedLookup = getSections(sections, 'MODIFIED Requirements');
102
- const removedLookup = getSections(sections, 'REMOVED Requirements');
103
- const renamedLookup = getSections(sections, 'RENAMED Requirements');
104
- // Each occurrence is parsed on its own and the results concatenated, so a
105
- // repeated section contributes all of its entries in document order without
106
- // any entry being interpreted across the boundary between two occurrences.
92
+ const addedLookup = getSections(sections, ADDED_SECTION);
93
+ const modifiedLookup = getSections(sections, MODIFIED_SECTION);
94
+ const removedLookup = getSections(sections, REMOVED_SECTION);
95
+ const renamedLookup = getSections(sections, RENAMED_SECTION);
96
+ const removedScenariosLookup = getSections(sections, REMOVED_SCENARIOS_SECTION);
97
+ // Each occurrence is parsed on its own, so no entry is interpreted across the
98
+ // boundary between two occurrences.
107
99
  const added = addedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
108
100
  const modified = modifiedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
109
101
  const removedEntries = removedLookup.bodies.flatMap(parseRemovedEntries);
110
102
  const removedBlocks = removedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
103
+ const renamedBlocks = renamedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
111
104
  const renamedResults = renamedLookup.bodies.map(parseRenamedPairs);
112
105
  const renamedPairs = renamedResults.flatMap((r) => r.pairs);
113
106
  const renamedIssues = renamedResults.flatMap((r) => r.issues);
@@ -117,7 +110,9 @@ export function parseDeltaSpec(content) {
117
110
  removed: removedEntries.map((e) => e.name),
118
111
  removedEntries,
119
112
  removedBlocks,
113
+ renamedBlocks,
120
114
  renamed: renamedPairs,
115
+ removedScenarios: removedScenariosLookup.bodies.flatMap(parseRemovedScenarioEntries),
121
116
  renamedIssues,
122
117
  duplicateSections: findDuplicateSections(sections),
123
118
  sectionPresence: {
@@ -125,6 +120,7 @@ export function parseDeltaSpec(content) {
125
120
  modified: modifiedLookup.found,
126
121
  removed: removedLookup.found,
127
122
  renamed: renamedLookup.found,
123
+ removedScenarios: removedScenariosLookup.found,
128
124
  },
129
125
  };
130
126
  }
@@ -133,7 +129,7 @@ function splitTopLevelSections(lines, fenceMask) {
133
129
  const indices = [];
134
130
  for (let i = 0; i < lines.length; i++) {
135
131
  if (fenceMask[i])
136
- continue; // a '## ...' inside a fenced example is not a real section
132
+ continue; // a '## ...' inside a fenced example is not a section
137
133
  const m = lines[i].match(/^(##)\s+(.+)$/);
138
134
  if (m) {
139
135
  indices.push({ title: m[2].trim(), index: i });
@@ -150,9 +146,8 @@ function splitTopLevelSections(lines, fenceMask) {
150
146
  offset: current.index + 1,
151
147
  headerLine: current.index + 1,
152
148
  };
153
- // Case-insensitive key: `getSections` matches case-insensitively, so two
154
- // spellings that differ only in case are one section to every caller and
155
- // must fold together here too.
149
+ // Case-insensitive key, matching `getSections`: two spellings differing
150
+ // only in case are one section to every caller.
156
151
  const key = current.title.toLowerCase();
157
152
  const existing = result.get(key);
158
153
  if (existing)
@@ -166,10 +161,32 @@ function getSections(sections, desired) {
166
161
  const bodies = sections.get(desired.toLowerCase());
167
162
  return bodies ? { bodies, found: true } : { bodies: [], found: false };
168
163
  }
169
- /** Section titles that appear more than once, in document order. */
164
+ // The section titles carrying delta semantics, named once so the set cannot
165
+ // drift between what `parseDeltaSpec` reads and what `findDuplicateSections`
166
+ // judges.
167
+ const ADDED_SECTION = 'ADDED Requirements';
168
+ const MODIFIED_SECTION = 'MODIFIED Requirements';
169
+ const REMOVED_SECTION = 'REMOVED Requirements';
170
+ const RENAMED_SECTION = 'RENAMED Requirements';
171
+ // Declares a scenario the MODIFIED block deliberately does not restate. Without
172
+ // it the grammar is append-only at the scenario level: the drop guard refuses a
173
+ // MODIFIED that omits a scenario, so an obsolete one has no path out short of
174
+ // hand-editing the main spec.
175
+ const REMOVED_SCENARIOS_SECTION = 'REMOVED Scenarios';
176
+ const DELTA_SECTION_KEYS = new Set([ADDED_SECTION, MODIFIED_SECTION, REMOVED_SECTION, RENAMED_SECTION, REMOVED_SCENARIOS_SECTION].map((title) => title.toLowerCase()));
177
+ /**
178
+ * Delta section titles that appear more than once, in document order.
179
+ *
180
+ * Scoped to the delta titles on purpose: `splitTopLevelSections` is a general
181
+ * index where an ordinary repeated heading legitimately appears, but the
182
+ * validator reports every entry here as ambiguity about which requirements
183
+ * belong to which — false for a heading that owns none.
184
+ */
170
185
  function findDuplicateSections(sections) {
171
186
  const duplicates = [];
172
- for (const bodies of sections.values()) {
187
+ for (const [key, bodies] of sections) {
188
+ if (!DELTA_SECTION_KEYS.has(key))
189
+ continue;
173
190
  if (bodies.length > 1) {
174
191
  duplicates.push({
175
192
  title: `## ${bodies[0].title}`,
@@ -179,6 +196,21 @@ function findDuplicateSections(sections) {
179
196
  }
180
197
  return duplicates;
181
198
  }
199
+ /**
200
+ * Every `### Requirement:` block in a document, whichever section it sits in (or
201
+ * none). For a caller rebuilding a whole file rather than applying a delta: a
202
+ * block written outside every known section is still a requirement.
203
+ */
204
+ export function parseRequirementBlocks(content) {
205
+ const lines = normalizeDocument(content).split('\n');
206
+ return parseRequirementBlocksFromSection({
207
+ title: '',
208
+ lines,
209
+ fenceMask: buildCodeFenceMask(lines),
210
+ offset: 0,
211
+ headerLine: 0,
212
+ });
213
+ }
182
214
  function parseRequirementBlocksFromSection(sectionBody) {
183
215
  const { lines, fenceMask } = sectionBody;
184
216
  if (lines.length === 0)
@@ -188,7 +220,6 @@ function parseRequirementBlocksFromSection(sectionBody) {
188
220
  const blocks = [];
189
221
  let i = 0;
190
222
  while (i < lines.length) {
191
- // Seek next requirement header (fenced headers are ignored)
192
223
  while (i < lines.length && !isRequirementHeader(i))
193
224
  i++;
194
225
  if (i >= lines.length)
@@ -206,22 +237,113 @@ function parseRequirementBlocksFromSection(sectionBody) {
206
237
  }
207
238
  return blocks;
208
239
  }
240
+ // Leading-whitespace prefix for the line regexes below. Written as
241
+ // `[ \t]*(?:-[ \t]*)?` rather than `\s*-?\s*`: two adjacent `\s*` around an
242
+ // optional token backtrack quadratically on a line of nothing but blanks, and a
243
+ // 40k-space line took ~600 ms per regex. Horizontal whitespace only — a line
244
+ // never contains its own newline.
245
+ const LINE_PREFIX = '^[ \\t]*(?:-[ \\t]*)?';
209
246
  /** `**Reason**:` / `- Reason:` style field line inside a REMOVED entry. */
210
- const REMOVED_REASON_LINE = /^\s*-?\s*(\*\*)?Reason(\*\*)?\s*:/i;
211
- const REMOVED_MIGRATION_LINE = /^\s*-?\s*(\*\*)?Migration(\*\*)?\s*:/i;
247
+ const REMOVED_REASON_LINE = new RegExp(`${LINE_PREFIX}(\\*\\*)?Reason(\\*\\*)?\\s*:`, 'i');
248
+ const REMOVED_MIGRATION_LINE = new RegExp(`${LINE_PREFIX}(\\*\\*)?Migration(\\*\\*)?\\s*:`, 'i');
249
+ // The `### Requirement:` prefix is optional (the templates show a plain name),
250
+ // but an unanchored bullet match collides with prose bullets, so this is
251
+ // restricted to a top-level bullet:
252
+ // - `^-` (no leading whitespace) skips continuation bullets nested under
253
+ // `Migration:`, each of which became an entry failing its own checks.
254
+ // - `\s+` skips a `---` thematic break, otherwise parsed as a requirement
255
+ // named `--`.
256
+ // - `\S` rejects a bare `-` rather than recording an empty name.
257
+ // A top-level bullet that is neither a name nor Reason:/Migration: is still read
258
+ // as a name; disambiguating that needs a grammar change.
259
+ const REMOVED_BULLET_REGEX = /^-\s+`?(?:###\s*Requirement:\s*)?(\S.*?)`?\s*$/;
260
+ // Unlike REMOVED_BULLET_REGEX these stay permissive about leading whitespace:
261
+ // the FROM:/TO: keyword is itself the anchor.
262
+ const RENAMED_FROM_REGEX = new RegExp(`${LINE_PREFIX}FROM:\\s*\`?(?:###\\s*Requirement:\\s*)?(.+?)\`?\\s*$`);
263
+ const RENAMED_TO_REGEX = new RegExp(`${LINE_PREFIX}TO:\\s*\`?(?:###\\s*Requirement:\\s*)?(.+?)\`?\\s*$`);
264
+ // The bullet form is the documented grammar, but `### Requirement:` /
265
+ // `#### Scenario:` headers are accepted too: they are how the same names are
266
+ // spelled everywhere else in a delta, so authors reach for them, and a header
267
+ // that was silently skipped here left the MODIFIED block failing with no hint
268
+ // that this section was the reason.
269
+ // Same shape as LINE_PREFIX with a heading marker as the alternative token.
270
+ const HEADING_OR_BULLET_PREFIX = '^[ \\t]*(?:(?:-|#{1,6})[ \\t]*)?';
271
+ /** `- Requirement: `<name>`` (or `### Requirement: <name>`) — opens a `## REMOVED Scenarios` entry. */
272
+ const REMOVED_SCENARIO_REQUIREMENT_LINE = new RegExp(`${HEADING_OR_BULLET_PREFIX}(?:\\*\\*)?Requirement(?:\\*\\*)?\\s*:\\s*\`?(\\S.*?)\`?\\s*$`, 'i');
273
+ /** `- Scenario: `<name>`` (or `#### Scenario: <name>`) — names the scenario being dropped. */
274
+ const REMOVED_SCENARIO_NAME_LINE = new RegExp(`${HEADING_OR_BULLET_PREFIX}(?:\\*\\*)?Scenario(?:\\*\\*)?\\s*:\\s*\`?(\\S.*?)\`?\\s*$`, 'i');
275
+ /**
276
+ * An entry opens on its `Requirement:` line and is completed by the `Scenario:`
277
+ * line under it, so one requirement can drop several scenarios by repeating the
278
+ * pair. Without a `Scenario:` line it contributes nothing.
279
+ *
280
+ * Reason is recorded but not required, the same split the REMOVED Requirements
281
+ * parser uses: presence is data, mandatory-ness is the validator's call.
282
+ */
283
+ function parseRemovedScenarioEntries(sectionBody) {
284
+ const { lines, fenceMask, offset } = sectionBody;
285
+ const entries = [];
286
+ let requirement = null;
287
+ let current = null;
288
+ for (let i = 0; i < lines.length; i++) {
289
+ if (fenceMask[i])
290
+ continue;
291
+ const line = lines[i];
292
+ if (REMOVED_REASON_LINE.test(line)) {
293
+ if (current)
294
+ current.hasReason = true;
295
+ continue;
296
+ }
297
+ // Tested before Scenario so adding a third field cannot reorder the match.
298
+ const requirementMatch = line.match(REMOVED_SCENARIO_REQUIREMENT_LINE);
299
+ if (requirementMatch) {
300
+ requirement = { name: normalizeRequirementName(requirementMatch[1]), line: offset + i + 1 };
301
+ current = null;
302
+ continue;
303
+ }
304
+ const scenarioMatch = line.match(REMOVED_SCENARIO_NAME_LINE);
305
+ if (scenarioMatch && requirement) {
306
+ current = {
307
+ requirement: requirement.name,
308
+ scenario: scenarioMatch[1].trim(),
309
+ startLine: requirement.line,
310
+ hasReason: false,
311
+ };
312
+ entries.push(current);
313
+ continue;
314
+ }
315
+ }
316
+ return entries;
317
+ }
212
318
  function parseRemovedEntries(sectionBody) {
213
319
  const { lines, fenceMask, offset } = sectionBody;
214
320
  if (lines.length === 0)
215
321
  return [];
216
322
  const entries = [];
217
323
  let current = null;
324
+ // Set by the first `### Requirement:` header: past that the section is in the
325
+ // header form, where every following bullet belongs to a requirement *body*
326
+ // (its WHEN/THEN steps). Reading those as entry names invents one removal per
327
+ // step. Bullets *before* any header are still the bullet form.
328
+ let inHeaderForm = false;
218
329
  for (let i = 0; i < lines.length; i++) {
219
330
  if (fenceMask[i])
220
331
  continue;
221
332
  const line = lines[i];
222
- const m = line.match(REQUIREMENT_HEADER_REGEX) ??
223
- // Also support bullet list of headers
224
- line.match(/^\s*-\s*`?###\s*Requirement:\s*(.+?)`?\s*$/);
333
+ if (REMOVED_REASON_LINE.test(line)) {
334
+ if (current)
335
+ current.hasReason = true;
336
+ continue;
337
+ }
338
+ if (REMOVED_MIGRATION_LINE.test(line)) {
339
+ if (current)
340
+ current.hasMigration = true;
341
+ continue;
342
+ }
343
+ const header = line.match(REQUIREMENT_HEADER_REGEX);
344
+ if (header)
345
+ inHeaderForm = true;
346
+ const m = header ?? (inHeaderForm ? null : line.match(REMOVED_BULLET_REGEX));
225
347
  if (m) {
226
348
  current = {
227
349
  name: normalizeRequirementName(m[1]),
@@ -232,12 +354,6 @@ function parseRemovedEntries(sectionBody) {
232
354
  entries.push(current);
233
355
  continue;
234
356
  }
235
- if (!current)
236
- continue;
237
- if (REMOVED_REASON_LINE.test(line))
238
- current.hasReason = true;
239
- if (REMOVED_MIGRATION_LINE.test(line))
240
- current.hasMigration = true;
241
357
  }
242
358
  return entries;
243
359
  }
@@ -252,12 +368,11 @@ function parseRenamedPairs(sectionBody) {
252
368
  if (fenceMask[i])
253
369
  continue;
254
370
  const line = lines[i];
255
- const fromMatch = line.match(/^\s*-?\s*FROM:\s*`?###\s*Requirement:\s*(.+?)`?\s*$/);
256
- const toMatch = line.match(/^\s*-?\s*TO:\s*`?###\s*Requirement:\s*(.+?)`?\s*$/);
371
+ const fromMatch = line.match(RENAMED_FROM_REGEX);
372
+ const toMatch = line.match(RENAMED_TO_REGEX);
257
373
  if (fromMatch) {
258
374
  if (current) {
259
- // Two FROMs in a row: the first one has no TO (report 2.4 — was
260
- // silently dropped before).
375
+ // Two FROMs in a row: the first one has no TO.
261
376
  issues.push({ kind: 'from-without-to', name: current.from, line: current.line });
262
377
  }
263
378
  current = { from: normalizeRequirementName(fromMatch[1]), line: offset + i + 1 };
@@ -1 +1 @@
1
- {"version":3,"file":"requirement-blocks.js","sourceRoot":"","sources":["../../../src/core/parsers/requirement-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAkB9E,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,wBAAwB,GAAG,iCAAiC,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAErG,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1B,0DAA0D;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,iBAAiB,CAAC;QACrC,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;YACrC,UAAU;YACV,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,QAAQ,GAAG,CAAC,CAAC;YACb,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACzC,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtE,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAW,EAAE,CACtD,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAW,EAAE,CACnD,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtE,+CAA+C;IAC/C,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,aAAa,GAAa,EAAE,CAAC;IAEjC,wDAAwD;IACxD,OAAO,MAAM,GAAG,gBAAgB,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QACxE,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC;IACX,CAAC;IAED,OAAO,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,8DAA8D;YAC9D,MAAM,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,wBAAwB,CAAE,CAAC;QACzE,MAAM,IAAI,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC;QACT,+DAA+D;QAC/D,MAAM,SAAS,GAAa,CAAC,mBAAmB,CAAC,CAAC;QAClD,OAAO,MAAM,GAAG,gBAAgB,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YACrG,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YACzC,MAAM,EAAE,CAAC;QACX,CAAC;QACD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAEpD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM;QACjD,UAAU;QACV,QAAQ;QACR,UAAU,EAAE,MAAM;QAClB,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK;KACrD,CAAC;AACJ,CAAC;AAuDD,SAAS,oBAAoB,CAAC,OAAe;IAC3C,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IACpE,0EAA0E;IAC1E,4EAA4E;IAC5E,2EAA2E;IAC3E,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAClF,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACtF,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO;QACL,KAAK;QACL,QAAQ;QACR,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,cAAc;QACd,aAAa;QACb,OAAO,EAAE,YAAY;QACrB,aAAa;QACb,iBAAiB,EAAE,qBAAqB,CAAC,QAAQ,CAAC;QAClD,eAAe,EAAE;YACf,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,QAAQ,EAAE,cAAc,CAAC,KAAK;YAC9B,OAAO,EAAE,aAAa,CAAC,KAAK;YAC5B,OAAO,EAAE,aAAa,CAAC,KAAK;SAC7B;KACF,CAAC;AACJ,CAAC;AAuCD,SAAS,qBAAqB,CAAC,KAAe,EAAE,SAAoB;IAClE,MAAM,MAAM,GAAiB,IAAI,GAAG,EAAE,CAAC;IACvC,MAAM,OAAO,GAA4C,EAAE,CAAC;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,SAAS,CAAC,CAAC,CAAC;YAAE,SAAS,CAAC,2DAA2D;QACvF,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAC7C,MAAM,IAAI,GAAgB;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;YAC1C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;YAClD,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;YACzB,UAAU,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;SAC9B,CAAC;QACF,yEAAyE;QACzE,yEAAyE;QACzE,+BAA+B;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,QAAsB,EAAE,OAAe;IAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACzE,CAAC;AAED,oEAAoE;AACpE,SAAS,qBAAqB,CAAC,QAAsB;IACnD,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;gBAC9B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iCAAiC,CAAC,WAAwB;IACjE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,4DAA4D;QAC5D,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM;YAAE,MAAM;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,wBAAwB,CAAC,UAAU,CAAC,KAAK,CAAC,wBAAwB,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,GAAG,GAAa,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC,EAAE,CAAC;QACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2EAA2E;AAC3E,MAAM,mBAAmB,GAAG,oCAAoC,CAAC;AACjE,MAAM,sBAAsB,GAAG,uCAAuC,CAAC;AAEvE,SAAS,mBAAmB,CAAC,WAAwB;IACnD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAwB,IAAI,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,SAAS,CAAC,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,CAAC,GACL,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC;YACpC,sCAAsC;YACtC,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC3D,IAAI,CAAC,EAAE,CAAC;YACN,OAAO,GAAG;gBACR,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC;gBACzB,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,KAAK;aACpB,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;QAC7D,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IACrE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAwB;IAIjD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACzD,MAAM,KAAK,GAAwC,EAAE,CAAC;IACtD,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,IAAI,OAAO,GAA0C,IAAI,CAAC;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,SAAS,CAAC,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAChF,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,OAAO,EAAE,CAAC;gBACZ,gEAAgE;gBAChE,4BAA4B;gBAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,OAAO,GAAG,EAAE,IAAI,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnF,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,MAAM,EAAE,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"requirement-blocks.js","sourceRoot":"","sources":["../../../src/core/parsers/requirement-blocks.ts"],"names":[],"mappings":"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"}
@@ -1,123 +1,118 @@
1
1
  /**
2
- * Shared, fence-aware requirement-reading helpers.
3
- *
4
- * The requirement reader used to be implemented twice — once for main specs
5
- * (`MarkdownParser.parseRequirements`) and once for change deltas
6
- * (`Validator.extractRequirementText` / `countScenarios`) — and the two drifted
7
- * apart. These helpers are the single source of truth for requirement-body
8
- * extraction, scenario counting, and `SHALL`/`MUST` detection in
9
- * `validate <change>`, `validate <spec>`, and `archive`.
2
+ * Shared, fence-aware requirement-reading helpers: the single source of truth
3
+ * for requirement-body extraction, scenario counting and `SHALL`/`MUST`
4
+ * detection in `validate <change>`, `validate <spec>` and `archive`. These were
5
+ * once implemented twice — main specs and change deltas — and drifted apart.
10
6
  */
11
7
  /**
12
- * Normalize document text before any line-based reading: strip a leading UTF-8
13
- * BOM, then collapse CRLF/CR to LF.
14
- *
15
- * The BOM matters because every pattern in this file is anchored with `^`. A
16
- * BOM-prefixed file — the default from several Windows editors and from
17
- * PowerShell's `Out-File` — turns its first line into
18
- * `<BOM>## ADDED Requirements`, so the section scan matches nothing and the
19
- * user is told "No delta sections found", a message that points nowhere near
20
- * the cause. Only a *leading* BOM is stripped; U+FEFF anywhere else is content.
8
+ * Strip a leading UTF-8 BOM, then collapse CRLF/CR to LF, before any line-based
9
+ * reading.
21
10
  *
22
- * One function for both readers on purpose. This normalization previously
23
- * existed twice (`requirement-blocks` and `MarkdownParser`), which is the same
24
- * shape as the scenario-header duplication that let archive and validate drift.
11
+ * Every pattern in this file is anchored with `^`, so a BOM turns the first line
12
+ * into `<BOM>## ADDED Requirements`, the section scan matches nothing, and the
13
+ * user is told "No delta sections found". Only a *leading* BOM is stripped;
14
+ * U+FEFF anywhere else is content.
25
15
  */
26
16
  export declare function normalizeDocument(content: string): string;
27
17
  /**
28
- * Build a per-line mask marking lines that fall inside a fenced code block
29
- * (``` ``` ``` or ``` ~~~ ```), including the fence lines themselves. Mirrors the
30
- * fence rules markdown uses: a fence opens on the first ```` ```/~~~ ```` of
31
- * length >= 3 and closes on a line of the same marker whose length is >= the
32
- * opening length, with nothing but whitespace after it.
18
+ * Strip a leading UTF-8 BOM, leaving line endings untouched \u2014 for readers that
19
+ * write the file back and so must preserve its endings, which rules out
20
+ * `normalizeDocument`. Writing the stripped text back is deliberate: every
21
+ * document tospec produces is UTF-8 *without* a BOM.
33
22
  */
23
+ export declare function stripBom(content: string): string;
34
24
  export interface CodeFenceScan {
25
+ /** True for every line inside a fenced code block, fence lines included. */
35
26
  mask: boolean[];
36
27
  /** 1-based line of a fence that was opened but never closed, else null. */
37
28
  unclosedFenceLine: number | null;
38
29
  }
39
30
  /**
40
- * Fence scan that also reports an unclosed fence: a fence opened without a
41
- * closing line masks every following line, which silently hides all content
42
- * after it — callers on the validation path must surface that as an ERROR
43
- * instead of letting the document degrade silently (report 2.3).
31
+ * Mask the lines inside fenced code blocks, mirroring markdown's own rules: a
32
+ * fence opens on a ```` ``` ````/`~~~` run of length >= 3 and closes on the same
33
+ * marker at >= the opening length with nothing but whitespace after it.
34
+ *
35
+ * An unclosed fence masks every following line, silently hiding the rest of the
36
+ * document, so it is reported separately for the validation path to raise.
44
37
  */
45
38
  export declare function scanCodeFences(lines: string[]): CodeFenceScan;
46
39
  export declare function buildCodeFenceMask(lines: string[]): boolean[];
47
40
  /**
48
- * A scenario header. Only `#### Scenario:` counts — a `#### Notes` or other
49
- * level-4 header under a requirement is NOT a scenario (report 2.1). The spec
50
- * path (`MarkdownParser.parseScenarios`) applies the same filter, so both
51
- * paths stay in parity.
52
- *
53
- * Exported because archive's scenario-drift check reads scenarios too. It used
54
- * to carry its own copy of this pattern, and the copies were not actually the
55
- * same — parity between the two readers has to hold by construction, not by two
56
- * literals that happen to agree.
41
+ * Only `#### Scenario:` counts as a scenario — a `#### Notes` or other level-4
42
+ * header under a requirement does not. Exported so archive's scenario-drift
43
+ * check shares it: it once carried its own, subtly different copy.
57
44
  */
58
45
  export declare const SCENARIO_HEADER: RegExp;
59
46
  /**
60
47
  * The scenario name from a `#### Scenario:` header line, or null when the line
61
- * is not one. The single place the name is peeled off the header, so every
62
- * reader normalizes it identically.
48
+ * is not one. The single place the name is peeled off, so every reader agrees.
63
49
  */
64
50
  export declare function scenarioNameFrom(line: string): string | null;
65
51
  /**
66
- * The one predicate for normative-keyword detection. Matches `SHALL` or `MUST`
67
- * as whole words so the change-delta reader and the schema-based reader accept
68
- * and reject identical text.
52
+ * The one predicate for normative-keyword detection, matching whole words so the
53
+ * delta reader and the schema reader accept and reject identical text.
69
54
  */
70
55
  export declare function containsShallOrMust(text: string): boolean;
71
56
  /**
72
- * Extract the full requirement body from the lines that follow a
73
- * `### Requirement:` header (the lines may include scenarios and fenced code).
57
+ * Extract the full requirement body from the lines following a
58
+ * `### Requirement:` header, up to the first header on a non-fenced line —
59
+ * usually the first `#### Scenario:`, but also a stray `###` divider the delta
60
+ * reader absorbed into the block.
74
61
  *
75
- * Captures every body line from the start up to the first header found on a
76
- * non-fenced line — usually the first `#### Scenario:`, but also a stray `###`
77
- * divider the delta reader absorbed into the block — skipping blank lines and
78
- * any line inside a fenced code block. `**metadata**:` lines are skipped only
79
- * when other body text remains: a requirement written entirely as
80
- * `**Constraint**: The system MUST ...` keeps that line as its body. Captured
81
- * lines are trimmed and joined with newlines so a requirement whose text wraps
82
- * across lines — or whose `SHALL`/`MUST` lands on a later line — is read in
83
- * full.
62
+ * `**metadata**:` lines are skipped only when other body text remains, so a
63
+ * requirement written entirely as `**Constraint**: The system MUST ...` keeps
64
+ * that line as its body. Lines are joined with newlines so text that wraps — or
65
+ * whose `SHALL`/`MUST` lands on a later line — is read in full.
84
66
  */
85
67
  export declare function extractRequirementBody(bodyLines: string[]): string;
86
68
  /**
87
- * Parser/display fallback for a requirement block with no body text. This is
88
- * what lets a bare `### The system SHALL ...` header remain readable on the
89
- * spec path (the title is the requirement). Validator body-keyword checks for
90
- * canonical `### Requirement:` blocks use `extractRequirementBody` directly so
91
- * a keyword that appears only in the header still receives the body-keyword
92
- * hint.
69
+ * Parser/display fallback for a requirement block with no body text, so a bare
70
+ * `### The system SHALL ...` header stays readable on the spec path. Validator
71
+ * body-keyword checks call `extractRequirementBody` directly instead, so a
72
+ * keyword that appears only in the header still gets the body-keyword hint.
93
73
  */
94
74
  export declare function extractRequirementText(headerTitle: string, bodyLines: string[]): string;
95
- /**
96
- * Count the real scenarios in a requirement block: `#### ` headers on non-fenced
97
- * lines. A `#### Scenario:` that lives inside a fenced example is not a real
98
- * scenario and is not counted.
99
- */
75
+ /** Count real scenarios: a `#### Scenario:` inside a fenced example is not one. */
100
76
  export declare function countScenarios(bodyLines: string[]): number;
101
77
  /**
102
- * The scenario names of a requirement block, in document order, fence-masked
103
- * and matched through `SCENARIO_HEADER` like every other scenario reader.
104
- * Duplicates are kept — `findMissingScenarios` counts multiplicity.
78
+ * Scenario names in document order. Duplicates are kept — `findMissingScenarios`
79
+ * counts multiplicity.
105
80
  */
106
81
  export declare function scenarioNamesOf(requirementRaw: string): string[];
107
82
  /**
108
83
  * Scenarios present in the current requirement that an incoming MODIFIED block
109
84
  * would drop. A MODIFIED replaces the whole requirement, so anything it omits
110
- * is deleted — archive refuses on a non-empty result, and validate reports the
111
- * same thing earlier.
85
+ * is deleted. Shared by `specs-apply` (archive) and the validator so validate
86
+ * reports exactly what archive refuses.
112
87
  *
113
88
  * Multiplicity-aware: a name present N times in current and M times in incoming
114
- * means max(0, N - M) instances are missing. Set membership would treat N > M
115
- * as fully covered and let a duplicate be dropped silently.
116
- *
117
- * Shared by `specs-apply` (archive) and the validator so the two cannot drift:
118
- * validate must report exactly what archive refuses, no more and no less.
89
+ * leaves max(0, N - M) missing. Set membership would treat N > M as fully
90
+ * covered and let a duplicate be dropped silently.
119
91
  */
120
92
  export declare function findMissingScenarios(currentRaw: string, incomingRaw: string): string[];
93
+ /**
94
+ * A requirement block with the named scenarios cut out, header and body. Takes
95
+ * declared removals out of the "current" side before comparing: a scenario
96
+ * under `## REMOVED Scenarios` is going on purpose, so its bullets are not a
97
+ * loss to warn about.
98
+ *
99
+ * A scenario runs from its `#### Scenario:` header to the next header of any
100
+ * level — the boundary every other scenario reader here uses.
101
+ */
102
+ export declare function withoutScenarios(requirementRaw: string, names: readonly string[]): string;
103
+ /**
104
+ * Bullet lines the current requirement has that an incoming MODIFIED drops —
105
+ * the quieter half of the scenario-name check above: a block that restates every
106
+ * scenario *name* correctly but carries older wording inside them.
107
+ *
108
+ * Bullets and nothing else, on purpose. WHEN/THEN/AND bullets are the grammar's
109
+ * atomic units and each lives on one line, so a dropped bullet is a real loss.
110
+ * Prose bodies are not compared: re-flowing a paragraph changes every line
111
+ * without changing a word.
112
+ *
113
+ * Multiplicity-aware for the same reason as `findMissingScenarios`.
114
+ */
115
+ export declare function findDroppedBullets(currentRaw: string, incomingRaw: string): string[];
121
116
  export interface ScenarioAnalysis {
122
117
  scenarios: Array<{
123
118
  title: string;
@@ -133,10 +128,9 @@ export interface ScenarioAnalysis {
133
128
  }>;
134
129
  }
135
130
  /**
136
- * Analyze the scenarios of a requirement block: which `####` headers are real
137
- * scenarios, whether each scenario body contains the WHEN and THEN keywords
138
- * (uppercase, per the spec convention), and which level-4 headers are not
139
- * scenarios at all. Fence-aware like the other readers.
131
+ * Which `####` headers are real scenarios, whether each scenario body contains
132
+ * the uppercase WHEN and THEN keywords, and which level-4 headers are not
133
+ * scenarios at all.
140
134
  */
141
135
  export declare function analyzeScenarios(lines: string[]): ScenarioAnalysis;
142
136
  //# sourceMappingURL=requirement-text.d.ts.map