@ybotok/loam 0.2.0-alpha.1 → 0.2.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (901) hide show
  1. package/CHANGELOG.md +3448 -0
  2. package/COMPARISON.md +91 -3
  3. package/CONTRIBUTING.md +37 -0
  4. package/MIGRATING-from-OpenSpec.md +47 -23
  5. package/QUICKSTART.md +189 -12
  6. package/README.md +274 -65
  7. package/ROADMAP.md +572 -31
  8. package/SCHEMA.md +1709 -155
  9. package/WORKFLOW.md +298 -72
  10. package/dist/cli.js +26 -8
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/adopt/adopt.js +5 -10
  13. package/dist/commands/adopt/adopt.js.map +1 -1
  14. package/dist/commands/adopt/render.js +50 -9
  15. package/dist/commands/adopt/render.js.map +1 -1
  16. package/dist/commands/archive/archive.js +16 -19
  17. package/dist/commands/archive/archive.js.map +1 -1
  18. package/dist/commands/archive/closing.js +42 -0
  19. package/dist/commands/archive/closing.js.map +1 -0
  20. package/dist/commands/archive/plan/contracts/asyncapi.js +36 -42
  21. package/dist/commands/archive/plan/contracts/asyncapi.js.map +1 -1
  22. package/dist/commands/archive/plan/contracts/consumers.js +56 -0
  23. package/dist/commands/archive/plan/contracts/consumers.js.map +1 -0
  24. package/dist/commands/archive/plan/contracts/openapi.js +77 -43
  25. package/dist/commands/archive/plan/contracts/openapi.js.map +1 -1
  26. package/dist/commands/archive/plan/contracts/verdict-lines.js +103 -0
  27. package/dist/commands/archive/plan/contracts/verdict-lines.js.map +1 -0
  28. package/dist/commands/archive/plan/document/head.js +151 -0
  29. package/dist/commands/archive/plan/document/head.js.map +1 -0
  30. package/dist/commands/archive/plan/document/links.js +284 -0
  31. package/dist/commands/archive/plan/document/links.js.map +1 -0
  32. package/dist/commands/archive/plan/document/run.js +136 -0
  33. package/dist/commands/archive/plan/document/run.js.map +1 -0
  34. package/dist/commands/archive/plan/gate.js +21 -19
  35. package/dist/commands/archive/plan/gate.js.map +1 -1
  36. package/dist/commands/archive/plan/landscape.js +167 -30
  37. package/dist/commands/archive/plan/landscape.js.map +1 -1
  38. package/dist/commands/archive/plan/model/extending.js +85 -0
  39. package/dist/commands/archive/plan/model/extending.js.map +1 -0
  40. package/dist/commands/archive/plan/refusal.js +14 -19
  41. package/dist/commands/archive/plan/refusal.js.map +1 -1
  42. package/dist/commands/archive/plan/specs.js +137 -56
  43. package/dist/commands/archive/plan/specs.js.map +1 -1
  44. package/dist/commands/archive/plan/state.js +3 -0
  45. package/dist/commands/archive/plan/state.js.map +1 -1
  46. package/dist/commands/archive/run.js +134 -30
  47. package/dist/commands/archive/run.js.map +1 -1
  48. package/dist/commands/archive/shipped.js +49 -0
  49. package/dist/commands/archive/shipped.js.map +1 -0
  50. package/dist/commands/context/context.js +85 -18
  51. package/dist/commands/context/context.js.map +1 -1
  52. package/dist/commands/context/print.js +29 -7
  53. package/dist/commands/context/print.js.map +1 -1
  54. package/dist/commands/delta/delta.js +102 -14
  55. package/dist/commands/delta/delta.js.map +1 -1
  56. package/dist/commands/delta/print.js +17 -1
  57. package/dist/commands/delta/print.js.map +1 -1
  58. package/dist/commands/dependencies.js +3 -7
  59. package/dist/commands/dependencies.js.map +1 -1
  60. package/dist/commands/diff/diff.js +20 -27
  61. package/dist/commands/diff/diff.js.map +1 -1
  62. package/dist/commands/doctor.js +60 -1
  63. package/dist/commands/doctor.js.map +1 -1
  64. package/dist/commands/explain/explain.js +89 -13
  65. package/dist/commands/explain/explain.js.map +1 -1
  66. package/dist/commands/explore.js +16 -10
  67. package/dist/commands/explore.js.map +1 -1
  68. package/dist/commands/gate/gate.js +45 -8
  69. package/dist/commands/gate/gate.js.map +1 -1
  70. package/dist/commands/gate/print.js +15 -3
  71. package/dist/commands/gate/print.js.map +1 -1
  72. package/dist/commands/gherkin/commit.js +13 -54
  73. package/dist/commands/gherkin/commit.js.map +1 -1
  74. package/dist/commands/gherkin/gherkin.js +36 -20
  75. package/dist/commands/gherkin/gherkin.js.map +1 -1
  76. package/dist/commands/gherkin/reconcile.js +10 -13
  77. package/dist/commands/gherkin/reconcile.js.map +1 -1
  78. package/dist/commands/init/first-hour.js +44 -0
  79. package/dist/commands/init/first-hour.js.map +1 -1
  80. package/dist/commands/init/init.js +18 -22
  81. package/dist/commands/init/init.js.map +1 -1
  82. package/dist/commands/list/campaign/campaign.js +4 -6
  83. package/dist/commands/list/campaign/campaign.js.map +1 -1
  84. package/dist/commands/list/json.js +5 -7
  85. package/dist/commands/list/json.js.map +1 -1
  86. package/dist/commands/list/list.js +44 -29
  87. package/dist/commands/list/list.js.map +1 -1
  88. package/dist/commands/list/print.js +52 -9
  89. package/dist/commands/list/print.js.map +1 -1
  90. package/dist/commands/list/suites/suites.js +140 -0
  91. package/dist/commands/list/suites/suites.js.map +1 -0
  92. package/dist/commands/list/views.js +37 -34
  93. package/dist/commands/list/views.js.map +1 -1
  94. package/dist/commands/mcp/dispatch.js +91 -36
  95. package/dist/commands/mcp/dispatch.js.map +1 -1
  96. package/dist/commands/mcp/mcp.js +56 -15
  97. package/dist/commands/mcp/mcp.js.map +1 -1
  98. package/dist/commands/mcp/serve.js.map +1 -1
  99. package/dist/commands/migrate-openspec/materialize/active.js +27 -22
  100. package/dist/commands/migrate-openspec/materialize/active.js.map +1 -1
  101. package/dist/commands/migrate-openspec/materialize/stage.js +4 -3
  102. package/dist/commands/migrate-openspec/materialize/stage.js.map +1 -1
  103. package/dist/commands/migrate-openspec/materialize/target.js +2 -2
  104. package/dist/commands/migrate-openspec/materialize/target.js.map +1 -1
  105. package/dist/commands/migrate-openspec/openspec/decisions.js +9 -14
  106. package/dist/commands/migrate-openspec/openspec/decisions.js.map +1 -1
  107. package/dist/commands/migrate-openspec/openspec/error.js +7 -8
  108. package/dist/commands/migrate-openspec/openspec/error.js.map +1 -1
  109. package/dist/commands/migrate-openspec/openspec/mapping.js +1 -9
  110. package/dist/commands/migrate-openspec/openspec/mapping.js.map +1 -1
  111. package/dist/commands/migrate-openspec/openspec/paths.js +3 -6
  112. package/dist/commands/migrate-openspec/openspec/paths.js.map +1 -1
  113. package/dist/commands/new/capability-template.js +118 -0
  114. package/dist/commands/new/capability-template.js.map +1 -0
  115. package/dist/commands/new/commit.js +8 -22
  116. package/dist/commands/new/commit.js.map +1 -1
  117. package/dist/commands/new/modifies.js +206 -0
  118. package/dist/commands/new/modifies.js.map +1 -0
  119. package/dist/commands/new/new.js +59 -14
  120. package/dist/commands/new/new.js.map +1 -1
  121. package/dist/commands/new/templates.js +48 -124
  122. package/dist/commands/new/templates.js.map +1 -1
  123. package/dist/commands/open.js +3 -7
  124. package/dist/commands/open.js.map +1 -1
  125. package/dist/commands/policy/gate.js +27 -0
  126. package/dist/commands/policy/gate.js.map +1 -1
  127. package/dist/commands/rebase/plan.js +2 -2
  128. package/dist/commands/rebase/plan.js.map +1 -1
  129. package/dist/commands/rebase/rebase.js +60 -35
  130. package/dist/commands/rebase/rebase.js.map +1 -1
  131. package/dist/commands/seed/commit.js +55 -26
  132. package/dist/commands/seed/commit.js.map +1 -1
  133. package/dist/commands/seed/plan.js +158 -13
  134. package/dist/commands/seed/plan.js.map +1 -1
  135. package/dist/commands/seed/seed.js +13 -11
  136. package/dist/commands/seed/seed.js.map +1 -1
  137. package/dist/commands/show/feature.js +9 -5
  138. package/dist/commands/show/feature.js.map +1 -1
  139. package/dist/commands/show/introduced.js +157 -0
  140. package/dist/commands/show/introduced.js.map +1 -0
  141. package/dist/commands/show/marks.js +35 -6
  142. package/dist/commands/show/marks.js.map +1 -1
  143. package/dist/commands/show/service.js +41 -33
  144. package/dist/commands/show/service.js.map +1 -1
  145. package/dist/commands/show/show.js +17 -7
  146. package/dist/commands/show/show.js.map +1 -1
  147. package/dist/commands/status/fleet-next.js +90 -0
  148. package/dist/commands/status/fleet-next.js.map +1 -0
  149. package/dist/commands/status/json.js +2 -0
  150. package/dist/commands/status/json.js.map +1 -1
  151. package/dist/commands/status/print.js +89 -37
  152. package/dist/commands/status/print.js.map +1 -1
  153. package/dist/commands/status/status.js +3 -7
  154. package/dist/commands/status/status.js.map +1 -1
  155. package/dist/commands/steps/steps.js +103 -23
  156. package/dist/commands/steps/steps.js.map +1 -1
  157. package/dist/commands/subsystem/edit.js +7 -7
  158. package/dist/commands/subsystem/edit.js.map +1 -1
  159. package/dist/commands/subsystem/move.js +106 -46
  160. package/dist/commands/subsystem/move.js.map +1 -1
  161. package/dist/commands/subsystem/query.js +2 -4
  162. package/dist/commands/subsystem/query.js.map +1 -1
  163. package/dist/commands/subsystem/subsystem.js +4 -7
  164. package/dist/commands/subsystem/subsystem.js.map +1 -1
  165. package/dist/commands/subsystem/sync.js +289 -74
  166. package/dist/commands/subsystem/sync.js.map +1 -1
  167. package/dist/commands/subsystem/txn/exclude.js +132 -0
  168. package/dist/commands/subsystem/txn/exclude.js.map +1 -0
  169. package/dist/commands/subsystem/txn/links.js +128 -0
  170. package/dist/commands/subsystem/txn/links.js.map +1 -0
  171. package/dist/commands/subsystem/txn/report.js +174 -0
  172. package/dist/commands/subsystem/txn/report.js.map +1 -0
  173. package/dist/commands/subsystem/txn/txn.js +147 -45
  174. package/dist/commands/subsystem/txn/txn.js.map +1 -1
  175. package/dist/commands/subsystem/txn/views.js +200 -21
  176. package/dist/commands/subsystem/txn/views.js.map +1 -1
  177. package/dist/commands/tasks/actions.js +107 -0
  178. package/dist/commands/tasks/actions.js.map +1 -0
  179. package/dist/commands/tasks/render.js +253 -0
  180. package/dist/commands/tasks/render.js.map +1 -0
  181. package/dist/commands/tasks/tasks.js +119 -0
  182. package/dist/commands/tasks/tasks.js.map +1 -0
  183. package/dist/commands/unarchive/manifest.js +42 -26
  184. package/dist/commands/unarchive/manifest.js.map +1 -1
  185. package/dist/commands/unarchive/restore.js +83 -33
  186. package/dist/commands/unarchive/restore.js.map +1 -1
  187. package/dist/commands/unarchive/unarchive.js +22 -30
  188. package/dist/commands/unarchive/unarchive.js.map +1 -1
  189. package/dist/commands/validate/arch-coverage.js +78 -27
  190. package/dist/commands/validate/arch-coverage.js.map +1 -1
  191. package/dist/commands/validate/checks/fleet-shape.js +34 -126
  192. package/dist/commands/validate/checks/fleet-shape.js.map +1 -1
  193. package/dist/commands/validate/checks/health-deps.js +9 -6
  194. package/dist/commands/validate/checks/health-deps.js.map +1 -1
  195. package/dist/commands/validate/checks/introduced.js +102 -0
  196. package/dist/commands/validate/checks/introduced.js.map +1 -0
  197. package/dist/commands/validate/checks/requirements.js +18 -8
  198. package/dist/commands/validate/checks/requirements.js.map +1 -1
  199. package/dist/commands/validate/checks/sources.js +11 -2
  200. package/dist/commands/validate/checks/sources.js.map +1 -1
  201. package/dist/commands/validate/coverage/covers-after.js +105 -0
  202. package/dist/commands/validate/coverage/covers-after.js.map +1 -0
  203. package/dist/commands/validate/feature.js +26 -20
  204. package/dist/commands/validate/feature.js.map +1 -1
  205. package/dist/commands/validate/fleet/census.js +37 -13
  206. package/dist/commands/validate/fleet/census.js.map +1 -1
  207. package/dist/commands/validate/fleet/landscape.js +144 -126
  208. package/dist/commands/validate/fleet/landscape.js.map +1 -1
  209. package/dist/commands/validate/fleet/load.js +66 -0
  210. package/dist/commands/validate/fleet/load.js.map +1 -1
  211. package/dist/commands/validate/fleet/map/attest.js +98 -0
  212. package/dist/commands/validate/fleet/map/attest.js.map +1 -0
  213. package/dist/commands/validate/fleet/map/bindings.js +107 -0
  214. package/dist/commands/validate/fleet/map/bindings.js.map +1 -0
  215. package/dist/commands/validate/fleet/map/consumers.js +244 -0
  216. package/dist/commands/validate/fleet/map/consumers.js.map +1 -0
  217. package/dist/commands/validate/fleet/map/isolation.js +116 -0
  218. package/dist/commands/validate/fleet/map/isolation.js.map +1 -0
  219. package/dist/commands/validate/fleet/map/usecases.js +54 -0
  220. package/dist/commands/validate/fleet/map/usecases.js.map +1 -0
  221. package/dist/commands/validate/fleet/obligations.js +44 -14
  222. package/dist/commands/validate/fleet/obligations.js.map +1 -1
  223. package/dist/commands/validate/fleet/scorecard/print.js +10 -2
  224. package/dist/commands/validate/fleet/scorecard/print.js.map +1 -1
  225. package/dist/commands/validate/fleet/scorecard/scorecard.js +17 -11
  226. package/dist/commands/validate/fleet/scorecard/scorecard.js.map +1 -1
  227. package/dist/commands/validate/fleet/usecases/place.js.map +1 -1
  228. package/dist/commands/validate/fleet/views/fleet-project.js +217 -0
  229. package/dist/commands/validate/fleet/views/fleet-project.js.map +1 -0
  230. package/dist/commands/validate/fleet/views/ids.js +50 -15
  231. package/dist/commands/validate/fleet/views/ids.js.map +1 -1
  232. package/dist/commands/validate/fleet/views/projects.js +278 -0
  233. package/dist/commands/validate/fleet/views/projects.js.map +1 -0
  234. package/dist/commands/validate/fleet/views/root-documents.js +83 -0
  235. package/dist/commands/validate/fleet/views/root-documents.js.map +1 -0
  236. package/dist/commands/validate/fleet/views/stale.js +40 -47
  237. package/dist/commands/validate/fleet/views/stale.js.map +1 -1
  238. package/dist/commands/validate/links/corpus.js +1 -4
  239. package/dist/commands/validate/links/corpus.js.map +1 -1
  240. package/dist/commands/validate/links/glossary.js.map +1 -1
  241. package/dist/commands/validate/render/repeats.js +63 -0
  242. package/dist/commands/validate/render/repeats.js.map +1 -0
  243. package/dist/commands/validate/render/rollups.js +115 -0
  244. package/dist/commands/validate/render/rollups.js.map +1 -0
  245. package/dist/commands/validate/render/text.js +199 -0
  246. package/dist/commands/validate/render/text.js.map +1 -0
  247. package/dist/commands/validate/report.js +36 -160
  248. package/dist/commands/validate/report.js.map +1 -1
  249. package/dist/commands/validate/scope.js +113 -0
  250. package/dist/commands/validate/scope.js.map +1 -0
  251. package/dist/commands/validate/service/api.js +21 -107
  252. package/dist/commands/validate/service/api.js.map +1 -1
  253. package/dist/commands/validate/service/contracts/generated.js +134 -0
  254. package/dist/commands/validate/service/contracts/generated.js.map +1 -0
  255. package/dist/commands/validate/service/events/events.js +36 -14
  256. package/dist/commands/validate/service/events/events.js.map +1 -1
  257. package/dist/commands/validate/service/events/message-producers.js +1 -1
  258. package/dist/commands/validate/service/events/message-producers.js.map +1 -1
  259. package/dist/commands/validate/service/evidence-pins.js +56 -10
  260. package/dist/commands/validate/service/evidence-pins.js.map +1 -1
  261. package/dist/commands/validate/service/model/diverged.js +226 -0
  262. package/dist/commands/validate/service/model/diverged.js.map +1 -0
  263. package/dist/commands/validate/service/model/grade.js +163 -0
  264. package/dist/commands/validate/service/model/grade.js.map +1 -0
  265. package/dist/commands/validate/service/service.js +121 -61
  266. package/dist/commands/validate/service/service.js.map +1 -1
  267. package/dist/commands/validate/service/specs.js +88 -28
  268. package/dist/commands/validate/service/specs.js.map +1 -1
  269. package/dist/commands/validate/service/spine.js +38 -3
  270. package/dist/commands/validate/service/spine.js.map +1 -1
  271. package/dist/commands/validate/service/usecases/tags.js +113 -0
  272. package/dist/commands/validate/service/usecases/tags.js.map +1 -0
  273. package/dist/commands/validate/service/usecases/usecases.js +209 -0
  274. package/dist/commands/validate/service/usecases/usecases.js.map +1 -0
  275. package/dist/commands/validate/validate.js +85 -60
  276. package/dist/commands/validate/validate.js.map +1 -1
  277. package/dist/commands/verify/cross/diff.js +2 -6
  278. package/dist/commands/verify/cross/diff.js.map +1 -1
  279. package/dist/commands/verify/evidence/contract.js +1 -1
  280. package/dist/commands/verify/evidence/contract.js.map +1 -1
  281. package/dist/commands/verify/evidence/read.js +12 -3
  282. package/dist/commands/verify/evidence/read.js.map +1 -1
  283. package/dist/commands/verify/frozen.js +45 -23
  284. package/dist/commands/verify/frozen.js.map +1 -1
  285. package/dist/commands/verify/record.js +69 -17
  286. package/dist/commands/verify/record.js.map +1 -1
  287. package/dist/commands/verify/report.js +27 -44
  288. package/dist/commands/verify/report.js.map +1 -1
  289. package/dist/commands/verify/results.js +112 -30
  290. package/dist/commands/verify/results.js.map +1 -1
  291. package/dist/commands/verify/verify.js +55 -52
  292. package/dist/commands/verify/verify.js.map +1 -1
  293. package/dist/commands/vouch/pack/pack.js +2 -2
  294. package/dist/commands/vouch/pack/pack.js.map +1 -1
  295. package/dist/commands/vouch/pack/print.js +1 -6
  296. package/dist/commands/vouch/pack/print.js.map +1 -1
  297. package/dist/commands/vouch/pack/sections.js +1 -2
  298. package/dist/commands/vouch/pack/sections.js.map +1 -1
  299. package/dist/commands/vouch/run.js +26 -81
  300. package/dist/commands/vouch/run.js.map +1 -1
  301. package/dist/commands/vouch/sample/plan.js +20 -34
  302. package/dist/commands/vouch/sample/plan.js.map +1 -1
  303. package/dist/commands/vouch/vet/verify.js +39 -7
  304. package/dist/commands/vouch/vet/verify.js.map +1 -1
  305. package/dist/commands/vouch/vouch.js +10 -17
  306. package/dist/commands/vouch/vouch.js.map +1 -1
  307. package/dist/core/agent/agents-md/command-map.js +81 -106
  308. package/dist/core/agent/agents-md/command-map.js.map +1 -1
  309. package/dist/core/agent/agents-md/map/explain.js +21 -9
  310. package/dist/core/agent/agents-md/map/explain.js.map +1 -1
  311. package/dist/core/agent/agents-md/map/lenses/context.js +17 -8
  312. package/dist/core/agent/agents-md/map/lenses/context.js.map +1 -1
  313. package/dist/core/agent/agents-md/map/lenses/diff.js +33 -20
  314. package/dist/core/agent/agents-md/map/lenses/diff.js.map +1 -1
  315. package/dist/core/agent/agents-md/map/lenses/gate.js +13 -5
  316. package/dist/core/agent/agents-md/map/lenses/gate.js.map +1 -1
  317. package/dist/core/agent/agents-md/map/mcp.js +10 -7
  318. package/dist/core/agent/agents-md/map/mcp.js.map +1 -1
  319. package/dist/core/agent/agents-md/map/status.js +24 -8
  320. package/dist/core/agent/agents-md/map/status.js.map +1 -1
  321. package/dist/core/agent/agents-md/map/subsystem.js +80 -8
  322. package/dist/core/agent/agents-md/map/subsystem.js.map +1 -1
  323. package/dist/core/agent/agents-md/map/usecases.js +88 -10
  324. package/dist/core/agent/agents-md/map/usecases.js.map +1 -1
  325. package/dist/core/agent/agents-md/refusals.js +49 -22
  326. package/dist/core/agent/agents-md/refusals.js.map +1 -1
  327. package/dist/core/agent/agents-md.js +39 -6
  328. package/dist/core/agent/agents-md.js.map +1 -1
  329. package/dist/core/agent/agents-stamp.js +10 -0
  330. package/dist/core/agent/agents-stamp.js.map +1 -1
  331. package/dist/core/agent/protocol.js +1 -1
  332. package/dist/core/agent/protocol.js.map +1 -1
  333. package/dist/core/agent/scaffold.js +10 -15
  334. package/dist/core/agent/scaffold.js.map +1 -1
  335. package/dist/core/agent/support/report.js +46 -5
  336. package/dist/core/agent/support/report.js.map +1 -1
  337. package/dist/core/agent/tools/dialects.js +1 -0
  338. package/dist/core/agent/tools/dialects.js.map +1 -1
  339. package/dist/core/agent/tools/registry.js +41 -76
  340. package/dist/core/agent/tools/registry.js.map +1 -1
  341. package/dist/core/agent/workflows/adopt.js +158 -11
  342. package/dist/core/agent/workflows/adopt.js.map +1 -1
  343. package/dist/core/agent/workflows/check.js +78 -39
  344. package/dist/core/agent/workflows/check.js.map +1 -1
  345. package/dist/core/agent/workflows/closing.js +88 -27
  346. package/dist/core/agent/workflows/closing.js.map +1 -1
  347. package/dist/core/agent/workflows/feature.js +128 -13
  348. package/dist/core/agent/workflows/feature.js.map +1 -1
  349. package/dist/core/agent/workflows/implement.js +96 -13
  350. package/dist/core/agent/workflows/implement.js.map +1 -1
  351. package/dist/core/agent/workflows/reference/authoring.js +106 -4
  352. package/dist/core/agent/workflows/reference/authoring.js.map +1 -1
  353. package/dist/core/agent/workflows/reference/codes.js +8 -6
  354. package/dist/core/agent/workflows/reference/codes.js.map +1 -1
  355. package/dist/core/agent/workflows/reference/done-check.js +37 -15
  356. package/dist/core/agent/workflows/reference/done-check.js.map +1 -1
  357. package/dist/core/agent/workflows/reference/drawing/drawing.js +253 -0
  358. package/dist/core/agent/workflows/reference/drawing/drawing.js.map +1 -0
  359. package/dist/core/agent/workflows/reference/reference.js +6 -3
  360. package/dist/core/agent/workflows/reference/reference.js.map +1 -1
  361. package/dist/core/agent/workflows/reference/spine.js +68 -27
  362. package/dist/core/agent/workflows/reference/spine.js.map +1 -1
  363. package/dist/core/asyncapi/baseline/plan.js +14 -81
  364. package/dist/core/asyncapi/baseline/plan.js.map +1 -1
  365. package/dist/core/asyncapi/digest.js +30 -25
  366. package/dist/core/asyncapi/digest.js.map +1 -1
  367. package/dist/core/asyncapi/merge/components.js +5 -4
  368. package/dist/core/asyncapi/merge/components.js.map +1 -1
  369. package/dist/core/asyncapi/merge/error.js +7 -2
  370. package/dist/core/asyncapi/merge/error.js.map +1 -1
  371. package/dist/core/asyncapi/merge/markers.js +32 -50
  372. package/dist/core/asyncapi/merge/markers.js.map +1 -1
  373. package/dist/core/asyncapi/merge/merge.js +33 -53
  374. package/dist/core/asyncapi/merge/merge.js.map +1 -1
  375. package/dist/core/asyncapi/merge/pin.js +12 -36
  376. package/dist/core/asyncapi/merge/pin.js.map +1 -1
  377. package/dist/core/asyncapi/model.js.map +1 -1
  378. package/dist/core/asyncapi/read.js +36 -12
  379. package/dist/core/asyncapi/read.js.map +1 -1
  380. package/dist/core/brief/brief.js +96 -36
  381. package/dist/core/brief/brief.js.map +1 -1
  382. package/dist/core/brief/checks.js +138 -3
  383. package/dist/core/brief/checks.js.map +1 -1
  384. package/dist/core/brief/landscape.js +209 -130
  385. package/dist/core/brief/landscape.js.map +1 -1
  386. package/dist/core/brief/map/extend.js +84 -0
  387. package/dist/core/brief/map/extend.js.map +1 -0
  388. package/dist/core/brief/map/owed.js +266 -0
  389. package/dist/core/brief/map/owed.js.map +1 -0
  390. package/dist/core/brief/targets.js +109 -31
  391. package/dist/core/brief/targets.js.map +1 -1
  392. package/dist/core/brief/unchecked.js +14 -3
  393. package/dist/core/brief/unchecked.js.map +1 -1
  394. package/dist/core/c4/arch.js +90 -182
  395. package/dist/core/c4/arch.js.map +1 -1
  396. package/dist/core/c4/direction/direction.js +114 -0
  397. package/dist/core/c4/direction/direction.js.map +1 -0
  398. package/dist/core/c4/likec4.js +169 -14
  399. package/dist/core/c4/likec4.js.map +1 -1
  400. package/dist/core/c4/locate/unlocated.js +150 -0
  401. package/dist/core/c4/locate/unlocated.js.map +1 -0
  402. package/dist/core/c4/parsed/deployment.js +160 -0
  403. package/dist/core/c4/parsed/deployment.js.map +1 -0
  404. package/dist/core/c4/parsed/dynamic-views.js.map +1 -1
  405. package/dist/core/c4/parsed/values.js +54 -1
  406. package/dist/core/c4/parsed/values.js.map +1 -1
  407. package/dist/core/c4/parsed/view-ids.js +39 -1
  408. package/dist/core/c4/parsed/view-ids.js.map +1 -1
  409. package/dist/core/c4/prefetch/fleet.js +134 -0
  410. package/dist/core/c4/prefetch/fleet.js.map +1 -0
  411. package/dist/core/c4/project/architecture.js +123 -7
  412. package/dist/core/c4/project/architecture.js.map +1 -1
  413. package/dist/core/c4/project/batch.js +140 -0
  414. package/dist/core/c4/project/batch.js.map +1 -0
  415. package/dist/core/c4/project/documents.js +43 -12
  416. package/dist/core/c4/project/documents.js.map +1 -1
  417. package/dist/core/c4/project/load.js +79 -43
  418. package/dist/core/c4/project/load.js.map +1 -1
  419. package/dist/core/c4/project/staged.js +277 -0
  420. package/dist/core/c4/project/staged.js.map +1 -0
  421. package/dist/core/c4/resolve/attested.js +0 -0
  422. package/dist/core/c4/resolve/attested.js.map +1 -0
  423. package/dist/core/c4/resolve/external.js +51 -0
  424. package/dist/core/c4/resolve/external.js.map +1 -0
  425. package/dist/core/c4/resolve/service.js +78 -17
  426. package/dist/core/c4/resolve/service.js.map +1 -1
  427. package/dist/core/c4/resolve/steps.js +290 -0
  428. package/dist/core/c4/resolve/steps.js.map +1 -0
  429. package/dist/core/c4/resolve/systems.js +154 -0
  430. package/dist/core/c4/resolve/systems.js.map +1 -0
  431. package/dist/core/c4/root-project/exclude.js +352 -0
  432. package/dist/core/c4/root-project/exclude.js.map +1 -0
  433. package/dist/core/c4/seed/template.js +65 -1
  434. package/dist/core/c4/seed/template.js.map +1 -1
  435. package/dist/core/c4/service-model/created/models.js +96 -0
  436. package/dist/core/c4/service-model/created/models.js.map +1 -0
  437. package/dist/core/c4/service-model/documents.js +47 -0
  438. package/dist/core/c4/service-model/documents.js.map +1 -0
  439. package/dist/core/c4/service-model/fleet/extending.js +82 -0
  440. package/dist/core/c4/service-model/fleet/extending.js.map +1 -0
  441. package/dist/core/c4/service-model/load.js +165 -0
  442. package/dist/core/c4/service-model/load.js.map +1 -0
  443. package/dist/core/c4/service-model/renderer.js +128 -0
  444. package/dist/core/c4/service-model/renderer.js.map +1 -0
  445. package/dist/core/c4/service-model/shape.js +106 -0
  446. package/dist/core/c4/service-model/shape.js.map +1 -0
  447. package/dist/core/c4/service-model/slice.js +188 -0
  448. package/dist/core/c4/service-model/slice.js.map +1 -0
  449. package/dist/core/c4/source-mask.js +297 -10
  450. package/dist/core/c4/source-mask.js.map +1 -1
  451. package/dist/core/c4/source-scan.js +222 -141
  452. package/dist/core/c4/source-scan.js.map +1 -1
  453. package/dist/core/c4/splice/authored-source.js +79 -13
  454. package/dist/core/c4/splice/authored-source.js.map +1 -1
  455. package/dist/core/c4/splice/contract.js +20 -0
  456. package/dist/core/c4/splice/contract.js.map +1 -1
  457. package/dist/core/c4/splice/delta-blocks.js +20 -20
  458. package/dist/core/c4/splice/delta-blocks.js.map +1 -1
  459. package/dist/core/c4/splice/identity/declared.js +87 -0
  460. package/dist/core/c4/splice/identity/declared.js.map +1 -0
  461. package/dist/core/c4/splice/identity/edges.js +37 -0
  462. package/dist/core/c4/splice/identity/edges.js.map +1 -1
  463. package/dist/core/c4/splice/identity/existing.js +80 -0
  464. package/dist/core/c4/splice/identity/existing.js.map +1 -0
  465. package/dist/core/c4/splice/identity/interior.js +80 -0
  466. package/dist/core/c4/splice/identity/interior.js.map +1 -0
  467. package/dist/core/c4/splice/identity/owner.js +50 -0
  468. package/dist/core/c4/splice/identity/owner.js.map +1 -0
  469. package/dist/core/c4/splice/landscape-merge.js +182 -114
  470. package/dist/core/c4/splice/landscape-merge.js.map +1 -1
  471. package/dist/core/c4/splice/model/merge.js +151 -0
  472. package/dist/core/c4/splice/model/merge.js.map +1 -0
  473. package/dist/core/c4/splice/placement.js +160 -56
  474. package/dist/core/c4/splice/placement.js.map +1 -1
  475. package/dist/core/c4/splice/text/spot.js +131 -0
  476. package/dist/core/c4/splice/text/spot.js.map +1 -0
  477. package/dist/core/c4/workspace.js +13 -19
  478. package/dist/core/c4/workspace.js.map +1 -1
  479. package/dist/core/capabilities/capabilities.js +6 -6
  480. package/dist/core/capabilities/capabilities.js.map +1 -1
  481. package/dist/core/capabilities/delta/doc.js +7 -10
  482. package/dist/core/capabilities/delta/doc.js.map +1 -1
  483. package/dist/core/capabilities/delta/uncovered.js +2 -2
  484. package/dist/core/capabilities/delta/uncovered.js.map +1 -1
  485. package/dist/core/capabilities/findings.js +18 -22
  486. package/dist/core/capabilities/findings.js.map +1 -1
  487. package/dist/core/capabilities/realizes/findings.js +12 -19
  488. package/dist/core/capabilities/realizes/findings.js.map +1 -1
  489. package/dist/core/capabilities/realizes/join.js +0 -20
  490. package/dist/core/capabilities/realizes/join.js.map +1 -1
  491. package/dist/core/capabilities/rollup.js +6 -0
  492. package/dist/core/capabilities/rollup.js.map +1 -1
  493. package/dist/core/capabilities/tree.js +6 -28
  494. package/dist/core/capabilities/tree.js.map +1 -1
  495. package/dist/core/capabilities/usecase-join.js +3 -13
  496. package/dist/core/capabilities/usecase-join.js.map +1 -1
  497. package/dist/core/coherence/authoring/scaffold.js +11 -3
  498. package/dist/core/coherence/authoring/scaffold.js.map +1 -1
  499. package/dist/core/coherence/authoring/sentinels.js +2 -1
  500. package/dist/core/coherence/authoring/sentinels.js.map +1 -1
  501. package/dist/core/coherence/calls/called.js +52 -0
  502. package/dist/core/coherence/calls/called.js.map +1 -0
  503. package/dist/core/coherence/coherence.js +103 -22
  504. package/dist/core/coherence/coherence.js.map +1 -1
  505. package/dist/core/coherence/consumed/operations.js +70 -0
  506. package/dist/core/coherence/consumed/operations.js.map +1 -0
  507. package/dist/core/coherence/consumed/refusal.js +38 -0
  508. package/dist/core/coherence/consumed/refusal.js.map +1 -0
  509. package/dist/core/coherence/covers/health.js +85 -0
  510. package/dist/core/coherence/covers/health.js.map +1 -0
  511. package/dist/core/coherence/declared.js +60 -34
  512. package/dist/core/coherence/declared.js.map +1 -1
  513. package/dist/core/coherence/events/declared.js +44 -59
  514. package/dist/core/coherence/events/declared.js.map +1 -1
  515. package/dist/core/coherence/events/events.js +147 -16
  516. package/dist/core/coherence/events/events.js.map +1 -1
  517. package/dist/core/coherence/events/grades.js +31 -8
  518. package/dist/core/coherence/events/grades.js.map +1 -1
  519. package/dist/core/coherence/events/lookups.js +28 -87
  520. package/dist/core/coherence/events/lookups.js.map +1 -1
  521. package/dist/core/coherence/events/produced.js +100 -0
  522. package/dist/core/coherence/events/produced.js.map +1 -0
  523. package/dist/core/coherence/lookups.js +18 -78
  524. package/dist/core/coherence/lookups.js.map +1 -1
  525. package/dist/core/coherence/retired/archived.js +285 -0
  526. package/dist/core/coherence/retired/archived.js.map +1 -0
  527. package/dist/core/coherence/retired/event-pair.js +62 -0
  528. package/dist/core/coherence/retired/event-pair.js.map +1 -0
  529. package/dist/core/coherence/retired/merged.js +79 -0
  530. package/dist/core/coherence/retired/merged.js.map +1 -0
  531. package/dist/core/coherence/retired/retirement.js +49 -0
  532. package/dist/core/coherence/retired/retirement.js.map +1 -0
  533. package/dist/core/coherence/retired/revival/arrivals.js +131 -0
  534. package/dist/core/coherence/retired/revival/arrivals.js.map +1 -0
  535. package/dist/core/coherence/retired/revival/revived.js +297 -0
  536. package/dist/core/coherence/retired/revival/revived.js.map +1 -0
  537. package/dist/core/consumers/after.js +113 -0
  538. package/dist/core/consumers/after.js.map +1 -0
  539. package/dist/core/consumers/consumers.js +296 -0
  540. package/dist/core/consumers/consumers.js.map +1 -0
  541. package/dist/core/consumers/current.js +211 -0
  542. package/dist/core/consumers/current.js.map +1 -0
  543. package/dist/core/consumers/scan.js +46 -0
  544. package/dist/core/consumers/scan.js.map +1 -0
  545. package/dist/core/consumers/state.js +27 -0
  546. package/dist/core/consumers/state.js.map +1 -0
  547. package/dist/core/delta/delta.js +51 -6
  548. package/dist/core/delta/delta.js.map +1 -1
  549. package/dist/core/dependencies/fanin.js +2 -2
  550. package/dist/core/dependencies/fanin.js.map +1 -1
  551. package/dist/core/deployment/delta.js +191 -0
  552. package/dist/core/deployment/delta.js.map +1 -0
  553. package/dist/core/deployment/objects.js +145 -0
  554. package/dist/core/deployment/objects.js.map +1 -0
  555. package/dist/core/diff/base-git.js +94 -12
  556. package/dist/core/diff/base-git.js.map +1 -1
  557. package/dist/core/diff/base-state.js +49 -21
  558. package/dist/core/diff/base-state.js.map +1 -1
  559. package/dist/core/diff/joins.js +136 -0
  560. package/dist/core/diff/joins.js.map +1 -0
  561. package/dist/core/diff/scope/changed-paths.js +22 -6
  562. package/dist/core/diff/scope/changed-paths.js.map +1 -1
  563. package/dist/core/diff/scope/edges.js +82 -0
  564. package/dist/core/diff/scope/edges.js.map +1 -0
  565. package/dist/core/diff/semantic.js +100 -31
  566. package/dist/core/diff/semantic.js.map +1 -1
  567. package/dist/core/docs.js +31 -22
  568. package/dist/core/docs.js.map +1 -1
  569. package/dist/core/doctor/agents.js +34 -18
  570. package/dist/core/doctor/agents.js.map +1 -1
  571. package/dist/core/doctor/config.js +7 -3
  572. package/dist/core/doctor/config.js.map +1 -1
  573. package/dist/core/doctor/doctor.js +91 -11
  574. package/dist/core/doctor/doctor.js.map +1 -1
  575. package/dist/core/doctor/report.js.map +1 -1
  576. package/dist/core/doctor/reports/scan.js +242 -0
  577. package/dist/core/doctor/reports/scan.js.map +1 -0
  578. package/dist/core/document/apply.js +158 -11
  579. package/dist/core/document/apply.js.map +1 -1
  580. package/dist/core/document/frontmatter.js +55 -0
  581. package/dist/core/document/frontmatter.js.map +1 -1
  582. package/dist/core/document/parse.js +29 -6
  583. package/dist/core/document/parse.js.map +1 -1
  584. package/dist/core/document/scenarios.js +17 -0
  585. package/dist/core/document/scenarios.js.map +1 -1
  586. package/dist/core/document/spec.js +4 -11
  587. package/dist/core/document/spec.js.map +1 -1
  588. package/dist/core/envelope/config.js +10 -0
  589. package/dist/core/envelope/config.js.map +1 -1
  590. package/dist/core/envelope/json.js +34 -0
  591. package/dist/core/envelope/json.js.map +1 -1
  592. package/dist/core/explain/families.js +26 -21
  593. package/dist/core/explain/families.js.map +1 -1
  594. package/dist/core/explain/lookup.js +14 -1
  595. package/dist/core/explain/lookup.js.map +1 -1
  596. package/dist/core/explain/refusals.js +5 -5
  597. package/dist/core/explain/refusals.js.map +1 -1
  598. package/dist/core/explain/terms/documents.js +227 -0
  599. package/dist/core/explain/terms/documents.js.map +1 -0
  600. package/dist/core/explain/terms/done-check.js +144 -0
  601. package/dist/core/explain/terms/done-check.js.map +1 -0
  602. package/dist/core/explain/terms/entry.js +14 -0
  603. package/dist/core/explain/terms/entry.js.map +1 -0
  604. package/dist/core/explain/terms/stages.js +71 -0
  605. package/dist/core/explain/terms/stages.js.map +1 -0
  606. package/dist/core/explain/terms/tasks.js +97 -0
  607. package/dist/core/explain/terms/tasks.js.map +1 -0
  608. package/dist/core/explain/terms.js +68 -109
  609. package/dist/core/explain/terms.js.map +1 -1
  610. package/dist/core/explore/explore.js +40 -10
  611. package/dist/core/explore/explore.js.map +1 -1
  612. package/dist/core/fleet-context.js +81 -95
  613. package/dist/core/fleet-context.js.map +1 -1
  614. package/dist/core/gate/checks.js +11 -4
  615. package/dist/core/gate/checks.js.map +1 -1
  616. package/dist/core/gate/partners.js +69 -28
  617. package/dist/core/gate/partners.js.map +1 -1
  618. package/dist/core/gate/report.js.map +1 -1
  619. package/dist/core/gate/verification.js +75 -12
  620. package/dist/core/gate/verification.js.map +1 -1
  621. package/dist/core/gherkin/stale.js +13 -37
  622. package/dist/core/gherkin/stale.js.map +1 -1
  623. package/dist/core/glossary/delta.js +10 -7
  624. package/dist/core/glossary/delta.js.map +1 -1
  625. package/dist/core/glossary/tree.js +6 -19
  626. package/dist/core/glossary/tree.js.map +1 -1
  627. package/dist/core/kernel/concurrency.js +19 -0
  628. package/dist/core/kernel/concurrency.js.map +1 -1
  629. package/dist/core/kernel/ids/fqn/ancestors.js +65 -0
  630. package/dist/core/kernel/ids/fqn/ancestors.js.map +1 -0
  631. package/dist/core/kernel/path-safety.js +38 -0
  632. package/dist/core/kernel/path-safety.js.map +1 -1
  633. package/dist/core/kernel/records.js +11 -0
  634. package/dist/core/kernel/records.js.map +1 -1
  635. package/dist/core/links/backlinks.js +1 -3
  636. package/dist/core/links/backlinks.js.map +1 -1
  637. package/dist/core/links/corpus.js +51 -37
  638. package/dist/core/links/corpus.js.map +1 -1
  639. package/dist/core/links/findings.js.map +1 -1
  640. package/dist/core/links/parse.js +38 -9
  641. package/dist/core/links/parse.js.map +1 -1
  642. package/dist/core/mcp/argv.js +101 -0
  643. package/dist/core/mcp/argv.js.map +1 -1
  644. package/dist/core/mcp/author-tools.js +2 -1
  645. package/dist/core/mcp/author-tools.js.map +1 -1
  646. package/dist/core/mcp/protocol.js +2 -2
  647. package/dist/core/mcp/protocol.js.map +1 -1
  648. package/dist/core/mcp/tools.js +43 -33
  649. package/dist/core/mcp/tools.js.map +1 -1
  650. package/dist/core/openapi/baseline/gate.js +53 -12
  651. package/dist/core/openapi/baseline/gate.js.map +1 -1
  652. package/dist/core/openapi/baseline/plan.js +40 -10
  653. package/dist/core/openapi/baseline/plan.js.map +1 -1
  654. package/dist/core/openapi/baseline/record.js +0 -1
  655. package/dist/core/openapi/baseline/record.js.map +1 -1
  656. package/dist/core/openapi/contract-text.js +33 -0
  657. package/dist/core/openapi/contract-text.js.map +1 -0
  658. package/dist/core/openapi/contract-tree.js +301 -0
  659. package/dist/core/openapi/contract-tree.js.map +1 -0
  660. package/dist/core/openapi/depth.js +38 -24
  661. package/dist/core/openapi/depth.js.map +1 -1
  662. package/dist/core/openapi/digest.js +52 -2
  663. package/dist/core/openapi/digest.js.map +1 -1
  664. package/dist/core/openapi/doc.js +12 -4
  665. package/dist/core/openapi/doc.js.map +1 -1
  666. package/dist/core/openapi/merge/components.js +25 -60
  667. package/dist/core/openapi/merge/components.js.map +1 -1
  668. package/dist/core/openapi/merge/error.js +3 -13
  669. package/dist/core/openapi/merge/error.js.map +1 -1
  670. package/dist/core/openapi/merge/markers.js +26 -30
  671. package/dist/core/openapi/merge/markers.js.map +1 -1
  672. package/dist/core/openapi/merge/merge.js +28 -52
  673. package/dist/core/openapi/merge/merge.js.map +1 -1
  674. package/dist/core/openapi/merge/pin.js +17 -35
  675. package/dist/core/openapi/merge/pin.js.map +1 -1
  676. package/dist/core/openspec/decide/verdict.js.map +1 -1
  677. package/dist/core/openspec/inventory.js +4 -5
  678. package/dist/core/openspec/inventory.js.map +1 -1
  679. package/dist/core/openspec/model/mapping.js +30 -28
  680. package/dist/core/openspec/model/mapping.js.map +1 -1
  681. package/dist/core/openspec/model/model.js +12 -7
  682. package/dist/core/openspec/model/model.js.map +1 -1
  683. package/dist/core/openspec/scan/changes.js +10 -4
  684. package/dist/core/openspec/scan/changes.js.map +1 -1
  685. package/dist/core/openspec/scan/config.js +7 -16
  686. package/dist/core/openspec/scan/config.js.map +1 -1
  687. package/dist/core/openspec/scan/shape.js +63 -19
  688. package/dist/core/openspec/scan/shape.js.map +1 -1
  689. package/dist/core/openspec/scan/walk.js +21 -38
  690. package/dist/core/openspec/scan/walk.js.map +1 -1
  691. package/dist/core/pack/living.js +43 -4
  692. package/dist/core/pack/living.js.map +1 -1
  693. package/dist/core/pack/pack.js +50 -6
  694. package/dist/core/pack/pack.js.map +1 -1
  695. package/dist/core/projection/arch-slice.js +2 -2
  696. package/dist/core/projection/arch-slice.js.map +1 -1
  697. package/dist/core/projection/introduced.js +14 -0
  698. package/dist/core/projection/introduced.js.map +1 -0
  699. package/dist/core/provenance/findings.js +48 -12
  700. package/dist/core/provenance/findings.js.map +1 -1
  701. package/dist/core/provenance/git.js +33 -57
  702. package/dist/core/provenance/git.js.map +1 -1
  703. package/dist/core/provenance/gitq/moves.js +71 -114
  704. package/dist/core/provenance/gitq/moves.js.map +1 -1
  705. package/dist/core/provenance/gitq/vouched-ancestor.js +2 -2
  706. package/dist/core/provenance/gitq/vouched-ancestor.js.map +1 -1
  707. package/dist/core/provenance/sources.js +23 -6
  708. package/dist/core/provenance/sources.js.map +1 -1
  709. package/dist/core/provenance/stamp.js +5 -17
  710. package/dist/core/provenance/stamp.js.map +1 -1
  711. package/dist/core/repo/authored/paths.js +18 -0
  712. package/dist/core/repo/authored/paths.js.map +1 -1
  713. package/dist/core/repo/entries.js.map +1 -1
  714. package/dist/core/repo/paths.js +92 -6
  715. package/dist/core/repo/paths.js.map +1 -1
  716. package/dist/core/repo/repo.js +74 -14
  717. package/dist/core/repo/repo.js.map +1 -1
  718. package/dist/core/repo/tree/find.js +12 -3
  719. package/dist/core/repo/tree/find.js.map +1 -1
  720. package/dist/core/repo/tree/fs.js +27 -1
  721. package/dist/core/repo/tree/fs.js.map +1 -1
  722. package/dist/core/repo/tree/render/body.js +258 -0
  723. package/dist/core/repo/tree/render/body.js.map +1 -0
  724. package/dist/core/repo/tree/render/projects.js +182 -0
  725. package/dist/core/repo/tree/render/projects.js.map +1 -0
  726. package/dist/core/repo/tree/render/service/header.js +125 -0
  727. package/dist/core/repo/tree/render/service/header.js.map +1 -0
  728. package/dist/core/repo/tree/render/service/peers.js +28 -0
  729. package/dist/core/repo/tree/render/service/peers.js.map +1 -0
  730. package/dist/core/repo/tree/render/service/view-id.js +67 -0
  731. package/dist/core/repo/tree/render/service/view-id.js.map +1 -0
  732. package/dist/core/repo/tree/render/service/views.js +78 -0
  733. package/dist/core/repo/tree/render/service/views.js.map +1 -0
  734. package/dist/core/repo/tree/render/stale.js +42 -0
  735. package/dist/core/repo/tree/render/stale.js.map +1 -0
  736. package/dist/core/repo/tree/render/text.js +84 -0
  737. package/dist/core/repo/tree/render/text.js.map +1 -0
  738. package/dist/core/repo/tree/render/views.js +293 -0
  739. package/dist/core/repo/tree/render/views.js.map +1 -0
  740. package/dist/core/repo/tree/walk.js +53 -32
  741. package/dist/core/repo/tree/walk.js.map +1 -1
  742. package/dist/core/results.js +47 -12
  743. package/dist/core/results.js.map +1 -1
  744. package/dist/core/scaffold/landscape.js +121 -13
  745. package/dist/core/scaffold/landscape.js.map +1 -1
  746. package/dist/core/scaffold/legacy.js +271 -0
  747. package/dist/core/scaffold/legacy.js.map +1 -0
  748. package/dist/core/staging/commit.js +26 -15
  749. package/dist/core/staging/commit.js.map +1 -1
  750. package/dist/core/staging/lock.js +74 -12
  751. package/dist/core/staging/lock.js.map +1 -1
  752. package/dist/core/staging/recovery/intent.js +2 -5
  753. package/dist/core/staging/recovery/intent.js.map +1 -1
  754. package/dist/core/staging/recovery/recover.js +84 -6
  755. package/dist/core/staging/recovery/recover.js.map +1 -1
  756. package/dist/core/staging/snapshot/manifest.js +188 -0
  757. package/dist/core/staging/snapshot/manifest.js.map +1 -0
  758. package/dist/core/staging/{snapshot.js → snapshot/snapshot.js} +39 -45
  759. package/dist/core/staging/snapshot/snapshot.js.map +1 -0
  760. package/dist/core/staging/txn/forward.js +24 -14
  761. package/dist/core/staging/txn/forward.js.map +1 -1
  762. package/dist/core/staging/writes.js.map +1 -1
  763. package/dist/core/status/actions/execution.js +11 -0
  764. package/dist/core/status/actions/execution.js.map +1 -1
  765. package/dist/core/status/contracts.js +39 -15
  766. package/dist/core/status/contracts.js.map +1 -1
  767. package/dist/core/status/feature/artifacts.js +33 -8
  768. package/dist/core/status/feature/artifacts.js.map +1 -1
  769. package/dist/core/status/feature/feature.js +24 -17
  770. package/dist/core/status/feature/feature.js.map +1 -1
  771. package/dist/core/status/feature/next.js +20 -7
  772. package/dist/core/status/feature/next.js.map +1 -1
  773. package/dist/core/status/feature/words.js +96 -0
  774. package/dist/core/status/feature/words.js.map +1 -0
  775. package/dist/core/status/fleet/fleet.js +43 -14
  776. package/dist/core/status/fleet/fleet.js.map +1 -1
  777. package/dist/core/status/fleet/next.js +153 -58
  778. package/dist/core/status/fleet/next.js.map +1 -1
  779. package/dist/core/status/report.js.map +1 -1
  780. package/dist/core/status/scan.js.map +1 -1
  781. package/dist/core/status/verification.js +30 -15
  782. package/dist/core/status/verification.js.map +1 -1
  783. package/dist/core/tasks/packet.js +199 -0
  784. package/dist/core/tasks/packet.js.map +1 -0
  785. package/dist/core/tasks/record.js +43 -0
  786. package/dist/core/tasks/record.js.map +1 -0
  787. package/dist/core/tasks/sources.js +181 -0
  788. package/dist/core/tasks/sources.js.map +1 -0
  789. package/dist/core/tasks/stamps.js +76 -0
  790. package/dist/core/tasks/stamps.js.map +1 -0
  791. package/dist/core/tasks/unit.js +0 -0
  792. package/dist/core/tasks/unit.js.map +1 -0
  793. package/dist/core/usecases/capability.js +11 -14
  794. package/dist/core/usecases/capability.js.map +1 -1
  795. package/dist/core/usecases/delta/claims.js +31 -7
  796. package/dist/core/usecases/delta/claims.js.map +1 -1
  797. package/dist/core/usecases/delta/flows.js +5 -7
  798. package/dist/core/usecases/delta/flows.js.map +1 -1
  799. package/dist/core/usecases/delta/modified.js +315 -0
  800. package/dist/core/usecases/delta/modified.js.map +1 -0
  801. package/dist/core/usecases/delta/overlay.js +32 -191
  802. package/dist/core/usecases/delta/overlay.js.map +1 -1
  803. package/dist/core/usecases/fleet.js +195 -36
  804. package/dist/core/usecases/fleet.js.map +1 -1
  805. package/dist/{commands/validate/fleet/usecases → core/usecases/grade}/capability-tag.js +8 -9
  806. package/dist/core/usecases/grade/capability-tag.js.map +1 -0
  807. package/dist/core/usecases/grade/feature.js +88 -0
  808. package/dist/core/usecases/grade/feature.js.map +1 -0
  809. package/dist/{commands/validate/fleet/usecases → core/usecases/grade}/requirement-tag.js +3 -4
  810. package/dist/core/usecases/grade/requirement-tag.js.map +1 -0
  811. package/dist/{commands/validate/fleet/usecases → core/usecases/grade}/steps.js +102 -33
  812. package/dist/core/usecases/grade/steps.js.map +1 -0
  813. package/dist/{commands/validate/fleet/usecases → core/usecases/grade}/usecases.js +23 -10
  814. package/dist/core/usecases/grade/usecases.js.map +1 -0
  815. package/dist/core/usecases/operations.js +26 -14
  816. package/dist/core/usecases/operations.js.map +1 -1
  817. package/dist/core/usecases/place.js.map +1 -1
  818. package/dist/core/usecases/service/exclude.js +119 -0
  819. package/dist/core/usecases/service/exclude.js.map +1 -0
  820. package/dist/core/usecases/service/flows.js +164 -0
  821. package/dist/core/usecases/service/flows.js.map +1 -0
  822. package/dist/core/usecases/suites/participants.js +83 -0
  823. package/dist/core/usecases/suites/participants.js.map +1 -0
  824. package/dist/core/usecases/suites/suites.js +45 -0
  825. package/dist/core/usecases/suites/suites.js.map +1 -0
  826. package/dist/core/verify/answers.js +12 -5
  827. package/dist/core/verify/answers.js.map +1 -1
  828. package/dist/core/verify/build.js +102 -82
  829. package/dist/core/verify/build.js.map +1 -1
  830. package/dist/core/verify/checklist.js +70 -12
  831. package/dist/core/verify/checklist.js.map +1 -1
  832. package/dist/core/verify/location.js +67 -0
  833. package/dist/core/verify/location.js.map +1 -0
  834. package/dist/core/verify/pins/lint.js +3 -2
  835. package/dist/core/verify/pins/lint.js.map +1 -1
  836. package/dist/core/verify/pins/pin.js +1 -1
  837. package/dist/core/verify/pins/pin.js.map +1 -1
  838. package/dist/core/verify/read/file.js +224 -0
  839. package/dist/core/verify/read/file.js.map +1 -0
  840. package/dist/core/verify/{file.js → read/shape.js} +16 -104
  841. package/dist/core/verify/read/shape.js.map +1 -0
  842. package/dist/core/verify/read/union.js +105 -0
  843. package/dist/core/verify/read/union.js.map +1 -0
  844. package/dist/core/verify/record.js +35 -12
  845. package/dist/core/verify/record.js.map +1 -1
  846. package/dist/core/verify/store/commit.js +40 -30
  847. package/dist/core/verify/store/commit.js.map +1 -1
  848. package/dist/core/verify/store/render.js +8 -4
  849. package/dist/core/verify/store/render.js.map +1 -1
  850. package/dist/core/vocabulary/issue.js +4 -0
  851. package/dist/core/vocabulary/issue.js.map +1 -1
  852. package/dist/core/vocabulary/maturity.js +75 -4
  853. package/dist/core/vocabulary/maturity.js.map +1 -1
  854. package/dist/core/vocabulary/report.js +16 -1
  855. package/dist/core/vocabulary/report.js.map +1 -1
  856. package/examples/README.md +54 -11
  857. package/examples/docs/architecture/landscape.likec4 +62 -6
  858. package/examples/docs/architecture/services.likec4 +70 -0
  859. package/examples/docs/architecture/subsystems.likec4 +7 -0
  860. package/examples/docs/architecture/usecases/order-notification.likec4 +16 -7
  861. package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-service/asyncapi.yaml +11 -8
  862. package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-split-service/openapi.yaml +6 -6
  863. package/examples/docs/features/FEAT-112-retire-order-v1/specs/order-service/openapi.yaml +4 -1
  864. package/examples/docs/features/archive/FEAT-088-refunds/specs/payment-service/openapi.yaml +13 -10
  865. package/examples/docs/likec4.config.json +0 -1
  866. package/examples/docs/services/checkout-web/model.likec4 +39 -56
  867. package/examples/docs/services/order-service/arch.spec.md +13 -6
  868. package/examples/docs/services/order-service/asyncapi.yaml +3 -2
  869. package/examples/docs/services/order-service/model.likec4 +58 -70
  870. package/examples/docs/services/payment-service/arch.spec.md +7 -4
  871. package/examples/docs/services/payment-service/model.likec4 +38 -37
  872. package/examples/docs/services/platform/identity-service/arch.spec.md +7 -4
  873. package/examples/docs/services/platform/identity-service/model.likec4 +35 -37
  874. package/examples/docs/services/platform/notification-service/asyncapi.yaml +2 -1
  875. package/examples/docs/services/platform/notification-service/health.yaml +8 -3
  876. package/examples/docs/services/platform/notification-service/model.likec4 +43 -64
  877. package/package.json +1 -1
  878. package/dist/commands/validate/checks/vocabulary.js +0 -31
  879. package/dist/commands/validate/checks/vocabulary.js.map +0 -1
  880. package/dist/commands/validate/fleet/usecases/capability-tag.js.map +0 -1
  881. package/dist/commands/validate/fleet/usecases/requirement-tag.js.map +0 -1
  882. package/dist/commands/validate/fleet/usecases/steps.js.map +0 -1
  883. package/dist/commands/validate/fleet/usecases/usecases.js.map +0 -1
  884. package/dist/core/agent/agents-md/artifacts.js +0 -220
  885. package/dist/core/agent/agents-md/artifacts.js.map +0 -1
  886. package/dist/core/agent/agents-md/cycle.js +0 -165
  887. package/dist/core/agent/agents-md/cycle.js.map +0 -1
  888. package/dist/core/agent/agents-md/shipped/archive-gate.js +0 -98
  889. package/dist/core/agent/agents-md/shipped/archive-gate.js.map +0 -1
  890. package/dist/core/agent/agents-md/spine.js +0 -40
  891. package/dist/core/agent/agents-md/spine.js.map +0 -1
  892. package/dist/core/coherence/events/merged.js +0 -40
  893. package/dist/core/coherence/events/merged.js.map +0 -1
  894. package/dist/core/diff/current-state.js +0 -96
  895. package/dist/core/diff/current-state.js.map +0 -1
  896. package/dist/core/diff/victims.js +0 -247
  897. package/dist/core/diff/victims.js.map +0 -1
  898. package/dist/core/repo/tree/views.js +0 -172
  899. package/dist/core/repo/tree/views.js.map +0 -1
  900. package/dist/core/staging/snapshot.js.map +0 -1
  901. package/dist/core/verify/file.js.map +0 -1
