@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
@@ -6,9 +6,10 @@
6
6
  * file-line limit, so the pack's documentation lives down here and is
7
7
  * concatenated after the map.
8
8
  *
9
- * Same assembly contract as every section: ../../../agents-md.ts concatenates
10
- * with NO join separator, so this string starts at the first character of its
11
- * opening line and ends with the newline that closes its last one.
9
+ * Same assembly contract as every part of the `loam-codes` page:
10
+ * ../../../workflows/reference/codes.ts concatenates with NO join separator,
11
+ * so this string starts at the first character of its opening line and ends
12
+ * with the newline that closes its last one.
12
13
  */
13
14
  export const CONTEXT_COMMAND = `- \`loam context <service>\` assembles the docs slice bound to one service as a
14
15
  single deterministic briefing — the pack an agent loads before working in
@@ -16,9 +17,10 @@ export const CONTEXT_COMMAND = `- \`loam context <service>\` assembles the docs
16
17
  requirements and arch requirements VERBATIM (bodies and scenarios included),
17
18
  the OpenAPI operations with the requirements governing each, the AsyncAPI
18
19
  messages with their send/receive direction, the fleet edges one hop out with
19
- the map's own health beside them (\`landscape.present\`/\`parses\` — an empty
20
- edge list under a map that does not parse is "nobody could look", never
21
- "nobody calls this"), the \`Requires:\` permissions resolved against the
20
+ the map's own health beside them (\`landscape.present\` is the FILE,
21
+ \`landscape.parses\` is the whole \`architecture/\` project the renderer loads,
22
+ as \`loam adopt\` reads it — an empty edge list under a map that does not parse
23
+ is "nobody could look", never "nobody calls this"), the \`Requires:\` permissions resolved against the
22
24
  vocabulary (an undeclared entry is carried with \`declared: false\`, never
23
25
  refused — and when the vocabulary ITSELF does not read, its parse failure
24
26
  rides beside them, so \`declared: false\` there means nobody could look, not
@@ -29,8 +31,15 @@ export const CONTEXT_COMMAND = `- \`loam context <service>\` assembles the docs
29
31
  narrows the in-flight section to that one feature and is echoed back as the
30
32
  \`feature\` key, so a narrowed pack says it is one; a known feature that does
31
33
  not touch the service still projects, with empty sections and its own
32
- services list. Exit 1 with \`ok: true\` means a document behind the pack did
33
- not parse — the fleet map, a living contract, a fleet vocabulary, another
34
+ services list. A service an active feature INTRODUCES (its
35
+ \`features/<FEAT>/specs/<svc>/\` exists, \`services/<svc>/\` does not yet) is
36
+ briefed from that feature's delta: the payload carries \`living: false\` and
37
+ \`introducedBy\`, the living sections are empty, and \`path\` is the feature's
38
+ \`specs/<svc>/\`. Two features introducing the same service refuse with
39
+ \`invalid-option\` until \`--feature\` names one. \`loam show <svc>\` and
40
+ \`loam steps --service <svc>\` answer for such a service the same way, from
41
+ the delta and marked \`living: false\`. Exit 1 with \`ok: true\` means a
42
+ document behind the pack did not parse — the fleet map, a living contract, a fleet vocabulary, another
34
43
  service's spec during the capability join, or an included feature's document
35
44
  (a feature whose delta.likec4 does not parse is still INCLUDED, its errors
36
45
  in the payload, because a change nobody can read is in flight, not absent)
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../src/core/agent/agents-md/map/lenses/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B9B,CAAC","sourcesContent":["/**\n * The `loam context` entry of the command map — one of the three consumer\n * LENSES this package holds (the agent briefing here, `./gate.ts`'s deploy\n * pipeline, `./diff.ts`'s PR review), the family carved out of `../` when the\n * map package hit its own five-file cap: command-map.ts sits against the\n * file-line limit, so the pack's documentation lives down here and is\n * concatenated after the map.\n *\n * Same assembly contract as every section: ../../../agents-md.ts concatenates\n * with NO join separator, so this string starts at the first character of its\n * opening line and ends with the newline that closes its last one.\n */\nexport const CONTEXT_COMMAND = `- \\`loam context <service>\\` assembles the docs slice bound to one service as a\n single deterministic briefing — the pack an agent loads before working in\n that service's repository. It writes nothing. One payload carries the living\n requirements and arch requirements VERBATIM (bodies and scenarios included),\n the OpenAPI operations with the requirements governing each, the AsyncAPI\n messages with their send/receive direction, the fleet edges one hop out with\n the map's own health beside them (\\`landscape.present\\`/\\`parses\\` — an empty\n edge list under a map that does not parse is \"nobody could look\", never\n \"nobody calls this\"), the \\`Requires:\\` permissions resolved against the\n vocabulary (an undeclared entry is carried with \\`declared: false\\`, never\n refused — and when the vocabulary ITSELF does not read, its parse failure\n rides beside them, so \\`declared: false\\` there means nobody could look, not\n that the claim is wrong), the capabilities this service realizes with the\n capability vocabulary's own health beside them, maturity and provenance,\n presence pointers for the runbook/health/ADRs, and every ACTIVE feature's\n delta over this service in \\`loam delta\\`'s own shapes. \\`--feature <FEAT>\\`\n narrows the in-flight section to that one feature and is echoed back as the\n \\`feature\\` key, so a narrowed pack says it is one; a known feature that does\n not touch the service still projects, with empty sections and its own\n services list. Exit 1 with \\`ok: true\\` means a document behind the pack did\n not parse — the fleet map, a living contract, a fleet vocabulary, another\n service's spec during the capability join, or an included feature's document\n (a feature whose delta.likec4 does not parse is still INCLUDED, its errors\n in the payload, because a change nobody can read is in flight, not absent)\n — and the empty section beside the flag IS the parse failure, not \"nothing\n here\". Identical state yields identical bytes, so packs are diffable across\n runs.\n`;\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../src/core/agent/agents-md/map/lenses/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC9B,CAAC","sourcesContent":["/**\n * The `loam context` entry of the command map — one of the three consumer\n * LENSES this package holds (the agent briefing here, `./gate.ts`'s deploy\n * pipeline, `./diff.ts`'s PR review), the family carved out of `../` when the\n * map package hit its own five-file cap: command-map.ts sits against the\n * file-line limit, so the pack's documentation lives down here and is\n * concatenated after the map.\n *\n * Same assembly contract as every part of the `loam-codes` page:\n * ../../../workflows/reference/codes.ts concatenates with NO join separator,\n * so this string starts at the first character of its opening line and ends\n * with the newline that closes its last one.\n */\nexport const CONTEXT_COMMAND = `- \\`loam context <service>\\` assembles the docs slice bound to one service as a\n single deterministic briefing — the pack an agent loads before working in\n that service's repository. It writes nothing. One payload carries the living\n requirements and arch requirements VERBATIM (bodies and scenarios included),\n the OpenAPI operations with the requirements governing each, the AsyncAPI\n messages with their send/receive direction, the fleet edges one hop out with\n the map's own health beside them (\\`landscape.present\\` is the FILE,\n \\`landscape.parses\\` is the whole \\`architecture/\\` project the renderer loads,\n as \\`loam adopt\\` reads it — an empty edge list under a map that does not parse\n is \"nobody could look\", never \"nobody calls this\"), the \\`Requires:\\` permissions resolved against the\n vocabulary (an undeclared entry is carried with \\`declared: false\\`, never\n refused — and when the vocabulary ITSELF does not read, its parse failure\n rides beside them, so \\`declared: false\\` there means nobody could look, not\n that the claim is wrong), the capabilities this service realizes with the\n capability vocabulary's own health beside them, maturity and provenance,\n presence pointers for the runbook/health/ADRs, and every ACTIVE feature's\n delta over this service in \\`loam delta\\`'s own shapes. \\`--feature <FEAT>\\`\n narrows the in-flight section to that one feature and is echoed back as the\n \\`feature\\` key, so a narrowed pack says it is one; a known feature that does\n not touch the service still projects, with empty sections and its own\n services list. A service an active feature INTRODUCES (its\n \\`features/<FEAT>/specs/<svc>/\\` exists, \\`services/<svc>/\\` does not yet) is\n briefed from that feature's delta: the payload carries \\`living: false\\` and\n \\`introducedBy\\`, the living sections are empty, and \\`path\\` is the feature's\n \\`specs/<svc>/\\`. Two features introducing the same service refuse with\n \\`invalid-option\\` until \\`--feature\\` names one. \\`loam show <svc>\\` and\n \\`loam steps --service <svc>\\` answer for such a service the same way, from\n the delta and marked \\`living: false\\`. Exit 1 with \\`ok: true\\` means a\n document behind the pack did not parse — the fleet map, a living contract, a fleet vocabulary, another\n service's spec during the capability join, or an included feature's document\n (a feature whose delta.likec4 does not parse is still INCLUDED, its errors\n in the payload, because a change nobody can read is in flight, not absent)\n — and the empty section beside the flag IS the parse failure, not \"nothing\n here\". Identical state yields identical bytes, so packs are diffable across\n runs.\n`;\n"]}
@@ -12,35 +12,48 @@
12
12
  * meaning, the severity and the fix. See ../../command-map.ts's header for why
