@matteeh/osq 0.2.0 → 0.2.2

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 (630) hide show
  1. package/README.md +234 -15
  2. package/dist/cli/approve.d.ts +7 -0
  3. package/dist/cli/approve.d.ts.map +1 -1
  4. package/dist/cli/approve.js +34 -0
  5. package/dist/cli/approve.js.map +1 -1
  6. package/dist/cli/bin.js +2 -3
  7. package/dist/cli/bin.js.map +1 -1
  8. package/dist/cli/check.d.ts +15 -0
  9. package/dist/cli/check.d.ts.map +1 -0
  10. package/dist/cli/check.js +65 -0
  11. package/dist/cli/check.js.map +1 -0
  12. package/dist/cli/index.d.ts.map +1 -1
  13. package/dist/cli/index.js +10 -10
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/init.d.ts.map +1 -1
  16. package/dist/cli/init.js +6 -1
  17. package/dist/cli/init.js.map +1 -1
  18. package/dist/cli/lint.d.ts +3 -0
  19. package/dist/cli/lint.d.ts.map +1 -1
  20. package/dist/cli/lint.js +33 -14
  21. package/dist/cli/lint.js.map +1 -1
  22. package/dist/cli/plan-queue.d.ts +10 -4
  23. package/dist/cli/plan-queue.d.ts.map +1 -1
  24. package/dist/cli/plan-queue.js +20 -19
  25. package/dist/cli/plan-queue.js.map +1 -1
  26. package/dist/cli/plan-sections.d.ts +15 -0
  27. package/dist/cli/plan-sections.d.ts.map +1 -0
  28. package/dist/cli/plan-sections.js +47 -0
  29. package/dist/cli/plan-sections.js.map +1 -0
  30. package/dist/cli/plan.d.ts +1 -0
  31. package/dist/cli/plan.d.ts.map +1 -1
  32. package/dist/cli/plan.js +14 -4
  33. package/dist/cli/plan.js.map +1 -1
  34. package/dist/cli/report.d.ts.map +1 -1
  35. package/dist/cli/report.js +73 -1
  36. package/dist/cli/report.js.map +1 -1
  37. package/dist/cli/run.d.ts +7 -0
  38. package/dist/cli/run.d.ts.map +1 -0
  39. package/dist/cli/run.js +22 -0
  40. package/dist/cli/run.js.map +1 -0
  41. package/dist/cli/verified.d.ts +15 -0
  42. package/dist/cli/verified.d.ts.map +1 -0
  43. package/dist/cli/verified.js +34 -0
  44. package/dist/cli/verified.js.map +1 -0
  45. package/dist/core/foundation/config-agents.d.ts +16 -0
  46. package/dist/core/foundation/config-agents.d.ts.map +1 -0
  47. package/dist/core/foundation/config-agents.js +2 -0
  48. package/dist/core/foundation/config-agents.js.map +1 -0
  49. package/dist/core/foundation/config-claude.d.ts +48 -0
  50. package/dist/core/foundation/config-claude.d.ts.map +1 -0
  51. package/dist/core/foundation/config-claude.js +106 -0
  52. package/dist/core/foundation/config-claude.js.map +1 -0
  53. package/dist/core/foundation/config-codex-resolve.d.ts +10 -0
  54. package/dist/core/foundation/config-codex-resolve.d.ts.map +1 -0
  55. package/dist/core/foundation/config-codex-resolve.js +24 -0
  56. package/dist/core/foundation/config-codex-resolve.js.map +1 -0
  57. package/dist/core/foundation/config-file.d.ts +18 -0
  58. package/dist/core/foundation/config-file.d.ts.map +1 -0
  59. package/dist/core/foundation/config-file.js +46 -0
  60. package/dist/core/foundation/config-file.js.map +1 -0
  61. package/dist/core/foundation/config-gates.d.ts +2 -0
  62. package/dist/core/foundation/config-gates.d.ts.map +1 -1
  63. package/dist/core/foundation/config-gates.js +8 -0
  64. package/dist/core/foundation/config-gates.js.map +1 -1
  65. package/dist/core/foundation/config-opencode.d.ts +25 -0
  66. package/dist/core/foundation/config-opencode.d.ts.map +1 -0
  67. package/dist/core/foundation/config-opencode.js +55 -0
  68. package/dist/core/foundation/config-opencode.js.map +1 -0
  69. package/dist/core/foundation/config-pi.d.ts +10 -0
  70. package/dist/core/foundation/config-pi.d.ts.map +1 -1
  71. package/dist/core/foundation/config-pi.js +13 -0
  72. package/dist/core/foundation/config-pi.js.map +1 -1
  73. package/dist/core/foundation/config-planning.d.ts +12 -1
  74. package/dist/core/foundation/config-planning.d.ts.map +1 -1
  75. package/dist/core/foundation/config-planning.js +29 -1
  76. package/dist/core/foundation/config-planning.js.map +1 -1
  77. package/dist/core/foundation/config-traceability.d.ts +28 -0
  78. package/dist/core/foundation/config-traceability.d.ts.map +1 -0
  79. package/dist/core/foundation/config-traceability.js +63 -0
  80. package/dist/core/foundation/config-traceability.js.map +1 -0
  81. package/dist/core/foundation/config-user.d.ts +32 -0
  82. package/dist/core/foundation/config-user.d.ts.map +1 -0
  83. package/dist/core/foundation/config-user.js +2 -0
  84. package/dist/core/foundation/config-user.js.map +1 -0
  85. package/dist/core/foundation/config-vcs.d.ts +29 -0
  86. package/dist/core/foundation/config-vcs.d.ts.map +1 -0
  87. package/dist/core/foundation/config-vcs.js +57 -0
  88. package/dist/core/foundation/config-vcs.js.map +1 -0
  89. package/dist/core/foundation/config.d.ts +23 -24
  90. package/dist/core/foundation/config.d.ts.map +1 -1
  91. package/dist/core/foundation/config.js +29 -36
  92. package/dist/core/foundation/config.js.map +1 -1
  93. package/dist/core/foundation/decisions-validate.d.ts +16 -0
  94. package/dist/core/foundation/decisions-validate.d.ts.map +1 -0
  95. package/dist/core/foundation/decisions-validate.js +74 -0
  96. package/dist/core/foundation/decisions-validate.js.map +1 -0
  97. package/dist/core/foundation/decisions.d.ts +34 -0
  98. package/dist/core/foundation/decisions.d.ts.map +1 -0
  99. package/dist/core/foundation/decisions.js +152 -0
  100. package/dist/core/foundation/decisions.js.map +1 -0
  101. package/dist/core/foundation/doctor-decisions.d.ts +9 -0
  102. package/dist/core/foundation/doctor-decisions.d.ts.map +1 -0
  103. package/dist/core/foundation/doctor-decisions.js +49 -0
  104. package/dist/core/foundation/doctor-decisions.js.map +1 -0
  105. package/dist/core/foundation/doctor-managed.d.ts.map +1 -1
  106. package/dist/core/foundation/doctor-managed.js +3 -0
  107. package/dist/core/foundation/doctor-managed.js.map +1 -1
  108. package/dist/core/foundation/doctor-prices.d.ts +8 -0
  109. package/dist/core/foundation/doctor-prices.d.ts.map +1 -0
  110. package/dist/core/foundation/doctor-prices.js +25 -0
  111. package/dist/core/foundation/doctor-prices.js.map +1 -0
  112. package/dist/core/foundation/doctor.d.ts.map +1 -1
  113. package/dist/core/foundation/doctor.js +20 -30
  114. package/dist/core/foundation/doctor.js.map +1 -1
  115. package/dist/core/foundation/harness-catalog.d.ts +7 -8
  116. package/dist/core/foundation/harness-catalog.d.ts.map +1 -1
  117. package/dist/core/foundation/harness-catalog.js +26 -41
  118. package/dist/core/foundation/harness-catalog.js.map +1 -1
  119. package/dist/core/foundation/init-blocks.d.ts +1 -1
  120. package/dist/core/foundation/init-blocks.d.ts.map +1 -1
  121. package/dist/core/foundation/init-blocks.js +51 -14
  122. package/dist/core/foundation/init-blocks.js.map +1 -1
  123. package/dist/core/foundation/init.d.ts +4 -0
  124. package/dist/core/foundation/init.d.ts.map +1 -1
  125. package/dist/core/foundation/init.js +7 -0
  126. package/dist/core/foundation/init.js.map +1 -1
  127. package/dist/core/foundation/new.d.ts +4 -1
  128. package/dist/core/foundation/new.d.ts.map +1 -1
  129. package/dist/core/foundation/new.js +18 -8
  130. package/dist/core/foundation/new.js.map +1 -1
  131. package/dist/core/foundation/package-root.d.ts +6 -0
  132. package/dist/core/foundation/package-root.d.ts.map +1 -1
  133. package/dist/core/foundation/package-root.js +6 -0
  134. package/dist/core/foundation/package-root.js.map +1 -1
  135. package/dist/core/foundation/rules-block.d.ts +11 -0
  136. package/dist/core/foundation/rules-block.d.ts.map +1 -0
  137. package/dist/core/foundation/rules-block.js +90 -0
  138. package/dist/core/foundation/rules-block.js.map +1 -0
  139. package/dist/core/foundation/traceability-block.d.ts +13 -0
  140. package/dist/core/foundation/traceability-block.d.ts.map +1 -0
  141. package/dist/core/foundation/traceability-block.js +124 -0
  142. package/dist/core/foundation/traceability-block.js.map +1 -0
  143. package/dist/core/lifecycle/done.d.ts.map +1 -1
  144. package/dist/core/lifecycle/done.js +2 -4
  145. package/dist/core/lifecycle/done.js.map +1 -1
  146. package/dist/core/lifecycle/recertify.d.ts +9 -0
  147. package/dist/core/lifecycle/recertify.d.ts.map +1 -0
  148. package/dist/core/lifecycle/recertify.js +27 -0
  149. package/dist/core/lifecycle/recertify.js.map +1 -0
  150. package/dist/core/lifecycle/reject.d.ts.map +1 -1
  151. package/dist/core/lifecycle/reject.js +3 -4
  152. package/dist/core/lifecycle/reject.js.map +1 -1
  153. package/dist/core/lifecycle/retry.d.ts.map +1 -1
  154. package/dist/core/lifecycle/retry.js +6 -20
  155. package/dist/core/lifecycle/retry.js.map +1 -1
  156. package/dist/core/lifecycle/verification-record.d.ts +42 -0
  157. package/dist/core/lifecycle/verification-record.d.ts.map +1 -0
  158. package/dist/core/lifecycle/verification-record.js +76 -0
  159. package/dist/core/lifecycle/verification-record.js.map +1 -0
  160. package/dist/core/report/approval-flags.d.ts +16 -3
  161. package/dist/core/report/approval-flags.d.ts.map +1 -1
  162. package/dist/core/report/approval-flags.js +59 -22
  163. package/dist/core/report/approval-flags.js.map +1 -1
  164. package/dist/core/report/brief-to-approval.d.ts +7 -0
  165. package/dist/core/report/brief-to-approval.d.ts.map +1 -0
  166. package/dist/core/report/brief-to-approval.js +43 -0
  167. package/dist/core/report/brief-to-approval.js.map +1 -0
  168. package/dist/core/report/planning-price-gaps.d.ts +10 -0
  169. package/dist/core/report/planning-price-gaps.d.ts.map +1 -0
  170. package/dist/core/report/planning-price-gaps.js +37 -0
  171. package/dist/core/report/planning-price-gaps.js.map +1 -0
  172. package/dist/core/report/planning-slice-lookup.d.ts.map +1 -1
  173. package/dist/core/report/planning-slice-lookup.js +3 -9
  174. package/dist/core/report/planning-slice-lookup.js.map +1 -1
  175. package/dist/core/report/recent-disclosures.d.ts +18 -0
  176. package/dist/core/report/recent-disclosures.d.ts.map +1 -0
  177. package/dist/core/report/recent-disclosures.js +105 -0
  178. package/dist/core/report/recent-disclosures.js.map +1 -0
  179. package/dist/core/report/record-disclosures.d.ts +14 -0
  180. package/dist/core/report/record-disclosures.d.ts.map +1 -0
  181. package/dist/core/report/record-disclosures.js +30 -0
  182. package/dist/core/report/record-disclosures.js.map +1 -0
  183. package/dist/core/report/record-estimates.d.ts +25 -0
  184. package/dist/core/report/record-estimates.d.ts.map +1 -0
  185. package/dist/core/report/record-estimates.js +83 -0
  186. package/dist/core/report/record-estimates.js.map +1 -0
  187. package/dist/core/report/record-rework.d.ts +19 -0
  188. package/dist/core/report/record-rework.d.ts.map +1 -0
  189. package/dist/core/report/record-rework.js +50 -0
  190. package/dist/core/report/record-rework.js.map +1 -0
  191. package/dist/core/report/record-verification.d.ts +16 -0
  192. package/dist/core/report/record-verification.d.ts.map +1 -0
  193. package/dist/core/report/record-verification.js +33 -0
  194. package/dist/core/report/record-verification.js.map +1 -0
  195. package/dist/core/report/report-dependencies.d.ts +29 -0
  196. package/dist/core/report/report-dependencies.d.ts.map +1 -0
  197. package/dist/core/report/report-dependencies.js +92 -0
  198. package/dist/core/report/report-dependencies.js.map +1 -0
  199. package/dist/core/report/report-events.d.ts +1 -0
  200. package/dist/core/report/report-events.d.ts.map +1 -1
  201. package/dist/core/report/report-events.js +8 -26
  202. package/dist/core/report/report-events.js.map +1 -1
  203. package/dist/core/report/report-mutation.d.ts +34 -0
  204. package/dist/core/report/report-mutation.d.ts.map +1 -0
  205. package/dist/core/report/report-mutation.js +191 -0
  206. package/dist/core/report/report-mutation.js.map +1 -0
  207. package/dist/core/report/report-scope.d.ts +21 -0
  208. package/dist/core/report/report-scope.d.ts.map +1 -0
  209. package/dist/core/report/report-scope.js +61 -0
  210. package/dist/core/report/report-scope.js.map +1 -0
  211. package/dist/core/report/report-traceability.d.ts +29 -0
  212. package/dist/core/report/report-traceability.d.ts.map +1 -0
  213. package/dist/core/report/report-traceability.js +94 -0
  214. package/dist/core/report/report-traceability.js.map +1 -0
  215. package/dist/core/report/report.d.ts +35 -1
  216. package/dist/core/report/report.d.ts.map +1 -1
  217. package/dist/core/report/report.js +130 -111
  218. package/dist/core/report/report.js.map +1 -1
  219. package/dist/core/report/result-sections.d.ts +30 -0
  220. package/dist/core/report/result-sections.d.ts.map +1 -0
  221. package/dist/core/report/result-sections.js +125 -0
  222. package/dist/core/report/result-sections.js.map +1 -0
  223. package/dist/core/report/scope-size.d.ts +7 -0
  224. package/dist/core/report/scope-size.d.ts.map +1 -0
  225. package/dist/core/report/scope-size.js +22 -0
  226. package/dist/core/report/scope-size.js.map +1 -0
  227. package/dist/core/run/commit-message.d.ts +24 -0
  228. package/dist/core/run/commit-message.d.ts.map +1 -0
  229. package/dist/core/run/commit-message.js +76 -0
  230. package/dist/core/run/commit-message.js.map +1 -0
  231. package/dist/core/run/dead-commit.d.ts +10 -0
  232. package/dist/core/run/dead-commit.d.ts.map +1 -0
  233. package/dist/core/run/dead-commit.js +70 -0
  234. package/dist/core/run/dead-commit.js.map +1 -0
  235. package/dist/core/run/focused-tests.d.ts +43 -0
  236. package/dist/core/run/focused-tests.d.ts.map +1 -0
  237. package/dist/core/run/focused-tests.js +116 -0
  238. package/dist/core/run/focused-tests.js.map +1 -0
  239. package/dist/core/run/manifest-approval.d.ts +7 -0
  240. package/dist/core/run/manifest-approval.d.ts.map +1 -0
  241. package/dist/core/run/manifest-approval.js +30 -0
  242. package/dist/core/run/manifest-approval.js.map +1 -0
  243. package/dist/core/run/manifest.d.ts +11 -1
  244. package/dist/core/run/manifest.d.ts.map +1 -1
  245. package/dist/core/run/manifest.js +52 -11
  246. package/dist/core/run/manifest.js.map +1 -1
  247. package/dist/core/run/mutation-report.d.ts +29 -0
  248. package/dist/core/run/mutation-report.d.ts.map +1 -0
  249. package/dist/core/run/mutation-report.js +107 -0
  250. package/dist/core/run/mutation-report.js.map +1 -0
  251. package/dist/core/run/mutation-run.d.ts +32 -0
  252. package/dist/core/run/mutation-run.d.ts.map +1 -0
  253. package/dist/core/run/mutation-run.js +80 -0
  254. package/dist/core/run/mutation-run.js.map +1 -0
  255. package/dist/core/run/verification.d.ts +12 -1
  256. package/dist/core/run/verification.d.ts.map +1 -1
  257. package/dist/core/run/verification.js +24 -2
  258. package/dist/core/run/verification.js.map +1 -1
  259. package/dist/core/spec/approve-worktree-shared.d.ts +33 -0
  260. package/dist/core/spec/approve-worktree-shared.d.ts.map +1 -0
  261. package/dist/core/spec/approve-worktree-shared.js +59 -0
  262. package/dist/core/spec/approve-worktree-shared.js.map +1 -0
  263. package/dist/core/spec/approve-worktree.d.ts +21 -0
  264. package/dist/core/spec/approve-worktree.d.ts.map +1 -0
  265. package/dist/core/spec/approve-worktree.js +153 -0
  266. package/dist/core/spec/approve-worktree.js.map +1 -0
  267. package/dist/core/spec/approve.d.ts +20 -10
  268. package/dist/core/spec/approve.d.ts.map +1 -1
  269. package/dist/core/spec/approve.js +57 -54
  270. package/dist/core/spec/approve.js.map +1 -1
  271. package/dist/core/spec/capability-impact.d.ts +43 -0
  272. package/dist/core/spec/capability-impact.d.ts.map +1 -0
  273. package/dist/core/spec/capability-impact.js +85 -0
  274. package/dist/core/spec/capability-impact.js.map +1 -0
  275. package/dist/core/spec/decisions-lint.d.ts +18 -0
  276. package/dist/core/spec/decisions-lint.d.ts.map +1 -0
  277. package/dist/core/spec/decisions-lint.js +127 -0
  278. package/dist/core/spec/decisions-lint.js.map +1 -0
  279. package/dist/core/spec/delta.d.ts +6 -0
  280. package/dist/core/spec/delta.d.ts.map +1 -1
  281. package/dist/core/spec/delta.js +73 -5
  282. package/dist/core/spec/delta.js.map +1 -1
  283. package/dist/core/spec/digest-capability.d.ts +17 -0
  284. package/dist/core/spec/digest-capability.d.ts.map +1 -0
  285. package/dist/core/spec/digest-capability.js +89 -0
  286. package/dist/core/spec/digest-capability.js.map +1 -0
  287. package/dist/core/spec/digest-decisions.d.ts +27 -0
  288. package/dist/core/spec/digest-decisions.d.ts.map +1 -0
  289. package/dist/core/spec/digest-decisions.js +86 -0
  290. package/dist/core/spec/digest-decisions.js.map +1 -0
  291. package/dist/core/spec/digest-flags.d.ts +1 -0
  292. package/dist/core/spec/digest-flags.d.ts.map +1 -1
  293. package/dist/core/spec/digest-flags.js +16 -16
  294. package/dist/core/spec/digest-flags.js.map +1 -1
  295. package/dist/core/spec/digest-format.d.ts +4 -0
  296. package/dist/core/spec/digest-format.d.ts.map +1 -0
  297. package/dist/core/spec/digest-format.js +44 -0
  298. package/dist/core/spec/digest-format.js.map +1 -0
  299. package/dist/core/spec/digest.d.ts +6 -3
  300. package/dist/core/spec/digest.d.ts.map +1 -1
  301. package/dist/core/spec/digest.js +18 -32
  302. package/dist/core/spec/digest.js.map +1 -1
  303. package/dist/core/spec/human-steps.d.ts +20 -0
  304. package/dist/core/spec/human-steps.d.ts.map +1 -0
  305. package/dist/core/spec/human-steps.js +52 -0
  306. package/dist/core/spec/human-steps.js.map +1 -0
  307. package/dist/core/spec/impact-lint.d.ts +24 -0
  308. package/dist/core/spec/impact-lint.d.ts.map +1 -0
  309. package/dist/core/spec/impact-lint.js +39 -0
  310. package/dist/core/spec/impact-lint.js.map +1 -0
  311. package/dist/core/spec/import-graph.d.ts +35 -0
  312. package/dist/core/spec/import-graph.d.ts.map +1 -0
  313. package/dist/core/spec/import-graph.js +155 -0
  314. package/dist/core/spec/import-graph.js.map +1 -0
  315. package/dist/core/spec/lint-findings.d.ts +44 -0
  316. package/dist/core/spec/lint-findings.d.ts.map +1 -0
  317. package/dist/core/spec/lint-findings.js +56 -0
  318. package/dist/core/spec/lint-findings.js.map +1 -0
  319. package/dist/core/spec/lint-output.d.ts +53 -0
  320. package/dist/core/spec/lint-output.d.ts.map +1 -0
  321. package/dist/core/spec/lint-output.js +87 -0
  322. package/dist/core/spec/lint-output.js.map +1 -0
  323. package/dist/core/spec/linter.d.ts +14 -4
  324. package/dist/core/spec/linter.d.ts.map +1 -1
  325. package/dist/core/spec/linter.js +271 -111
  326. package/dist/core/spec/linter.js.map +1 -1
  327. package/dist/core/spec/merged-spec-check.d.ts +24 -0
  328. package/dist/core/spec/merged-spec-check.d.ts.map +1 -0
  329. package/dist/core/spec/merged-spec-check.js +95 -0
  330. package/dist/core/spec/merged-spec-check.js.map +1 -0
  331. package/dist/core/spec/openspec-issues.d.ts +58 -0
  332. package/dist/core/spec/openspec-issues.d.ts.map +1 -0
  333. package/dist/core/spec/openspec-issues.js +166 -0
  334. package/dist/core/spec/openspec-issues.js.map +1 -0
  335. package/dist/core/spec/parser.d.ts +1 -0
  336. package/dist/core/spec/parser.d.ts.map +1 -1
  337. package/dist/core/spec/parser.js +16 -6
  338. package/dist/core/spec/parser.js.map +1 -1
  339. package/dist/core/spec/scenario-impact.d.ts +47 -0
  340. package/dist/core/spec/scenario-impact.d.ts.map +1 -0
  341. package/dist/core/spec/scenario-impact.js +130 -0
  342. package/dist/core/spec/scenario-impact.js.map +1 -0
  343. package/dist/core/spec/test-impact.d.ts +28 -0
  344. package/dist/core/spec/test-impact.d.ts.map +1 -0
  345. package/dist/core/spec/test-impact.js +119 -0
  346. package/dist/core/spec/test-impact.js.map +1 -0
  347. package/dist/core/spec/traceability-links.d.ts +50 -0
  348. package/dist/core/spec/traceability-links.d.ts.map +1 -0
  349. package/dist/core/spec/traceability-links.js +120 -0
  350. package/dist/core/spec/traceability-links.js.map +1 -0
  351. package/dist/core/spec/traceability-lint.d.ts +29 -0
  352. package/dist/core/spec/traceability-lint.d.ts.map +1 -0
  353. package/dist/core/spec/traceability-lint.js +143 -0
  354. package/dist/core/spec/traceability-lint.js.map +1 -0
  355. package/dist/core/status/blocked-item.d.ts +8 -0
  356. package/dist/core/status/blocked-item.d.ts.map +1 -0
  357. package/dist/core/status/blocked-item.js +45 -0
  358. package/dist/core/status/blocked-item.js.map +1 -0
  359. package/dist/core/status/change-locations.d.ts +44 -0
  360. package/dist/core/status/change-locations.d.ts.map +1 -0
  361. package/dist/core/status/change-locations.js +138 -0
  362. package/dist/core/status/change-locations.js.map +1 -0
  363. package/dist/core/status/dependency-readiness.d.ts +11 -0
  364. package/dist/core/status/dependency-readiness.d.ts.map +1 -0
  365. package/dist/core/status/dependency-readiness.js +39 -0
  366. package/dist/core/status/dependency-readiness.js.map +1 -0
  367. package/dist/core/status/inbox-projection.d.ts.map +1 -1
  368. package/dist/core/status/inbox-projection.js +23 -4
  369. package/dist/core/status/inbox-projection.js.map +1 -1
  370. package/dist/core/status/inbox-text.d.ts.map +1 -1
  371. package/dist/core/status/inbox-text.js +34 -3
  372. package/dist/core/status/inbox-text.js.map +1 -1
  373. package/dist/core/status/inbox.d.ts +10 -1
  374. package/dist/core/status/inbox.d.ts.map +1 -1
  375. package/dist/core/status/inbox.js +19 -1
  376. package/dist/core/status/inbox.js.map +1 -1
  377. package/dist/core/status/layout.d.ts +6 -0
  378. package/dist/core/status/layout.d.ts.map +1 -1
  379. package/dist/core/status/layout.js +8 -0
  380. package/dist/core/status/layout.js.map +1 -1
  381. package/dist/core/status/next-step.d.ts +17 -0
  382. package/dist/core/status/next-step.d.ts.map +1 -0
  383. package/dist/core/status/next-step.js +85 -0
  384. package/dist/core/status/next-step.js.map +1 -0
  385. package/dist/core/status/pre-spawn-words.d.ts +13 -0
  386. package/dist/core/status/pre-spawn-words.d.ts.map +1 -0
  387. package/dist/core/status/pre-spawn-words.js +26 -0
  388. package/dist/core/status/pre-spawn-words.js.map +1 -0
  389. package/dist/core/status/queue-parser.d.ts +1 -0
  390. package/dist/core/status/queue-parser.d.ts.map +1 -1
  391. package/dist/core/status/queue-parser.js +41 -2
  392. package/dist/core/status/queue-parser.js.map +1 -1
  393. package/dist/core/status/queue-planning.d.ts +1 -0
  394. package/dist/core/status/queue-planning.d.ts.map +1 -1
  395. package/dist/core/status/queue-planning.js +24 -12
  396. package/dist/core/status/queue-planning.js.map +1 -1
  397. package/dist/core/status/queue-report-detail.d.ts.map +1 -1
  398. package/dist/core/status/queue-report-detail.js +5 -3
  399. package/dist/core/status/queue-report-detail.js.map +1 -1
  400. package/dist/core/status/queue-state.d.ts +1 -1
  401. package/dist/core/status/queue-state.d.ts.map +1 -1
  402. package/dist/core/status/queue-state.js +27 -41
  403. package/dist/core/status/queue-state.js.map +1 -1
  404. package/dist/core/status/show.d.ts +25 -0
  405. package/dist/core/status/show.d.ts.map +1 -1
  406. package/dist/core/status/show.js +354 -91
  407. package/dist/core/status/show.js.map +1 -1
  408. package/dist/core/status/state.d.ts.map +1 -1
  409. package/dist/core/status/state.js +1 -23
  410. package/dist/core/status/state.js.map +1 -1
  411. package/dist/core/status/status.d.ts +18 -0
  412. package/dist/core/status/status.d.ts.map +1 -1
  413. package/dist/core/status/status.js +59 -80
  414. package/dist/core/status/status.js.map +1 -1
  415. package/dist/core/status/verification.d.ts +27 -0
  416. package/dist/core/status/verification.d.ts.map +1 -0
  417. package/dist/core/status/verification.js +111 -0
  418. package/dist/core/status/verification.js.map +1 -0
  419. package/dist/core/trace/function-ranges.d.ts +30 -0
  420. package/dist/core/trace/function-ranges.d.ts.map +1 -0
  421. package/dist/core/trace/function-ranges.js +250 -0
  422. package/dist/core/trace/function-ranges.js.map +1 -0
  423. package/dist/core/trace/mutation-pick.d.ts +55 -0
  424. package/dist/core/trace/mutation-pick.d.ts.map +1 -0
  425. package/dist/core/trace/mutation-pick.js +96 -0
  426. package/dist/core/trace/mutation-pick.js.map +1 -0
  427. package/dist/core/trace/scenario-index.d.ts +27 -0
  428. package/dist/core/trace/scenario-index.d.ts.map +1 -0
  429. package/dist/core/trace/scenario-index.js +76 -0
  430. package/dist/core/trace/scenario-index.js.map +1 -0
  431. package/dist/core/trace/scenario-lookup.d.ts +14 -0
  432. package/dist/core/trace/scenario-lookup.d.ts.map +1 -0
  433. package/dist/core/trace/scenario-lookup.js +179 -0
  434. package/dist/core/trace/scenario-lookup.js.map +1 -0
  435. package/dist/core/trace/tag-scan.d.ts +44 -0
  436. package/dist/core/trace/tag-scan.d.ts.map +1 -0
  437. package/dist/core/trace/tag-scan.js +200 -0
  438. package/dist/core/trace/tag-scan.js.map +1 -0
  439. package/dist/core/vcs/doctor-git.d.ts +13 -0
  440. package/dist/core/vcs/doctor-git.d.ts.map +1 -0
  441. package/dist/core/vcs/doctor-git.js +114 -0
  442. package/dist/core/vcs/doctor-git.js.map +1 -0
  443. package/dist/core/vcs/git-vcs-write.d.ts +47 -0
  444. package/dist/core/vcs/git-vcs-write.d.ts.map +1 -0
  445. package/dist/core/vcs/git-vcs-write.js +210 -0
  446. package/dist/core/vcs/git-vcs-write.js.map +1 -0
  447. package/dist/core/vcs/git-vcs.d.ts +40 -0
  448. package/dist/core/vcs/git-vcs.d.ts.map +1 -0
  449. package/dist/core/vcs/git-vcs.js +170 -0
  450. package/dist/core/vcs/git-vcs.js.map +1 -0
  451. package/dist/core/vcs/no-vcs.d.ts +26 -0
  452. package/dist/core/vcs/no-vcs.d.ts.map +1 -0
  453. package/dist/core/vcs/no-vcs.js +62 -0
  454. package/dist/core/vcs/no-vcs.js.map +1 -0
  455. package/dist/core/vcs/select.d.ts +11 -0
  456. package/dist/core/vcs/select.d.ts.map +1 -0
  457. package/dist/core/vcs/select.js +33 -0
  458. package/dist/core/vcs/select.js.map +1 -0
  459. package/dist/core/vcs/snapshot.d.ts +34 -0
  460. package/dist/core/vcs/snapshot.d.ts.map +1 -0
  461. package/dist/core/vcs/snapshot.js +71 -0
  462. package/dist/core/vcs/snapshot.js.map +1 -0
  463. package/dist/core/vcs/vcs.d.ts +55 -0
  464. package/dist/core/vcs/vcs.d.ts.map +1 -0
  465. package/dist/core/vcs/vcs.js +2 -0
  466. package/dist/core/vcs/vcs.js.map +1 -0
  467. package/dist/core/vcs/worktree.d.ts +10 -0
  468. package/dist/core/vcs/worktree.d.ts.map +1 -0
  469. package/dist/core/vcs/worktree.js +25 -0
  470. package/dist/core/vcs/worktree.js.map +1 -0
  471. package/dist/core/web/web-data-folders.d.ts.map +1 -1
  472. package/dist/core/web/web-data-folders.js +18 -33
  473. package/dist/core/web/web-data-folders.js.map +1 -1
  474. package/dist/core/web/web-data-lifecycle.d.ts.map +1 -1
  475. package/dist/core/web/web-data-lifecycle.js +2 -1
  476. package/dist/core/web/web-data-lifecycle.js.map +1 -1
  477. package/dist/core/web/web-events.d.ts +8 -6
  478. package/dist/core/web/web-events.d.ts.map +1 -1
  479. package/dist/core/web/web-events.js +7 -31
  480. package/dist/core/web/web-events.js.map +1 -1
  481. package/dist/core/web/web-server.d.ts.map +1 -1
  482. package/dist/core/web/web-server.js +3 -0
  483. package/dist/core/web/web-server.js.map +1 -1
  484. package/dist/core/web/web-trees.d.ts +27 -0
  485. package/dist/core/web/web-trees.d.ts.map +1 -0
  486. package/dist/core/web/web-trees.js +82 -0
  487. package/dist/core/web/web-trees.js.map +1 -0
  488. package/dist/harness/claude/claude-exec-args.d.ts +13 -0
  489. package/dist/harness/claude/claude-exec-args.d.ts.map +1 -0
  490. package/dist/harness/claude/claude-exec-args.js +61 -0
  491. package/dist/harness/claude/claude-exec-args.js.map +1 -0
  492. package/dist/harness/claude/claude-exec.d.ts +12 -0
  493. package/dist/harness/claude/claude-exec.d.ts.map +1 -0
  494. package/dist/harness/claude/claude-exec.js +79 -0
  495. package/dist/harness/claude/claude-exec.js.map +1 -0
  496. package/dist/harness/claude/claude-stream.d.ts +31 -0
  497. package/dist/harness/claude/claude-stream.d.ts.map +1 -0
  498. package/dist/harness/claude/claude-stream.js +150 -0
  499. package/dist/harness/claude/claude-stream.js.map +1 -0
  500. package/dist/harness/claude/claude-tools.d.ts +5 -0
  501. package/dist/harness/claude/claude-tools.d.ts.map +1 -0
  502. package/dist/harness/claude/claude-tools.js +30 -0
  503. package/dist/harness/claude/claude-tools.js.map +1 -0
  504. package/dist/harness/index.d.ts +1 -0
  505. package/dist/harness/index.d.ts.map +1 -1
  506. package/dist/harness/index.js +3 -0
  507. package/dist/harness/index.js.map +1 -1
  508. package/dist/harness/opencode/opencode-session.d.ts +42 -0
  509. package/dist/harness/opencode/opencode-session.d.ts.map +1 -0
  510. package/dist/harness/opencode/opencode-session.js +123 -0
  511. package/dist/harness/opencode/opencode-session.js.map +1 -0
  512. package/dist/harness/opencode/opencode.d.ts +2 -1
  513. package/dist/harness/opencode/opencode.d.ts.map +1 -1
  514. package/dist/harness/opencode/opencode.js +52 -28
  515. package/dist/harness/opencode/opencode.js.map +1 -1
  516. package/dist/harness/prompt.js +1 -1
  517. package/dist/harness/prompt.js.map +1 -1
  518. package/dist/harness/types.d.ts +114 -1
  519. package/dist/harness/types.d.ts.map +1 -1
  520. package/dist/harness/types.js.map +1 -1
  521. package/dist/index.d.ts +3 -1
  522. package/dist/index.d.ts.map +1 -1
  523. package/dist/index.js +1 -0
  524. package/dist/index.js.map +1 -1
  525. package/dist/testing/index.d.ts +3 -0
  526. package/dist/testing/index.d.ts.map +1 -0
  527. package/dist/testing/index.js +2 -0
  528. package/dist/testing/index.js.map +1 -0
  529. package/dist/testing/scenario.d.ts +29 -0
  530. package/dist/testing/scenario.d.ts.map +1 -0
  531. package/dist/testing/scenario.js +157 -0
  532. package/dist/testing/scenario.js.map +1 -0
  533. package/dist/watcher/archiver.d.ts +2 -1
  534. package/dist/watcher/archiver.d.ts.map +1 -1
  535. package/dist/watcher/archiver.js +27 -2
  536. package/dist/watcher/archiver.js.map +1 -1
  537. package/dist/watcher/auto-recertify.d.ts +27 -0
  538. package/dist/watcher/auto-recertify.d.ts.map +1 -0
  539. package/dist/watcher/auto-recertify.js +113 -0
  540. package/dist/watcher/auto-recertify.js.map +1 -0
  541. package/dist/watcher/auto-retry.d.ts +1 -1
  542. package/dist/watcher/auto-retry.d.ts.map +1 -1
  543. package/dist/watcher/auto-retry.js +3 -11
  544. package/dist/watcher/auto-retry.js.map +1 -1
  545. package/dist/watcher/baseline-key.d.ts +17 -0
  546. package/dist/watcher/baseline-key.d.ts.map +1 -0
  547. package/dist/watcher/baseline-key.js +31 -0
  548. package/dist/watcher/baseline-key.js.map +1 -0
  549. package/dist/watcher/baseline.d.ts +32 -0
  550. package/dist/watcher/baseline.d.ts.map +1 -0
  551. package/dist/watcher/baseline.js +166 -0
  552. package/dist/watcher/baseline.js.map +1 -0
  553. package/dist/watcher/blocked.d.ts +12 -0
  554. package/dist/watcher/blocked.d.ts.map +1 -0
  555. package/dist/watcher/blocked.js +24 -0
  556. package/dist/watcher/blocked.js.map +1 -0
  557. package/dist/watcher/build-project.d.ts +11 -0
  558. package/dist/watcher/build-project.d.ts.map +1 -0
  559. package/dist/watcher/build-project.js +36 -0
  560. package/dist/watcher/build-project.js.map +1 -0
  561. package/dist/watcher/build.d.ts +8 -5
  562. package/dist/watcher/build.d.ts.map +1 -1
  563. package/dist/watcher/build.js +35 -39
  564. package/dist/watcher/build.js.map +1 -1
  565. package/dist/watcher/dependencies.d.ts +28 -0
  566. package/dist/watcher/dependencies.d.ts.map +1 -0
  567. package/dist/watcher/dependencies.js +152 -0
  568. package/dist/watcher/dependencies.js.map +1 -0
  569. package/dist/watcher/done-metadata.d.ts +4 -0
  570. package/dist/watcher/done-metadata.d.ts.map +1 -0
  571. package/dist/watcher/done-metadata.js +20 -0
  572. package/dist/watcher/done-metadata.js.map +1 -0
  573. package/dist/watcher/failure-reason.d.ts +1 -1
  574. package/dist/watcher/failure-reason.d.ts.map +1 -1
  575. package/dist/watcher/fingerprint.d.ts +2 -2
  576. package/dist/watcher/fingerprint.d.ts.map +1 -1
  577. package/dist/watcher/fingerprint.js +31 -2
  578. package/dist/watcher/fingerprint.js.map +1 -1
  579. package/dist/watcher/focused-verify.d.ts +17 -0
  580. package/dist/watcher/focused-verify.d.ts.map +1 -0
  581. package/dist/watcher/focused-verify.js +54 -0
  582. package/dist/watcher/focused-verify.js.map +1 -0
  583. package/dist/watcher/git-guard.d.ts +24 -0
  584. package/dist/watcher/git-guard.d.ts.map +1 -0
  585. package/dist/watcher/git-guard.js +95 -0
  586. package/dist/watcher/git-guard.js.map +1 -0
  587. package/dist/watcher/instructions-drift.d.ts +21 -0
  588. package/dist/watcher/instructions-drift.d.ts.map +1 -0
  589. package/dist/watcher/instructions-drift.js +115 -0
  590. package/dist/watcher/instructions-drift.js.map +1 -0
  591. package/dist/watcher/loop.d.ts.map +1 -1
  592. package/dist/watcher/loop.js +37 -51
  593. package/dist/watcher/loop.js.map +1 -1
  594. package/dist/watcher/measures.d.ts.map +1 -1
  595. package/dist/watcher/measures.js +22 -39
  596. package/dist/watcher/measures.js.map +1 -1
  597. package/dist/watcher/mutation-check.d.ts +42 -0
  598. package/dist/watcher/mutation-check.d.ts.map +1 -0
  599. package/dist/watcher/mutation-check.js +147 -0
  600. package/dist/watcher/mutation-check.js.map +1 -0
  601. package/dist/watcher/outcome.d.ts +2 -0
  602. package/dist/watcher/outcome.d.ts.map +1 -1
  603. package/dist/watcher/outcome.js +5 -1
  604. package/dist/watcher/outcome.js.map +1 -1
  605. package/dist/watcher/regression.d.ts +10 -5
  606. package/dist/watcher/regression.d.ts.map +1 -1
  607. package/dist/watcher/regression.js +29 -19
  608. package/dist/watcher/regression.js.map +1 -1
  609. package/dist/watcher/runner.d.ts.map +1 -1
  610. package/dist/watcher/runner.js +12 -14
  611. package/dist/watcher/runner.js.map +1 -1
  612. package/dist/watcher/spawn.d.ts.map +1 -1
  613. package/dist/watcher/spawn.js +11 -1
  614. package/dist/watcher/spawn.js.map +1 -1
  615. package/dist/watcher/task-verify.d.ts +7 -2
  616. package/dist/watcher/task-verify.d.ts.map +1 -1
  617. package/dist/watcher/task-verify.js +33 -8
  618. package/dist/watcher/task-verify.js.map +1 -1
  619. package/dist/watcher/verify.d.ts +1 -5
  620. package/dist/watcher/verify.d.ts.map +1 -1
  621. package/dist/watcher/verify.js +2 -6
  622. package/dist/watcher/verify.js.map +1 -1
  623. package/package.json +5 -1
  624. package/templates/PLANNER.md +35 -9
  625. package/templates/openspec/config.yaml +1 -1
  626. package/templates/openspec/schemas/osq/schema.yaml +4 -2
  627. package/templates/openspec/schemas/osq/templates/proposal.md +9 -2
  628. package/templates/proposal.md +9 -2
  629. package/ui/dist/assets/{index-CZYeQ8la.js → index-D39uYbbL.js} +1 -1
  630. package/ui/dist/index.html +1 -1
