@intentius/chant 0.124.13 → 0.124.14

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 (907) hide show
  1. package/bin/chant +11 -0
  2. package/dist/agents/checks.js +326 -0
  3. package/dist/agents/discover.js +885 -0
  4. package/dist/agents/importer.js +17 -0
  5. package/dist/agents/index.js +12 -0
  6. package/dist/agents/types.js +19 -0
  7. package/dist/apply.js +151 -0
  8. package/dist/attrref.js +70 -0
  9. package/dist/audit/catalog.js +350 -0
  10. package/dist/audit/core.js +252 -0
  11. package/dist/audit/discover.js +633 -0
  12. package/dist/audit/fetch.js +666 -0
  13. package/dist/audit/lineage.js +91 -0
  14. package/dist/audit/nginx.js +366 -0
  15. package/dist/audit/prior-art.js +132 -0
  16. package/dist/audit/proof.js +321 -0
  17. package/dist/audit/report-html.js +194 -0
  18. package/dist/audit/report-model.js +198 -0
  19. package/dist/audit/report.js +102 -0
  20. package/dist/audit/rules-doc.js +144 -0
  21. package/dist/audit/secrets.js +405 -0
  22. package/dist/audit/terraform-state.js +140 -0
  23. package/dist/audit/wrangler.js +262 -0
  24. package/dist/behaviour-delta.js +401 -0
  25. package/dist/behaviour-engine.js +357 -0
  26. package/dist/behaviour-graph.js +83 -0
  27. package/dist/behaviour-http.js +188 -0
  28. package/dist/behaviour-kinds.js +172 -0
  29. package/dist/behaviour-overlay.js +50 -0
  30. package/dist/behaviour-predict.js +188 -0
  31. package/dist/behaviour-request.js +194 -0
  32. package/dist/behaviour.js +1325 -0
  33. package/dist/build-params.js +108 -0
  34. package/dist/build.js +668 -0
  35. package/dist/builder.js +44 -0
  36. package/dist/cdk/advise.js +30 -0
  37. package/dist/cdk/assembly.js +122 -0
  38. package/dist/cdk/graph.js +444 -0
  39. package/dist/cdk/tier-map.js +64 -0
  40. package/dist/cdk/types.js +24 -0
  41. package/dist/change-set.js +312 -0
  42. package/dist/child-project.js +21 -0
  43. package/dist/claimed-fields.js +135 -0
  44. package/dist/cli/build-options.js +70 -0
  45. package/dist/cli/build-params-cli.js +139 -0
  46. package/dist/cli/command-group.js +123 -0
  47. package/dist/cli/commands/audit-agents.js +326 -0
  48. package/dist/cli/commands/audit.js +571 -0
  49. package/dist/cli/commands/build.js +920 -0
  50. package/dist/cli/commands/carve-apply.js +153 -0
  51. package/dist/cli/commands/carve-bridge.js +201 -0
  52. package/dist/cli/commands/carve-emit.js +332 -0
  53. package/dist/cli/commands/carve-status.js +119 -0
  54. package/dist/cli/commands/carve.js +204 -0
  55. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  56. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  57. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  58. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  59. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  60. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  61. package/dist/cli/commands/check-lexicon.js +766 -0
  62. package/dist/cli/commands/describe.js +85 -0
  63. package/dist/cli/commands/diff.js +175 -0
  64. package/dist/cli/commands/doctor.js +350 -0
  65. package/dist/cli/commands/import-agents.js +155 -0
  66. package/dist/cli/commands/import.js +670 -0
  67. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  68. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  69. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  70. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  71. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  72. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  73. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  74. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  75. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  76. package/dist/cli/commands/init-lexicon.js +172 -0
  77. package/dist/cli/commands/init.js +381 -0
  78. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  79. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  80. package/dist/cli/commands/licenses.js +125 -0
  81. package/dist/cli/commands/lint.d.ts.map +1 -1
  82. package/dist/cli/commands/lint.js +948 -0
  83. package/dist/cli/commands/list.js +63 -0
  84. package/dist/cli/commands/migrate.d.ts.map +1 -1
  85. package/dist/cli/commands/migrate.js +423 -0
  86. package/dist/cli/commands/onboard.js +403 -0
  87. package/dist/cli/commands/pinned-upgrade.js +191 -0
  88. package/dist/cli/commands/update.js +194 -0
  89. package/dist/cli/commands/vendor.js +217 -0
  90. package/dist/cli/conflict-check.js +104 -0
  91. package/dist/cli/debug.js +8 -0
  92. package/dist/cli/format.js +104 -0
  93. package/dist/cli/handlers/build.js +267 -0
  94. package/dist/cli/handlers/carve-apply.js +30 -0
  95. package/dist/cli/handlers/carve-bridge.js +28 -0
  96. package/dist/cli/handlers/carve-emit.js +50 -0
  97. package/dist/cli/handlers/carve-status.js +26 -0
  98. package/dist/cli/handlers/carve.js +40 -0
  99. package/dist/cli/handlers/change-set.js +46 -0
  100. package/dist/cli/handlers/components.js +730 -0
  101. package/dist/cli/handlers/dev.js +113 -0
  102. package/dist/cli/handlers/emulator.js +233 -0
  103. package/dist/cli/handlers/explain.js +54 -0
  104. package/dist/cli/handlers/fan-out.js +422 -0
  105. package/dist/cli/handlers/gate-resume.js +275 -0
  106. package/dist/cli/handlers/generate.js +84 -0
  107. package/dist/cli/handlers/graph.js +969 -0
  108. package/dist/cli/handlers/init.js +102 -0
  109. package/dist/cli/handlers/lifecycle.js +1727 -0
  110. package/dist/cli/handlers/lint.js +62 -0
  111. package/dist/cli/handlers/migrate.js +48 -0
  112. package/dist/cli/handlers/misc.js +391 -0
  113. package/dist/cli/handlers/operator.js +1162 -0
  114. package/dist/cli/handlers/override-approve.js +102 -0
  115. package/dist/cli/handlers/pr.js +503 -0
  116. package/dist/cli/handlers/promote.js +342 -0
  117. package/dist/cli/handlers/run-generate.js +206 -0
  118. package/dist/cli/handlers/run-wave.js +66 -0
  119. package/dist/cli/handlers/run.js +1191 -0
  120. package/dist/cli/handlers/scenario.js +325 -0
  121. package/dist/cli/handlers/search.js +924 -0
  122. package/dist/cli/handlers/serve.js +32 -0
  123. package/dist/cli/handlers/vendor.js +154 -0
  124. package/dist/cli/index.js +3 -0
  125. package/dist/cli/is-entry-point.js +23 -0
  126. package/dist/cli/lsp/capabilities.js +28 -0
  127. package/dist/cli/lsp/diagnostics.js +34 -0
  128. package/dist/cli/lsp/server.js +329 -0
  129. package/dist/cli/main.d.ts.map +1 -1
  130. package/dist/cli/main.js +2540 -0
  131. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  132. package/dist/cli/mcp/op-tools.js +306 -0
  133. package/dist/cli/mcp/resource-handlers.js +258 -0
  134. package/dist/cli/mcp/resources/context.js +85 -0
  135. package/dist/cli/mcp/server.js +353 -0
  136. package/dist/cli/mcp/tools/build.js +111 -0
  137. package/dist/cli/mcp/tools/composites.js +95 -0
  138. package/dist/cli/mcp/tools/explain.js +166 -0
  139. package/dist/cli/mcp/tools/import.js +49 -0
  140. package/dist/cli/mcp/tools/lint.js +41 -0
  141. package/dist/cli/mcp/tools/scaffold.js +111 -0
  142. package/dist/cli/mcp/tools/search.js +112 -0
  143. package/dist/cli/mcp/types.js +1 -0
  144. package/dist/cli/mcp/workspace-plugins.js +91 -0
  145. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  146. package/dist/cli/mcp/workspace-tools.js +564 -0
  147. package/dist/cli/mcp-config.js +70 -0
  148. package/dist/cli/plugins.js +313 -0
  149. package/dist/cli/registry.js +23 -0
  150. package/dist/cli/reporters/stylish.js +329 -0
  151. package/dist/cli/version.js +15 -0
  152. package/dist/cli/watch.js +79 -0
  153. package/dist/codegen/bound-property-types.js +82 -0
  154. package/dist/codegen/coverage.js +119 -0
  155. package/dist/codegen/docs-file-markers.js +60 -0
  156. package/dist/codegen/docs-pages.js +115 -0
  157. package/dist/codegen/docs-rule-scanning.js +164 -0
  158. package/dist/codegen/docs-rules.js +76 -0
  159. package/dist/codegen/docs-sections.js +117 -0
  160. package/dist/codegen/docs-sidebar.js +65 -0
  161. package/dist/codegen/docs-types.js +4 -0
  162. package/dist/codegen/docs.js +356 -0
  163. package/dist/codegen/fetch.js +340 -0
  164. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  165. package/dist/codegen/generate-registry.js +71 -0
  166. package/dist/codegen/generate-runtime-index.js +56 -0
  167. package/dist/codegen/generate-typescript.js +119 -0
  168. package/dist/codegen/generate.js +115 -0
  169. package/dist/codegen/json-patch.js +141 -0
  170. package/dist/codegen/json-schema-to-ts.js +344 -0
  171. package/dist/codegen/json-schema.js +246 -0
  172. package/dist/codegen/lexicon-regen.js +412 -0
  173. package/dist/codegen/naming.js +217 -0
  174. package/dist/codegen/okf-lexicon.js +245 -0
  175. package/dist/codegen/package.js +150 -0
  176. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  177. package/dist/codegen/pinned-upgrade.js +494 -0
  178. package/dist/codegen/registry.js +60 -0
  179. package/dist/codegen/rehype-base-url.mjs +68 -0
  180. package/dist/codegen/rolling-upgrade.js +217 -0
  181. package/dist/codegen/surface-snapshot.js +537 -0
  182. package/dist/codegen/testdata/postgres-tags.json +242 -0
  183. package/dist/codegen/topo-sort.js +36 -0
  184. package/dist/codegen/typecheck.js +115 -0
  185. package/dist/codegen/validate.js +200 -0
  186. package/dist/codegen/version-bump.js +35 -0
  187. package/dist/components/auto-release.js +143 -0
  188. package/dist/components/builders.js +47 -0
  189. package/dist/components/capability-plugin-loader.js +175 -0
  190. package/dist/components/capability-plugin-schema.js +46 -0
  191. package/dist/components/capability-plugin.js +99 -0
  192. package/dist/components/capability.js +60 -0
  193. package/dist/components/changed-files.js +72 -0
  194. package/dist/components/cli-support.js +427 -0
  195. package/dist/components/component.js +120 -0
  196. package/dist/components/component.schema.json +271 -0
  197. package/dist/components/config-defaults.js +130 -0
  198. package/dist/components/deploy-units.js +60 -0
  199. package/dist/components/discover.d.ts.map +1 -1
  200. package/dist/components/discover.js +189 -0
  201. package/dist/components/driver-output.js +86 -0
  202. package/dist/components/driver.js +728 -0
  203. package/dist/components/fan-out-output.js +165 -0
  204. package/dist/components/fan-out-record.js +94 -0
  205. package/dist/components/fan-out-run.js +373 -0
  206. package/dist/components/fan-out-support.js +60 -0
  207. package/dist/components/fan-out.js +273 -0
  208. package/dist/components/gate-plan.js +41 -0
  209. package/dist/components/gated-wave-pipeline.js +46 -0
  210. package/dist/components/index.js +24 -0
  211. package/dist/components/layers.js +28 -0
  212. package/dist/components/manifest-persistence.js +108 -0
  213. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  214. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  215. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  216. package/dist/components/pilots/lambda.pilot.js +52 -0
  217. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  218. package/dist/components/pilots/project.js +12 -0
  219. package/dist/components/pr-pipeline.js +134 -0
  220. package/dist/components/pr-run.js +363 -0
  221. package/dist/components/presets/ecs-fargate.js +72 -0
  222. package/dist/components/presets/index.js +28 -0
  223. package/dist/components/presets/lambda.js +34 -0
  224. package/dist/components/presets/single-host-compose.js +41 -0
  225. package/dist/components/promote.js +549 -0
  226. package/dist/components/registry.js +34 -0
  227. package/dist/components/run-progress.js +33 -0
  228. package/dist/components/sandbox/driver.d.ts.map +1 -1
  229. package/dist/components/sandbox/driver.js +93 -0
  230. package/dist/components/sandbox/run.js +115 -0
  231. package/dist/components/starter-plugin.js +104 -0
  232. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  233. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  234. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  235. package/dist/components/verbs/bom-writer.js +287 -0
  236. package/dist/components/verbs/build-archive.js +188 -0
  237. package/dist/components/verbs/build.js +142 -0
  238. package/dist/components/verbs/cloud-executor.js +110 -0
  239. package/dist/components/verbs/component-bom.js +125 -0
  240. package/dist/components/verbs/ensure-secret.js +50 -0
  241. package/dist/components/verbs/index.js +61 -0
  242. package/dist/components/verbs/license-policy.js +75 -0
  243. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  244. package/dist/components/verbs/process-runner.js +78 -0
  245. package/dist/components/verbs/r2-sync.js +93 -0
  246. package/dist/components/verbs/reproducibility.js +62 -0
  247. package/dist/components/verbs/run-agent.js +577 -0
  248. package/dist/components/verbs/sbom-generator.js +119 -0
  249. package/dist/components/verbs/sbom.js +97 -0
  250. package/dist/components/verbs/shell.js +32 -0
  251. package/dist/components/verbs/sign.js +221 -0
  252. package/dist/components/verbs/stub.js +28 -0
  253. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  254. package/dist/components/verbs/verify.js +112 -0
  255. package/dist/components/verbs/vex.js +131 -0
  256. package/dist/components/verbs/vuln-gate.js +152 -0
  257. package/dist/components/verbs/vuln-scan.js +288 -0
  258. package/dist/components/verbs/wait-verify.js +106 -0
  259. package/dist/components/verbs/wrangler.js +179 -0
  260. package/dist/components/wave-plan.js +102 -0
  261. package/dist/composite.js +305 -0
  262. package/dist/config-import.d.ts.map +1 -1
  263. package/dist/config-import.js +22 -0
  264. package/dist/config-sandbox.js +122 -0
  265. package/dist/config-static.js +206 -0
  266. package/dist/config.js +605 -0
  267. package/dist/content-digest.js +23 -0
  268. package/dist/declarable.js +114 -0
  269. package/dist/deep-observation.js +437 -0
  270. package/dist/detectLexicon.js +54 -0
  271. package/dist/discovery/cache.js +70 -0
  272. package/dist/discovery/collect.js +208 -0
  273. package/dist/discovery/cycles.js +95 -0
  274. package/dist/discovery/entity-wire-codec.js +391 -0
  275. package/dist/discovery/entity-wire.js +42 -0
  276. package/dist/discovery/files.js +121 -0
  277. package/dist/discovery/fold-import.d.ts.map +1 -1
  278. package/dist/discovery/fold-import.js +4178 -0
  279. package/dist/discovery/fold-rank.js +292 -0
  280. package/dist/discovery/graph.js +115 -0
  281. package/dist/discovery/import.d.ts.map +1 -1
  282. package/dist/discovery/import.js +65 -0
  283. package/dist/discovery/index.js +333 -0
  284. package/dist/discovery/param-deps.js +487 -0
  285. package/dist/discovery/resolve.js +39 -0
  286. package/dist/discovery/sandbox/bundle.js +214 -0
  287. package/dist/discovery/sandbox/child-errors.js +26 -0
  288. package/dist/discovery/sandbox/config-run.js +100 -0
  289. package/dist/discovery/sandbox/config-wire.js +183 -0
  290. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  291. package/dist/discovery/sandbox/driver.js +333 -0
  292. package/dist/discovery/sandbox/fork.js +229 -0
  293. package/dist/discovery/sandbox/policy-run.js +142 -0
  294. package/dist/discovery/sandbox/policy-wire.js +152 -0
  295. package/dist/discovery/sandbox/run.js +77 -0
  296. package/dist/discovery/specifier-resolve.js +320 -0
  297. package/dist/discovery/walk.js +284 -0
  298. package/dist/effect-receipt.js +340 -0
  299. package/dist/env.js +55 -0
  300. package/dist/errors.js +62 -0
  301. package/dist/fold/fold.js +1434 -0
  302. package/dist/fold/foldable-helpers.js +229 -0
  303. package/dist/fold/subset.js +696 -0
  304. package/dist/fold-provenance.js +414 -0
  305. package/dist/gate-decision.js +260 -0
  306. package/dist/gate-resume-run.js +154 -0
  307. package/dist/gated-waves.js +165 -0
  308. package/dist/governance.js +43 -0
  309. package/dist/graph-declared.js +45 -0
  310. package/dist/graph-detail.js +207 -0
  311. package/dist/graph-dot.js +54 -0
  312. package/dist/graph-effective.js +107 -0
  313. package/dist/graph-ir.js +623 -0
  314. package/dist/graph-layout.js +184 -0
  315. package/dist/graph-lens.js +105 -0
  316. package/dist/graph-mermaid.js +83 -0
  317. package/dist/graph-ops.js +39 -0
  318. package/dist/graph-refs.js +156 -0
  319. package/dist/held-elsewhere.js +87 -0
  320. package/dist/identity.js +251 -0
  321. package/dist/import/base-parser.js +34 -0
  322. package/dist/import/embedded.js +255 -0
  323. package/dist/import/generator.js +1 -0
  324. package/dist/import/ir-utils.js +85 -0
  325. package/dist/import/parser-options.js +45 -0
  326. package/dist/import/parser.js +1 -0
  327. package/dist/index.js +118 -0
  328. package/dist/intrinsic-interpolation.js +73 -0
  329. package/dist/intrinsic.js +31 -0
  330. package/dist/join-key.js +35 -0
  331. package/dist/kubectl-context.js +150 -0
  332. package/dist/lexicon-config.js +58 -0
  333. package/dist/lexicon-integrity.js +47 -0
  334. package/dist/lexicon-manifest.js +70 -0
  335. package/dist/lexicon-module.d.ts.map +1 -1
  336. package/dist/lexicon-module.js +241 -0
  337. package/dist/lexicon-output.js +218 -0
  338. package/dist/lexicon-plugin-helpers.js +104 -0
  339. package/dist/lexicon-schema.js +136 -0
  340. package/dist/lexicon.js +130 -0
  341. package/dist/lifecycle/affected.js +224 -0
  342. package/dist/lifecycle/assert-live.js +110 -0
  343. package/dist/lifecycle/build-ledger-store.js +160 -0
  344. package/dist/lifecycle/build-ledger.js +155 -0
  345. package/dist/lifecycle/change-set.js +356 -0
  346. package/dist/lifecycle/converge-ledger.js +161 -0
  347. package/dist/lifecycle/deep-diff.js +233 -0
  348. package/dist/lifecycle/deep-observe.js +147 -0
  349. package/dist/lifecycle/digest.js +143 -0
  350. package/dist/lifecycle/disruption.js +135 -0
  351. package/dist/lifecycle/gate-applied.js +113 -0
  352. package/dist/lifecycle/gate-audit.js +341 -0
  353. package/dist/lifecycle/gate-ledger-select.js +89 -0
  354. package/dist/lifecycle/gate-ledger.js +193 -0
  355. package/dist/lifecycle/gate-origin.js +117 -0
  356. package/dist/lifecycle/gate-pending.js +58 -0
  357. package/dist/lifecycle/git.js +1182 -0
  358. package/dist/lifecycle/identity.js +58 -0
  359. package/dist/lifecycle/index.js +26 -0
  360. package/dist/lifecycle/lease.js +283 -0
  361. package/dist/lifecycle/ledger-port.js +1 -0
  362. package/dist/lifecycle/legacy-digest.js +91 -0
  363. package/dist/lifecycle/live-diff.js +274 -0
  364. package/dist/lifecycle/local-note.js +15 -0
  365. package/dist/lifecycle/member-ledger.js +122 -0
  366. package/dist/lifecycle/observation-baseline.js +155 -0
  367. package/dist/lifecycle/observe.js +375 -0
  368. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  369. package/dist/lifecycle/override-ledger.js +54 -0
  370. package/dist/lifecycle/plan-digest.js +110 -0
  371. package/dist/lifecycle/plan-ledger.js +129 -0
  372. package/dist/lifecycle/receipt-plan.js +192 -0
  373. package/dist/lifecycle/release-ledger.js +155 -0
  374. package/dist/lifecycle/release-read.js +64 -0
  375. package/dist/lifecycle/replay.js +193 -0
  376. package/dist/lifecycle/rollback.js +102 -0
  377. package/dist/lifecycle/run-ledger.js +183 -0
  378. package/dist/lifecycle/scenario-eval.js +204 -0
  379. package/dist/lifecycle/scenario.js +214 -0
  380. package/dist/lifecycle/snapshot.js +239 -0
  381. package/dist/lifecycle/status.js +447 -0
  382. package/dist/lifecycle/symptoms.js +117 -0
  383. package/dist/lifecycle/teardown.js +255 -0
  384. package/dist/lifecycle/types.js +1 -0
  385. package/dist/lifecycle/unobserved-gate.js +33 -0
  386. package/dist/lifecycle/wave-plans.js +68 -0
  387. package/dist/lifecycle/work-item-id.js +36 -0
  388. package/dist/lifecycle/work-lease.js +393 -0
  389. package/dist/lint/component-checks.js +87 -0
  390. package/dist/lint/config.js +483 -0
  391. package/dist/lint/declarative.js +122 -0
  392. package/dist/lint/discover.d.ts.map +1 -1
  393. package/dist/lint/discover.js +138 -0
  394. package/dist/lint/engine.js +246 -0
  395. package/dist/lint/knowledge-checks.js +64 -0
  396. package/dist/lint/named-checks.js +22 -0
  397. package/dist/lint/output-checks.js +87 -0
  398. package/dist/lint/output-docs.js +163 -0
  399. package/dist/lint/parser.js +33 -0
  400. package/dist/lint/pipeline-change-gate.js +70 -0
  401. package/dist/lint/policy-import.d.ts +1 -1
  402. package/dist/lint/policy-import.d.ts.map +1 -1
  403. package/dist/lint/policy-import.js +62 -0
  404. package/dist/lint/policy-sandbox.js +86 -0
  405. package/dist/lint/policy.js +122 -0
  406. package/dist/lint/post-synth.js +87 -0
  407. package/dist/lint/presets/relaxed.json +26 -0
  408. package/dist/lint/presets/strict.json +24 -24
  409. package/dist/lint/receipt-checks.js +83 -0
  410. package/dist/lint/rule-loader.d.ts.map +1 -1
  411. package/dist/lint/rule-loader.js +89 -0
  412. package/dist/lint/rule-registry.js +86 -0
  413. package/dist/lint/rule.js +1 -0
  414. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  415. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  416. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  417. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  437. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  438. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  439. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  440. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  441. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  442. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  443. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  444. package/dist/lint/rules/comp/index.js +33 -0
  445. package/dist/lint/rules/comp/support.js +129 -0
  446. package/dist/lint/rules/composite-scope.js +51 -0
  447. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  448. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  449. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  450. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  451. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  452. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  453. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  454. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  455. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  456. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  457. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  458. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  459. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  460. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  461. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  462. package/dist/lint/rules/export-required.js +115 -0
  463. package/dist/lint/rules/file-declarable-limit.js +88 -0
  464. package/dist/lint/rules/flat-declarations.js +62 -0
  465. package/dist/lint/rules/index.js +90 -0
  466. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  467. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  468. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  469. package/dist/lint/rules/no-string-ref.js +59 -0
  470. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  471. package/dist/lint/rules/no-unused-declarable.js +142 -0
  472. package/dist/lint/rules/op/index.js +28 -0
  473. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  474. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  475. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  476. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  477. package/dist/lint/rules/op/support.js +11 -0
  478. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  479. package/dist/lint/rules/property-kind.js +56 -0
  480. package/dist/lint/rules/single-concern-file.js +71 -0
  481. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  482. package/dist/lint/selectors.js +168 -0
  483. package/dist/lint/suppressions.js +129 -0
  484. package/dist/lint/typescript.js +17 -0
  485. package/dist/live-endpoint.js +113 -0
  486. package/dist/live-read-session.js +76 -0
  487. package/dist/lsp/lexicon-providers.js +163 -0
  488. package/dist/lsp/types.js +5 -0
  489. package/dist/managed-fields.js +293 -0
  490. package/dist/mcp/types.js +4 -0
  491. package/dist/notify-verify.js +0 -1
  492. package/dist/notify.js +0 -1
  493. package/dist/notify.schema.json +72 -0
  494. package/dist/observation.js +266 -0
  495. package/dist/okf-read.js +134 -0
  496. package/dist/okf.js +275 -0
  497. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  498. package/dist/op/activities/activity-contracts.js +313 -0
  499. package/dist/op/activities/apply.js +582 -0
  500. package/dist/op/activities/build.js +18 -0
  501. package/dist/op/activities/change-coverage.js +40 -0
  502. package/dist/op/activities/change-set.js +64 -0
  503. package/dist/op/activities/converge.js +492 -0
  504. package/dist/op/activities/decide.js +211 -0
  505. package/dist/op/activities/env-teardown.js +110 -0
  506. package/dist/op/activities/factory.js +591 -0
  507. package/dist/op/activities/forge-pull-request.js +82 -0
  508. package/dist/op/activities/gh-host.js +78 -0
  509. package/dist/op/activities/guard-validate.js +165 -0
  510. package/dist/op/activities/http-check.js +40 -0
  511. package/dist/op/activities/index.js +59 -0
  512. package/dist/op/activities/lexicon-upgrade.js +629 -0
  513. package/dist/op/activities/lifecycle.js +109 -0
  514. package/dist/op/activities/pipeline-audit.js +147 -0
  515. package/dist/op/activities/policy.js +26 -0
  516. package/dist/op/activities/predict-behaviour.js +341 -0
  517. package/dist/op/activities/propose-upgrade.js +165 -0
  518. package/dist/op/activities/reconcile.js +997 -0
  519. package/dist/op/activities/shell.js +118 -0
  520. package/dist/op/activities/source-release.js +97 -0
  521. package/dist/op/activities/source-rollback.js +165 -0
  522. package/dist/op/activities/teardown.js +17 -0
  523. package/dist/op/activities/util.js +6 -0
  524. package/dist/op/activities/wait.js +51 -0
  525. package/dist/op/activities/work-evidence.js +35 -0
  526. package/dist/op/activities/workflow-audit.js +133 -0
  527. package/dist/op/activity-contract-registry.js +106 -0
  528. package/dist/op/activity-contract.js +232 -0
  529. package/dist/op/activity-failure.js +31 -0
  530. package/dist/op/activity-profiles.js +129 -0
  531. package/dist/op/activity-registry.js +105 -0
  532. package/dist/op/activity-runtime.js +28 -0
  533. package/dist/op/builders.js +801 -0
  534. package/dist/op/change-signal.js +118 -0
  535. package/dist/op/composites/apply-op.js +151 -0
  536. package/dist/op/composites/behaviour-op.js +65 -0
  537. package/dist/op/composites/converge-op.js +141 -0
  538. package/dist/op/composites/index.js +19 -0
  539. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  540. package/dist/op/composites/pipeline-audit-op.js +50 -0
  541. package/dist/op/composites/reconcile-op.js +84 -0
  542. package/dist/op/composites/watch-op.js +69 -0
  543. package/dist/op/composites/workflow-audit-op.js +57 -0
  544. package/dist/op/converge-rule.js +205 -0
  545. package/dist/op/cron.js +146 -0
  546. package/dist/op/decide-backend.js +181 -0
  547. package/dist/op/decide-config.js +68 -0
  548. package/dist/op/decide-read-inputs.js +141 -0
  549. package/dist/op/discover.d.ts.map +1 -1
  550. package/dist/op/discover.js +213 -0
  551. package/dist/op/duration.js +21 -0
  552. package/dist/op/emulator-freshness.js +80 -0
  553. package/dist/op/emulator-lifecycle.js +269 -0
  554. package/dist/op/factory.js +83 -0
  555. package/dist/op/gate-approval.js +172 -0
  556. package/dist/op/gate-name.js +86 -0
  557. package/dist/op/gate-plan-context.js +167 -0
  558. package/dist/op/gate-point-run.js +67 -0
  559. package/dist/op/gate-point.js +111 -0
  560. package/dist/op/gate-resume-plan.js +155 -0
  561. package/dist/op/gate-resume.js +31 -0
  562. package/dist/op/gate-review.js +290 -0
  563. package/dist/op/gate-run-locator.js +85 -0
  564. package/dist/op/gate-summary.js +100 -0
  565. package/dist/op/gate-wait.js +56 -0
  566. package/dist/op/gate.js +449 -0
  567. package/dist/op/generate-pipeline.js +124 -0
  568. package/dist/op/index.js +51 -0
  569. package/dist/op/lifecycle-receipt-store.js +45 -0
  570. package/dist/op/local-executor.js +1164 -0
  571. package/dist/op/local-output.js +140 -0
  572. package/dist/op/op-ir.js +317 -0
  573. package/dist/op/op-verb-class.js +131 -0
  574. package/dist/op/op-waves-notify.js +136 -0
  575. package/dist/op/op-waves-run.js +1657 -0
  576. package/dist/op/op-waves.js +409 -0
  577. package/dist/op/operator.js +743 -0
  578. package/dist/op/receipt-store.js +94 -0
  579. package/dist/op/resource.js +23 -0
  580. package/dist/op/run-context.js +28 -0
  581. package/dist/op/run-live.js +256 -0
  582. package/dist/op/runtime.js +21 -0
  583. package/dist/op/runtimes/local.js +195 -0
  584. package/dist/op/source-archive.js +131 -0
  585. package/dist/op/step-output-ref.js +397 -0
  586. package/dist/op/steward-beside.js +169 -0
  587. package/dist/op/steward-points.js +138 -0
  588. package/dist/op/steward-turn.js +59 -0
  589. package/dist/op/steward.js +317 -0
  590. package/dist/op/types.js +25 -0
  591. package/dist/op/work-lease-decl.js +81 -0
  592. package/dist/op/work-lease-run.js +393 -0
  593. package/dist/override-gate.js +284 -0
  594. package/dist/owner-chain.js +74 -0
  595. package/dist/ownership.js +92 -0
  596. package/dist/params.js +61 -0
  597. package/dist/plan-summary.js +711 -0
  598. package/dist/point-decision.js +211 -0
  599. package/dist/pr-forge.js +810 -0
  600. package/dist/pr-loop.js +203 -0
  601. package/dist/project-codegen.js +191 -0
  602. package/dist/project-root.js +74 -0
  603. package/dist/project-validation.js +50 -0
  604. package/dist/provenance.js +157 -0
  605. package/dist/pseudo-parameter.js +40 -0
  606. package/dist/reconcile.js +450 -0
  607. package/dist/resource-attributes.js +33 -0
  608. package/dist/runtime-adapter.js +77 -0
  609. package/dist/runtime.js +66 -0
  610. package/dist/secret-materialization.js +153 -0
  611. package/dist/secret-provenance.js +250 -0
  612. package/dist/serializer-walker.js +112 -0
  613. package/dist/serializer.js +1 -0
  614. package/dist/sort.js +45 -0
  615. package/dist/stack-output.js +115 -0
  616. package/dist/telemetry-attribution.js +149 -0
  617. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  618. package/dist/terraform/adopt-state.js +40 -0
  619. package/dist/terraform/aws-resources.js +384 -0
  620. package/dist/terraform/bridge.js +204 -0
  621. package/dist/terraform/carve-provider.js +155 -0
  622. package/dist/terraform/carve.js +138 -0
  623. package/dist/terraform/data-source-shape.js +57 -0
  624. package/dist/terraform/emit-source.js +36 -0
  625. package/dist/terraform/excise.js +123 -0
  626. package/dist/terraform/graduate.js +128 -0
  627. package/dist/terraform/graph.js +435 -0
  628. package/dist/terraform/hcl2json.js +60 -0
  629. package/dist/terraform/manifest.js +149 -0
  630. package/dist/terraform/parse.js +81 -0
  631. package/dist/terraform/providers/aws.js +146 -0
  632. package/dist/terraform/providers/gcp.js +294 -0
  633. package/dist/terraform/providers/index.js +17 -0
  634. package/dist/terraform/providers/kubernetes.js +253 -0
  635. package/dist/terraform/score.js +151 -0
  636. package/dist/terraform/state.js +67 -0
  637. package/dist/terraform/tier-map.js +74 -0
  638. package/dist/terraform/types.js +13 -0
  639. package/dist/terraform/unified-diff.js +132 -0
  640. package/dist/testing.js +295 -0
  641. package/dist/toml-emit.js +153 -0
  642. package/dist/toml-parse.js +355 -0
  643. package/dist/toml-utils.js +60 -0
  644. package/dist/toml.js +428 -0
  645. package/dist/ts-loader.d.ts +46 -0
  646. package/dist/ts-loader.d.ts.map +1 -0
  647. package/dist/ts-loader.js +103 -0
  648. package/dist/types.js +1 -0
  649. package/dist/utils.js +61 -0
  650. package/dist/validation.js +20 -0
  651. package/dist/vendor/js-yaml-load.js +1662 -0
  652. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  653. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  654. package/dist/workspace/__fixtures__/sessions.js +91 -0
  655. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  656. package/dist/workspace/agent-cli.js +99 -0
  657. package/dist/workspace/agent.schema.json +390 -0
  658. package/dist/workspace/answers-ledger.js +89 -0
  659. package/dist/workspace/box-cli.js +142 -0
  660. package/dist/workspace/box-factory-write.js +196 -0
  661. package/dist/workspace/box-factory-write.schema.json +342 -0
  662. package/dist/workspace/box-factory.js +88 -0
  663. package/dist/workspace/box-intent.js +126 -0
  664. package/dist/workspace/box-isolation.js +169 -0
  665. package/dist/workspace/box-listing-write.schema.json +204 -0
  666. package/dist/workspace/box-listing.js +298 -0
  667. package/dist/workspace/box-publish.js +352 -0
  668. package/dist/workspace/box-publish.schema.json +498 -0
  669. package/dist/workspace/box-services.js +39 -0
  670. package/dist/workspace/broker-protocol.js +359 -0
  671. package/dist/workspace/broker-protocol.schema.json +228 -0
  672. package/dist/workspace/change-set.schema.json +460 -0
  673. package/dist/workspace/changes-cli.js +56 -0
  674. package/dist/workspace/changes.js +446 -0
  675. package/dist/workspace/changes.schema.json +642 -0
  676. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  677. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  678. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  679. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  680. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  681. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  682. package/dist/workspace/chant-migrations.js +113 -0
  683. package/dist/workspace/check.schema.json +433 -0
  684. package/dist/workspace/checks/box-isolation.js +62 -0
  685. package/dist/workspace/checks/boxes.js +491 -0
  686. package/dist/workspace/checks/diagrams.js +104 -0
  687. package/dist/workspace/checks/generated.js +419 -0
  688. package/dist/workspace/checks/ledgers.js +212 -0
  689. package/dist/workspace/checks/links.js +191 -0
  690. package/dist/workspace/checks/live.js +100 -0
  691. package/dist/workspace/checks/pipelines.js +188 -0
  692. package/dist/workspace/checks/records.js +169 -0
  693. package/dist/workspace/checks.js +426 -0
  694. package/dist/workspace/ci-green-cli.js +125 -0
  695. package/dist/workspace/ci-green-forge.js +83 -0
  696. package/dist/workspace/ci-green-workflow.js +199 -0
  697. package/dist/workspace/ci-green.js +325 -0
  698. package/dist/workspace/ci-last-green.schema.json +158 -0
  699. package/dist/workspace/compose-graph.js +235 -0
  700. package/dist/workspace/compose-reports.js +146 -0
  701. package/dist/workspace/composites.js +264 -0
  702. package/dist/workspace/composites.schema.json +617 -0
  703. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  704. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  705. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  706. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  707. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  708. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  709. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  710. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  711. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  712. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  713. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  714. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  715. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  716. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  717. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  718. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  719. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  720. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  721. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  722. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  723. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  724. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  725. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  726. package/dist/workspace/conformance/broker.js +736 -0
  727. package/dist/workspace/conformance/index.js +673 -0
  728. package/dist/workspace/conformance/vitest.js +108 -0
  729. package/dist/workspace/conformance/writer.js +1080 -0
  730. package/dist/workspace/decide.js +879 -0
  731. package/dist/workspace/decision-points.schema.json +135 -135
  732. package/dist/workspace/declaration-write-cli.js +74 -0
  733. package/dist/workspace/declaration-write.js +238 -0
  734. package/dist/workspace/declaration.js +938 -0
  735. package/dist/workspace/declaration.schema.json +1413 -1413
  736. package/dist/workspace/declared-kinds.js +106 -0
  737. package/dist/workspace/environments.js +164 -0
  738. package/dist/workspace/evidence.schema.json +279 -0
  739. package/dist/workspace/export-cli.js +185 -0
  740. package/dist/workspace/export.js +499 -0
  741. package/dist/workspace/factory-rules.js +175 -0
  742. package/dist/workspace/generated-files.js +92 -0
  743. package/dist/workspace/glob.js +45 -0
  744. package/dist/workspace/graph-cache.js +352 -0
  745. package/dist/workspace/graph-cli.js +348 -0
  746. package/dist/workspace/graph.schema.json +1338 -0
  747. package/dist/workspace/identity-gate-rule.js +75 -0
  748. package/dist/workspace/identity.js +126 -0
  749. package/dist/workspace/import.js +283 -0
  750. package/dist/workspace/init.js +620 -0
  751. package/dist/workspace/intent-cli.js +263 -0
  752. package/dist/workspace/intent-joins.js +201 -0
  753. package/dist/workspace/intent-record.js +352 -0
  754. package/dist/workspace/intent-record.schema.json +864 -0
  755. package/dist/workspace/intent.js +1582 -0
  756. package/dist/workspace/intent.schema.json +2420 -0
  757. package/dist/workspace/json-edit.js +221 -0
  758. package/dist/workspace/jsonc.js +235 -0
  759. package/dist/workspace/kind-readers.js +103 -0
  760. package/dist/workspace/kinds.js +587 -0
  761. package/dist/workspace/lexicon-symbols.js +112 -0
  762. package/dist/workspace/lineage-adopt-cli.js +102 -0
  763. package/dist/workspace/lineage-adopt.js +360 -0
  764. package/dist/workspace/lineage-check.js +282 -0
  765. package/dist/workspace/lineage-cli.js +121 -0
  766. package/dist/workspace/lineage-hash-index.js +284 -0
  767. package/dist/workspace/lineage-init.js +507 -0
  768. package/dist/workspace/lineage-lock.js +387 -0
  769. package/dist/workspace/lineage-merge.js +45 -0
  770. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  771. package/dist/workspace/lineage-migrations.js +329 -0
  772. package/dist/workspace/lineage-provenance.js +36 -0
  773. package/dist/workspace/lineage-update.js +138 -0
  774. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  775. package/dist/workspace/lineage-upgrade.js +889 -0
  776. package/dist/workspace/lineage-vendor.js +171 -0
  777. package/dist/workspace/lineage-version.js +128 -0
  778. package/dist/workspace/lineage-versions.js +275 -0
  779. package/dist/workspace/links.js +330 -0
  780. package/dist/workspace/ls-generated.js +95 -0
  781. package/dist/workspace/ls.js +277 -0
  782. package/dist/workspace/ls.schema.json +333 -0
  783. package/dist/workspace/member-commands.js +508 -0
  784. package/dist/workspace/member-handles.js +216 -0
  785. package/dist/workspace/member-pipeline.js +258 -0
  786. package/dist/workspace/member-run.js +117 -0
  787. package/dist/workspace/member-write.schema.json +193 -0
  788. package/dist/workspace/nested-graph.js +156 -0
  789. package/dist/workspace/nesting.js +38 -0
  790. package/dist/workspace/patch.js +301 -0
  791. package/dist/workspace/patch.schema.json +321 -0
  792. package/dist/workspace/pin-cli.js +55 -0
  793. package/dist/workspace/pin-integrity.js +100 -0
  794. package/dist/workspace/plan-summary.schema.json +155 -0
  795. package/dist/workspace/point-answer.schema.json +129 -129
  796. package/dist/workspace/points-cli.js +291 -0
  797. package/dist/workspace/points-write.schema.json +660 -0
  798. package/dist/workspace/points.js +521 -0
  799. package/dist/workspace/points.schema.json +916 -0
  800. package/dist/workspace/pr-report.schema.json +108 -0
  801. package/dist/workspace/principal-classes.js +245 -0
  802. package/dist/workspace/reason-codes.js +326 -0
  803. package/dist/workspace/record-assets.js +151 -0
  804. package/dist/workspace/record-decided.js +105 -0
  805. package/dist/workspace/record-sessions.js +96 -0
  806. package/dist/workspace/record-source.js +114 -0
  807. package/dist/workspace/records-amend.schema.json +284 -0
  808. package/dist/workspace/records-checkout.js +76 -0
  809. package/dist/workspace/records-cli.js +707 -0
  810. package/dist/workspace/records-close.js +116 -0
  811. package/dist/workspace/records-close.schema.json +278 -0
  812. package/dist/workspace/records-new.schema.json +202 -0
  813. package/dist/workspace/records-review.schema.json +367 -0
  814. package/dist/workspace/records-since.js +317 -0
  815. package/dist/workspace/records-since.schema.json +218 -0
  816. package/dist/workspace/records-write.js +1229 -0
  817. package/dist/workspace/records.js +1345 -0
  818. package/dist/workspace/records.schema.json +604 -0
  819. package/dist/workspace/reference-kinds/app/package.json +10 -0
  820. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  821. package/dist/workspace/returns.js +303 -0
  822. package/dist/workspace/root-refusal.js +75 -0
  823. package/dist/workspace/run-statement.schema.json +622 -0
  824. package/dist/workspace/runs-cli.js +584 -0
  825. package/dist/workspace/runs-write.schema.json +994 -0
  826. package/dist/workspace/runs.js +708 -0
  827. package/dist/workspace/runs.schema.json +1257 -0
  828. package/dist/workspace/runtimes.js +76 -0
  829. package/dist/workspace/session-kinds.js +83 -0
  830. package/dist/workspace/signers.schema.json +206 -0
  831. package/dist/workspace/source-block.js +125 -0
  832. package/dist/workspace/squash.js +177 -0
  833. package/dist/workspace/status-gates.js +162 -0
  834. package/dist/workspace/status-stewards.js +330 -0
  835. package/dist/workspace/status.js +514 -0
  836. package/dist/workspace/status.schema.json +998 -0
  837. package/dist/workspace/steward-index.js +191 -0
  838. package/dist/workspace/symbols.js +188 -0
  839. package/dist/workspace/template-manifest.js +227 -0
  840. package/dist/workspace/template-pins.js +115 -0
  841. package/dist/workspace/trailer-joins.js +65 -0
  842. package/dist/workspace/trailers.js +111 -0
  843. package/dist/workspace/tree.js +136 -0
  844. package/dist/workspace/trust/attestor.js +63 -0
  845. package/dist/workspace/trust/dsse.js +108 -0
  846. package/dist/workspace/trust/evidence-cli.js +175 -0
  847. package/dist/workspace/trust/evidence.js +161 -0
  848. package/dist/workspace/trust/gate-seal.js +226 -0
  849. package/dist/workspace/trust/policy.js +190 -0
  850. package/dist/workspace/trust/provenance.js +180 -0
  851. package/dist/workspace/trust/rotation.js +298 -0
  852. package/dist/workspace/trust/run-commits.js +101 -0
  853. package/dist/workspace/trust/run-statement.js +182 -0
  854. package/dist/workspace/trust/seal.js +272 -0
  855. package/dist/workspace/trust/signers-cli.js +152 -0
  856. package/dist/workspace/trust/ssh-commit.js +178 -0
  857. package/dist/workspace/trust/test-repo.js +118 -0
  858. package/dist/workspace/trust/trust-files.js +193 -0
  859. package/dist/workspace/trust/verify-cli.js +63 -0
  860. package/dist/workspace/trust/verify.js +192 -0
  861. package/dist/workspace/which-chant.js +141 -0
  862. package/dist/workspace/wip-cli.js +95 -0
  863. package/dist/workspace/wip-write.schema.json +504 -0
  864. package/dist/workspace/wip.js +631 -0
  865. package/dist/workspace/wip.schema.json +334 -0
  866. package/dist/workspace/work-cli.js +448 -0
  867. package/dist/workspace/work-evidence.js +122 -0
  868. package/dist/workspace/work-evidence.schema.json +222 -0
  869. package/dist/workspace/work-history.schema.json +421 -0
  870. package/dist/workspace/work-lease.schema.json +246 -0
  871. package/dist/workspace/work-size.js +77 -0
  872. package/dist/workspace/work.js +283 -0
  873. package/dist/workspace/workspace-kinds.schema.json +259 -259
  874. package/dist/workspace/workspace-principals.schema.json +53 -53
  875. package/dist/workspace/write-lock-cli.js +105 -0
  876. package/dist/workspace/write-lock.js +424 -0
  877. package/dist/workspace/write-lock.schema.json +172 -0
  878. package/dist/workspace/write-scope.js +484 -0
  879. package/dist/yaml.js +459 -0
  880. package/package.json +2 -2
  881. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  882. package/src/cli/commands/lint.ts +3 -0
  883. package/src/cli/commands/migrate.ts +2 -0
  884. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  885. package/src/cli/main.ts +121 -27
  886. package/src/cli/mcp/workspace-tools.ts +1 -1
  887. package/src/codegen/pinned-upgrade.ts +2 -0
  888. package/src/components/discover.ts +2 -0
  889. package/src/components/sandbox/driver.ts +3 -1
  890. package/src/config-import.ts +3 -0
  891. package/src/discovery/fold-import.ts +23 -14
  892. package/src/discovery/import.ts +2 -0
  893. package/src/discovery/sandbox/driver.ts +3 -1
  894. package/src/lexicon-module.ts +3 -0
  895. package/src/lint/config.ts +1 -1
  896. package/src/lint/discover.ts +28 -8
  897. package/src/lint/policy-import.ts +4 -1
  898. package/src/lint/rule-loader.ts +2 -0
  899. package/src/op/discover.ts +3 -0
  900. package/src/ts-loader.test.ts +23 -0
  901. package/src/ts-loader.ts +122 -0
  902. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  903. package/src/workspace/declaration.ts +1 -1
  904. package/src/workspace/kinds.ts +1 -1
  905. package/src/workspace/lineage-migrations.ts +2 -0
  906. package/src/workspace/points.ts +1 -1
  907. package/src/workspace/principal-classes.ts +1 -1