13
13
  * the gloss left.
14
14
  *
15
- * Same assembly contract as every section: ../../../agents-md.ts concatenates
16
- * with NO join separator, so this string starts at the first character of its
17
- * opening line and ends with the newline that closes its last one.
15
+ * Same assembly contract as every part of the `loam-codes` page:
16
+ * ../../../workflows/reference/codes.ts concatenates with NO join separator,
17
+ * so this string starts at the first character of its opening line and ends
18
+ * with the newline that closes its last one.
18
19
  */
19
20
  export const DIFF_COMMAND = `- \`loam diff --base <ref>\` reports the fleet-meaningful changes between the
20
21
  living docs and a base git ref of the DOCS repo (a branch, \`origin/main\`, a
21
22
  commit sha) — the review lens for a docs-repo PR. Read-only: the base state
22
23
  is read with read-only git questions (\`rev-parse\`/\`ls-tree\`/\`show\`), no
23
24
  checkout, nothing written. \`validate --all\` stays the fleet gate; diff says
24
- what a branch CHANGES, and names who currently depends on every removal.
25
+ what a branch CHANGES, and names the authored consumers of every removal,
26
+ deprecation and modification.
25
27
  Codes, per service and grouped by the artifact they are computed over:
26
28
  \`diff.service-added\` and \`diff.service-removed\` over the \`services/<id>/\`
27
29
  directory; \`diff.requirement-added\`, \`diff.requirement-removed\` and
28
30
  \`diff.requirement-modified\` over spec.md's living requirements;
29
- \`diff.op-added\`, \`diff.op-removed\`, \`diff.op-removed-consumed\` and
30
- \`diff.op-deprecated\` over the OpenAPI contract; \`diff.message-added\`,
31
- \`diff.message-removed\` and \`diff.message-removed-consumed\` over the AsyncAPI
32
- contract; and \`diff.consumer-added\` / \`diff.consumer-removed\` over the
33
- cross-service joins — another service's requirement naming this service's
34
- operation or message. The two \`-consumed\` codes are the errors: they are the
35
- removals something in the fleet still names, with the victims in
36
- \`details[]\`. Exit 0 = diff computed, nothing breaking, everything readable;
37
- exit 1 = a refusal, any error finding (\`breaking: true\` in \`--json\`), or a
38
- subject whose artifact could not be read on either side — those axes are
39
- SUSPENDED and reported (\`unreadable\` in the payload and the summary), never
40
- graded as "nothing changed" or "everything added". Refusals reuse existing
41
- codes: \`repository-unavailable\` when the docs repo has no git history to ask,
42
- and \`unknown-target\` when \`--base\` resolves to no commit there. For the
43
- byte-level OpenAPI breaking-change catalogue, run oasdiff on the two states
44
- of one contract instead — loam deliberately does not reimplement it.
31
+ \`diff.op-added\`, \`diff.op-removed\`, \`diff.op-removed-consumed\`,
32
+ \`diff.op-deprecated\` and \`diff.op-modified\` over the OpenAPI contract;
33
+ \`diff.message-added\`, \`diff.message-removed\`,
34
+ \`diff.message-removed-consumed\` and \`diff.message-modified\` over the
35
+ AsyncAPI contract; and \`diff.consumer-added\` / \`diff.consumer-removed\`
36
+ over the cross-service joins — another service's requirement naming this
37
+ service's operation or message. The two \`-consumed\` codes are the errors:
38
+ they are the removals something in the fleet still names, with the victims
39
+ in \`details[]\` — the same consumers \`loam archive\` refuses a removal on
40
+ (edges of the \`architecture/\` project, both spec files, use-case hops; a
41
+ line naming its own service's operation of the same id is no victim). The two contract \`-modified\` codes are warnings whoever
42
+ is joined: the operation or message changed — its own node or anything its
43
+ \`$ref\`s reach — and \`details[]\` names who to check it against, but loam
44
+ does not grade whether the change breaks them. A landscape edge into the
45
+ provider drawn with no \`metadata { op }\` is listed as a consumer nobody
46
+ could check, never dropped. Exit 0 = diff computed, nothing breaking,
47
+ everything readable; exit 1 = a refusal, any error finding
48
+ (\`breaking: true\` in \`--json\`), or a subject whose artifact could not be
49
+ read on either side — those axes are SUSPENDED and reported (\`unreadable\`
50
+ in the payload and the summary), never graded as "nothing changed" or
51
+ "everything added". An unreadable openapi.yaml or asyncapi.yaml whose bytes
52
+ the base holds identically is skipped instead: the branch did not touch it.
53
+ Refusals reuse existing codes: \`repository-unavailable\`
54
+ when the docs repo has no git history to ask, and \`unknown-target\` when
55
+ \`--base\` resolves to no commit there. For the byte-level breaking-change
56
+ catalogue, run oasdiff (OpenAPI) or \`asyncapi diff\` (AsyncAPI) on the two
57
+ states of one contract instead — loam deliberately does not reimplement it.
45
58
  `;
46
59
  //# sourceMappingURL=diff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../../../src/core/agent/agents-md/map/lenses/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B3B,CAAC","sourcesContent":["/**\n * The `loam diff` entry of the command map — the PR-review lens of this\n * package, split out for `./context.ts`'s exact reason: command-map.ts sat\n * against the file-line limit, so the branch-diff surface's documentation\n * lives down here and is concatenated after the map. It is also the\n * documentation home of the whole `diff.*` code vocabulary, which\n * codes-drift requires.\n *\n * The codes are grouped by the ARTIFACT they are computed over and not\n * glossed: that grouping is what nothing else says, while\n * `loam explain diff.op-removed-consumed` (and every sibling) carries the\n * meaning, the severity and the fix. See ../../command-map.ts's header for why\n * the gloss left.\n *\n * Same assembly contract as every section: ../../../agents-md.ts concatenates\n * with NO join separator, so this string starts at the first character of its\n * opening line and ends with the newline that closes its last one.\n */\nexport const DIFF_COMMAND = `- \\`loam diff --base <ref>\\` reports the fleet-meaningful changes between the\n living docs and a base git ref of the DOCS repo (a branch, \\`origin/main\\`, a\n commit sha) — the review lens for a docs-repo PR. Read-only: the base state\n is read with read-only git questions (\\`rev-parse\\`/\\`ls-tree\\`/\\`show\\`), no\n checkout, nothing written. \\`validate --all\\` stays the fleet gate; diff says\n what a branch CHANGES, and names who currently depends on every removal.\n Codes, per service and grouped by the artifact they are computed over:\n \\`diff.service-added\\` and \\`diff.service-removed\\` over the \\`services/<id>/\\`\n directory; \\`diff.requirement-added\\`, \\`diff.requirement-removed\\` and\n \\`diff.requirement-modified\\` over spec.md's living requirements;\n \\`diff.op-added\\`, \\`diff.op-removed\\`, \\`diff.op-removed-consumed\\` and\n \\`diff.op-deprecated\\` over the OpenAPI contract; \\`diff.message-added\\`,\n \\`diff.message-removed\\` and \\`diff.message-removed-consumed\\` over the AsyncAPI\n contract; and \\`diff.consumer-added\\` / \\`diff.consumer-removed\\` over the\n cross-service joins — another service's requirement naming this service's\n operation or message. The two \\`-consumed\\` codes are the errors: they are the\n removals something in the fleet still names, with the victims in\n \\`details[]\\`. Exit 0 = diff computed, nothing breaking, everything readable;\n exit 1 = a refusal, any error finding (\\`breaking: true\\` in \\`--json\\`), or a\n subject whose artifact could not be read on either side — those axes are\n SUSPENDED and reported (\\`unreadable\\` in the payload and the summary), never\n graded as \"nothing changed\" or \"everything added\". Refusals reuse existing\n codes: \\`repository-unavailable\\` when the docs repo has no git history to ask,\n and \\`unknown-target\\` when \\`--base\\` resolves to no commit there. For the\n byte-level OpenAPI breaking-change catalogue, run oasdiff on the two states\n of one contract instead — loam deliberately does not reimplement it.\n`;\n"]}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../../../src/core/agent/agents-md/map/lenses/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsC3B,CAAC","sourcesContent":["/**\n * The `loam diff` entry of the command map — the PR-review lens of this\n * package, split out for `./context.ts`'s exact reason: command-map.ts sat\n * against the file-line limit, so the branch-diff surface's documentation\n * lives down here and is concatenated after the map. It is also the\n * documentation home of the whole `diff.*` code vocabulary, which\n * codes-drift requires.\n *\n * The codes are grouped by the ARTIFACT they are computed over and not\n * glossed: that grouping is what nothing else says, while\n * `loam explain diff.op-removed-consumed` (and every sibling) carries the\n * meaning, the severity and the fix. See ../../command-map.ts's header for why\n * the gloss left.\n *\n * Same assembly contract as every part of the `loam-codes` page:\n * ../../../workflows/reference/codes.ts concatenates with NO join separator,\n * so this string starts at the first character of its opening line and ends\n * with the newline that closes its last one.\n */\nexport const DIFF_COMMAND = `- \\`loam diff --base <ref>\\` reports the fleet-meaningful changes between the\n living docs and a base git ref of the DOCS repo (a branch, \\`origin/main\\`, a\n commit sha) — the review lens for a docs-repo PR. Read-only: the base state\n is read with read-only git questions (\\`rev-parse\\`/\\`ls-tree\\`/\\`show\\`), no\n checkout, nothing written. \\`validate --all\\` stays the fleet gate; diff says\n what a branch CHANGES, and names the authored consumers of every removal,\n deprecation and modification.\n Codes, per service and grouped by the artifact they are computed over:\n \\`diff.service-added\\` and \\`diff.service-removed\\` over the \\`services/<id>/\\`\n directory; \\`diff.requirement-added\\`, \\`diff.requirement-removed\\` and\n \\`diff.requirement-modified\\` over spec.md's living requirements;\n \\`diff.op-added\\`, \\`diff.op-removed\\`, \\`diff.op-removed-consumed\\`,\n \\`diff.op-deprecated\\` and \\`diff.op-modified\\` over the OpenAPI contract;\n \\`diff.message-added\\`, \\`diff.message-removed\\`,\n \\`diff.message-removed-consumed\\` and \\`diff.message-modified\\` over the\n AsyncAPI contract; and \\`diff.consumer-added\\` / \\`diff.consumer-removed\\`\n over the cross-service joins — another service's requirement naming this\n service's operation or message. The two \\`-consumed\\` codes are the errors:\n they are the removals something in the fleet still names, with the victims\n in \\`details[]\\` — the same consumers \\`loam archive\\` refuses a removal on\n (edges of the \\`architecture/\\` project, both spec files, use-case hops; a\n line naming its own service's operation of the same id is no victim). The two contract \\`-modified\\` codes are warnings whoever\n is joined: the operation or message changed — its own node or anything its\n \\`$ref\\`s reach — and \\`details[]\\` names who to check it against, but loam\n does not grade whether the change breaks them. A landscape edge into the\n provider drawn with no \\`metadata { op }\\` is listed as a consumer nobody\n could check, never dropped. Exit 0 = diff computed, nothing breaking,\n everything readable; exit 1 = a refusal, any error finding\n (\\`breaking: true\\` in \\`--json\\`), or a subject whose artifact could not be\n read on either side — those axes are SUSPENDED and reported (\\`unreadable\\`\n in the payload and the summary), never graded as \"nothing changed\" or\n \"everything added\". An unreadable openapi.yaml or asyncapi.yaml whose bytes\n the base holds identically is skipped instead: the branch did not touch it.\n Refusals reuse existing codes: \\`repository-unavailable\\`\n when the docs repo has no git history to ask, and \\`unknown-target\\` when\n \\`--base\\` resolves to no commit there. For the byte-level breaking-change\n catalogue, run oasdiff (OpenAPI) or \\`asyncapi diff\\` (AsyncAPI) on the two\n states of one contract instead — loam deliberately does not reimplement it.\n`;\n"]}
