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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (901) hide show
  1. package/CHANGELOG.md +3448 -0
  2. package/COMPARISON.md +91 -3
  3. package/CONTRIBUTING.md +37 -0
  4. package/MIGRATING-from-OpenSpec.md +47 -23
  5. package/QUICKSTART.md +189 -12
  6. package/README.md +274 -65
  7. package/ROADMAP.md +572 -31
  8. package/SCHEMA.md +1709 -155
  9. package/WORKFLOW.md +298 -72
  10. package/dist/cli.js +26 -8
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/adopt/adopt.js +5 -10
  13. package/dist/commands/adopt/adopt.js.map +1 -1
  14. package/dist/commands/adopt/render.js +50 -9
  15. package/dist/commands/adopt/render.js.map +1 -1
  16. package/dist/commands/archive/archive.js +16 -19
  17. package/dist/commands/archive/archive.js.map +1 -1
  18. package/dist/commands/archive/closing.js +42 -0
  19. package/dist/commands/archive/closing.js.map +1 -0
  20. package/dist/commands/archive/plan/contracts/asyncapi.js +36 -42
  21. package/dist/commands/archive/plan/contracts/asyncapi.js.map +1 -1
  22. package/dist/commands/archive/plan/contracts/consumers.js +56 -0
  23. package/dist/commands/archive/plan/contracts/consumers.js.map +1 -0
  24. package/dist/commands/archive/plan/contracts/openapi.js +77 -43
  25. package/dist/commands/archive/plan/contracts/openapi.js.map +1 -1
  26. package/dist/commands/archive/plan/contracts/verdict-lines.js +103 -0
  27. package/dist/commands/archive/plan/contracts/verdict-lines.js.map +1 -0
  28. package/dist/commands/archive/plan/document/head.js +151 -0
  29. package/dist/commands/archive/plan/document/head.js.map +1 -0
  30. package/dist/commands/archive/plan/document/links.js +284 -0
  31. package/dist/commands/archive/plan/document/links.js.map +1 -0
  32. package/dist/commands/archive/plan/document/run.js +136 -0
  33. package/dist/commands/archive/plan/document/run.js.map +1 -0
  34. package/dist/commands/archive/plan/gate.js +21 -19
  35. package/dist/commands/archive/plan/gate.js.map +1 -1
  36. package/dist/commands/archive/plan/landscape.js +167 -30
  37. package/dist/commands/archive/plan/landscape.js.map +1 -1
  38. package/dist/commands/archive/plan/model/extending.js +85 -0
  39. package/dist/commands/archive/plan/model/extending.js.map +1 -0
  40. package/dist/commands/archive/plan/refusal.js +14 -19
  41. package/dist/commands/archive/plan/refusal.js.map +1 -1
  42. package/dist/commands/archive/plan/specs.js +137 -56
  43. package/dist/commands/archive/plan/specs.js.map +1 -1
  44. package/dist/commands/archive/plan/state.js +3 -0
  45. package/dist/commands/archive/plan/state.js.map +1 -1
  46. package/dist/commands/archive/run.js +134 -30
  47. package/dist/commands/archive/run.js.map +1 -1
  48. package/dist/commands/archive/shipped.js +49 -0
  49. package/dist/commands/archive/shipped.js.map +1 -0
  50. package/dist/commands/context/context.js +85 -18
  51. package/dist/commands/context/context.js.map +1 -1
  52. package/dist/commands/context/print.js +29 -7
  53. package/dist/commands/context/print.js.map +1 -1
  54. package/dist/commands/delta/delta.js +102 -14
  55. package/dist/commands/delta/delta.js.map +1 -1
  56. package/dist/commands/delta/print.js +17 -1
  57. package/dist/commands/delta/print.js.map +1 -1
  58. package/dist/commands/dependencies.js +3 -7
  59. package/dist/commands/dependencies.js.map +1 -1
  60. package/dist/commands/diff/diff.js +20 -27
  61. package/dist/commands/diff/diff.js.map +1 -1
  62. package/dist/commands/doctor.js +60 -1
  63. package/dist/commands/doctor.js.map +1 -1
  64. package/dist/commands/explain/explain.js +89 -13
  65. package/dist/commands/explain/explain.js.map +1 -1
  66. package/dist/commands/explore.js +16 -10
  67. package/dist/commands/explore.js.map +1 -1
  68. package/dist/commands/gate/gate.js +45 -8
  69. package/dist/commands/gate/gate.js.map +1 -1
  70. package/dist/commands/gate/print.js +15 -3
  71. package/dist/commands/gate/print.js.map +1 -1
  72. package/dist/commands/gherkin/commit.js +13 -54
  73. package/dist/commands/gherkin/commit.js.map +1 -1
  74. package/dist/commands/gherkin/gherkin.js +36 -20
  75. package/dist/commands/gherkin/gherkin.js.map +1 -1
  76. package/dist/commands/gherkin/reconcile.js +10 -13
  77. package/dist/commands/gherkin/reconcile.js.map +1 -1
  78. package/dist/commands/init/first-hour.js +44 -0
  79. package/dist/commands/init/first-hour.js.map +1 -1
  80. package/dist/commands/init/init.js +18 -22
  81. package/dist/commands/init/init.js.map +1 -1
  82. package/dist/commands/list/campaign/campaign.js +4 -6
  83. package/dist/commands/list/campaign/campaign.js.map +1 -1
  84. package/dist/commands/list/json.js +5 -7
  85. package/dist/commands/list/json.js.map +1 -1
  86. package/dist/commands/list/list.js +44 -29
  87. package/dist/commands/list/list.js.map +1 -1
  88. package/dist/commands/list/print.js +52 -9
  89. package/dist/commands/list/print.js.map +1 -1
  90. package/dist/commands/list/suites/suites.js +140 -0
  91. package/dist/commands/list/suites/suites.js.map +1 -0
  92. package/dist/commands/list/views.js +37 -34
  93. package/dist/commands/list/views.js.map +1 -1
  94. package/dist/commands/mcp/dispatch.js +91 -36
  95. package/dist/commands/mcp/dispatch.js.map +1 -1
  96. package/dist/commands/mcp/mcp.js +56 -15
  97. package/dist/commands/mcp/mcp.js.map +1 -1
  98. package/dist/commands/mcp/serve.js.map +1 -1
  99. package/dist/commands/migrate-openspec/materialize/active.js +27 -22
  100. package/dist/commands/migrate-openspec/materialize/active.js.map +1 -1
  101. package/dist/commands/migrate-openspec/materialize/stage.js +4 -3
  102. package/dist/commands/migrate-openspec/materialize/stage.js.map +1 -1
  103. package/dist/commands/migrate-openspec/materialize/target.js +2 -2
  104. package/dist/commands/migrate-openspec/materialize/target.js.map +1 -1
  105. package/dist/commands/migrate-openspec/openspec/decisions.js +9 -14
  106. package/dist/commands/migrate-openspec/openspec/decisions.js.map +1 -1
  107. package/dist/commands/migrate-openspec/openspec/error.js +7 -8
  108. package/dist/commands/migrate-openspec/openspec/error.js.map +1 -1
  109. package/dist/commands/migrate-openspec/openspec/mapping.js +1 -9
  110. package/dist/commands/migrate-openspec/openspec/mapping.js.map +1 -1
  111. package/dist/commands/migrate-openspec/openspec/paths.js +3 -6
  112. package/dist/commands/migrate-openspec/openspec/paths.js.map +1 -1
  113. package/dist/commands/new/capability-template.js +118 -0
  114. package/dist/commands/new/capability-template.js.map +1 -0
  115. package/dist/commands/new/commit.js +8 -22
  116. package/dist/commands/new/commit.js.map +1 -1
  117. package/dist/commands/new/modifies.js +206 -0
  118. package/dist/commands/new/modifies.js.map +1 -0
  119. package/dist/commands/new/new.js +59 -14
  120. package/dist/commands/new/new.js.map +1 -1
  121. package/dist/commands/new/templates.js +48 -124
  122. package/dist/commands/new/templates.js.map +1 -1
  123. package/dist/commands/open.js +3 -7
  124. package/dist/commands/open.js.map +1 -1
  125. package/dist/commands/policy/gate.js +27 -0
  126. package/dist/commands/policy/gate.js.map +1 -1
  127. package/dist/commands/rebase/plan.js +2 -2
  128. package/dist/commands/rebase/plan.js.map +1 -1
  129. package/dist/commands/rebase/rebase.js +60 -35
  130. package/dist/commands/rebase/rebase.js.map +1 -1
  131. package/dist/commands/seed/commit.js +55 -26
  132. package/dist/commands/seed/commit.js.map +1 -1
  133. package/dist/commands/seed/plan.js +158 -13
  134. package/dist/commands/seed/plan.js.map +1 -1
  135. package/dist/commands/seed/seed.js +13 -11
  136. package/dist/commands/seed/seed.js.map +1 -1
  137. package/dist/commands/show/feature.js +9 -5
  138. package/dist/commands/show/feature.js.map +1 -1
  139. package/dist/commands/show/introduced.js +157 -0
  140. package/dist/commands/show/introduced.js.map +1 -0
  141. package/dist/commands/show/marks.js +35 -6
  142. package/dist/commands/show/marks.js.map +1 -1
  143. package/dist/commands/show/service.js +41 -33
  144. package/dist/commands/show/service.js.map +1 -1
  145. package/dist/commands/show/show.js +17 -7
  146. package/dist/commands/show/show.js.map +1 -1
  147. package/dist/commands/status/fleet-next.js +90 -0
  148. package/dist/commands/status/fleet-next.js.map +1 -0
  149. package/dist/commands/status/json.js +2 -0
  150. package/dist/commands/status/json.js.map +1 -1
  151. package/dist/commands/status/print.js +89 -37
  152. package/dist/commands/status/print.js.map +1 -1
  153. package/dist/commands/status/status.js +3 -7
  154. package/dist/commands/status/status.js.map +1 -1
  155. package/dist/commands/steps/steps.js +103 -23
  156. package/dist/commands/steps/steps.js.map +1 -1
  157. package/dist/commands/subsystem/edit.js +7 -7
  158. package/dist/commands/subsystem/edit.js.map +1 -1
  159. package/dist/commands/subsystem/move.js +106 -46
  160. package/dist/commands/subsystem/move.js.map +1 -1
  161. package/dist/commands/subsystem/query.js +2 -4
  162. package/dist/commands/subsystem/query.js.map +1 -1
  163. package/dist/commands/subsystem/subsystem.js +4 -7
  164. package/dist/commands/subsystem/subsystem.js.map +1 -1
  165. package/dist/commands/subsystem/sync.js +289 -74
  166. package/dist/commands/subsystem/sync.js.map +1 -1
  167. package/dist/commands/subsystem/txn/exclude.js +132 -0
  168. package/dist/commands/subsystem/txn/exclude.js.map +1 -0
  169. package/dist/commands/subsystem/txn/links.js +128 -0
  170. package/dist/commands/subsystem/txn/links.js.map +1 -0
  171. package/dist/commands/subsystem/txn/report.js +174 -0
  172. package/dist/commands/subsystem/txn/report.js.map +1 -0
  173. package/dist/commands/subsystem/txn/txn.js +147 -45
  174. package/dist/commands/subsystem/txn/txn.js.map +1 -1
  175. package/dist/commands/subsystem/txn/views.js +200 -21
  176. package/dist/commands/subsystem/txn/views.js.map +1 -1
  177. package/dist/commands/tasks/actions.js +107 -0
  178. package/dist/commands/tasks/actions.js.map +1 -0
  179. package/dist/commands/tasks/render.js +253 -0
  180. package/dist/commands/tasks/render.js.map +1 -0
  181. package/dist/commands/tasks/tasks.js +119 -0
  182. package/dist/commands/tasks/tasks.js.map +1 -0
  183. package/dist/commands/unarchive/manifest.js +42 -26
  184. package/dist/commands/unarchive/manifest.js.map +1 -1
  185. package/dist/commands/unarchive/restore.js +83 -33
  186. package/dist/commands/unarchive/restore.js.map +1 -1
  187. package/dist/commands/unarchive/unarchive.js +22 -30
  188. package/dist/commands/unarchive/unarchive.js.map +1 -1
  189. package/dist/commands/validate/arch-coverage.js +78 -27
  190. package/dist/commands/validate/arch-coverage.js.map +1 -1
  191. package/dist/commands/validate/checks/fleet-shape.js +34 -126
  192. package/dist/commands/validate/checks/fleet-shape.js.map +1 -1
  193. package/dist/commands/validate/checks/health-deps.js +9 -6
  194. package/dist/commands/validate/checks/health-deps.js.map +1 -1
  195. package/dist/commands/validate/checks/introduced.js +102 -0
  196. package/dist/commands/validate/checks/introduced.js.map +1 -0
  197. package/dist/commands/validate/checks/requirements.js +18 -8
  198. package/dist/commands/validate/checks/requirements.js.map +1 -1
  199. package/dist/commands/validate/checks/sources.js +11 -2
  200. package/dist/commands/validate/checks/sources.js.map +1 -1
  201. package/dist/commands/validate/coverage/covers-after.js +105 -0
  202. package/dist/commands/validate/coverage/covers-after.js.map +1 -0
  203. package/dist/commands/validate/feature.js +26 -20
  204. package/dist/commands/validate/feature.js.map +1 -1
  205. package/dist/commands/validate/fleet/census.js +37 -13
  206. package/dist/commands/validate/fleet/census.js.map +1 -1
  207. package/dist/commands/validate/fleet/landscape.js +144 -126
  208. package/dist/commands/validate/fleet/landscape.js.map +1 -1
  209. package/dist/commands/validate/fleet/load.js +66 -0
  210. package/dist/commands/validate/fleet/load.js.map +1 -1
  211. package/dist/commands/validate/fleet/map/attest.js +98 -0
  212. package/dist/commands/validate/fleet/map/attest.js.map +1 -0
  213. package/dist/commands/validate/fleet/map/bindings.js +107 -0
  214. package/dist/commands/validate/fleet/map/bindings.js.map +1 -0
  215. package/dist/commands/validate/fleet/map/consumers.js +244 -0
  216. package/dist/commands/validate/fleet/map/consumers.js.map +1 -0
  217. package/dist/commands/validate/fleet/map/isolation.js +116 -0
  218. package/dist/commands/validate/fleet/map/isolation.js.map +1 -0
  219. package/dist/commands/validate/fleet/map/usecases.js +54 -0
  220. package/dist/commands/validate/fleet/map/usecases.js.map +1 -0
  221. package/dist/commands/validate/fleet/obligations.js +44 -14
  222. package/dist/commands/validate/fleet/obligations.js.map +1 -1
  223. package/dist/commands/validate/fleet/scorecard/print.js +10 -2
  224. package/dist/commands/validate/fleet/scorecard/print.js.map +1 -1
  225. package/dist/commands/validate/fleet/scorecard/scorecard.js +17 -11
  226. package/dist/commands/validate/fleet/scorecard/scorecard.js.map +1 -1
  227. package/dist/commands/validate/fleet/usecases/place.js.map +1 -1
  228. package/dist/commands/validate/fleet/views/fleet-project.js +217 -0
  229. package/dist/commands/validate/fleet/views/fleet-project.js.map +1 -0
  230. package/dist/commands/validate/fleet/views/ids.js +50 -15
  231. package/dist/commands/validate/fleet/views/ids.js.map +1 -1
  232. package/dist/commands/validate/fleet/views/projects.js +278 -0
  233. package/dist/commands/validate/fleet/views/projects.js.map +1 -0
  234. package/dist/commands/validate/fleet/views/root-documents.js +83 -0
  235. package/dist/commands/validate/fleet/views/root-documents.js.map +1 -0
  236. package/dist/commands/validate/fleet/views/stale.js +40 -47
  237. package/dist/commands/validate/fleet/views/stale.js.map +1 -1
  238. package/dist/commands/validate/links/corpus.js +1 -4
  239. package/dist/commands/validate/links/corpus.js.map +1 -1
  240. package/dist/commands/validate/links/glossary.js.map +1 -1
  241. package/dist/commands/validate/render/repeats.js +63 -0
  242. package/dist/commands/validate/render/repeats.js.map +1 -0
  243. package/dist/commands/validate/render/rollups.js +115 -0
  244. package/dist/commands/validate/render/rollups.js.map +1 -0
  245. package/dist/commands/validate/render/text.js +199 -0
  246. package/dist/commands/validate/render/text.js.map +1 -0
  247. package/dist/commands/validate/report.js +36 -160
  248. package/dist/commands/validate/report.js.map +1 -1
  249. package/dist/commands/validate/scope.js +113 -0
  250. package/dist/commands/validate/scope.js.map +1 -0
  251. package/dist/commands/validate/service/api.js +21 -107
  252. package/dist/commands/validate/service/api.js.map +1 -1
  253. package/dist/commands/validate/service/contracts/generated.js +134 -0
  254. package/dist/commands/validate/service/contracts/generated.js.map +1 -0
  255. package/dist/commands/validate/service/events/events.js +36 -14
  256. package/dist/commands/validate/service/events/events.js.map +1 -1
  257. package/dist/commands/validate/service/events/message-producers.js +1 -1
  258. package/dist/commands/validate/service/events/message-producers.js.map +1 -1
  259. package/dist/commands/validate/service/evidence-pins.js +56 -10
  260. package/dist/commands/validate/service/evidence-pins.js.map +1 -1
  261. package/dist/commands/validate/service/model/diverged.js +226 -0
  262. package/dist/commands/validate/service/model/diverged.js.map +1 -0
  263. package/dist/commands/validate/service/model/grade.js +163 -0
  264. package/dist/commands/validate/service/model/grade.js.map +1 -0
  265. package/dist/commands/validate/service/service.js +121 -61
  266. package/dist/commands/validate/service/service.js.map +1 -1
  267. package/dist/commands/validate/service/specs.js +88 -28
  268. package/dist/commands/validate/service/specs.js.map +1 -1
  269. package/dist/commands/validate/service/spine.js +38 -3
  270. package/dist/commands/validate/service/spine.js.map +1 -1
  271. package/dist/commands/validate/service/usecases/tags.js +113 -0
  272. package/dist/commands/validate/service/usecases/tags.js.map +1 -0
  273. package/dist/commands/validate/service/usecases/usecases.js +209 -0
  274. package/dist/commands/validate/service/usecases/usecases.js.map +1 -0
  275. package/dist/commands/validate/validate.js +85 -60
  276. package/dist/commands/validate/validate.js.map +1 -1
  277. package/dist/commands/verify/cross/diff.js +2 -6
  278. package/dist/commands/verify/cross/diff.js.map +1 -1
  279. package/dist/commands/verify/evidence/contract.js +1 -1
  280. package/dist/commands/verify/evidence/contract.js.map +1 -1
  281. package/dist/commands/verify/evidence/read.js +12 -3
  282. package/dist/commands/verify/evidence/read.js.map +1 -1
  283. package/dist/commands/verify/frozen.js +45 -23
  284. package/dist/commands/verify/frozen.js.map +1 -1
  285. package/dist/commands/verify/record.js +69 -17
  286. package/dist/commands/verify/record.js.map +1 -1
  287. package/dist/commands/verify/report.js +27 -44
  288. package/dist/commands/verify/report.js.map +1 -1
  289. package/dist/commands/verify/results.js +112 -30
  290. package/dist/commands/verify/results.js.map +1 -1
  291. package/dist/commands/verify/verify.js +55 -52
  292. package/dist/commands/verify/verify.js.map +1 -1
  293. package/dist/commands/vouch/pack/pack.js +2 -2
  294. package/dist/commands/vouch/pack/pack.js.map +1 -1
  295. package/dist/commands/vouch/pack/print.js +1 -6
  296. package/dist/commands/vouch/pack/print.js.map +1 -1
  297. package/dist/commands/vouch/pack/sections.js +1 -2
  298. package/dist/commands/vouch/pack/sections.js.map +1 -1
  299. package/dist/commands/vouch/run.js +26 -81
  300. package/dist/commands/vouch/run.js.map +1 -1
  301. package/dist/commands/vouch/sample/plan.js +20 -34
  302. package/dist/commands/vouch/sample/plan.js.map +1 -1
  303. package/dist/commands/vouch/vet/verify.js +39 -7
  304. package/dist/commands/vouch/vet/verify.js.map +1 -1
  305. package/dist/commands/vouch/vouch.js +10 -17
  306. package/dist/commands/vouch/vouch.js.map +1 -1
  307. package/dist/core/agent/agents-md/command-map.js +81 -106
  308. package/dist/core/agent/agents-md/command-map.js.map +1 -1
  309. package/dist/core/agent/agents-md/map/explain.js +21 -9
  310. package/dist/core/agent/agents-md/map/explain.js.map +1 -1
  311. package/dist/core/agent/agents-md/map/lenses/context.js +17 -8
  312. package/dist/core/agent/agents-md/map/lenses/context.js.map +1 -1
  313. package/dist/core/agent/agents-md/map/lenses/diff.js +33 -20
  314. package/dist/core/agent/agents-md/map/lenses/diff.js.map +1 -1
  315. package/dist/core/agent/agents-md/map/lenses/gate.js +13 -5
  316. package/dist/core/agent/agents-md/map/lenses/gate.js.map +1 -1
  317. package/dist/core/agent/agents-md/map/mcp.js +10 -7
  318. package/dist/core/agent/agents-md/map/mcp.js.map +1 -1
  319. package/dist/core/agent/agents-md/map/status.js +24 -8
  320. package/dist/core/agent/agents-md/map/status.js.map +1 -1
  321. package/dist/core/agent/agents-md/map/subsystem.js +80 -8
  322. package/dist/core/agent/agents-md/map/subsystem.js.map +1 -1
  323. package/dist/core/agent/agents-md/map/usecases.js +88 -10
  324. package/dist/core/agent/agents-md/map/usecases.js.map +1 -1
  325. package/dist/core/agent/agents-md/refusals.js +49 -22
  326. package/dist/core/agent/agents-md/refusals.js.map +1 -1
  327. package/dist/core/agent/agents-md.js +39 -6
  328. package/dist/core/agent/agents-md.js.map +1 -1
  329. package/dist/core/agent/agents-stamp.js +10 -0
  330. package/dist/core/agent/agents-stamp.js.map +1 -1
  331. package/dist/core/agent/protocol.js +1 -1
  332. package/dist/core/agent/protocol.js.map +1 -1
  333. package/dist/core/agent/scaffold.js +10 -15
  334. package/dist/core/agent/scaffold.js.map +1 -1
  335. package/dist/core/agent/support/report.js +46 -5
  336. package/dist/core/agent/support/report.js.map +1 -1
  337. package/dist/core/agent/tools/dialects.js +1 -0
  338. package/dist/core/agent/tools/dialects.js.map +1 -1
  339. package/dist/core/agent/tools/registry.js +41 -76
  340. package/dist/core/agent/tools/registry.js.map +1 -1
  341. package/dist/core/agent/workflows/adopt.js +158 -11
  342. package/dist/core/agent/workflows/adopt.js.map +1 -1
  343. package/dist/core/agent/workflows/check.js +78 -39
  344. package/dist/core/agent/workflows/check.js.map +1 -1
  345. package/dist/core/agent/workflows/closing.js +88 -27
  346. package/dist/core/agent/workflows/closing.js.map +1 -1
  347. package/dist/core/agent/workflows/feature.js +128 -13
  348. package/dist/core/agent/workflows/feature.js.map +1 -1
  349. package/dist/core/agent/workflows/implement.js +96 -13
  350. package/dist/core/agent/workflows/implement.js.map +1 -1
  351. package/dist/core/agent/workflows/reference/authoring.js +106 -4
  352. package/dist/core/agent/workflows/reference/authoring.js.map +1 -1
  353. package/dist/core/agent/workflows/reference/codes.js +8 -6
  354. package/dist/core/agent/workflows/reference/codes.js.map +1 -1
  355. package/dist/core/agent/workflows/reference/done-check.js +37 -15
  356. package/dist/core/agent/workflows/reference/done-check.js.map +1 -1
  357. package/dist/core/agent/workflows/reference/drawing/drawing.js +253 -0
  358. package/dist/core/agent/workflows/reference/drawing/drawing.js.map +1 -0
  359. package/dist/core/agent/workflows/reference/reference.js +6 -3
  360. package/dist/core/agent/workflows/reference/reference.js.map +1 -1
  361. package/dist/core/agent/workflows/reference/spine.js +68 -27
  362. package/dist/core/agent/workflows/reference/spine.js.map +1 -1
  363. package/dist/core/asyncapi/baseline/plan.js +14 -81
  364. package/dist/core/asyncapi/baseline/plan.js.map +1 -1
  365. package/dist/core/asyncapi/digest.js +30 -25
  366. package/dist/core/asyncapi/digest.js.map +1 -1
  367. package/dist/core/asyncapi/merge/components.js +5 -4
  368. package/dist/core/asyncapi/merge/components.js.map +1 -1
  369. package/dist/core/asyncapi/merge/error.js +7 -2
  370. package/dist/core/asyncapi/merge/error.js.map +1 -1
  371. package/dist/core/asyncapi/merge/markers.js +32 -50
  372. package/dist/core/asyncapi/merge/markers.js.map +1 -1
  373. package/dist/core/asyncapi/merge/merge.js +33 -53
  374. package/dist/core/asyncapi/merge/merge.js.map +1 -1
  375. package/dist/core/asyncapi/merge/pin.js +12 -36
  376. package/dist/core/asyncapi/merge/pin.js.map +1 -1
  377. package/dist/core/asyncapi/model.js.map +1 -1
  378. package/dist/core/asyncapi/read.js +36 -12
  379. package/dist/core/asyncapi/read.js.map +1 -1
  380. package/dist/core/brief/brief.js +96 -36
  381. package/dist/core/brief/brief.js.map +1 -1
  382. package/dist/core/brief/checks.js +138 -3
  383. package/dist/core/brief/checks.js.map +1 -1
  384. package/dist/core/brief/landscape.js +209 -130
  385. package/dist/core/brief/landscape.js.map +1 -1
  386. package/dist/core/brief/map/extend.js +84 -0
  387. package/dist/core/brief/map/extend.js.map +1 -0
  388. package/dist/core/brief/map/owed.js +266 -0
  389. package/dist/core/brief/map/owed.js.map +1 -0
  390. package/dist/core/brief/targets.js +109 -31
  391. package/dist/core/brief/targets.js.map +1 -1
  392. package/dist/core/brief/unchecked.js +14 -3
  393. package/dist/core/brief/unchecked.js.map +1 -1
  394. package/dist/core/c4/arch.js +90 -182
  395. package/dist/core/c4/arch.js.map +1 -1
  396. package/dist/core/c4/direction/direction.js +114 -0
  397. package/dist/core/c4/direction/direction.js.map +1 -0
  398. package/dist/core/c4/likec4.js +169 -14
  399. package/dist/core/c4/likec4.js.map +1 -1
  400. package/dist/core/c4/locate/unlocated.js +150 -0
  401. package/dist/core/c4/locate/unlocated.js.map +1 -0
  402. package/dist/core/c4/parsed/deployment.js +160 -0
  403. package/dist/core/c4/parsed/deployment.js.map +1 -0
  404. package/dist/core/c4/parsed/dynamic-views.js.map +1 -1
  405. package/dist/core/c4/parsed/values.js +54 -1
  406. package/dist/core/c4/parsed/values.js.map +1 -1
  407. package/dist/core/c4/parsed/view-ids.js +39 -1
  408. package/dist/core/c4/parsed/view-ids.js.map +1 -1
  409. package/dist/core/c4/prefetch/fleet.js +134 -0
  410. package/dist/core/c4/prefetch/fleet.js.map +1 -0
  411. package/dist/core/c4/project/architecture.js +123 -7
  412. package/dist/core/c4/project/architecture.js.map +1 -1
  413. package/dist/core/c4/project/batch.js +140 -0
  414. package/dist/core/c4/project/batch.js.map +1 -0
  415. package/dist/core/c4/project/documents.js +43 -12
  416. package/dist/core/c4/project/documents.js.map +1 -1
  417. package/dist/core/c4/project/load.js +79 -43
  418. package/dist/core/c4/project/load.js.map +1 -1
  419. package/dist/core/c4/project/staged.js +277 -0
  420. package/dist/core/c4/project/staged.js.map +1 -0
  421. package/dist/core/c4/resolve/attested.js +0 -0
  422. package/dist/core/c4/resolve/attested.js.map +1 -0
  423. package/dist/core/c4/resolve/external.js +51 -0
  424. package/dist/core/c4/resolve/external.js.map +1 -0
  425. package/dist/core/c4/resolve/service.js +78 -17
  426. package/dist/core/c4/resolve/service.js.map +1 -1
  427. package/dist/core/c4/resolve/steps.js +290 -0
  428. package/dist/core/c4/resolve/steps.js.map +1 -0
  429. package/dist/core/c4/resolve/systems.js +154 -0
  430. package/dist/core/c4/resolve/systems.js.map +1 -0
  431. package/dist/core/c4/root-project/exclude.js +352 -0
  432. package/dist/core/c4/root-project/exclude.js.map +1 -0
  433. package/dist/core/c4/seed/template.js +65 -1
  434. package/dist/core/c4/seed/template.js.map +1 -1
  435. package/dist/core/c4/service-model/created/models.js +96 -0
  436. package/dist/core/c4/service-model/created/models.js.map +1 -0
  437. package/dist/core/c4/service-model/documents.js +47 -0
  438. package/dist/core/c4/service-model/documents.js.map +1 -0
  439. package/dist/core/c4/service-model/fleet/extending.js +82 -0
  440. package/dist/core/c4/service-model/fleet/extending.js.map +1 -0
  441. package/dist/core/c4/service-model/load.js +165 -0
  442. package/dist/core/c4/service-model/load.js.map +1 -0
  443. package/dist/core/c4/service-model/renderer.js +128 -0
  444. package/dist/core/c4/service-model/renderer.js.map +1 -0
  445. package/dist/core/c4/service-model/shape.js +106 -0
  446. package/dist/core/c4/service-model/shape.js.map +1 -0
  447. package/dist/core/c4/service-model/slice.js +188 -0
  448. package/dist/core/c4/service-model/slice.js.map +1 -0
  449. package/dist/core/c4/source-mask.js +297 -10
  450. package/dist/core/c4/source-mask.js.map +1 -1
  451. package/dist/core/c4/source-scan.js +222 -141
  452. package/dist/core/c4/source-scan.js.map +1 -1
  453. package/dist/core/c4/splice/authored-source.js +79 -13
  454. package/dist/core/c4/splice/authored-source.js.map +1 -1
  455. package/dist/core/c4/splice/contract.js +20 -0
  456. package/dist/core/c4/splice/contract.js.map +1 -1
  457. package/dist/core/c4/splice/delta-blocks.js +20 -20
  458. package/dist/core/c4/splice/delta-blocks.js.map +1 -1
  459. package/dist/core/c4/splice/identity/declared.js +87 -0
  460. package/dist/core/c4/splice/identity/declared.js.map +1 -0
  461. package/dist/core/c4/splice/identity/edges.js +37 -0
  462. package/dist/core/c4/splice/identity/edges.js.map +1 -1
  463. package/dist/core/c4/splice/identity/existing.js +80 -0
  464. package/dist/core/c4/splice/identity/existing.js.map +1 -0
  465. package/dist/core/c4/splice/identity/interior.js +80 -0
  466. package/dist/core/c4/splice/identity/interior.js.map +1 -0
  467. package/dist/core/c4/splice/identity/owner.js +50 -0
  468. package/dist/core/c4/splice/identity/owner.js.map +1 -0
  469. package/dist/core/c4/splice/landscape-merge.js +182 -114
  470. package/dist/core/c4/splice/landscape-merge.js.map +1 -1
  471. package/dist/core/c4/splice/model/merge.js +151 -0
  472. package/dist/core/c4/splice/model/merge.js.map +1 -0
  473. package/dist/core/c4/splice/placement.js +160 -56
  474. package/dist/core/c4/splice/placement.js.map +1 -1
  475. package/dist/core/c4/splice/text/spot.js +131 -0
  476. package/dist/core/c4/splice/text/spot.js.map +1 -0
  477. package/dist/core/c4/workspace.js +13 -19
  478. package/dist/core/c4/workspace.js.map +1 -1
  479. package/dist/core/capabilities/capabilities.js +6 -6
  480. package/dist/core/capabilities/capabilities.js.map +1 -1
  481. package/dist/core/capabilities/delta/doc.js +7 -10
  482. package/dist/core/capabilities/delta/doc.js.map +1 -1
  483. package/dist/core/capabilities/delta/uncovered.js +2 -2
  484. package/dist/core/capabilities/delta/uncovered.js.map +1 -1
  485. package/dist/core/capabilities/findings.js +18 -22
  486. package/dist/core/capabilities/findings.js.map +1 -1
  487. package/dist/core/capabilities/realizes/findings.js +12 -19
  488. package/dist/core/capabilities/realizes/findings.js.map +1 -1
  489. package/dist/core/capabilities/realizes/join.js +0 -20
  490. package/dist/core/capabilities/realizes/join.js.map +1 -1
  491. package/dist/core/capabilities/rollup.js +6 -0
  492. package/dist/core/capabilities/rollup.js.map +1 -1
  493. package/dist/core/capabilities/tree.js +6 -28
  494. package/dist/core/capabilities/tree.js.map +1 -1
  495. package/dist/core/capabilities/usecase-join.js +3 -13
  496. package/dist/core/capabilities/usecase-join.js.map +1 -1
  497. package/dist/core/coherence/authoring/scaffold.js +11 -3
  498. package/dist/core/coherence/authoring/scaffold.js.map +1 -1
  499. package/dist/core/coherence/authoring/sentinels.js +2 -1
  500. package/dist/core/coherence/authoring/sentinels.js.map +1 -1
  501. package/dist/core/coherence/calls/called.js +52 -0
  502. package/dist/core/coherence/calls/called.js.map +1 -0
  503. package/dist/core/coherence/coherence.js +103 -22
  504. package/dist/core/coherence/coherence.js.map +1 -1
  505. package/dist/core/coherence/consumed/operations.js +70 -0
  506. package/dist/core/coherence/consumed/operations.js.map +1 -0
  507. package/dist/core/coherence/consumed/refusal.js +38 -0
  508. package/dist/core/coherence/consumed/refusal.js.map +1 -0
  509. package/dist/core/coherence/covers/health.js +85 -0
  510. package/dist/core/coherence/covers/health.js.map +1 -0
  511. package/dist/core/coherence/declared.js +60 -34
  512. package/dist/core/coherence/declared.js.map +1 -1
  513. package/dist/core/coherence/events/declared.js +44 -59
  514. package/dist/core/coherence/events/declared.js.map +1 -1
  515. package/dist/core/coherence/events/events.js +147 -16
  516. package/dist/core/coherence/events/events.js.map +1 -1
  517. package/dist/core/coherence/events/grades.js +31 -8
  518. package/dist/core/coherence/events/grades.js.map +1 -1
  519. package/dist/core/coherence/events/lookups.js +28 -87
  520. package/dist/core/coherence/events/lookups.js.map +1 -1
  521. package/dist/core/coherence/events/produced.js +100 -0
  522. package/dist/core/coherence/events/produced.js.map +1 -0
  523. package/dist/core/coherence/lookups.js +18 -78
  524. package/dist/core/coherence/lookups.js.map +1 -1
  525. package/dist/core/coherence/retired/archived.js +285 -0
  526. package/dist/core/coherence/retired/archived.js.map +1 -0
  527. package/dist/core/coherence/retired/event-pair.js +62 -0
  528. package/dist/core/coherence/retired/event-pair.js.map +1 -0
  529. package/dist/core/coherence/retired/merged.js +79 -0
  530. package/dist/core/coherence/retired/merged.js.map +1 -0
  531. package/dist/core/coherence/retired/retirement.js +49 -0
  532. package/dist/core/coherence/retired/retirement.js.map +1 -0
  533. package/dist/core/coherence/retired/revival/arrivals.js +131 -0
  534. package/dist/core/coherence/retired/revival/arrivals.js.map +1 -0
  535. package/dist/core/coherence/retired/revival/revived.js +297 -0
  536. package/dist/core/coherence/retired/revival/revived.js.map +1 -0
  537. package/dist/core/consumers/after.js +113 -0
  538. package/dist/core/consumers/after.js.map +1 -0
  539. package/dist/core/consumers/consumers.js +296 -0
  540. package/dist/core/consumers/consumers.js.map +1 -0
  541. package/dist/core/consumers/current.js +211 -0
  542. package/dist/core/consumers/current.js.map +1 -0
  543. package/dist/core/consumers/scan.js +46 -0
  544. package/dist/core/consumers/scan.js.map +1 -0
  545. package/dist/core/consumers/state.js +27 -0
  546. package/dist/core/consumers/state.js.map +1 -0
  547. package/dist/core/delta/delta.js +51 -6
  548. package/dist/core/delta/delta.js.map +1 -1
  549. package/dist/core/dependencies/fanin.js +2 -2
  550. package/dist/core/dependencies/fanin.js.map +1 -1
  551. package/dist/core/deployment/delta.js +191 -0
  552. package/dist/core/deployment/delta.js.map +1 -0
  553. package/dist/core/deployment/objects.js +145 -0
  554. package/dist/core/deployment/objects.js.map +1 -0
  555. package/dist/core/diff/base-git.js +94 -12
  556. package/dist/core/diff/base-git.js.map +1 -1
  557. package/dist/core/diff/base-state.js +49 -21
  558. package/dist/core/diff/base-state.js.map +1 -1
  559. package/dist/core/diff/joins.js +136 -0
  560. package/dist/core/diff/joins.js.map +1 -0
  561. package/dist/core/diff/scope/changed-paths.js +22 -6
  562. package/dist/core/diff/scope/changed-paths.js.map +1 -1
  563. package/dist/core/diff/scope/edges.js +82 -0
  564. package/dist/core/diff/scope/edges.js.map +1 -0
  565. package/dist/core/diff/semantic.js +100 -31
  566. package/dist/core/diff/semantic.js.map +1 -1
  567. package/dist/core/docs.js +31 -22
  568. package/dist/core/docs.js.map +1 -1
  569. package/dist/core/doctor/agents.js +34 -18
  570. package/dist/core/doctor/agents.js.map +1 -1
  571. package/dist/core/doctor/config.js +7 -3
  572. package/dist/core/doctor/config.js.map +1 -1
  573. package/dist/core/doctor/doctor.js +91 -11
  574. package/dist/core/doctor/doctor.js.map +1 -1
  575. package/dist/core/doctor/report.js.map +1 -1
  576. package/dist/core/doctor/reports/scan.js +242 -0
  577. package/dist/core/doctor/reports/scan.js.map +1 -0
  578. package/dist/core/document/apply.js +158 -11
  579. package/dist/core/document/apply.js.map +1 -1
  580. package/dist/core/document/frontmatter.js +55 -0
  581. package/dist/core/document/frontmatter.js.map +1 -1
  582. package/dist/core/document/parse.js +29 -6
  583. package/dist/core/document/parse.js.map +1 -1
  584. package/dist/core/document/scenarios.js +17 -0
  585. package/dist/core/document/scenarios.js.map +1 -1
  586. package/dist/core/document/spec.js +4 -11
  587. package/dist/core/document/spec.js.map +1 -1
  588. package/dist/core/envelope/config.js +10 -0
  589. package/dist/core/envelope/config.js.map +1 -1
  590. package/dist/core/envelope/json.js +34 -0
  591. package/dist/core/envelope/json.js.map +1 -1
  592. package/dist/core/explain/families.js +26 -21
  593. package/dist/core/explain/families.js.map +1 -1
  594. package/dist/core/explain/lookup.js +14 -1
  595. package/dist/core/explain/lookup.js.map +1 -1
  596. package/dist/core/explain/refusals.js +5 -5
  597. package/dist/core/explain/refusals.js.map +1 -1
  598. package/dist/core/explain/terms/documents.js +227 -0
  599. package/dist/core/explain/terms/documents.js.map +1 -0
  600. package/dist/core/explain/terms/done-check.js +144 -0
  601. package/dist/core/explain/terms/done-check.js.map +1 -0
  602. package/dist/core/explain/terms/entry.js +14 -0
  603. package/dist/core/explain/terms/entry.js.map +1 -0
  604. package/dist/core/explain/terms/stages.js +71 -0
  605. package/dist/core/explain/terms/stages.js.map +1 -0
  606. package/dist/core/explain/terms/tasks.js +97 -0
  607. package/dist/core/explain/terms/tasks.js.map +1 -0
  608. package/dist/core/explain/terms.js +68 -109
  609. package/dist/core/explain/terms.js.map +1 -1
  610. package/dist/core/explore/explore.js +40 -10
  611. package/dist/core/explore/explore.js.map +1 -1
  612. package/dist/core/fleet-context.js +81 -95
  613. package/dist/core/fleet-context.js.map +1 -1
  614. package/dist/core/gate/checks.js +11 -4
  615. package/dist/core/gate/checks.js.map +1 -1
  616. package/dist/core/gate/partners.js +69 -28
  617. package/dist/core/gate/partners.js.map +1 -1
  618. package/dist/core/gate/report.js.map +1 -1
  619. package/dist/core/gate/verification.js +75 -12
  620. package/dist/core/gate/verification.js.map +1 -1
  621. package/dist/core/gherkin/stale.js +13 -37
  622. package/dist/core/gherkin/stale.js.map +1 -1
  623. package/dist/core/glossary/delta.js +10 -7
  624. package/dist/core/glossary/delta.js.map +1 -1
  625. package/dist/core/glossary/tree.js +6 -19
  626. package/dist/core/glossary/tree.js.map +1 -1
  627. package/dist/core/kernel/concurrency.js +19 -0
  628. package/dist/core/kernel/concurrency.js.map +1 -1
  629. package/dist/core/kernel/ids/fqn/ancestors.js +65 -0
  630. package/dist/core/kernel/ids/fqn/ancestors.js.map +1 -0
  631. package/dist/core/kernel/path-safety.js +38 -0
  632. package/dist/core/kernel/path-safety.js.map +1 -1
  633. package/dist/core/kernel/records.js +11 -0
  634. package/dist/core/kernel/records.js.map +1 -1
  635. package/dist/core/links/backlinks.js +1 -3
  636. package/dist/core/links/backlinks.js.map +1 -1
  637. package/dist/core/links/corpus.js +51 -37
  638. package/dist/core/links/corpus.js.map +1 -1
  639. package/dist/core/links/findings.js.map +1 -1
  640. package/dist/core/links/parse.js +38 -9
  641. package/dist/core/links/parse.js.map +1 -1
  642. package/dist/core/mcp/argv.js +101 -0
  643. package/dist/core/mcp/argv.js.map +1 -1
  644. package/dist/core/mcp/author-tools.js +2 -1
  645. package/dist/core/mcp/author-tools.js.map +1 -1
  646. package/dist/core/mcp/protocol.js +2 -2
  647. package/dist/core/mcp/protocol.js.map +1 -1
  648. package/dist/core/mcp/tools.js +43 -33
  649. package/dist/core/mcp/tools.js.map +1 -1
  650. package/dist/core/openapi/baseline/gate.js +53 -12
  651. package/dist/core/openapi/baseline/gate.js.map +1 -1
  652. package/dist/core/openapi/baseline/plan.js +40 -10
  653. package/dist/core/openapi/baseline/plan.js.map +1 -1
  654. package/dist/core/openapi/baseline/record.js +0 -1
  655. package/dist/core/openapi/baseline/record.js.map +1 -1
  656. package/dist/core/openapi/contract-text.js +33 -0
  657. package/dist/core/openapi/contract-text.js.map +1 -0
  658. package/dist/core/openapi/contract-tree.js +301 -0
  659. package/dist/core/openapi/contract-tree.js.map +1 -0
  660. package/dist/core/openapi/depth.js +38 -24
  661. package/dist/core/openapi/depth.js.map +1 -1
  662. package/dist/core/openapi/digest.js +52 -2
  663. package/dist/core/openapi/digest.js.map +1 -1
  664. package/dist/core/openapi/doc.js +12 -4
  665. package/dist/core/openapi/doc.js.map +1 -1
  666. package/dist/core/openapi/merge/components.js +25 -60
  667. package/dist/core/openapi/merge/components.js.map +1 -1
  668. package/dist/core/openapi/merge/error.js +3 -13
  669. package/dist/core/openapi/merge/error.js.map +1 -1
  670. package/dist/core/openapi/merge/markers.js +26 -30
  671. package/dist/core/openapi/merge/markers.js.map +1 -1
  672. package/dist/core/openapi/merge/merge.js +28 -52
  673. package/dist/core/openapi/merge/merge.js.map +1 -1
  674. package/dist/core/openapi/merge/pin.js +17 -35
  675. package/dist/core/openapi/merge/pin.js.map +1 -1
  676. package/dist/core/openspec/decide/verdict.js.map +1 -1
  677. package/dist/core/openspec/inventory.js +4 -5
  678. package/dist/core/openspec/inventory.js.map +1 -1
  679. package/dist/core/openspec/model/mapping.js +30 -28
  680. package/dist/core/openspec/model/mapping.js.map +1 -1
  681. package/dist/core/openspec/model/model.js +12 -7
  682. package/dist/core/openspec/model/model.js.map +1 -1
  683. package/dist/core/openspec/scan/changes.js +10 -4
  684. package/dist/core/openspec/scan/changes.js.map +1 -1
  685. package/dist/core/openspec/scan/config.js +7 -16
  686. package/dist/core/openspec/scan/config.js.map +1 -1
  687. package/dist/core/openspec/scan/shape.js +63 -19
  688. package/dist/core/openspec/scan/shape.js.map +1 -1
  689. package/dist/core/openspec/scan/walk.js +21 -38
  690. package/dist/core/openspec/scan/walk.js.map +1 -1
  691. package/dist/core/pack/living.js +43 -4
  692. package/dist/core/pack/living.js.map +1 -1
  693. package/dist/core/pack/pack.js +50 -6
  694. package/dist/core/pack/pack.js.map +1 -1
  695. package/dist/core/projection/arch-slice.js +2 -2
  696. package/dist/core/projection/arch-slice.js.map +1 -1
  697. package/dist/core/projection/introduced.js +14 -0
  698. package/dist/core/projection/introduced.js.map +1 -0
  699. package/dist/core/provenance/findings.js +48 -12
  700. package/dist/core/provenance/findings.js.map +1 -1
  701. package/dist/core/provenance/git.js +33 -57
  702. package/dist/core/provenance/git.js.map +1 -1
  703. package/dist/core/provenance/gitq/moves.js +71 -114
  704. package/dist/core/provenance/gitq/moves.js.map +1 -1
  705. package/dist/core/provenance/gitq/vouched-ancestor.js +2 -2
  706. package/dist/core/provenance/gitq/vouched-ancestor.js.map +1 -1
  707. package/dist/core/provenance/sources.js +23 -6
  708. package/dist/core/provenance/sources.js.map +1 -1
  709. package/dist/core/provenance/stamp.js +5 -17
  710. package/dist/core/provenance/stamp.js.map +1 -1
  711. package/dist/core/repo/authored/paths.js +18 -0
  712. package/dist/core/repo/authored/paths.js.map +1 -1
  713. package/dist/core/repo/entries.js.map +1 -1
  714. package/dist/core/repo/paths.js +92 -6
  715. package/dist/core/repo/paths.js.map +1 -1
  716. package/dist/core/repo/repo.js +74 -14
  717. package/dist/core/repo/repo.js.map +1 -1
  718. package/dist/core/repo/tree/find.js +12 -3
  719. package/dist/core/repo/tree/find.js.map +1 -1
  720. package/dist/core/repo/tree/fs.js +27 -1
  721. package/dist/core/repo/tree/fs.js.map +1 -1
  722. package/dist/core/repo/tree/render/body.js +258 -0
  723. package/dist/core/repo/tree/render/body.js.map +1 -0
  724. package/dist/core/repo/tree/render/projects.js +182 -0
  725. package/dist/core/repo/tree/render/projects.js.map +1 -0
  726. package/dist/core/repo/tree/render/service/header.js +125 -0
  727. package/dist/core/repo/tree/render/service/header.js.map +1 -0
  728. package/dist/core/repo/tree/render/service/peers.js +28 -0
  729. package/dist/core/repo/tree/render/service/peers.js.map +1 -0
  730. package/dist/core/repo/tree/render/service/view-id.js +67 -0
  731. package/dist/core/repo/tree/render/service/view-id.js.map +1 -0
  732. package/dist/core/repo/tree/render/service/views.js +78 -0
  733. package/dist/core/repo/tree/render/service/views.js.map +1 -0
  734. package/dist/core/repo/tree/render/stale.js +42 -0
  735. package/dist/core/repo/tree/render/stale.js.map +1 -0
  736. package/dist/core/repo/tree/render/text.js +84 -0
  737. package/dist/core/repo/tree/render/text.js.map +1 -0
  738. package/dist/core/repo/tree/render/views.js +293 -0
  739. package/dist/core/repo/tree/render/views.js.map +1 -0
  740. package/dist/core/repo/tree/walk.js +53 -32
  741. package/dist/core/repo/tree/walk.js.map +1 -1
  742. package/dist/core/results.js +47 -12
  743. package/dist/core/results.js.map +1 -1
  744. package/dist/core/scaffold/landscape.js +121 -13
  745. package/dist/core/scaffold/landscape.js.map +1 -1
  746. package/dist/core/scaffold/legacy.js +271 -0
  747. package/dist/core/scaffold/legacy.js.map +1 -0
  748. package/dist/core/staging/commit.js +26 -15
  749. package/dist/core/staging/commit.js.map +1 -1
  750. package/dist/core/staging/lock.js +74 -12
  751. package/dist/core/staging/lock.js.map +1 -1
  752. package/dist/core/staging/recovery/intent.js +2 -5
  753. package/dist/core/staging/recovery/intent.js.map +1 -1
  754. package/dist/core/staging/recovery/recover.js +84 -6
  755. package/dist/core/staging/recovery/recover.js.map +1 -1
  756. package/dist/core/staging/snapshot/manifest.js +188 -0
  757. package/dist/core/staging/snapshot/manifest.js.map +1 -0
  758. package/dist/core/staging/{snapshot.js → snapshot/snapshot.js} +39 -45
  759. package/dist/core/staging/snapshot/snapshot.js.map +1 -0
  760. package/dist/core/staging/txn/forward.js +24 -14
  761. package/dist/core/staging/txn/forward.js.map +1 -1
  762. package/dist/core/staging/writes.js.map +1 -1
  763. package/dist/core/status/actions/execution.js +11 -0
  764. package/dist/core/status/actions/execution.js.map +1 -1
  765. package/dist/core/status/contracts.js +39 -15
  766. package/dist/core/status/contracts.js.map +1 -1
  767. package/dist/core/status/feature/artifacts.js +33 -8
  768. package/dist/core/status/feature/artifacts.js.map +1 -1
  769. package/dist/core/status/feature/feature.js +24 -17
  770. package/dist/core/status/feature/feature.js.map +1 -1
  771. package/dist/core/status/feature/next.js +20 -7
  772. package/dist/core/status/feature/next.js.map +1 -1
  773. package/dist/core/status/feature/words.js +96 -0
  774. package/dist/core/status/feature/words.js.map +1 -0
  775. package/dist/core/status/fleet/fleet.js +43 -14
  776. package/dist/core/status/fleet/fleet.js.map +1 -1
  777. package/dist/core/status/fleet/next.js +153 -58
  778. package/dist/core/status/fleet/next.js.map +1 -1
  779. package/dist/core/status/report.js.map +1 -1
  780. package/dist/core/status/scan.js.map +1 -1
  781. package/dist/core/status/verification.js +30 -15
  782. package/dist/core/status/verification.js.map +1 -1
  783. package/dist/core/tasks/packet.js +199 -0
  784. package/dist/core/tasks/packet.js.map +1 -0
  785. package/dist/core/tasks/record.js +43 -0
  786. package/dist/core/tasks/record.js.map +1 -0
  787. package/dist/core/tasks/sources.js +181 -0
  788. package/dist/core/tasks/sources.js.map +1 -0
  789. package/dist/core/tasks/stamps.js +76 -0
  790. package/dist/core/tasks/stamps.js.map +1 -0
  791. package/dist/core/tasks/unit.js +0 -0
  792. package/dist/core/tasks/unit.js.map +1 -0
  793. package/dist/core/usecases/capability.js +11 -14
  794. package/dist/core/usecases/capability.js.map +1 -1
  795. package/dist/core/usecases/delta/claims.js +31 -7
  796. package/dist/core/usecases/delta/claims.js.map +1 -1
  797. package/dist/core/usecases/delta/flows.js +5 -7
  798. package/dist/core/usecases/delta/flows.js.map +1 -1
  799. package/dist/core/usecases/delta/modified.js +315 -0
  800. package/dist/core/usecases/delta/modified.js.map +1 -0
  801. package/dist/core/usecases/delta/overlay.js +32 -191
  802. package/dist/core/usecases/delta/overlay.js.map +1 -1
  803. package/dist/core/usecases/fleet.js +195 -36
  804. package/dist/core/usecases/fleet.js.map +1 -1
  805. package/dist/{commands/validate/fleet/usecases → core/usecases/grade}/capability-tag.js +8 -9
  806. package/dist/core/usecases/grade/capability-tag.js.map +1 -0
  807. package/dist/core/usecases/grade/feature.js +88 -0
  808. package/dist/core/usecases/grade/feature.js.map +1 -0
  809. package/dist/{commands/validate/fleet/usecases → core/usecases/grade}/requirement-tag.js +3 -4
  810. package/dist/core/usecases/grade/requirement-tag.js.map +1 -0
  811. package/dist/{commands/validate/fleet/usecases → core/usecases/grade}/steps.js +102 -33
  812. package/dist/core/usecases/grade/steps.js.map +1 -0
  813. package/dist/{commands/validate/fleet/usecases → core/usecases/grade}/usecases.js +23 -10
  814. package/dist/core/usecases/grade/usecases.js.map +1 -0
  815. package/dist/core/usecases/operations.js +26 -14
  816. package/dist/core/usecases/operations.js.map +1 -1
  817. package/dist/core/usecases/place.js.map +1 -1
  818. package/dist/core/usecases/service/exclude.js +119 -0
  819. package/dist/core/usecases/service/exclude.js.map +1 -0
  820. package/dist/core/usecases/service/flows.js +164 -0
  821. package/dist/core/usecases/service/flows.js.map +1 -0
  822. package/dist/core/usecases/suites/participants.js +83 -0
  823. package/dist/core/usecases/suites/participants.js.map +1 -0
  824. package/dist/core/usecases/suites/suites.js +45 -0
  825. package/dist/core/usecases/suites/suites.js.map +1 -0
  826. package/dist/core/verify/answers.js +12 -5
  827. package/dist/core/verify/answers.js.map +1 -1
  828. package/dist/core/verify/build.js +102 -82
  829. package/dist/core/verify/build.js.map +1 -1
  830. package/dist/core/verify/checklist.js +70 -12
  831. package/dist/core/verify/checklist.js.map +1 -1
  832. package/dist/core/verify/location.js +67 -0
  833. package/dist/core/verify/location.js.map +1 -0
  834. package/dist/core/verify/pins/lint.js +3 -2
  835. package/dist/core/verify/pins/lint.js.map +1 -1
  836. package/dist/core/verify/pins/pin.js +1 -1
  837. package/dist/core/verify/pins/pin.js.map +1 -1
  838. package/dist/core/verify/read/file.js +224 -0
  839. package/dist/core/verify/read/file.js.map +1 -0
  840. package/dist/core/verify/{file.js → read/shape.js} +16 -104
  841. package/dist/core/verify/read/shape.js.map +1 -0
  842. package/dist/core/verify/read/union.js +105 -0
  843. package/dist/core/verify/read/union.js.map +1 -0
  844. package/dist/core/verify/record.js +35 -12
  845. package/dist/core/verify/record.js.map +1 -1
  846. package/dist/core/verify/store/commit.js +40 -30
  847. package/dist/core/verify/store/commit.js.map +1 -1
  848. package/dist/core/verify/store/render.js +8 -4
  849. package/dist/core/verify/store/render.js.map +1 -1
  850. package/dist/core/vocabulary/issue.js +4 -0
  851. package/dist/core/vocabulary/issue.js.map +1 -1
  852. package/dist/core/vocabulary/maturity.js +75 -4
  853. package/dist/core/vocabulary/maturity.js.map +1 -1
  854. package/dist/core/vocabulary/report.js +16 -1
  855. package/dist/core/vocabulary/report.js.map +1 -1
  856. package/examples/README.md +54 -11
  857. package/examples/docs/architecture/landscape.likec4 +62 -6
  858. package/examples/docs/architecture/services.likec4 +70 -0
  859. package/examples/docs/architecture/subsystems.likec4 +7 -0
  860. package/examples/docs/architecture/usecases/order-notification.likec4 +16 -7
  861. package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-service/asyncapi.yaml +11 -8
  862. package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-split-service/openapi.yaml +6 -6
  863. package/examples/docs/features/FEAT-112-retire-order-v1/specs/order-service/openapi.yaml +4 -1
  864. package/examples/docs/features/archive/FEAT-088-refunds/specs/payment-service/openapi.yaml +13 -10
  865. package/examples/docs/likec4.config.json +0 -1
  866. package/examples/docs/services/checkout-web/model.likec4 +39 -56
  867. package/examples/docs/services/order-service/arch.spec.md +13 -6
  868. package/examples/docs/services/order-service/asyncapi.yaml +3 -2
  869. package/examples/docs/services/order-service/model.likec4 +58 -70
  870. package/examples/docs/services/payment-service/arch.spec.md +7 -4
  871. package/examples/docs/services/payment-service/model.likec4 +38 -37
  872. package/examples/docs/services/platform/identity-service/arch.spec.md +7 -4
  873. package/examples/docs/services/platform/identity-service/model.likec4 +35 -37
  874. package/examples/docs/services/platform/notification-service/asyncapi.yaml +2 -1
  875. package/examples/docs/services/platform/notification-service/health.yaml +8 -3
  876. package/examples/docs/services/platform/notification-service/model.likec4 +43 -64
  877. package/package.json +1 -1
  878. package/dist/commands/validate/checks/vocabulary.js +0 -31
  879. package/dist/commands/validate/checks/vocabulary.js.map +0 -1
  880. package/dist/commands/validate/fleet/usecases/capability-tag.js.map +0 -1
  881. package/dist/commands/validate/fleet/usecases/requirement-tag.js.map +0 -1
  882. package/dist/commands/validate/fleet/usecases/steps.js.map +0 -1
  883. package/dist/commands/validate/fleet/usecases/usecases.js.map +0 -1
  884. package/dist/core/agent/agents-md/artifacts.js +0 -220
  885. package/dist/core/agent/agents-md/artifacts.js.map +0 -1
  886. package/dist/core/agent/agents-md/cycle.js +0 -165
  887. package/dist/core/agent/agents-md/cycle.js.map +0 -1
  888. package/dist/core/agent/agents-md/shipped/archive-gate.js +0 -98
  889. package/dist/core/agent/agents-md/shipped/archive-gate.js.map +0 -1
  890. package/dist/core/agent/agents-md/spine.js +0 -40
  891. package/dist/core/agent/agents-md/spine.js.map +0 -1
  892. package/dist/core/coherence/events/merged.js +0 -40
  893. package/dist/core/coherence/events/merged.js.map +0 -1
  894. package/dist/core/diff/current-state.js +0 -96
  895. package/dist/core/diff/current-state.js.map +0 -1
  896. package/dist/core/diff/victims.js +0 -247
  897. package/dist/core/diff/victims.js.map +0 -1
  898. package/dist/core/repo/tree/views.js +0 -172
  899. package/dist/core/repo/tree/views.js.map +0 -1
  900. package/dist/core/staging/snapshot.js.map +0 -1
  901. package/dist/core/verify/file.js.map +0 -1
