@ybotok/loam 0.1.0-beta.3 → 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 (1256) hide show
  1. package/CHANGELOG.md +5992 -82
  2. package/COMPARISON.md +168 -63
  3. package/CONTRIBUTING.md +121 -0
  4. package/MIGRATING-from-OpenSpec.md +238 -55
  5. package/QUICKSTART.md +302 -0
  6. package/README.md +653 -144
  7. package/ROADMAP.md +1035 -0
  8. package/SCHEMA.md +3916 -263
  9. package/SECURITY.md +21 -3
  10. package/WORKFLOW.md +927 -0
  11. package/dist/cli.js +133 -21
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/adopt/adopt.js +204 -0
  14. package/dist/commands/adopt/adopt.js.map +1 -0
  15. package/dist/commands/adopt/render.js +309 -0
  16. package/dist/commands/adopt/render.js.map +1 -0
  17. package/dist/commands/archive/archive.js +74 -0
  18. package/dist/commands/archive/archive.js.map +1 -0
  19. package/dist/commands/archive/closing.js +42 -0
  20. package/dist/commands/archive/closing.js.map +1 -0
  21. package/dist/commands/archive/plan/contracts/asyncapi.js +172 -0
  22. package/dist/commands/archive/plan/contracts/asyncapi.js.map +1 -0
  23. package/dist/commands/archive/plan/contracts/consumers.js +56 -0
  24. package/dist/commands/archive/plan/contracts/consumers.js.map +1 -0
  25. package/dist/commands/archive/plan/contracts/openapi.js +193 -0
  26. package/dist/commands/archive/plan/contracts/openapi.js.map +1 -0
  27. package/dist/commands/archive/plan/contracts/verdict-lines.js +103 -0
  28. package/dist/commands/archive/plan/contracts/verdict-lines.js.map +1 -0
  29. package/dist/commands/archive/plan/document/head.js +151 -0
  30. package/dist/commands/archive/plan/document/head.js.map +1 -0
  31. package/dist/commands/archive/plan/document/links.js +284 -0
  32. package/dist/commands/archive/plan/document/links.js.map +1 -0
  33. package/dist/commands/archive/plan/document/run.js +136 -0
  34. package/dist/commands/archive/plan/document/run.js.map +1 -0
  35. package/dist/commands/archive/plan/gate.js +319 -0
  36. package/dist/commands/archive/plan/gate.js.map +1 -0
  37. package/dist/commands/archive/plan/landscape.js +298 -0
  38. package/dist/commands/archive/plan/landscape.js.map +1 -0
  39. package/dist/commands/archive/plan/model/extending.js +85 -0
  40. package/dist/commands/archive/plan/model/extending.js.map +1 -0
  41. package/dist/commands/archive/plan/refusal.js +106 -0
  42. package/dist/commands/archive/plan/refusal.js.map +1 -0
  43. package/dist/commands/archive/plan/specs.js +318 -0
  44. package/dist/commands/archive/plan/specs.js.map +1 -0
  45. package/dist/commands/archive/plan/state.js +30 -0
  46. package/dist/commands/archive/plan/state.js.map +1 -0
  47. package/dist/commands/archive/run.js +355 -0
  48. package/dist/commands/archive/run.js.map +1 -0
  49. package/dist/commands/archive/shipped.js +49 -0
  50. package/dist/commands/archive/shipped.js.map +1 -0
  51. package/dist/commands/context/context.js +166 -0
  52. package/dist/commands/context/context.js.map +1 -0
  53. package/dist/commands/context/print.js +305 -0
  54. package/dist/commands/context/print.js.map +1 -0
  55. package/dist/commands/delta/delta.js +367 -0
  56. package/dist/commands/delta/delta.js.map +1 -0
  57. package/dist/commands/delta/print.js +221 -0
  58. package/dist/commands/delta/print.js.map +1 -0
  59. package/dist/commands/dependencies.js +6 -8
  60. package/dist/commands/dependencies.js.map +1 -1
  61. package/dist/commands/diff/diff.js +86 -0
  62. package/dist/commands/diff/diff.js.map +1 -0
  63. package/dist/commands/diff/print.js +38 -0
  64. package/dist/commands/diff/print.js.map +1 -0
  65. package/dist/commands/doctor.js +65 -5
  66. package/dist/commands/doctor.js.map +1 -1
  67. package/dist/commands/explain/explain.js +227 -0
  68. package/dist/commands/explain/explain.js.map +1 -0
  69. package/dist/commands/explore.js +39 -28
  70. package/dist/commands/explore.js.map +1 -1
  71. package/dist/commands/gate/gate.js +152 -0
  72. package/dist/commands/gate/gate.js.map +1 -0
  73. package/dist/commands/gate/print.js +66 -0
  74. package/dist/commands/gate/print.js.map +1 -0
  75. package/dist/commands/gherkin/commit.js +105 -0
  76. package/dist/commands/gherkin/commit.js.map +1 -0
  77. package/dist/commands/gherkin/gherkin.js +262 -0
  78. package/dist/commands/gherkin/gherkin.js.map +1 -0
  79. package/dist/commands/gherkin/reconcile.js +146 -0
  80. package/dist/commands/gherkin/reconcile.js.map +1 -0
  81. package/dist/commands/gherkin/render.js +77 -0
  82. package/dist/commands/gherkin/render.js.map +1 -0
  83. package/dist/commands/init/example.js +204 -0
  84. package/dist/commands/init/example.js.map +1 -0
  85. package/dist/commands/init/first-hour.js +72 -0
  86. package/dist/commands/init/first-hour.js.map +1 -0
  87. package/dist/commands/{init.js → init/init.js} +142 -71
  88. package/dist/commands/init/init.js.map +1 -0
  89. package/dist/commands/init/mcp.js +131 -0
  90. package/dist/commands/init/mcp.js.map +1 -0
  91. package/dist/commands/init/options.js +78 -0
  92. package/dist/commands/init/options.js.map +1 -0
  93. package/dist/commands/instructions.js +72 -14
  94. package/dist/commands/instructions.js.map +1 -1
  95. package/dist/commands/list/campaign/campaign.js +63 -0
  96. package/dist/commands/list/campaign/campaign.js.map +1 -0
  97. package/dist/commands/list/campaign/owners.js +65 -0
  98. package/dist/commands/list/campaign/owners.js.map +1 -0
  99. package/dist/commands/list/json.js +155 -0
  100. package/dist/commands/list/json.js.map +1 -0
  101. package/dist/commands/list/list.js +358 -0
  102. package/dist/commands/list/list.js.map +1 -0
  103. package/dist/commands/list/print.js +344 -0
  104. package/dist/commands/list/print.js.map +1 -0
  105. package/dist/commands/list/review.js +120 -0
  106. package/dist/commands/list/review.js.map +1 -0
  107. package/dist/commands/list/suites/suites.js +140 -0
  108. package/dist/commands/list/suites/suites.js.map +1 -0
  109. package/dist/commands/list/views.js +108 -0
  110. package/dist/commands/list/views.js.map +1 -0
  111. package/dist/commands/mcp/dispatch.js +238 -0
  112. package/dist/commands/mcp/dispatch.js.map +1 -0
  113. package/dist/commands/mcp/mcp.js +75 -0
  114. package/dist/commands/mcp/mcp.js.map +1 -0
  115. package/dist/commands/mcp/serve.js +55 -0
  116. package/dist/commands/mcp/serve.js.map +1 -0
  117. package/dist/commands/migrate-openspec/materialize/active.js +175 -0
  118. package/dist/commands/migrate-openspec/materialize/active.js.map +1 -0
  119. package/dist/commands/migrate-openspec/materialize/feature.js +41 -0
  120. package/dist/commands/migrate-openspec/materialize/feature.js.map +1 -0
  121. package/dist/commands/migrate-openspec/materialize/living.js +62 -0
  122. package/dist/commands/migrate-openspec/materialize/living.js.map +1 -0
  123. package/dist/commands/migrate-openspec/materialize/stage.js +143 -0
  124. package/dist/commands/migrate-openspec/materialize/stage.js.map +1 -0
  125. package/dist/commands/migrate-openspec/materialize/target.js +219 -0
  126. package/dist/commands/migrate-openspec/materialize/target.js.map +1 -0
  127. package/dist/commands/migrate-openspec/migrate-openspec.js +142 -0
  128. package/dist/commands/migrate-openspec/migrate-openspec.js.map +1 -0
  129. package/dist/commands/migrate-openspec/openspec/decisions.js +86 -0
  130. package/dist/commands/migrate-openspec/openspec/decisions.js.map +1 -0
  131. package/dist/commands/migrate-openspec/openspec/error.js +18 -0
  132. package/dist/commands/migrate-openspec/openspec/error.js.map +1 -0
  133. package/dist/commands/migrate-openspec/openspec/mapping.js +162 -0
  134. package/dist/commands/migrate-openspec/openspec/mapping.js.map +1 -0
  135. package/dist/commands/migrate-openspec/openspec/paths.js +40 -0
  136. package/dist/commands/migrate-openspec/openspec/paths.js.map +1 -0
  137. package/dist/commands/migrate-openspec/openspec/read.js +49 -0
  138. package/dist/commands/migrate-openspec/openspec/read.js.map +1 -0
  139. package/dist/commands/migrate-openspec/print.js +89 -0
  140. package/dist/commands/migrate-openspec/print.js.map +1 -0
  141. package/dist/commands/new/capability-template.js +118 -0
  142. package/dist/commands/new/capability-template.js.map +1 -0
  143. package/dist/commands/new/commit.js +62 -0
  144. package/dist/commands/new/commit.js.map +1 -0
  145. package/dist/commands/new/modifies.js +206 -0
  146. package/dist/commands/new/modifies.js.map +1 -0
  147. package/dist/commands/new/new.js +328 -0
  148. package/dist/commands/new/new.js.map +1 -0
  149. package/dist/commands/new/templates.js +279 -0
  150. package/dist/commands/new/templates.js.map +1 -0
  151. package/dist/commands/open.js +199 -0
  152. package/dist/commands/open.js.map +1 -0
  153. package/dist/commands/policy/format.js +152 -0
  154. package/dist/commands/policy/format.js.map +1 -0
  155. package/dist/commands/{docs-repo-gate.js → policy/gate.js} +38 -11
  156. package/dist/commands/policy/gate.js.map +1 -0
  157. package/dist/commands/rebase/edit.js +106 -0
  158. package/dist/commands/rebase/edit.js.map +1 -0
  159. package/dist/commands/rebase/living.js +185 -0
  160. package/dist/commands/rebase/living.js.map +1 -0
  161. package/dist/commands/rebase/plan.js +245 -0
  162. package/dist/commands/rebase/plan.js.map +1 -0
  163. package/dist/commands/rebase/rebase.js +300 -0
  164. package/dist/commands/rebase/rebase.js.map +1 -0
  165. package/dist/commands/seed/commit.js +221 -0
  166. package/dist/commands/seed/commit.js.map +1 -0
  167. package/dist/commands/seed/plan.js +278 -0
  168. package/dist/commands/seed/plan.js.map +1 -0
  169. package/dist/commands/seed/seed.js +174 -0
  170. package/dist/commands/seed/seed.js.map +1 -0
  171. package/dist/commands/show/feature.js +182 -0
  172. package/dist/commands/show/feature.js.map +1 -0
  173. package/dist/commands/show/introduced.js +157 -0
  174. package/dist/commands/show/introduced.js.map +1 -0
  175. package/dist/commands/show/marks.js +53 -0
  176. package/dist/commands/show/marks.js.map +1 -0
  177. package/dist/commands/show/service.js +239 -0
  178. package/dist/commands/show/service.js.map +1 -0
  179. package/dist/commands/show/show.js +87 -0
  180. package/dist/commands/show/show.js.map +1 -0
  181. package/dist/commands/status/fleet-next.js +90 -0
  182. package/dist/commands/status/fleet-next.js.map +1 -0
  183. package/dist/commands/status/json.js +47 -0
  184. package/dist/commands/status/json.js.map +1 -0
  185. package/dist/commands/status/print.js +209 -0
  186. package/dist/commands/status/print.js.map +1 -0
  187. package/dist/commands/status/status.js +115 -0
  188. package/dist/commands/status/status.js.map +1 -0
  189. package/dist/commands/steps/steps.js +269 -0
  190. package/dist/commands/steps/steps.js.map +1 -0
  191. package/dist/commands/subsystem/edit.js +192 -0
  192. package/dist/commands/subsystem/edit.js.map +1 -0
  193. package/dist/commands/subsystem/move.js +325 -0
  194. package/dist/commands/subsystem/move.js.map +1 -0
  195. package/dist/commands/subsystem/query.js +113 -0
  196. package/dist/commands/subsystem/query.js.map +1 -0
  197. package/dist/commands/subsystem/subsystem.js +98 -0
  198. package/dist/commands/subsystem/subsystem.js.map +1 -0
  199. package/dist/commands/subsystem/sync.js +318 -0
  200. package/dist/commands/subsystem/sync.js.map +1 -0
  201. package/dist/commands/subsystem/txn/exclude.js +132 -0
  202. package/dist/commands/subsystem/txn/exclude.js.map +1 -0
  203. package/dist/commands/subsystem/txn/links.js +128 -0
  204. package/dist/commands/subsystem/txn/links.js.map +1 -0
  205. package/dist/commands/subsystem/txn/report.js +174 -0
  206. package/dist/commands/subsystem/txn/report.js.map +1 -0
  207. package/dist/commands/subsystem/txn/txn.js +196 -0
  208. package/dist/commands/subsystem/txn/txn.js.map +1 -0
  209. package/dist/commands/subsystem/txn/views.js +249 -0
  210. package/dist/commands/subsystem/txn/views.js.map +1 -0
  211. package/dist/commands/tasks/actions.js +107 -0
  212. package/dist/commands/tasks/actions.js.map +1 -0
  213. package/dist/commands/tasks/render.js +253 -0
  214. package/dist/commands/tasks/render.js.map +1 -0
  215. package/dist/commands/tasks/tasks.js +119 -0
  216. package/dist/commands/tasks/tasks.js.map +1 -0
  217. package/dist/commands/unarchive/manifest.js +176 -0
  218. package/dist/commands/unarchive/manifest.js.map +1 -0
  219. package/dist/commands/unarchive/restore.js +254 -0
  220. package/dist/commands/unarchive/restore.js.map +1 -0
  221. package/dist/commands/unarchive/unarchive.js +59 -0
  222. package/dist/commands/unarchive/unarchive.js.map +1 -0
  223. package/dist/commands/validate/arch-coverage.js +245 -0
  224. package/dist/commands/validate/arch-coverage.js.map +1 -0
  225. package/dist/commands/validate/checks/fleet-shape.js +204 -0
  226. package/dist/commands/validate/checks/fleet-shape.js.map +1 -0
  227. package/dist/commands/validate/checks/health-deps.js +58 -0
  228. package/dist/commands/validate/checks/health-deps.js.map +1 -0
  229. package/dist/commands/validate/checks/introduced.js +102 -0
  230. package/dist/commands/validate/checks/introduced.js.map +1 -0
  231. package/dist/commands/validate/checks/requirements.js +264 -0
  232. package/dist/commands/validate/checks/requirements.js.map +1 -0
  233. package/dist/commands/validate/checks/sources.js +85 -0
  234. package/dist/commands/validate/checks/sources.js.map +1 -0
  235. package/dist/commands/validate/coverage/covers-after.js +105 -0
  236. package/dist/commands/validate/coverage/covers-after.js.map +1 -0
  237. package/dist/commands/validate/feature.js +222 -0
  238. package/dist/commands/validate/feature.js.map +1 -0
  239. package/dist/commands/validate/fleet/census.js +93 -0
  240. package/dist/commands/validate/fleet/census.js.map +1 -0
  241. package/dist/commands/validate/fleet/kind-tags.js +39 -0
  242. package/dist/commands/validate/fleet/kind-tags.js.map +1 -0
  243. package/dist/commands/validate/fleet/landscape.js +371 -0
  244. package/dist/commands/validate/fleet/landscape.js.map +1 -0
  245. package/dist/commands/validate/fleet/load.js +118 -0
  246. package/dist/commands/validate/fleet/load.js.map +1 -0
  247. package/dist/commands/validate/fleet/map/attest.js +98 -0
  248. package/dist/commands/validate/fleet/map/attest.js.map +1 -0
  249. package/dist/commands/validate/fleet/map/bindings.js +107 -0
  250. package/dist/commands/validate/fleet/map/bindings.js.map +1 -0
  251. package/dist/commands/validate/fleet/map/consumers.js +244 -0
  252. package/dist/commands/validate/fleet/map/consumers.js.map +1 -0
  253. package/dist/commands/validate/fleet/map/isolation.js +116 -0
  254. package/dist/commands/validate/fleet/map/isolation.js.map +1 -0
  255. package/dist/commands/validate/fleet/map/usecases.js +54 -0
  256. package/dist/commands/validate/fleet/map/usecases.js.map +1 -0
  257. package/dist/commands/validate/fleet/obligations.js +266 -0
  258. package/dist/commands/validate/fleet/obligations.js.map +1 -0
  259. package/dist/commands/validate/fleet/scorecard/adoption.js +102 -0
  260. package/dist/commands/validate/fleet/scorecard/adoption.js.map +1 -0
  261. package/dist/commands/validate/fleet/scorecard/contracts.js +98 -0
  262. package/dist/commands/validate/fleet/scorecard/contracts.js.map +1 -0
  263. package/dist/commands/validate/fleet/scorecard/print.js +71 -0
  264. package/dist/commands/validate/fleet/scorecard/print.js.map +1 -0
  265. package/dist/commands/validate/fleet/scorecard/scorecard.js +162 -0
  266. package/dist/commands/validate/fleet/scorecard/scorecard.js.map +1 -0
  267. package/dist/commands/validate/fleet/usecases/place.js +13 -0
  268. package/dist/commands/validate/fleet/usecases/place.js.map +1 -0
  269. package/dist/commands/validate/fleet/views/fleet-project.js +217 -0
  270. package/dist/commands/validate/fleet/views/fleet-project.js.map +1 -0
  271. package/dist/commands/validate/fleet/views/ids.js +75 -0
  272. package/dist/commands/validate/fleet/views/ids.js.map +1 -0
  273. package/dist/commands/validate/fleet/views/projects.js +278 -0
  274. package/dist/commands/validate/fleet/views/projects.js.map +1 -0
  275. package/dist/commands/validate/fleet/views/root-documents.js +83 -0
  276. package/dist/commands/validate/fleet/views/root-documents.js.map +1 -0
  277. package/dist/commands/validate/fleet/views/stale.js +52 -0
  278. package/dist/commands/validate/fleet/views/stale.js.map +1 -0
  279. package/dist/commands/validate/links/corpus.js +89 -0
  280. package/dist/commands/validate/links/corpus.js.map +1 -0
  281. package/dist/commands/validate/links/glossary.js +75 -0
  282. package/dist/commands/validate/links/glossary.js.map +1 -0
  283. package/dist/commands/validate/render/repeats.js +63 -0
  284. package/dist/commands/validate/render/repeats.js.map +1 -0
  285. package/dist/commands/validate/render/rollups.js +115 -0
  286. package/dist/commands/validate/render/rollups.js.map +1 -0
  287. package/dist/commands/validate/render/text.js +199 -0
  288. package/dist/commands/validate/render/text.js.map +1 -0
  289. package/dist/commands/validate/report.js +145 -0
  290. package/dist/commands/validate/report.js.map +1 -0
  291. package/dist/commands/validate/scope.js +113 -0
  292. package/dist/commands/validate/scope.js.map +1 -0
  293. package/dist/commands/validate/service/api.js +252 -0
  294. package/dist/commands/validate/service/api.js.map +1 -0
  295. package/dist/commands/validate/service/contracts/generated.js +134 -0
  296. package/dist/commands/validate/service/contracts/generated.js.map +1 -0
  297. package/dist/commands/validate/service/events/events.js +241 -0
  298. package/dist/commands/validate/service/events/events.js.map +1 -0
  299. package/dist/commands/validate/service/events/message-producers.js +77 -0
  300. package/dist/commands/validate/service/events/message-producers.js.map +1 -0
  301. package/dist/commands/validate/service/evidence-pins.js +177 -0
  302. package/dist/commands/validate/service/evidence-pins.js.map +1 -0
  303. package/dist/commands/validate/service/model/diverged.js +226 -0
  304. package/dist/commands/validate/service/model/diverged.js.map +1 -0
  305. package/dist/commands/validate/service/model/grade.js +163 -0
  306. package/dist/commands/validate/service/model/grade.js.map +1 -0
  307. package/dist/commands/validate/service/service.js +310 -0
  308. package/dist/commands/validate/service/service.js.map +1 -0
  309. package/dist/commands/validate/service/specs.js +279 -0
  310. package/dist/commands/validate/service/specs.js.map +1 -0
  311. package/dist/commands/validate/service/spine.js +148 -0
  312. package/dist/commands/validate/service/spine.js.map +1 -0
  313. package/dist/commands/validate/service/usecases/tags.js +113 -0
  314. package/dist/commands/validate/service/usecases/tags.js.map +1 -0
  315. package/dist/commands/validate/service/usecases/usecases.js +209 -0
  316. package/dist/commands/validate/service/usecases/usecases.js.map +1 -0
  317. package/dist/commands/validate/validate.js +363 -0
  318. package/dist/commands/validate/validate.js.map +1 -0
  319. package/dist/commands/verify/cross/diff.js +178 -0
  320. package/dist/commands/verify/cross/diff.js.map +1 -0
  321. package/dist/commands/verify/evidence/contract.js +32 -0
  322. package/dist/commands/verify/evidence/contract.js.map +1 -0
  323. package/dist/commands/verify/evidence/pins.js +52 -0
  324. package/dist/commands/verify/evidence/pins.js.map +1 -0
  325. package/dist/commands/verify/evidence/read.js +81 -0
  326. package/dist/commands/verify/evidence/read.js.map +1 -0
  327. package/dist/commands/verify/frozen.js +263 -0
  328. package/dist/commands/verify/frozen.js.map +1 -0
  329. package/dist/commands/verify/record.js +278 -0
  330. package/dist/commands/verify/record.js.map +1 -0
  331. package/dist/commands/verify/report.js +206 -0
  332. package/dist/commands/verify/report.js.map +1 -0
  333. package/dist/commands/verify/results.js +328 -0
  334. package/dist/commands/verify/results.js.map +1 -0
  335. package/dist/commands/verify/verify.js +220 -0
  336. package/dist/commands/verify/verify.js.map +1 -0
  337. package/dist/commands/vouch/contract.js +11 -0
  338. package/dist/commands/vouch/contract.js.map +1 -0
  339. package/dist/commands/vouch/pack/contract.js +2 -0
  340. package/dist/commands/vouch/pack/contract.js.map +1 -0
  341. package/dist/commands/vouch/pack/pack.js +266 -0
  342. package/dist/commands/vouch/pack/pack.js.map +1 -0
  343. package/dist/commands/vouch/pack/print.js +266 -0
  344. package/dist/commands/vouch/pack/print.js.map +1 -0
  345. package/dist/commands/vouch/pack/sections.js +141 -0
  346. package/dist/commands/vouch/pack/sections.js.map +1 -0
  347. package/dist/commands/vouch/prompt/confirm.js +46 -0
  348. package/dist/commands/vouch/prompt/confirm.js.map +1 -0
  349. package/dist/commands/vouch/report.js +101 -0
  350. package/dist/commands/vouch/report.js.map +1 -0
  351. package/dist/commands/vouch/run.js +230 -0
  352. package/dist/commands/vouch/run.js.map +1 -0
  353. package/dist/commands/vouch/sample/plan.js +111 -0
  354. package/dist/commands/vouch/sample/plan.js.map +1 -0
  355. package/dist/commands/vouch/sample/print.js +109 -0
  356. package/dist/commands/vouch/sample/print.js.map +1 -0
  357. package/dist/commands/vouch/vet/verify.js +155 -0
  358. package/dist/commands/vouch/vet/verify.js.map +1 -0
  359. package/dist/commands/vouch/vouch.js +169 -0
  360. package/dist/commands/vouch/vouch.js.map +1 -0
  361. package/dist/core/agent/agents-md/command-map.js +299 -0
  362. package/dist/core/agent/agents-md/command-map.js.map +1 -0
  363. package/dist/core/agent/agents-md/map/explain.js +46 -0
  364. package/dist/core/agent/agents-md/map/explain.js.map +1 -0
  365. package/dist/core/agent/agents-md/map/lenses/context.js +50 -0
  366. package/dist/core/agent/agents-md/map/lenses/context.js.map +1 -0
  367. package/dist/core/agent/agents-md/map/lenses/diff.js +59 -0
  368. package/dist/core/agent/agents-md/map/lenses/diff.js.map +1 -0
  369. package/dist/core/agent/agents-md/map/lenses/gate.js +65 -0
  370. package/dist/core/agent/agents-md/map/lenses/gate.js.map +1 -0
  371. package/dist/core/agent/agents-md/map/mcp.js +44 -0
  372. package/dist/core/agent/agents-md/map/mcp.js.map +1 -0
  373. package/dist/core/agent/agents-md/map/status.js +78 -0
  374. package/dist/core/agent/agents-md/map/status.js.map +1 -0
  375. package/dist/core/agent/agents-md/map/subsystem.js +104 -0
  376. package/dist/core/agent/agents-md/map/subsystem.js.map +1 -0
  377. package/dist/core/agent/agents-md/map/usecases.js +138 -0
  378. package/dist/core/agent/agents-md/map/usecases.js.map +1 -0
  379. package/dist/core/agent/agents-md/refusals.js +273 -0
  380. package/dist/core/agent/agents-md/refusals.js.map +1 -0
  381. package/dist/core/agent/agents-md.js +203 -0
  382. package/dist/core/agent/agents-md.js.map +1 -0
  383. package/dist/core/{agents-stamp.js → agent/agents-stamp.js} +60 -0
  384. package/dist/core/agent/agents-stamp.js.map +1 -0
  385. package/dist/core/agent/contract.js +2 -0
  386. package/dist/core/agent/contract.js.map +1 -0
  387. package/dist/core/agent/protocol.js +193 -0
  388. package/dist/core/agent/protocol.js.map +1 -0
  389. package/dist/core/agent/scaffold.js +254 -0
  390. package/dist/core/agent/scaffold.js.map +1 -0
  391. package/dist/core/agent/support/report.js +144 -0
  392. package/dist/core/agent/support/report.js.map +1 -0
  393. package/dist/core/agent/tools/dialects.js +151 -0
  394. package/dist/core/agent/tools/dialects.js.map +1 -0
  395. package/dist/core/agent/tools/registry.js +193 -0
  396. package/dist/core/agent/tools/registry.js.map +1 -0
  397. package/dist/core/agent/workflows/adopt.js +280 -0
  398. package/dist/core/agent/workflows/adopt.js.map +1 -0
  399. package/dist/core/agent/workflows/check.js +373 -0
  400. package/dist/core/agent/workflows/check.js.map +1 -0
  401. package/dist/core/agent/workflows/closing.js +323 -0
  402. package/dist/core/agent/workflows/closing.js.map +1 -0
  403. package/dist/core/agent/workflows/feature.js +220 -0
  404. package/dist/core/agent/workflows/feature.js.map +1 -0
  405. package/dist/core/agent/workflows/implement.js +188 -0
  406. package/dist/core/agent/workflows/implement.js.map +1 -0
  407. package/dist/core/agent/workflows/reference/authoring.js +311 -0
  408. package/dist/core/agent/workflows/reference/authoring.js.map +1 -0
  409. package/dist/core/agent/workflows/reference/codes.js +67 -0
  410. package/dist/core/agent/workflows/reference/codes.js.map +1 -0
  411. package/dist/core/agent/workflows/reference/done-check.js +210 -0
  412. package/dist/core/agent/workflows/reference/done-check.js.map +1 -0
  413. package/dist/core/agent/workflows/reference/drawing/drawing.js +253 -0
  414. package/dist/core/agent/workflows/reference/drawing/drawing.js.map +1 -0
  415. package/dist/core/agent/workflows/reference/reference.js +19 -0
  416. package/dist/core/agent/workflows/reference/reference.js.map +1 -0
  417. package/dist/core/agent/workflows/reference/spine.js +338 -0
  418. package/dist/core/agent/workflows/reference/spine.js.map +1 -0
  419. package/dist/core/asyncapi/baseline/plan.js +43 -0
  420. package/dist/core/asyncapi/baseline/plan.js.map +1 -0
  421. package/dist/core/asyncapi/baseline/surfaces.js +54 -0
  422. package/dist/core/asyncapi/baseline/surfaces.js.map +1 -0
  423. package/dist/core/asyncapi/depth.js +164 -0
  424. package/dist/core/asyncapi/depth.js.map +1 -0
  425. package/dist/core/asyncapi/digest.js +146 -0
  426. package/dist/core/asyncapi/digest.js.map +1 -0
  427. package/dist/core/asyncapi/merge/components.js +92 -0
  428. package/dist/core/asyncapi/merge/components.js.map +1 -0
  429. package/dist/core/asyncapi/merge/error.js +38 -0
  430. package/dist/core/asyncapi/merge/error.js.map +1 -0
  431. package/dist/core/asyncapi/merge/markers.js +290 -0
  432. package/dist/core/asyncapi/merge/markers.js.map +1 -0
  433. package/dist/core/asyncapi/merge/merge.js +195 -0
  434. package/dist/core/asyncapi/merge/merge.js.map +1 -0
  435. package/dist/core/asyncapi/merge/pin.js +83 -0
  436. package/dist/core/asyncapi/merge/pin.js.map +1 -0
  437. package/dist/core/asyncapi/model.js +11 -0
  438. package/dist/core/asyncapi/model.js.map +1 -0
  439. package/dist/core/asyncapi/producers.js +50 -0
  440. package/dist/core/asyncapi/producers.js.map +1 -0
  441. package/dist/core/asyncapi/read.js +263 -0
  442. package/dist/core/asyncapi/read.js.map +1 -0
  443. package/dist/core/brief/brief.js +285 -0
  444. package/dist/core/brief/brief.js.map +1 -0
  445. package/dist/core/brief/checks.js +385 -0
  446. package/dist/core/brief/checks.js.map +1 -0
  447. package/dist/core/brief/landscape.js +273 -0
  448. package/dist/core/brief/landscape.js.map +1 -0
  449. package/dist/core/brief/map/extend.js +84 -0
  450. package/dist/core/brief/map/extend.js.map +1 -0
  451. package/dist/core/brief/map/owed.js +266 -0
  452. package/dist/core/brief/map/owed.js.map +1 -0
  453. package/dist/core/brief/targets.js +304 -0
  454. package/dist/core/brief/targets.js.map +1 -0
  455. package/dist/core/brief/unchecked.js +58 -0
  456. package/dist/core/brief/unchecked.js.map +1 -0
  457. package/dist/core/c4/arch.js +190 -0
  458. package/dist/core/c4/arch.js.map +1 -0
  459. package/dist/core/c4/direction/direction.js +114 -0
  460. package/dist/core/c4/direction/direction.js.map +1 -0
  461. package/dist/core/c4/likec4.js +243 -0
  462. package/dist/core/c4/likec4.js.map +1 -0
  463. package/dist/core/c4/locate/unlocated.js +150 -0
  464. package/dist/core/c4/locate/unlocated.js.map +1 -0
  465. package/dist/core/c4/parsed/deployment.js +160 -0
  466. package/dist/core/c4/parsed/deployment.js.map +1 -0
  467. package/dist/core/c4/parsed/dynamic-views.js +132 -0
  468. package/dist/core/c4/parsed/dynamic-views.js.map +1 -0
  469. package/dist/core/c4/parsed/specification.js +78 -0
  470. package/dist/core/c4/parsed/specification.js.map +1 -0
  471. package/dist/core/c4/parsed/values.js +110 -0
  472. package/dist/core/c4/parsed/values.js.map +1 -0
  473. package/dist/core/c4/parsed/view-ids.js +113 -0
  474. package/dist/core/c4/parsed/view-ids.js.map +1 -0
  475. package/dist/core/c4/prefetch/fleet.js +134 -0
  476. package/dist/core/c4/prefetch/fleet.js.map +1 -0
  477. package/dist/core/c4/project/architecture.js +161 -0
  478. package/dist/core/c4/project/architecture.js.map +1 -0
  479. package/dist/core/c4/project/batch.js +140 -0
  480. package/dist/core/c4/project/batch.js.map +1 -0
  481. package/dist/core/c4/project/documents.js +89 -0
  482. package/dist/core/c4/project/documents.js.map +1 -0
  483. package/dist/core/c4/project/load.js +219 -0
  484. package/dist/core/c4/project/load.js.map +1 -0
  485. package/dist/core/c4/project/staged.js +277 -0
  486. package/dist/core/c4/project/staged.js.map +1 -0
  487. package/dist/core/c4/resolve/attested.js +0 -0
  488. package/dist/core/c4/resolve/attested.js.map +1 -0
  489. package/dist/core/c4/resolve/external.js +51 -0
  490. package/dist/core/c4/resolve/external.js.map +1 -0
  491. package/dist/core/c4/resolve/service.js +174 -0
  492. package/dist/core/c4/resolve/service.js.map +1 -0
  493. package/dist/core/c4/resolve/steps.js +290 -0
  494. package/dist/core/c4/resolve/steps.js.map +1 -0
  495. package/dist/core/c4/resolve/systems.js +154 -0
  496. package/dist/core/c4/resolve/systems.js.map +1 -0
  497. package/dist/core/c4/root-project/exclude.js +352 -0
  498. package/dist/core/c4/root-project/exclude.js.map +1 -0
  499. package/dist/core/c4/seed/fleet-file.js +201 -0
  500. package/dist/core/c4/seed/fleet-file.js.map +1 -0
  501. package/dist/core/c4/seed/items.js +91 -0
  502. package/dist/core/c4/seed/items.js.map +1 -0
  503. package/dist/core/c4/seed/stamp.js +48 -0
  504. package/dist/core/c4/seed/stamp.js.map +1 -0
  505. package/dist/core/c4/seed/template.js +173 -0
  506. package/dist/core/c4/seed/template.js.map +1 -0
  507. package/dist/core/c4/service-model/created/models.js +96 -0
  508. package/dist/core/c4/service-model/created/models.js.map +1 -0
  509. package/dist/core/c4/service-model/documents.js +47 -0
  510. package/dist/core/c4/service-model/documents.js.map +1 -0
  511. package/dist/core/c4/service-model/fleet/extending.js +82 -0
  512. package/dist/core/c4/service-model/fleet/extending.js.map +1 -0
  513. package/dist/core/c4/service-model/load.js +165 -0
  514. package/dist/core/c4/service-model/load.js.map +1 -0
  515. package/dist/core/c4/service-model/renderer.js +128 -0
  516. package/dist/core/c4/service-model/renderer.js.map +1 -0
  517. package/dist/core/c4/service-model/shape.js +106 -0
  518. package/dist/core/c4/service-model/shape.js.map +1 -0
  519. package/dist/core/c4/service-model/slice.js +188 -0
  520. package/dist/core/c4/service-model/slice.js.map +1 -0
  521. package/dist/core/c4/source-mask.js +369 -0
  522. package/dist/core/c4/source-mask.js.map +1 -0
  523. package/dist/core/c4/source-scan.js +308 -0
  524. package/dist/core/c4/source-scan.js.map +1 -0
  525. package/dist/core/c4/splice/authored-source.js +167 -0
  526. package/dist/core/c4/splice/authored-source.js.map +1 -0
  527. package/dist/core/c4/splice/contract.js +30 -0
  528. package/dist/core/c4/splice/contract.js.map +1 -0
  529. package/dist/core/c4/splice/delta-blocks.js +126 -0
  530. package/dist/core/c4/splice/delta-blocks.js.map +1 -0
  531. package/dist/core/c4/splice/identity/declared.js +87 -0
  532. package/dist/core/c4/splice/identity/declared.js.map +1 -0
  533. package/dist/core/c4/splice/identity/edges.js +73 -0
  534. package/dist/core/c4/splice/identity/edges.js.map +1 -0
  535. package/dist/core/c4/splice/identity/existing.js +80 -0
  536. package/dist/core/c4/splice/identity/existing.js.map +1 -0
  537. package/dist/core/c4/splice/identity/interior.js +80 -0
  538. package/dist/core/c4/splice/identity/interior.js.map +1 -0
  539. package/dist/core/c4/splice/identity/owner.js +50 -0
  540. package/dist/core/c4/splice/identity/owner.js.map +1 -0
  541. package/dist/core/c4/splice/landscape-merge.js +337 -0
  542. package/dist/core/c4/splice/landscape-merge.js.map +1 -0
  543. package/dist/core/c4/splice/model/merge.js +151 -0
  544. package/dist/core/c4/splice/model/merge.js.map +1 -0
  545. package/dist/core/c4/splice/placement.js +298 -0
  546. package/dist/core/c4/splice/placement.js.map +1 -0
  547. package/dist/core/c4/splice/text/spot.js +131 -0
  548. package/dist/core/c4/splice/text/spot.js.map +1 -0
  549. package/dist/core/c4/workspace.js +166 -0
  550. package/dist/core/c4/workspace.js.map +1 -0
  551. package/dist/core/capabilities/authoring/notes.js +141 -0
  552. package/dist/core/capabilities/authoring/notes.js.map +1 -0
  553. package/dist/core/capabilities/capabilities.js +124 -0
  554. package/dist/core/capabilities/capabilities.js.map +1 -0
  555. package/dist/core/capabilities/delta/doc.js +47 -0
  556. package/dist/core/capabilities/delta/doc.js.map +1 -0
  557. package/dist/core/capabilities/delta/overlay.js +129 -0
  558. package/dist/core/capabilities/delta/overlay.js.map +1 -0
  559. package/dist/core/capabilities/delta/summary.js +57 -0
  560. package/dist/core/capabilities/delta/summary.js.map +1 -0
  561. package/dist/core/capabilities/delta/tree.js +43 -0
  562. package/dist/core/capabilities/delta/tree.js.map +1 -0
  563. package/dist/core/capabilities/delta/uncovered.js +222 -0
  564. package/dist/core/capabilities/delta/uncovered.js.map +1 -0
  565. package/dist/core/capabilities/findings.js +338 -0
  566. package/dist/core/capabilities/findings.js.map +1 -0
  567. package/dist/core/capabilities/realizes/findings.js +174 -0
  568. package/dist/core/capabilities/realizes/findings.js.map +1 -0
  569. package/dist/core/capabilities/realizes/join.js +123 -0
  570. package/dist/core/capabilities/realizes/join.js.map +1 -0
  571. package/dist/core/capabilities/rollup.js +205 -0
  572. package/dist/core/capabilities/rollup.js.map +1 -0
  573. package/dist/core/capabilities/tree.js +104 -0
  574. package/dist/core/capabilities/tree.js.map +1 -0
  575. package/dist/core/capabilities/usecase-join.js +267 -0
  576. package/dist/core/capabilities/usecase-join.js.map +1 -0
  577. package/dist/core/coherence/authoring/scaffold.js +185 -0
  578. package/dist/core/coherence/authoring/scaffold.js.map +1 -0
  579. package/dist/core/coherence/authoring/sentinels.js +75 -0
  580. package/dist/core/coherence/authoring/sentinels.js.map +1 -0
  581. package/dist/core/coherence/calls/called.js +52 -0
  582. package/dist/core/coherence/calls/called.js.map +1 -0
  583. package/dist/core/coherence/coherence.js +332 -0
  584. package/dist/core/coherence/coherence.js.map +1 -0
  585. package/dist/core/coherence/consumed/operations.js +70 -0
  586. package/dist/core/coherence/consumed/operations.js.map +1 -0
  587. package/dist/core/coherence/consumed/refusal.js +38 -0
  588. package/dist/core/coherence/consumed/refusal.js.map +1 -0
  589. package/dist/core/coherence/covers/health.js +85 -0
  590. package/dist/core/coherence/covers/health.js.map +1 -0
  591. package/dist/core/coherence/declared.js +295 -0
  592. package/dist/core/coherence/declared.js.map +1 -0
  593. package/dist/core/coherence/events/declared.js +191 -0
  594. package/dist/core/coherence/events/declared.js.map +1 -0
  595. package/dist/core/coherence/events/events.js +335 -0
  596. package/dist/core/coherence/events/events.js.map +1 -0
  597. package/dist/core/coherence/events/grades.js +189 -0
  598. package/dist/core/coherence/events/grades.js.map +1 -0
  599. package/dist/core/coherence/events/lookups.js +63 -0
  600. package/dist/core/coherence/events/lookups.js.map +1 -0
  601. package/dist/core/coherence/events/produced.js +100 -0
  602. package/dist/core/coherence/events/produced.js.map +1 -0
  603. package/dist/core/coherence/living.js +198 -0
  604. package/dist/core/coherence/living.js.map +1 -0
  605. package/dist/core/coherence/lookups.js +95 -0
  606. package/dist/core/coherence/lookups.js.map +1 -0
  607. package/dist/core/coherence/pending.js +39 -0
  608. package/dist/core/coherence/pending.js.map +1 -0
  609. package/dist/core/coherence/retired/archived.js +285 -0
  610. package/dist/core/coherence/retired/archived.js.map +1 -0
  611. package/dist/core/coherence/retired/event-pair.js +62 -0
  612. package/dist/core/coherence/retired/event-pair.js.map +1 -0
  613. package/dist/core/coherence/retired/merged.js +79 -0
  614. package/dist/core/coherence/retired/merged.js.map +1 -0
  615. package/dist/core/coherence/retired/retirement.js +49 -0
  616. package/dist/core/coherence/retired/retirement.js.map +1 -0
  617. package/dist/core/coherence/retired/revival/arrivals.js +131 -0
  618. package/dist/core/coherence/retired/revival/arrivals.js.map +1 -0
  619. package/dist/core/coherence/retired/revival/revived.js +297 -0
  620. package/dist/core/coherence/retired/revival/revived.js.map +1 -0
  621. package/dist/core/conflict-markers.js +60 -0
  622. package/dist/core/conflict-markers.js.map +1 -0
  623. package/dist/core/consumers/after.js +113 -0
  624. package/dist/core/consumers/after.js.map +1 -0
  625. package/dist/core/consumers/consumers.js +296 -0
  626. package/dist/core/consumers/consumers.js.map +1 -0
  627. package/dist/core/consumers/current.js +211 -0
  628. package/dist/core/consumers/current.js.map +1 -0
  629. package/dist/core/consumers/scan.js +46 -0
  630. package/dist/core/consumers/scan.js.map +1 -0
  631. package/dist/core/consumers/state.js +27 -0
  632. package/dist/core/consumers/state.js.map +1 -0
  633. package/dist/core/delta/claims.js +73 -0
  634. package/dist/core/delta/claims.js.map +1 -0
  635. package/dist/core/delta/delta.js +341 -0
  636. package/dist/core/delta/delta.js.map +1 -0
  637. package/dist/core/delta/document.js +177 -0
  638. package/dist/core/delta/document.js.map +1 -0
  639. package/dist/core/delta/scope.js +48 -0
  640. package/dist/core/delta/scope.js.map +1 -0
  641. package/dist/core/delta/select.js +237 -0
  642. package/dist/core/delta/select.js.map +1 -0
  643. package/dist/core/dependencies/dependencies.js +141 -0
  644. package/dist/core/dependencies/dependencies.js.map +1 -0
  645. package/dist/core/dependencies/facts.js +165 -0
  646. package/dist/core/dependencies/facts.js.map +1 -0
  647. package/dist/core/dependencies/fanin.js +88 -0
  648. package/dist/core/dependencies/fanin.js.map +1 -0
  649. package/dist/core/dependencies/graph.js +106 -0
  650. package/dist/core/dependencies/graph.js.map +1 -0
  651. package/dist/core/deployment/delta.js +191 -0
  652. package/dist/core/deployment/delta.js.map +1 -0
  653. package/dist/core/deployment/objects.js +145 -0
  654. package/dist/core/deployment/objects.js.map +1 -0
  655. package/dist/core/diff/base-git.js +230 -0
  656. package/dist/core/diff/base-git.js.map +1 -0
  657. package/dist/core/diff/base-state.js +237 -0
  658. package/dist/core/diff/base-state.js.map +1 -0
  659. package/dist/core/diff/joins.js +136 -0
  660. package/dist/core/diff/joins.js.map +1 -0
  661. package/dist/core/diff/scope/changed-paths.js +204 -0
  662. package/dist/core/diff/scope/changed-paths.js.map +1 -0
  663. package/dist/core/diff/scope/edges.js +82 -0
  664. package/dist/core/diff/scope/edges.js.map +1 -0
  665. package/dist/core/diff/semantic.js +312 -0
  666. package/dist/core/diff/semantic.js.map +1 -0
  667. package/dist/core/docs.js +37 -85
  668. package/dist/core/docs.js.map +1 -1
  669. package/dist/core/doctor/agents.js +238 -0
  670. package/dist/core/doctor/agents.js.map +1 -0
  671. package/dist/core/doctor/config.js +139 -0
  672. package/dist/core/doctor/config.js.map +1 -0
  673. package/dist/core/doctor/doctor.js +355 -0
  674. package/dist/core/doctor/doctor.js.map +1 -0
  675. package/dist/core/doctor/report.js +13 -0
  676. package/dist/core/doctor/report.js.map +1 -0
  677. package/dist/core/doctor/reports/scan.js +242 -0
  678. package/dist/core/doctor/reports/scan.js.map +1 -0
  679. package/dist/core/doctor/residue.js +110 -0
  680. package/dist/core/doctor/residue.js.map +1 -0
  681. package/dist/core/document/apply.js +224 -0
  682. package/dist/core/document/apply.js.map +1 -0
  683. package/dist/core/{frontmatter.js → document/frontmatter.js} +103 -2
  684. package/dist/core/document/frontmatter.js.map +1 -0
  685. package/dist/core/document/grammar/directives.js +143 -0
  686. package/dist/core/document/grammar/directives.js.map +1 -0
  687. package/dist/core/document/parse.js +286 -0
  688. package/dist/core/document/parse.js.map +1 -0
  689. package/dist/core/document/scenarios.js +238 -0
  690. package/dist/core/document/scenarios.js.map +1 -0
  691. package/dist/core/document/spec.js +234 -0
  692. package/dist/core/document/spec.js.map +1 -0
  693. package/dist/core/{config.js → envelope/config.js} +89 -18
  694. package/dist/core/envelope/config.js.map +1 -0
  695. package/dist/core/envelope/json.js +209 -0
  696. package/dist/core/envelope/json.js.map +1 -0
  697. package/dist/core/{version.js → envelope/version.js} +3 -3
  698. package/dist/core/envelope/version.js.map +1 -0
  699. package/dist/core/explain/families.js +180 -0
  700. package/dist/core/explain/families.js.map +1 -0
  701. package/dist/core/explain/fix-tables.js +178 -0
  702. package/dist/core/explain/fix-tables.js.map +1 -0
  703. package/dist/core/explain/lookup.js +194 -0
  704. package/dist/core/explain/lookup.js.map +1 -0
  705. package/dist/core/explain/refusals.js +49 -0
  706. package/dist/core/explain/refusals.js.map +1 -0
  707. package/dist/core/explain/terms/documents.js +227 -0
  708. package/dist/core/explain/terms/documents.js.map +1 -0
  709. package/dist/core/explain/terms/done-check.js +144 -0
  710. package/dist/core/explain/terms/done-check.js.map +1 -0
  711. package/dist/core/explain/terms/entry.js +14 -0
  712. package/dist/core/explain/terms/entry.js.map +1 -0
  713. package/dist/core/explain/terms/stages.js +71 -0
  714. package/dist/core/explain/terms/stages.js.map +1 -0
  715. package/dist/core/explain/terms/tasks.js +97 -0
  716. package/dist/core/explain/terms/tasks.js.map +1 -0
  717. package/dist/core/explain/terms.js +103 -0
  718. package/dist/core/explain/terms.js.map +1 -0
  719. package/dist/core/explore/describe.js +105 -0
  720. package/dist/core/explore/describe.js.map +1 -0
  721. package/dist/core/explore/explore.js +204 -0
  722. package/dist/core/explore/explore.js.map +1 -0
  723. package/dist/core/fleet-context.js +174 -146
  724. package/dist/core/fleet-context.js.map +1 -1
  725. package/dist/core/gate/checks.js +208 -0
  726. package/dist/core/gate/checks.js.map +1 -0
  727. package/dist/core/gate/partners.js +246 -0
  728. package/dist/core/gate/partners.js.map +1 -0
  729. package/dist/core/gate/report.js +47 -0
  730. package/dist/core/gate/report.js.map +1 -0
  731. package/dist/core/gate/verification.js +176 -0
  732. package/dist/core/gate/verification.js.map +1 -0
  733. package/dist/core/gherkin/digest.js +60 -0
  734. package/dist/core/gherkin/digest.js.map +1 -0
  735. package/dist/core/gherkin/emit.js +177 -0
  736. package/dist/core/gherkin/emit.js.map +1 -0
  737. package/dist/core/gherkin/read.js +76 -0
  738. package/dist/core/gherkin/read.js.map +1 -0
  739. package/dist/core/gherkin/stale.js +210 -0
  740. package/dist/core/gherkin/stale.js.map +1 -0
  741. package/dist/core/gherkin/stamp.js +77 -0
  742. package/dist/core/gherkin/stamp.js.map +1 -0
  743. package/dist/core/gherkin/steps/catalogue.js +154 -0
  744. package/dist/core/gherkin/steps/catalogue.js.map +1 -0
  745. package/dist/core/gherkin/steps/inventory.js +98 -0
  746. package/dist/core/gherkin/steps/inventory.js.map +1 -0
  747. package/dist/core/gherkin/steps/phrase.js +72 -0
  748. package/dist/core/gherkin/steps/phrase.js.map +1 -0
  749. package/dist/core/glossary/delta.js +109 -0
  750. package/dist/core/glossary/delta.js.map +1 -0
  751. package/dist/core/glossary/tree.js +73 -0
  752. package/dist/core/glossary/tree.js.map +1 -0
  753. package/dist/core/{concurrency.js → kernel/concurrency.js} +19 -0
  754. package/dist/core/kernel/concurrency.js.map +1 -0
  755. package/dist/core/{document-bytes.js → kernel/document-bytes.js} +1 -1
  756. package/dist/core/kernel/document-bytes.js.map +1 -0
  757. package/dist/core/kernel/fences.js +42 -0
  758. package/dist/core/kernel/fences.js.map +1 -0
  759. package/dist/core/kernel/ids/capability.js +72 -0
  760. package/dist/core/kernel/ids/capability.js.map +1 -0
  761. package/dist/core/kernel/ids/dirs.js +33 -0
  762. package/dist/core/kernel/ids/dirs.js.map +1 -0
  763. package/dist/core/kernel/ids/feature.js +75 -0
  764. package/dist/core/kernel/ids/feature.js.map +1 -0
  765. package/dist/core/kernel/ids/fqn/ancestors.js +65 -0
  766. package/dist/core/kernel/ids/fqn/ancestors.js.map +1 -0
  767. package/dist/core/kernel/ids/service.js +156 -0
  768. package/dist/core/kernel/ids/service.js.map +1 -0
  769. package/dist/core/kernel/ids/subsystem.js +63 -0
  770. package/dist/core/kernel/ids/subsystem.js.map +1 -0
  771. package/dist/core/{path-safety.js → kernel/path-safety.js} +56 -4
  772. package/dist/core/kernel/path-safety.js.map +1 -0
  773. package/dist/core/{records.js → kernel/records.js} +11 -0
  774. package/dist/core/kernel/records.js.map +1 -0
  775. package/dist/core/links/backlinks.js +66 -0
  776. package/dist/core/links/backlinks.js.map +1 -0
  777. package/dist/core/links/case.js +74 -0
  778. package/dist/core/links/case.js.map +1 -0
  779. package/dist/core/links/corpus.js +118 -0
  780. package/dist/core/links/corpus.js.map +1 -0
  781. package/dist/core/links/findings.js +110 -0
  782. package/dist/core/links/findings.js.map +1 -0
  783. package/dist/core/links/parse.js +265 -0
  784. package/dist/core/links/parse.js.map +1 -0
  785. package/dist/core/mcp/argv.js +212 -0
  786. package/dist/core/mcp/argv.js.map +1 -0
  787. package/dist/core/mcp/author-tools.js +73 -0
  788. package/dist/core/mcp/author-tools.js.map +1 -0
  789. package/dist/core/mcp/framing.js +46 -0
  790. package/dist/core/mcp/framing.js.map +1 -0
  791. package/dist/core/mcp/protocol.js +280 -0
  792. package/dist/core/mcp/protocol.js.map +1 -0
  793. package/dist/core/mcp/tools.js +324 -0
  794. package/dist/core/mcp/tools.js.map +1 -0
  795. package/dist/core/obligations/obligations.js +106 -0
  796. package/dist/core/obligations/obligations.js.map +1 -0
  797. package/dist/core/openapi/baseline/gate.js +207 -0
  798. package/dist/core/openapi/baseline/gate.js.map +1 -0
  799. package/dist/core/openapi/baseline/plan.js +142 -0
  800. package/dist/core/openapi/baseline/plan.js.map +1 -0
  801. package/dist/core/openapi/baseline/record.js +174 -0
  802. package/dist/core/openapi/baseline/record.js.map +1 -0
  803. package/dist/core/openapi/contract-text.js +33 -0
  804. package/dist/core/openapi/contract-text.js.map +1 -0
  805. package/dist/core/openapi/contract-tree.js +301 -0
  806. package/dist/core/openapi/contract-tree.js.map +1 -0
  807. package/dist/core/openapi/depth.js +136 -0
  808. package/dist/core/openapi/depth.js.map +1 -0
  809. package/dist/core/openapi/digest.js +239 -0
  810. package/dist/core/openapi/digest.js.map +1 -0
  811. package/dist/core/{openapi.js → openapi/doc.js} +54 -108
  812. package/dist/core/openapi/doc.js.map +1 -0
  813. package/dist/core/openapi/merge/components.js +199 -0
  814. package/dist/core/openapi/merge/components.js.map +1 -0
  815. package/dist/core/openapi/merge/error.js +16 -0
  816. package/dist/core/openapi/merge/error.js.map +1 -0
  817. package/dist/core/openapi/merge/markers.js +204 -0
  818. package/dist/core/openapi/merge/markers.js.map +1 -0
  819. package/dist/core/openapi/merge/merge.js +232 -0
  820. package/dist/core/openapi/merge/merge.js.map +1 -0
  821. package/dist/core/openapi/merge/pin.js +110 -0
  822. package/dist/core/openapi/merge/pin.js.map +1 -0
  823. package/dist/core/openspec/decide/capabilities.js +244 -0
  824. package/dist/core/openspec/decide/capabilities.js.map +1 -0
  825. package/dist/core/openspec/decide/dispositions.js +63 -0
  826. package/dist/core/openspec/decide/dispositions.js.map +1 -0
  827. package/dist/core/openspec/decide/renames.js +179 -0
  828. package/dist/core/openspec/decide/renames.js.map +1 -0
  829. package/dist/core/openspec/decide/verdict.js +84 -0
  830. package/dist/core/openspec/decide/verdict.js.map +1 -0
  831. package/dist/core/openspec/inventory.js +220 -0
  832. package/dist/core/openspec/inventory.js.map +1 -0
  833. package/dist/core/openspec/model/mapping.js +78 -0
  834. package/dist/core/openspec/model/mapping.js.map +1 -0
  835. package/dist/core/openspec/model/model.js +70 -0
  836. package/dist/core/openspec/model/model.js.map +1 -0
  837. package/dist/core/openspec/scan/changes.js +241 -0
  838. package/dist/core/openspec/scan/changes.js.map +1 -0
  839. package/dist/core/openspec/scan/config.js +191 -0
  840. package/dist/core/openspec/scan/config.js.map +1 -0
  841. package/dist/core/openspec/scan/shape.js +304 -0
  842. package/dist/core/openspec/scan/shape.js.map +1 -0
  843. package/dist/core/openspec/scan/walk.js +116 -0
  844. package/dist/core/openspec/scan/walk.js.map +1 -0
  845. package/dist/core/openspec/scan/workspace.js +71 -0
  846. package/dist/core/openspec/scan/workspace.js.map +1 -0
  847. package/dist/core/owners/codeowners.js +141 -0
  848. package/dist/core/owners/codeowners.js.map +1 -0
  849. package/dist/core/pack/features.js +120 -0
  850. package/dist/core/pack/features.js.map +1 -0
  851. package/dist/core/pack/joins.js +112 -0
  852. package/dist/core/pack/joins.js.map +1 -0
  853. package/dist/core/pack/living.js +157 -0
  854. package/dist/core/pack/living.js.map +1 -0
  855. package/dist/core/pack/pack.js +120 -0
  856. package/dist/core/pack/pack.js.map +1 -0
  857. package/dist/core/permissions/permissions.js +87 -0
  858. package/dist/core/permissions/permissions.js.map +1 -0
  859. package/dist/core/projection/api.js +84 -0
  860. package/dist/core/projection/api.js.map +1 -0
  861. package/dist/core/projection/arch-slice.js +63 -0
  862. package/dist/core/projection/arch-slice.js.map +1 -0
  863. package/dist/core/projection/events.js +34 -0
  864. package/dist/core/projection/events.js.map +1 -0
  865. package/dist/core/projection/introduced.js +14 -0
  866. package/dist/core/projection/introduced.js.map +1 -0
  867. package/dist/core/provenance/findings.js +244 -0
  868. package/dist/core/provenance/findings.js.map +1 -0
  869. package/dist/core/provenance/git.js +201 -0
  870. package/dist/core/provenance/git.js.map +1 -0
  871. package/dist/core/provenance/gitq/moves.js +139 -0
  872. package/dist/core/provenance/gitq/moves.js.map +1 -0
  873. package/dist/core/provenance/gitq/vouched-ancestor.js +179 -0
  874. package/dist/core/provenance/gitq/vouched-ancestor.js.map +1 -0
  875. package/dist/core/provenance/sample/scope.js +238 -0
  876. package/dist/core/provenance/sample/scope.js.map +1 -0
  877. package/dist/core/provenance/sample/sections.js +61 -0
  878. package/dist/core/provenance/sample/sections.js.map +1 -0
  879. package/dist/core/provenance/sources.js +280 -0
  880. package/dist/core/provenance/sources.js.map +1 -0
  881. package/dist/core/provenance/stamp.js +220 -0
  882. package/dist/core/provenance/stamp.js.map +1 -0
  883. package/dist/core/provenance/walk.js +157 -0
  884. package/dist/core/provenance/walk.js.map +1 -0
  885. package/dist/core/repo/authored/paths.js +210 -0
  886. package/dist/core/repo/authored/paths.js.map +1 -0
  887. package/dist/core/repo/entries.js +126 -0
  888. package/dist/core/repo/entries.js.map +1 -0
  889. package/dist/core/repo/paths.js +322 -0
  890. package/dist/core/repo/paths.js.map +1 -0
  891. package/dist/core/repo/repo.js +308 -0
  892. package/dist/core/repo/repo.js.map +1 -0
  893. package/dist/core/repo/service-target.js +153 -0
  894. package/dist/core/repo/service-target.js.map +1 -0
  895. package/dist/core/repo/state.js +58 -0
  896. package/dist/core/repo/state.js.map +1 -0
  897. package/dist/core/repo/tree/find.js +61 -0
  898. package/dist/core/repo/tree/find.js.map +1 -0
  899. package/dist/core/repo/tree/fs.js +90 -0
  900. package/dist/core/repo/tree/fs.js.map +1 -0
  901. package/dist/core/repo/tree/marker.js +61 -0
  902. package/dist/core/repo/tree/marker.js.map +1 -0
  903. package/dist/core/repo/tree/render/body.js +258 -0
  904. package/dist/core/repo/tree/render/body.js.map +1 -0
  905. package/dist/core/repo/tree/render/projects.js +182 -0
  906. package/dist/core/repo/tree/render/projects.js.map +1 -0
  907. package/dist/core/repo/tree/render/service/header.js +125 -0
  908. package/dist/core/repo/tree/render/service/header.js.map +1 -0
  909. package/dist/core/repo/tree/render/service/peers.js +28 -0
  910. package/dist/core/repo/tree/render/service/peers.js.map +1 -0
  911. package/dist/core/repo/tree/render/service/view-id.js +67 -0
  912. package/dist/core/repo/tree/render/service/view-id.js.map +1 -0
  913. package/dist/core/repo/tree/render/service/views.js +78 -0
  914. package/dist/core/repo/tree/render/service/views.js.map +1 -0
  915. package/dist/core/repo/tree/render/stale.js +42 -0
  916. package/dist/core/repo/tree/render/stale.js.map +1 -0
  917. package/dist/core/repo/tree/render/text.js +84 -0
  918. package/dist/core/repo/tree/render/text.js.map +1 -0
  919. package/dist/core/repo/tree/render/views.js +293 -0
  920. package/dist/core/repo/tree/render/views.js.map +1 -0
  921. package/dist/core/repo/tree/walk.js +255 -0
  922. package/dist/core/repo/tree/walk.js.map +1 -0
  923. package/dist/core/results.js +146 -14
  924. package/dist/core/results.js.map +1 -1
  925. package/dist/core/scaffold/landscape.js +239 -0
  926. package/dist/core/scaffold/landscape.js.map +1 -0
  927. package/dist/core/scaffold/legacy.js +271 -0
  928. package/dist/core/scaffold/legacy.js.map +1 -0
  929. package/dist/core/scaffold/readme.js +84 -0
  930. package/dist/core/scaffold/readme.js.map +1 -0
  931. package/dist/core/staging/commit.js +252 -0
  932. package/dist/core/staging/commit.js.map +1 -0
  933. package/dist/core/staging/interrupted.js +96 -0
  934. package/dist/core/staging/interrupted.js.map +1 -0
  935. package/dist/core/staging/lock.js +268 -0
  936. package/dist/core/staging/lock.js.map +1 -0
  937. package/dist/core/staging/recovery/finding.js +35 -0
  938. package/dist/core/staging/recovery/finding.js.map +1 -0
  939. package/dist/core/staging/recovery/intent.js +95 -0
  940. package/dist/core/staging/recovery/intent.js.map +1 -0
  941. package/dist/core/staging/recovery/recover.js +204 -0
  942. package/dist/core/staging/recovery/recover.js.map +1 -0
  943. package/dist/core/staging/recovery/residue.js +62 -0
  944. package/dist/core/staging/recovery/residue.js.map +1 -0
  945. package/dist/core/staging/snapshot/manifest.js +188 -0
  946. package/dist/core/staging/snapshot/manifest.js.map +1 -0
  947. package/dist/core/staging/snapshot/snapshot.js +196 -0
  948. package/dist/core/staging/snapshot/snapshot.js.map +1 -0
  949. package/dist/core/staging/txn/forward.js +181 -0
  950. package/dist/core/staging/txn/forward.js.map +1 -0
  951. package/dist/core/staging/txn/journal.js +139 -0
  952. package/dist/core/staging/txn/journal.js.map +1 -0
  953. package/dist/core/staging/txn/transaction.js +75 -0
  954. package/dist/core/staging/txn/transaction.js.map +1 -0
  955. package/dist/core/staging/writes.js +113 -0
  956. package/dist/core/staging/writes.js.map +1 -0
  957. package/dist/core/status/actions/execution.js +60 -0
  958. package/dist/core/status/actions/execution.js.map +1 -0
  959. package/dist/core/status/contracts.js +126 -0
  960. package/dist/core/status/contracts.js.map +1 -0
  961. package/dist/core/status/feature/artifacts.js +196 -0
  962. package/dist/core/status/feature/artifacts.js.map +1 -0
  963. package/dist/core/status/feature/feature.js +214 -0
  964. package/dist/core/status/feature/feature.js.map +1 -0
  965. package/dist/core/status/feature/next.js +163 -0
  966. package/dist/core/status/feature/next.js.map +1 -0
  967. package/dist/core/status/feature/state.js +21 -0
  968. package/dist/core/status/feature/state.js.map +1 -0
  969. package/dist/core/status/feature/words.js +96 -0
  970. package/dist/core/status/feature/words.js.map +1 -0
  971. package/dist/core/status/fleet/fleet.js +216 -0
  972. package/dist/core/status/fleet/fleet.js.map +1 -0
  973. package/dist/core/status/fleet/next.js +302 -0
  974. package/dist/core/status/fleet/next.js.map +1 -0
  975. package/dist/core/status/interrupted.js +97 -0
  976. package/dist/core/status/interrupted.js.map +1 -0
  977. package/dist/core/status/report.js +31 -0
  978. package/dist/core/status/report.js.map +1 -0
  979. package/dist/core/status/scan.js +41 -0
  980. package/dist/core/status/scan.js.map +1 -0
  981. package/dist/core/status/verification.js +216 -0
  982. package/dist/core/status/verification.js.map +1 -0
  983. package/dist/core/tasks/packet.js +199 -0
  984. package/dist/core/tasks/packet.js.map +1 -0
  985. package/dist/core/tasks/record.js +43 -0
  986. package/dist/core/tasks/record.js.map +1 -0
  987. package/dist/core/tasks/sources.js +181 -0
  988. package/dist/core/tasks/sources.js.map +1 -0
  989. package/dist/core/tasks/stamps.js +76 -0
  990. package/dist/core/tasks/stamps.js.map +1 -0
  991. package/dist/core/tasks/unit.js +0 -0
  992. package/dist/core/tasks/unit.js.map +1 -0
  993. package/dist/core/usecases/capability.js +166 -0
  994. package/dist/core/usecases/capability.js.map +1 -0
  995. package/dist/core/usecases/delta/claims.js +140 -0
  996. package/dist/core/usecases/delta/claims.js.map +1 -0
  997. package/dist/core/usecases/delta/flows.js +101 -0
  998. package/dist/core/usecases/delta/flows.js.map +1 -0
  999. package/dist/core/usecases/delta/modified.js +315 -0
  1000. package/dist/core/usecases/delta/modified.js.map +1 -0
  1001. package/dist/core/usecases/delta/overlay.js +76 -0
  1002. package/dist/core/usecases/delta/overlay.js.map +1 -0
  1003. package/dist/core/usecases/fleet.js +296 -0
  1004. package/dist/core/usecases/fleet.js.map +1 -0
  1005. package/dist/core/usecases/grade/capability-tag.js +93 -0
  1006. package/dist/core/usecases/grade/capability-tag.js.map +1 -0
  1007. package/dist/core/usecases/grade/feature.js +88 -0
  1008. package/dist/core/usecases/grade/feature.js.map +1 -0
  1009. package/dist/core/usecases/grade/requirement-tag.js +94 -0
  1010. package/dist/core/usecases/grade/requirement-tag.js.map +1 -0
  1011. package/dist/core/usecases/grade/steps.js +266 -0
  1012. package/dist/core/usecases/grade/steps.js.map +1 -0
  1013. package/dist/core/usecases/grade/usecases.js +112 -0
  1014. package/dist/core/usecases/grade/usecases.js.map +1 -0
  1015. package/dist/core/usecases/operations.js +123 -0
  1016. package/dist/core/usecases/operations.js.map +1 -0
  1017. package/dist/core/usecases/place.js +44 -0
  1018. package/dist/core/usecases/place.js.map +1 -0
  1019. package/dist/core/usecases/service/exclude.js +119 -0
  1020. package/dist/core/usecases/service/exclude.js.map +1 -0
  1021. package/dist/core/usecases/service/flows.js +164 -0
  1022. package/dist/core/usecases/service/flows.js.map +1 -0
  1023. package/dist/core/usecases/suites/participants.js +83 -0
  1024. package/dist/core/usecases/suites/participants.js.map +1 -0
  1025. package/dist/core/usecases/suites/suites.js +45 -0
  1026. package/dist/core/usecases/suites/suites.js.map +1 -0
  1027. package/dist/core/usecases/touch.js +101 -0
  1028. package/dist/core/usecases/touch.js.map +1 -0
  1029. package/dist/core/verify/answers.js +180 -0
  1030. package/dist/core/verify/answers.js.map +1 -0
  1031. package/dist/core/verify/build.js +170 -0
  1032. package/dist/core/verify/build.js.map +1 -0
  1033. package/dist/core/verify/checklist.js +259 -0
  1034. package/dist/core/verify/checklist.js.map +1 -0
  1035. package/dist/core/verify/claims/identity.js +61 -0
  1036. package/dist/core/verify/claims/identity.js.map +1 -0
  1037. package/dist/core/verify/cross/diff.js +97 -0
  1038. package/dist/core/verify/cross/diff.js.map +1 -0
  1039. package/dist/core/verify/evidence/contract.js +169 -0
  1040. package/dist/core/verify/evidence/contract.js.map +1 -0
  1041. package/dist/core/verify/location.js +67 -0
  1042. package/dist/core/verify/location.js.map +1 -0
  1043. package/dist/core/verify/pins/lint.js +158 -0
  1044. package/dist/core/verify/pins/lint.js.map +1 -0
  1045. package/dist/core/verify/pins/pin.js +95 -0
  1046. package/dist/core/verify/pins/pin.js.map +1 -0
  1047. package/dist/core/verify/read/file.js +224 -0
  1048. package/dist/core/verify/read/file.js.map +1 -0
  1049. package/dist/core/verify/read/shape.js +169 -0
  1050. package/dist/core/verify/read/shape.js.map +1 -0
  1051. package/dist/core/verify/read/union.js +105 -0
  1052. package/dist/core/verify/read/union.js.map +1 -0
  1053. package/dist/core/verify/record.js +165 -0
  1054. package/dist/core/verify/record.js.map +1 -0
  1055. package/dist/core/verify/store/commit.js +99 -0
  1056. package/dist/core/verify/store/commit.js.map +1 -0
  1057. package/dist/core/verify/store/render.js +61 -0
  1058. package/dist/core/verify/store/render.js.map +1 -0
  1059. package/dist/core/vocabulary/health.js +91 -0
  1060. package/dist/core/vocabulary/health.js.map +1 -0
  1061. package/dist/core/vocabulary/issue.js +59 -0
  1062. package/dist/core/vocabulary/issue.js.map +1 -0
  1063. package/dist/core/vocabulary/maturity.js +216 -0
  1064. package/dist/core/vocabulary/maturity.js.map +1 -0
  1065. package/dist/core/vocabulary/report.js +90 -0
  1066. package/dist/core/vocabulary/report.js.map +1 -0
  1067. package/dist/core/vocabulary/steps.js +266 -0
  1068. package/dist/core/vocabulary/steps.js.map +1 -0
  1069. package/dist/core/workspace/discover.js +239 -0
  1070. package/dist/core/workspace/discover.js.map +1 -0
  1071. package/dist/core/workspace/render.js +52 -0
  1072. package/dist/core/workspace/render.js.map +1 -0
  1073. package/examples/README.md +232 -0
  1074. package/examples/docs/architecture/adrs/0001-transactional-outbox.md +33 -0
  1075. package/examples/docs/architecture/capabilities.yaml +31 -0
  1076. package/examples/docs/architecture/landscape.likec4 +336 -0
  1077. package/examples/docs/architecture/obligations.yaml +23 -0
  1078. package/examples/docs/architecture/permissions.yaml +50 -0
  1079. package/examples/docs/architecture/services.likec4 +70 -0
  1080. package/examples/docs/architecture/subsystems.likec4 +18 -0
  1081. package/examples/docs/architecture/usecases/order-notification.likec4 +74 -0
  1082. package/examples/docs/capabilities/checkout/spec.md +55 -0
  1083. package/examples/docs/capabilities/identity/tokens/spec.md +42 -0
  1084. package/examples/docs/capabilities/order-notifications/spec.md +43 -0
  1085. package/examples/docs/features/FEAT-101-payment-splitting/adrs/0001-dedicated-split-service.md +18 -0
  1086. package/examples/docs/features/FEAT-101-payment-splitting/delta.likec4 +94 -0
  1087. package/examples/docs/features/FEAT-101-payment-splitting/intent.md +44 -0
  1088. package/examples/docs/features/FEAT-101-payment-splitting/specs/checkout-web/spec.md +21 -0
  1089. package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-service/asyncapi.yaml +132 -0
  1090. package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-service/spec.md +36 -0
  1091. package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-split-service/arch.spec.md +40 -0
  1092. package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-split-service/openapi.yaml +116 -0
  1093. package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-split-service/spec.md +55 -0
  1094. package/examples/docs/features/FEAT-112-retire-order-v1/intent.md +35 -0
  1095. package/examples/docs/features/FEAT-112-retire-order-v1/specs/order-service/openapi.yaml +31 -0
  1096. package/examples/docs/features/FEAT-112-retire-order-v1/specs/order-service/spec.md +17 -0
  1097. package/examples/docs/features/archive/FEAT-088-refunds/.loam-before/files/architecture/landscape.likec4 +253 -0
  1098. package/examples/docs/features/archive/FEAT-088-refunds/.loam-before/files/services/order-service/spec.md +121 -0
  1099. package/examples/docs/features/archive/FEAT-088-refunds/.loam-before/files/services/payment-service/openapi.yaml +111 -0
  1100. package/examples/docs/features/archive/FEAT-088-refunds/.loam-before/files/services/payment-service/spec.md +58 -0
  1101. package/examples/docs/features/archive/FEAT-088-refunds/.loam-before/manifest.json +32 -0
  1102. package/examples/docs/features/archive/FEAT-088-refunds/adrs/0001-refunds-stay-in-payment-service.md +26 -0
  1103. package/examples/docs/features/archive/FEAT-088-refunds/delta.likec4 +28 -0
  1104. package/examples/docs/features/archive/FEAT-088-refunds/intent.md +26 -0
  1105. package/examples/docs/features/archive/FEAT-088-refunds/specs/order-service/spec.md +37 -0
  1106. package/examples/docs/features/archive/FEAT-088-refunds/specs/payment-service/openapi.yaml +73 -0
  1107. package/examples/docs/features/archive/FEAT-088-refunds/specs/payment-service/spec.md +23 -0
  1108. package/examples/docs/features/archive/FEAT-088-refunds/verification.yaml +76 -0
  1109. package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/files/architecture/landscape.likec4 +275 -0
  1110. package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/files/services/payment-service/asyncapi.yaml +96 -0
  1111. package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/files/services/payment-service/spec.md +82 -0
  1112. package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/files/services/platform/notification-service/asyncapi.yaml +164 -0
  1113. package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/files/services/platform/notification-service/spec.md +91 -0
  1114. package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/manifest.json +46 -0
  1115. package/examples/docs/features/archive/FEAT-120-refund-notification/delta.likec4 +36 -0
  1116. package/examples/docs/features/archive/FEAT-120-refund-notification/intent.md +22 -0
  1117. package/examples/docs/features/archive/FEAT-120-refund-notification/scenario-report.json +10 -0
  1118. package/examples/docs/features/archive/FEAT-120-refund-notification/specs/notification-service/asyncapi.yaml +208 -0
  1119. package/examples/docs/features/archive/FEAT-120-refund-notification/specs/notification-service/spec.md +24 -0
  1120. package/examples/docs/features/archive/FEAT-120-refund-notification/specs/payment-service/asyncapi.yaml +137 -0
  1121. package/examples/docs/features/archive/FEAT-120-refund-notification/specs/payment-service/spec.md +31 -0
  1122. package/examples/docs/features/archive/FEAT-120-refund-notification/verification.yaml +84 -0
  1123. package/examples/docs/glossary/order.md +15 -0
  1124. package/examples/docs/glossary/payments/authorization.md +14 -0
  1125. package/examples/docs/likec4.config.json +8 -0
  1126. package/examples/docs/loam.json +3 -0
  1127. package/examples/docs/services/checkout-web/model.likec4 +92 -0
  1128. package/examples/docs/services/checkout-web/spec.md +91 -0
  1129. package/examples/docs/services/checkout-web/ui/pages/checkout.page.yaml +40 -0
  1130. package/examples/docs/services/checkout-web/ui/pages/order-status.page.yaml +24 -0
  1131. package/examples/docs/services/checkout-web/ui/pages/split-payment.page.yaml +26 -0
  1132. package/examples/docs/services/order-service/adrs/0001-orchestrated-order-lifecycle.md +52 -0
  1133. package/examples/docs/services/order-service/arch.spec.md +134 -0
  1134. package/examples/docs/services/order-service/asyncapi.yaml +109 -0
  1135. package/examples/docs/services/order-service/health.yaml +57 -0
  1136. package/examples/docs/services/order-service/model.likec4 +126 -0
  1137. package/examples/docs/services/order-service/openapi.yaml +257 -0
  1138. package/examples/docs/services/order-service/runbook.md +62 -0
  1139. package/examples/docs/services/order-service/spec.md +134 -0
  1140. package/examples/docs/services/payment-service/adrs/0001-payments-outbox.md +18 -0
  1141. package/examples/docs/services/payment-service/adrs/0002-idempotency-keys-on-authorization.md +27 -0
  1142. package/examples/docs/services/payment-service/arch.spec.md +76 -0
  1143. package/examples/docs/services/payment-service/asyncapi.yaml +130 -0
  1144. package/examples/docs/services/payment-service/health.yaml +39 -0
  1145. package/examples/docs/services/payment-service/model.likec4 +68 -0
  1146. package/examples/docs/services/payment-service/openapi.yaml +151 -0
  1147. package/examples/docs/services/payment-service/runbook.md +37 -0
  1148. package/examples/docs/services/payment-service/spec.md +88 -0
  1149. package/examples/docs/services/platform/identity-service/adrs/0001-token-introspection-over-local-validation.md +60 -0
  1150. package/examples/docs/services/platform/identity-service/arch.spec.md +120 -0
  1151. package/examples/docs/services/platform/identity-service/health.yaml +70 -0
  1152. package/examples/docs/services/platform/identity-service/model.likec4 +81 -0
  1153. package/examples/docs/services/platform/identity-service/openapi.yaml +197 -0
  1154. package/examples/docs/services/platform/identity-service/runbook.md +95 -0
  1155. package/examples/docs/services/platform/identity-service/spec.md +119 -0
  1156. package/examples/docs/services/platform/notification-service/asyncapi.yaml +200 -0
  1157. package/examples/docs/services/platform/notification-service/health.yaml +40 -0
  1158. package/examples/docs/services/platform/notification-service/model.likec4 +97 -0
  1159. package/examples/docs/services/platform/notification-service/runbook.md +48 -0
  1160. package/examples/docs/services/platform/notification-service/spec.md +112 -0
  1161. package/examples/docs/services/platform/subsystem.yaml +2 -0
  1162. package/examples/fleet.yaml +57 -0
  1163. package/package.json +19 -6
  1164. package/dist/commands/adopt.js +0 -240
  1165. package/dist/commands/adopt.js.map +0 -1
  1166. package/dist/commands/archive.js +0 -1313
  1167. package/dist/commands/archive.js.map +0 -1
  1168. package/dist/commands/delta.js +0 -388
  1169. package/dist/commands/delta.js.map +0 -1
  1170. package/dist/commands/docs-repo-gate.js.map +0 -1
  1171. package/dist/commands/format.js +0 -17
  1172. package/dist/commands/format.js.map +0 -1
  1173. package/dist/commands/gherkin.js +0 -309
  1174. package/dist/commands/gherkin.js.map +0 -1
  1175. package/dist/commands/init.js.map +0 -1
  1176. package/dist/commands/list.js +0 -295
  1177. package/dist/commands/list.js.map +0 -1
  1178. package/dist/commands/migrate-openspec.js +0 -950
  1179. package/dist/commands/migrate-openspec.js.map +0 -1
  1180. package/dist/commands/new.js +0 -413
  1181. package/dist/commands/new.js.map +0 -1
  1182. package/dist/commands/rebase.js +0 -356
  1183. package/dist/commands/rebase.js.map +0 -1
  1184. package/dist/commands/show.js +0 -320
  1185. package/dist/commands/show.js.map +0 -1
  1186. package/dist/commands/status.js +0 -262
  1187. package/dist/commands/status.js.map +0 -1
  1188. package/dist/commands/unarchive.js +0 -317
  1189. package/dist/commands/unarchive.js.map +0 -1
  1190. package/dist/commands/validate.js +0 -1773
  1191. package/dist/commands/validate.js.map +0 -1
  1192. package/dist/commands/verify.js +0 -775
  1193. package/dist/commands/verify.js.map +0 -1
  1194. package/dist/commands/vouch.js +0 -421
  1195. package/dist/commands/vouch.js.map +0 -1
  1196. package/dist/core/agent.js +0 -2173
  1197. package/dist/core/agent.js.map +0 -1
  1198. package/dist/core/agents-stamp.js.map +0 -1
  1199. package/dist/core/arch.js +0 -130
  1200. package/dist/core/arch.js.map +0 -1
  1201. package/dist/core/asyncapi.js +0 -253
  1202. package/dist/core/asyncapi.js.map +0 -1
  1203. package/dist/core/brief.js +0 -755
  1204. package/dist/core/brief.js.map +0 -1
  1205. package/dist/core/coherence.js +0 -577
  1206. package/dist/core/coherence.js.map +0 -1
  1207. package/dist/core/concurrency.js.map +0 -1
  1208. package/dist/core/config.js.map +0 -1
  1209. package/dist/core/delta.js +0 -476
  1210. package/dist/core/delta.js.map +0 -1
  1211. package/dist/core/dependencies.js +0 -356
  1212. package/dist/core/dependencies.js.map +0 -1
  1213. package/dist/core/doctor.js +0 -596
  1214. package/dist/core/doctor.js.map +0 -1
  1215. package/dist/core/document-bytes.js.map +0 -1
  1216. package/dist/core/explore.js +0 -225
  1217. package/dist/core/explore.js.map +0 -1
  1218. package/dist/core/frontmatter.js.map +0 -1
  1219. package/dist/core/gherkin.js +0 -463
  1220. package/dist/core/gherkin.js.map +0 -1
  1221. package/dist/core/health.js +0 -67
  1222. package/dist/core/health.js.map +0 -1
  1223. package/dist/core/ids.js +0 -122
  1224. package/dist/core/ids.js.map +0 -1
  1225. package/dist/core/issue.js +0 -9
  1226. package/dist/core/issue.js.map +0 -1
  1227. package/dist/core/json.js +0 -74
  1228. package/dist/core/json.js.map +0 -1
  1229. package/dist/core/likec4.js +0 -489
  1230. package/dist/core/likec4.js.map +0 -1
  1231. package/dist/core/maturity.js +0 -66
  1232. package/dist/core/maturity.js.map +0 -1
  1233. package/dist/core/openapi-merge.js +0 -552
  1234. package/dist/core/openapi-merge.js.map +0 -1
  1235. package/dist/core/openapi.js.map +0 -1
  1236. package/dist/core/openspec-inventory.js +0 -1440
  1237. package/dist/core/openspec-inventory.js.map +0 -1
  1238. package/dist/core/path-safety.js.map +0 -1
  1239. package/dist/core/provenance.js +0 -787
  1240. package/dist/core/provenance.js.map +0 -1
  1241. package/dist/core/records.js.map +0 -1
  1242. package/dist/core/repo.js +0 -438
  1243. package/dist/core/repo.js.map +0 -1
  1244. package/dist/core/report.js +0 -47
  1245. package/dist/core/report.js.map +0 -1
  1246. package/dist/core/spec.js +0 -505
  1247. package/dist/core/spec.js.map +0 -1
  1248. package/dist/core/staging.js +0 -890
  1249. package/dist/core/staging.js.map +0 -1
  1250. package/dist/core/status.js +0 -1132
  1251. package/dist/core/status.js.map +0 -1
  1252. package/dist/core/steps.js +0 -72
  1253. package/dist/core/steps.js.map +0 -1
  1254. package/dist/core/verify.js +0 -807
  1255. package/dist/core/verify.js.map +0 -1
  1256. package/dist/core/version.js.map +0 -1