@@ -11,11 +11,12 @@
11
11
  * the meaning, the conditional severity and the fix. See ../../command-map.ts's
12
12
  * header for why the gloss left.
13
13
  *
14
- * Same assembly contract as every section: ../../../agents-md.ts concatenates
15
- * with NO join separator, so this string starts at the first character of its
16
- * opening line and ends with the newline that closes its last one.
14
+ * Same assembly contract as every part of the `loam-codes` page:
15
+ * ../../../workflows/reference/codes.ts concatenates with NO join separator,
16
+ * so this string starts at the first character of its opening line and ends
17
+ * with the newline that closes its last one.
17
18
  */
18
- export const GATE_COMMAND = `- \`loam gate [--service <id>]\` is the DEPLOY-pipeline question — can this
19
+ export const GATE_COMMAND = `- \`loam gate [--service <id>] [--since <ref>]\` is the DEPLOY-pipeline question — can this
19
20
  service deploy, as far as recorded evidence can say — asked as a pure query:
20
21
  it executes nothing, writes nothing, takes no lock, and deliberately changes
21
22
  nothing about what gates \`loam archive\` (verify still never gates the
@@ -40,6 +41,12 @@ export const GATE_COMMAND = `- \`loam gate [--service <id>]\` is the DEPLOY-pipe
40
41
  \`verification\` covers every ACTIVE feature carrying a specs/ delta for the
41
42
  service, through the verification record's own verdicts:
42
43
  \`gate.feature-unverified\` and the reused \`verify.scenario-attested\`.
44
+ Without \`--since\` that is in-flight features only — a feature leaves the
45
+ check the moment it is archived. \`--since <ref>\` (a docs-repo git ref: the
46
+ docs commit the last deploy recorded) also grades every feature archived
47
+ after it, under the same codes, its \`features[]\` row carrying
48
+ \`archived: true\`; it reads git as \`loam diff --base <ref>\` does and refuses
49
+ the same way when git cannot answer.
43
50
  \`interrupted\` reuses \`docs.commit-interrupted\`: a \`.loam-commit\` journal
44
51
  means the docs may be half-written, so nothing graded from them describes one
45
52
  state. One unreadable sibling artifact degrades that ONE subject as
@@ -47,7 +54,8 @@ export const GATE_COMMAND = `- \`loam gate [--service <id>]\` is the DEPLOY-pipe
47
54
  Exit semantics are validate's: any error fails (exit 1, \`verdict: "fail"\`),
48
55
  warnings are advisory (exit 0, \`verdict: "pass"\`), and \`--strict\` is the CI
49
56
  lever that fails warnings too — the report and the \`--json\` payload do not
50
- change under it. The payload carries \`landscape\`
57
+ change under it. The payload carries \`since\` (\`{ ref, commit }\` or
58
+ null), \`landscape\`
51
59
  (\`read\`/\`absent\`/\`invalid\`), \`partners[]\` (each with its maturity
52
60
  rung, role and joins), \`features[]\` (the per-record tallies) and
53
61
  \`checks[]\` (the findings, by check), so a pipeline that wants a stricter
@@ -1 +1 @@
1
- {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../../../../../src/core/agent/agents-md/map/lenses/gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsC3B,CAAC","sourcesContent":["/**\n * The `loam gate` entry of the command map — the deploy-pipeline lens of this\n * package, split out for `./context.ts`'s exact reason: command-map.ts sat\n * against the file-line limit, so the deploy gate's documentation lives down\n * here and is concatenated after the map. Its four `gate.*` codes are what\n * test/codes-drift.test.ts finds here.\n *\n * The codes are grouped by CHECK and not glossed: which check raises what is\n * the payload's own `checks[]` shape and is the unique thing this section\n * says, while `loam explain gate.partners-unknown` (and every sibling) carries\n * the meaning, the conditional severity and the fix. See ../../command-map.ts's\n * header for why the gloss left.\n *\n * Same assembly contract as every section: ../../../agents-md.ts concatenates\n * with NO join separator, so this string starts at the first character of its\n * opening line and ends with the newline that closes its last one.\n */\nexport const GATE_COMMAND = `- \\`loam gate [--service <id>]\\` is the DEPLOY-pipeline question — can this\n service deploy, as far as recorded evidence can say — asked as a pure query:\n it executes nothing, writes nothing, takes no lock, and deliberately changes\n nothing about what gates \\`loam archive\\` (verify still never gates the\n merge; gate's verdict is advice to a pipeline loam does not own). In a bound\n service repo the invocation is literally \\`loam gate --json\\`; \\`--service\\`\n names any other adopted service, and one nobody adopted refuses\n \\`unknown-service\\` — recorded evidence cannot answer for it. Four checks, and\n the code tells you which one spoke. \\`partners\\` derives the direct joins from\n the LIVING landscape: \\`gate.service-undocumented\\`,\n \\`gate.partner-undocumented\\` and \\`gate.partners-unknown\\` — the last one\n severity-splits on why the map could not answer, so read\n \\`loam explain gate.partners-unknown\\` before treating it as advisory. A\n partner tagged \\`#external\\` is exempt from the middle one on purpose — its\n docs are somebody else's — but an ADOPTED service is never exempt, whatever\n zone the map draws it inside.\n \\`freshness\\` re-reports two staleness findings \\`validate\\` already owns,\n \\`content.stale\\` and \\`sources.stale\\`, over the gated service and its\n documented partners, plus the one integrity error that makes freshness\n unjudgeable, \\`frontmatter.malformed\\`; it decodes the spec bytes itself, so a\n UTF-16 spec.md is a \\`service.unreadable\\` error naming the file, never a quiet\n pass. The rest of provenance stays \\`validate\\`'s report to make.\n \\`verification\\` covers every ACTIVE feature carrying a specs/ delta for the\n service, through the verification record's own verdicts:\n \\`gate.feature-unverified\\` and the reused \\`verify.scenario-attested\\`.\n \\`interrupted\\` reuses \\`docs.commit-interrupted\\`: a \\`.loam-commit\\` journal\n means the docs may be half-written, so nothing graded from them describes one\n state. One unreadable sibling artifact degrades that ONE subject as\n \\`service.unreadable\\` / \\`feature.unreadable\\` instead of killing the report.\n Exit semantics are validate's: any error fails (exit 1, \\`verdict: \"fail\"\\`),\n warnings are advisory (exit 0, \\`verdict: \"pass\"\\`), and \\`--strict\\` is the CI\n lever that fails warnings too — the report and the \\`--json\\` payload do not\n change under it. The payload carries \\`landscape\\`\n (\\`read\\`/\\`absent\\`/\\`invalid\\`), \\`partners[]\\` (each with its maturity\n rung, role and joins), \\`features[]\\` (the per-record tallies) and\n \\`checks[]\\` (the findings, by check), so a pipeline that wants a stricter\n bar — \\`vouched\\` partners, no attested scenarios — branches on the data\n rather than waiting for a flag.\n`;\n"]}
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../../../../../src/core/agent/agents-md/map/lenses/gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6C3B,CAAC","sourcesContent":["/**\n * The `loam gate` entry of the command map — the deploy-pipeline lens of this\n * package, split out for `./context.ts`'s exact reason: command-map.ts sat\n * against the file-line limit, so the deploy gate's documentation lives down\n * here and is concatenated after the map. Its four `gate.*` codes are what\n * test/codes-drift.test.ts finds here.\n *\n * The codes are grouped by CHECK and not glossed: which check raises what is\n * the payload's own `checks[]` shape and is the unique thing this section\n * says, while `loam explain gate.partners-unknown` (and every sibling) carries\n * the meaning, the conditional severity and the fix. See ../../command-map.ts's\n * header for why the gloss left.\n *\n * Same assembly contract as every part of the `loam-codes` page:\n * ../../../workflows/reference/codes.ts concatenates with NO join separator,\n * so this string starts at the first character of its opening line and ends\n * with the newline that closes its last one.\n */\nexport const GATE_COMMAND = `- \\`loam gate [--service <id>] [--since <ref>]\\` is the DEPLOY-pipeline question — can this\n service deploy, as far as recorded evidence can say — asked as a pure query:\n it executes nothing, writes nothing, takes no lock, and deliberately changes\n nothing about what gates \\`loam archive\\` (verify still never gates the\n merge; gate's verdict is advice to a pipeline loam does not own). In a bound\n service repo the invocation is literally \\`loam gate --json\\`; \\`--service\\`\n names any other adopted service, and one nobody adopted refuses\n \\`unknown-service\\` — recorded evidence cannot answer for it. Four checks, and\n the code tells you which one spoke. \\`partners\\` derives the direct joins from\n the LIVING landscape: \\`gate.service-undocumented\\`,\n \\`gate.partner-undocumented\\` and \\`gate.partners-unknown\\` — the last one\n severity-splits on why the map could not answer, so read\n \\`loam explain gate.partners-unknown\\` before treating it as advisory. A\n partner tagged \\`#external\\` is exempt from the middle one on purpose — its\n docs are somebody else's — but an ADOPTED service is never exempt, whatever\n zone the map draws it inside.\n \\`freshness\\` re-reports two staleness findings \\`validate\\` already owns,\n \\`content.stale\\` and \\`sources.stale\\`, over the gated service and its\n documented partners, plus the one integrity error that makes freshness\n unjudgeable, \\`frontmatter.malformed\\`; it decodes the spec bytes itself, so a\n UTF-16 spec.md is a \\`service.unreadable\\` error naming the file, never a quiet\n pass. The rest of provenance stays \\`validate\\`'s report to make.\n \\`verification\\` covers every ACTIVE feature carrying a specs/ delta for the\n service, through the verification record's own verdicts:\n \\`gate.feature-unverified\\` and the reused \\`verify.scenario-attested\\`.\n Without \\`--since\\` that is in-flight features only — a feature leaves the\n check the moment it is archived. \\`--since <ref>\\` (a docs-repo git ref: the\n docs commit the last deploy recorded) also grades every feature archived\n after it, under the same codes, its \\`features[]\\` row carrying\n \\`archived: true\\`; it reads git as \\`loam diff --base <ref>\\` does and refuses\n the same way when git cannot answer.\n \\`interrupted\\` reuses \\`docs.commit-interrupted\\`: a \\`.loam-commit\\` journal\n means the docs may be half-written, so nothing graded from them describes one\n state. One unreadable sibling artifact degrades that ONE subject as\n \\`service.unreadable\\` / \\`feature.unreadable\\` instead of killing the report.\n Exit semantics are validate's: any error fails (exit 1, \\`verdict: \"fail\"\\`),\n warnings are advisory (exit 0, \\`verdict: \"pass\"\\`), and \\`--strict\\` is the CI\n lever that fails warnings too — the report and the \\`--json\\` payload do not\n change under it. The payload carries \\`since\\` (\\`{ ref, commit }\\` or\n null), \\`landscape\\`\n (\\`read\\`/\\`absent\\`/\\`invalid\\`), \\`partners[]\\` (each with its maturity\n rung, role and joins), \\`features[]\\` (the per-record tallies) and\n \\`checks[]\\` (the findings, by check), so a pipeline that wants a stricter\n bar — \\`vouched\\` partners, no attested scenarios — branches on the data\n rather than waiting for a flag.\n`;\n"]}
@@ -5,9 +5,10 @@
5
5
  * concatenated after the map. It introduces no codes of its own: every tool
6
6
  * result is an existing envelope, which is the point of the section.
7
7
  *
8
- * Same assembly contract as every section: ../../agents-md.ts concatenates
9
- * with NO join separator, so this string starts at the first character of its
10
- * opening line and ends with the newline that closes its last one.
8
+ * Same assembly contract as every part of the `loam-codes` page:
9
+ * ../../workflows/reference/codes.ts concatenates with NO join separator, so this
10
+ * string starts at the first character of its opening line and ends with
11
+ * the newline that closes its last one.
11
12
  *
12
13
  * The command names in the roster below are HAND-LISTED: importing
13
14
  * core/mcp/tools.ts from here would close a package cycle (tools.ts reads
@@ -15,9 +16,9 @@
15
16
  * sources). test/mcp-protocol.test.ts pins this string against MCP_TOOLS
16
17
  * instead: a tool added to the table without its name here fails there.
17
18
  */
18
- export const MCP_COMMAND = `- \`loam mcp\` serves the fourteen base read commands — validate, status, list, show,
19
- delta, diff, explore, dependencies, doctor, context, gate, steps, explain,
20
- instructions — as MCP tools over stdio (JSON-RPC 2.0), for hosts that reach
19
+ export const MCP_COMMAND = `- \`loam mcp\` serves the sixteen base read commands — validate, status, list, show,
20
+ delta, tasks, diff, explore, dependencies, doctor, context, adopt, gate, steps,
21
+ explain, instructions — as MCP tools over stdio (JSON-RPC 2.0), for hosts that reach
21
22
  tools through MCP rather than a shell:
22
23
  configure the host to launch \`loam mcp\` in the repository the tools should
23
24
  answer for, or run \`loam init --mcp\` there and let it write the \`.mcp.json\`
@@ -33,7 +34,9 @@ export const MCP_COMMAND = `- \`loam mcp\` serves the fourteen base read command
33
34
  \`instructions\`, are served so an MCP-only host can reach them BEFORE this
34
35
  repository is wired: the first line of every generated skill is
35
36
  \`loam instructions <workflow>\`, and a host that could not run it could not
36
- fetch the protocol its own skill points at. An explicit \`mcp --author\` adds
37
+ fetch the protocol its own skill points at. \`adopt\` is served because it
38
+ writes nothing: the loam-adopt protocol opens by running it, and its brief is
39
+ what the agent then writes from. An explicit \`mcp --author\` adds
37
40
  \`new\`, \`rebase\`, \`gherkin\` and an archive dry-run. It never exposes
38
41
  \`vouch\`, evidence recording or a committing archive; those stay in the CLI,
39
42
  where the permission flow is yours.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../../../src/core/agent/agents-md/map/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsB1B,CAAC","sourcesContent":["/**\n * The `loam mcp` entry of the command map — its own section module for\n * `./lenses/gate.ts`'s exact reason: command-map.ts sat against the file-line limit,\n * so the MCP facade's documentation lives one package down and is\n * concatenated after the map. It introduces no codes of its own: every tool\n * result is an existing envelope, which is the point of the section.\n *\n * Same assembly contract as every section: ../../agents-md.ts concatenates\n * with NO join separator, so this string starts at the first character of its\n * opening line and ends with the newline that closes its last one.\n *\n * The command names in the roster below are HAND-LISTED: importing\n * core/mcp/tools.ts from here would close a package cycle (tools.ts reads\n * core/explain/terms.ts, which reads this package's siblings for its pin\n * sources). test/mcp-protocol.test.ts pins this string against MCP_TOOLS\n * instead: a tool added to the table without its name here fails there.\n */\nexport const MCP_COMMAND = `- \\`loam mcp\\` serves the fourteen base read commands — validate, status, list, show,\n delta, diff, explore, dependencies, doctor, context, gate, steps, explain,\n instructions — as MCP tools over stdio (JSON-RPC 2.0), for hosts that reach\n tools through MCP rather than a shell:\n configure the host to launch \\`loam mcp\\` in the repository the tools should\n answer for, or run \\`loam init --mcp\\` there and let it write the \\`.mcp.json\\`\n every host reads. Like every other file \\`init\\` lays down, an existing one is\n reported and never merged into. Every tool result carries the same \\`--json\\` envelope the CLI\n prints, verbatim, so everything above about codes and envelopes applies\n unchanged — branch on \\`ok\\` and \\`error.code\\` exactly as you would reading\n the command's stdout. The orientation and instruction pages are MCP resources,\n and every tool declares the envelope output schema. Every base tool is advertised with\n \\`annotations.readOnlyHint: true\\` — the machine signal a host needs to\n approve a call without prompting, and the reason the table stays read-only\n by construction. The two that read no config, \\`explain\\` and\n \\`instructions\\`, are served so an MCP-only host can reach them BEFORE this\n repository is wired: the first line of every generated skill is\n \\`loam instructions <workflow>\\`, and a host that could not run it could not\n fetch the protocol its own skill points at. An explicit \\`mcp --author\\` adds\n \\`new\\`, \\`rebase\\`, \\`gherkin\\` and an archive dry-run. It never exposes\n \\`vouch\\`, evidence recording or a committing archive; those stay in the CLI,\n where the permission flow is yours.\n`;\n"]}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../../../src/core/agent/agents-md/map/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB1B,CAAC","sourcesContent":["/**\n * The `loam mcp` entry of the command map — its own section module for\n * `./lenses/gate.ts`'s exact reason: command-map.ts sat against the file-line limit,\n * so the MCP facade's documentation lives one package down and is\n * concatenated after the map. It introduces no codes of its own: every tool\n * result is an existing envelope, which is the point of the section.\n *\n * Same assembly contract as every part of the `loam-codes` page:\n * ../../workflows/reference/codes.ts concatenates with NO join separator, so this\n * string starts at the first character of its opening line and ends with\n * the newline that closes its last one.\n *\n * The command names in the roster below are HAND-LISTED: importing\n * core/mcp/tools.ts from here would close a package cycle (tools.ts reads\n * core/explain/terms.ts, which reads this package's siblings for its pin\n * sources). test/mcp-protocol.test.ts pins this string against MCP_TOOLS\n * instead: a tool added to the table without its name here fails there.\n */\nexport const MCP_COMMAND = `- \\`loam mcp\\` serves the sixteen base read commands — validate, status, list, show,\n delta, tasks, diff, explore, dependencies, doctor, context, adopt, gate, steps,\n explain, instructions — as MCP tools over stdio (JSON-RPC 2.0), for hosts that reach\n tools through MCP rather than a shell:\n configure the host to launch \\`loam mcp\\` in the repository the tools should\n answer for, or run \\`loam init --mcp\\` there and let it write the \\`.mcp.json\\`\n every host reads. Like every other file \\`init\\` lays down, an existing one is\n reported and never merged into. Every tool result carries the same \\`--json\\` envelope the CLI\n prints, verbatim, so everything above about codes and envelopes applies\n unchanged — branch on \\`ok\\` and \\`error.code\\` exactly as you would reading\n the command's stdout. The orientation and instruction pages are MCP resources,\n and every tool declares the envelope output schema. Every base tool is advertised with\n \\`annotations.readOnlyHint: true\\` — the machine signal a host needs to\n approve a call without prompting, and the reason the table stays read-only\n by construction. The two that read no config, \\`explain\\` and\n \\`instructions\\`, are served so an MCP-only host can reach them BEFORE this\n repository is wired: the first line of every generated skill is\n \\`loam instructions <workflow>\\`, and a host that could not run it could not\n fetch the protocol its own skill points at. \\`adopt\\` is served because it\n writes nothing: the loam-adopt protocol opens by running it, and its brief is\n what the agent then writes from. An explicit \\`mcp --author\\` adds\n \\`new\\`, \\`rebase\\`, \\`gherkin\\` and an archive dry-run. It never exposes\n \\`vouch\\`, evidence recording or a committing archive; those stay in the CLI,\n where the permission flow is yours.\n`;\n"]}