@@ -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"]}
@@ -0,0 +1,71 @@
1
+ export const STAGE_TERMS = {
2
+ heading: "feature stages — what `loam status` reports",
3
+ terms: [
4
+ {
5
+ term: "stage",
6
+ aliases: ["stages", "missing", "blocked", "draft"],
7
+ paragraph: "A stage is where a feature, or one artifact it owes, stands — one of five closed values `loam status` reports. " +
8
+ "In `--json` a feature carries it as `stage` and each artifact as `status`. " +
9
+ "`missing` (owed, nothing in the way — write it now). " +
10
+ "`blocked` (not written and not writable yet; the entry names what comes first — an artifact it derives from, " +
11
+ "or another feature that has to archive first). " +
12
+ "`draft` (on disk, and the shared checks report an error against it, or a warning that gates archive — what " +
13
+ "exists is wrong, and the fix is in the documents). " +
14
+ "`ready` and `done` have entries of their own, because they are the two that mislead. " +
15
+ "The pairs are the point: `missing` says write it now where `blocked` says you cannot yet, and `draft` says the " +
16
+ "document is wrong where `ready` says it is right and the world has not caught up. " +
17
+ "A feature's stage is the worst thing it owes, graded on the union of what `loam validate --feature` and " +
18
+ "`loam archive` refuse, so it may be more pessimistic than either and can never be greener than both; the " +
19
+ "fleet form never says `draft`, because grading is a per-feature cost it does not pay. " +
20
+ "Not to be confused with `status: draft` in a document's frontmatter, which says no person has vouched for it " +
21
+ "yet (`loam explain vouch`).",
22
+ pins: [
23
+ { source: "CODES_PAGE", phrase: "`missing` (owed, nothing in" },
24
+ { source: "CODES_PAGE", phrase: "`blocked` (not written and not writable yet; the entry" },
25
+ { source: "CODES_PAGE", phrase: "`draft` (on disk, and the shared checks report an error" },
26
+ { source: "CODES_PAGE", phrase: "so it may be more pessimistic than either and can never be greener than both" },
27
+ ],
28
+ },
29
+ {
30
+ term: "ready",
31
+ aliases: [],
32
+ paragraph: "Ready means the documents are written and pass the shared checks — it does not mean anything is built or verified. " +
33
+ "On a feature, `ready` is every artifact on disk and clean while the done-check is not yet discharged: the " +
34
+ "code may not exist yet, and the claims `loam verify` asks are not all answered by evidence. " +
35
+ "As an artifact's `status`, `ready` (on disk and clean, but something outside the documents — code, a test " +
36
+ "run, a recording — still has to answer it) is a verification record whose claims are still open. " +
37
+ "A record that is complete but rests on an agent's word for a scenario claim — **attested** — is still " +
38
+ "`ready`, because only a `verified` verdict makes a feature `done`. " +
39
+ "So the next move from `ready` is never another edit to a document that is already right: it is " +
40
+ "`loam tasks <FEAT>` for the work still open, and `loam verify <FEAT>` for what the checklist still asks. " +
41
+ "The stage that means the document itself is wrong is `draft`.",
42
+ pins: [
43
+ { source: "CODES_PAGE", phrase: "`ready` (on disk and clean, but something" },
44
+ { source: "CODES_PAGE", phrase: "outside the documents — code, a test run, a recording — still has to answer it" },
45
+ ],
46
+ },
47
+ {
48
+ term: "done",
49
+ aliases: [],
50
+ paragraph: "Done means nothing more is owed — and on an archived feature it says only that the feature was archived, not that " +
51
+ "anybody verified it. " +
52
+ "A feature in flight earns `done`: every artifact is clean and the done-check's verdict is `verified` (every " +
53
+ "claim recorded confirmed, the scenario claims by a test run), so its next step is `next.archive` — a dry run " +
54
+ "of `loam archive <FEAT>`, then the merge. " +
55
+ "An ARCHIVED feature is `done` whatever its record says, because it is archived and for no other reason. " +
56
+ "Archiving merges documents; it checks no code and no evidence, and it does not wait for the done-check. " +
57
+ "**Nothing gates on it.** `loam archive` will ship an unverified feature. " +
58
+ "The verification verdict beside the stage (`verified`, `attested`, `unverified`, or no record at all) is what " +
59
+ "says whether it was ever verified, and the `next.archived` step `loam status` gives it says the same. " +
60
+ "On an artifact row, `done` on a file that is not there means the feature owes no such file. " +
61
+ "In `loam tasks`, `done` counts units that have left the packet: the unit no longer appears, and it stops " +
62
+ "appearing only once its claim is recorded confirmed in a verification record that is not stale.",
63
+ pins: [
64
+ { source: "CODES_PAGE", phrase: "is `done` whatever its record says" },
65
+ { source: "DONE_CHECK", phrase: "**Nothing gates on it.** `loam archive` will ship an unverified feature." },
66
+ { source: "IMPLEMENT", phrase: "the unit no longer appears, and it stops appearing only once its claim is" },
67
+ ],
68
+ },
69
+ ],
70
+ };
71
+ //# sourceMappingURL=stages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stages.js","sourceRoot":"","sources":["../../../../src/core/explain/terms/stages.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,WAAW,GAAc;IACpC,OAAO,EAAE,6CAA6C;IACtD,KAAK,EAAE;QACL;YACE,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;YAClD,SAAS,EACP,iHAAiH;gBACjH,6EAA6E;gBAC7E,uDAAuD;gBACvD,+GAA+G;gBAC/G,iDAAiD;gBACjD,6GAA6G;gBAC7G,qDAAqD;gBACrD,uFAAuF;gBACvF,iHAAiH;gBACjH,oFAAoF;gBACpF,0GAA0G;gBAC1G,2GAA2G;gBAC3G,wFAAwF;gBACxF,+GAA+G;gBAC/G,6BAA6B;YAC/B,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,6BAA6B,EAAE;gBAC/D,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,wDAAwD,EAAE;gBAC1F,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,yDAAyD,EAAE;gBAC3F,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,8EAA8E,EAAE;aACjH;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,EAAE;YACX,SAAS,EACP,qHAAqH;gBACrH,4GAA4G;gBAC5G,8FAA8F;gBAC9F,4GAA4G;gBAC5G,mGAAmG;gBACnG,wGAAwG;gBACxG,qEAAqE;gBACrE,iGAAiG;gBACjG,2GAA2G;gBAC3G,+DAA+D;YACjE,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,2CAA2C,EAAE;gBAC7E,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,gFAAgF,EAAE;aACnH;SACF;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,EAAE;YACX,SAAS,EACP,oHAAoH;gBACpH,uBAAuB;gBACvB,8GAA8G;gBAC9G,+GAA+G;gBAC/G,4CAA4C;gBAC5C,0GAA0G;gBAC1G,0GAA0G;gBAC1G,2EAA2E;gBAC3E,gHAAgH;gBAChH,wGAAwG;gBACxG,8FAA8F;gBAC9F,2GAA2G;gBAC3G,iGAAiG;YACnG,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,oCAAoC,EAAE;gBACtE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,0EAA0E,EAAE;gBAC5G,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,2EAA2E,EAAE;aAC7G;SACF;KACF;CACF,CAAC","sourcesContent":["/**\n * The stage terms: the five closed values `loam status` reports for a feature\n * and for every artifact it owes (core/status/report.ts, \"The status\n * vocabulary\"), and the two of them that mislead.\n *\n * `ready` and `done` are entries of their own rather than aliases of `stage`\n * because they are where a reader goes wrong, and in opposite directions.\n * `ready` reads as \"built\" and means only that the DOCUMENTS are right — the\n * code may not exist and no claim may be answered. `done` on an archived\n * feature reads as \"verified\" and means only that it was archived, which\n * checks no code and no evidence. The JSON `stage` values are a frozen\n * contract and keep their spelling; the words around them are what can be\n * fixed, and these paragraphs are where `loam explain` fixes them.\n *\n * The other three share `stage` as aliases: each one is a single clause, and\n * the pairs (missing against blocked, draft against ready) are only legible\n * read together.\n */\nimport type { TermGroup } from \"./entry.js\";\n\nexport const STAGE_TERMS: TermGroup = {\n heading: \"feature stages — what `loam status` reports\",\n terms: [\n {\n term: \"stage\",\n aliases: [\"stages\", \"missing\", \"blocked\", \"draft\"],\n paragraph:\n \"A stage is where a feature, or one artifact it owes, stands — one of five closed values `loam status` reports. \" +\n \"In `--json` a feature carries it as `stage` and each artifact as `status`. \" +\n \"`missing` (owed, nothing in the way — write it now). \" +\n \"`blocked` (not written and not writable yet; the entry names what comes first — an artifact it derives from, \" +\n \"or another feature that has to archive first). \" +\n \"`draft` (on disk, and the shared checks report an error against it, or a warning that gates archive — what \" +\n \"exists is wrong, and the fix is in the documents). \" +\n \"`ready` and `done` have entries of their own, because they are the two that mislead. \" +\n \"The pairs are the point: `missing` says write it now where `blocked` says you cannot yet, and `draft` says the \" +\n \"document is wrong where `ready` says it is right and the world has not caught up. \" +\n \"A feature's stage is the worst thing it owes, graded on the union of what `loam validate --feature` and \" +\n \"`loam archive` refuse, so it may be more pessimistic than either and can never be greener than both; the \" +\n \"fleet form never says `draft`, because grading is a per-feature cost it does not pay. \" +\n \"Not to be confused with `status: draft` in a document's frontmatter, which says no person has vouched for it \" +\n \"yet (`loam explain vouch`).\",\n pins: [\n { source: \"CODES_PAGE\", phrase: \"`missing` (owed, nothing in\" },\n { source: \"CODES_PAGE\", phrase: \"`blocked` (not written and not writable yet; the entry\" },\n { source: \"CODES_PAGE\", phrase: \"`draft` (on disk, and the shared checks report an error\" },\n { source: \"CODES_PAGE\", phrase: \"so it may be more pessimistic than either and can never be greener than both\" },\n ],\n },\n {\n term: \"ready\",\n aliases: [],\n paragraph:\n \"Ready means the documents are written and pass the shared checks — it does not mean anything is built or verified. \" +\n \"On a feature, `ready` is every artifact on disk and clean while the done-check is not yet discharged: the \" +\n \"code may not exist yet, and the claims `loam verify` asks are not all answered by evidence. \" +\n \"As an artifact's `status`, `ready` (on disk and clean, but something outside the documents — code, a test \" +\n \"run, a recording — still has to answer it) is a verification record whose claims are still open. \" +\n \"A record that is complete but rests on an agent's word for a scenario claim — **attested** — is still \" +\n \"`ready`, because only a `verified` verdict makes a feature `done`. \" +\n \"So the next move from `ready` is never another edit to a document that is already right: it is \" +\n \"`loam tasks <FEAT>` for the work still open, and `loam verify <FEAT>` for what the checklist still asks. \" +\n \"The stage that means the document itself is wrong is `draft`.\",\n pins: [\n { source: \"CODES_PAGE\", phrase: \"`ready` (on disk and clean, but something\" },\n { source: \"CODES_PAGE\", phrase: \"outside the documents — code, a test run, a recording — still has to answer it\" },\n ],\n },\n {\n term: \"done\",\n aliases: [],\n paragraph:\n \"Done means nothing more is owed — and on an archived feature it says only that the feature was archived, not that \" +\n \"anybody verified it. \" +\n \"A feature in flight earns `done`: every artifact is clean and the done-check's verdict is `verified` (every \" +\n \"claim recorded confirmed, the scenario claims by a test run), so its next step is `next.archive` — a dry run \" +\n \"of `loam archive <FEAT>`, then the merge. \" +\n \"An ARCHIVED feature is `done` whatever its record says, because it is archived and for no other reason. \" +\n \"Archiving merges documents; it checks no code and no evidence, and it does not wait for the done-check. \" +\n \"**Nothing gates on it.** `loam archive` will ship an unverified feature. \" +\n \"The verification verdict beside the stage (`verified`, `attested`, `unverified`, or no record at all) is what \" +\n \"says whether it was ever verified, and the `next.archived` step `loam status` gives it says the same. \" +\n \"On an artifact row, `done` on a file that is not there means the feature owes no such file. \" +\n \"In `loam tasks`, `done` counts units that have left the packet: the unit no longer appears, and it stops \" +\n \"appearing only once its claim is recorded confirmed in a verification record that is not stale.\",\n pins: [\n { source: \"CODES_PAGE\", phrase: \"is `done` whatever its record says\" },\n { source: \"DONE_CHECK\", phrase: \"**Nothing gates on it.** `loam archive` will ship an unverified feature.\" },\n { source: \"IMPLEMENT\", phrase: \"the unit no longer appears, and it stops appearing only once its claim is\" },\n ],\n },\n ],\n};\n"]}
@@ -0,0 +1,97 @@
1
+ export const TASK_TERMS = {
2
+ heading: "the work packet — what `loam tasks` lists",
3
+ terms: [
4
+ {
5
+ term: "unit",
6
+ aliases: ["units", "work packet", "packet"],
7
+ paragraph: "A unit is one piece of open work in the packet `loam tasks` derives, and its id is the id of the done-check " +
8
+ "claim it closes. " +
9
+ "`loam tasks <FEAT> --service <id> --next --json` is ONE unit of work, and the loop an implementation runs " +
10
+ "inside; drop `--next` for every open unit. " +
11
+ "Each entry of `units[]` carries its `id` (the same id the verify checklist uses for that claim), its `kind`, " +
12
+ "the `source` it was derived from, and `done.check` — the fact that closes it. " +
13
+ "`at` is the instruction. It is the step the unit waits at — `describe`, `generate`, `implement` or " +
14
+ "`attested` — and each names exactly one action (`loam explain <step>`). " +
15
+ "The packet is derived, never stored: from the verify checklist, the delta, the verification record and, in a " +
16
+ "bound service repo, the digest stamps of the generated `.feature` files, so it is recomputed on every run. " +
17
+ "One kind is not a claim: `requirement.described`, a requirement with no scenario yet (`loam explain describe`).",
18
+ pins: [
19
+ { source: "IMPLEMENT", phrase: "ONE unit of work, and the loop" },
20
+ { source: "IMPLEMENT", phrase: "(the same id the verify checklist uses" },
21
+ { source: "IMPLEMENT", phrase: "`at` is the instruction." },
22
+ ],
23
+ },
24
+ {
25
+ term: "frontier",
26
+ aliases: [],
27
+ paragraph: "The frontier is the head of the work packet: the first ten open unit ids, in the order `loam tasks` says to " +
28
+ "take them. " +
29
+ "`--json` carries it as `frontier` (the first ten open unit ids, in order), with how many more are open beside " +
30
+ "it, and `--next` prints its head alone, in full, with what closes it. " +
31
+ "It is recomputed from the documents on every run, which is what makes taking the head of it always safe — so " +
32
+ "re-run `loam tasks <FEAT> --service <id>` after every recording instead of working down a list you copied out. " +
33
+ "When the packet is narrowed to one service, `waitingOn` names what another service still owes before your " +
34
+ "frontier can move.",
35
+ pins: [
36
+ { source: "IMPLEMENT", phrase: "`frontier` (the first ten open unit ids, in order)" },
37
+ { source: "IMPLEMENT", phrase: "every run, which is what makes taking the head of it always safe" },
38
+ { source: "IMPLEMENT", phrase: "still owes before your frontier can move" },
39
+ ],
40
+ },
41
+ {
42
+ term: "describe",
43
+ aliases: ["requirement.described"],
44
+ paragraph: "Describe is the first step a `loam tasks` unit can wait at: the requirement owns no scenarios yet. " +
45
+ "So there is nothing to generate a test from and nothing for `loam verify` to claim. " +
46
+ "Write the Given/When/Then in the DOCS repo, on the requirement the unit's `source` names, and nothing else — " +
47
+ "loam does not author, and no amount of code closes a unit sitting here. " +
48
+ "Its kind is `requirement.described`, the one unit kind that is not a done-check claim, because a requirement " +
49
+ "with no scenario asks no question anybody could answer with evidence; it closes when the requirement carries " +
50
+ "at least one `#### Scenario:`, which `loam validate --feature <FEAT>` grades. " +
51
+ "The steps after it are `generate`, `implement` and `attested`.",
52
+ pins: [
53
+ { source: "IMPLEMENT", phrase: "the requirement owns no scenarios yet" },
54
+ { source: "IMPLEMENT", phrase: "no amount of code closes a unit sitting here" },
55
+ ],
56
+ },
57
+ {
58
+ term: "generate",
59
+ aliases: [],
60
+ paragraph: "Generate is the step a `loam tasks` unit waits at when its scenario's test has not been generated yet. " +
61
+ "`generate` means no stamped `.feature` carries this scenario's digest, and the only action is " +
62
+ "`loam gherkin <FEAT>` in the service's own repository — do not write code. It writes one digest-stamped " +
63
+ "`.feature` per changed requirement under `<gherkinDir>/loam/`. Those files ARE the acceptance criteria. " +
64
+ "Never edit them: regeneration rewrites the directory. Generating is the whole action, and on the next run the " +
65
+ "same unit reads `implement`. " +
66
+ "The stamps are read from the repository `loam tasks` runs in, and nobody else's: an `unknown` makes every " +
67
+ "`generate` verdict a guess, so fix the binding before acting on one.",
68
+ pins: [
69
+ { source: "IMPLEMENT", phrase: "no stamped `.feature` carries this scenario's digest" },
70
+ { source: "IMPLEMENT", phrase: "Those files ARE the acceptance criteria." },
71
+ { source: "IMPLEMENT", phrase: "an `unknown` makes every `generate` verdict a guess" },
72
+ ],
73
+ },
74
+ {
75
+ term: "implement",
76
+ aliases: [],
77
+ paragraph: "Implement is the step a `loam tasks` unit waits at when what is still owed is code, or a recorded answer " +
78
+ "about code. " +
79
+ "For a scenario claim it means the stamped scenario exists and no recorded run has confirmed it: write step " +
80
+ "definitions outside the generated `loam/` directory, implement until the suite passes, then record the run " +
81
+ "with `loam verify <FEAT> --service <id> --results report.json`. " +
82
+ "For the other claim kinds it means the claim is not yet recorded confirmed: answer from the code with " +
83
+ "`file:line` evidence (`loam verify <FEAT> --record answers.json --service <id>`), or for `api.exposes` with a " +
84
+ "contract-test report. " +
85
+ "Either way the record decides — never your own reading of the code you just wrote — and the unit leaves " +
86
+ "the packet only once its claim is recorded confirmed. " +
87
+ "A scenario also reads `implement` when nothing could see its generated test — the stamps are read from the " +
88
+ "repository `loam tasks` runs in alone — so check `stamps` before writing a test by hand. " +
89
+ "`loam instructions loam-implement <FEAT>` is the whole protocol.",
90
+ pins: [
91
+ { source: "IMPLEMENT", phrase: "the stamped scenario exists and no recorded run has confirmed" },
92
+ { source: "IMPLEMENT", phrase: "never your own reading of the code you just wrote" },
93
+ ],
94
+ },
95
+ ],
96
+ };
97
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../../src/core/explain/terms/tasks.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,UAAU,GAAc;IACnC,OAAO,EAAE,2CAA2C;IACpD,KAAK,EAAE;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC;YAC3C,SAAS,EACP,8GAA8G;gBAC9G,mBAAmB;gBACnB,4GAA4G;gBAC5G,6CAA6C;gBAC7C,+GAA+G;gBAC/G,gFAAgF;gBAChF,qGAAqG;gBACrG,0EAA0E;gBAC1E,+GAA+G;gBAC/G,6GAA6G;gBAC7G,iHAAiH;YACnH,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,gCAAgC,EAAE;gBACjE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,wCAAwC,EAAE;gBACzE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,0BAA0B,EAAE;aAC5D;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,EAAE;YACX,SAAS,EACP,8GAA8G;gBAC9G,aAAa;gBACb,gHAAgH;gBAChH,wEAAwE;gBACxE,+GAA+G;gBAC/G,iHAAiH;gBACjH,4GAA4G;gBAC5G,oBAAoB;YACtB,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,oDAAoD,EAAE;gBACrF,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,kEAAkE,EAAE;gBACnG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,0CAA0C,EAAE;aAC5E;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,CAAC,uBAAuB,CAAC;YAClC,SAAS,EACP,qGAAqG;gBACrG,sFAAsF;gBACtF,+GAA+G;gBAC/G,0EAA0E;gBAC1E,+GAA+G;gBAC/G,+GAA+G;gBAC/G,gFAAgF;gBAChF,gEAAgE;YAClE,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,uCAAuC,EAAE;gBACxE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,8CAA8C,EAAE;aAChF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,EAAE;YACX,SAAS,EACP,yGAAyG;gBACzG,gGAAgG;gBAChG,0GAA0G;gBAC1G,0GAA0G;gBAC1G,gHAAgH;gBAChH,+BAA+B;gBAC/B,4GAA4G;gBAC5G,sEAAsE;YACxE,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,sDAAsD,EAAE;gBACvF,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,0CAA0C,EAAE;gBAC3E,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,qDAAqD,EAAE;aACvF;SACF;QACD;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,EAAE;YACX,SAAS,EACP,2GAA2G;gBAC3G,cAAc;gBACd,6GAA6G;gBAC7G,6GAA6G;gBAC7G,kEAAkE;gBAClE,wGAAwG;gBACxG,gHAAgH;gBAChH,wBAAwB;gBACxB,0GAA0G;gBAC1G,wDAAwD;gBACxD,6GAA6G;gBAC7G,2FAA2F;gBAC3F,kEAAkE;YACpE,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,+DAA+D,EAAE;gBAChG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,mDAAmD,EAAE;aACrF;SACF;KACF;CACF,CAAC","sourcesContent":["/**\n * The work-packet terms: the words `loam tasks` prints — a unit, the frontier,\n * and the steps a unit waits at (core/tasks/unit.ts `TaskStep`).\n *\n * The fourth step, `attested`, is not here: it is the same fact as the\n * done-check verdict of that name, seen from `loam tasks` rather than from\n * `loam verify`, and ./done-check.ts answers both readings in one entry. A\n * second `attested` would be a name two entries compete for.\n *\n * Every pin points at step 3 of the /loam-implement body, which is where the\n * binary teaches the packet — each step's own bullet there is one line, so\n * each entry here pins the clause that bullet opens with.\n */\nimport type { TermGroup } from \"./entry.js\";\n\nexport const TASK_TERMS: TermGroup = {\n heading: \"the work packet — what `loam tasks` lists\",\n terms: [\n {\n term: \"unit\",\n aliases: [\"units\", \"work packet\", \"packet\"],\n paragraph:\n \"A unit is one piece of open work in the packet `loam tasks` derives, and its id is the id of the done-check \" +\n \"claim it closes. \" +\n \"`loam tasks <FEAT> --service <id> --next --json` is ONE unit of work, and the loop an implementation runs \" +\n \"inside; drop `--next` for every open unit. \" +\n \"Each entry of `units[]` carries its `id` (the same id the verify checklist uses for that claim), its `kind`, \" +\n \"the `source` it was derived from, and `done.check` — the fact that closes it. \" +\n \"`at` is the instruction. It is the step the unit waits at — `describe`, `generate`, `implement` or \" +\n \"`attested` — and each names exactly one action (`loam explain <step>`). \" +\n \"The packet is derived, never stored: from the verify checklist, the delta, the verification record and, in a \" +\n \"bound service repo, the digest stamps of the generated `.feature` files, so it is recomputed on every run. \" +\n \"One kind is not a claim: `requirement.described`, a requirement with no scenario yet (`loam explain describe`).\",\n pins: [\n { source: \"IMPLEMENT\", phrase: \"ONE unit of work, and the loop\" },\n { source: \"IMPLEMENT\", phrase: \"(the same id the verify checklist uses\" },\n { source: \"IMPLEMENT\", phrase: \"`at` is the instruction.\" },\n ],\n },\n {\n term: \"frontier\",\n aliases: [],\n paragraph:\n \"The frontier is the head of the work packet: the first ten open unit ids, in the order `loam tasks` says to \" +\n \"take them. \" +\n \"`--json` carries it as `frontier` (the first ten open unit ids, in order), with how many more are open beside \" +\n \"it, and `--next` prints its head alone, in full, with what closes it. \" +\n \"It is recomputed from the documents on every run, which is what makes taking the head of it always safe — so \" +\n \"re-run `loam tasks <FEAT> --service <id>` after every recording instead of working down a list you copied out. \" +\n \"When the packet is narrowed to one service, `waitingOn` names what another service still owes before your \" +\n \"frontier can move.\",\n pins: [\n { source: \"IMPLEMENT\", phrase: \"`frontier` (the first ten open unit ids, in order)\" },\n { source: \"IMPLEMENT\", phrase: \"every run, which is what makes taking the head of it always safe\" },\n { source: \"IMPLEMENT\", phrase: \"still owes before your frontier can move\" },\n ],\n },\n {\n term: \"describe\",\n aliases: [\"requirement.described\"],\n paragraph:\n \"Describe is the first step a `loam tasks` unit can wait at: the requirement owns no scenarios yet. \" +\n \"So there is nothing to generate a test from and nothing for `loam verify` to claim. \" +\n \"Write the Given/When/Then in the DOCS repo, on the requirement the unit's `source` names, and nothing else — \" +\n \"loam does not author, and no amount of code closes a unit sitting here. \" +\n \"Its kind is `requirement.described`, the one unit kind that is not a done-check claim, because a requirement \" +\n \"with no scenario asks no question anybody could answer with evidence; it closes when the requirement carries \" +\n \"at least one `#### Scenario:`, which `loam validate --feature <FEAT>` grades. \" +\n \"The steps after it are `generate`, `implement` and `attested`.\",\n pins: [\n { source: \"IMPLEMENT\", phrase: \"the requirement owns no scenarios yet\" },\n { source: \"IMPLEMENT\", phrase: \"no amount of code closes a unit sitting here\" },\n ],\n },\n {\n term: \"generate\",\n aliases: [],\n paragraph:\n \"Generate is the step a `loam tasks` unit waits at when its scenario's test has not been generated yet. \" +\n \"`generate` means no stamped `.feature` carries this scenario's digest, and the only action is \" +\n \"`loam gherkin <FEAT>` in the service's own repository — do not write code. It writes one digest-stamped \" +\n \"`.feature` per changed requirement under `<gherkinDir>/loam/`. Those files ARE the acceptance criteria. \" +\n \"Never edit them: regeneration rewrites the directory. Generating is the whole action, and on the next run the \" +\n \"same unit reads `implement`. \" +\n \"The stamps are read from the repository `loam tasks` runs in, and nobody else's: an `unknown` makes every \" +\n \"`generate` verdict a guess, so fix the binding before acting on one.\",\n pins: [\n { source: \"IMPLEMENT\", phrase: \"no stamped `.feature` carries this scenario's digest\" },\n { source: \"IMPLEMENT\", phrase: \"Those files ARE the acceptance criteria.\" },\n { source: \"IMPLEMENT\", phrase: \"an `unknown` makes every `generate` verdict a guess\" },\n ],\n },\n {\n term: \"implement\",\n aliases: [],\n paragraph:\n \"Implement is the step a `loam tasks` unit waits at when what is still owed is code, or a recorded answer \" +\n \"about code. \" +\n \"For a scenario claim it means the stamped scenario exists and no recorded run has confirmed it: write step \" +\n \"definitions outside the generated `loam/` directory, implement until the suite passes, then record the run \" +\n \"with `loam verify <FEAT> --service <id> --results report.json`. \" +\n \"For the other claim kinds it means the claim is not yet recorded confirmed: answer from the code with \" +\n \"`file:line` evidence (`loam verify <FEAT> --record answers.json --service <id>`), or for `api.exposes` with a \" +\n \"contract-test report. \" +\n \"Either way the record decides — never your own reading of the code you just wrote — and the unit leaves \" +\n \"the packet only once its claim is recorded confirmed. \" +\n \"A scenario also reads `implement` when nothing could see its generated test — the stamps are read from the \" +\n \"repository `loam tasks` runs in alone — so check `stamps` before writing a test by hand. \" +\n \"`loam instructions loam-implement <FEAT>` is the whole protocol.\",\n pins: [\n { source: \"IMPLEMENT\", phrase: \"the stamped scenario exists and no recorded run has confirmed\" },\n { source: \"IMPLEMENT\", phrase: \"never your own reading of the code you just wrote\" },\n ],\n },\n ],\n};\n"]}