@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,142 @@
1
+ import * as ts from "typescript";
2
+ import { isPropertyKindNew } from "./property-kind.js";
3
+ function isCapitalized(name) {
4
+ return name.length > 0 && name[0] === name[0].toUpperCase() && name[0] !== name[0].toLowerCase();
5
+ }
6
+ function getNewExpressionClassName(expr) {
7
+ if (ts.isIdentifier(expr.expression)) {
8
+ return expr.expression.text;
9
+ }
10
+ if (ts.isPropertyAccessExpression(expr.expression)) {
11
+ return expr.expression.name.text;
12
+ }
13
+ return undefined;
14
+ }
15
+ /** Names of this file's top-level consts initialised with a property-kind `new`. */
16
+ function collectPropertyKindConsts(context) {
17
+ const names = new Set();
18
+ for (const stmt of context.sourceFile.statements) {
19
+ if (!ts.isVariableStatement(stmt))
20
+ continue;
21
+ for (const decl of stmt.declarationList.declarations) {
22
+ if (ts.isIdentifier(decl.name) &&
23
+ decl.initializer &&
24
+ ts.isNewExpression(decl.initializer) &&
25
+ isPropertyKindNew(decl.initializer, context)) {
26
+ names.add(decl.name.text);
27
+ }
28
+ }
29
+ }
30
+ return names;
31
+ }
32
+ /**
33
+ * True when the constructor arguments hold a property-kind declarable,
34
+ * either inline (`panels: [new Row(…)]`) or through a const from
35
+ * `propertyConsts` (`panels: [red]`).
36
+ */
37
+ function holdsPropertyKind(expr, context, propertyConsts) {
38
+ let found = false;
39
+ function visit(node) {
40
+ if (found)
41
+ return;
42
+ if (ts.isNewExpression(node) && isPropertyKindNew(node, context)) {
43
+ found = true;
44
+ return;
45
+ }
46
+ if (ts.isIdentifier(node) && propertyConsts.has(node.text)) {
47
+ found = true;
48
+ return;
49
+ }
50
+ ts.forEachChild(node, visit);
51
+ }
52
+ for (const arg of expr.arguments ?? [])
53
+ visit(arg);
54
+ return found;
55
+ }
56
+ function collectExportedDeclarables(context) {
57
+ const declarables = [];
58
+ const sourceFile = context.sourceFile;
59
+ const propertyConsts = collectPropertyKindConsts(context);
60
+ ts.forEachChild(sourceFile, (node) => {
61
+ if (!ts.isVariableStatement(node))
62
+ return;
63
+ // Must have export modifier
64
+ const hasExport = node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
65
+ if (!hasExport)
66
+ return;
67
+ for (const decl of node.declarationList.declarations) {
68
+ if (!ts.isIdentifier(decl.name))
69
+ continue;
70
+ if (!decl.initializer)
71
+ continue;
72
+ // Must be a new expression with a capitalized name
73
+ if (!ts.isNewExpression(decl.initializer))
74
+ continue;
75
+ const className = getNewExpressionClassName(decl.initializer);
76
+ if (!className || !isCapitalized(className))
77
+ continue;
78
+ // Parameters are inherently cross-file (declared in params.ts, consumed via Ref() elsewhere)
79
+ if (className === "Parameter")
80
+ continue;
81
+ // chant #2957: a property-kind declarable is part of a resource, and a
82
+ // resource holding one is the root that emits it.
83
+ if (isPropertyKindNew(decl.initializer, context))
84
+ continue;
85
+ if (holdsPropertyKind(decl.initializer, context, propertyConsts))
86
+ continue;
87
+ declarables.push({
88
+ name: decl.name.text,
89
+ node,
90
+ });
91
+ }
92
+ });
93
+ return declarables;
94
+ }
95
+ function collectReferences(name, sourceFile, declarationNode) {
96
+ let found = false;
97
+ function visit(node) {
98
+ if (found)
99
+ return;
100
+ // Skip the declaration itself
101
+ if (node === declarationNode)
102
+ return;
103
+ if (ts.isIdentifier(node) && node.text === name) {
104
+ // Make sure this isn't the declaration's own name
105
+ const parent = node.parent;
106
+ if (parent && ts.isVariableDeclaration(parent) && parent.name === node) {
107
+ // This is the declaration itself, skip
108
+ }
109
+ else {
110
+ found = true;
111
+ return;
112
+ }
113
+ }
114
+ ts.forEachChild(node, visit);
115
+ }
116
+ visit(sourceFile);
117
+ return found;
118
+ }
119
+ export const noUnusedDeclarableRule = {
120
+ id: "COR004",
121
+ severity: "warning",
122
+ category: "correctness",
123
+ description: "Detects exported declarables that are never referenced in the same file",
124
+ check(context) {
125
+ const diagnostics = [];
126
+ const declarables = collectExportedDeclarables(context);
127
+ for (const decl of declarables) {
128
+ if (!collectReferences(decl.name, context.sourceFile, decl.node)) {
129
+ const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(decl.node.getStart(context.sourceFile));
130
+ diagnostics.push({
131
+ file: context.filePath,
132
+ line: line + 1,
133
+ column: character + 1,
134
+ ruleId: "COR004",
135
+ severity: "warning",
136
+ message: `Exported declarable '${decl.name}' is never referenced in this file — it may be dead infrastructure code.`,
137
+ });
138
+ }
139
+ }
140
+ return diagnostics;
141
+ },
142
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * OPS* Op-model post-synth checks (#2122, epic #2114 sub-issue 6) — ported
3
+ * from a hosting lexicon's own TMP012/TMP013/TMP014. Registered as core-owned
4
+ * post-synth checks (`coreOpChecks`, mirroring `../../receipt-checks.ts`'s
5
+ * `coreReceiptChecks`) so they run over the FULL build result regardless of
6
+ * which lexicons are configured — an Op is recognized by entity type
7
+ * (`../../../op/resource.ts`'s `OpResource`), not by which lexicon declared
8
+ * it. SYS010 (#2828) joined them when the `decide` activity moved into core:
9
+ * it reads the decide steps, and the `decide.backends` the caller passes.
10
+ */
11
+ import { ops012 } from "./ops012-activity-contract.js";
12
+ import { ops013 } from "./ops013-step-output-ref.js";
13
+ import { ops014 } from "./ops014-converge-rule-refusals.js";
14
+ import { ops015 } from "./ops015-gate-approval.js";
15
+ import { sys010Check } from "./sys010-key-over-plain-http.js";
16
+ export { ops012 } from "./ops012-activity-contract.js";
17
+ export { ops013 } from "./ops013-step-output-ref.js";
18
+ export { ops014 } from "./ops014-converge-rule-refusals.js";
19
+ export { ops015 } from "./ops015-gate-approval.js";
20
+ export { sys010, sys010Check } from "./sys010-key-over-plain-http.js";
21
+ /**
22
+ * Core's own post-synth checks over the Op model: OPS012, OPS013, OPS014,
23
+ * OPS015, and SYS010 over the `decide` steps and the configured decide
24
+ * backends.
25
+ */
26
+ export function coreOpChecks(opts = {}) {
27
+ return [ops012, ops013, ops014, ops015, sys010Check(opts.decideBackends)];
28
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * OPS012: activity step args/outcomeAttribute must match the activity's
3
+ * declared contract (chant #1288 Stage 1; moved from a hosting lexicon's own
4
+ * TMP012 to core in #2122, epic #2114 sub-issue 6, so it fires on every
5
+ * project that declares an Op, not only one with that lexicon configured).
6
+ *
7
+ * Validates every Op entity's steps against core's own base-activity
8
+ * contracts (`../../../op/activities/activity-contracts.ts`, #2117), using
9
+ * the generic walk in `@intentius/chant/op`'s `validateActivitySteps`. A step
10
+ * whose `fn` has no registered contract here is skipped — most activities
11
+ * don't have one yet; see that module's doc for why that's the intended,
12
+ * non-breaking default.
13
+ *
14
+ * Cross-lexicon (chant #2101): an Op step may call an activity any
15
+ * configured lexicon contributes (`terraformPlan`, `k3sInstall`,
16
+ * `flyApply`), and since this check became core-owned it fires on every
17
+ * project that declares an Op. `ctx.activityContracts` carries the contracts
18
+ * every configured lexicon declared, resolved by `loadActivityContracts`
19
+ * (`../../../op/activity-contract-registry.ts`) the same way
20
+ * `loadActivities` resolves the implementations, and is merged over the
21
+ * static table below. A context that carries none — a hand-built one in a
22
+ * test, a caller that has not loaded any — falls back to that table alone,
23
+ * exactly as before.
24
+ */
25
+ import { validateActivitySteps, mergeActivityContracts } from "../../../op/index.js";
26
+ import * as contracts from "../../../op/activities/activity-contracts.js";
27
+ import { isOpEntity } from "./support.js";
28
+ const CONTRACTS = new Map(Object.values(contracts).map((c) => [c.name, c]));
29
+ export const ops012 = {
30
+ id: "OPS012",
31
+ description: "Activity step args and outcomeAttribute.from must match the activity's declared contract",
32
+ check(ctx) {
33
+ const diagnostics = [];
34
+ const activeContracts = mergeActivityContracts(CONTRACTS, ctx.activityContracts);
35
+ for (const [entityKey, entity] of ctx.entities) {
36
+ if (!isOpEntity(entity))
37
+ continue;
38
+ const rec = entity;
39
+ const props = (entity.props ?? {});
40
+ if (typeof props.name !== "string" || !Array.isArray(props.phases))
41
+ continue;
42
+ for (const issue of validateActivitySteps(props, activeContracts)) {
43
+ diagnostics.push({
44
+ checkId: "OPS012",
45
+ severity: "error",
46
+ message: `Op "${issue.opName}", phase "${issue.phase}", step "${issue.fn}": ${issue.message}`,
47
+ entity: entityKey,
48
+ lexicon: typeof rec.lexicon === "string" ? rec.lexicon : undefined,
49
+ });
50
+ }
51
+ }
52
+ return diagnostics;
53
+ },
54
+ };
@@ -0,0 +1,88 @@
1
+ /**
2
+ * OPS013: a step-output reference (`stepOutput()`/`activity().out`, chant
3
+ * #1290) must name a step that precedes it, in scope (main `phases`, not
4
+ * `onFailure` or nested inside an `EffectStep`), with a registered
5
+ * `ActivityContract` whose `returns` schema the referenced path resolves
6
+ * against. Moved from a hosting lexicon's own TMP013 to core in #2122 (epic
7
+ * #2114 sub-issue 6), so it fires on every project that declares an Op — a
8
+ * project on the local runtime with no lexicons configured included.
9
+ *
10
+ * Same shape as OPS012 (`./ops012-activity-contract.ts`): the generic walk
11
+ * lives in `@intentius/chant/op`'s `validateStepOutputRefs`, over the same
12
+ * contract map this file builds from core's own base-activity contracts
13
+ * (`../../../op/activities/activity-contracts.ts`, #2117). A producer
14
+ * step whose `fn` has no registered contract is flagged (unlike OPS012's
15
+ * args/outcomeAttribute checks, which skip an unregistered `fn` — a
16
+ * reference has nothing to validate against without one, so it can't be
17
+ * silently allowed the way an unchecked arg can). The purely structural half
18
+ * of this check (an unknown step id, or a reference into a later phase) is
19
+ * independent of the contract map's contents entirely — no lexicon needs to
20
+ * be configured, and no activity needs a registered contract at all, for it
21
+ * to fire.
22
+ *
23
+ * Cross-lexicon (chant #2101): an Op step may call an activity any
24
+ * configured lexicon contributes (`terraformPlan`, `k3sInstall`,
25
+ * `flyApply`), and since this check became core-owned it fires on every
26
+ * project that declares an Op. `ctx.activityContracts` carries the contracts
27
+ * every configured lexicon declared, resolved by `loadActivityContracts`
28
+ * (`../../../op/activity-contract-registry.ts`) the same way
29
+ * `loadActivities` resolves the implementations, and is merged over the
30
+ * static table below. A context that carries none — a hand-built one in a
31
+ * test, a caller that has not loaded any — falls back to that table alone,
32
+ * exactly as before.
33
+ *
34
+ * That merge is what makes this rule usable at all on an Op whose steps are
35
+ * a lexicon's: before it, `terraformPlan` feeding `terraformApply` failed
36
+ * `chant build` for the absence of a contract the terraform lexicon does in
37
+ * fact declare, which is why both terraform examples carrying an Op kept it
38
+ * outside `src/` where the example-build harness could not see it.
39
+ *
40
+ * This check is what makes it safe for a lexicon's own serializer to compile
41
+ * every reference it finds unconditionally: `chant build` blocks file output
42
+ * while an error-severity post-synth finding stands, so generated code
43
+ * referencing an unresolved step never reaches disk (a lexicon's own Op
44
+ * serializer also runs the scope-only subset of this check directly —
45
+ * `validateStepOutputRefScope` — as defense-in-depth, chant #1950 pre-merge
46
+ * review finding 2).
47
+ *
48
+ * Cross-contract type compatibility (chant #1950 pre-merge review, finding
49
+ * 3): this rule also compares a producer's declared return type at `path`
50
+ * against the consumer's declared arg type at the same position
51
+ * (`string`/`number`/`boolean`/`object`/`array` only) and flags a mismatch —
52
+ * a string-returning path feeding a number-typed arg, for example.
53
+ * Deliberately shallow: a union, enum, literal, `z.any()`/`z.unknown()`, a
54
+ * transform, or a reference sitting inside an array in `args` all bail
55
+ * silently rather than being reasoned about. See `@intentius/chant/op`'s
56
+ * `step-output-ref.ts` module doc for the full writeup of what this catches
57
+ * and what it defers (to #1288 Stage 2).
58
+ */
59
+ import { validateStepOutputRefs, mergeActivityContracts } from "../../../op/index.js";
60
+ import * as contracts from "../../../op/activities/activity-contracts.js";
61
+ import { isOpEntity } from "./support.js";
62
+ const CONTRACTS = new Map(Object.values(contracts).map((c) => [c.name, c]));
63
+ export const ops013 = {
64
+ id: "OPS013",
65
+ description: "A step-output reference must name an in-scope, preceding, contract-validated producer step",
66
+ check(ctx) {
67
+ const diagnostics = [];
68
+ const activeContracts = mergeActivityContracts(CONTRACTS, ctx.activityContracts);
69
+ for (const [entityKey, entity] of ctx.entities) {
70
+ if (!isOpEntity(entity))
71
+ continue;
72
+ const rec = entity;
73
+ const props = (entity.props ?? {});
74
+ if (typeof props.name !== "string" || !Array.isArray(props.phases))
75
+ continue;
76
+ for (const issue of validateStepOutputRefs(props, activeContracts)) {
77
+ diagnostics.push({
78
+ checkId: "OPS013",
79
+ severity: "error",
80
+ message: `Op "${issue.opName}", phase "${issue.phase}", step "${issue.fn}": ${issue.message}`,
81
+ entity: entityKey,
82
+ lexicon: typeof rec.lexicon === "string" ? rec.lexicon : undefined,
83
+ });
84
+ }
85
+ }
86
+ return diagnostics;
87
+ },
88
+ };
@@ -0,0 +1,114 @@
1
+ import { classifyOpVerbClass, isWellFormedPredicate, predicateReferencesField } from "../../../op/index.js";
2
+ import { CONVERGE_SYMPTOM_FIELDS, RESOURCE_SYMPTOM_FIELDS } from "../../../lifecycle/symptoms.js";
3
+ import { isOpEntity } from "./support.js";
4
+ function looksLikeOpProps(props) {
5
+ return typeof props.name === "string" && Array.isArray(props.phases);
6
+ }
7
+ /** Read a ConvergeOp's rule table back off its `convergeTick` step's `args.rules`. `undefined` if this doesn't look like a ConvergeOp-shaped Op (defensive — never crashes the build over an unexpected shape). */
8
+ function findConvergeRules(props) {
9
+ for (const phase of props.phases) {
10
+ for (const step of phase.steps) {
11
+ if (step.kind === "activity" && step.fn === "convergeTick") {
12
+ const rules = step.args?.rules;
13
+ // #2778: a ConvergeOp with an observer step passes its result as
14
+ // `observed`, and its rules read a ResourceSymptom.
15
+ const fields = step.args?.observed !== undefined ? RESOURCE_SYMPTOM_FIELDS : CONVERGE_SYMPTOM_FIELDS;
16
+ return Array.isArray(rules) ? { rules: rules, fields } : undefined;
17
+ }
18
+ }
19
+ }
20
+ return undefined;
21
+ }
22
+ export const ops014 = {
23
+ id: "OPS014",
24
+ description: "A ConvergeOp rule table: run() must name a declared Op, a mutating dispatch requires dial apply (reconcile opens a PR in a future version, not implemented in v1), a destructive dispatch is refused outright in v1 (a converge tick is unattended and a destructive dispatch needs approval before it's attempted, not a gate consulted after the tick already committed to it), an adoptCount-reading rule may not dispatch a mutation, and every rule must carry its why",
25
+ check(ctx) {
26
+ const diagnostics = [];
27
+ const opsByName = new Map();
28
+ for (const entity of ctx.entities.values()) {
29
+ if (!isOpEntity(entity))
30
+ continue;
31
+ const rawProps = (entity.props ?? {});
32
+ if (!looksLikeOpProps(rawProps))
33
+ continue;
34
+ const opProps = rawProps;
35
+ opsByName.set(opProps.name, opProps);
36
+ }
37
+ for (const [entityKey, entity] of ctx.entities) {
38
+ if (!isOpEntity(entity))
39
+ continue;
40
+ const rec = entity;
41
+ const rawProps = (entity.props ?? {});
42
+ if (!looksLikeOpProps(rawProps))
43
+ continue;
44
+ const props = rawProps;
45
+ if (props.labels?.Converge !== "true")
46
+ continue;
47
+ const dial = props.labels?.Dial ?? "observe";
48
+ const found = findConvergeRules(props);
49
+ if (!found)
50
+ continue;
51
+ const { rules, fields } = found;
52
+ for (const rule of rules) {
53
+ const label = typeof rule?.id === "string" ? rule.id : "(unnamed rule)";
54
+ const push = (message) => {
55
+ diagnostics.push({
56
+ checkId: "OPS014",
57
+ severity: "error",
58
+ message: `ConvergeOp "${props.name}", rule "${label}": ${message}`,
59
+ entity: entityKey,
60
+ lexicon: typeof rec.lexicon === "string" ? rec.lexicon : undefined,
61
+ });
62
+ };
63
+ if (typeof rule?.why !== "string" || rule.why.trim().length === 0) {
64
+ push("every rule must carry its why — refused at build");
65
+ continue;
66
+ }
67
+ if (!isWellFormedPredicate(rule.when, fields)) {
68
+ push("predicate is outside the evaluable subset (build it from eq/neq/gt/gte/lt/lte/truthy/falsy/allOf/anyOf over a known symptom field)");
69
+ continue;
70
+ }
71
+ if (!rule.then || rule.then.kind !== "run")
72
+ continue;
73
+ const targetName = rule.then.op;
74
+ const target = opsByName.get(targetName);
75
+ if (!target) {
76
+ push(`references unknown op "${targetName}" — no declared Op has that name`);
77
+ continue;
78
+ }
79
+ const verbClass = classifyOpVerbClass(target);
80
+ // Mutating: the issue's Autonomy table gives `reconcile` "open PR",
81
+ // not "run directly" — building that channel is out of v1 scope
82
+ // (epic #1487's onDrift-channel open question), so only `apply`
83
+ // (the dial the issue's table marks "run, gated per op") may free-run
84
+ // a mutating dispatch. Refusing this at build is the honest
85
+ // alternative to silently escalating `reconcile`'s authority to
86
+ // match `apply`.
87
+ if (verbClass === "mutating" && dial !== "apply") {
88
+ const escalationNote = dial === "reconcile"
89
+ ? ` — the issue's table answer for "reconcile" is "open PR", which v1 does not implement (see epic #1487's onDrift-channel open question); this Op would otherwise silently run a mutation "reconcile" was never granted`
90
+ : "";
91
+ push(`dispatches "${targetName}" (mutating), but dial "${dial}" only permits a mutating dispatch under "apply"${escalationNote} — report instead, or raise the dial to "apply"`);
92
+ }
93
+ // Destructive: refused outright, regardless of dial or gate. A
94
+ // converge tick runs unattended on a schedule — nothing is watching
95
+ // it fire — so a destructive dispatch needs a human's approval
96
+ // *before* it is attempted, not a gate the tick consults only after
97
+ // it has already committed to running the op. `run()` has no way to
98
+ // ask first, so the target is refused rather than dispatched.
99
+ if (verbClass === "destructive") {
100
+ push(`dispatches "${targetName}" (destructive) — destructive run() targets are refused in v1 under any dial: a converge tick is unattended, and a destructive dispatch needs a human's approval before it is attempted, not a gate consulted after the tick has already committed to running it. Destructive remediation via ConvergeOp arrives once a tick can ask for that approval before it dispatches — until then, remediate manually via a gated ApplyOp/ReconcileOp run.`);
101
+ }
102
+ // Adopt safety: enforced, not just documented. A rule that reads
103
+ // `adoptCount` — the "unowned resource" signal — has no honest
104
+ // reason to dispatch a mutation; the only sanctioned action for that
105
+ // signal is `report()`. (A destructive target already gets refused
106
+ // above regardless of what its predicate reads.)
107
+ if (verbClass === "mutating" && predicateReferencesField(rule.when, "adoptCount")) {
108
+ push(`predicate reads "adoptCount" but dispatches "${targetName}" (mutating) — an unowned resource is reported, never auto-claimed by a dispatched mutation; use report() for a rule that reads the adopt signal`);
109
+ }
110
+ }
111
+ }
112
+ return diagnostics;
113
+ },
114
+ };
@@ -0,0 +1,45 @@
1
+ import { gateApprovalProblems } from "../../../op/gate-approval.js";
2
+ import { gateName } from "../../../op/gate-name.js";
3
+ import { isOpEntity } from "./support.js";
4
+ function* gateSteps(phases) {
5
+ for (const phase of phases ?? []) {
6
+ for (const step of phase.steps ?? []) {
7
+ if (step.kind === "gate")
8
+ yield step;
9
+ else if (step.kind === "effect") {
10
+ for (const nested of step.steps ?? [])
11
+ if (nested.kind === "gate")
12
+ yield nested;
13
+ }
14
+ }
15
+ }
16
+ }
17
+ export const ops015 = {
18
+ id: "OPS015",
19
+ description: "A gate's approval block is well formed: quorum count at least 1, roles named, mode log-only or enforce, enforce has a policy, and policy resolves to a gate policy set whose version is the digest of its text",
20
+ check(ctx) {
21
+ const diagnostics = [];
22
+ for (const [entityKey, entity] of ctx.entities) {
23
+ if (!isOpEntity(entity))
24
+ continue;
25
+ const rec = entity;
26
+ const props = (entity.props ?? {});
27
+ if (!Array.isArray(props.phases))
28
+ continue;
29
+ for (const step of [...gateSteps(props.phases), ...gateSteps(props.onFailure)]) {
30
+ if (step.approval === undefined)
31
+ continue;
32
+ for (const problem of gateApprovalProblems(step.approval)) {
33
+ diagnostics.push({
34
+ checkId: "OPS015",
35
+ severity: "error",
36
+ message: `Op "${props.name}", gate "${gateName(step)}": ${problem}`,
37
+ entity: entityKey,
38
+ lexicon: typeof rec.lexicon === "string" ? rec.lexicon : undefined,
39
+ });
40
+ }
41
+ }
42
+ }
43
+ return diagnostics;
44
+ },
45
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Shared support for the OPS* Op-model post-synth checks (#2122, epic #2114
3
+ * sub-issue 6) — OPS012 (`./ops012-activity-contract.ts`), OPS013
4
+ * (`./ops013-step-output-ref.ts`) and OPS014
5
+ * (`./ops014-converge-rule-refusals.ts`), ported here from a hosting
6
+ * lexicon's own TMP012/TMP013/TMP014.
7
+ *
8
+ * Op-entity recognition is core's own `isOpEntity` (`../../../op/resource.ts`,
9
+ * #2118) — re-exported here so every OPS* check imports it from one place.
10
+ */
11
+ export { isOpEntity } from "../../../op/resource.js";
@@ -0,0 +1,100 @@
1
+ /**
2
+ * SYS010: a `decide` backend sends its key over plain HTTP (#2740, core's
3
+ * since #2828).
4
+ *
5
+ * A backend in `decide.backends` in chant.config, or in a `decide` step's own
6
+ * `backends`, may have a key and an `http://` URL. The bearer key then crosses
7
+ * the network in clear text. A loopback address (127.0.0.1, ::1, localhost)
8
+ * is exempt, since that is where a local server such as `von serve` or the
9
+ * stub runs, and where a broker that is itself the endpoint listens.
10
+ *
11
+ * The steps are read off the Op entities, which covers a step written with
12
+ * the `decide` builder and one written with `activity("decide", ...)`. The
13
+ * configured backends are not entities: `chant build` and `chant lint` read
14
+ * them from the project's config and hand them to {@link sys010Check}. The id
15
+ * keeps the SYS prefix it had in the systemone lexicon.
16
+ */
17
+ import { isOpEntity } from "./support.js";
18
+ const LOOPBACK = new Set(["127.0.0.1", "localhost", "[::1]", "::1"]);
19
+ function* decideSteps(phases) {
20
+ for (const phase of phases ?? []) {
21
+ for (const step of phase.steps ?? []) {
22
+ if (step.kind === "activity" && step.fn === "decide")
23
+ yield step;
24
+ else if (step.kind === "effect") {
25
+ for (const nested of step.steps ?? [])
26
+ if (nested.kind === "activity" && nested.fn === "decide")
27
+ yield nested;
28
+ }
29
+ }
30
+ }
31
+ }
32
+ /** The host of an http:// URL that is not loopback, or undefined. */
33
+ export function plainRemoteHost(url) {
34
+ if (typeof url !== "string")
35
+ return undefined;
36
+ let parsed;
37
+ try {
38
+ parsed = new URL(url);
39
+ }
40
+ catch {
41
+ return undefined;
42
+ }
43
+ if (parsed.protocol !== "http:")
44
+ return undefined;
45
+ return LOOPBACK.has(parsed.hostname) ? undefined : parsed.hostname;
46
+ }
47
+ const DESCRIPTION = "A decide backend sends its key over plain HTTP to a host that is not loopback";
48
+ /**
49
+ * SYS010 over the Op entities and, when given, the backends configured in
50
+ * `decide.backends`. A configured backend's diagnostic names it as the entity
51
+ * `decide.backends.<name>`.
52
+ */
53
+ export function sys010Check(configured) {
54
+ return {
55
+ id: "SYS010",
56
+ description: DESCRIPTION,
57
+ check(ctx) {
58
+ const diagnostics = [];
59
+ for (const [name, b] of Object.entries(configured ?? {})) {
60
+ const host = b?.key !== undefined ? plainRemoteHost(b.url) : undefined;
61
+ if (!host)
62
+ continue;
63
+ diagnostics.push({
64
+ checkId: "SYS010",
65
+ severity: "error",
66
+ message: `decide.backends.${name} sends its key over http:// to ${host}; use https://, or a loopback broker`,
67
+ entity: `decide.backends.${name}`,
68
+ });
69
+ }
70
+ for (const [entityKey, entity] of ctx.entities) {
71
+ if (!isOpEntity(entity))
72
+ continue;
73
+ const rec = entity;
74
+ const props = (entity.props ?? {});
75
+ for (const step of [...decideSteps(props.phases), ...decideSteps(props.onFailure)]) {
76
+ const backends = step.args?.backends;
77
+ if (backends === null || typeof backends !== "object")
78
+ continue;
79
+ for (const [name, b] of Object.entries(backends)) {
80
+ if (b?.key === undefined)
81
+ continue;
82
+ const host = plainRemoteHost(b.url);
83
+ if (!host)
84
+ continue;
85
+ diagnostics.push({
86
+ checkId: "SYS010",
87
+ severity: "error",
88
+ message: `Op "${props.name}", decide ${JSON.stringify(step.args.point)}: backend ${name} sends its key over http:// to ${host}; use https://, or a loopback broker`,
89
+ entity: entityKey,
90
+ lexicon: typeof rec.lexicon === "string" ? rec.lexicon : undefined,
91
+ });
92
+ }
93
+ }
94
+ }
95
+ return diagnostics;
96
+ },
97
+ };
98
+ }
99
+ /** SYS010 over the Op entities alone, with no configured backends. */
100
+ export const sys010 = sys010Check();
@@ -0,0 +1,56 @@
1
+ import * as ts from "typescript";
2
+ /**
3
+ * Property-kind declarables for the COR001, COR004 and COR009 heuristics
4
+ * (chant #2957).
5
+ *
6
+ * Those three rules were written for cloud resources, where every `new X(…)`
7
+ * is something the build emits. A property-kind declarable (`createProperty`)
8
+ * is not: it only exists inside the resource that holds it, like a Grafana
9
+ * panel inside its dashboard. The active lexicons name their property-kind
10
+ * classes through `LexiconPlugin.propertyClassNames()`, and `runLint` puts
11
+ * them on `LintContext.propertyClasses`. Without that set (a unit test, or a
12
+ * lexicon that declares none) nothing is property-kind and the rules behave
13
+ * as they always have.
14
+ */
15
+ /**
16
+ * Map each locally bound import name to the name it was exported under, so
17
+ * `import { TimeSeriesPanel as Series }` still resolves `new Series(…)`.
18
+ */
19
+ function importAliases(sourceFile) {
20
+ const aliases = new Map();
21
+ for (const stmt of sourceFile.statements) {
22
+ if (!ts.isImportDeclaration(stmt))
23
+ continue;
24
+ const bindings = stmt.importClause?.namedBindings;
25
+ if (!bindings || !ts.isNamedImports(bindings))
26
+ continue;
27
+ for (const el of bindings.elements) {
28
+ if (el.propertyName)
29
+ aliases.set(el.name.text, el.propertyName.text);
30
+ }
31
+ }
32
+ return aliases;
33
+ }
34
+ const aliasCache = new WeakMap();
35
+ /** The exported class name a `new` expression constructs, if it has one. */
36
+ export function constructedClassName(node, sourceFile) {
37
+ const expr = node.expression;
38
+ if (ts.isPropertyAccessExpression(expr))
39
+ return expr.name.text;
40
+ if (!ts.isIdentifier(expr))
41
+ return undefined;
42
+ let aliases = aliasCache.get(sourceFile);
43
+ if (!aliases) {
44
+ aliases = importAliases(sourceFile);
45
+ aliasCache.set(sourceFile, aliases);
46
+ }
47
+ return aliases.get(expr.text) ?? expr.text;
48
+ }
49
+ /** True when `node` constructs a class an active lexicon declares property-kind. */
50
+ export function isPropertyKindNew(node, context) {
51
+ const classes = context.propertyClasses;
52
+ if (!classes || classes.size === 0)
53
+ return false;
54
+ const name = constructedClassName(node, context.sourceFile);
55
+ return name !== undefined && classes.has(name);
56
+ }