@@ -28,16 +28,29 @@ export const STATUS_COMMAND = `- \`loam status [<FEAT>]\` is the orientation sur
28
28
  names what comes first), \`draft\` (on disk, and the shared checks report an error
29
29
  against it — what exists is wrong), \`ready\` (on disk and clean, but something
30
30
  outside the documents — code, a test run, a recording — still has to answer it)
31
- or \`done\`. The payload's reason to exist is \`next[]\`: ordered, first entry
31
+ or \`done\`. Those are values to branch on, not progress words: \`ready\` says
32
+ nothing about code being built or claims being verified, and an archived feature
33
+ is \`done\` whatever its record says — read \`verification\` for that. The human
34
+ view prints the stage in words with the claims counted, and the payload carries
35
+ \`feature.title\` and \`checklist.claims\` (what the checklist asks now; null once
36
+ archived). The payload's reason to exist is \`next[]\`: ordered, first entry
32
37
  first, each carrying a code and the literal command to run — so a step needs no
33
38
  gloss here, and \`loam explain <code>\` has the long form of any of them.
34
39
  \`next.recover-commit\` outranks every other step in both forms below and is
35
40
  never elided: a \`.loam-commit\` journal says a writer was killed mid-commit, so
36
41
  some of the files everything else is derived from may be half-written.
37
- Fleet-wide the rest are \`next.adopt-bound\`, \`next.adopt\`,
38
- \`next.complete-service\`, \`next.feature\`, \`next.archive\`, \`next.fleet-clean\`,
39
- \`next.elided\` (the fleet list hit its cap and says how many steps of the same
40
- kinds it left out — it is ordered most-unblocking first, so work down it and
42
+ Fleet-wide the rest are, in order, \`next.adopt-bound\` (or, when a feature in
43
+ flight introduces the service this repository is bound to, that feature's
44
+ \`next.feature\` instead — there is no code to adopt yet), every feature in
45
+ flight — \`next.feature\`, \`next.archive\` — and then each service's
46
+ adoption rungs: \`next.adopt\`, \`next.complete-service\`, \`next.revouch\` (a
47
+ vouched document's words moved under its stamp — \`content.stale\`; its
48
+ \`execution\` is a human review, never yours to run: prepare
49
+ \`loam vouch --pack --service <id>\` and hand the vouch to a person), every one
50
+ of them also listed uncapped in \`serviceSteps[]\` grouped by code; then
51
+ \`next.fleet-clean\`,
52
+ \`next.elided\` (the fleet list hit its cap and says how many steps of which
53
+ codes it left out — it is ordered most-unblocking first, so work down it and
41
54
  re-run) and \`next.fleet-gate\`, always last while anything is outstanding:
42
55
  \`loam validate --all\` is what CI runs, and the fleet form grades nothing
43
56
  itself. A docs repo with no services and no features instead gets the
@@ -50,13 +63,16 @@ export const STATUS_COMMAND = `- \`loam status [<FEAT>]\` is the orientation sur
50
63
  \`next.attest-service\` (this repo IS one of the services that owes an answer,
51
64
  so the step is bound to this commit), \`next.verify-attested\` — see
52
65
  "The done-check" for what attested costs — \`next.archive\`, and
53
- \`next.archived\` for one that shipped.
66
+ \`next.archived\` for one that is archived (archive checks documents, not
67
+ code: the step says whether it was ever verified).
54
68
  It grades nothing of its own: the verdict is the one \`loam validate --feature\`
55
69
  and \`loam archive\` compute — status takes the UNION of what both of them refuse,
56
70
  so it may be more pessimistic than either and can never be greener than both.
57
71
  \`verification\` carries \`verdict\` (\`verified\` | \`attested\` | \`unverified\`)
58
72
  and \`attested\` (how many scenario claims rest on an agent's word) beside the
59
- recounted totals, and \`checks.issues[]\` carries \`gates\` and \`details\` on every
60
- finding.
73
+ recounted totals, plus \`answered\` (the confirmed claims per \`answered_by\`:
74
+ \`runner\`, \`external-runner\`, \`agent\` — a \`verified\` record can still rest
75
+ partly on an agent's word about kinds the verdict does not turn on), and
76
+ \`checks.issues[]\` carries \`gates\` and \`details\` on every finding.
61
77
  `;