@@ -2,7 +2,10 @@ import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { resolveScope } from '../run/scope.js';
4
4
  import { parseDelta } from './delta.js';
5
+ import { readLivingCapabilityNames, resemblingCapability } from './digest-capability.js';
6
+ import { collectDigestDecisions } from './digest-decisions.js';
5
7
  import { buildApprovalFlags } from './digest-flags.js';
8
+ import { parseHumanSteps } from './human-steps.js';
6
9
  import { extractSection, parseFrontmatter, parseSpecMd, parseTaskMd, resolveChangeDoc, } from './parser.js';
7
10
  function compareText(a, b) {
8
11
  return a < b ? -1 : a > b ? 1 : 0;
@@ -82,13 +85,16 @@ export async function buildApprovalDigest(projectRoot, changeFolder, config) {
82
85
  const content = resolvedDoc ? await fs.readFile(resolvedDoc.path, 'utf8') : '';
83
86
  const spec = parseSpecMd(content);
84
87
  const body = resolvedDoc ? parseFrontmatter(content).body : '';
88
+ const humanSteps = parseHumanSteps(body);
85
89
  const tasks = await resolveTasks(projectRoot, changeFolder);
86
90
  const changeCapabilities = await readCapabilities(changeFolder);
91
+ const living = await readLivingCapabilityNames(projectRoot, config.paths.openspecRoot);
87
92
  const capabilities = changeCapabilities.map(({ name, delta }) => ({
88
93
  name,
89
94
  added: delta.added.map((requirement) => requirement.name),
90
95
  modified: delta.modified.map((requirement) => requirement.name),
91
96
  removed: delta.removed.map((requirement) => requirement.name),
97
+ creates: !living.includes(name) && delta.purpose !== '' && resemblingCapability(name, living) === null,
92
98
  }));
93
99
  const flagTasks = tasks.map((task) => ({
94
100
  number: task.number,
@@ -97,13 +103,21 @@ export async function buildApprovalDigest(projectRoot, changeFolder, config) {
97
103
  scope: task.scope,
98
104
  paths: task.entries.map((entry) => entry.relativePath),
99
105
  }));
100
- const flags = await buildApprovalFlags({
106
+ const decisionTasks = tasks.map((task) => ({
107
+ number: task.number,
108
+ testsModify: task.testsModify,
109
+ paths: task.entries.map((entry) => entry.relativePath),
110
+ }));
111
+ const digestDecisions = await collectDigestDecisions(projectRoot, changeCapabilities.map((capability) => capability.name), extractSection(body, 'Decisions'), decisionTasks, config);
112
+ const baseFlags = await buildApprovalFlags({
101
113
  projectRoot,
102
114
  openspecRoot: config.paths.openspecRoot,
103
115
  proposalVerify: spec.verify,
104
116
  tasks: flagTasks,
105
117
  capabilities,
118
+ livingCapabilities: living,
106
119
  });
120
+ const flags = [...baseFlags, ...digestDecisions.flags];
107
121
  return {
108
122
  change: path.basename(changeFolder),
109
123
  goal: firstTwoSentences(spec.goal),
@@ -121,41 +135,13 @@ export async function buildApprovalDigest(projectRoot, changeFolder, config) {
121
135
  };
122
136
  }),
123
137
  capabilities,
138
+ decisions: digestDecisions.decisions,
124
139
  humanSteps: extractSection(body, 'Human steps'),
140
+ beforeApproval: humanSteps.beforeApproval,
125
141
  flags,
126
142
  };
127
143
  }
128
- /** Render the digest body, without flags. */
129
- export function formatApprovalDigest(digest) {
130
- const lines = [`Change: ${digest.change}`];
131
- if (digest.goal)
132
- lines.push(`Goal: ${digest.goal}`);
133
- lines.push('Tasks:');
134
- for (const task of digest.tasks) {
135
- const suffix = task.scopeFiles === 1 ? 'scope file' : 'scope files';
136
- lines.push(` ${task.number}. ${task.title} (${task.scopeFiles} ${suffix})`);
137
- if (task.testsModify) {
138
- const tests = task.existingTests.length > 0 ? task.existingTests.join(', ') : '(none)';
139
- lines.push(` tests.modify: existing tests in scope: ${tests}`);
140
- }
141
- }
142
- lines.push('Capabilities:');
143
- if (digest.capabilities.length === 0)
144
- lines.push(' (none)');
145
- for (const capability of digest.capabilities) {
146
- lines.push(` ${capability.name}:`);
147
- for (const kind of ['added', 'modified', 'removed']) {
148
- const names = capability[kind];
149
- lines.push(` ${kind}: ${names.length > 0 ? names.join(', ') : '(none)'}`);
150
- }
151
- }
152
- if (digest.humanSteps) {
153
- lines.push('Human steps:');
154
- for (const line of digest.humanSteps.split('\n'))
155
- lines.push(` ${line.trim()}`);
156
- }
157
- return lines.join('\n');
158
- }
144
+ export { formatApprovalDigest } from './digest-format.js';
159
145
  /** One `Flag: <label> — <excerpt>` line per flag. */
160
146
  export function formatApprovalFlags(flags) {
161
147
  return flags.map((flag) => `Flag: ${flag.label} \u2014 ${flag.excerpt}`);
@@ -1 +1 @@
1
- {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../../src/core/spec/digest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../../src/core/spec/digest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /** The after-landing requirements an archived change records on its event. */
2
+ export interface VerificationRequirement {
3
+ readonly afterLanding: boolean;
4
+ readonly check: string | null;
5
+ }
6
+ /** The two halves of `## Human steps`, split by their subsections. */
7
+ export interface HumanSteps {
8
+ readonly beforeApproval: string;
9
+ readonly afterLanding: string;
10
+ }
11
+ /**
12
+ * Splits `## Human steps` into `beforeApproval` and `afterLanding` by its
13
+ * `### Before approval` and `### After landing` subsections, in any case.
14
+ * Text before the first subsection, or a section with neither, is after
15
+ * landing. A part that is empty or `None` is empty.
16
+ */
17
+ export declare function parseHumanSteps(body: string): HumanSteps;
18
+ /** The trimmed frontmatter `check` command, else null. */
19
+ export declare function readCheckCommand(frontmatterData: Record<string, unknown>): string | null;
20
+ //# sourceMappingURL=human-steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-steps.d.ts","sourceRoot":"","sources":["../../../src/core/spec/human-steps.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AASD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CA+BxD;AAED,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAKxF"}
@@ -0,0 +1,52 @@
1
+ import { extractSection } from './parser.js';
2
+ const NONE = /^none\.?$/i;
3
+ function normalizePart(value) {
4
+ const trimmed = value.trim();
5
+ return trimmed === '' || NONE.test(trimmed) ? '' : trimmed;
6
+ }
7
+ /**
8
+ * Splits `## Human steps` into `beforeApproval` and `afterLanding` by its
9
+ * `### Before approval` and `### After landing` subsections, in any case.
10
+ * Text before the first subsection, or a section with neither, is after
11
+ * landing. A part that is empty or `None` is empty.
12
+ */
13
+ export function parseHumanSteps(body) {
14
+ const section = extractSection(body, 'Human steps');
15
+ if (!section) {
16
+ return { beforeApproval: '', afterLanding: '' };
17
+ }
18
+ const before = [];
19
+ const after = [];
20
+ let current = 'preamble';
21
+ for (const line of section.split(/\r?\n/)) {
22
+ const heading = line
23
+ .match(/^###\s+(.+?)\s*$/)?.[1]
24
+ ?.trim()
25
+ .toLowerCase();
26
+ if (heading === 'before approval') {
27
+ current = 'before';
28
+ continue;
29
+ }
30
+ if (heading === 'after landing') {
31
+ current = 'after';
32
+ continue;
33
+ }
34
+ if (current === 'before')
35
+ before.push(line);
36
+ else
37
+ after.push(line);
38
+ }
39
+ return {
40
+ beforeApproval: normalizePart(before.join('\n')),
41
+ afterLanding: normalizePart(after.join('\n')),
42
+ };
43
+ }
44
+ /** The trimmed frontmatter `check` command, else null. */
45
+ export function readCheckCommand(frontmatterData) {
46
+ const value = frontmatterData.check;
47
+ if (typeof value !== 'string')
48
+ return null;
49
+ const trimmed = value.trim();
50
+ return trimmed === '' ? null : trimmed;
51
+ }
52
+ //# sourceMappingURL=human-steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-steps.js","sourceRoot":"","sources":["../../../src/core/spec/human-steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAc7C,MAAM,IAAI,GAAG,YAAY,CAAC;AAE1B,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAoC,UAAU,CAAC;IAE1D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI;aACjB,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,EAAE,IAAI,EAAE;aACP,WAAW,EAAE,CAAC;QACjB,IAAI,OAAO,KAAK,iBAAiB,EAAE,CAAC;YAClC,OAAO,GAAG,QAAQ,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;YAChC,OAAO,GAAG,OAAO,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;QACL,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,gBAAgB,CAAC,eAAwC;IACvE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACzC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { OsqConfig } from '../foundation/config.js';
2
+ import type { ImportGraph } from './import-graph.js';
3
+ import type { LintFinding } from './lint-findings.js';
4
+ import { type TestImpactTask } from './test-impact.js';
5
+ /**
6
+ * Import-graph impact lint: one entrypoint that runs the test-impact and
7
+ * capability-impact checks for a change folder and returns their warnings.
8
+ * Every finding is a warning; none affects `valid`, `osq lint`'s exit code, or
9
+ * approval.
10
+ */
11
+ export type ImpactTask = TestImpactTask;
12
+ export interface ImpactLintInput {
13
+ readonly projectRoot: string;
14
+ readonly folderPath: string;
15
+ readonly config: OsqConfig;
16
+ /** Repository-relative `proposal.md` the read warning is attributed to. */
17
+ readonly proposalPath: string;
18
+ readonly reads: readonly string[];
19
+ readonly tasks: readonly ImpactTask[];
20
+ readonly importGraph: ImportGraph;
21
+ }
22
+ /** Run every impact check and return the change's own import-graph warnings. */
23
+ export declare function collectImpactFindings(input: ImpactLintInput): Promise<LintFinding[]>;
24
+ //# sourceMappingURL=impact-lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact-lint.d.ts","sourceRoot":"","sources":["../../../src/core/spec/impact-lint.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAC;AAE1B;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AAExC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAcD,gFAAgF;AAChF,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAyB1F"}
@@ -0,0 +1,39 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { readCapabilityOwnership, undeclaredReadFindings, writeWithoutDeltaFindings, } from './capability-impact.js';
4
+ import { frozenTestFindings, verifyWithoutScopeFindings, } from './test-impact.js';
5
+ /** Capability names with a delta spec directory in the change folder. */
6
+ async function readDeltaCapabilities(folderPath) {
7
+ let entries;
8
+ try {
9
+ entries = await fs.readdir(path.join(folderPath, 'specs'), { withFileTypes: true });
10
+ }
11
+ catch {
12
+ return new Set();
13
+ }
14
+ return new Set(entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name));
15
+ }
16
+ /** Run every impact check and return the change's own import-graph warnings. */
17
+ export async function collectImpactFindings(input) {
18
+ const deltaCapabilities = await readDeltaCapabilities(input.folderPath);
19
+ const ownerships = await readCapabilityOwnership(input.projectRoot, input.config.paths.openspecRoot);
20
+ const scopedFiles = [...new Set(input.tasks.flatMap((task) => [...task.existingPaths]))].sort();
21
+ const declared = new Set([...input.reads, ...deltaCapabilities]);
22
+ return [
23
+ ...frozenTestFindings(input.tasks, input.importGraph, {
24
+ maxDepth: input.config.limits.importGraphDepth,
25
+ maxListed: input.config.limits.maxListedImporters,
26
+ }),
27
+ ...(await verifyWithoutScopeFindings(input.projectRoot, input.tasks, input.importGraph)),
28
+ ...undeclaredReadFindings({
29
+ proposalPath: input.proposalPath,
30
+ scopedFiles,
31
+ importsOf: (file) => input.importGraph.importsOf(file),
32
+ filesInScope: new Set(scopedFiles),
33
+ ownerships,
34
+ declared,
35
+ }),
36
+ ...writeWithoutDeltaFindings(input.tasks, ownerships, deltaCapabilities),
37
+ ];
38
+ }
39
+ //# sourceMappingURL=impact-lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact-lint.js","sourceRoot":"","sources":["../../../src/core/spec/impact-lint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAEL,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAsB1B,yEAAyE;AACzE,KAAK,UAAU,qBAAqB,CAAC,UAAkB;IACrD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAsB;IAChE,MAAM,iBAAiB,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAC9C,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAChC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChG,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAEjE,OAAO;QACL,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;YACpD,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB;YAC9C,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB;SAClD,CAAC;QACF,GAAG,CAAC,MAAM,0BAA0B,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACxF,GAAG,sBAAsB,CAAC;YACxB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW;YACX,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;YACtD,YAAY,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC;YAClC,UAAU;YACV,QAAQ;SACT,CAAC;QACF,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,iBAAiB,CAAC;KACzE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Directory names never walked by the import graph, and by the watcher's
3
+ * repository counts.
4
+ */
5
+ export declare const IGNORED_DIRS: ReadonlySet<string>;
6
+ /** The files of one repository and the relative imports between them. */
7
+ export interface ImportGraph {
8
+ /** Sorted project-relative POSIX paths of every JavaScript and TypeScript file. */
9
+ readonly files: readonly string[];
10
+ /** Sorted project-relative files this file imports. */
11
+ importsOf(file: string): readonly string[];
12
+ /** Sorted project-relative files that import this file. */
13
+ importersOf(file: string): readonly string[];
14
+ }
15
+ /** One importing file and its distance from the files it reaches. */
16
+ export interface ReachingFile {
17
+ readonly file: string;
18
+ readonly depth: number;
19
+ }
20
+ /** Options for `buildImportGraph`. */
21
+ export interface BuildImportGraphOptions {
22
+ /** Extra repository-relative folders to leave out of the graph. */
23
+ readonly skip?: readonly string[];
24
+ }
25
+ /**
26
+ * Build the relative import graph of every JavaScript and TypeScript file
27
+ * outside ignored folders and `options.skip`. Bare and aliased specifiers are
28
+ * never resolved.
29
+ */
30
+ export declare function buildImportGraph(projectRoot: string, options?: BuildImportGraphOptions): Promise<ImportGraph>;
31
+ /** Every file `files` import at any depth, sorted. */
32
+ export declare function reachImports(graph: ImportGraph, files: readonly string[]): string[];
33
+ /** Every file importing one of `files` within `maxDepth` levels, nearest first. */
34
+ export declare function reachImporters(graph: ImportGraph, files: readonly string[], maxDepth: number): ReachingFile[];
35
+ //# sourceMappingURL=import-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-graph.d.ts","sourceRoot":"","sources":["../../../src/core/spec/import-graph.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,CAS3C,CAAC;AAYH,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,uDAAuD;IACvD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAC3C,2DAA2D;IAC3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,qEAAqE;AACrE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,sCAAsC;AACtC,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AA6DD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,WAAW,CAAC,CA4BtB;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAWnF;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,QAAQ,EAAE,MAAM,GACf,YAAY,EAAE,CAoBhB"}
@@ -0,0 +1,155 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ /**
4
+ * Directory names never walked by the import graph, and by the watcher's
5
+ * repository counts.
6
+ */
7
+ export const IGNORED_DIRS = new Set([
8
+ 'node_modules',
9
+ 'dist',
10
+ '.git',
11
+ '.run',
12
+ 'coverage',
13
+ '.nyc_output',
14
+ '.vscode',
15
+ '.idea',
16
+ ]);
17
+ /** Every script extension the graph records, in resolution preference order. */
18
+ const GRAPH_EXTENSIONS = ['.ts', '.tsx', '.mts', '.cts', '.js', '.jsx', '.mjs', '.cjs'];
19
+ /** Extensions TypeScript rewrites to a TypeScript stem. */
20
+ const JS_EXTENSIONS = ['.js', '.jsx', '.mjs', '.cjs'];
21
+ const TS_EXTENSIONS = ['.ts', '.tsx', '.mts', '.cts'];
22
+ /** One pass over file text; captures import, export, and require specifiers. */
23
+ const SPECIFIER_REGEX = /(?:\bfrom\b|\bimport\b|\brequire\b)\s*(?:\(\s*)?['"]([^'"]+)['"]/g;
24
+ function toPosix(value) {
25
+ return value.split(path.sep).join('/');
26
+ }
27
+ /** True for a JavaScript or TypeScript file the graph records; declarations do not count. */
28
+ function isGraphFile(name) {
29
+ if (name.endsWith('.d.ts'))
30
+ return false;
31
+ return GRAPH_EXTENSIONS.some((extension) => name.endsWith(extension));
32
+ }
33
+ /** Candidate project-relative targets for a relative specifier, in resolve order. */
34
+ function importCandidates(fromDir, specifier) {
35
+ const base = toPosix(path.normalize(path.join(fromDir, specifier)));
36
+ const candidates = [base];
37
+ const lower = base.toLowerCase();
38
+ const jsExtension = JS_EXTENSIONS.find((extension) => lower.endsWith(extension));
39
+ if (jsExtension !== undefined) {
40
+ const stem = base.slice(0, -jsExtension.length);
41
+ candidates.push(...TS_EXTENSIONS.map((extension) => `${stem}${extension}`));
42
+ }
43
+ candidates.push(...GRAPH_EXTENSIONS.map((extension) => `${base}${extension}`));
44
+ candidates.push(...GRAPH_EXTENSIONS.map((extension) => `${base}/index${extension}`));
45
+ return candidates;
46
+ }
47
+ /** The graph file a relative specifier resolves to, or null. */
48
+ function resolveGraphSpecifier(files, fromFile, specifier) {
49
+ if (!specifier.startsWith('.'))
50
+ return null;
51
+ for (const candidate of importCandidates(toPosix(path.dirname(fromFile)), specifier)) {
52
+ if (!candidate.endsWith('.d.ts') && files.has(candidate))
53
+ return candidate;
54
+ }
55
+ return null;
56
+ }
57
+ /** Recursively list graph files outside ignored folders and `skip`. */
58
+ async function listGraphFiles(projectRoot, skip) {
59
+ const excluded = new Set(skip.map((entry) => entry.replace(/\\/g, '/').replace(/\/+$/, '')));
60
+ const files = [];
61
+ const walk = async (dir) => {
62
+ const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
63
+ for (const entry of entries) {
64
+ const fullPath = path.join(dir, entry.name);
65
+ if (entry.isDirectory()) {
66
+ if (IGNORED_DIRS.has(entry.name))
67
+ continue;
68
+ if (excluded.has(toPosix(path.relative(projectRoot, fullPath))))
69
+ continue;
70
+ await walk(fullPath);
71
+ }
72
+ else if (entry.isFile() && isGraphFile(entry.name)) {
73
+ files.push(toPosix(path.relative(projectRoot, fullPath)));
74
+ }
75
+ }
76
+ };
77
+ await walk(projectRoot);
78
+ return files.sort();
79
+ }
80
+ /**
81
+ * Build the relative import graph of every JavaScript and TypeScript file
82
+ * outside ignored folders and `options.skip`. Bare and aliased specifiers are
83
+ * never resolved.
84
+ */
85
+ export async function buildImportGraph(projectRoot, options = {}) {
86
+ const files = await listGraphFiles(projectRoot, options.skip ?? []);
87
+ const known = new Set(files);
88
+ const imports = new Map();
89
+ const importers = new Map();
90
+ for (const file of files) {
91
+ const content = await fs.readFile(path.join(projectRoot, file), 'utf8').catch(() => '');
92
+ const targets = new Set();
93
+ for (const match of content.matchAll(SPECIFIER_REGEX)) {
94
+ const specifier = match[1];
95
+ const resolved = specifier === undefined ? null : resolveGraphSpecifier(known, file, specifier);
96
+ if (resolved !== null)
97
+ targets.add(resolved);
98
+ }
99
+ const sorted = [...targets].sort();
100
+ imports.set(file, sorted);
101
+ for (const target of sorted) {
102
+ const list = importers.get(target);
103
+ if (list === undefined)
104
+ importers.set(target, [file]);
105
+ else
106
+ list.push(file);
107
+ }
108
+ }
109
+ for (const list of importers.values())
110
+ list.sort();
111
+ return {
112
+ files,
113
+ importsOf: (file) => imports.get(file) ?? [],
114
+ importersOf: (file) => importers.get(file) ?? [],
115
+ };
116
+ }
117
+ /** Every file `files` import at any depth, sorted. */
118
+ export function reachImports(graph, files) {
119
+ const reached = new Set();
120
+ const queue = [...files];
121
+ for (let index = 0; index < queue.length; index += 1) {
122
+ for (const target of graph.importsOf(queue[index] ?? '')) {
123
+ if (reached.has(target))
124
+ continue;
125
+ reached.add(target);
126
+ queue.push(target);
127
+ }
128
+ }
129
+ return [...reached].sort();
130
+ }
131
+ /** Every file importing one of `files` within `maxDepth` levels, nearest first. */
132
+ export function reachImporters(graph, files, maxDepth) {
133
+ const roots = new Set(files);
134
+ const depth = new Map();
135
+ for (const file of roots)
136
+ depth.set(file, 0);
137
+ let frontier = [...roots];
138
+ for (let level = 1; level <= maxDepth && frontier.length > 0; level += 1) {
139
+ const next = [];
140
+ for (const file of frontier) {
141
+ for (const importer of graph.importersOf(file)) {
142
+ if (depth.has(importer))
143
+ continue;
144
+ depth.set(importer, level);
145
+ next.push(importer);
146
+ }
147
+ }
148
+ frontier = next;
149
+ }
150
+ return [...depth.entries()]
151
+ .filter(([file]) => !roots.has(file))
152
+ .map(([file, level]) => ({ file, depth: level }))
153
+ .sort((a, b) => a.depth - b.depth || (a.file < b.file ? -1 : a.file > b.file ? 1 : 0));
154
+ }
155
+ //# sourceMappingURL=import-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../../src/core/spec/import-graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC;IACvD,cAAc;IACd,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,aAAa;IACb,SAAS;IACT,OAAO;CACR,CAAC,CAAC;AAEH,gFAAgF;AAChF,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAEjG,2DAA2D;AAC3D,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAC/D,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAE/D,gFAAgF;AAChF,MAAM,eAAe,GAAG,mEAAmE,CAAC;AAwB5F,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,6FAA6F;AAC7F,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,qFAAqF;AACrF,SAAS,gBAAgB,CAAC,OAAe,EAAE,SAAiB;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACjF,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAChD,UAAU,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;IAC/E,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,SAAS,SAAS,EAAE,CAAC,CAAC,CAAC;IACrF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,gEAAgE;AAChE,SAAS,qBAAqB,CAC5B,KAA0B,EAC1B,QAAgB,EAChB,SAAiB;IAEjB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,KAAK,MAAM,SAAS,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QACrF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uEAAuE;AACvE,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,IAAuB;IACxE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;QAChD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAc,CAAC,CAAC;QAC3F,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC3C,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAAE,SAAS;gBAC1E,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,UAAmC,EAAE;IAErC,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,QAAQ,GACZ,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACjF,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;;gBACjD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO;QACL,KAAK;QACL,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;QAC5C,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;KACjD,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,KAAkB,EAAE,KAAwB;IACvE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACzD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAS;YAClC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAC5B,KAAkB,EAClB,KAAwB,EACxB,QAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBAClC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SAChD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * The shared lint finding shape.
3
+ *
4
+ * Every diagnostic lint produces carries the severity that decides whether it
5
+ * blocks, the repository-relative file it concerns, the requirement or section
6
+ * within that file when one applies, and the human-readable message. The
7
+ * change's own findings decide validity; repository findings are reported but
8
+ * never block.
9
+ */
10
+ /** A finding either fails the change (`error`) or merely informs (`warning`). */
11
+ export type LintSeverity = 'error' | 'warning';
12
+ /** Classify an OpenSpec level; `WARNING` and `INFO` are lint warnings. */
13
+ export declare function openSpecSeverity(level: string): LintSeverity;
14
+ export interface LintFinding {
15
+ readonly severity: LintSeverity;
16
+ readonly file: string;
17
+ readonly requirement: string | null;
18
+ readonly section: string | null;
19
+ readonly message: string;
20
+ }
21
+ /** The location fields of a finding; the requirement and section default to null. */
22
+ export interface FindingLocation {
23
+ readonly file: string;
24
+ readonly requirement?: string | null;
25
+ readonly section?: string | null;
26
+ }
27
+ export declare function makeFinding(severity: LintSeverity, location: FindingLocation, message: string): LintFinding;
28
+ /**
29
+ * Accumulates the change's own findings apart from repository findings and
30
+ * derives the legacy message arrays from the change's own findings in order.
31
+ */
32
+ export declare class LintFindingSet {
33
+ private readonly ownFindings;
34
+ private readonly repositoryFindings;
35
+ get findings(): readonly LintFinding[];
36
+ get repository(): readonly LintFinding[];
37
+ error(location: FindingLocation, message: string): void;
38
+ warning(location: FindingLocation, message: string): void;
39
+ addOwn(finding: LintFinding): void;
40
+ addRepository(finding: LintFinding): void;
41
+ errors(): string[];
42
+ warnings(): string[];
43
+ }
44
+ //# sourceMappingURL=lint-findings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint-findings.d.ts","sourceRoot":"","sources":["../../../src/core/spec/lint-findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/C,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAG5D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,WAAW,CAQb;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAExD,IAAI,QAAQ,IAAI,SAAS,WAAW,EAAE,CAErC;IAED,IAAI,UAAU,IAAI,SAAS,WAAW,EAAE,CAEvC;IAED,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIvD,OAAO,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIlC,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIzC,MAAM,IAAI,MAAM,EAAE;IAIlB,QAAQ,IAAI,MAAM,EAAE;CAGrB"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * The shared lint finding shape.
3
+ *
4
+ * Every diagnostic lint produces carries the severity that decides whether it
5
+ * blocks, the repository-relative file it concerns, the requirement or section
6
+ * within that file when one applies, and the human-readable message. The
7
+ * change's own findings decide validity; repository findings are reported but
8
+ * never block.
9
+ */
10
+ /** Classify an OpenSpec level; `WARNING` and `INFO` are lint warnings. */
11
+ export function openSpecSeverity(level) {
12
+ const lowered = level.toLowerCase();
13
+ return lowered.includes('warn') || lowered.includes('info') ? 'warning' : 'error';
14
+ }
15
+ export function makeFinding(severity, location, message) {
16
+ return {
17
+ severity,
18
+ file: location.file,
19
+ requirement: location.requirement ?? null,
20
+ section: location.section ?? null,
21
+ message,
22
+ };
23
+ }
24
+ /**
25
+ * Accumulates the change's own findings apart from repository findings and
26
+ * derives the legacy message arrays from the change's own findings in order.
27
+ */
28
+ export class LintFindingSet {
29
+ ownFindings = [];
30
+ repositoryFindings = [];
31
+ get findings() {
32
+ return this.ownFindings;
33
+ }
34
+ get repository() {
35
+ return this.repositoryFindings;
36
+ }
37
+ error(location, message) {
38
+ this.ownFindings.push(makeFinding('error', location, message));
39
+ }
40
+ warning(location, message) {
41
+ this.ownFindings.push(makeFinding('warning', location, message));
42
+ }
43
+ addOwn(finding) {
44
+ this.ownFindings.push(finding);
45
+ }
46
+ addRepository(finding) {
47
+ this.repositoryFindings.push(finding);
48
+ }
49
+ errors() {
50
+ return this.ownFindings.filter((f) => f.severity === 'error').map((f) => f.message);
51
+ }
52
+ warnings() {
53
+ return this.ownFindings.filter((f) => f.severity === 'warning').map((f) => f.message);
54
+ }
55
+ }
56
+ //# sourceMappingURL=lint-findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint-findings.js","sourceRoot":"","sources":["../../../src/core/spec/lint-findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AACpF,CAAC;AAiBD,MAAM,UAAU,WAAW,CACzB,QAAsB,EACtB,QAAyB,EACzB,OAAe;IAEf,OAAO;QACL,QAAQ;QACR,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;QACzC,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,IAAI;QACjC,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,cAAc;IACR,WAAW,GAAkB,EAAE,CAAC;IAChC,kBAAkB,GAAkB,EAAE,CAAC;IAExD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,QAAyB,EAAE,OAAe;QAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,QAAyB,EAAE,OAAe;QAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,OAAoB;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,aAAa,CAAC,OAAoB;QAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACtF,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACxF,CAAC;CACF"}