package/COMPARISON.md CHANGED
@@ -4,7 +4,8 @@ loam is not a replacement for an architecture renderer, a software catalog, a co
4
4
  broker, an API-diff engine, or a code-level architecture test. It is the layer that keeps an
5
5
  authored C4 model, requirements, contracts and verification evidence semantically connected while
6
6
  the system changes. Most of the tools below can sit beside it; the useful question is which part of
7
- the problem each one should own.
7
+ the problem each one should own. One section is different in kind and carries a date: the
8
+ spec-driven change tools overlap loam's own job, and they change every week.
8
9
 
9
10
  ## Architecture as code: LikeC4 and Structurizr
10
11
 
@@ -48,8 +49,11 @@ replace consumer-driven contract tests.
48
49
  detection](https://buf.build/docs/breaking/overview/) inspect contract revisions in much greater
49
50
  depth than loam. They answer whether an OpenAPI or Protobuf change is structurally breaking; loam
50
51
  answers which authored consumers and requirements are joined to the operation or message being
51
- changed. Use the specialist diff in CI beside loam rather than expecting either tool to infer the
52
- other half.
52
+ changed — `loam diff` names them for a removal, a deprecation, and a modification of the operation
53
+ or anything its `$ref`s reach — and never whether the change breaks them. Authored means drawn or
54
+ written in the docs repo: a caller the map does not draw is invisible to it, and one drawn without
55
+ an operation on its edge is reported as a consumer nobody could check. Use the specialist diff in
56
+ CI beside loam rather than expecting either tool to infer the other half.
53
57
 
54
58
  ## Requirements traceability: OpenFastTrace, Doorstop, StrictDoc and Sphinx-Needs
55
59
 
@@ -71,6 +75,90 @@ question loam intentionally does not: whether the code actually has the structur
71
75
  claims. Use them to turn selected architecture rules into executable code checks; use loam to keep
72
76
  the authored system model and the rest of its semantic record coherent.
73
77
 
78
+ ## Spec-driven change tools, as of October 2026
79
+
80
+ These are the tools a team evaluating loam usually holds it against, and unlike the neighbours
81
+ above they overlap its job: each turns an intended change into specs an agent implements. They
82
+ release about weekly, so this section is dated — checked 2026-10-09 against each project's
83
+ releases, documentation and issue tracker — and each claim links its source. It records what each
84
+ offers for a change that crosses repositories or services, what is still open upstream, and where
85
+ loam differs. It does not rank them.
86
+
87
+ **OpenSpec** (1.14.1, published 2026-10-05)
88
+
89
+ - [Stores](https://openspec.dev/docs/stores), in beta since 1.5.0, keep specs in a repository of
90
+ their own that several code repositories plan against; worksets, also beta, group them. The guide
91
+ says OpenSpec does not route tasks to repositories: for a change spanning components, its pattern
92
+ is a shared contract in the store plus a separate local change in each component repository,
93
+ linked by hand. Since 1.14.0, a store-backed apply may also edit the code repository that
94
+ declares the store.
95
+ - `openspec show <change> --diff` (1.11.0) renders each requirement of a change as a unified diff
96
+ against its base, with `--json --diff` for pipelines
97
+ ([releases](https://github.com/Fission-AI/OpenSpec/releases)).
98
+ - The [Cloud Agent](https://openspec.dev/blog/openspec-cloud-agents), in early access since
99
+ 2026-08-28 with new sign-ups paused on 2026-09-11, is hosted. It checks pull requests against
100
+ spec requirements, shows requirements across repositories as in sync, drifted or needing a
101
+ decision, scans daily and opens corrective pull requests. The page does not say how it detects
102
+ drift.
103
+ - Open: [#725](https://github.com/Fission-AI/OpenSpec/issues/725), multi-repository and
104
+ microservice spec management, open since 2026-02-18. On 2026-09-07 the maintainers' bot confirmed
105
+ that shared changes with repository slices and explicit apply targets do not exist yet.
106
+
107
+ **Spec Kit** (1.1.2, 2026-10-07)
108
+
109
+ - The [contract-driven development
110
+ guide](https://github.github.com/spec-kit/guides/contract-driven-development.html) (September
111
+ 2026) covers interfaces between repositories or components by convention: the owner publishes a
112
+ versioned contract, consumers pin it, and provider and consumer contract tests go into the tasks.
113
+ It excludes contract sync, cross-repository dependency resolution and release orchestration, and
114
+ describes no automated check between consumer and provider.
115
+ - [`/speckit.converge`](https://raw.githubusercontent.com/github/spec-kit/main/templates/commands/converge.md)
116
+ (June 2026) runs after implementation: the agent compares the code with one feature's spec, plan
117
+ and tasks, classes each gap as missing, partial, contradicting or unrequested, and appends tasks
118
+ for them.
119
+ - 1.1.1 added an experimental MCP server, and 1.1.2 MCP tools that list a project's artifacts
120
+ ([releases](https://github.com/github/spec-kit/releases)).
121
+ - Open: [#4583](https://github.com/github/spec-kit/issues/4583), multi-repository microservices,
122
+ open since 2026-09-14 and labelled triage-can-wait. The maintainer linked the contract-driven
123
+ guide and asked whether it is enough to close it.
124
+
125
+ **Kiro** (IDE 1.2, CLI 2.28)
126
+
127
+ - [Feature specs](https://kiro.dev/docs/specs/) are Requirements-First or, since IDE 0.10
128
+ (February 2026), Design-First — requirements derived from an existing architecture or sketch —
129
+ and live per feature under `.kiro/specs`. Analyze Requirements (0.12, May 2026) checks a
130
+ requirements document for ambiguity, conflicts and gaps before design.
131
+ - [Kiro Web](https://kiro.dev/changelog/web/introducing-kiro-web-preview/) (preview from
132
+ 2026-05-18) clones several repositories into one cloud session, coordinates a change across them
133
+ and opens a pull or merge request in each repository it changed; since June, GitHub and GitLab
134
+ repositories can share a session.
135
+ - For specs that span repositories, the [best-practices
136
+ page](https://kiro.dev/docs/specs/best-practices/) suggests a central specs repository linked by
137
+ submodules, packages or symlinks. The docs describe no merge of a finished spec into a living
138
+ baseline and no drift detection; [#9435](https://github.com/kirodotdev/Kiro/issues/9435), open,
139
+ asks for a git ref stamped into spec metadata and a warning when referenced code changed.
140
+
141
+ **Where loam differs**
142
+
143
+ - A cross-service change is one feature with a requirement delta for each service it touches, and
144
+ each service's part is computed: `loam delta <FEAT> --service <id>` is that service's slice, and
145
+ `loam tasks` lists the work per service, providers before consumers. That is the routing #725
146
+ asks for, held as data rather than executed. loam clones nothing and opens no pull request;
147
+ running an agent in each repository is the host's job — Kiro Web's, or a cloud agent's.
148
+ - The joins between services are exact tokens that `loam validate` grades: a call edge's `op`
149
+ against the provider's OpenAPI `operationId`, a requirement's `Operations:` line against its own
150
+ contract. Spec Kit's guide leaves that agreement to people, and converge and the Cloud Agent ask
151
+ a model. loam asks no model and judges no meaning, so a requirement that is wrong but correctly
152
+ joined passes.
153
+ - Drift is detected by digests kept in the files: `sources.stale` when vouched code moves,
154
+ `content.stale` when vouched words move, and a digest on every generated scenario. The checks run
155
+ in each repository's CI and store nothing elsewhere. There is no dashboard, and nothing opens a
156
+ corrective pull request.
157
+ - Two gaps against these tools are open. loam has no per-requirement diff of a change against the
158
+ living spec like `openspec show --diff`: `loam delta` prints whole requirements, and
159
+ `loam archive --dry-run` says only which contract slots the merge quotes unchanged and which it
160
+ overwrites. And it has no analysis pass before code like Kiro's Analyze Requirements.
161
+
74
162
  ## The boundary
75
163
 
76
164
  Every individual mechanism loam uses has neighbours with more depth in that mechanism. loam's
package/CONTRIBUTING.md CHANGED
@@ -71,6 +71,43 @@ workflow. When adding a new suite that touches LikeC4, extend the workflow's sui
71
71
  change. GitHub disables scheduled workflows after sixty days without repository activity, so after a
72
72
  quiet stretch check that the canary is still enabled.
73
73
 
74
+ ## The OpenSpec canary
75
+
76
+ [openspec-canary.yml](https://github.com/ybotok/loam/blob/main/.github/workflows/openspec-canary.yml)
77
+ is the same kind of early-warning smoke for the OpenSpec migration, weekly on Thursday with manual
78
+ dispatch. It resolves the newest `vX.Y.Z` OpenSpec tag with `git ls-remote`, shallow-clones it, and
79
+ runs `npm run test:openspec-corpus -- --baseline latest` against it. Like the LikeC4 canary it has no
80
+ push or pull-request trigger and blocks nothing. The certified claim is the exact-commit corpus job
81
+ in `ci.yml`, whose `release` pin is `OPENSPEC_BASELINES.release` in
82
+ `src/core/openspec/model/model.ts`. When the newest tag is that pin, the sweep re-checks it exactly
83
+ and the summary says there is nothing newer.
84
+
85
+ What a red run means, by failing step. A red sweep means a file in the newest upstream corpus no
86
+ longer survives the migration's read/serialize/read round trip; the log names the file. A red audit
87
+ means `audit-openspec` could not complete on OpenSpec's own workspace — a YAML, root or I/O refusal,
88
+ not a blocker, since blockers are only listed. A red resolve or clone step is infrastructure: GitHub,
89
+ or a tag scheme upstream changed. The parser-source diff never fails. It warns when upstream's
90
+ readers (`src/core/parsers/`), archive merge (`src/core/specs-apply.ts`) or validation rules
91
+ (`src/core/validation/`) moved since the pin, and it is the step to read first. The 1.13 grammar
92
+ changes appeared in no upstream spec file, so a green sweep says nothing about them.
93
+
94
+ Reproduce locally:
95
+
96
+ ```sh
97
+ git clone --depth 1 --branch <tag> https://github.com/Fission-AI/OpenSpec.git /tmp/OpenSpec
98
+ npm run test:openspec-corpus -- --baseline latest /tmp/OpenSpec
99
+ npm run dev -- audit-openspec /tmp/OpenSpec
100
+ ```
101
+
102
+ Moving the pin is an ordinary pull request. Run the sweep and the documented audit, mapping and
103
+ staged-apply path against the new release. Read the parser diff and give loam's OpenSpec reader
104
+ (`src/core/openspec/scan/shape.ts`) whatever grammar it shows, each with a test. Then update
105
+ `OPENSPEC_BASELINES.release` and the `release` totals in `scripts/openspec-corpus.ts`, the `ci.yml`
106
+ matrix, and the pin tables in MIGRATING-from-OpenSpec.md and `test/fixtures/openspec/README.md`.
107
+ The outgoing release becomes the `previous` pin, and the pin it displaces either gets a name of its
108
+ own or a recorded reason to go. The banner and `baselines.release` under `--json` change, so the
109
+ move needs a CHANGELOG entry.
110
+
74
111
  ## Releases
75
112
 
76
113
  Only maintainers create release tags. A release is driven by an exact `v<package.version>` tag and
@@ -6,30 +6,47 @@ is measured, not inferred from a successful directory walk.
6
6
 
7
7
  ## Version matrix
8
8
 
9
- > **Compatibility boundary:** the v1.9 exact-commit corpus is certified for the parser and one-way
10
- > migration boundary documented here. That boundary is the Markdown and the staged migration, not
11
- > OpenSpec's behavior: `audit-openspec` inventories v1.8/v1.9 workspace shapes, and loam does not
12
- > reimplement v1.9 validation, archive recovery, capability retirement, Store or agent-delivery
13
- > semantics.
9
+ > **Compatibility boundary:** the v1.14.1 exact-commit corpus is certified for the parser and
10
+ > one-way migration boundary documented here. That boundary is the Markdown and the staged
11
+ > migration, not OpenSpec's behavior: `audit-openspec` inventories the workspace shapes v1.8
12
+ > introduced and v1.14.1 still uses, and loam does not reimplement OpenSpec validation, archive
13
+ > recovery, capability retirement, Store or agent-delivery semantics.
14
14
 
15
15
  | OpenSpec source | Exact pin | loam coverage | Status |
16
16
  |---|---|---|---|
17
- | [v1.9.0 release](https://github.com/Fission-AI/OpenSpec/releases/tag/v1.9.0) | `2826b8889e5223a9a8095d4428b60b56597e1020`, released 2026-08-13 | Full living + active + archived Markdown corpus sweep, seven verbatim regression fixtures re-vendored at this commit, and the documented audit/mapping/staged-apply path. | **Certified for this documented parser/migration boundary.** It is not bidirectional OpenSpec compatibility. |
18
- | [v1.8.0 release](https://github.com/Fission-AI/OpenSpec/releases/tag/v1.8.0) | `d57889664cab4f2f061d236ec3ff82a5578701bb`, released 2026-08-05 | Audit inventories or preserves modern planning roots, Stores, nested capability paths, config context/rules/references, custom schemas/templates, per-change metadata, `skip_specs`, `RENAMED`, and authored artifacts. | **Inventoried, and superseded by the certified v1.9.0 pin.** No v1.8 exact-release sweep of its own runs; the shapes v1.8 introduced are carried by the v1.9 corpus. |
19
- | [v1.7.0 release](https://github.com/Fission-AI/OpenSpec/releases/tag/v1.7.0) | `4e16790d90d8f54d4773ad9a5e71a57cd9f1e86b` | The previously certified corpus, still swept file by file. | **Regression pin.** A parser change may not fix the current corpus by breaking the one somebody already migrated from. |
20
- | Historical post-v1.7 `main` canary | `45cca5db6137ed209117cc70510eb3e057fb981b` | A third exact living + active + archived parser corpus. | **Regression pin only.** It is not a release and not a moving claim. |
21
-
22
- The seven verbatim fixtures come from the v1.9.0 commit and run in routine CI. A scheduled/manual
23
- matrix separately sweeps all three pinned commits across living, active, and archived spec trees:
24
- v1.9.0 211 files / 746 requirements / 2317 scenarios; v1.7.0 207 / 739 / 2273; canary 209 / 742 /
25
- 2284. These test requirement/scenario parsing, not every v1.8/v1.9 workspace feature. The
17
+ | [v1.14.1 release](https://github.com/Fission-AI/OpenSpec/releases/tag/v1.14.1) | `87c3595ace6a2e22957f39ebe5b74c2f2316e0cb`, released 2026-10-05 | Full living + active + archived Markdown corpus sweep through the migration's own reader, the 1.13 requirement grammar described below, and the documented audit/mapping/staged-apply path, run against OpenSpec's own v1.14.1 workspace. | **Certified for this documented parser/migration boundary.** It is not bidirectional OpenSpec compatibility. |
18
+ | v1.10.0 – v1.14.0 releases | — | Carried by the v1.14.1 corpus and grammar; no exact sweep of their own runs. | **Superseded by the certified v1.14.1 pin.** |
19
+ | [v1.9.0 release](https://github.com/Fission-AI/OpenSpec/releases/tag/v1.9.0) | `2826b8889e5223a9a8095d4428b60b56597e1020`, released 2026-08-13 | The previously certified corpus, still swept file by file; the seven verbatim regression fixtures are vendored from this commit. | **Regression pin.** A parser change may not fix the current corpus by breaking the one somebody already migrated from. |
20
+ | [v1.8.0 release](https://github.com/Fission-AI/OpenSpec/releases/tag/v1.8.0) | `d57889664cab4f2f061d236ec3ff82a5578701bb`, released 2026-08-05 | Audit inventories or preserves modern planning roots, Stores, nested capability paths, config context/rules/references, custom schemas/templates, per-change metadata, `skip_specs`, `RENAMED`, and authored artifacts. | **Inventoried, and superseded.** No v1.8 exact-release sweep of its own runs; the shapes v1.8 introduced are carried by the v1.9.0 and v1.14.1 corpora. |
21
+ | [v1.7.0 release](https://github.com/Fission-AI/OpenSpec/releases/tag/v1.7.0) | `4e16790d90d8f54d4773ad9a5e71a57cd9f1e86b` | An older certified corpus, still swept file by file. | **Regression pin**, for the same reason. |
22
+ | Historical post-v1.7 `main` canary | `45cca5db6137ed209117cc70510eb3e057fb981b` | A further exact living + active + archived parser corpus. | **Regression pin only.** It is not a release and not a moving claim. |
23
+ | Newest upstream release | None: the newest `vX.Y.Z` tag, resolved each week | The same sweep without a pin (`--baseline latest`), an audit of OpenSpec's own workspace, and a diff of upstream's parser sources against the certified pin, in [openspec-canary.yml](https://github.com/ybotok/loam/blob/main/.github/workflows/openspec-canary.yml). | **Early warning, never a certification.** A red canary means upstream moved; it blocks no pull request and no release. |
24
+
25
+ The seven verbatim fixtures come from the v1.9.0 commit and run in routine CI. At v1.14.1 five are
26
+ byte-identical and the other two gained only prose and scenarios of shapes the set already holds, so
27
+ the set was not re-vendored. A scheduled/manual matrix separately sweeps all four pinned commits
28
+ across living, active, and archived spec trees: v1.14.1 223 files / 765 requirements / 2475
29
+ scenarios; v1.9.0 211 / 746 / 2317; v1.7.0 207 / 739 / 2273; canary 209 / 742 / 2284. These test
30
+ requirement/scenario parsing, not every workspace feature. The
26
31
  [fixture provenance, immutable upstream paths, and checksums](https://github.com/ybotok/loam/blob/main/test/fixtures/openspec/README.md)
27
32
  and the [compatibility tests](https://github.com/ybotok/loam/blob/main/test/openspec-compat.test.ts)
28
33
  use absolute GitHub URLs because this guide is also shipped in the npm tarball while `test/` is not.
29
34
 
30
- OpenSpec v1.10.0 (released 2026-08-19) changed no requirement-Markdown format, so the certified
31
- v1.9.0 boundary also covers documents it writes; its workspace-level additions are inventoried like
32
- the v1.8/v1.9 shapes above.
35
+ **What moved between v1.9.0 and v1.14.1.** OpenSpec 1.13.0 and 1.13.1 changed the requirement
36
+ grammar: a `*` or `+` bullet lists a `REMOVED` requirement or a `RENAMED` pair exactly as `-`
37
+ always did, a heading's closing `#` run (`### Requirement: Late fees ###`) is not part of the
38
+ requirement's name, and a delta file may repeat a section header with every copy applied.
39
+ `audit-openspec` and `migrate-openspec` read all four the way OpenSpec does. 1.13.1 also stopped
40
+ counting a bare `#### Scenario:` header with no body as a scenario; loam keeps it, and
41
+ `loam validate` names it stepless in the staged target. The rest of v1.10–v1.14 — `show --diff`,
42
+ `status --all`, `validate --archived`, Store-backed apply, new agent targets — is OpenSpec behavior,
43
+ outside the boundary above.
44
+
45
+ The certification run read OpenSpec's own v1.14.1 workspace: 36 capabilities, 30 active and 85
46
+ archived changes. With the one change still at the proposal stage set aside (the
47
+ `openspec.change-no-specs` case below), apply staged all 251 living requirements and 747 scenarios
48
+ across 36 services, and 145 requirements across 29 features. Its planning roots, artifact kinds and
49
+ change-metadata fields were the ones the v1.9.0 run met.
33
50
 
34
51
  An audit result of `ready: true` means that the particular files the installed loam inspected
35
52
  satisfy loam's documented migration checks. It is not a statement that every behavior of the
@@ -251,11 +268,12 @@ review material until the follow-up checklist is complete.
251
268
  ## What carries over mechanically
252
269
 
253
270
  The exact-commit corpus gate checks living, active, and archived spec trees. The certified corpus is
254
- the OpenSpec v1.9.0 release `2826b888`: 211 Markdown files, 746 requirements, and 2317 scenarios.
255
- The v1.7.0 release `4e16790` (207, 739, 2273) and the post-v1.7 main canary `45cca5d` (209, 742,
256
- 2284) remain as regression sweeps. All three sweeps check parse/serialize/parse stability of
257
- requirement content. Nested bullets, fenced markup, removal prose, CRLF, BOM and non-ASCII names
258
- survive. `REMOVED` requirements with no scenarios remain legal.
271
+ the OpenSpec v1.14.1 release `87c3595`: 223 Markdown files, 765 requirements, and 2475 scenarios.
272
+ The v1.9.0 release `2826b88` (211, 746, 2317), the v1.7.0 release `4e16790` (207, 739, 2273) and
273
+ the post-v1.7 main canary `45cca5d` (209, 742, 2284) remain as regression sweeps. All four read
274
+ each file as the migration does and check read/serialize/read stability of requirement content.
275
+ Nested bullets, fenced markup, removal prose, CRLF, BOM and non-ASCII names survive. `REMOVED`
276
+ requirements with no scenarios remain legal.
259
277
 
260
278
  Modern ADDED/MODIFIED/REMOVED deltas are readable, but “readable” is not “ready”: routing to
261
279
  services, loam frontmatter, Operations/Covers links and feature identity still require decisions.
@@ -312,7 +330,13 @@ services, loam frontmatter, Operations/Covers links and feature identity still r
312
330
  specs intentionally remain `status: draft`.
313
331
  - `Operations:` links to provider OpenAPI `operationId`s, and `Covers:` links where architecture
314
332
  requirements are created.
315
- - `architecture/landscape.likec4`, service `model.likec4`, and explicit fleet relationships.
333
+ - `architecture/landscape.likec4`, service `model.likec4` (written to extend the map's element —
334
+ no `specification` block of its own; SCHEMA.md, "Two shapes of a service model"), and explicit
335
+ fleet relationships — then `loam subsystem sync`, which keeps the root `likec4.config.json`'s
336
+ `exclude` covering exactly the models that stand alone (the staged repo already carries the
337
+ root file), so every model that extends the map renders beside it; `validate --all` warns
338
+ `service.likec4-config-missing` for a standalone model still without a project file of its own,
339
+ and `service.model-unexcluded` for one the root project does not exclude.
316
340
  - Service OpenAPI contracts and provider-before-consumer sequencing where inbound edges already name
317
341
  operations.
318
342
  - LikeC4 and OpenAPI deltas for the already mapped active feature ids (`FEAT-12`, `BUG-42`, and so
package/QUICKSTART.md CHANGED
@@ -1,8 +1,11 @@
1
1
  # loam quick start
2
2
 
3
- From installation to the first agent-driven change, with the smallest useful setup. This guide
4
- uses one application and a local docs directory. A real fleet normally keeps that directory in a
5
- separate repository; the commands and chat flow stay the same.
3
+ From installation to the first agent-driven change, with the smallest useful setup. Section 2 is
4
+ ten minutes with the CLI alone — no agent, no service checkout, no adoption — and shows the check
5
+ only a fleet-wide map can make: a call between two services that names an operation the provider
6
+ does not have. From section 3 on, the guide uses one application and a local docs directory. A real
7
+ fleet normally keeps that directory in a separate repository; the commands and chat flow stay the
8
+ same.
6
9
 
7
10
  ## 1. Install
8
11
 
@@ -16,7 +19,167 @@ loam --version
16
19
  A project-local install works too: `npm install --save-dev @ybotok/loam`, then replace `loam` below
17
20
  with `npx loam`.
18
21
 
19
- ## 2. Wire one project
22
+ ## 2. Ten minutes, CLI only: the fleet spine
23
+
24
+ Nothing here needs requirement Markdown, `loam adopt` or `loam vouch` — only the map and a contract
25
+ you already have. In an empty directory, write `fleet.yaml`: the services, and who calls whom.
26
+
27
+ ```yaml
28
+ services:
29
+ - order-service
30
+ - payment-service
31
+
32
+ calls:
33
+ - order-service -> payment-service
34
+ ```
35
+
36
+ Make the docs repo there, and let `seed` draw the map from that file:
37
+
38
+ ```bash
39
+ loam init --docs . --create
40
+ loam seed --from fleet.yaml
41
+ ```
42
+
43
+ ```text
44
+ architecture/landscape.likec4 written (replaced the scaffold's untouched stub) — 2 service(s), 1 call(s), from fleet.yaml
45
+ + architecture/landscape.likec4
46
+ + services/order-service/.gitkeep
47
+ + services/payment-service/.gitkeep
48
+ + architecture/services.likec4
49
+
50
+ Next:
51
+ loam validate --all
52
+ loam list --needs-work
53
+ loam adopt --service order-service
54
+ ```
55
+
56
+ Now the two things only you can do. First, put the provider's existing contract at
57
+ `services/payment-service/openapi.yaml` — copy the one its build produces; loam never generates it
58
+ and never reads the code. For this walk-through, one operation is enough:
59
+
60
+ ```yaml
61
+ openapi: 3.1.0
62
+ info:
63
+ title: payment-service
64
+ version: 1.0.0
65
+ paths:
66
+ /payments:
67
+ post:
68
+ operationId: authorizePayment
69
+ responses:
70
+ "201":
71
+ description: Authorized
72
+ content:
73
+ application/json:
74
+ schema: { type: object }
75
+ ```
76
+
77
+ Second, name the operation on the call edge in `architecture/landscape.likec4`. `seed` drew the
78
+ edge bare; replace that line with this one, spelled the British way on purpose:
79
+
80
+ ```likec4
81
+ svc_order_service -> svc_payment_service 'Authorises the order' {
82
+ metadata { op 'authorisePayment' }
83
+ }
84
+ ```
85
+
86
+ ```bash
87
+ loam validate --all --errors-only
88
+ ```
89
+
90
+ ```text
91
+ No C4 model at <docs>/services/order-service/model.likec4. Run `loam adopt` for 'order-service' first. (service.no-model)
92
+ No C4 model at <docs>/services/payment-service/model.likec4. Run `loam adopt` for 'payment-service' first. (service.no-model)
93
+ ⚠ payment-service: 1 operation(s) not governed by any requirement — authorizePayment (api.ungoverned)
94
+ ✗ payment-service: landscape edge order-service → payment-service calls 'authorisePayment', not defined in payment-service's OpenAPI (spine.op-undefined)
95
+
96
+ 2 services, 0 features — 3 errors, 3 warnings
97
+ ⚠ requirements axis not started fleet-wide (0 of 2 services), expected during staged adoption — 2 warning(s) grouped: service.no-spec×2; every finding is unchanged in --json
98
+
99
+ → `loam explain <code>` says what a code means and how to fix it
100
+ ```
101
+
102
+ (`<docs>` is the absolute path of the directory; a fleet scorecard follows, cut here.) The last
103
+ `✗` line is the one you came for: one letter between the map and the provider's contract, an
104
+ **error**, and no other check a team normally runs would see it. `loam explain spine.op-undefined`
105
+ says what it means and what to do. The two `service.no-model` errors are not misconfiguration:
106
+ they are a truthful reading of a fleet where adoption has not started, and they stay until each
107
+ service has a model. Spell the operation `authorizePayment` and the `✗` line is gone — the edge now
108
+ reads `spine.resolved` in `--json`. Committed, this directory is a docs repo, and README's
109
+ [PR recipe](README.md#guard-the-fleets-edges-on-every-pr) guards these edges on every pull request
110
+ from here on — `loam diff --base` names who still calls an operation a branch removes.
111
+
112
+ A change can start before any adoption, too. A feature that only states requirements needs no C4
113
+ delta and no contract change:
114
+
115
+ ```bash
116
+ loam new FEAT-1 --title "Idempotent payment authorization" --touches order-service --touches payment-service
117
+ ```
118
+
119
+ ```text
120
+ FEAT-1 scaffolded at features/FEAT-1-idempotent-payment-authorization
121
+ + features/FEAT-1-idempotent-payment-authorization/intent.md
122
+ + features/FEAT-1-idempotent-payment-authorization/delta.likec4
123
+ + features/FEAT-1-idempotent-payment-authorization/specs/order-service/spec.md
124
+ + features/FEAT-1-idempotent-payment-authorization/specs/payment-service/spec.md
125
+
126
+ Next: fill in the delta, then `loam validate --feature FEAT-1`.
127
+ If this feature changes no architecture, delete delta.likec4 — a requirements-only
128
+ feature is complete without it, and an empty `model {}` validates clean too.
129
+ ```
130
+
131
+ Delete `delta.likec4`, write the intent's Why and Scope and its `owner`, and replace each
132
+ `specs/<service>/spec.md` with the requirement that service takes on — the file's comment carries
133
+ the template. payment-service's, for example:
134
+
135
+ ```markdown
136
+ # payment-service — requirement delta for FEAT-1
137
+
138
+ ## ADDED Requirements
139
+
140
+ ### Requirement: Authorize a payment once per idempotency key
141
+ Requirement-ID: PAY-AUTHORIZE-IDEMPOTENT
142
+ Operations: authorizePayment
143
+
144
+ The service SHALL return the original authorization, and charge nothing, when a request repeats an
145
+ idempotency key it has already authorized.
146
+
147
+ #### Scenario: A retried authorization is not charged twice
148
+ - **Given** a payment authorized under idempotency key K
149
+ - **When** an authorization request arrives again with key K
150
+ - **Then** the response carries the original authorization and no second charge is made
151
+ ```
152
+
153
+ ```bash
154
+ loam validate --feature FEAT-1
155
+ loam archive FEAT-1 --dry-run
156
+ ```
157
+
158
+ ```text
159
+ FEAT-1
160
+ ✓ order-service: requirements covered (1 requirement, all with scenarios)
161
+ ✓ payment-service: requirements covered (1 requirement, all with scenarios)
162
+ coherence: ✓ C4 · requirements · OpenAPI agree
163
+ archive FEAT-1 (dry run)
164
+
165
+ requirements: order-service — created living spec.md (1 requirement(s))
166
+ requirements: payment-service — created living spec.md (1 requirement(s))
167
+
168
+ plan — 2 file(s):
169
+ create services/order-service/spec.md
170
+ create services/payment-service/spec.md
171
+ move features/FEAT-1-idempotent-payment-authorization → features/archive/FEAT-1-idempotent-payment-authorization
172
+
173
+ dry run — nothing was written.
174
+ ```
175
+
176
+ The archive would write each service's first living `spec.md` from the change itself, and the
177
+ `Operations:` line already joins payment-service's requirement to the contract above. That is the
178
+ small-change loop WORKFLOW.md calls
179
+ [the honestly-small change](WORKFLOW.md#the-honestly-small-change), used as a first entry. The adoption below is still how a service's existing behaviour gets written down; this is
180
+ how a change that cannot wait for it starts.
181
+
182
+ ## 3. Wire one project
20
183
 
21
184
  Run this in the code repository you want to govern:
22
185
 
@@ -30,14 +193,21 @@ boundary `commerce-app`, and installs command and Agent Skill pointers for the A
30
193
  Commit the generated `loam.json`, agent files and docs directory. Use your real stable service or
31
194
  application id instead of `commerce-app`.
32
195
 
33
- `--create` is only for a new docs repo. To join an existing shared docs repo, use:
196
+ `--create` is only for a new docs repo. To join an existing shared docs repo from one service's
197
+ checkout, use:
34
198
 
35
199
  ```bash
36
- loam init --docs ../architecture-docs --service commerce-app
200
+ loam init --docs ../architecture-docs --service commerce-app --agent-profile service
37
201
  loam doctor
38
202
  ```
39
203
 
40
- ## 3. Adopt what already exists
204
+ `--agent-profile service` installs the entry points that run beside the code — adopt, implement,
205
+ check, verify and report — and leaves feature authoring and shipping to the shared docs repo,
206
+ which takes `--agent-profile docs` when its own `loam init` runs. Without the flag every checkout
207
+ gets all seven. The one-project setup above keeps all seven on purpose: there, the code repo is
208
+ also where features are written and shipped.
209
+
210
+ ## 4. Adopt what already exists
41
211
 
42
212
  In chat, use the explicit entry point:
43
213
 
@@ -57,7 +227,7 @@ Most hosts use `/loam-adopt`; Gemini uses `/loam:adopt`, Amazon Q uses `@loam-ad
57
227
  skills-only host can use `$loam-adopt`. A natural-language request such as “adopt commerce-app into
58
228
  loam” may load the same skill automatically, but the explicit spelling is the predictable path.
59
229
 
60
- ## 4. Make the first change
230
+ ## 5. Make the first change
61
231
 
62
232
  For this one-project setup, stay in the wired code repo: its `loam.json` resolves `loam-docs/`, and
63
233
  its generated agent entries are already present. In a separately cloned team docs repo, run
@@ -90,7 +260,7 @@ loam status --json
90
260
  Its ordered `next[]` is the work queue. The agent runs an entry only when `next[].execution.runnable`
91
261
  is true; edits, work in another checkout and human review stay visibly different.
92
262
 
93
- ## 5. When something behaves badly
263
+ ## 6. When something behaves badly
94
264
 
95
265
  Use the support entry point; it is not another lifecycle step:
96
266
 
@@ -103,11 +273,16 @@ Or ask naturally: “Create a loam problem report for what just happened.” The
103
273
  relevant status and the smallest safe reproduction, and writes a separate file:
104
274
 
105
275
  ```text
106
- loam-reports/YYYY-MM-DD-short-symptom.md
276
+ loam-reports/NNN-YYYY-MM-DD-short-symptom.md
107
277
  ```
108
278
 
109
- The report records expected versus actual behavior, stable codes, relevant locations, write state,
110
- classification and missing evidence. It replaces secrets with `<redacted>`, prefers repo-relative
279
+ `NNN` is the report's ordinal — at least three digits, zero-padded, one more than the highest
280
+ already in the directory, which
281
+ `loam doctor` reports together with how many reports are open, sent, fixed or superseded — and a
282
+ `Status: open` line in the header is where the report's own state is kept (`doctor` reads it from
283
+ the header block above the first `##` heading, never from a quoted template inside the body). The report records
284
+ expected versus actual behavior, stable codes, relevant locations, write state, classification and
285
+ missing evidence. It replaces secrets with `<redacted>`, prefers repo-relative
111
286
  paths, does not copy source/spec bodies, does not retry a writer merely to reproduce it, and never
112
287
  uploads or submits anything automatically. Review the file before sharing or committing it.
113
288
 
@@ -119,6 +294,8 @@ only pointers whose recorded digest still matches; a file your team edited remai
119
294
  - [WORKFLOW.md](WORKFLOW.md) explains the complete lifecycle and human/agent boundary.
120
295
  - [SCHEMA.md](SCHEMA.md) defines every docs-repo artifact and join.
121
296
  - [COMPARISON.md](COMPARISON.md) explains where loam fits beside neighboring tools.
297
+ - [docs/SERVICE-TEAMS.md](https://github.com/ybotok/loam/blob/main/docs/SERVICE-TEAMS.md) is the
298
+ one screen for a team whose repository is one service in a fleet.
122
299
  - [MIGRATING-from-OpenSpec.md](MIGRATING-from-OpenSpec.md) covers an OpenSpec migration.
123
300
 
124
301
  Three rules prevent most surprises: use `--create` only once, let a human vouch, and branch on JSON