62
78
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../../src/core/agent/agents-md/map/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC7B,CAAC","sourcesContent":["/**\n * The `loam status` entry of the command map — its own section module for\n * `./mcp.ts`'s exact reason: command-map.ts sat against the file-line limit,\n * so the orientation surface's documentation lives one package down. Unlike\n * its siblings it is not concatenated AFTER the map: status is deliberately\n * the map's FIRST bullet, so ../command-map.ts composes it into COMMAND_MAP\n * between the preamble and the validate entries. The `next.*` fleet and\n * feature codes are what test/codes-drift.test.ts finds here.\n *\n * The `next.*` codes are LISTED, not glossed: `loam explain next.adopt` (and\n * every sibling) answers what a step means and what to run, out of the binary\n * rather than out of this file. See ../command-map.ts's header for why the\n * gloss left. What survives here is what `explain` cannot say — that the list\n * splits fleet-wide from per-feature, and that `next.recover-commit` outranks\n * everything in both forms.\n *\n * Same assembly contract as every section: the composition concatenates with\n * NO join separator, so this string starts at the first character of its\n * opening line and ends with the newline that closes its last one.\n */\nexport const STATUS_COMMAND = `- \\`loam status [<FEAT>]\\` is the orientation surface — the question you have when\n you join a repository halfway, or come back having lost the session, and the one\n every other command assumed you could already answer. It writes nothing and\n stores nothing: there is no state file, every answer is re-derived from the\n files, so a document someone edited in another window is visible on the next run\n with nothing to invalidate. Artifacts come back as \\`missing\\` (owed, nothing in\n the way — write it now), \\`blocked\\` (not written and not writable yet; the entry\n names what comes first), \\`draft\\` (on disk, and the shared checks report an error\n against it — what exists is wrong), \\`ready\\` (on disk and clean, but something\n outside the documents — code, a test run, a recording — still has to answer it)\n or \\`done\\`. The payload's reason to exist is \\`next[]\\`: ordered, first entry\n first, each carrying a code and the literal command to run — so a step needs no\n gloss here, and \\`loam explain <code>\\` has the long form of any of them.\n \\`next.recover-commit\\` outranks every other step in both forms below and is\n never elided: a \\`.loam-commit\\` journal says a writer was killed mid-commit, so\n some of the files everything else is derived from may be half-written.\n Fleet-wide the rest are \\`next.adopt-bound\\`, \\`next.adopt\\`,\n \\`next.complete-service\\`, \\`next.feature\\`, \\`next.archive\\`, \\`next.fleet-clean\\`,\n \\`next.elided\\` (the fleet list hit its cap and says how many steps of the same\n kinds it left out — it is ordered most-unblocking first, so work down it and\n re-run) and \\`next.fleet-gate\\`, always last while anything is outstanding:\n \\`loam validate --all\\` is what CI runs, and the fleet form grades nothing\n itself. A docs repo with no services and no features instead gets the\n first-hour ladder — \\`next.author-landscape\\`, \\`next.bind-service\\`,\n \\`next.adopt-first\\` — which the \\`/loam-adopt\\` body walks.\n On one feature: \\`next.author-intent\\`, \\`next.touch-service\\`,\n \\`next.author-spec\\`, \\`next.author-openapi\\`, \\`next.author-scenarios\\`,\n \\`next.rebase\\`, \\`next.archive-first\\`, \\`next.fix-coherence\\`,\n \\`next.generate-tests\\`, \\`next.verify\\`, \\`next.verify-unconfirmed\\`,\n \\`next.attest-service\\` (this repo IS one of the services that owes an answer,\n so the step is bound to this commit), \\`next.verify-attested\\` — see\n \"The done-check\" for what attested costs — \\`next.archive\\`, and\n \\`next.archived\\` for one that shipped.\n It grades nothing of its own: the verdict is the one \\`loam validate --feature\\`\n and \\`loam archive\\` compute — status takes the UNION of what both of them refuse,\n so it may be more pessimistic than either and can never be greener than both.\n \\`verification\\` carries \\`verdict\\` (\\`verified\\` | \\`attested\\` | \\`unverified\\`)\n and \\`attested\\` (how many scenario claims rest on an agent's word) beside the\n recounted totals, and \\`checks.issues[]\\` carries \\`gates\\` and \\`details\\` on every\n finding.\n`;\n"]}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../../src/core/agent/agents-md/map/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwD7B,CAAC","sourcesContent":["/**\n * The `loam status` entry of the command map — its own section module for\n * `./mcp.ts`'s exact reason: command-map.ts sat against the file-line limit,\n * so the orientation surface's documentation lives one package down. Unlike\n * its siblings it is not concatenated AFTER the map: status is deliberately\n * the map's FIRST bullet, so ../command-map.ts composes it into COMMAND_MAP\n * between the preamble and the validate entries. The `next.*` fleet and\n * feature codes are what test/codes-drift.test.ts finds here.\n *\n * The `next.*` codes are LISTED, not glossed: `loam explain next.adopt` (and\n * every sibling) answers what a step means and what to run, out of the binary\n * rather than out of this file. See ../command-map.ts's header for why the\n * gloss left. What survives here is what `explain` cannot say — that the list\n * splits fleet-wide from per-feature, and that `next.recover-commit` outranks\n * everything in both forms.\n *\n * Same assembly contract as every section: the composition concatenates with\n * NO join separator, so this string starts at the first character of its\n * opening line and ends with the newline that closes its last one.\n */\nexport const STATUS_COMMAND = `- \\`loam status [<FEAT>]\\` is the orientation surface — the question you have when\n you join a repository halfway, or come back having lost the session, and the one\n every other command assumed you could already answer. It writes nothing and\n stores nothing: there is no state file, every answer is re-derived from the\n files, so a document someone edited in another window is visible on the next run\n with nothing to invalidate. Artifacts come back as \\`missing\\` (owed, nothing in\n the way — write it now), \\`blocked\\` (not written and not writable yet; the entry\n names what comes first), \\`draft\\` (on disk, and the shared checks report an error\n against it — what exists is wrong), \\`ready\\` (on disk and clean, but something\n outside the documents — code, a test run, a recording — still has to answer it)\n or \\`done\\`. Those are values to branch on, not progress words: \\`ready\\` says\n nothing about code being built or claims being verified, and an archived feature\n is \\`done\\` whatever its record says — read \\`verification\\` for that. The human\n view prints the stage in words with the claims counted, and the payload carries\n \\`feature.title\\` and \\`checklist.claims\\` (what the checklist asks now; null once\n archived). The payload's reason to exist is \\`next[]\\`: ordered, first entry\n first, each carrying a code and the literal command to run — so a step needs no\n gloss here, and \\`loam explain <code>\\` has the long form of any of them.\n \\`next.recover-commit\\` outranks every other step in both forms below and is\n never elided: a \\`.loam-commit\\` journal says a writer was killed mid-commit, so\n some of the files everything else is derived from may be half-written.\n Fleet-wide the rest are, in order, \\`next.adopt-bound\\` (or, when a feature in\n flight introduces the service this repository is bound to, that feature's\n \\`next.feature\\` instead — there is no code to adopt yet), every feature in\n flight — \\`next.feature\\`, \\`next.archive\\` — and then each service's\n adoption rungs: \\`next.adopt\\`, \\`next.complete-service\\`, \\`next.revouch\\` (a\n vouched document's words moved under its stamp — \\`content.stale\\`; its\n \\`execution\\` is a human review, never yours to run: prepare\n \\`loam vouch --pack --service <id>\\` and hand the vouch to a person), every one\n of them also listed uncapped in \\`serviceSteps[]\\` grouped by code; then\n \\`next.fleet-clean\\`,\n \\`next.elided\\` (the fleet list hit its cap and says how many steps of which\n codes it left out — it is ordered most-unblocking first, so work down it and\n re-run) and \\`next.fleet-gate\\`, always last while anything is outstanding:\n \\`loam validate --all\\` is what CI runs, and the fleet form grades nothing\n itself. A docs repo with no services and no features instead gets the\n first-hour ladder — \\`next.author-landscape\\`, \\`next.bind-service\\`,\n \\`next.adopt-first\\` — which the \\`/loam-adopt\\` body walks.\n On one feature: \\`next.author-intent\\`, \\`next.touch-service\\`,\n \\`next.author-spec\\`, \\`next.author-openapi\\`, \\`next.author-scenarios\\`,\n \\`next.rebase\\`, \\`next.archive-first\\`, \\`next.fix-coherence\\`,\n \\`next.generate-tests\\`, \\`next.verify\\`, \\`next.verify-unconfirmed\\`,\n \\`next.attest-service\\` (this repo IS one of the services that owes an answer,\n so the step is bound to this commit), \\`next.verify-attested\\` — see\n \"The done-check\" for what attested costs — \\`next.archive\\`, and\n \\`next.archived\\` for one that is archived (archive checks documents, not\n code: the step says whether it was ever verified).\n It grades nothing of its own: the verdict is the one \\`loam validate --feature\\`\n and \\`loam archive\\` compute — status takes the UNION of what both of them refuse,\n so it may be more pessimistic than either and can never be greener than both.\n \\`verification\\` carries \\`verdict\\` (\\`verified\\` | \\`attested\\` | \\`unverified\\`)\n and \\`attested\\` (how many scenario claims rest on an agent's word) beside the\n recounted totals, plus \\`answered\\` (the confirmed claims per \\`answered_by\\`:\n \\`runner\\`, \\`external-runner\\`, \\`agent\\` — a \\`verified\\` record can still rest\n partly on an agent's word about kinds the verdict does not turn on), and\n \\`checks.issues[]\\` carries \\`gates\\` and \\`details\\` on every finding.\n`;\n"]}
@@ -4,9 +4,10 @@
4
4
  * package against the five-file cap, so the tree surface's documentation