@@ -0,0 +1,49 @@
1
+ export const REFUSAL_MEANINGS = {
2
+ "no-config": "No loam.json at or above the working directory — the repo is not wired to a fleet; run `loam init --docs <dir>` once per repository rather than letting a command guess where the fleet lives.",
3
+ "config-invalid": "loam.json exists but cannot be loaded — repair the file (or delete it and re-run `loam init`); the code is distinct from `no-config` because running init over a corrupt config would silently rewrite it.",
4
+ "unknown-target": "The name resolves to nothing this command can address — no such service, feature, workflow or subject; the message offers the closest known names.",
5
+ "invalid-option": "The invocation itself is wrong — flags that contradict each other, a value that cannot be right, or a mistyped flag or command; nothing was read or written, and with `--json` anywhere in the arguments even commander's own usage errors arrive as this envelope.",
6
+ "already-exists": "Refusing to create over something that already exists — a feature directory, a workspace file, a name already claimed in the subsystem namespace — because overwriting would destroy work nobody asked to lose.",
7
+ "sources-absent": "`loam vouch` refuses to stamp a document that names no `sources` — with nothing tying the document to code, the staleness signal a vouch exists to power could never fire.",
8
+ "sources-path-missing": "`loam vouch` refuses to stamp: a listed source does not exist in the service repo, or is a glob pattern (not supported) — the digest would cover a different file set than the author meant.",
9
+ "not-coherent": "`loam archive` refuses: the feature has coherence issues, carried in `issues[]` with a per-issue `overridable` — fix the gating ones, or `--approve` the judgment calls; a refusal `--approve` cannot move says so in the message.",
10
+ "living-outside-requirements": "`loam archive` refuses: the LIVING spec holds a requirement outside its `## Requirements` section, and the merge rewrites only that section, so the requirement would land in the file twice — the fix is in the living document, and `--approve` does not override it.",
11
+ "archive-exists": "`loam archive` refuses: `features/archive/` already holds a directory for this feature — a destination collision, not a merge problem; move the old archive entry aside first.",
12
+ "merge-failed": "The merge — or a journaled writer's one-file commit — could not be computed or was rolled back; the living docs are unchanged, and re-running can work.",
13
+ "rollback-incomplete": "A failed write could not be fully undone: some files were not put back, and the message lists them — the one refusal that needs a human before anything else runs against the repo.",
14
+ "feature-active": "`loam unarchive` refuses: a `features/` directory for this feature already exists outside the archive, so restoring would write over work in flight — remove or rename it, then re-run.",
15
+ "snapshot-missing": "`loam unarchive` refuses: the archive carries no snapshot of what it overwrote (it predates snapshots, or was written by a different loam) — restore the living docs from version control instead.",
16
+ "snapshot-stale": "`loam unarchive` refuses: a file the archive wrote changed after it — a living document, another feature's document whose links into this one it rewrote, or one of the feature's own documents it relinked under `features/archive/` — so restoring is no longer an undo; re-run with `--force` to restore anyway, deliberately discarding those later changes.",
17
+ "snapshot-corrupt": "`loam unarchive` refuses: a snapshot pre-image no longer matches the digest the archive recorded for it, so restoring would write text nobody wrote — `--force` does not override this one; restore from version control.",
18
+ "commit-interrupted": "A journaled writer (archive, unarchive, rebase, vouch, new, gherkin, a recording verify) was killed mid-commit and this run cannot repair the leftovers on its own — the docs may be half-written; run the command the message names, or `loam doctor` for the file-by-file account.",
19
+ "restore-failed": "`loam unarchive` failed and everything was rolled back — nothing was restored, the living docs are unchanged, and re-running can work.",
20
+ "answers-unreadable": "A recording `loam verify` could not read a user-named file — the answers JSON, or a cucumber/contract report — as what it claims to be; fail-closed: nothing was recorded, so fix the file and re-run.",
21
+ "answers-mismatch": "The answer set does not answer the current checklist — an id not on it, a claim with no answer, or an entry for a claim a passed report already owns; re-derive the checklist and answer exactly what it asks.",
22
+ "answers-unevidenced": "A `confirmed` answer carries no evidence — evidence is `file:line`, and a claim you cannot show is `unconfirmed` with a note saying why, which is a successful record, not a failure.",
23
+ "service-mismatch": "A command that must run inside one service's own repository was told `--service` for a service this repository's loam.json does not declare: a recording `loam verify`, whose attestation must be bound to the code it is about; `loam gherkin`, whose .feature files land in that service's checkout; or `loam vouch`, whose `sources` resolve there. Run it from that service's own repo.",
24
+ "unknown-service": "Federated verify recording: the selected service is not one this feature's checklist (or the docs repo) knows, so there is nothing its attestation could bind to — fix the id.",
25
+ "repository-unavailable": "The repository this operation must be bound to (or read from) cannot be answered for — most commonly a writing `loam verify`, a `loam gherkin` or a `loam vouch` run where loam.json declares no `service` at all (the docs repo, usually), or a docs repo that cannot be enumerated — so the command refuses rather than guessing which service it is about.",
26
+ "record-federated": "`loam verify --record` without `--service` over a federated (schema 2) record — per-service files under `verification/`, or a one-file record carrying attestations — the all-at-once form would put one unattested answer set over other repositories' attestations, so it is refused naming the attestors; record per service instead.",
27
+ "record-unreadable": "A file of the verification record (`verification.yaml`, or one service's `verification/<svc>.yaml`) exists but cannot be read — broken YAML, git conflict markers, a summary contradicting its claims, or a per-service file holding anything but its own service's attestation. It is never overwritten and never reported as absent. The message names the file and the safe repair: a service's own file holds only that service's word, so it may be repaired, or deleted and recorded again from that service's repo; the one-file `verification.yaml` may hold other services' attestations, so it is repaired or restored from version control (after a merge, the copy on the branch you merged into), never deleted.",
28
+ "record-raced": "`loam verify --record` found the record changed between its locked read and the swap — an editor or a lock-ignoring writer landed first; nothing was written, and re-running merges over the record as it now stands.",
29
+ "gherkin-conflict": "`loam gherkin <FEAT>` would overwrite a `.feature` file owned by another feature still in flight — the whole emission refuses and names the owner; archive or coordinate with that feature first.",
30
+ "vouch-raced": "`loam vouch` found the spec changed between reading and stamping — another vouch or an edit landed first; nothing was written, so re-read and re-run.",
31
+ "vouch-unattended": "`loam vouch` with nobody on the other end of stdin and no `--yes` — the stamp is a person's claim to have read the document, and nobody was asked.",
32
+ "vouch-unattributable": "`loam vouch` could not learn who is vouching — git names no `user.email` here — and a stamp with nobody behind it records only that the word was written; set your git identity and re-run.",
33
+ "vouch-declined": "`loam vouch` asked and the person said no — nothing was stamped; a successful refusal, not a failure.",
34
+ "docs-missing": "`docsDir` in loam.json points at nothing — the docs repo was never cloned, or the path is wrong; a read command refuses rather than reporting an empty fleet, and `loam doctor` names the wiring to fix.",
35
+ "services-missing": "`docsDir` is a directory but holds no `services/` — it is some other directory, most often the service repo itself after a typo; fix the pointer rather than scaffolding a second source of truth beside the real one.",
36
+ "docs-busy": "Another loam writer holds the docs repo's advisory lock — nothing was read or written, and re-running once it finishes works; a lock nothing will ever release shows up in `loam doctor` as a blocker.",
37
+ "subsystem-not-empty": "`loam subsystem` rm refuses a subsystem that still holds members — services or child subsystems, named in the message — because a destructive command never picks targets the caller did not name; move them out first, then re-run.",
38
+ "move-uncommitted": "A subsystem move/rename refuses because git reports uncommitted or untracked paths under a directory being moved, or in a document outside it whose links the move would rewrite — the move would sweep them into a change nobody reviewed; commit, `git stash -u`, or remove them, then re-run.",
39
+ "move-failed": "A subsystem move/rename failed and was rolled back cleanly — every rename undone, the generated views file restored, the docs unchanged; re-running can work.",
40
+ "no-members": "`loam open` found no service checkout bound to this docs repo under any scanned root — the workspace would hold only the docs repo; clone a bound checkout beside it, or point `--root` at where the checkouts live.",
41
+ "binding-duplicate": "Two discovered repositories' committed loam.json files declare the same `service` for this docs repo — loam will not guess which checkout speaks for the service; narrow the scan with `--root`, or fix the stray binding.",
42
+ "owners-unreadable": "`loam list --owners` could not use the named CODEOWNERS file — the path cannot be read, or a line does not parse as `pattern owner…` (the message names the line); fail-closed, because a half-read ownership file must never file a service under the wrong team.",
43
+ "seed-file-invalid": "`loam seed`'s fleet file is missing, unreadable, not YAML, the wrong shape, carries an illegal id — or no longer names every existing `services/<id>/` (that refusal lists the exact ids as `missingServices`); the message names the file and line, and editing the file and re-running succeeds.",
44
+ "seed-duplicate-service": "fleet.yaml declares one name twice — as two services, or as both a service and an external/subsystem; service ids, subsystem names and externals share one flat namespace, both declaration lines are named, and renaming one fixes it.",
45
+ "seed-unknown-subsystem": "A service's `subsystem:` in fleet.yaml names nothing `subsystems:` declares — the message carries a did-you-mean over the names the file really declares; add the subsystem or fix the spelling, then re-run.",
46
+ "seed-landscape-edited": "architecture/landscape.likec4 carries hand edits (the line-1 stamp's digest no longer matches) or was authored some other way, which includes anything written ABOVE the scaffold's stub — `loam seed` never overwrites human work and wrote nothing. Seed runs once, before any operation is drawn: fleet.yaml cannot carry `metadata { op }`, publishes or consumes, so once the map holds them it grows without seed — `loam adopt --service <id>` for a new service, a feature's C4 delta for everything else. Folding the edits into fleet.yaml and deleting the file works only when every edit is a service, subsystem or plain call fleet.yaml can say.",
47
+ internal: "An unexpected throw — the one refusal with no stable meaning; it exists so a `--json` consumer still receives an envelope instead of a stack trace, and a repeatable `internal` is a loam defect worth reporting.",
48
+ };
49
+ //# sourceMappingURL=refusals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refusals.js","sourceRoot":"","sources":["../../../src/core/explain/refusals.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW,EACT,gMAAgM;IAClM,gBAAgB,EACd,4MAA4M;IAC9M,gBAAgB,EACd,oJAAoJ;IACtJ,gBAAgB,EACd,qQAAqQ;IACvQ,gBAAgB,EACd,iNAAiN;IACnN,gBAAgB,EACd,4KAA4K;IAC9K,sBAAsB,EACpB,8LAA8L;IAChM,cAAc,EACZ,oOAAoO;IACtO,6BAA6B,EAC3B,yQAAyQ;IAC3Q,gBAAgB,EACd,gLAAgL;IAClL,cAAc,EACZ,yJAAyJ;IAC3J,qBAAqB,EACnB,qLAAqL;IACvL,gBAAgB,EACd,yLAAyL;IAC3L,kBAAkB,EAChB,oMAAoM;IACtM,gBAAgB,EACd,kWAAkW;IACpW,kBAAkB,EAChB,2NAA2N;IAC7N,oBAAoB,EAClB,sRAAsR;IACxR,gBAAgB,EACd,wIAAwI;IAC1I,oBAAoB,EAClB,wMAAwM;IAC1M,kBAAkB,EAChB,gNAAgN;IAClN,qBAAqB,EACnB,uLAAuL;IACzL,kBAAkB,EAChB,6XAA6X;IAC/X,iBAAiB,EACf,gLAAgL;IAClL,wBAAwB,EACtB,+VAA+V;IACjW,kBAAkB,EAChB,0UAA0U;IAC5U,mBAAmB,EACjB,+rBAA+rB;IACjsB,cAAc,EACZ,uNAAuN;IACzN,kBAAkB,EAChB,mMAAmM;IACrM,aAAa,EACX,uJAAuJ;IACzJ,kBAAkB,EAChB,oJAAoJ;IACtJ,sBAAsB,EACpB,6LAA6L;IAC/L,gBAAgB,EACd,uGAAuG;IACzG,cAAc,EACZ,0MAA0M;IAC5M,kBAAkB,EAChB,wNAAwN;IAC1N,WAAW,EACT,wMAAwM;IAC1M,qBAAqB,EACnB,sOAAsO;IACxO,kBAAkB,EAChB,kSAAkS;IACpS,aAAa,EACX,+JAA+J;IACjK,YAAY,EACV,sNAAsN;IACxN,mBAAmB,EACjB,4NAA4N;IAC9N,mBAAmB,EACjB,oQAAoQ;IACtQ,mBAAmB,EACjB,oSAAoS;IACtS,wBAAwB,EACtB,yOAAyO;IAC3O,wBAAwB,EACtB,+MAA+M;IACjN,uBAAuB,EACrB,ioBAAioB;IACnoB,QAAQ,EACN,mNAAmN;CACzK,CAAC","sourcesContent":["/**\n * One sentence per envelope refusal code, for `loam explain`.\n *\n * This is the one deliberate restatement in the explain lookup, and the\n * compiler is its drift test: unlike the finding codes — whose prose ships in\n * the /loam-check fix tables and is PARSED at runtime (fix-tables.ts) — the\n * `ErrorCode` union's meanings live only in doc comments, which are erased,\n * so there is no runtime constant to read. `satisfies Record<ErrorCode,\n * string>` makes the pairing exhaustive both ways: a new union member cannot\n * ship without a row here (missing key fails typecheck), and a row for a\n * retired code fails the same way. What tsc cannot pin is accuracy — a\n * reworded doc comment can drift from its sentence — which is why each row\n * stays ONE sentence in the union's own voice (what happened, what it means,\n * whether re-running can work) rather than growing a paragraph of its own.\n */\nimport type { ErrorCode } from \"../envelope/json.js\";\n\nexport const REFUSAL_MEANINGS = {\n \"no-config\":\n \"No loam.json at or above the working directory — the repo is not wired to a fleet; run `loam init --docs <dir>` once per repository rather than letting a command guess where the fleet lives.\",\n \"config-invalid\":\n \"loam.json exists but cannot be loaded — repair the file (or delete it and re-run `loam init`); the code is distinct from `no-config` because running init over a corrupt config would silently rewrite it.\",\n \"unknown-target\":\n \"The name resolves to nothing this command can address — no such service, feature, workflow or subject; the message offers the closest known names.\",\n \"invalid-option\":\n \"The invocation itself is wrong — flags that contradict each other, a value that cannot be right, or a mistyped flag or command; nothing was read or written, and with `--json` anywhere in the arguments even commander's own usage errors arrive as this envelope.\",\n \"already-exists\":\n \"Refusing to create over something that already exists — a feature directory, a workspace file, a name already claimed in the subsystem namespace — because overwriting would destroy work nobody asked to lose.\",\n \"sources-absent\":\n \"`loam vouch` refuses to stamp a document that names no `sources` — with nothing tying the document to code, the staleness signal a vouch exists to power could never fire.\",\n \"sources-path-missing\":\n \"`loam vouch` refuses to stamp: a listed source does not exist in the service repo, or is a glob pattern (not supported) — the digest would cover a different file set than the author meant.\",\n \"not-coherent\":\n \"`loam archive` refuses: the feature has coherence issues, carried in `issues[]` with a per-issue `overridable` — fix the gating ones, or `--approve` the judgment calls; a refusal `--approve` cannot move says so in the message.\",\n \"living-outside-requirements\":\n \"`loam archive` refuses: the LIVING spec holds a requirement outside its `## Requirements` section, and the merge rewrites only that section, so the requirement would land in the file twice — the fix is in the living document, and `--approve` does not override it.\",\n \"archive-exists\":\n \"`loam archive` refuses: `features/archive/` already holds a directory for this feature — a destination collision, not a merge problem; move the old archive entry aside first.\",\n \"merge-failed\":\n \"The merge — or a journaled writer's one-file commit — could not be computed or was rolled back; the living docs are unchanged, and re-running can work.\",\n \"rollback-incomplete\":\n \"A failed write could not be fully undone: some files were not put back, and the message lists them — the one refusal that needs a human before anything else runs against the repo.\",\n \"feature-active\":\n \"`loam unarchive` refuses: a `features/` directory for this feature already exists outside the archive, so restoring would write over work in flight — remove or rename it, then re-run.\",\n \"snapshot-missing\":\n \"`loam unarchive` refuses: the archive carries no snapshot of what it overwrote (it predates snapshots, or was written by a different loam) — restore the living docs from version control instead.\",\n \"snapshot-stale\":\n \"`loam unarchive` refuses: a file the archive wrote changed after it — a living document, another feature's document whose links into this one it rewrote, or one of the feature's own documents it relinked under `features/archive/` — so restoring is no longer an undo; re-run with `--force` to restore anyway, deliberately discarding those later changes.\",\n \"snapshot-corrupt\":\n \"`loam unarchive` refuses: a snapshot pre-image no longer matches the digest the archive recorded for it, so restoring would write text nobody wrote — `--force` does not override this one; restore from version control.\",\n \"commit-interrupted\":\n \"A journaled writer (archive, unarchive, rebase, vouch, new, gherkin, a recording verify) was killed mid-commit and this run cannot repair the leftovers on its own — the docs may be half-written; run the command the message names, or `loam doctor` for the file-by-file account.\",\n \"restore-failed\":\n \"`loam unarchive` failed and everything was rolled back — nothing was restored, the living docs are unchanged, and re-running can work.\",\n \"answers-unreadable\":\n \"A recording `loam verify` could not read a user-named file — the answers JSON, or a cucumber/contract report — as what it claims to be; fail-closed: nothing was recorded, so fix the file and re-run.\",\n \"answers-mismatch\":\n \"The answer set does not answer the current checklist — an id not on it, a claim with no answer, or an entry for a claim a passed report already owns; re-derive the checklist and answer exactly what it asks.\",\n \"answers-unevidenced\":\n \"A `confirmed` answer carries no evidence — evidence is `file:line`, and a claim you cannot show is `unconfirmed` with a note saying why, which is a successful record, not a failure.\",\n \"service-mismatch\":\n \"A command that must run inside one service's own repository was told `--service` for a service this repository's loam.json does not declare: a recording `loam verify`, whose attestation must be bound to the code it is about; `loam gherkin`, whose .feature files land in that service's checkout; or `loam vouch`, whose `sources` resolve there. Run it from that service's own repo.\",\n \"unknown-service\":\n \"Federated verify recording: the selected service is not one this feature's checklist (or the docs repo) knows, so there is nothing its attestation could bind to — fix the id.\",\n \"repository-unavailable\":\n \"The repository this operation must be bound to (or read from) cannot be answered for — most commonly a writing `loam verify`, a `loam gherkin` or a `loam vouch` run where loam.json declares no `service` at all (the docs repo, usually), or a docs repo that cannot be enumerated — so the command refuses rather than guessing which service it is about.\",\n \"record-federated\":\n \"`loam verify --record` without `--service` over a federated (schema 2) record — per-service files under `verification/`, or a one-file record carrying attestations — the all-at-once form would put one unattested answer set over other repositories' attestations, so it is refused naming the attestors; record per service instead.\",\n \"record-unreadable\":\n \"A file of the verification record (`verification.yaml`, or one service's `verification/<svc>.yaml`) exists but cannot be read — broken YAML, git conflict markers, a summary contradicting its claims, or a per-service file holding anything but its own service's attestation. It is never overwritten and never reported as absent. The message names the file and the safe repair: a service's own file holds only that service's word, so it may be repaired, or deleted and recorded again from that service's repo; the one-file `verification.yaml` may hold other services' attestations, so it is repaired or restored from version control (after a merge, the copy on the branch you merged into), never deleted.\",\n \"record-raced\":\n \"`loam verify --record` found the record changed between its locked read and the swap — an editor or a lock-ignoring writer landed first; nothing was written, and re-running merges over the record as it now stands.\",\n \"gherkin-conflict\":\n \"`loam gherkin <FEAT>` would overwrite a `.feature` file owned by another feature still in flight — the whole emission refuses and names the owner; archive or coordinate with that feature first.\",\n \"vouch-raced\":\n \"`loam vouch` found the spec changed between reading and stamping — another vouch or an edit landed first; nothing was written, so re-read and re-run.\",\n \"vouch-unattended\":\n \"`loam vouch` with nobody on the other end of stdin and no `--yes` — the stamp is a person's claim to have read the document, and nobody was asked.\",\n \"vouch-unattributable\":\n \"`loam vouch` could not learn who is vouching — git names no `user.email` here — and a stamp with nobody behind it records only that the word was written; set your git identity and re-run.\",\n \"vouch-declined\":\n \"`loam vouch` asked and the person said no — nothing was stamped; a successful refusal, not a failure.\",\n \"docs-missing\":\n \"`docsDir` in loam.json points at nothing — the docs repo was never cloned, or the path is wrong; a read command refuses rather than reporting an empty fleet, and `loam doctor` names the wiring to fix.\",\n \"services-missing\":\n \"`docsDir` is a directory but holds no `services/` — it is some other directory, most often the service repo itself after a typo; fix the pointer rather than scaffolding a second source of truth beside the real one.\",\n \"docs-busy\":\n \"Another loam writer holds the docs repo's advisory lock — nothing was read or written, and re-running once it finishes works; a lock nothing will ever release shows up in `loam doctor` as a blocker.\",\n \"subsystem-not-empty\":\n \"`loam subsystem` rm refuses a subsystem that still holds members — services or child subsystems, named in the message — because a destructive command never picks targets the caller did not name; move them out first, then re-run.\",\n \"move-uncommitted\":\n \"A subsystem move/rename refuses because git reports uncommitted or untracked paths under a directory being moved, or in a document outside it whose links the move would rewrite — the move would sweep them into a change nobody reviewed; commit, `git stash -u`, or remove them, then re-run.\",\n \"move-failed\":\n \"A subsystem move/rename failed and was rolled back cleanly — every rename undone, the generated views file restored, the docs unchanged; re-running can work.\",\n \"no-members\":\n \"`loam open` found no service checkout bound to this docs repo under any scanned root — the workspace would hold only the docs repo; clone a bound checkout beside it, or point `--root` at where the checkouts live.\",\n \"binding-duplicate\":\n \"Two discovered repositories' committed loam.json files declare the same `service` for this docs repo — loam will not guess which checkout speaks for the service; narrow the scan with `--root`, or fix the stray binding.\",\n \"owners-unreadable\":\n \"`loam list --owners` could not use the named CODEOWNERS file — the path cannot be read, or a line does not parse as `pattern owner…` (the message names the line); fail-closed, because a half-read ownership file must never file a service under the wrong team.\",\n \"seed-file-invalid\":\n \"`loam seed`'s fleet file is missing, unreadable, not YAML, the wrong shape, carries an illegal id — or no longer names every existing `services/<id>/` (that refusal lists the exact ids as `missingServices`); the message names the file and line, and editing the file and re-running succeeds.\",\n \"seed-duplicate-service\":\n \"fleet.yaml declares one name twice — as two services, or as both a service and an external/subsystem; service ids, subsystem names and externals share one flat namespace, both declaration lines are named, and renaming one fixes it.\",\n \"seed-unknown-subsystem\":\n \"A service's `subsystem:` in fleet.yaml names nothing `subsystems:` declares — the message carries a did-you-mean over the names the file really declares; add the subsystem or fix the spelling, then re-run.\",\n \"seed-landscape-edited\":\n \"architecture/landscape.likec4 carries hand edits (the line-1 stamp's digest no longer matches) or was authored some other way, which includes anything written ABOVE the scaffold's stub — `loam seed` never overwrites human work and wrote nothing. Seed runs once, before any operation is drawn: fleet.yaml cannot carry `metadata { op }`, publishes or consumes, so once the map holds them it grows without seed — `loam adopt --service <id>` for a new service, a feature's C4 delta for everything else. Folding the edits into fleet.yaml and deleting the file works only when every edit is a service, subsystem or plain call fleet.yaml can say.\",\n internal:\n \"An unexpected throw — the one refusal with no stable meaning; it exists so a `--json` consumer still receives an envelope instead of a stack trace, and a repeatable `internal` is a loam defect worth reporting.\",\n} as const satisfies Record<ErrorCode, string>;\n"]}
@@ -0,0 +1,227 @@
1
+ export const DOCUMENT_TERMS = {
2
+ heading: "the documents — what loam reads and grades",
3
+ terms: [
4
+ {
5
+ term: "delta",
6
+ aliases: ["deltas"],
7
+ paragraph: "A delta is a feature's change, stated against the living docs rather than in them. " +
8
+ "The living spec.md is the complete current state; a feature's copy is a diff against it, reviewed as a diff, with " +
9
+ "requirements grouped under `## ADDED`, `## MODIFIED` or `## REMOVED Requirements`; delta.likec4 carries the " +
10
+ "architecture change with every changed element tagged `#<FEAT>` (untagged elements are context, not changes); " +
11
+ "and the contract deltas are complete documents whose baseline pins mark what is merely quoted. " +
12
+ "`loam archive` folds the delta into the living state. The `delta.*` findings grade that algebra — whether the " +
13
+ "diff still applies to the living document it claims to change.",
14
+ pins: [
15
+ // Both used to pin the long layout opening, which stopped shipping when
16
+ // AGENTS.md was condensed; ORIENTATION's "What is where" teaches the same
17
+ // two facts in its own words. Re-paired on the clauses the two texts
18
+ // already share rather than by rewording either side, so `loam explain
19
+ // delta` prints exactly what it printed before.
20
+ { source: "AGENTS_MD", phrase: "the complete current state" },
21
+ { source: "AGENTS_MD", phrase: "reviewed as a diff" },
22
+ ],
23
+ },
24
+ {
25
+ term: "baseline",
26
+ aliases: ["based-on", "baselines"],
27
+ paragraph: "A baseline is the pin tying a delta to the living version it was written against. It rides as `Based-On:` under a " +
28
+ "MODIFIED/REMOVED requirement and `x-loam-based-on` on a contract surface — written by `loam rebase <FEAT>`, never by " +
29
+ "hand. It exists because a MODIFIED requirement carries its FULL new text, not a diff, so the merge REPLACES the " +
30
+ "living text wholesale; the pin is what lets archive tell an edit from a quote and refuse a stale one " +
31
+ "(`delta.baseline-stale`, `openapi.baseline-stale`) instead of silently reverting work that landed in between. " +
32
+ `**Restamping is not resolving.** A pin claims "I read this version". ` +
33
+ "Re-read the living text and fold in what you still mean before you re-pin.",
34
+ pins: [
35
+ // Without the sentence-initial "A": the paragraph embeds the clause
36
+ // mid-sentence, and a pin is a verbatim substring of BOTH sides.
37
+ { source: "SPINE_PAGE", phrase: "MODIFIED requirement carries its FULL new text, not a diff" },
38
+ { source: "SPINE_PAGE", phrase: `**Restamping is not resolving.** A pin claims "I read this version".` },
39
+ ],
40
+ },
41
+ {
42
+ term: "spine",
43
+ aliases: [],
44
+ paragraph: "The spine is a family of exact joins, not one magic id. Its ids are the feature tag (`#FEAT-101`), the service " +
45
+ "binding (`metadata { service }`), the synchronous operationId, the asynchronous message name, `Covers:` " +
46
+ "architecture coverage, `Requires:` permissions and `Capability:` realization. Three artifacts describe one synchronous call — " +
47
+ "a C4 edge, a requirement's `Operations:` line, the provider's openapi.yaml — joined by the operationId, and that " +
48
+ "join is what `loam validate` checks. Spell it identically in all three places. The `spine.*` findings are exactly " +
49
+ "these joins failing to resolve, and a mismatch is a broken contract between services, not a style problem.",
50
+ pins: [
51
+ { source: "SPINE_PAGE", phrase: "The spine is a family of exact joins, not one magic id" },
52
+ { source: "SPINE_PAGE", phrase: "Spell it identically in all three places." },
53
+ ],
54
+ },
55
+ {
56
+ term: "axis",
57
+ aliases: ["axes"],
58
+ paragraph: "An axis is one language a service is described in, and loam's checks are joins BETWEEN axes rather than opinions within one. " +
59
+ "The three: architecture — a C4 edge names the operation it calls; behaviour — a requirement declares the " +
60
+ "operations it governs; contract — the provider's `openapi.yaml` defines it (asyncapi.yaml is the same axis for " +
61
+ "events, and arch.spec.md is the behaviour axis for architectural obligations). A finding code's prefix names the " +
62
+ "axes that disagree — `spec-api.op-undefined` is the behaviour axis joined against the contract axis — and the fix " +
63
+ "is whichever side is wrong about the world.",
64
+ pins: [
65
+ { source: "SPINE_PAGE", phrase: "architecture — a C4 edge names the operation it calls" },
66
+ { source: "SPINE_PAGE", phrase: "behaviour — a requirement declares the operations it governs" },
67
+ { source: "SPINE_PAGE", phrase: "contract — the provider's `openapi.yaml` defines it" },
68
+ ],
69
+ },
70
+ {
71
+ // The `coherence` row of `loam status <FEAT>` and the `coherence:` line of
72
+ // `loam validate --feature` both print the word bare, and the row's last
73
+ // count — "N stop it" — is the one a newcomer reads as a severity.
74
+ // Gating and severity are two questions; this entry exists to say so in
75
+ // the place the row sends a reader.
76
+ term: "coherence",
77
+ aliases: ["coherent", "gates", "gating"],
78
+ paragraph: "Coherence is whether a feature's documents agree with each other and with the fleet in flight. " +
79
+ "The C4 delta, the requirement deltas and the contracts are joined exactly, as the spine spells them. " +
80
+ "`loam validate --feature <FEAT>` grades it — a change's three axes against each other — and prints " +
81
+ "`coherence: ✓ C4 · requirements · OpenAPI agree` when every join holds. " +
82
+ "`loam status <FEAT>` prints a `coherence` row counting what it graded on the feature — the union of what " +
83
+ "`loam validate --feature` and `loam archive` refuse — as errors, warnings, and how many stop it: the " +
84
+ "findings `loam validate --feature` or `loam archive` refuses on right now. " +
85
+ "Gating is not severity: archive is gated on coherence, so a finding carrying `gates: true` " +
86
+ "will stop `loam archive` even when it is a warning (`delta.requirement-not-merged` warns but gates). " +
87
+ "`--approve` overrides only the gating findings that are judgement calls, never a mechanical loss. " +
88
+ "Note what it does not read: coherence is something loam computed from the documents, and whether the code " +
89
+ "exists is the done-check's question (`loam explain claim`).",
90
+ pins: [
91
+ { source: "CHECK", phrase: "a change's three axes against each other" },
92
+ { source: "CHECK", phrase: "will stop `loam archive` even when it is a warning" },
93
+ { source: "AGENTS_MD", phrase: "archive is gated on coherence" },
94
+ { source: "DONE_CHECK", phrase: "coherence is something loam computed from the documents" },
95
+ ],
96
+ },
97
+ {
98
+ term: "vouch",
99
+ aliases: ["vouched", "vouching"],
100
+ paragraph: "A vouch is the human promotion of a living document from draft to verified. " +
101
+ "Promoting draft to verified is their call, not yours: a person runs `loam vouch --service <id>` in the service's own repo, " +
102
+ "and the stamp records the date, who vouched (from git), and digests of both the source files and the document body — " +
103
+ "which is what lets a later `loam validate` report `sources.stale` and `content.stale` when the code or the words move. " +
104
+ "**`loam vouch` is not yours to run**, and it is built so that it cannot be. It refuses unattended runs (`vouch-unattended`), " +
105
+ "records a no as `vouch-declined`, and refuses to stamp when git can name nobody (`vouch-unattributable`); " +
106
+ "when your work leaves a document ready, hand back and say a vouch is owed.",
107
+ pins: [
108
+ // Both phrases left AGENTS.md with the frontmatter teaching and are now
109
+ // in `loam instructions loam-authoring`. Repaired by following the text,
110
+ // not by rewording the paragraph to something still in the file: the
111
+ // pairing exists so this paragraph and the teaching cannot drift, and
112
+ // re-pinning to a different sentence would have quietly ended it.
113
+ { source: "AUTHORING", phrase: "Promoting draft to verified is their call, not yours" },
114
+ { source: "AUTHORING", phrase: "**`loam vouch` is not yours to run**, and it is built so that it cannot be." },
115
+ ],
116
+ },
117
+ {
118
+ // The ladder is defined in core/vocabulary/maturity.ts, a doc comment no
119
+ // reader of the binary sees, and `loam list` and the `--all` scorecard
120
+ // print its five words as bare counts ("0 empty · 0 partial · …"). The
121
+ // pins are the two places a shipped page USES a rung, which is as close
122
+ // as the shipped text comes to defining one — the definitions below are
123
+ // that module's, restated.
124
+ term: "maturity",
125
+ aliases: ["rung", "rungs", "empty", "partial", "documented", "sourced"],
126
+ paragraph: "Maturity is how far a service's documentation has got: empty, partial, documented, sourced or vouched. " +
127
+ "Those are the five rungs of one ladder, in order. " +
128
+ "`loam list` prints each service's rung and a `maturity:` rollup, and `loam validate --all` prints the same five " +
129
+ "counts on its fleet scorecard's `services` line. " +
130
+ "`empty`: `services/<id>/` exists and nothing is in it. `partial`: some documents, but not the required set — " +
131
+ "model.likec4 and spec.md, plus openapi.yaml unless the fleet map proves nothing calls the service. " +
132
+ "`documented`: the required set is present. `sourced`: the living spec declares `sources`, so something ties it to code. " +
133
+ "`vouched`: a person stamped it with `loam vouch` — `status: verified` with a sources digest behind it — and " +
134
+ "the maturity rung stays `vouched` when the person read only a sample, which the text views mark `vouched (sampled)`. " +
135
+ "Each rung stands on every rung below it, and the ladder reads presence and provenance only, never completeness: " +
136
+ "a service with one endpoint documented out of thirty climbs it as fast as a thorough one. It matters before a " +
137
+ "feature: a service at `empty` or `partial` has no baseline to write a delta against, so the work starts with " +
138
+ "`loam adopt --service <id>`.",
139
+ pins: [
140
+ { source: "FEATURE", phrase: "a service at `empty` or `partial` has no baseline to" },
141
+ { source: "AUTHORING", phrase: "the maturity rung stays `vouched`" },
142
+ ],
143
+ },
144
+ ],
145
+ };
146
+ export const DRAWING_TERMS = {
147
+ heading: "the picture — drawing the map and writing for a person",
148
+ terms: [
149
+ {
150
+ // The kind names are aliases because they are what an agent meets on an
151
+ // edge (`-[delivers]->`) and asks about; `readsWrites` is lowercased, as
152
+ // every alias is, because the lookup lowercases the subject first.
153
+ term: "kind",
154
+ aliases: [
155
+ "kinds",
156
+ "relationship-kind",
157
+ "arrow",
158
+ "direction",
159
+ "publishes",
160
+ "delivers",
161
+ "reads",
162
+ "writes",
163
+ "readswrites",
164
+ "calls",
165
+ "connects",
166
+ ],
167
+ paragraph: "A relationship kind says what an edge carries, and so which way its arrow points. " +
168
+ "`publishes` runs from a producer to a topic and `delivers` from the topic to a consumer, beside the " +
169
+ "`metadata { publishes }` and `metadata { consumes }` the event spine joins on; `calls` is a synchronous request, " +
170
+ "beside `metadata { op }`; `reads`, `writes` and `readsWrites` are a service's use of a store, and a store edge is ALWAYS written " +
171
+ "service `->` store, with the arrowhead put where the data lands by the kind's style; `connects` is a " +
172
+ "connection whose direction nobody has established, drawn gray and dashed with no arrowhead. " +
173
+ "**Never guess a direction.** Give an edge a direction only from evidence: the code, a configuration name " +
174
+ "that says which side a service is on, or its own asyncapi.yaml. Configuration that only lists an address is " +
175
+ "`connects`, and adopting the service from its code resolves it. The kinds are declared once in " +
176
+ "architecture/landscape.likec4's `specification` block, and again in a feature delta that draws one, and the " +
177
+ "living map must declare a kind before a feature using it archives. No check reads a kind: it is the picture, and " +
178
+ "the metadata is the join. `loam instructions loam-drawing` has the styles.",
179
+ pins: [
180
+ { source: "DRAWING", phrase: "**Never guess a direction.** Give an edge a direction only from evidence:" },
181
+ { source: "DRAWING", phrase: "a store edge is ALWAYS written" },
182
+ ],
183
+ },
184
+ {
185
+ term: "legend",
186
+ aliases: ["legend-view"],
187
+ paragraph: "A legend is a view in architecture/landscape.likec4 that draws ONE real " +
188
+ "edge of each kind the map uses, so a reader learns the colours from the fleet itself. It names real services, " +
189
+ "a real topic and a real store, each edge by both of its endpoints, and it gains a line when the map gains a " +
190
+ "kind. A view can name only elements the model declares, so `loam init` cannot scaffold one: the legend is " +
191
+ "written once the map has real edges of each kind.",
192
+ pins: [{ source: "DRAWING", phrase: "edge of each kind the map uses" }],
193
+ },
194
+ {
195
+ term: "overview",
196
+ aliases: ["overviews", "overview-view", "altitude"],
197
+ paragraph: "An overview is a view a person reads to answer one question about the fleet. " +
198
+ "**One question per view, at one altitude.** A fleet overview draws subsystem boxes, not services, at most " +
199
+ "about 20 nodes and 25 drawn lines, and the generated subsystem and service views are its drill-down. Above " +
200
+ "service altitude LikeC4 merges every relationship between two boxes into one line, and a line merged from " +
201
+ "different kinds is drawn in the default gray, so filter by one kind: " +
202
+ "`where kind is publishes` keeps the line amber, while a `kind is not` or an `or` filter still merges. " +
203
+ "Never author a `view … of` a subsystem or service element, which would take the drill-down from loam's " +
204
+ "generated views. `loam instructions loam-drawing` lists the spellings that render nothing.",
205
+ pins: [
206
+ { source: "DRAWING", phrase: "**One question per view, at one altitude.**" },
207
+ { source: "DRAWING", phrase: "`where kind is publishes` keeps the line amber" },
208
+ ],
209
+ },
210
+ {
211
+ term: "purpose",
212
+ aliases: ["narrative"],
213
+ paragraph: "A `## Purpose` section is the plain-language narrative of a spec delta: what the service does in the change, " +
214
+ "for someone who has never opened its code. " +
215
+ "Each spec delta opens with a plain-language `## Purpose`. Where the delta creates the living document — a " +
216
+ "new service's spec.md, a first arch.spec.md, a new capability — `loam archive` copies the section in as that " +
217
+ "document's narrative, beside the delta's title and frontmatter owner. Where the living document already exists, the " +
218
+ "section stays with the archived delta, and the archive plan says so; edit the living narrative directly when " +
219
+ "it should change. Nothing grades a purpose; `loam instructions loam-authoring`, \"Writing for a person\", has the shape.",
220
+ pins: [
221
+ { source: "AUTHORING", phrase: "Each spec delta opens with a plain-language `## Purpose`" },
222
+ { source: "AUTHORING", phrase: "section stays with the archived delta" },
223
+ ],
224
+ },
225
+ ],
226
+ };
227
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../../src/core/explain/terms/documents.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The document terms: the words for how loam reads a docs repo at rest — a\n * feature's change and the pin tying it to what it changes, the joins between\n * the three languages a service is described in, the agreement `loam archive`\n * is gated on, and the two dials of how far a service's documentation has got\n * (`loam vouch`, and the maturity ladder `loam list` and the fleet scorecard\n * print). The first five are the oldest entries in the registry and carry\n * their re-pairing history in the comments beside their pins.\n *\n * The second group below, `DRAWING_TERMS`, is the words for drawing the map\n * and writing a feature a person can follow. It is the vocabulary of the\n * `loam-drawing` page and of `loam-authoring`'s \"Writing for a person\". It\n * lives in this module rather than one of its own because ./ is at the\n * five-file cap, and because those words are about the same documents: a\n * relationship kind is part of landscape.likec4, and a `## Purpose` is part of\n * a spec delta.\n */\nimport type { TermGroup } from \"./entry.js\";\n\nexport const DOCUMENT_TERMS: TermGroup = {\n heading: \"the documents — what loam reads and grades\",\n terms: [\n {\n term: \"delta\",\n aliases: [\"deltas\"],\n paragraph:\n \"A delta is a feature's change, stated against the living docs rather than in them. \" +\n \"The living spec.md is the complete current state; a feature's copy is a diff against it, reviewed as a diff, with \" +\n \"requirements grouped under `## ADDED`, `## MODIFIED` or `## REMOVED Requirements`; delta.likec4 carries the \" +\n \"architecture change with every changed element tagged `#<FEAT>` (untagged elements are context, not changes); \" +\n \"and the contract deltas are complete documents whose baseline pins mark what is merely quoted. \" +\n \"`loam archive` folds the delta into the living state. The `delta.*` findings grade that algebra — whether the \" +\n \"diff still applies to the living document it claims to change.\",\n pins: [\n // Both used to pin the long layout opening, which stopped shipping when\n // AGENTS.md was condensed; ORIENTATION's \"What is where\" teaches the same\n // two facts in its own words. Re-paired on the clauses the two texts\n // already share rather than by rewording either side, so `loam explain\n // delta` prints exactly what it printed before.\n { source: \"AGENTS_MD\", phrase: \"the complete current state\" },\n { source: \"AGENTS_MD\", phrase: \"reviewed as a diff\" },\n ],\n },\n {\n term: \"baseline\",\n aliases: [\"based-on\", \"baselines\"],\n paragraph:\n \"A baseline is the pin tying a delta to the living version it was written against. It rides as `Based-On:` under a \" +\n \"MODIFIED/REMOVED requirement and `x-loam-based-on` on a contract surface — written by `loam rebase <FEAT>`, never by \" +\n \"hand. It exists because a MODIFIED requirement carries its FULL new text, not a diff, so the merge REPLACES the \" +\n \"living text wholesale; the pin is what lets archive tell an edit from a quote and refuse a stale one \" +\n \"(`delta.baseline-stale`, `openapi.baseline-stale`) instead of silently reverting work that landed in between. \" +\n `**Restamping is not resolving.** A pin claims \"I read this version\". ` +\n \"Re-read the living text and fold in what you still mean before you re-pin.\",\n pins: [\n // Without the sentence-initial \"A\": the paragraph embeds the clause\n // mid-sentence, and a pin is a verbatim substring of BOTH sides.\n { source: \"SPINE_PAGE\", phrase: \"MODIFIED requirement carries its FULL new text, not a diff\" },\n { source: \"SPINE_PAGE\", phrase: `**Restamping is not resolving.** A pin claims \"I read this version\".` },\n ],\n },\n {\n term: \"spine\",\n aliases: [],\n paragraph:\n \"The spine is a family of exact joins, not one magic id. Its ids are the feature tag (`#FEAT-101`), the service \" +\n \"binding (`metadata { service }`), the synchronous operationId, the asynchronous message name, `Covers:` \" +\n \"architecture coverage, `Requires:` permissions and `Capability:` realization. Three artifacts describe one synchronous call — \" +\n \"a C4 edge, a requirement's `Operations:` line, the provider's openapi.yaml — joined by the operationId, and that \" +\n \"join is what `loam validate` checks. Spell it identically in all three places. The `spine.*` findings are exactly \" +\n \"these joins failing to resolve, and a mismatch is a broken contract between services, not a style problem.\",\n pins: [\n { source: \"SPINE_PAGE\", phrase: \"The spine is a family of exact joins, not one magic id\" },\n { source: \"SPINE_PAGE\", phrase: \"Spell it identically in all three places.\" },\n ],\n },\n {\n term: \"axis\",\n aliases: [\"axes\"],\n paragraph:\n \"An axis is one language a service is described in, and loam's checks are joins BETWEEN axes rather than opinions within one. \" +\n \"The three: architecture — a C4 edge names the operation it calls; behaviour — a requirement declares the \" +\n \"operations it governs; contract — the provider's `openapi.yaml` defines it (asyncapi.yaml is the same axis for \" +\n \"events, and arch.spec.md is the behaviour axis for architectural obligations). A finding code's prefix names the \" +\n \"axes that disagree — `spec-api.op-undefined` is the behaviour axis joined against the contract axis — and the fix \" +\n \"is whichever side is wrong about the world.\",\n pins: [\n { source: \"SPINE_PAGE\", phrase: \"architecture — a C4 edge names the operation it calls\" },\n { source: \"SPINE_PAGE\", phrase: \"behaviour — a requirement declares the operations it governs\" },\n { source: \"SPINE_PAGE\", phrase: \"contract — the provider's `openapi.yaml` defines it\" },\n ],\n },\n {\n // The `coherence` row of `loam status <FEAT>` and the `coherence:` line of\n // `loam validate --feature` both print the word bare, and the row's last\n // count — \"N stop it\" — is the one a newcomer reads as a severity.\n // Gating and severity are two questions; this entry exists to say so in\n // the place the row sends a reader.\n term: \"coherence\",\n aliases: [\"coherent\", \"gates\", \"gating\"],\n paragraph:\n \"Coherence is whether a feature's documents agree with each other and with the fleet in flight. \" +\n \"The C4 delta, the requirement deltas and the contracts are joined exactly, as the spine spells them. \" +\n \"`loam validate --feature <FEAT>` grades it — a change's three axes against each other — and prints \" +\n \"`coherence: ✓ C4 · requirements · OpenAPI agree` when every join holds. \" +\n \"`loam status <FEAT>` prints a `coherence` row counting what it graded on the feature — the union of what \" +\n \"`loam validate --feature` and `loam archive` refuse — as errors, warnings, and how many stop it: the \" +\n \"findings `loam validate --feature` or `loam archive` refuses on right now. \" +\n \"Gating is not severity: archive is gated on coherence, so a finding carrying `gates: true` \" +\n \"will stop `loam archive` even when it is a warning (`delta.requirement-not-merged` warns but gates). \" +\n \"`--approve` overrides only the gating findings that are judgement calls, never a mechanical loss. \" +\n \"Note what it does not read: coherence is something loam computed from the documents, and whether the code \" +\n \"exists is the done-check's question (`loam explain claim`).\",\n pins: [\n { source: \"CHECK\", phrase: \"a change's three axes against each other\" },\n { source: \"CHECK\", phrase: \"will stop `loam archive` even when it is a warning\" },\n { source: \"AGENTS_MD\", phrase: \"archive is gated on coherence\" },\n { source: \"DONE_CHECK\", phrase: \"coherence is something loam computed from the documents\" },\n ],\n },\n {\n term: \"vouch\",\n aliases: [\"vouched\", \"vouching\"],\n paragraph:\n \"A vouch is the human promotion of a living document from draft to verified. \" +\n \"Promoting draft to verified is their call, not yours: a person runs `loam vouch --service <id>` in the service's own repo, \" +\n \"and the stamp records the date, who vouched (from git), and digests of both the source files and the document body — \" +\n \"which is what lets a later `loam validate` report `sources.stale` and `content.stale` when the code or the words move. \" +\n \"**`loam vouch` is not yours to run**, and it is built so that it cannot be. It refuses unattended runs (`vouch-unattended`), \" +\n \"records a no as `vouch-declined`, and refuses to stamp when git can name nobody (`vouch-unattributable`); \" +\n \"when your work leaves a document ready, hand back and say a vouch is owed.\",\n pins: [\n // Both phrases left AGENTS.md with the frontmatter teaching and are now\n // in `loam instructions loam-authoring`. Repaired by following the text,\n // not by rewording the paragraph to something still in the file: the\n // pairing exists so this paragraph and the teaching cannot drift, and\n // re-pinning to a different sentence would have quietly ended it.\n { source: \"AUTHORING\", phrase: \"Promoting draft to verified is their call, not yours\" },\n { source: \"AUTHORING\", phrase: \"**`loam vouch` is not yours to run**, and it is built so that it cannot be.\" },\n ],\n },\n {\n // The ladder is defined in core/vocabulary/maturity.ts, a doc comment no\n // reader of the binary sees, and `loam list` and the `--all` scorecard\n // print its five words as bare counts (\"0 empty · 0 partial · …\"). The\n // pins are the two places a shipped page USES a rung, which is as close\n // as the shipped text comes to defining one — the definitions below are\n // that module's, restated.\n term: \"maturity\",\n aliases: [\"rung\", \"rungs\", \"empty\", \"partial\", \"documented\", \"sourced\"],\n paragraph:\n \"Maturity is how far a service's documentation has got: empty, partial, documented, sourced or vouched. \" +\n \"Those are the five rungs of one ladder, in order. \" +\n \"`loam list` prints each service's rung and a `maturity:` rollup, and `loam validate --all` prints the same five \" +\n \"counts on its fleet scorecard's `services` line. \" +\n \"`empty`: `services/<id>/` exists and nothing is in it. `partial`: some documents, but not the required set — \" +\n \"model.likec4 and spec.md, plus openapi.yaml unless the fleet map proves nothing calls the service. \" +\n \"`documented`: the required set is present. `sourced`: the living spec declares `sources`, so something ties it to code. \" +\n \"`vouched`: a person stamped it with `loam vouch` — `status: verified` with a sources digest behind it — and \" +\n \"the maturity rung stays `vouched` when the person read only a sample, which the text views mark `vouched (sampled)`. \" +\n \"Each rung stands on every rung below it, and the ladder reads presence and provenance only, never completeness: \" +\n \"a service with one endpoint documented out of thirty climbs it as fast as a thorough one. It matters before a \" +\n \"feature: a service at `empty` or `partial` has no baseline to write a delta against, so the work starts with \" +\n \"`loam adopt --service <id>`.\",\n pins: [\n { source: \"FEATURE\", phrase: \"a service at `empty` or `partial` has no baseline to\" },\n { source: \"AUTHORING\", phrase: \"the maturity rung stays `vouched`\" },\n ],\n },\n ],\n};\n\nexport const DRAWING_TERMS: TermGroup = {\n heading: \"the picture — drawing the map and writing for a person\",\n terms: [\n {\n // The kind names are aliases because they are what an agent meets on an\n // edge (`-[delivers]->`) and asks about; `readsWrites` is lowercased, as\n // every alias is, because the lookup lowercases the subject first.\n term: \"kind\",\n aliases: [\n \"kinds\",\n \"relationship-kind\",\n \"arrow\",\n \"direction\",\n \"publishes\",\n \"delivers\",\n \"reads\",\n \"writes\",\n \"readswrites\",\n \"calls\",\n \"connects\",\n ],\n paragraph:\n \"A relationship kind says what an edge carries, and so which way its arrow points. \" +\n \"`publishes` runs from a producer to a topic and `delivers` from the topic to a consumer, beside the \" +\n \"`metadata { publishes }` and `metadata { consumes }` the event spine joins on; `calls` is a synchronous request, \" +\n \"beside `metadata { op }`; `reads`, `writes` and `readsWrites` are a service's use of a store, and a store edge is ALWAYS written \" +\n \"service `->` store, with the arrowhead put where the data lands by the kind's style; `connects` is a \" +\n \"connection whose direction nobody has established, drawn gray and dashed with no arrowhead. \" +\n \"**Never guess a direction.** Give an edge a direction only from evidence: the code, a configuration name \" +\n \"that says which side a service is on, or its own asyncapi.yaml. Configuration that only lists an address is \" +\n \"`connects`, and adopting the service from its code resolves it. The kinds are declared once in \" +\n \"architecture/landscape.likec4's `specification` block, and again in a feature delta that draws one, and the \" +\n \"living map must declare a kind before a feature using it archives. No check reads a kind: it is the picture, and \" +\n \"the metadata is the join. `loam instructions loam-drawing` has the styles.\",\n pins: [\n { source: \"DRAWING\", phrase: \"**Never guess a direction.** Give an edge a direction only from evidence:\" },\n { source: \"DRAWING\", phrase: \"a store edge is ALWAYS written\" },\n ],\n },\n {\n term: \"legend\",\n aliases: [\"legend-view\"],\n paragraph:\n \"A legend is a view in architecture/landscape.likec4 that draws ONE real \" +\n \"edge of each kind the map uses, so a reader learns the colours from the fleet itself. It names real services, \" +\n \"a real topic and a real store, each edge by both of its endpoints, and it gains a line when the map gains a \" +\n \"kind. A view can name only elements the model declares, so `loam init` cannot scaffold one: the legend is \" +\n \"written once the map has real edges of each kind.\",\n pins: [{ source: \"DRAWING\", phrase: \"edge of each kind the map uses\" }],\n },\n {\n term: \"overview\",\n aliases: [\"overviews\", \"overview-view\", \"altitude\"],\n paragraph:\n \"An overview is a view a person reads to answer one question about the fleet. \" +\n \"**One question per view, at one altitude.** A fleet overview draws subsystem boxes, not services, at most \" +\n \"about 20 nodes and 25 drawn lines, and the generated subsystem and service views are its drill-down. Above \" +\n \"service altitude LikeC4 merges every relationship between two boxes into one line, and a line merged from \" +\n \"different kinds is drawn in the default gray, so filter by one kind: \" +\n \"`where kind is publishes` keeps the line amber, while a `kind is not` or an `or` filter still merges. \" +\n \"Never author a `view … of` a subsystem or service element, which would take the drill-down from loam's \" +\n \"generated views. `loam instructions loam-drawing` lists the spellings that render nothing.\",\n pins: [\n { source: \"DRAWING\", phrase: \"**One question per view, at one altitude.**\" },\n { source: \"DRAWING\", phrase: \"`where kind is publishes` keeps the line amber\" },\n ],\n },\n {\n term: \"purpose\",\n aliases: [\"narrative\"],\n paragraph:\n \"A `## Purpose` section is the plain-language narrative of a spec delta: what the service does in the change, \" +\n \"for someone who has never opened its code. \" +\n \"Each spec delta opens with a plain-language `## Purpose`. Where the delta creates the living document — a \" +\n \"new service's spec.md, a first arch.spec.md, a new capability — `loam archive` copies the section in as that \" +\n \"document's narrative, beside the delta's title and frontmatter owner. Where the living document already exists, the \" +\n \"section stays with the archived delta, and the archive plan says so; edit the living narrative directly when \" +\n \"it should change. Nothing grades a purpose; `loam instructions loam-authoring`, \\\"Writing for a person\\\", has the shape.\",\n pins: [\n { source: \"AUTHORING\", phrase: \"Each spec delta opens with a plain-language `## Purpose`\" },\n { source: \"AUTHORING\", phrase: \"section stays with the archived delta\" },\n ],\n },\n ],\n};\n"]}
@@ -0,0 +1,144 @@
1
+ export const DONE_CHECK_TERMS = {
2
+ heading: "the done-check — what `loam verify` asks, and what an answer is worth",
3
+ terms: [
4
+ {
5
+ term: "claim",
6
+ aliases: ["claims", "checklist", "confirmed", "unconfirmed", "unanswered"],
7
+ paragraph: "A claim is one question on the done-check's checklist: a promise the feature's documents make about code. " +
8
+ "loam asks it so that evidence, not prose, can answer it. " +
9
+ "`loam verify <FEAT>` derives a checklist from the feature's own artifacts: one claim per new service " +
10
+ "(`service.exists`), per operation the contract delta adds (`api.exposes`), per message the event contract " +
11
+ "newly declares (`event.declares`), per tagged edge that names an operation (`c4.calls`), and per scenario of " +
12
+ "every changed requirement (`scenario.tested`) — `loam explain <kind>` says what each one asks and who may answer it. " +
13
+ "Each claim has a stable id, so two runs are diffable and an answer cannot drift onto a different question; " +
14
+ "`loam tasks` uses the same id for the unit that closes it. " +
15
+ "An answer is `confirmed` with `file:line` evidence or `unconfirmed` with a note saying why — a successful " +
16
+ "record either way — and a claim nobody answered is `unanswered`. Every recorded answer says who gave it " +
17
+ "(`answered_by: runner | external-runner | agent`), and that is what separates **verified** from **attested**.",
18
+ pins: [
19
+ { source: "DONE_CHECK", phrase: "`loam verify <FEAT>` derives a checklist from the feature's own artifacts" },
20
+ { source: "DONE_CHECK", phrase: "Each claim has a stable id, so" },
21
+ { source: "DONE_CHECK", phrase: "two runs are diffable and an answer cannot drift onto a different question" },
22
+ { source: "DONE_CHECK", phrase: "`answered_by: runner | external-runner | agent`" },
23
+ ],
24
+ },
25
+ {
26
+ term: "service.exists",
27
+ aliases: [],
28
+ paragraph: "A `service.exists` claim asks whether a service the feature introduces has actually been built. " +
29
+ "`loam verify` derives one per new service the feature's delta.likec4 adds to the fleet map. " +
30
+ "Answer it by finding it in the code, not by reasoning that it must be there. What to open: " +
31
+ "`service.exists` — the service is deployable: its build, its entry point. " +
32
+ "The answer is `file:line` evidence, recorded from that service's own repository with " +
33
+ "`loam verify <FEAT> --service <id> --record answers.json`. No test runner answers this kind, so an agent's " +
34
+ "word is the expected answer here, and it never makes the verdict **attested** — only scenario claims do.",
35
+ pins: [{ source: "VERIFY", phrase: "`service.exists` — the service is deployable: its build, its entry point." }],
36
+ },
37
+ {
38
+ term: "api.exposes",
39
+ aliases: [],
40
+ paragraph: "An `api.exposes` claim asks whether the service really serves an operation the feature's contract delta adds. " +
41
+ "`loam verify` derives one per operationId in the feature's openapi.yaml that the living contract does not " +
42
+ "already define; an operation the delta merely restates is never asked about. " +
43
+ "What to open: `api.exposes` — the route handler serving that operationId, not the spec that declares it. " +
44
+ "It also has a mechanical channel: an API contract-test run, passed back in loam's contract-results shape with " +
45
+ "`loam verify <FEAT> --contract-results contract.json`, answers it as `answered_by: external-runner`. " +
46
+ "In `loam tasks`, a `c4.calls` unit depends on the `api.exposes` unit that promises the operation it calls.",
47
+ pins: [
48
+ { source: "VERIFY", phrase: "`api.exposes` — the route handler serving that operationId, not the spec that" },
49
+ { source: "DONE_CHECK", phrase: "`loam verify <FEAT> --contract-results contract.json`" },
50
+ ],
51
+ },
52
+ {
53
+ term: "event.declares",
54
+ aliases: [],
55
+ paragraph: "An `event.declares` claim asks whether the service sends or receives a message the feature's event contract " +
56
+ "newly declares. " +
57
+ "For a feature, `loam verify` derives one per (direction, message) its asyncapi delta newly declares against the " +
58
+ "living contract's send/receive sets — quotes and removals are never questions. " +
59
+ "What to open: `event.declares` — the code that puts the message on the wire (sends) or handles it off the " +
60
+ "wire (receives), not the contract that names it. " +
61
+ "It is answered with `file:line` evidence through `loam verify <FEAT> --service <id> --record answers.json`.",
62
+ pins: [
63
+ { source: "VERIFY", phrase: "`event.declares` — the code that puts the message on the wire (sends) or" },
64
+ { source: "VERIFY", phrase: "per (direction, message) its asyncapi delta newly declares against the living" },
65
+ ],
66
+ },
67
+ {
68
+ term: "c4.calls",
69
+ aliases: [],
70
+ paragraph: "A `c4.calls` claim asks whether a call the feature draws on the architecture really exists in the caller's code. " +
71
+ "`loam verify` derives one per edge in delta.likec4 that is tagged with the feature and names an operation " +
72
+ "(`metadata { op '<operationId>' }`); an untagged edge is context, and an edge with no operation names nothing " +
73
+ "specific enough to look for. " +
74
+ "What to open: `c4.calls` — the call site in the CALLER. " +
75
+ "Its subject is the calling service, so it is answered from that service's repository, and in `loam tasks` it " +
76
+ "depends on the `api.exposes` unit for the operation it calls when the same feature adds that operation.",
77
+ pins: [{ source: "VERIFY", phrase: "`c4.calls` — the call site in the CALLER." }],
78
+ },
79
+ {
80
+ term: "scenario.tested",
81
+ aliases: [],
82
+ paragraph: "A `scenario.tested` claim asks whether one scenario of a changed requirement passes in a test run. " +
83
+ "The run is of the service's generated suite, in that service's own repository. " +
84
+ "`loam verify` derives one per scenario of every requirement the feature adds or modifies, arch.spec.md deltas " +
85
+ "included (those want an integration or ops test, not an acceptance test). " +
86
+ "The `scenario.tested` claims are the runner's to answer, not yours. Run the suite `loam gherkin <FEAT>` " +
87
+ "generated, with a JSON report, and pass it back with `loam verify <FEAT> --service <id> --results report.json`; " +
88
+ "the match is the scenario's `@loam-digest-…` tag. The digest is the only identity: a reworded spec scenario " +
89
+ "matches nothing until the suite is regenerated and re-run. " +
90
+ "With no runnable suite your word may answer them, and the feature is then **attested**, not verified — these " +
91
+ "are the only claims that verdict turns on.",
92
+ pins: [
93
+ { source: "VERIFY", phrase: "The `scenario.tested` claims are the runner's to answer, not yours." },
94
+ { source: "DONE_CHECK", phrase: "The digest is the only identity: a reworded spec scenario matches" },
95
+ ],
96
+ },
97
+ {
98
+ term: "attested",
99
+ aliases: ["attest", "attestation"],
100
+ paragraph: "Attested is the verdict one rung below verified on the done-check's ladder. " +
101
+ "Verified means somebody says the code was built and showed evidence — and for scenario claims that evidence is a " +
102
+ "test runner's report, answered mechanically. Without a runnable suite your word can still answer them " +
103
+ "(`loam verify <FEAT> --record` alone), but the record says who answered, and a feature whose " +
104
+ "scenario claims rest on an agent's word is **attested**, not verified. Nothing gates on the difference; " +
105
+ "pass `--results <report>` the moment a suite runs and the verdict moves on its own. " +
106
+ "In `loam tasks` it is also the fourth step a unit can wait at, and the one that is not work to write: " +
107
+ "the claim was closed on somebody's word rather than on a run, so the unit stays visible at `attested` until a " +
108
+ "test run re-records it.",
109
+ pins: [
110
+ { source: "REFUSALS", phrase: "somebody says the code was built and showed evidence" },
111
+ // Left the cycle with the done-check teaching; repaired by following the
112
+ // text, as `vouch`'s two were.
113
+ { source: "DONE_CHECK", phrase: "scenario claims rest on an agent's word is **attested**, not verified" },
114
+ { source: "IMPLEMENT", phrase: "the claim was closed on somebody's word rather than on a run" },
115
+ ],
116
+ },
117
+ {
118
+ // The other half of the most overloaded word in loam's output. The status
119
+ // row and the scorecard print the verdict (`verified · attested ·
120
+ // unverified`), while a document's frontmatter prints `status: verified`
121
+ // for a vouch — and the two have nothing to do with each other. A reader
122
+ // who looks the word up after either one gets both meanings here.
123
+ term: "verified",
124
+ aliases: ["unverified", "verdict", "verdicts"],
125
+ paragraph: "Verified is the done-check's top verdict: every claim recorded confirmed, the scenario claims by a test run. " +
126
+ "Every claim on the checklist has an answer with evidence, and no scenario claim rests on somebody's word. " +
127
+ "A record's `verdict` (`verified` | `attested` | `unverified`) is computed from its claims, never stored: " +
128
+ "`unverified` means some claim is still unconfirmed or unanswered, or the record answers a checklist the feature " +
129
+ "no longer asks; **attested** means complete, with a scenario claim resting on an agent's word. " +
130
+ "Between `verified` and `attested` the verdict turns on the scenario claims alone, so a `verified` record can still rest " +
131
+ "partly on an agent's word about kinds the verdict does not turn on — `service.exists` or `c4.calls`, which " +
132
+ "only the code can answer. " +
133
+ "Only `verified` makes a feature in flight `done`. **Nothing gates on it.** `loam archive` will ship an " +
134
+ "unverified feature. " +
135
+ "The same word on a living document means something else: `status: verified` in a spec.md's frontmatter is a " +
136
+ "person's vouch for the words, not a test result (`loam explain vouch`).",
137
+ pins: [
138
+ { source: "CODES_PAGE", phrase: "`verdict` (`verified` | `attested` | `unverified`)" },
139
+ { source: "CODES_PAGE", phrase: "partly on an agent's word about kinds the verdict does not turn on" },
140
+ ],
141
+ },
142
+ ],
143
+ };
144
+ //# sourceMappingURL=done-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"done-check.js","sourceRoot":"","sources":["../../../../src/core/explain/terms/done-check.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC,OAAO,EAAE,uEAAuE;IAChF,KAAK,EAAE;QACL;YACE,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,CAAC;YAC1E,SAAS,EACP,4GAA4G;gBAC5G,2DAA2D;gBAC3D,uGAAuG;gBACvG,4GAA4G;gBAC5G,+GAA+G;gBAC/G,uHAAuH;gBACvH,6GAA6G;gBAC7G,6DAA6D;gBAC7D,4GAA4G;gBAC5G,0GAA0G;gBAC1G,+GAA+G;YACjH,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,2EAA2E,EAAE;gBAC7G,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,gCAAgC,EAAE;gBAClE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,4EAA4E,EAAE;gBAC9G,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,iDAAiD,EAAE;aACpF;SACF;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,EAAE;YACX,SAAS,EACP,kGAAkG;gBAClG,8FAA8F;gBAC9F,6FAA6F;gBAC7F,4EAA4E;gBAC5E,uFAAuF;gBACvF,6GAA6G;gBAC7G,0GAA0G;YAC5G,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,2EAA2E,EAAE,CAAC;SAClH;QACD;YACE,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,EAAE;YACX,SAAS,EACP,gHAAgH;gBAChH,4GAA4G;gBAC5G,+EAA+E;gBAC/E,2GAA2G;gBAC3G,gHAAgH;gBAChH,uGAAuG;gBACvG,4GAA4G;YAC9G,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,+EAA+E,EAAE;gBAC7G,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,uDAAuD,EAAE;aAC1F;SACF;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,EAAE;YACX,SAAS,EACP,8GAA8G;gBAC9G,kBAAkB;gBAClB,kHAAkH;gBAClH,iFAAiF;gBACjF,4GAA4G;gBAC5G,mDAAmD;gBACnD,6GAA6G;YAC/G,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,0EAA0E,EAAE;gBACxG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,+EAA+E,EAAE;aAC9G;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,EAAE;YACX,SAAS,EACP,mHAAmH;gBACnH,4GAA4G;gBAC5G,gHAAgH;gBAChH,+BAA+B;gBAC/B,0DAA0D;gBAC1D,+GAA+G;gBAC/G,yGAAyG;YAC3G,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,2CAA2C,EAAE,CAAC;SAClF;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,EAAE;YACX,SAAS,EACP,qGAAqG;gBACrG,iFAAiF;gBACjF,gHAAgH;gBAChH,4EAA4E;gBAC5E,0GAA0G;gBAC1G,kHAAkH;gBAClH,8GAA8G;gBAC9G,6DAA6D;gBAC7D,+GAA+G;gBAC/G,4CAA4C;YAC9C,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,qEAAqE,EAAE;gBACnG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,mEAAmE,EAAE;aACtG;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;YAClC,SAAS,EACP,8EAA8E;gBAC9E,mHAAmH;gBACnH,wGAAwG;gBACxG,+FAA+F;gBAC/F,0GAA0G;gBAC1G,sFAAsF;gBACtF,wGAAwG;gBACxG,gHAAgH;gBAChH,yBAAyB;YAC3B,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,sDAAsD,EAAE;gBACtF,yEAAyE;gBACzE,+BAA+B;gBAC/B,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,uEAAuE,EAAE;gBACzG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,8DAA8D,EAAE;aAChG;SACF;QACD;YACE,0EAA0E;YAC1E,kEAAkE;YAClE,yEAAyE;YACzE,yEAAyE;YACzE,kEAAkE;YAClE,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC;YAC9C,SAAS,EACP,+GAA+G;gBAC/G,4GAA4G;gBAC5G,2GAA2G;gBAC3G,kHAAkH;gBAClH,iGAAiG;gBACjG,0HAA0H;gBAC1H,6GAA6G;gBAC7G,4BAA4B;gBAC5B,yGAAyG;gBACzG,sBAAsB;gBACtB,8GAA8G;gBAC9G,yEAAyE;YAC3E,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,oDAAoD,EAAE;gBACtF,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,oEAAoE,EAAE;aACvG;SACF;KACF;CACF,CAAC","sourcesContent":["/**\n * The done-check terms: what `loam verify` asks (a claim, and the five kinds\n * of one), and what the answer is worth (the verdicts).\n *\n * One entry per claim kind rather than one `claim` entry with the kinds as\n * aliases, because the kinds differ in exactly the fact a reader looks one up\n * for: WHO may answer it. A `scenario.tested` claim is a test runner's, an\n * `api.exposes` claim may be a contract suite's, and the other three are\n * answered from the code — a single paragraph listing all five would answer\n * `loam explain c4.calls` with four sentences about something else. Each kind\n * is pinned to its own line of the /loam-verify body, which is where the\n * binary already teaches \"what to open\" one kind at a time.\n *\n * `attested` moved here from the old flat registry with its paragraph and\n * pins intact, and gained a sentence and a pin of its own: `loam tasks` prints\n * the same word as the fourth step a unit waits at, and the two meanings are\n * one fact seen from two commands, so one entry answers both rather than two\n * entries competing for one name.\n */\nimport type { TermGroup } from \"./entry.js\";\n\nexport const DONE_CHECK_TERMS: TermGroup = {\n heading: \"the done-check — what `loam verify` asks, and what an answer is worth\",\n terms: [\n {\n term: \"claim\",\n aliases: [\"claims\", \"checklist\", \"confirmed\", \"unconfirmed\", \"unanswered\"],\n paragraph:\n \"A claim is one question on the done-check's checklist: a promise the feature's documents make about code. \" +\n \"loam asks it so that evidence, not prose, can answer it. \" +\n \"`loam verify <FEAT>` derives a checklist from the feature's own artifacts: one claim per new service \" +\n \"(`service.exists`), per operation the contract delta adds (`api.exposes`), per message the event contract \" +\n \"newly declares (`event.declares`), per tagged edge that names an operation (`c4.calls`), and per scenario of \" +\n \"every changed requirement (`scenario.tested`) — `loam explain <kind>` says what each one asks and who may answer it. \" +\n \"Each claim has a stable id, so two runs are diffable and an answer cannot drift onto a different question; \" +\n \"`loam tasks` uses the same id for the unit that closes it. \" +\n \"An answer is `confirmed` with `file:line` evidence or `unconfirmed` with a note saying why — a successful \" +\n \"record either way — and a claim nobody answered is `unanswered`. Every recorded answer says who gave it \" +\n \"(`answered_by: runner | external-runner | agent`), and that is what separates **verified** from **attested**.\",\n pins: [\n { source: \"DONE_CHECK\", phrase: \"`loam verify <FEAT>` derives a checklist from the feature's own artifacts\" },\n { source: \"DONE_CHECK\", phrase: \"Each claim has a stable id, so\" },\n { source: \"DONE_CHECK\", phrase: \"two runs are diffable and an answer cannot drift onto a different question\" },\n { source: \"DONE_CHECK\", phrase: \"`answered_by: runner | external-runner | agent`\" },\n ],\n },\n {\n term: \"service.exists\",\n aliases: [],\n paragraph:\n \"A `service.exists` claim asks whether a service the feature introduces has actually been built. \" +\n \"`loam verify` derives one per new service the feature's delta.likec4 adds to the fleet map. \" +\n \"Answer it by finding it in the code, not by reasoning that it must be there. What to open: \" +\n \"`service.exists` — the service is deployable: its build, its entry point. \" +\n \"The answer is `file:line` evidence, recorded from that service's own repository with \" +\n \"`loam verify <FEAT> --service <id> --record answers.json`. No test runner answers this kind, so an agent's \" +\n \"word is the expected answer here, and it never makes the verdict **attested** — only scenario claims do.\",\n pins: [{ source: \"VERIFY\", phrase: \"`service.exists` — the service is deployable: its build, its entry point.\" }],\n },\n {\n term: \"api.exposes\",\n aliases: [],\n paragraph:\n \"An `api.exposes` claim asks whether the service really serves an operation the feature's contract delta adds. \" +\n \"`loam verify` derives one per operationId in the feature's openapi.yaml that the living contract does not \" +\n \"already define; an operation the delta merely restates is never asked about. \" +\n \"What to open: `api.exposes` — the route handler serving that operationId, not the spec that declares it. \" +\n \"It also has a mechanical channel: an API contract-test run, passed back in loam's contract-results shape with \" +\n \"`loam verify <FEAT> --contract-results contract.json`, answers it as `answered_by: external-runner`. \" +\n \"In `loam tasks`, a `c4.calls` unit depends on the `api.exposes` unit that promises the operation it calls.\",\n pins: [\n { source: \"VERIFY\", phrase: \"`api.exposes` — the route handler serving that operationId, not the spec that\" },\n { source: \"DONE_CHECK\", phrase: \"`loam verify <FEAT> --contract-results contract.json`\" },\n ],\n },\n {\n term: \"event.declares\",\n aliases: [],\n paragraph:\n \"An `event.declares` claim asks whether the service sends or receives a message the feature's event contract \" +\n \"newly declares. \" +\n \"For a feature, `loam verify` derives one per (direction, message) its asyncapi delta newly declares against the \" +\n \"living contract's send/receive sets — quotes and removals are never questions. \" +\n \"What to open: `event.declares` — the code that puts the message on the wire (sends) or handles it off the \" +\n \"wire (receives), not the contract that names it. \" +\n \"It is answered with `file:line` evidence through `loam verify <FEAT> --service <id> --record answers.json`.\",\n pins: [\n { source: \"VERIFY\", phrase: \"`event.declares` — the code that puts the message on the wire (sends) or\" },\n { source: \"VERIFY\", phrase: \"per (direction, message) its asyncapi delta newly declares against the living\" },\n ],\n },\n {\n term: \"c4.calls\",\n aliases: [],\n paragraph:\n \"A `c4.calls` claim asks whether a call the feature draws on the architecture really exists in the caller's code. \" +\n \"`loam verify` derives one per edge in delta.likec4 that is tagged with the feature and names an operation \" +\n \"(`metadata { op '<operationId>' }`); an untagged edge is context, and an edge with no operation names nothing \" +\n \"specific enough to look for. \" +\n \"What to open: `c4.calls` — the call site in the CALLER. \" +\n \"Its subject is the calling service, so it is answered from that service's repository, and in `loam tasks` it \" +\n \"depends on the `api.exposes` unit for the operation it calls when the same feature adds that operation.\",\n pins: [{ source: \"VERIFY\", phrase: \"`c4.calls` — the call site in the CALLER.\" }],\n },\n {\n term: \"scenario.tested\",\n aliases: [],\n paragraph:\n \"A `scenario.tested` claim asks whether one scenario of a changed requirement passes in a test run. \" +\n \"The run is of the service's generated suite, in that service's own repository. \" +\n \"`loam verify` derives one per scenario of every requirement the feature adds or modifies, arch.spec.md deltas \" +\n \"included (those want an integration or ops test, not an acceptance test). \" +\n \"The `scenario.tested` claims are the runner's to answer, not yours. Run the suite `loam gherkin <FEAT>` \" +\n \"generated, with a JSON report, and pass it back with `loam verify <FEAT> --service <id> --results report.json`; \" +\n \"the match is the scenario's `@loam-digest-…` tag. The digest is the only identity: a reworded spec scenario \" +\n \"matches nothing until the suite is regenerated and re-run. \" +\n \"With no runnable suite your word may answer them, and the feature is then **attested**, not verified — these \" +\n \"are the only claims that verdict turns on.\",\n pins: [\n { source: \"VERIFY\", phrase: \"The `scenario.tested` claims are the runner's to answer, not yours.\" },\n { source: \"DONE_CHECK\", phrase: \"The digest is the only identity: a reworded spec scenario matches\" },\n ],\n },\n {\n term: \"attested\",\n aliases: [\"attest\", \"attestation\"],\n paragraph:\n \"Attested is the verdict one rung below verified on the done-check's ladder. \" +\n \"Verified means somebody says the code was built and showed evidence — and for scenario claims that evidence is a \" +\n \"test runner's report, answered mechanically. Without a runnable suite your word can still answer them \" +\n \"(`loam verify <FEAT> --record` alone), but the record says who answered, and a feature whose \" +\n \"scenario claims rest on an agent's word is **attested**, not verified. Nothing gates on the difference; \" +\n \"pass `--results <report>` the moment a suite runs and the verdict moves on its own. \" +\n \"In `loam tasks` it is also the fourth step a unit can wait at, and the one that is not work to write: \" +\n \"the claim was closed on somebody's word rather than on a run, so the unit stays visible at `attested` until a \" +\n \"test run re-records it.\",\n pins: [\n { source: \"REFUSALS\", phrase: \"somebody says the code was built and showed evidence\" },\n // Left the cycle with the done-check teaching; repaired by following the\n // text, as `vouch`'s two were.\n { source: \"DONE_CHECK\", phrase: \"scenario claims rest on an agent's word is **attested**, not verified\" },\n { source: \"IMPLEMENT\", phrase: \"the claim was closed on somebody's word rather than on a run\" },\n ],\n },\n {\n // The other half of the most overloaded word in loam's output. The status\n // row and the scorecard print the verdict (`verified · attested ·\n // unverified`), while a document's frontmatter prints `status: verified`\n // for a vouch — and the two have nothing to do with each other. A reader\n // who looks the word up after either one gets both meanings here.\n term: \"verified\",\n aliases: [\"unverified\", \"verdict\", \"verdicts\"],\n paragraph:\n \"Verified is the done-check's top verdict: every claim recorded confirmed, the scenario claims by a test run. \" +\n \"Every claim on the checklist has an answer with evidence, and no scenario claim rests on somebody's word. \" +\n \"A record's `verdict` (`verified` | `attested` | `unverified`) is computed from its claims, never stored: \" +\n \"`unverified` means some claim is still unconfirmed or unanswered, or the record answers a checklist the feature \" +\n \"no longer asks; **attested** means complete, with a scenario claim resting on an agent's word. \" +\n \"Between `verified` and `attested` the verdict turns on the scenario claims alone, so a `verified` record can still rest \" +\n \"partly on an agent's word about kinds the verdict does not turn on — `service.exists` or `c4.calls`, which \" +\n \"only the code can answer. \" +\n \"Only `verified` makes a feature in flight `done`. **Nothing gates on it.** `loam archive` will ship an \" +\n \"unverified feature. \" +\n \"The same word on a living document means something else: `status: verified` in a spec.md's frontmatter is a \" +\n \"person's vouch for the words, not a test result (`loam explain vouch`).\",\n pins: [\n { source: \"CODES_PAGE\", phrase: \"`verdict` (`verified` | `attested` | `unverified`)\" },\n { source: \"CODES_PAGE\", phrase: \"partly on an agent's word about kinds the verdict does not turn on\" },\n ],\n },\n ],\n};\n"]}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * What one concept term IS, apart from any term's words: the entry shape the
3
+ * four subject modules beside this one fill in, and the names of the shipped
4
+ * pages a pin may point at.
5
+ *
6
+ * A module of its own, holding only types, because of where the assembler
7
+ * sits. `../terms.ts` imports every subject module of this package to build
8
+ * `TERMS`, so a subject module that reached back up into it for `TermEntry`
9
+ * would close a file-level cycle through a type — erased at runtime, but a
10
+ * cycle every graph in the gate still has to be told to ignore. Down here the
11
+ * graph stays a tree: the subjects import this, the assembler imports them.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../../../src/core/explain/terms/entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG","sourcesContent":["/**\n * What one concept term IS, apart from any term's words: the entry shape the\n * four subject modules beside this one fill in, and the names of the shipped\n * pages a pin may point at.\n *\n * A module of its own, holding only types, because of where the assembler\n * sits. `../terms.ts` imports every subject module of this package to build\n * `TERMS`, so a subject module that reached back up into it for `TermEntry`\n * would close a file-level cycle through a type — erased at runtime, but a\n * cycle every graph in the gate still has to be told to ignore. Down here the\n * graph stays a tree: the subjects import this, the assembler imports them.\n */\n\n/**\n * The shipped texts a pin may name — each one a page `loam instructions`\n * prints, or the AGENTS.md loam writes. `../terms.ts` maps every name to its\n * bytes (`PIN_SOURCE_TEXT`), and the `Record` there makes a name added here\n * without a text a compile error rather than a pin that guards nothing.\n */\nexport type PinSource =\n | \"AGENTS_MD\"\n | \"SPINE_PAGE\"\n | \"REFUSALS\"\n | \"AUTHORING\"\n | \"DRAWING\"\n | \"DONE_CHECK\"\n | \"CODES_PAGE\"\n | \"CHECK\"\n | \"FEATURE\"\n | \"IMPLEMENT\"\n | \"VERIFY\";\n\nexport interface TermPin {\n readonly source: PinSource;\n /** A verbatim single-line substring of both the paragraph and the source section. */\n readonly phrase: string;\n}\n\nexport interface TermEntry {\n readonly term: string;\n readonly aliases: readonly string[];\n /** The explanation. Its FIRST sentence doubles as the no-argument listing's summary. */\n readonly paragraph: string;\n readonly pins: readonly TermPin[];\n}\n\n/**\n * The terms of one subject, under the heading the bare `loam explain` listing\n * prints above them.\n *\n * The heading exists for a reader, not for the lookup: twenty-odd terms in one\n * flat column read as a glossary nobody scans, and the words a newcomer meets\n * arrive in clusters — the stages `loam status` prints, the claims and\n * verdicts of `loam verify`, the steps of `loam tasks` — so the listing is\n * grouped the way the output that printed them is. The `--json` listing stays\n * the flat `terms[]` it always was; a group is typography, never a key.\n */\nexport interface TermGroup {\n readonly heading: string;\n readonly terms: readonly TermEntry[];\n}\n"]}