@@ -0,0 +1,707 @@
1
+ /**
2
+ * `chant workspace records --kind <path> [--current] [--at <rev>] [--base <rev>]
3
+ * [--require attested] [--json]`, the first-test slice of the records query
4
+ * (#2546, #2536), with each record's provenance level (#2547).
5
+ *
6
+ * It reads every record the kind file locates and prints them, with reason
7
+ * codes for any that are invalid. An invalid record never fails the command:
8
+ * the exit code is 0 whenever the read itself worked. Only a kind, schema or
9
+ * revision that cannot be read exits 1.
10
+ *
11
+ * It needs no `chant.workspace.json`. The kind is passed explicitly, or,
12
+ * without `--kind`, it is every record kind the declaration names (#2680), so
13
+ * nothing is inferred (#2525 rule 1). Several kinds print one document per
14
+ * kind, in the declaration's order, inside one set.
15
+ *
16
+ * With `--since <rev>` it prints what changed between two revisions instead,
17
+ * through `records-since.ts` (#2673).
18
+ *
19
+ * A working-tree read in git says, for each record, whether it is committed,
20
+ * modified or new against `HEAD`, and names the branch, head and base of the
21
+ * checkout; `--uncommitted` lists only the records `HEAD` doesn't hold
22
+ * (#3160, `records-checkout.ts`).
23
+ */
24
+ import { execFileSync } from "node:child_process";
25
+ import { readFileSync, realpathSync } from "node:fs";
26
+ import { dirname, join, relative, resolve, sep } from "node:path";
27
+ import { formatError } from "../cli/format.js";
28
+ import { findWorkspaceRoot } from "../project-root.js";
29
+ import { fileDigest, isWorkspacePath } from "./record-assets.js";
30
+ import { decidedCommits } from "./record-decided.js";
31
+ import { gitRevisionSource, gitRoot, resolveRevision, workingTreeSource } from "./record-source.js";
32
+ import { declaredRecordKinds, readDeclaration, WorkspaceReadError } from "./declaration.js";
33
+ import { declaredKindFile } from "./declared-kinds.js";
34
+ import { locateWorkspace } from "./which-chant.js";
35
+ import { computeQuorum, DEFAULT_QUORUM, loadRecordKind, normalisePrincipal, readRecords, readSessionSubjects, RECORD_SEAL_FIELD, RecordReadError, } from "./records.js";
36
+ import { readCheckoutHead, worktreeStates } from "./records-checkout.js";
37
+ import { lastWriteReader } from "./write-lock.js";
38
+ function readTextOrNull(file) {
39
+ try {
40
+ return readFileSync(file, "utf-8");
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
46
+ import { gitTree, workingTree } from "./tree.js";
47
+ import { activeAttestors } from "./trust/attestor.js";
48
+ import { policyAtBase, recordProvenance, resolveBase } from "./trust/provenance.js";
49
+ import { returnedPolicy } from "./trust/policy.js";
50
+ /** The version of the `records` output this chant writes. */
51
+ export const RECORDS_CONTRACT_VERSION = 1;
52
+ /** `$id` of the JSON Schema for the `--json` output, shipped beside this file. */
53
+ export const RECORDS_OUTPUT_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/records/v1/records.schema.json";
54
+ const USAGE = "chant workspace records [--kind <kind file>] [--current] [--uncommitted | --at <rev>] [--base <rev>] [--require attested] [--json] | chant workspace records [--kind <kind file>] --since <rev|session id> [--at <rev>] [--json] | chant workspace records pin <path> | chant workspace records new|amend|review|close (#2670, #2693)";
55
+ /** Exit code when the read worked and a record falls below `--require`. */
56
+ export const EXIT_BELOW_REQUIRED = 2;
57
+ /** The role in the trust policy whose holders' verdicts the quorum does not count (#2671). */
58
+ export const AGENT_ROLE = "agent";
59
+ /** The spec of a set of declared kinds already read with `--current`. */
60
+ export function specOf(kinds) {
61
+ const spec = { kinds: [], records: [] };
62
+ for (const doc of kinds) {
63
+ if ("error" in doc || !doc.kind.spec)
64
+ continue;
65
+ spec.kinds.push(doc.declared);
66
+ for (const r of doc.records) {
67
+ spec.records.push({ kind: doc.kind.name, id: r.id, path: r.path, state: r.state, valid: r.valid, digest: r.digest, assets: r.assets });
68
+ }
69
+ }
70
+ return spec;
71
+ }
72
+ /**
73
+ * The record kinds the declaration nearest above `cwd` names, in the tree
74
+ * `at` reads, with each kind file on disk. Empty when there is no declaration.
75
+ * Throws a {@link WorkspaceReadError} for one that can't be read.
76
+ */
77
+ export function declaredKindFiles(cwd, at) {
78
+ let located;
79
+ try {
80
+ located = locateWorkspace(cwd, at);
81
+ }
82
+ catch (err) {
83
+ if (err instanceof WorkspaceReadError && err.code === "declaration-missing")
84
+ return [];
85
+ throw err;
86
+ }
87
+ return declaredRecordKinds(readDeclaration(located.tree)).map((declared) => ({ declared, file: declaredKindFile(declared, located.rootOnDisk) }));
88
+ }
89
+ /** Read every declared kind in `kinds`, as {@link queryRecords} reads one. */
90
+ export async function queryDeclaredRecords(kinds, query) {
91
+ const out = [];
92
+ for (const k of kinds) {
93
+ const doc = await queryRecords({ ...query, kind: k.file });
94
+ out.push({ ...doc, declared: { member: k.declared.member, path: k.declared.path, name: k.declared.name } });
95
+ }
96
+ // The spec is every current spec record; an --uncommitted read lists only some, so it has none.
97
+ return { $schema: RECORDS_OUTPUT_SCHEMA_ID, contract: RECORDS_CONTRACT_VERSION, kinds: out, ...(query.current && !query.uncommitted ? { spec: specOf(out) } : {}) };
98
+ }
99
+ /**
100
+ * The quorum the workspace declares: the declaration at the workspace root
101
+ * of the tree read, or the default when there is none, or when it can't be
102
+ * read (#2671). Records need no declaration, so neither does this.
103
+ */
104
+ function declaredQuorum(tree) {
105
+ try {
106
+ const q = readDeclaration(tree).quorum;
107
+ if (q !== null)
108
+ return { need: q, needFrom: "declaration" };
109
+ }
110
+ catch {
111
+ // No declaration, or one this read can't use: the default applies.
112
+ }
113
+ return { need: DEFAULT_QUORUM, needFrom: "default" };
114
+ }
115
+ /**
116
+ * The options a kind's quorum is computed with, or undefined when the kind
117
+ * has no reviews list: the need from the declaration in the tree read, and
118
+ * the agents, whether verdicts need a seal, and the keys a seal verifies
119
+ * against, all from the policy at base (#2671, #2687). `records` and the
120
+ * ratified check of `records new` and `amend` (#2873) both use it.
121
+ */
122
+ export async function quorumOptionsFor(loaded, tree, policy) {
123
+ if (!loaded.kind.reviews)
124
+ return undefined;
125
+ const { checkVerdictSeal } = await import("./trust/seal.js");
126
+ return {
127
+ ...declaredQuorum(tree),
128
+ agents: new Set((policy.roles[AGENT_ROLE] ?? []).map(normalisePrincipal)),
129
+ attestation: policy.active,
130
+ verifySeal: (v) => checkVerdictSeal(policy, v),
131
+ };
132
+ }
133
+ /**
134
+ * Where a kind's pinned paths resolve: the workspace whose declaration sits
135
+ * nearest above the kind file, when it is inside the repository, or else the
136
+ * repository root. Relative to `root`, with / separators.
137
+ */
138
+ export function pinRoot(kindFile, root) {
139
+ const found = findWorkspaceRoot(dirname(kindFile));
140
+ if (!found)
141
+ return ".";
142
+ const rel = relative(root, realpathOr(found.dir)).split(sep).join("/");
143
+ return rel === "" || rel.startsWith("..") ? "." : rel;
144
+ }
145
+ /**
146
+ * Commit times from the history of `rev` in the repository at `top`, asked
147
+ * only for a pin that might be stale. `prefix` is the workspace root from the
148
+ * repository root.
149
+ */
150
+ function gitHistory(top, rev, prefix) {
151
+ const times = (args) => {
152
+ try {
153
+ const out = execFileSync("git", args, { cwd: top, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] });
154
+ return out.split("\n").filter(Boolean).map(Number);
155
+ }
156
+ catch {
157
+ // No commits yet, or a path git doesn't know.
158
+ return [];
159
+ }
160
+ };
161
+ return {
162
+ fileChanged: (path) => times(["log", "-1", "--format=%ct", rev, "--", prefix === "." ? path : `${prefix}/${path}`])[0] ?? null,
163
+ // The latest commit that added the file: a record deleted and written again counts from the second time.
164
+ recorded: (path) => times(["log", "--diff-filter=A", "--format=%ct", rev, "--", path])[0] ?? null,
165
+ };
166
+ }
167
+ /**
168
+ * Load the kind and read its records, in the working tree or at `query.at`,
169
+ * with each pin checked in the same tree. Throws a {@link RecordReadError}.
170
+ * `chant workspace graph` and `check` read records through this too.
171
+ */
172
+ export async function readRecordsFor(query) {
173
+ // git reports its top through symlinks resolved (/var is /private/var on
174
+ // macOS), so the directory has to be too, or record paths leave the repository.
175
+ const cwd = realpathOr(query.cwd);
176
+ const top = gitRoot(cwd);
177
+ const root = top ?? cwd;
178
+ const loaded = await loadRecordKind(query.kind, cwd);
179
+ const workspaceRoot = pinRoot(loaded.file, root);
180
+ let at = null;
181
+ let source = workingTreeSource(root);
182
+ let assets = workingTree(workspaceRoot === "." ? root : join(root, ...workspaceRoot.split("/")));
183
+ if (query.at !== undefined) {
184
+ if (!top)
185
+ throw new RecordReadError("not-a-git-repository", "--at reads git objects, and this directory is not in a git repository");
186
+ at = resolveRevision(top, query.at);
187
+ source = gitRevisionSource(top, at);
188
+ assets = gitTree(top, at, workspaceRoot === "." ? "" : workspaceRoot);
189
+ }
190
+ if (at === null && query.overlay)
191
+ source = await query.overlay(source, { loaded, root });
192
+ const history = top ? gitHistory(top, at ?? "HEAD", workspaceRoot) : undefined;
193
+ // A session kind's verdicts name records of another kind, read from the same tree (#2673).
194
+ const subjects = await readSessionSubjects(loaded, root, source);
195
+ const result = await readRecords(loaded, { root, source, current: !!query.current, assets, workspaceRoot, ...(history ? { history } : {}), ...(subjects ? { subjects } : {}) });
196
+ return { loaded, root, top, at, workspaceRoot, tree: assets, result };
197
+ }
198
+ /** Run the query and build the document `--json` prints. Never throws a {@link RecordReadError}. */
199
+ export async function queryRecords(query) {
200
+ // A revision has no working tree to hold anything uncommitted; the CLI and the MCP tool refuse the pair first.
201
+ if (query.uncommitted && query.at !== undefined)
202
+ throw new Error("--uncommitted reads the working tree and takes no --at");
203
+ try {
204
+ // An answer kind's records include the answers held on the lifecycle ledger (#2786, #3815), as `points` lists them (#3833).
205
+ let heldOnLedger;
206
+ const { loaded, root, top, at, workspaceRoot, tree, result } = await readRecordsFor({
207
+ ...query,
208
+ overlay: async (base, { loaded: l, root: r }) => {
209
+ if (!l.kind.answers)
210
+ return base;
211
+ const { readLedgerAnswers, refreshLedger, withLedgerAnswers } = await import("./answers-ledger.js");
212
+ if (query.fetchLedger)
213
+ await refreshLedger(l.file);
214
+ const ledger = await readLedgerAnswers({ file: l.file, name: l.kind.name, dirRel: relative(r, l.dir).split(sep).join("/") || "." });
215
+ heldOnLedger = new Map([...ledger.byPath.values()].map((a) => [a.path, a.ledger]));
216
+ return withLedgerAnswers(base, ledger);
217
+ },
218
+ });
219
+ // Provenance, judged by the policy at base and never by the tree read (#2547).
220
+ const base = top ? resolveBase(top, query.base) : { commit: null, from: null };
221
+ const policy = top ? policyAtBase(top, base) : policyAtBase(root, base);
222
+ const attestors = policy.active ? await activeAttestors() : [];
223
+ const provenance = recordProvenance({
224
+ repo: top,
225
+ policy,
226
+ at,
227
+ paths: result.records.map((r) => r.path),
228
+ attestors,
229
+ ...(policy.active ? { revisit: await returnedRevisit(tree, workspaceRoot, policy, attestors) } : {}),
230
+ });
231
+ const seals = loaded.kind.reviews ? await import("./trust/seal.js") : undefined;
232
+ const quorumOptions = await quorumOptionsFor(loaded, tree, policy);
233
+ const records = [];
234
+ for (const r of result.records) {
235
+ const p = provenance.get(r.path);
236
+ // Returned work (#2552): its seals verify against the signers admitted for its return too.
237
+ const recordPolicy = p.returned ? returnedPolicy(policy, p.returned.id) : policy;
238
+ const options = p.returned ? await quorumOptionsFor(loaded, tree, recordPolicy) : quorumOptions;
239
+ records.push({
240
+ ...r,
241
+ provenance: p,
242
+ ...(options ? { quorum: computeQuorum(loaded.kind, r, options) } : {}),
243
+ ...(seals ? authorSeal(loaded.kind, r, recordPolicy, seals.checkRecordSeal) : {}),
244
+ });
245
+ }
246
+ if (heldOnLedger)
247
+ for (const r of records)
248
+ r.ledger = heldOnLedger.get(r.path) ?? null;
249
+ if (loaded.kind.approval && !loaded.kind.work && top) {
250
+ const decided = decidedCommits(top, at ?? "HEAD", records.map((r) => r.path), loaded.kind);
251
+ for (const r of records)
252
+ r.decidedIn = decided.get(r.path) ?? null;
253
+ }
254
+ if (loaded.kind.work && query.workGaps !== false && top)
255
+ await raiseWorkGaps(loaded, records, { root, workspaceRoot, at: query.at });
256
+ if (loaded.kind.work && at === null && top) {
257
+ const { activeWorkLeases } = await import("../lifecycle/work-lease.js");
258
+ const leases = await activeWorkLeases(loaded.file);
259
+ for (const r of records)
260
+ if (r.id !== null)
261
+ r.lease = leases.get(r.id) ?? null;
262
+ }
263
+ if (loaded.kind.work?.answers) {
264
+ // The answers about each item, joined by id (#3147). An answer kind that can't be read leaves answers out rather than failing the work read.
265
+ const [{ workAnswers }, { readLedgerAnswers, withLedgerAnswers }] = await Promise.all([import("./work.js"), import("./answers-ledger.js")]);
266
+ const answersRead = await readRecordsFor({
267
+ kind: resolve(dirname(loaded.file), loaded.kind.work.answers),
268
+ cwd: query.cwd,
269
+ ...(query.at !== undefined ? { at: query.at } : {}),
270
+ overlay: async (base, { loaded: l, root: r }) => withLedgerAnswers(base, await readLedgerAnswers({ file: l.file, name: l.kind.name, dirRel: relative(r, l.dir).split(sep).join("/") || "." })),
271
+ }).catch((err) => {
272
+ if (err instanceof RecordReadError)
273
+ return undefined;
274
+ throw err;
275
+ });
276
+ if (answersRead) {
277
+ const byItem = workAnswers(answersRead.result.records, records.flatMap((r) => (r.id !== null ? [r.id] : [])));
278
+ for (const r of records)
279
+ if (r.id !== null)
280
+ r.answers = byItem.get(r.id) ?? [];
281
+ }
282
+ }
283
+ // Which records the checkout holds uncommitted, judged after every record is read, so links still resolve across the whole set (#3160).
284
+ let checkout;
285
+ let listed = records;
286
+ let summary = result.summary;
287
+ if (at === null && top) {
288
+ const { head, ...rest } = readCheckoutHead(top, query.base);
289
+ const dir = relative(root, loaded.dir).split(sep).join("/") || ".";
290
+ // A record held on the ledger is not the checkout's: it has no worktree state, and is never uncommitted (#3833).
291
+ const inTree = records.filter((r) => !r.ledger);
292
+ const { states, deleted } = worktreeStates(top, head, dir, records.map((r) => r.path), new RegExp(loaded.kind.location.match));
293
+ for (const r of inTree)
294
+ r.worktree = states.get(r.path) ?? "new";
295
+ const lastWrite = lastWriteReader(top);
296
+ for (const r of inTree)
297
+ r.lastWrite = lastWrite(r.path, readTextOrNull(join(top, ...r.path.split("/"))));
298
+ checkout = { branch: rest.branch, head, base: rest.base, baseFrom: rest.baseFrom, deleted };
299
+ if (query.uncommitted) {
300
+ listed = inTree.filter((r) => r.worktree !== "committed");
301
+ summary = { ...summary, total: listed.length, valid: listed.filter((r) => r.valid).length, invalid: listed.filter((r) => !r.valid).length };
302
+ }
303
+ }
304
+ else if (query.uncommitted && !top) {
305
+ throw new RecordReadError("not-a-git-repository", "--uncommitted compares the working tree with HEAD, and this directory is not in a git repository");
306
+ }
307
+ return {
308
+ $schema: RECORDS_OUTPUT_SCHEMA_ID,
309
+ contract: RECORDS_CONTRACT_VERSION,
310
+ kind: {
311
+ name: loaded.kind.name,
312
+ schema: loaded.kind.schema.id,
313
+ file: relative(root, loaded.file).split("\\").join("/"),
314
+ format: loaded.kind.format,
315
+ spec: loaded.kind.spec === true,
316
+ },
317
+ at,
318
+ workspaceRoot,
319
+ current: !!query.current,
320
+ uncommitted: !!query.uncommitted,
321
+ ...(checkout ? { checkout } : {}),
322
+ trust: { base: base.commit, baseFrom: base.from, active: policy.active, signersPath: policy.signersPath, problems: policy.problems },
323
+ records: listed,
324
+ summary,
325
+ ...(result.decisions ? { decisions: result.decisions } : {}),
326
+ };
327
+ }
328
+ catch (err) {
329
+ if (!(err instanceof RecordReadError))
330
+ throw err;
331
+ return { $schema: RECORDS_OUTPUT_SCHEMA_ID, contract: RECORDS_CONTRACT_VERSION, error: { code: err.code, message: err.message } };
332
+ }
333
+ }
334
+ /**
335
+ * The second look recordProvenance takes at each record (#2552): a record
336
+ * whose bytes came back in a return is judged by the commit it was made in,
337
+ * which the return carries, rather than by the import here. `tree` is the
338
+ * workspace root's tree, as read; record paths are from the repository root.
339
+ */
340
+ async function returnedRevisit(tree, workspaceRoot, policy, attestors) {
341
+ const { readReturns, returnedProvenance } = await import("./returns.js");
342
+ const { returns } = readReturns(tree);
343
+ if (returns.length === 0)
344
+ return undefined;
345
+ const prefix = workspaceRoot === "." ? "" : `${workspaceRoot}/`;
346
+ return (path, host) => {
347
+ if (!path.startsWith(prefix))
348
+ return undefined;
349
+ const rel = path.slice(prefix.length);
350
+ const holding = returns.filter((r) => r.paths[rel] !== undefined);
351
+ if (holding.length === 0 || tree.stat(rel) !== "file")
352
+ return undefined;
353
+ const content = Buffer.from(tree.bytes ? tree.bytes(rel) : tree.read(rel));
354
+ for (const r of holding) {
355
+ const p = returnedProvenance(policy, attestors, r, rel, content, host);
356
+ if (p)
357
+ return p;
358
+ }
359
+ return undefined;
360
+ };
361
+ }
362
+ /**
363
+ * A record's author seal checked against the policy at base (#2688), for a
364
+ * kind with a reviews list: its author is the kind's `reviews.decider` field.
365
+ * Under an active signers file, a record that names an author and is not
366
+ * attested gains the warning `record-unattested`, and is still read: sealing
367
+ * records is opt-in for now. A record that can't be parsed gets neither field.
368
+ */
369
+ function authorSeal(kind, r, policy, check) {
370
+ if (r.data === null)
371
+ return {};
372
+ const field = kind.reviews.decider;
373
+ const author = typeof r.data[field] === "string" && r.data[field].trim() !== "" ? r.data[field] : null;
374
+ const { attested, ...attestation } = check(policy, { record: r.id, digest: r.digest, author, authorField: field, state: r.state, seal: r.data[RECORD_SEAL_FIELD] });
375
+ if (policy.active && author !== null && attested !== true) {
376
+ r.warnings.push({ code: "record-unattested", message: `an attestation policy is active at base, and ${attestation.message}` });
377
+ }
378
+ return { attested, attestation };
379
+ }
380
+ /**
381
+ * `work-done-gap-open` on a records read (#2686): for each done work record
382
+ * whose `source` names a finding and a region, walk that region with the
383
+ * intent graph, at the same revision, and copy the warning the walk raises
384
+ * on the record. One walk per region, and only a region some done item names.
385
+ * The walk reads the record kinds the declaration names, and the work kind
386
+ * and its decision kind if it names neither. It needs git and a workspace
387
+ * declaration; when the walk can't be made, for one without them or a region
388
+ * that no longer exists, the record is left as it was.
389
+ */
390
+ async function raiseWorkGaps(loaded, records, opts) {
391
+ const work = loaded.kind.work;
392
+ const byRegion = new Map();
393
+ for (const r of records) {
394
+ if (r.id === null || r.state !== work.done)
395
+ continue;
396
+ const src = r.data?.source;
397
+ if (src === null || typeof src !== "object" || Array.isArray(src))
398
+ continue;
399
+ const { finding, region } = src;
400
+ if (typeof finding !== "string" || typeof region !== "string")
401
+ continue;
402
+ byRegion.set(region, [...(byRegion.get(region) ?? []), r]);
403
+ }
404
+ if (byRegion.size === 0)
405
+ return;
406
+ const cwd = opts.workspaceRoot === "." ? opts.root : join(opts.root, ...opts.workspaceRoot.split("/"));
407
+ let declared;
408
+ try {
409
+ declared = declaredKindFiles(cwd, opts.at).map((k) => k.file);
410
+ }
411
+ catch (err) {
412
+ if (err instanceof WorkspaceReadError)
413
+ return;
414
+ throw err;
415
+ }
416
+ const kinds = [];
417
+ const seen = new Set();
418
+ for (const file of [...declared, resolve(dirname(loaded.file), work.decisions), loaded.file]) {
419
+ const real = realpathOr(file);
420
+ if (seen.has(real))
421
+ continue;
422
+ seen.add(real);
423
+ kinds.push(file);
424
+ }
425
+ const { intentGraph } = await import("./intent.js");
426
+ for (const [region, items] of byRegion) {
427
+ const { doc } = await intentGraph({ cwd, region, at: opts.at, kinds });
428
+ if ("error" in doc)
429
+ continue;
430
+ for (const r of items) {
431
+ const node = doc.nodes.find((n) => n.kind === "work" && n.id === `record:${loaded.kind.name}/${r.id}`);
432
+ const warning = node?.kind === "work" ? node.warnings.find((w) => w.code === "work-done-gap-open") : undefined;
433
+ if (warning && !r.warnings.some((w) => w.code === warning.code))
434
+ r.warnings.push(warning);
435
+ }
436
+ }
437
+ }
438
+ /**
439
+ * `chant workspace records pin <path>`: the `{path, sha256}` a decision's
440
+ * evidence entry holds for a file, with the path from the workspace root
441
+ * (the nearest declaration above the file, or the repository root).
442
+ */
443
+ export function pinFile(file, cwd) {
444
+ const abs = realpathOr(resolve(cwd, file));
445
+ const top = gitRoot(dirname(abs));
446
+ const ws = findWorkspaceRoot(dirname(abs));
447
+ const base = ws ? realpathOr(ws.dir) : top ? realpathOr(top) : realpathOr(cwd);
448
+ const path = relative(base, abs).split(sep).join("/");
449
+ if (path.startsWith("..") || !isWorkspacePath(path))
450
+ return { error: `${file} is not a file path inside the workspace at ${base}` };
451
+ const sha256 = fileDigest(workingTree(base), path);
452
+ if (sha256 === undefined)
453
+ return { error: `${file} is not a file` };
454
+ return { path, sha256 };
455
+ }
456
+ export async function runWorkspaceRecords(ctx) {
457
+ const { args } = ctx;
458
+ if (args.extraPositional === "new" || args.extraPositional === "amend" || args.extraPositional === "review" || args.extraPositional === "close") {
459
+ return (await import("./records-write.js")).runRecordsWrite(ctx);
460
+ }
461
+ if (args.extraPositional === "pin") {
462
+ if (!args.extraPositional2) {
463
+ console.error(formatError({ message: "pin needs the path of a file", hint: USAGE }));
464
+ return 1;
465
+ }
466
+ const pin = pinFile(args.extraPositional2, process.cwd());
467
+ if ("error" in pin) {
468
+ console.error(formatError({ message: pin.error, hint: USAGE }));
469
+ return 1;
470
+ }
471
+ console.log(JSON.stringify(pin, null, 2));
472
+ return 0;
473
+ }
474
+ if (args.extraPositional) {
475
+ console.error(formatError({ message: `chant workspace records takes no argument but pin, new, amend, review or close (got ${args.extraPositional})`, hint: USAGE }));
476
+ return 1;
477
+ }
478
+ const pairing = uncommittedPairing(args);
479
+ if (pairing) {
480
+ console.error(formatError({ message: pairing, hint: USAGE }));
481
+ return 1;
482
+ }
483
+ if (!args.kind)
484
+ return runDeclaredRecords(args);
485
+ if (args.require !== undefined && args.require !== "attested") {
486
+ console.error(formatError({ message: `--require takes one level, attested, not ${JSON.stringify(args.require)}`, hint: USAGE }));
487
+ return 1;
488
+ }
489
+ if (args.since !== undefined) {
490
+ if (args.current || args.require !== undefined || args.base !== undefined) {
491
+ console.error(formatError({ message: "--since compares two revisions and takes no --current, --require or --base", hint: USAGE }));
492
+ return 1;
493
+ }
494
+ // Loaded here, so a plain records read never loads it (#2673).
495
+ const { formatSince, queryRecordsSince } = await import("./records-since.js");
496
+ const since = await queryRecordsSince({ kind: args.kind, since: args.since, at: args.at, cwd: process.cwd() });
497
+ if (args.json)
498
+ console.log(JSON.stringify(since, null, 2));
499
+ else if ("error" in since)
500
+ console.error(formatError({ message: `${since.error.code}: ${since.error.message}`, hint: USAGE }));
501
+ else
502
+ console.log(formatSince(since));
503
+ return "error" in since ? 1 : 0;
504
+ }
505
+ const doc = await queryRecords({ kind: args.kind, current: args.current, uncommitted: args.uncommitted, at: args.at, base: args.base, cwd: process.cwd(), fetchLedger: true });
506
+ if (args.json) {
507
+ console.log(JSON.stringify(doc, null, 2));
508
+ }
509
+ else if ("error" in doc) {
510
+ console.error(formatError({ message: `${doc.error.code}: ${doc.error.message}`, hint: USAGE }));
511
+ }
512
+ else {
513
+ console.log(formatRecords(doc.records, doc.summary, doc.at, doc.checkout));
514
+ }
515
+ if ("error" in doc)
516
+ return 1;
517
+ if (args.require) {
518
+ const below = belowRequired(doc.records, args.require);
519
+ if (below.length > 0) {
520
+ console.error(formatError({
521
+ message: `${below.length} of ${doc.records.length} records are not ${args.require}: ${below
522
+ .slice(0, 5)
523
+ .map((r) => `${r.path} (${r.provenance.level})`)
524
+ .join(", ")}${below.length > 5 ? ", ..." : ""}`,
525
+ hint: doc.trust.active ? "run with --json to see each record's reason" : `there is no signers file (${doc.trust.signersPath}) at base`,
526
+ }));
527
+ return EXIT_BELOW_REQUIRED;
528
+ }
529
+ }
530
+ return 0;
531
+ }
532
+ /**
533
+ * `records` without `--kind` (#2680): every record kind the declaration
534
+ * names, or, when it names none or there is no declaration, the error it has
535
+ * always been. A kind whose read fails is listed with its error, the others
536
+ * are still read, and the exit code is 1.
537
+ *
538
+ * Locating the declaration itself can fail before any kind is known. For
539
+ * `not-a-git-repository` and `revision-unknown`, the codes a single kind's
540
+ * read can also fail with (#2860), `--json` prints the same
541
+ * `{ $schema, contract, error: { code, message } }` document that read
542
+ * failure would, so a reader of `--json` never sees a silent exit 1. A
543
+ * declaration-level code the schema doesn't carry (`declaration-invalid` and
544
+ * the rest of `WorkspaceErrorCode`) still prints text on stderr only.
545
+ */
546
+ async function runDeclaredRecords(args) {
547
+ if (args.require !== undefined && args.require !== "attested") {
548
+ console.error(formatError({ message: `--require takes one level, attested, not ${JSON.stringify(args.require)}`, hint: USAGE }));
549
+ return 1;
550
+ }
551
+ let declared;
552
+ try {
553
+ declared = declaredKindFiles(process.cwd(), args.at);
554
+ }
555
+ catch (err) {
556
+ if (!(err instanceof WorkspaceReadError))
557
+ throw err;
558
+ const message = `${err.describe()}; without --kind, the declaration names the record kinds`;
559
+ if (args.json && (err.code === "not-a-git-repository" || err.code === "revision-unknown")) {
560
+ console.log(JSON.stringify({ $schema: RECORDS_OUTPUT_SCHEMA_ID, contract: RECORDS_CONTRACT_VERSION, error: { code: err.code, message } }, null, 2));
561
+ }
562
+ else {
563
+ console.error(formatError({ message: `${err.code}: ${message}`, hint: USAGE }));
564
+ }
565
+ return 1;
566
+ }
567
+ if (declared.length === 0) {
568
+ console.error(formatError({ message: "--kind <kind file> is required", hint: USAGE }));
569
+ return 1;
570
+ }
571
+ if (args.since !== undefined)
572
+ return runDeclaredSince(declared, args);
573
+ const set = await queryDeclaredRecords(declared, { current: args.current, uncommitted: args.uncommitted, at: args.at, base: args.base, cwd: process.cwd(), fetchLedger: true });
574
+ if (args.json)
575
+ console.log(JSON.stringify(set, null, 2));
576
+ for (const doc of args.json ? [] : set.kinds) {
577
+ if ("error" in doc) {
578
+ console.error(formatError({ message: `${doc.declared.path}: ${doc.error.code}: ${doc.error.message}`, hint: USAGE }));
579
+ continue;
580
+ }
581
+ console.log(`${doc.declared.name ?? doc.kind.name} (${doc.declared.path})`);
582
+ console.log(formatRecords(doc.records, doc.summary, doc.at, doc.checkout));
583
+ }
584
+ if (set.kinds.some((d) => "error" in d))
585
+ return 1;
586
+ if (args.require) {
587
+ const results = set.kinds.filter((d) => !("error" in d));
588
+ const all = results.flatMap((d) => d.records);
589
+ const below = belowRequired(all, args.require);
590
+ if (below.length > 0) {
591
+ const inactive = results.find((d) => !d.trust.active);
592
+ console.error(formatError({
593
+ message: `${below.length} of ${all.length} records are not ${args.require}: ${below
594
+ .slice(0, 5)
595
+ .map((r) => `${r.path} (${r.provenance.level})`)
596
+ .join(", ")}${below.length > 5 ? ", ..." : ""}`,
597
+ hint: inactive ? `there is no signers file (${inactive.trust.signersPath}) at base` : "run with --json to see each record's reason",
598
+ }));
599
+ return EXIT_BELOW_REQUIRED;
600
+ }
601
+ }
602
+ return 0;
603
+ }
604
+ /**
605
+ * `records --since` without `--kind` (#2680): what changed in every declared
606
+ * kind, one `records-since` document per kind inside one set, in the
607
+ * declaration's order. A kind whose read fails is listed with its error, and
608
+ * the exit code is 1.
609
+ */
610
+ async function runDeclaredSince(declared, args) {
611
+ if (args.current || args.require !== undefined || args.base !== undefined) {
612
+ console.error(formatError({ message: "--since compares two revisions and takes no --current, --require or --base", hint: USAGE }));
613
+ return 1;
614
+ }
615
+ const { formatSince, queryRecordsSince, RECORDS_SINCE_OUTPUT_SCHEMA_ID } = await import("./records-since.js");
616
+ const kinds = [];
617
+ for (const k of declared) {
618
+ const doc = await queryRecordsSince({ kind: k.file, since: args.since, at: args.at, cwd: process.cwd() });
619
+ kinds.push({ ...doc, declared: { member: k.declared.member, path: k.declared.path, name: k.declared.name } });
620
+ }
621
+ if (args.json)
622
+ console.log(JSON.stringify({ $schema: RECORDS_SINCE_OUTPUT_SCHEMA_ID, contract: RECORDS_CONTRACT_VERSION, kinds }, null, 2));
623
+ for (const doc of args.json ? [] : kinds) {
624
+ if ("error" in doc) {
625
+ console.error(formatError({ message: `${doc.declared.path}: ${doc.error.code}: ${doc.error.message}`, hint: USAGE }));
626
+ continue;
627
+ }
628
+ console.log(`${doc.declared.name ?? doc.kind.name} (${doc.declared.path})`);
629
+ console.log(formatSince(doc));
630
+ }
631
+ return kinds.some((d) => "error" in d) ? 1 : 0;
632
+ }
633
+ export function realpathOr(dir) {
634
+ try {
635
+ return realpathSync(dir);
636
+ }
637
+ catch {
638
+ return dir;
639
+ }
640
+ }
641
+ /** Records whose provenance falls below `required`. Only `attested` can be required. */
642
+ export function belowRequired(records, required) {
643
+ return records.filter((r) => r.provenance.level !== required);
644
+ }
645
+ /** Why `--uncommitted` can't be given with the other flags given, or undefined when it can (#3160). */
646
+ function uncommittedPairing(args) {
647
+ if (!args.uncommitted)
648
+ return undefined;
649
+ if (args.at !== undefined)
650
+ return "--uncommitted reads the working tree against HEAD, and takes no --at";
651
+ if (args.since !== undefined)
652
+ return "--uncommitted takes no --since: --since compares two revisions";
653
+ return undefined;
654
+ }
655
+ function formatRecords(records, summary, at, checkout) {
656
+ const lines = [];
657
+ const idWidth = Math.max(2, ...records.map((r) => (r.id ?? "-").length));
658
+ const stateWidth = Math.max(5, ...records.map((r) => (r.state ?? "-").length));
659
+ for (const r of records) {
660
+ const title = typeof r.data?.title === "string" ? r.data.title : r.path;
661
+ const flag = r.valid ? "" : " INVALID";
662
+ const superseded = r.supersededBy ? ` superseded by ${r.supersededBy}` : "";
663
+ const remediated = r.remediatedBy.length > 0 ? ` remediated by ${r.remediatedBy.join(", ")}` : "";
664
+ const attested = r.provenance.level === "attested" ? ` attested by ${r.provenance.principal}` : "";
665
+ const sealed = r.attested === true ? ` sealed by ${(r.data?.[RECORD_SEAL_FIELD]).signer}` : "";
666
+ const uncommitted = r.worktree === "new" || r.worktree === "modified" ? ` (${r.worktree}, uncommitted)` : "";
667
+ const ledger = r.ledger ? ` (held on ${r.ledger})` : "";
668
+ lines.push(`${(r.id ?? "-").padEnd(idWidth)} ${(r.state ?? "-").padEnd(stateWidth)} ${title}${superseded}${remediated}${attested}${sealed}${uncommitted}${ledger}${flag}`);
669
+ if (r.ready !== undefined) {
670
+ const blocked = (r.blockedBy ?? []).map((b) => `${b.id} (${b.state ?? "unknown"})`).join(", ");
671
+ const implemented = (r.implements ?? []).map((d) => `${d.id} (${d.state ?? "unknown"})`).join(", ");
672
+ const held = r.lease ? `held by ${r.lease.holder} until ${r.lease.expiresAt}` : "";
673
+ const status = [r.ready ? "ready" : blocked ? `blocked by ${blocked}` : "", implemented ? `implements ${implemented}` : "", held].filter(Boolean).join("; ");
674
+ if (status)
675
+ lines.push(`${" ".repeat(idWidth + 2)}${status}`);
676
+ }
677
+ for (const reason of r.reasons)
678
+ lines.push(`${" ".repeat(idWidth + 2)}${reason.code}: ${reason.message} (${r.path})`);
679
+ for (const warning of r.warnings)
680
+ lines.push(`${" ".repeat(idWidth + 2)}warning ${warning.code}: ${warning.message} (${r.path})`);
681
+ const q = r.quorum;
682
+ if (q && q.counted.length + q.notCounted.length > 0) {
683
+ const verdict = q.metWithObjections ? "met with objections" : q.met ? "met" : "not met";
684
+ const concerns = q.openConcerns.length > 0 ? `, ${q.openConcerns.length} open ${q.openConcerns.length === 1 ? "concern" : "concerns"}` : "";
685
+ lines.push(`${" ".repeat(idWidth + 2)}quorum ${q.agreed} of ${q.need} agreed, ${verdict}; ${q.notCounted.length} not counted${concerns}`);
686
+ }
687
+ }
688
+ for (const path of checkout?.deleted ?? [])
689
+ lines.push(`${"-".padEnd(idWidth)} ${"-".padEnd(stateWidth)} ${path} (deleted, uncommitted)`);
690
+ lines.push(`${summary.total} records${at ? ` at ${at.slice(0, 8)}` : ""}: ${summary.valid} valid, ${summary.invalid} invalid, ${summary.superseded} superseded`);
691
+ if (checkout) {
692
+ const branch = checkout.branch ?? "a detached HEAD";
693
+ const head = checkout.head ? ` at ${checkout.head.slice(0, 8)}` : " with no commits";
694
+ const base = checkout.base ? `, forked from ${checkout.base.slice(0, 8)} of ${checkout.baseFrom}` : "";
695
+ lines.push(`working tree on ${branch}${head}${base}`);
696
+ }
697
+ return lines.join("\n");
698
+ }
699
+ /** `chant workspace <anything else>`. */
700
+ export async function runWorkspaceUnknown(ctx) {
701
+ const sub = ctx.args.path && ctx.args.path !== "." ? ctx.args.path : "";
702
+ console.error(formatError({
703
+ message: sub ? `Unknown workspace subcommand: ${sub}` : "chant workspace needs a subcommand",
704
+ hint: `Workspace subcommands: adopt-lineage, audit, build, check, evidence, graph, hash-index, init, lineage, lint, ls, pin, records, signers, status, upgrade, verify, versions, work. Run "chant --help" for their options.`,
705
+ }));
706
+ return 1;
707
+ }