5
5
  * lives one package down and is concatenated after the map.
6
6
  *
7
- * Same assembly contract as every section: ../agents-md.ts concatenates with
8
- * NO join separator, so this string starts at the first character of its
9
- * opening line and ends with the newline that closes its last one.
7
+ * Same assembly contract as every part of the `loam-codes` page:
8
+ * ../../workflows/reference/codes.ts concatenates with NO join separator, so this
9
+ * string starts at the first character of its opening line and ends with
10
+ * the newline that closes its last one.
10
11
  */
11
12
  export const SUBSYSTEM_COMMANDS = `- \`loam subsystem <verb>\` manages the grouping tree under \`services/\` — the
12
13
  navigable tree no identity depends on: a service id stays its leaf directory
@@ -15,8 +16,8 @@ export const SUBSYSTEM_COMMANDS = `- \`loam subsystem <verb>\` manages the group
15
16
  [--owner]\` creates a group (an empty one is legal — its \`subsystem.yaml\` is a
16
17
  marker, never a member list); \`move <name>... --into <sub|.>\` relocates
17
18
  services and whole subtrees in ONE journaled transaction over the renames
18
- plus the regenerated views file (\`--into .\` unfiles; the renames and the
19
- regenerated views file are staged in git without committing, where git answers); \`rename <old> <new>\` renames a
19
+ plus BOTH regenerated views files (\`--into .\` unfiles; the renames and the
20
+ regenerated views files are staged in git without committing, where git answers); \`rename <old> <new>\` renames a
20
21
  group through the same transaction (services are never renamed — the id is
21
22
  the identity); \`rm <name>\` removes an EMPTY group; \`list\` shows the tree
22
23
  with member counts and the unfiled count (unfiled is permanent and normal —
@@ -24,9 +25,80 @@ export const SUBSYSTEM_COMMANDS = `- \`loam subsystem <verb>\` manages the group
24
25
  additive keys \`services[].subsystem\`, \`subsystems[]\` and
25
26
  \`unfiledServices\`); \`history <name>\` asks git how a service or subsystem
26
27
  moved and answers nothing — exit 0, no finding — when git will not say;
27
- \`sync\` regenerates \`architecture/subsystems.likec4\`, the one repair for
28
- \`subsystem.views-stale\`; a landscape view claiming a generated id is
29
- \`subsystem.view-id-collision\`. \`loam adopt --subsystem <name>\` briefs a new
28
+ \`sync\` regenerates BOTH generated views files —
29
+ \`architecture/subsystems.likec4\` (one view per subsystem) and
30
+ \`architecture/services.likec4\` (one overview view per service the fleet map
31
+ draws) — the one repair for \`subsystem.views-stale\`, which grades each file
32
+ separately and names the one that drifted. It also maintains the RENDERER's
33
+ wiring for the service models. Which wiring a model needs is decided by the file's own
34
+ grammar, never by a config key: a model that declares its own
35
+ \`specification { element … }\` block STANDS ALONE — it cannot share a project
36
+ with the fleet map, since every kind it declares would be a duplicate there —
37
+ and a model with no such block EXTENDS the map with
38
+ \`extend <fully-qualified id> { … }\` and parses only INSIDE the root project.
39
+ So \`sync\` writes one create-only \`services/<…>/<id>/likec4.config.json\` per
40
+ STANDALONE model (never rewritten; the team may edit it; commit
41
+ the new files before a \`move\`, which refuses over untracked paths), DELETES one
42
+ sitting beside an EXTENDING model (that nested project claims the model out of
43
+ the root project, so \`likec4 validate .\` refuses without \`--project\` and,
44
+ wherever that project claims the model, \`export json --project fleet\` loses
45
+ the service's containers; \`--json\` lists what it removed as \`projects.removed\`), and rewrites
46
+ the root \`likec4.config.json\`'s \`exclude\` to hold \`services/<tree>/**\` for
47
+ exactly those models, keeping every entry that is not about \`services/\` in the
48
+ order the team wrote it. It rewrites that list when at least one extending model
49
+ exists, or when a standalone model's directory is not covered — an older repo
50
+ whose models all stand alone behind \`services/**\` is never touched. \`--json\`
51
+ carries the result as \`projects.exclude\`, and the text view prints one line when
52
+ it rewrote. Between them these repair four warnings:
53
+ \`service.likec4-config-missing\` (a standalone model with no project file),
54
+ \`service.likec4-config-stray\` (a project file beside an extending model),
55
+ \`service.model-excluded\` (an extending model the root \`exclude\` hides from the
56
+ renderer) and \`service.model-unexcluded\` (a standalone model it does not hide,
57
+ which blanks the whole root project). A flat fleet with no subsystems still owes
58
+ this run: the verb is the tree's, the files are the renderer's. A fleet whose
59
+ models all extend the map ends with ONE project and one picker entry, and
60
+ \`likec4 validate\` at the docs root needs no flag; each standalone model adds a
61
+ project, and with more than one \`likec4 validate\` needs \`--project <name>\`
62
+ (\`build\` and \`export\` take every project). A view id claimed twice inside one
63
+ project — the landscape and an extending model both minting it, or either
64
+ claiming a generated one — is
65
+ \`subsystem.view-id-collision\` — ids beginning \`subsystem_\` or \`service_\` are
66
+ loam's to mint. Each generated view is titled by its PATH —
67
+ every marked ancestor's label and its own, which the renderer reads as
68
+ folders — where a label is the marker's \`title\` or the directory name; the
69
+ marker's \`description\` rides along. A per-service view is titled
70
+ \`<subsystem path> / <service id>\`, so it lands in the same folder as its
71
+ group, and a \`dynamic view\` you write under
72
+ \`services/<…>/<id>/usecases/\` titled \`<subsystem path> / <service id> / <use
73
+ case>\` lands beside it. So editing \`subsystem.yaml\` changes
74
+ what the renderer LABELS the group, a parent's title changes every view
75
+ beneath it, and either makes both files stale until the next \`sync\`. Neither
76
+ generated file is part of the fleet-project load
77
+ (\`c4.fleet-project-invalid\` reads every other \`.likec4\` the root project holds);
78
+ \`subsystem.views-stale\` is the only check that reads them, by content
79
+ comparison against the deterministic re-render, never by reading what a view
80
+ shows. Each per-service view is declared \`of\` its service's element, which is
81
+ what makes every other view — the fleet map, its subsystem view, its peers'
82
+ views — drill into it with no authored link. Each subsystem view
83
+ carries \`global style subsystems\` — written after its title, the one line
84
+ LikeC4 gives a view for borrowing a palette — exactly when the \`architecture/\`
85
+ project declares a global style with that id (\`global { styleGroup subsystems
86
+ { style element.tag = #external { color gray } } }\`, in the landscape or in
87
+ ANY \`.likec4\` under \`architecture/\` the root \`exclude\` does not cover — a
88
+ \`palette.likec4\` beside the map counts); nothing otherwise, and loam never reads
89
+ what the group says. Declaring it is the whole opt-in and makes the file stale
90
+ once, until the next \`sync\`. When the project declares style groups under other
91
+ names only, the file opens with one comment line naming them and saying none is
92
+ \`subsystems\`, and the views carry the renderer's defaults — so declaring a group
93
+ under ANY name restales the file, because that comment is part of the bytes.
94
+ \`architecture/services.likec4\` reads a group named \`services\` the same way.
95
+ \`sync\` refuses to rewrite either file while \`architecture/\` does not parse
96
+ (\`action: "blocked"\`): fix the map first. Both are generated wholesale:
97
+ an authored diagram of the same services belongs in the landscape or in a
98
+ file of your own name, never here, and never as a \`view … of\` a subsystem or
99
+ service element, which would take the drill-down from these views
100
+ (\`loam instructions loam-drawing\` has the views that read). \`--json\` reports the subsystem file as
101
+ \`path\`/\`action\` and the per-service one as \`serviceViews\`. \`loam adopt --subsystem <name>\` briefs a new
30
102
  service's baseline directly into a group, so adoption need not land unfiled.
31
103
  `;
