@seanmars/tospec 0.24.0 → 0.26.0-beta

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 (332) hide show
  1. package/CHANGELOG.md +241 -0
  2. package/README.md +10 -6
  3. package/assets/dashboard/lib/derive.js +11 -5
  4. package/assets/dashboard/lib/store.js +4 -2
  5. package/assets/dashboard/views/change.js +5 -3
  6. package/dist/cli/index.d.ts.map +1 -1
  7. package/dist/cli/index.js +42 -7
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/commands/config.d.ts.map +1 -1
  10. package/dist/commands/config.js +213 -100
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/commands/dashboard.d.ts +9 -0
  13. package/dist/commands/dashboard.d.ts.map +1 -1
  14. package/dist/commands/dashboard.js +77 -21
  15. package/dist/commands/dashboard.js.map +1 -1
  16. package/dist/commands/decision.d.ts +38 -1
  17. package/dist/commands/decision.d.ts.map +1 -1
  18. package/dist/commands/decision.js +303 -27
  19. package/dist/commands/decision.js.map +1 -1
  20. package/dist/commands/metrics.d.ts +3 -4
  21. package/dist/commands/metrics.d.ts.map +1 -1
  22. package/dist/commands/metrics.js +3 -5
  23. package/dist/commands/metrics.js.map +1 -1
  24. package/dist/commands/shared-output.d.ts +24 -0
  25. package/dist/commands/shared-output.d.ts.map +1 -1
  26. package/dist/commands/shared-output.js +21 -2
  27. package/dist/commands/shared-output.js.map +1 -1
  28. package/dist/commands/show.d.ts.map +1 -1
  29. package/dist/commands/show.js +12 -9
  30. package/dist/commands/show.js.map +1 -1
  31. package/dist/commands/validate.d.ts +19 -0
  32. package/dist/commands/validate.d.ts.map +1 -1
  33. package/dist/commands/validate.js +243 -64
  34. package/dist/commands/validate.js.map +1 -1
  35. package/dist/commands/workflow/instructions.d.ts +7 -1
  36. package/dist/commands/workflow/instructions.d.ts.map +1 -1
  37. package/dist/commands/workflow/instructions.js +299 -81
  38. package/dist/commands/workflow/instructions.js.map +1 -1
  39. package/dist/commands/workflow/new-change.d.ts.map +1 -1
  40. package/dist/commands/workflow/new-change.js +26 -17
  41. package/dist/commands/workflow/new-change.js.map +1 -1
  42. package/dist/commands/workflow/prompt-escape.d.ts +25 -0
  43. package/dist/commands/workflow/prompt-escape.d.ts.map +1 -0
  44. package/dist/commands/workflow/prompt-escape.js +62 -0
  45. package/dist/commands/workflow/prompt-escape.js.map +1 -0
  46. package/dist/commands/workflow/schemas.d.ts.map +1 -1
  47. package/dist/commands/workflow/schemas.js +34 -16
  48. package/dist/commands/workflow/schemas.js.map +1 -1
  49. package/dist/commands/workflow/shared.d.ts +46 -10
  50. package/dist/commands/workflow/shared.d.ts.map +1 -1
  51. package/dist/commands/workflow/shared.js +66 -30
  52. package/dist/commands/workflow/shared.js.map +1 -1
  53. package/dist/commands/workflow/status.d.ts +5 -2
  54. package/dist/commands/workflow/status.d.ts.map +1 -1
  55. package/dist/commands/workflow/status.js +62 -28
  56. package/dist/commands/workflow/status.js.map +1 -1
  57. package/dist/core/archive.d.ts +38 -0
  58. package/dist/core/archive.d.ts.map +1 -1
  59. package/dist/core/archive.js +492 -75
  60. package/dist/core/archive.js.map +1 -1
  61. package/dist/core/artifact-graph/index.d.ts +2 -2
  62. package/dist/core/artifact-graph/index.d.ts.map +1 -1
  63. package/dist/core/artifact-graph/index.js +2 -2
  64. package/dist/core/artifact-graph/index.js.map +1 -1
  65. package/dist/core/artifact-graph/instruction-loader.d.ts +8 -0
  66. package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
  67. package/dist/core/artifact-graph/instruction-loader.js +58 -36
  68. package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
  69. package/dist/core/artifact-graph/resolver.d.ts +39 -12
  70. package/dist/core/artifact-graph/resolver.d.ts.map +1 -1
  71. package/dist/core/artifact-graph/resolver.js +82 -36
  72. package/dist/core/artifact-graph/resolver.js.map +1 -1
  73. package/dist/core/artifact-graph/schema.d.ts +24 -0
  74. package/dist/core/artifact-graph/schema.d.ts.map +1 -1
  75. package/dist/core/artifact-graph/schema.js +32 -1
  76. package/dist/core/artifact-graph/schema.js.map +1 -1
  77. package/dist/core/artifact-graph/stub-detection.d.ts +10 -2
  78. package/dist/core/artifact-graph/stub-detection.d.ts.map +1 -1
  79. package/dist/core/artifact-graph/stub-detection.js +18 -11
  80. package/dist/core/artifact-graph/stub-detection.js.map +1 -1
  81. package/dist/core/artifact-graph/types.d.ts +2 -2
  82. package/dist/core/artifact-graph/types.d.ts.map +1 -1
  83. package/dist/core/artifact-graph/types.js +10 -1
  84. package/dist/core/artifact-graph/types.js.map +1 -1
  85. package/dist/core/change-metadata/schema.d.ts.map +1 -1
  86. package/dist/core/change-metadata/schema.js +18 -4
  87. package/dist/core/change-metadata/schema.js.map +1 -1
  88. package/dist/core/change-presenter.d.ts.map +1 -1
  89. package/dist/core/change-presenter.js +13 -8
  90. package/dist/core/change-presenter.js.map +1 -1
  91. package/dist/core/change-status-policy.d.ts.map +1 -1
  92. package/dist/core/change-status-policy.js +3 -1
  93. package/dist/core/change-status-policy.js.map +1 -1
  94. package/dist/core/codex-metrics.d.ts +1 -1
  95. package/dist/core/codex-metrics.js +1 -1
  96. package/dist/core/config-schema.d.ts +8 -0
  97. package/dist/core/config-schema.d.ts.map +1 -1
  98. package/dist/core/config-schema.js +10 -0
  99. package/dist/core/config-schema.js.map +1 -1
  100. package/dist/core/dashboard-activity.d.ts +4 -4
  101. package/dist/core/dashboard-activity.js +4 -4
  102. package/dist/core/dashboard-data.d.ts +11 -5
  103. package/dist/core/dashboard-data.d.ts.map +1 -1
  104. package/dist/core/dashboard-data.js +54 -28
  105. package/dist/core/dashboard-data.js.map +1 -1
  106. package/dist/core/dashboard-hub.d.ts +3 -3
  107. package/dist/core/dashboard-hub.d.ts.map +1 -1
  108. package/dist/core/dashboard-hub.js +16 -4
  109. package/dist/core/dashboard-hub.js.map +1 -1
  110. package/dist/core/dashboard-routes.d.ts +2 -1
  111. package/dist/core/dashboard-routes.d.ts.map +1 -1
  112. package/dist/core/dashboard-routes.js +102 -33
  113. package/dist/core/dashboard-routes.js.map +1 -1
  114. package/dist/core/global-config.d.ts +71 -2
  115. package/dist/core/global-config.d.ts.map +1 -1
  116. package/dist/core/global-config.js +149 -4
  117. package/dist/core/global-config.js.map +1 -1
  118. package/dist/core/id.d.ts +9 -0
  119. package/dist/core/id.d.ts.map +1 -1
  120. package/dist/core/id.js +37 -0
  121. package/dist/core/id.js.map +1 -1
  122. package/dist/core/init.d.ts +9 -2
  123. package/dist/core/init.d.ts.map +1 -1
  124. package/dist/core/init.js +116 -33
  125. package/dist/core/init.js.map +1 -1
  126. package/dist/core/list.d.ts.map +1 -1
  127. package/dist/core/list.js +69 -45
  128. package/dist/core/list.js.map +1 -1
  129. package/dist/core/local-server.d.ts +9 -2
  130. package/dist/core/local-server.d.ts.map +1 -1
  131. package/dist/core/local-server.js +24 -4
  132. package/dist/core/local-server.js.map +1 -1
  133. package/dist/core/markdown-render.d.ts.map +1 -1
  134. package/dist/core/markdown-render.js +7 -2
  135. package/dist/core/markdown-render.js.map +1 -1
  136. package/dist/core/migrate.d.ts +24 -2
  137. package/dist/core/migrate.d.ts.map +1 -1
  138. package/dist/core/migrate.js +335 -59
  139. package/dist/core/migrate.js.map +1 -1
  140. package/dist/core/parsers/change-parser.d.ts +20 -1
  141. package/dist/core/parsers/change-parser.d.ts.map +1 -1
  142. package/dist/core/parsers/change-parser.js +76 -73
  143. package/dist/core/parsers/change-parser.js.map +1 -1
  144. package/dist/core/parsers/markdown-parser.d.ts +24 -0
  145. package/dist/core/parsers/markdown-parser.d.ts.map +1 -1
  146. package/dist/core/parsers/markdown-parser.js +65 -10
  147. package/dist/core/parsers/markdown-parser.js.map +1 -1
  148. package/dist/core/parsers/requirement-blocks.d.ts +127 -6
  149. package/dist/core/parsers/requirement-blocks.d.ts.map +1 -1
  150. package/dist/core/parsers/requirement-blocks.js +349 -56
  151. package/dist/core/parsers/requirement-blocks.js.map +1 -1
  152. package/dist/core/parsers/requirement-text.d.ts +25 -1
  153. package/dist/core/parsers/requirement-text.d.ts.map +1 -1
  154. package/dist/core/parsers/requirement-text.js +62 -6
  155. package/dist/core/parsers/requirement-text.js.map +1 -1
  156. package/dist/core/parsers/spec-structure.d.ts.map +1 -1
  157. package/dist/core/parsers/spec-structure.js +36 -24
  158. package/dist/core/parsers/spec-structure.js.map +1 -1
  159. package/dist/core/project-config.d.ts +9 -2
  160. package/dist/core/project-config.d.ts.map +1 -1
  161. package/dist/core/project-config.js +30 -7
  162. package/dist/core/project-config.js.map +1 -1
  163. package/dist/core/project-layout.d.ts +26 -0
  164. package/dist/core/project-layout.d.ts.map +1 -1
  165. package/dist/core/project-layout.js +51 -1
  166. package/dist/core/project-layout.js.map +1 -1
  167. package/dist/core/schema-names.d.ts +17 -0
  168. package/dist/core/schema-names.d.ts.map +1 -1
  169. package/dist/core/schema-names.js +24 -0
  170. package/dist/core/schema-names.js.map +1 -1
  171. package/dist/core/shared/index.d.ts +1 -1
  172. package/dist/core/shared/index.d.ts.map +1 -1
  173. package/dist/core/shared/index.js +1 -1
  174. package/dist/core/shared/index.js.map +1 -1
  175. package/dist/core/shared/rules-generation.d.ts +12 -0
  176. package/dist/core/shared/rules-generation.d.ts.map +1 -1
  177. package/dist/core/shared/rules-generation.js +26 -2
  178. package/dist/core/shared/rules-generation.js.map +1 -1
  179. package/dist/core/shared/skill-generation.d.ts +7 -0
  180. package/dist/core/shared/skill-generation.d.ts.map +1 -1
  181. package/dist/core/shared/skill-generation.js +19 -0
  182. package/dist/core/shared/skill-generation.js.map +1 -1
  183. package/dist/core/shared/tool-detection.d.ts +10 -1
  184. package/dist/core/shared/tool-detection.d.ts.map +1 -1
  185. package/dist/core/shared/tool-detection.js +37 -6
  186. package/dist/core/shared/tool-detection.js.map +1 -1
  187. package/dist/core/spec-presenter.d.ts.map +1 -1
  188. package/dist/core/spec-presenter.js +23 -1
  189. package/dist/core/spec-presenter.js.map +1 -1
  190. package/dist/core/specs-apply.d.ts +98 -1
  191. package/dist/core/specs-apply.d.ts.map +1 -1
  192. package/dist/core/specs-apply.js +426 -63
  193. package/dist/core/specs-apply.js.map +1 -1
  194. package/dist/core/templates/fragments/change-diff.d.ts +37 -0
  195. package/dist/core/templates/fragments/change-diff.d.ts.map +1 -0
  196. package/dist/core/templates/fragments/change-diff.js +37 -0
  197. package/dist/core/templates/fragments/change-diff.js.map +1 -0
  198. package/dist/core/templates/fragments/sync-fail.d.ts +8 -0
  199. package/dist/core/templates/fragments/sync-fail.d.ts.map +1 -0
  200. package/dist/core/templates/fragments/sync-fail.js +8 -0
  201. package/dist/core/templates/fragments/sync-fail.js.map +1 -0
  202. package/dist/core/templates/fragments/validate.d.ts +14 -1
  203. package/dist/core/templates/fragments/validate.d.ts.map +1 -1
  204. package/dist/core/templates/fragments/validate.js +14 -1
  205. package/dist/core/templates/fragments/validate.js.map +1 -1
  206. package/dist/core/templates/fragments/verify.d.ts +2 -2
  207. package/dist/core/templates/fragments/verify.d.ts.map +1 -1
  208. package/dist/core/templates/fragments/verify.js +8 -5
  209. package/dist/core/templates/fragments/verify.js.map +1 -1
  210. package/dist/core/templates/workflows/apply.d.ts +1 -1
  211. package/dist/core/templates/workflows/apply.d.ts.map +1 -1
  212. package/dist/core/templates/workflows/apply.js +29 -10
  213. package/dist/core/templates/workflows/apply.js.map +1 -1
  214. package/dist/core/templates/workflows/archive.d.ts.map +1 -1
  215. package/dist/core/templates/workflows/archive.js +27 -9
  216. package/dist/core/templates/workflows/archive.js.map +1 -1
  217. package/dist/core/templates/workflows/decision.d.ts.map +1 -1
  218. package/dist/core/templates/workflows/decision.js +10 -4
  219. package/dist/core/templates/workflows/decision.js.map +1 -1
  220. package/dist/core/templates/workflows/explore.d.ts +2 -2
  221. package/dist/core/templates/workflows/explore.d.ts.map +1 -1
  222. package/dist/core/templates/workflows/explore.js +7 -3
  223. package/dist/core/templates/workflows/explore.js.map +1 -1
  224. package/dist/core/templates/workflows/grill.d.ts +2 -2
  225. package/dist/core/templates/workflows/grill.d.ts.map +1 -1
  226. package/dist/core/templates/workflows/grill.js +5 -4
  227. package/dist/core/templates/workflows/grill.js.map +1 -1
  228. package/dist/core/templates/workflows/issue.d.ts.map +1 -1
  229. package/dist/core/templates/workflows/issue.js +9 -3
  230. package/dist/core/templates/workflows/issue.js.map +1 -1
  231. package/dist/core/templates/workflows/propose.d.ts.map +1 -1
  232. package/dist/core/templates/workflows/propose.js +4 -1
  233. package/dist/core/templates/workflows/propose.js.map +1 -1
  234. package/dist/core/templates/workflows/sync.d.ts.map +1 -1
  235. package/dist/core/templates/workflows/sync.js +25 -11
  236. package/dist/core/templates/workflows/sync.js.map +1 -1
  237. package/dist/core/templates/workflows/update.d.ts.map +1 -1
  238. package/dist/core/templates/workflows/update.js +17 -10
  239. package/dist/core/templates/workflows/update.js.map +1 -1
  240. package/dist/core/update.d.ts +5 -0
  241. package/dist/core/update.d.ts.map +1 -1
  242. package/dist/core/update.js +66 -29
  243. package/dist/core/update.js.map +1 -1
  244. package/dist/core/validation/constants.d.ts +7 -1
  245. package/dist/core/validation/constants.d.ts.map +1 -1
  246. package/dist/core/validation/constants.js +16 -2
  247. package/dist/core/validation/constants.js.map +1 -1
  248. package/dist/core/validation/purpose-placeholder.d.ts.map +1 -1
  249. package/dist/core/validation/purpose-placeholder.js +35 -11
  250. package/dist/core/validation/purpose-placeholder.js.map +1 -1
  251. package/dist/core/validation/section-validator.d.ts +7 -0
  252. package/dist/core/validation/section-validator.d.ts.map +1 -1
  253. package/dist/core/validation/section-validator.js +22 -2
  254. package/dist/core/validation/section-validator.js.map +1 -1
  255. package/dist/core/validation/sister-changes.d.ts +93 -0
  256. package/dist/core/validation/sister-changes.d.ts.map +1 -0
  257. package/dist/core/validation/sister-changes.js +180 -0
  258. package/dist/core/validation/sister-changes.js.map +1 -0
  259. package/dist/core/validation/task-markers.d.ts +9 -0
  260. package/dist/core/validation/task-markers.d.ts.map +1 -0
  261. package/dist/core/validation/task-markers.js +71 -0
  262. package/dist/core/validation/task-markers.js.map +1 -0
  263. package/dist/core/validation/types.d.ts +58 -0
  264. package/dist/core/validation/types.d.ts.map +1 -1
  265. package/dist/core/validation/types.js +22 -0
  266. package/dist/core/validation/types.js.map +1 -1
  267. package/dist/core/validation/validator.d.ts +79 -2
  268. package/dist/core/validation/validator.d.ts.map +1 -1
  269. package/dist/core/validation/validator.js +565 -84
  270. package/dist/core/validation/validator.js.map +1 -1
  271. package/dist/utils/change-metadata.d.ts +62 -5
  272. package/dist/utils/change-metadata.d.ts.map +1 -1
  273. package/dist/utils/change-metadata.js +193 -31
  274. package/dist/utils/change-metadata.js.map +1 -1
  275. package/dist/utils/change-utils.d.ts +21 -0
  276. package/dist/utils/change-utils.d.ts.map +1 -1
  277. package/dist/utils/change-utils.js +168 -53
  278. package/dist/utils/change-utils.js.map +1 -1
  279. package/dist/utils/command-line.d.ts +11 -0
  280. package/dist/utils/command-line.d.ts.map +1 -0
  281. package/dist/utils/command-line.js +43 -0
  282. package/dist/utils/command-line.js.map +1 -0
  283. package/dist/utils/display-width.d.ts +10 -0
  284. package/dist/utils/display-width.d.ts.map +1 -0
  285. package/dist/utils/display-width.js +15 -0
  286. package/dist/utils/display-width.js.map +1 -0
  287. package/dist/utils/file-system.d.ts +16 -0
  288. package/dist/utils/file-system.d.ts.map +1 -1
  289. package/dist/utils/file-system.js +49 -2
  290. package/dist/utils/file-system.js.map +1 -1
  291. package/dist/utils/frontmatter.d.ts.map +1 -1
  292. package/dist/utils/frontmatter.js +11 -5
  293. package/dist/utils/frontmatter.js.map +1 -1
  294. package/dist/utils/interactive.d.ts.map +1 -1
  295. package/dist/utils/interactive.js +3 -1
  296. package/dist/utils/interactive.js.map +1 -1
  297. package/dist/utils/item-discovery.d.ts +3 -2
  298. package/dist/utils/item-discovery.d.ts.map +1 -1
  299. package/dist/utils/item-discovery.js +34 -16
  300. package/dist/utils/item-discovery.js.map +1 -1
  301. package/dist/utils/link.d.ts +0 -1
  302. package/dist/utils/link.d.ts.map +1 -1
  303. package/dist/utils/link.js +0 -1
  304. package/dist/utils/link.js.map +1 -1
  305. package/dist/utils/match.d.ts.map +1 -1
  306. package/dist/utils/match.js +10 -1
  307. package/dist/utils/match.js.map +1 -1
  308. package/dist/utils/option-flags.d.ts +9 -0
  309. package/dist/utils/option-flags.d.ts.map +1 -0
  310. package/dist/utils/option-flags.js +12 -0
  311. package/dist/utils/option-flags.js.map +1 -0
  312. package/dist/utils/sentence.d.ts +9 -0
  313. package/dist/utils/sentence.d.ts.map +1 -0
  314. package/dist/utils/sentence.js +12 -0
  315. package/dist/utils/sentence.js.map +1 -0
  316. package/dist/utils/spec-files.d.ts +84 -1
  317. package/dist/utils/spec-files.d.ts.map +1 -1
  318. package/dist/utils/spec-files.js +192 -3
  319. package/dist/utils/spec-files.js.map +1 -1
  320. package/dist/utils/task-progress.d.ts.map +1 -1
  321. package/dist/utils/task-progress.js +32 -9
  322. package/dist/utils/task-progress.js.map +1 -1
  323. package/dist/utils/timestamp.d.ts +27 -0
  324. package/dist/utils/timestamp.d.ts.map +1 -1
  325. package/dist/utils/timestamp.js +37 -0
  326. package/dist/utils/timestamp.js.map +1 -1
  327. package/package.json +4 -1
  328. package/schemas/decision/templates/decision.md +2 -2
  329. package/schemas/issue/schema.yaml +12 -6
  330. package/schemas/issue/templates/task.md +1 -1
  331. package/schemas/sdd/schema.yaml +21 -10
  332. package/schemas/sdd/templates/proposal.md +1 -1