32
104
  //# sourceMappingURL=subsystem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subsystem.js","sourceRoot":"","sources":["../../../../../src/core/agent/agents-md/map/subsystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;CAoBjC,CAAC","sourcesContent":["/**\n * The `loam subsystem` half of the command map — its own section module\n * because command-map.ts sat against the file-line limit and the agents-md\n * package against the five-file cap, so the tree surface's documentation\n * lives one package down and is concatenated after the map.\n *\n * Same assembly contract as every section: ../agents-md.ts concatenates with\n * NO join separator, so this string starts at the first character of its\n * opening line and ends with the newline that closes its last one.\n */\nexport const SUBSYSTEM_COMMANDS = `- \\`loam subsystem <verb>\\` manages the grouping tree under \\`services/\\` — the\n navigable tree no identity depends on: a service id stays its leaf directory\n name, every join key is byte-identical before and after a move, and the tree\n carries no policy. Verbs: \\`new <name> [--under <sub>] [--title] [--description]\n [--owner]\\` creates a group (an empty one is legal — its \\`subsystem.yaml\\` is a\n marker, never a member list); \\`move <name>... --into <sub|.>\\` relocates\n services and whole subtrees in ONE journaled transaction over the renames\n plus the regenerated views file (\\`--into .\\` unfiles; the renames and the\n regenerated views file are staged in git without committing, where git answers); \\`rename <old> <new>\\` renames a\n group through the same transaction (services are never renamed — the id is\n the identity); \\`rm <name>\\` removes an EMPTY group; \\`list\\` shows the tree\n with member counts and the unfiled count (unfiled is permanent and normal —\n a count, never a finding; \\`loam list --json\\` carries the same facts as\n additive keys \\`services[].subsystem\\`, \\`subsystems[]\\` and\n \\`unfiledServices\\`); \\`history <name>\\` asks git how a service or subsystem\n moved and answers nothing — exit 0, no finding — when git will not say;\n \\`sync\\` regenerates \\`architecture/subsystems.likec4\\`, the one repair for\n \\`subsystem.views-stale\\`; a landscape view claiming a generated id is\n \\`subsystem.view-id-collision\\`. \\`loam adopt --subsystem <name>\\` briefs a new\n service's baseline directly into a group, so adoption need not land unfiled.\n`;\n"]}
1
+ {"version":3,"file":"subsystem.js","sourceRoot":"","sources":["../../../../../src/core/agent/agents-md/map/subsystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FjC,CAAC","sourcesContent":["/**\n * The `loam subsystem` half of the command map — its own section module\n * because command-map.ts sat against the file-line limit and the agents-md\n * package against the five-file cap, so the tree surface's documentation\n * lives one package down and is concatenated after the map.\n *\n * Same assembly contract as every part of the `loam-codes` page:\n * ../../workflows/reference/codes.ts concatenates with NO join separator, so this\n * string starts at the first character of its opening line and ends with\n * the newline that closes its last one.\n */\nexport const SUBSYSTEM_COMMANDS = `- \\`loam subsystem <verb>\\` manages the grouping tree under \\`services/\\` — the\n navigable tree no identity depends on: a service id stays its leaf directory\n name, every join key is byte-identical before and after a move, and the tree\n carries no policy. Verbs: \\`new <name> [--under <sub>] [--title] [--description]\n [--owner]\\` creates a group (an empty one is legal — its \\`subsystem.yaml\\` is a\n marker, never a member list); \\`move <name>... --into <sub|.>\\` relocates\n services and whole subtrees in ONE journaled transaction over the renames\n plus BOTH regenerated views files (\\`--into .\\` unfiles; the renames and the\n regenerated views files are staged in git without committing, where git answers); \\`rename <old> <new>\\` renames a\n group through the same transaction (services are never renamed — the id is\n the identity); \\`rm <name>\\` removes an EMPTY group; \\`list\\` shows the tree\n with member counts and the unfiled count (unfiled is permanent and normal —\n a count, never a finding; \\`loam list --json\\` carries the same facts as\n additive keys \\`services[].subsystem\\`, \\`subsystems[]\\` and\n \\`unfiledServices\\`); \\`history <name>\\` asks git how a service or subsystem\n moved and answers nothing — exit 0, no finding — when git will not say;\n \\`sync\\` regenerates BOTH generated views files —\n \\`architecture/subsystems.likec4\\` (one view per subsystem) and\n \\`architecture/services.likec4\\` (one overview view per service the fleet map\n draws) — the one repair for \\`subsystem.views-stale\\`, which grades each file\n separately and names the one that drifted. It also maintains the RENDERER's\n wiring for the service models. Which wiring a model needs is decided by the file's own\n grammar, never by a config key: a model that declares its own\n \\`specification { element … }\\` block STANDS ALONE — it cannot share a project\n with the fleet map, since every kind it declares would be a duplicate there —\n and a model with no such block EXTENDS the map with\n \\`extend <fully-qualified id> { … }\\` and parses only INSIDE the root project.\n So \\`sync\\` writes one create-only \\`services/<…>/<id>/likec4.config.json\\` per\n STANDALONE model (never rewritten; the team may edit it; commit\n the new files before a \\`move\\`, which refuses over untracked paths), DELETES one\n sitting beside an EXTENDING model (that nested project claims the model out of\n the root project, so \\`likec4 validate .\\` refuses without \\`--project\\` and,\n wherever that project claims the model, \\`export json --project fleet\\` loses\n the service's containers; \\`--json\\` lists what it removed as \\`projects.removed\\`), and rewrites\n the root \\`likec4.config.json\\`'s \\`exclude\\` to hold \\`services/<tree>/**\\` for\n exactly those models, keeping every entry that is not about \\`services/\\` in the\n order the team wrote it. It rewrites that list when at least one extending model\n exists, or when a standalone model's directory is not covered — an older repo\n whose models all stand alone behind \\`services/**\\` is never touched. \\`--json\\`\n carries the result as \\`projects.exclude\\`, and the text view prints one line when\n it rewrote. Between them these repair four warnings:\n \\`service.likec4-config-missing\\` (a standalone model with no project file),\n \\`service.likec4-config-stray\\` (a project file beside an extending model),\n \\`service.model-excluded\\` (an extending model the root \\`exclude\\` hides from the\n renderer) and \\`service.model-unexcluded\\` (a standalone model it does not hide,\n which blanks the whole root project). A flat fleet with no subsystems still owes\n this run: the verb is the tree's, the files are the renderer's. A fleet whose\n models all extend the map ends with ONE project and one picker entry, and\n \\`likec4 validate\\` at the docs root needs no flag; each standalone model adds a\n project, and with more than one \\`likec4 validate\\` needs \\`--project <name>\\`\n (\\`build\\` and \\`export\\` take every project). A view id claimed twice inside one\n project — the landscape and an extending model both minting it, or either\n claiming a generated one — is\n \\`subsystem.view-id-collision\\` — ids beginning \\`subsystem_\\` or \\`service_\\` are\n loam's to mint. Each generated view is titled by its PATH —\n every marked ancestor's label and its own, which the renderer reads as\n folders — where a label is the marker's \\`title\\` or the directory name; the\n marker's \\`description\\` rides along. A per-service view is titled\n \\`<subsystem path> / <service id>\\`, so it lands in the same folder as its\n group, and a \\`dynamic view\\` you write under\n \\`services/<…>/<id>/usecases/\\` titled \\`<subsystem path> / <service id> / <use\n case>\\` lands beside it. So editing \\`subsystem.yaml\\` changes\n what the renderer LABELS the group, a parent's title changes every view\n beneath it, and either makes both files stale until the next \\`sync\\`. Neither\n generated file is part of the fleet-project load\n (\\`c4.fleet-project-invalid\\` reads every other \\`.likec4\\` the root project holds);\n \\`subsystem.views-stale\\` is the only check that reads them, by content\n comparison against the deterministic re-render, never by reading what a view\n shows. Each per-service view is declared \\`of\\` its service's element, which is\n what makes every other view — the fleet map, its subsystem view, its peers'\n views — drill into it with no authored link. Each subsystem view\n carries \\`global style subsystems\\` — written after its title, the one line\n LikeC4 gives a view for borrowing a palette — exactly when the \\`architecture/\\`\n project declares a global style with that id (\\`global { styleGroup subsystems\n { style element.tag = #external { color gray } } }\\`, in the landscape or in\n ANY \\`.likec4\\` under \\`architecture/\\` the root \\`exclude\\` does not cover — a\n \\`palette.likec4\\` beside the map counts); nothing otherwise, and loam never reads\n what the group says. Declaring it is the whole opt-in and makes the file stale\n once, until the next \\`sync\\`. When the project declares style groups under other\n names only, the file opens with one comment line naming them and saying none is\n \\`subsystems\\`, and the views carry the renderer's defaults — so declaring a group\n under ANY name restales the file, because that comment is part of the bytes.\n \\`architecture/services.likec4\\` reads a group named \\`services\\` the same way.\n \\`sync\\` refuses to rewrite either file while \\`architecture/\\` does not parse\n (\\`action: \"blocked\"\\`): fix the map first. Both are generated wholesale:\n an authored diagram of the same services belongs in the landscape or in a\n file of your own name, never here, and never as a \\`view … of\\` a subsystem or\n service element, which would take the drill-down from these views\n (\\`loam instructions loam-drawing\\` has the views that read). \\`--json\\` reports the subsystem file as\n \\`path\\`/\\`action\\` and the per-service one as \\`serviceViews\\`. \\`loam adopt --subsystem <name>\\` briefs a new\n service's baseline directly into a group, so adoption need not land unfiled.\n`;\n"]}