@@ -1,6 +1,8 @@
1
- import { buildCodeFenceMask, normalizeDocument } from './requirement-text.js';
1
+ import { LINE_TERMINATOR, buildCodeFenceMask, normalizeDocument, stripClosingHashes } from './requirement-text.js';
2
+ import { headingLevel } from './markdown-parser.js';
3
+ import { levenshtein } from '../../utils/match.js';
2
4
  export function normalizeRequirementName(name) {
3
- return name.trim();
5
+ return stripClosingHashes(name);
4
6
  }
5
7
  /**
6
8
  * Case- and whitespace-insensitive fold, for typo detection only: two spellings
@@ -12,16 +14,61 @@ export function foldRequirementName(name) {
12
14
  return normalizeRequirementName(name).toLowerCase().replace(/\s+/g, ' ');
13
15
  }
14
16
  /**
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.
17
+ * The first of `names` that folds onto `name`, else undefined. One helper so
18
+ * every duplicate and collision check applies the same rule: in-section checks
19
+ * that compared exactly let `Foo` + `foo` through while the cross-section ones
20
+ * refused them.
19
21
  */
20
- export const REQUIREMENT_HEADER_REGEX = /^###\s*Requirement:\s*(.+)\s*$/i;
22
+ export function findFoldedMatch(names, name) {
23
+ const folded = foldRequirementName(name);
24
+ for (const candidate of names) {
25
+ if (foldRequirementName(candidate) === folded)
26
+ return candidate;
27
+ }
28
+ return undefined;
29
+ }
30
+ const REQUIREMENT_HEADER_LINE = /^###\s*Requirement:\s*(.[\s\S]*)$/i;
31
+ /**
32
+ * The name a `### Requirement:` header carries, as authored, or null when the
33
+ * line is not one. The one spelling of a requirement header, shared with the
34
+ * main-spec structure guard and the merge. `\s*` on purpose: `###Requirement:`
35
+ * is accepted here (see the no-space regressions in requirement-blocks.test.ts),
36
+ * so a guard using a stricter `\s+` let a duplicate slip past and the merge's
37
+ * Map collapsed it.
38
+ *
39
+ * The rest of the line is captured whole and cut at a line terminator in code.
40
+ * As `(.+)\s*$`, `\s` took U+2028/U+2029 where `.` stops, so a header holding
41
+ * one re-split its blank run every way: 80k blanks inside the name took 5 s,
42
+ * and blanks before it grew cubically. The cut keeps what `(.+)` captured, and
43
+ * anything but blanks after the terminator is still no match.
44
+ */
45
+ export function matchRequirementHeader(line) {
46
+ const m = REQUIREMENT_HEADER_LINE.exec(line);
47
+ if (!m)
48
+ return null;
49
+ const name = m[1];
50
+ const end = name.search(LINE_TERMINATOR);
51
+ if (end === -1)
52
+ return name;
53
+ return name.slice(end).trim() === '' ? name.slice(0, end) : null;
54
+ }
55
+ /**
56
+ * Whether a line ends the main spec's `## Requirements` section: a `#` or `##`
57
+ * heading, by `headingLevel`, the rule MarkdownParser ends that section by.
58
+ * Shared with the main-spec structure guard, so the requirements it checks are
59
+ * the ones the merge reads. Not fence-aware; the caller skips fenced lines.
60
+ */
61
+ export function endsRequirementsSection(line) {
62
+ const level = headingLevel(line);
63
+ return level !== null && level <= 2;
64
+ }
21
65
  export function extractRequirementsSection(content) {
22
66
  const lines = normalizeDocument(content).split('\n');
23
67
  const fenceMask = buildCodeFenceMask(lines);
24
- const reqHeaderIndex = lines.findIndex((l, i) => !fenceMask[i] && /^##\s+Requirements\s*$/i.test(l));
68
+ // Keyed by `sectionHeaderKey`, the reading validate's `findSection` shares: a
69
+ // regex of its own missed `## Requirements ##`, so the merge would add a
70
+ // second Requirements section to a spec validate passes.
71
+ const reqHeaderIndex = lines.findIndex((l, i) => !fenceMask[i] && sectionHeaderKey(l) === 'requirements');
25
72
  if (reqHeaderIndex === -1) {
26
73
  // No Requirements section: hand back an empty one appended at the end.
27
74
  // From the normalized text, not `content`: the parts are written back, and
@@ -36,10 +83,14 @@ export function extractRequirementsSection(content) {
36
83
  after: '\n',
37
84
  };
38
85
  }
39
- // The section ends at the next unfenced '## ' header.
86
+ // The section ends at the next unfenced `#` or `##` heading, where the spec
87
+ // parser ends it. Ending at `##` only read a `#` heading after the last
88
+ // requirement, and the text under it, as part of that block, so an ADDED
89
+ // requirement was appended under the `#` heading, where the parser no longer
90
+ // reads it as a requirement.
40
91
  let endIndex = lines.length;
41
92
  for (let i = reqHeaderIndex + 1; i < lines.length; i++) {
42
- if (!fenceMask[i] && /^##\s+/.test(lines[i])) {
93
+ if (!fenceMask[i] && endsRequirementsSection(lines[i])) {
43
94
  endIndex = i;
44
95
  break;
45
96
  }
@@ -48,8 +99,8 @@ export function extractRequirementsSection(content) {
48
99
  const headerLine = lines[reqHeaderIndex];
49
100
  const sectionBodyLines = lines.slice(reqHeaderIndex + 1, endIndex);
50
101
  const sectionBodyMask = fenceMask.slice(reqHeaderIndex + 1, endIndex);
51
- const isRequirementHeader = (cursor) => !sectionBodyMask[cursor] && REQUIREMENT_HEADER_REGEX.test(sectionBodyLines[cursor]);
52
- const isTopLevelHeader = (cursor) => !sectionBodyMask[cursor] && /^##\s+/.test(sectionBodyLines[cursor]);
102
+ const isRequirementHeader = (cursor) => !sectionBodyMask[cursor] && matchRequirementHeader(sectionBodyLines[cursor]) !== null;
103
+ const isTopLevelHeader = (cursor) => !sectionBodyMask[cursor] && endsRequirementsSection(sectionBodyLines[cursor]);
53
104
  const blocks = [];
54
105
  let cursor = 0;
55
106
  const preambleLines = [];
@@ -63,8 +114,7 @@ export function extractRequirementsSection(content) {
63
114
  cursor++;
64
115
  continue;
65
116
  }
66
- const headerMatch = headerLineCandidate.match(REQUIREMENT_HEADER_REGEX);
67
- const name = normalizeRequirementName(headerMatch[1]);
117
+ const name = normalizeRequirementName(matchRequirementHeader(headerLineCandidate));
68
118
  const startLine = reqHeaderIndex + 1 + cursor + 1;
69
119
  cursor++;
70
120
  const bodyLines = [headerLineCandidate];
@@ -85,6 +135,22 @@ export function extractRequirementsSection(content) {
85
135
  after: after.startsWith('\n') ? after : '\n' + after,
86
136
  };
87
137
  }
138
+ /**
139
+ * Guidance for a REMOVED Scenarios entry that names a requirement this change
140
+ * renames away. The merge applies RENAMED first and keys declarations by the
141
+ * MODIFIED block's header, so only the post-rename name matches. Telling the
142
+ * author to "check both names against the spec" sent them to the one file that
143
+ * shows the old name, which is the name that fails. Undefined when the entry
144
+ * does not name a RENAMED source, so callers keep their generic guidance.
145
+ * Shared so validate and archive word the same mistake the same way.
146
+ */
147
+ export function postRenameRemovalHint(entry, renamed) {
148
+ const pair = renamed.find(({ from }) => normalizeRequirementName(from) === entry.requirement);
149
+ if (pair === undefined)
150
+ return undefined;
151
+ const to = normalizeRequirementName(pair.to);
152
+ return `This change renames "${entry.requirement}" to "${to}", and REMOVED Scenarios must use the post-rename name: - Requirement: \`${to}\``;
153
+ }
88
154
  export function parseDeltaSpec(content) {
89
155
  const lines = normalizeDocument(content).split('\n');
90
156
  const fenceMask = buildCodeFenceMask(lines);
@@ -102,7 +168,7 @@ export function parseDeltaSpec(content) {
102
168
  const removedBlocks = removedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
103
169
  const renamedBlocks = renamedLookup.bodies.flatMap(parseRequirementBlocksFromSection);
104
170
  const renamedResults = renamedLookup.bodies.map(parseRenamedPairs);
105
- const renamedPairs = renamedResults.flatMap((r) => r.pairs);
171
+ const renamedEntries = renamedResults.flatMap((r) => r.pairs);
106
172
  const renamedIssues = renamedResults.flatMap((r) => r.issues);
107
173
  return {
108
174
  added,
@@ -111,10 +177,14 @@ export function parseDeltaSpec(content) {
111
177
  removedEntries,
112
178
  removedBlocks,
113
179
  renamedBlocks,
114
- renamed: renamedPairs,
180
+ renamed: renamedEntries.map(({ from, to }) => ({ from, to })),
181
+ renamedEntries,
115
182
  removedScenarios: removedScenariosLookup.bodies.flatMap(parseRemovedScenarioEntries),
116
183
  renamedIssues,
117
184
  duplicateSections: findDuplicateSections(sections),
185
+ orphanRequirements: findOrphanRequirements(lines, fenceMask),
186
+ unmergedSections: findUnmergedSections(sections),
187
+ misspelledSections: findMisspelledSections(sections),
118
188
  sectionPresence: {
119
189
  added: addedLookup.found,
120
190
  modified: modifiedLookup.found,
@@ -124,15 +194,38 @@ export function parseDeltaSpec(content) {
124
194
  },
125
195
  };
126
196
  }
197
+ /** Whether a document has any (unfenced) delta section header. */
198
+ export function hasDeltaSection(content) {
199
+ return Object.values(parseDeltaSpec(content).sectionPresence).some(Boolean);
200
+ }
201
+ const SECTION_HEADER_LINE = /^##\s+(.[\s\S]*)$/;
202
+ /**
203
+ * The title of a `## ` section header as authored, or null when the line is
204
+ * not one. `sectionHeaderKey` builds on it, so `extractDeltaPurpose` and migrate
205
+ * find the sections this parser finds.
206
+ *
207
+ * The rest of the line is captured whole and refused in code when it holds a
208
+ * line terminator. As `\s+(.+)$`, `\s` took U+2028/U+2029 where `.` stops, so a
209
+ * header holding one re-split its blank run every way: 80k blanks took 2.7 s.
210
+ * A title of blanks alone still matches on its last blank, as `(.+)` did, so
211
+ * `## ` stays a section.
212
+ */
213
+ export function matchSectionHeader(line) {
214
+ const m = SECTION_HEADER_LINE.exec(line);
215
+ return m && !LINE_TERMINATOR.test(m[1]) ? m[1] : null;
216
+ }
127
217
  function splitTopLevelSections(lines, fenceMask) {
128
218
  const result = new Map();
129
219
  const indices = [];
130
220
  for (let i = 0; i < lines.length; i++) {
131
221
  if (fenceMask[i])
132
222
  continue; // a '## ...' inside a fenced example is not a section
133
- const m = lines[i].match(/^(##)\s+(.+)$/);
134
- if (m) {
135
- indices.push({ title: m[2].trim(), index: i });
223
+ const title = matchSectionHeader(lines[i]);
224
+ if (title !== null) {
225
+ // CommonMark reads `## REMOVED Requirements ##` as `REMOVED Requirements`.
226
+ // Kept in the title, the closing run made it no delta section, and its
227
+ // removals and renames silently did not happen on archive.
228
+ indices.push({ title: stripClosingHashes(title), index: i });
136
229
  }
137
230
  }
138
231
  for (let i = 0; i < indices.length; i++) {
@@ -173,7 +266,44 @@ const RENAMED_SECTION = 'RENAMED Requirements';
173
266
  // MODIFIED that omits a scenario, so an obsolete one has no path out short of
174
267
  // hand-editing the main spec.
175
268
  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()));
269
+ const DELTA_SECTION_TITLES = [
270
+ ADDED_SECTION,
271
+ MODIFIED_SECTION,
272
+ REMOVED_SECTION,
273
+ RENAMED_SECTION,
274
+ REMOVED_SCENARIOS_SECTION,
275
+ ];
276
+ const DELTA_SECTION_KEYS = new Set(DELTA_SECTION_TITLES.map((title) => title.toLowerCase()));
277
+ /**
278
+ * The key this parser files a `## ` header under (the same header match,
279
+ * closing `#` peel and case fold `splitTopLevelSections` applies), or null when
280
+ * the line is not one. Exported so a caller scanning lines on its own shares
281
+ * that reading rather than keeping a regex copy, which drifts: migrate's took
282
+ * only `## Purpose`, so a spec headed `## purpose` lost its Purpose to a stub.
283
+ * Not fence-aware; the caller skips fenced lines.
284
+ */
285
+ export function sectionHeaderKey(line) {
286
+ const title = matchSectionHeader(line);
287
+ return title === null ? null : stripClosingHashes(title).toLowerCase();
288
+ }
289
+ /**
290
+ * Whether a line is a header this parser reads as a delta section, keyed as
291
+ * `sectionHeaderKey` keys it. Migrate's own regex took only the upper-case,
292
+ * single-space spelling. Not fence-aware either.
293
+ */
294
+ export function isDeltaSectionHeader(line) {
295
+ const key = sectionHeaderKey(line);
296
+ return key !== null && DELTA_SECTION_KEYS.has(key);
297
+ }
298
+ // A title at most this many edits from a delta section title (case-insensitive)
299
+ // counts as a misspelling of it. Every delta title is 17 or more characters, so
300
+ // a title this close repeats nearly all of one: `## REMOVED Requirement` is 1
301
+ // edit away, `## Add Requirements` 2, `## Modify Requirements` 3. An ordinary
302
+ // heading is far off: `## Notes`, `## Context` and `## Purpose` are 14 or more
303
+ // edits from every delta title. A keyword test (`removed` anywhere in the
304
+ // title) was rejected because it also flags a prose heading such as
305
+ // `## Removed endpoints`.
306
+ const MISSPELLED_SECTION_MAX_DISTANCE = 3;
177
307
  /**
178
308
  * Delta section titles that appear more than once, in document order.
179
309
  *
@@ -196,6 +326,116 @@ function findDuplicateSections(sections) {
196
326
  }
197
327
  return duplicates;
198
328
  }
329
+ /**
330
+ * Fence-aware, so a `### Requirement:` shown inside a code example is not
331
+ * reported: the template itself carries such examples.
332
+ */
333
+ function findOrphanRequirements(lines, fenceMask) {
334
+ const orphans = [];
335
+ let section = null;
336
+ for (let i = 0; i < lines.length; i++) {
337
+ if (fenceMask[i])
338
+ continue;
339
+ const sectionTitle = matchSectionHeader(lines[i]);
340
+ if (sectionTitle !== null) {
341
+ // Same peel as `splitTopLevelSections`, or a requirement under
342
+ // `## ADDED Requirements ##` is reported as sitting outside a section the
343
+ // parser does read.
344
+ section = stripClosingHashes(sectionTitle);
345
+ continue;
346
+ }
347
+ const header = matchRequirementHeader(lines[i]);
348
+ if (header !== null && (section === null || !DELTA_SECTION_KEYS.has(section.toLowerCase()))) {
349
+ orphans.push({ name: normalizeRequirementName(header), line: i + 1, section });
350
+ }
351
+ }
352
+ return orphans;
353
+ }
354
+ function findUnmergedSections(sections) {
355
+ const unmerged = [];
356
+ for (const [key, bodies] of sections) {
357
+ if (DELTA_SECTION_KEYS.has(key) || key === 'purpose')
358
+ continue;
359
+ for (const body of bodies) {
360
+ if (body.lines.some((line) => line.trim() !== '')) {
361
+ unmerged.push({ title: `## ${body.title}`, line: body.headerLine });
362
+ }
363
+ }
364
+ }
365
+ for (const desired of [ADDED_SECTION, MODIFIED_SECTION]) {
366
+ for (const body of getSections(sections, desired).bodies)
367
+ unmerged.push(...findStrayHeadingText(body));
368
+ }
369
+ return unmerged.sort((a, b) => a.line - b.line);
370
+ }
371
+ /**
372
+ * The `#` headings in an ADDED or MODIFIED section with text under them that
373
+ * no requirement block holds. A block ends at such a heading, but the section
374
+ * runs on to the next `##`, so the text sat in a delta section yet in no block:
375
+ * the merge dropped it while a `## Notes` holding the same text was named.
376
+ * REMOVED and RENAMED are left out: their entries are read across the whole
377
+ * section, so text under a `#` there may still be applied.
378
+ */
379
+ function findStrayHeadingText(body) {
380
+ const { lines, fenceMask } = body;
381
+ const isRequirementHeader = (i) => !fenceMask[i] && matchRequirementHeader(lines[i]) !== null;
382
+ const isTopLevelHeader = (i) => !fenceMask[i] && endsRequirementsSection(lines[i]);
383
+ const strays = [];
384
+ let i = 0;
385
+ while (i < lines.length) {
386
+ if (!isTopLevelHeader(i)) {
387
+ i++;
388
+ continue;
389
+ }
390
+ let end = i + 1;
391
+ while (end < lines.length && !isRequirementHeader(end) && !isTopLevelHeader(end))
392
+ end++;
393
+ if (lines.slice(i + 1, end).some((line) => line.trim() !== '')) {
394
+ strays.push({ title: lines[i].trim(), line: body.offset + i + 1 });
395
+ }
396
+ i = end;
397
+ }
398
+ return strays;
399
+ }
400
+ /**
401
+ * Skips a section that holds a `### Requirement:` header: the orphan scan
402
+ * already reports each one and asks for the header's spelling to be fixed, so a
403
+ * second finding would name the same mistake twice.
404
+ */
405
+ function findMisspelledSections(sections) {
406
+ const misspelled = [];
407
+ for (const [key, bodies] of sections) {
408
+ if (DELTA_SECTION_KEYS.has(key))
409
+ continue;
410
+ const suggestion = nearestDeltaSectionTitle(key);
411
+ if (suggestion === undefined)
412
+ continue;
413
+ for (const body of bodies) {
414
+ const hasContent = body.lines.some((line) => line.trim() !== '');
415
+ const hasRequirementHeader = body.lines.some((line, i) => !body.fenceMask[i] && matchRequirementHeader(line) !== null);
416
+ if (hasContent && !hasRequirementHeader) {
417
+ misspelled.push({ title: `## ${body.title}`, line: body.headerLine, suggestion: `## ${suggestion}` });
418
+ }
419
+ }
420
+ }
421
+ return misspelled.sort((a, b) => a.line - b.line);
422
+ }
423
+ function nearestDeltaSectionTitle(key) {
424
+ let best;
425
+ for (const title of DELTA_SECTION_TITLES) {
426
+ const target = title.toLowerCase();
427
+ // The length gap is a lower bound on the distance, so this skip loses
428
+ // nothing. It also keeps a very long heading from costing its length times
429
+ // the title's in `levenshtein`.
430
+ if (Math.abs(key.length - target.length) > MISSPELLED_SECTION_MAX_DISTANCE)
431
+ continue;
432
+ const distance = levenshtein(key, target);
433
+ if (distance <= MISSPELLED_SECTION_MAX_DISTANCE && (best === undefined || distance < best.distance)) {
434
+ best = { title, distance };
435
+ }
436
+ }
437
+ return best?.title;
438
+ }
199
439
  /**
200
440
  * Every `### Requirement:` block in a document, whichever section it sits in (or
201
441
  * none). For a caller rebuilding a whole file rather than applying a delta: a
@@ -215,8 +455,12 @@ function parseRequirementBlocksFromSection(sectionBody) {
215
455
  const { lines, fenceMask } = sectionBody;
216
456
  if (lines.length === 0)
217
457
  return [];
218
- const isRequirementHeader = (i) => !fenceMask[i] && REQUIREMENT_HEADER_REGEX.test(lines[i]);
219
- const isTopLevelHeader = (i) => !fenceMask[i] && /^##\s+/.test(lines[i]);
458
+ const isRequirementHeader = (i) => !fenceMask[i] && matchRequirementHeader(lines[i]) !== null;
459
+ // A `#` heading ends a block too, as it ends the main spec's section: ending
460
+ // at `##` only copied a `# Note` under an ADDED block into the main spec,
461
+ // where a requirement after it sat outside `## Requirements`, so validate
462
+ // passed the change and archive then refused the rebuilt spec.
463
+ const isTopLevelHeader = (i) => !fenceMask[i] && endsRequirementsSection(lines[i]);
220
464
  const blocks = [];
221
465
  let i = 0;
222
466
  while (i < lines.length) {
@@ -226,7 +470,7 @@ function parseRequirementBlocksFromSection(sectionBody) {
226
470
  break;
227
471
  const headerLine = lines[i];
228
472
  const startLine = sectionBody.offset + i + 1;
229
- const name = normalizeRequirementName(headerLine.match(REQUIREMENT_HEADER_REGEX)[1]);
473
+ const name = normalizeRequirementName(matchRequirementHeader(headerLine));
230
474
  const buf = [headerLine];
231
475
  i++;
232
476
  while (i < lines.length && !isRequirementHeader(i) && !isTopLevelHeader(i)) {
@@ -241,37 +485,84 @@ function parseRequirementBlocksFromSection(sectionBody) {
241
485
  // `[ \t]*(?:-[ \t]*)?` rather than `\s*-?\s*`: two adjacent `\s*` around an
242
486
  // optional token backtrack quadratically on a line of nothing but blanks, and a
243
487
  // 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]*)?';
488
+ // never contains its own newline. Every CommonMark bullet marker counts: with
489
+ // `-` alone, a `* FROM:` / `* TO:` pair was skipped and the rename never ran.
490
+ const LINE_PREFIX = '^[ \\t]*(?:[-*+][ \\t]*)?';
246
491
  /** `**Reason**:` / `- Reason:` style field line inside a REMOVED entry. */
247
492
  const REMOVED_REASON_LINE = new RegExp(`${LINE_PREFIX}(\\*\\*)?Reason(\\*\\*)?\\s*:`, 'i');
248
493
  const REMOVED_MIGRATION_LINE = new RegExp(`${LINE_PREFIX}(\\*\\*)?Migration(\\*\\*)?\\s*:`, 'i');
249
494
  // The `### Requirement:` prefix is optional (the templates show a plain name),
250
495
  // but an unanchored bullet match collides with prose bullets, so this is
251
496
  // 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.
497
+ // - `^[-*+]` (no leading whitespace) skips continuation bullets nested under
498
+ // `Migration:`, each of which became an entry failing its own checks. All
499
+ // three CommonMark markers: a `* Late Fees` entry was silently not removed.
500
+ // - `\s+` skips a `---` thematic break and keeps `**Reason**:` from reading
501
+ // as a bullet; THEMATIC_BREAK_REST skips the spaced `* * *` / `- - -` forms.
502
+ // - `\S` rejects a bare marker rather than recording an empty name.
257
503
  // A top-level bullet that is neither a name nor Reason:/Migration: is still read
258
504
  // 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:
505
+ // Split into three anchored steps instead of one regex: as a single pattern,
506
+ // every backtrack of `\s+` rescanned the blank run in the lookahead, and a
507
+ // marker followed by 40k blanks took ~450 ms. Only the greedy `\s+` split can
508
+ // ever match (a shorter one leaves a blank where `\S` is needed), so testing it
509
+ // alone loses nothing.
510
+ const REMOVED_BULLET_HEAD = /^[-*+]\s+/;
511
+ const THEMATIC_BREAK_REST = /^[-*_\s]*$/;
512
+ const REMOVED_BULLET_NAME = /^`?(?:###\s*Requirement:\s*)?(\S[\s\S]*)$/;
513
+ function matchRemovedBullet(line) {
514
+ const head = REMOVED_BULLET_HEAD.exec(line);
515
+ if (!head)
516
+ return null;
517
+ const rest = line.slice(head[0].length);
518
+ if (THEMATIC_BREAK_REST.test(rest))
519
+ return null;
520
+ const m = REMOVED_BULLET_NAME.exec(rest);
521
+ return m ? trimNameTail(m[1]) : null;
522
+ }
523
+ /**
524
+ * The name a `(\S.*?)`?\s*$` tail would have captured, done in code: the lazy
525
+ * capture retried `\s*$` at every position of a blank run, so one line of 40k
526
+ * blanks before a non-blank took ~600 ms. `trimEnd` strips exactly the `\s`
527
+ * set, and the backtick goes only when a character is left, as the lazy `\S`
528
+ * required. `.` refused a line terminator inside the name, so one there is
529
+ * still no match.
530
+ */
531
+ function trimNameTail(captured) {
532
+ let name = captured.trimEnd();
533
+ if (name.length > 1 && name.endsWith('`'))
534
+ name = name.slice(0, -1);
535
+ return LINE_TERMINATOR.test(name) ? null : name;
536
+ }
537
+ function matchNameLine(line, regex) {
538
+ const m = regex.exec(line);
539
+ return m ? trimNameTail(m[1]) : null;
540
+ }
541
+ // Unlike the REMOVED bullet these stay permissive about leading whitespace:
261
542
  // 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*$`);
543
+ // The rest of the line is captured whole and peeled by `trimNameTail`: the lazy
544
+ // `(.+?)`?\s*$` tail took 2-3 s on a line of 80k blanks. `.` rather than `\S`
545
+ // opens the capture because `.+?` did, so a line naming nothing still matches;
546
+ // `trimNameTail` returns '' where `.+?` kept one blank, and
547
+ // `normalizeRequirementName` trims that to the same ''.
548
+ const RENAMED_FROM_REGEX = new RegExp(`${LINE_PREFIX}FROM:\\s*\`?(?:###\\s*Requirement:\\s*)?(.[\\s\\S]*)$`);
549
+ const RENAMED_TO_REGEX = new RegExp(`${LINE_PREFIX}TO:\\s*\`?(?:###\\s*Requirement:\\s*)?(.[\\s\\S]*)$`);
264
550
  // The bullet form is the documented grammar, but `### Requirement:` /
265
551
  // `#### Scenario:` headers are accepted too: they are how the same names are
266
552
  // spelled everywhere else in a delta, so authors reach for them, and a header
267
553
  // that was silently skipped here left the MODIFIED block failing with no hint
268
554
  // 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]*)?';
555
+ // Same shape as LINE_PREFIX with a heading marker as the alternative token,
556
+ // including every bullet marker: with `-` alone, a `* Scenario:` declaration was
557
+ // skipped and the MODIFIED omitting that scenario failed the drop guard. A
558
+ // thematic break or `**Reason**:` cannot match, since the keyword must follow.
559
+ const HEADING_OR_BULLET_PREFIX = '^[ \\t]*(?:(?:[-*+]|#{1,6})[ \\t]*)?';
560
+ // The rest of the line is captured whole and its trailing backtick/blanks are
561
+ // peeled by `trimNameTail`, for the reason given there.
271
562
  /** `- 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');
563
+ const REMOVED_SCENARIO_REQUIREMENT_LINE = new RegExp(`${HEADING_OR_BULLET_PREFIX}(?:\\*\\*)?Requirement(?:\\*\\*)?\\s*:\\s*\`?(\\S[\\s\\S]*)$`, 'i');
273
564
  /** `- 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');
565
+ const REMOVED_SCENARIO_NAME_LINE = new RegExp(`${HEADING_OR_BULLET_PREFIX}(?:\\*\\*)?Scenario(?:\\*\\*)?\\s*:\\s*\`?(\\S[\\s\\S]*)$`, 'i');
275
566
  /**
276
567
  * An entry opens on its `Requirement:` line and is completed by the `Scenario:`
277
568
  * line under it, so one requirement can drop several scenarios by repeating the
@@ -295,17 +586,19 @@ function parseRemovedScenarioEntries(sectionBody) {
295
586
  continue;
296
587
  }
297
588
  // 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 };
589
+ const requirementName = matchNameLine(line, REMOVED_SCENARIO_REQUIREMENT_LINE);
590
+ if (requirementName !== null) {
591
+ requirement = { name: normalizeRequirementName(requirementName), line: offset + i + 1 };
301
592
  current = null;
302
593
  continue;
303
594
  }
304
- const scenarioMatch = line.match(REMOVED_SCENARIO_NAME_LINE);
305
- if (scenarioMatch && requirement) {
595
+ const scenarioName = matchNameLine(line, REMOVED_SCENARIO_NAME_LINE);
596
+ if (scenarioName !== null && requirement) {
306
597
  current = {
307
598
  requirement: requirement.name,
308
- scenario: scenarioMatch[1].trim(),
599
+ // Same peel as `scenarioNameFrom`, or the heading form's
600
+ // `#### Scenario: Works ####` named a scenario no spec header carries.
601
+ scenario: stripClosingHashes(scenarioName),
309
602
  startLine: requirement.line,
310
603
  hasReason: false,
311
604
  };
@@ -340,13 +633,13 @@ function parseRemovedEntries(sectionBody) {
340
633
  current.hasMigration = true;
341
634
  continue;
342
635
  }
343
- const header = line.match(REQUIREMENT_HEADER_REGEX);
344
- if (header)
636
+ const header = matchRequirementHeader(line);
637
+ if (header !== null)
345
638
  inHeaderForm = true;
346
- const m = header ?? (inHeaderForm ? null : line.match(REMOVED_BULLET_REGEX));
347
- if (m) {
639
+ const name = header ?? (inHeaderForm ? null : matchRemovedBullet(line));
640
+ if (name !== null) {
348
641
  current = {
349
- name: normalizeRequirementName(m[1]),
642
+ name: normalizeRequirementName(name),
350
643
  startLine: offset + i + 1,
351
644
  hasReason: false,
352
645
  hasMigration: false,
@@ -368,19 +661,19 @@ function parseRenamedPairs(sectionBody) {
368
661
  if (fenceMask[i])
369
662
  continue;
370
663
  const line = lines[i];
371
- const fromMatch = line.match(RENAMED_FROM_REGEX);
372
- const toMatch = line.match(RENAMED_TO_REGEX);
373
- if (fromMatch) {
664
+ const fromName = matchNameLine(line, RENAMED_FROM_REGEX);
665
+ const toName = matchNameLine(line, RENAMED_TO_REGEX);
666
+ if (fromName !== null) {
374
667
  if (current) {
375
668
  // Two FROMs in a row: the first one has no TO.
376
669
  issues.push({ kind: 'from-without-to', name: current.from, line: current.line });
377
670
  }
378
- current = { from: normalizeRequirementName(fromMatch[1]), line: offset + i + 1 };
671
+ current = { from: normalizeRequirementName(fromName), line: offset + i + 1 };
379
672
  }
380
- else if (toMatch) {
381
- const to = normalizeRequirementName(toMatch[1]);
673
+ else if (toName !== null) {
674
+ const to = normalizeRequirementName(toName);
382
675
  if (current) {
383
- pairs.push({ from: current.from, to });
676
+ pairs.push({ from: current.from, to, fromLine: current.line });
384
677
  current = null;
385
678
  }
386
679
  else {
@@ -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;AAsB9E,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED;;;;;GAKG;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;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,iCAAiC,CAAC;AAE1E,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,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,uEAAuE;QACvE,2EAA2E;QAC3E,0EAA0E;QAC1E,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACpD,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,sDAAsD;IACtD,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,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,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,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,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;AA0ED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,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,aAAa,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC7D,MAAM,sBAAsB,GAAG,WAAW,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IAChF,8EAA8E;IAC9E,oCAAoC;IACpC,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,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,aAAa;QACb,OAAO,EAAE,YAAY;QACrB,gBAAgB,EAAE,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC;QACpF,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;YAC5B,gBAAgB,EAAE,sBAAsB,CAAC,KAAK;SAC/C;KACF,CAAC;AACJ,CAAC;AA2BD,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,sDAAsD;QAClF,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,wEAAwE;QACxE,gDAAgD;QAChD,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,4EAA4E;AAC5E,6EAA6E;AAC7E,UAAU;AACV,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAC3C,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACjD,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAC/C,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAC/C,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,8BAA8B;AAC9B,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAEtD,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CACrD,CAAC,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC,GAAG,CAChG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAC/B,CACF,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,QAAsB;IACnD,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC3C,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;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,iCAAiC,CAAC;QACvC,KAAK,EAAE,EAAE;QACT,KAAK;QACL,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC;QACpC,MAAM,EAAE,CAAC;QACT,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;AACL,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,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,mEAAmE;AACnE,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,kCAAkC;AAClC,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAE5C,2EAA2E;AAC3E,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,GAAG,WAAW,+BAA+B,EAAE,GAAG,CAAC,CAAC;AAC3F,MAAM,sBAAsB,GAAG,IAAI,MAAM,CAAC,GAAG,WAAW,kCAAkC,EAAE,GAAG,CAAC,CAAC;AAEjG,+EAA+E;AAC/E,yEAAyE;AACzE,oCAAoC;AACpC,2EAA2E;AAC3E,0EAA0E;AAC1E,4EAA4E;AAC5E,kBAAkB;AAClB,mEAAmE;AACnE,iFAAiF;AACjF,yDAAyD;AACzD,MAAM,oBAAoB,GAAG,gDAAgD,CAAC;AAE9E,8EAA8E;AAC9E,8CAA8C;AAC9C,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,GAAG,WAAW,uDAAuD,CAAC,CAAC;AAC7G,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,GAAG,WAAW,qDAAqD,CAAC,CAAC;AAEzG,sEAAsE;AACtE,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,oCAAoC;AACpC,4EAA4E;AAC5E,MAAM,wBAAwB,GAAG,kCAAkC,CAAC;AACpE,uGAAuG;AACvG,MAAM,iCAAiC,GAAG,IAAI,MAAM,CAClD,GAAG,wBAAwB,+DAA+D,EAC1F,GAAG,CACJ,CAAC;AACF,8FAA8F;AAC9F,MAAM,0BAA0B,GAAG,IAAI,MAAM,CAC3C,GAAG,wBAAwB,4DAA4D,EACvF,GAAG,CACJ,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,2BAA2B,CAAC,WAAwB;IAC3D,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IACjD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,WAAW,GAA0C,IAAI,CAAC;IAC9D,IAAI,OAAO,GAAgC,IAAI,CAAC;IAEhD,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,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,OAAO;gBAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YACtC,SAAS;QACX,CAAC;QACD,2EAA2E;QAC3E,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACvE,IAAI,gBAAgB,EAAE,CAAC;YACrB,WAAW,GAAG,EAAE,IAAI,EAAE,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5F,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC7D,IAAI,aAAa,IAAI,WAAW,EAAE,CAAC;YACjC,OAAO,GAAG;gBACR,WAAW,EAAE,WAAW,CAAC,IAAI;gBAC7B,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBACjC,SAAS,EAAE,WAAW,CAAC,IAAI;gBAC3B,SAAS,EAAE,KAAK;aACjB,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,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,8EAA8E;IAC9E,4EAA4E;IAC5E,8EAA8E;IAC9E,+DAA+D;IAC/D,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,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,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,OAAO;gBAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YACtC,SAAS;QACX,CAAC;QACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,OAAO;gBAAE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;YACzC,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpD,IAAI,MAAM;YAAE,YAAY,GAAG,IAAI,CAAC;QAChC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC7E,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;IACH,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,kBAAkB,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC7C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,OAAO,EAAE,CAAC;gBACZ,+CAA+C;gBAC/C,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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"}