@intentius/chant 0.124.13 → 0.124.15

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 (991) 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.d.ts +6 -0
  35. package/dist/build.d.ts.map +1 -1
  36. package/dist/build.js +669 -0
  37. package/dist/builder.js +44 -0
  38. package/dist/cdk/advise.js +30 -0
  39. package/dist/cdk/assembly.js +122 -0
  40. package/dist/cdk/graph.js +444 -0
  41. package/dist/cdk/tier-map.js +64 -0
  42. package/dist/cdk/types.js +24 -0
  43. package/dist/change-set.d.ts +24 -2
  44. package/dist/change-set.d.ts.map +1 -1
  45. package/dist/change-set.js +361 -0
  46. package/dist/child-project.js +21 -0
  47. package/dist/ci-jobs.d.ts +227 -0
  48. package/dist/ci-jobs.d.ts.map +1 -0
  49. package/dist/ci-jobs.js +448 -0
  50. package/dist/claimed-fields.js +135 -0
  51. package/dist/cli/build-options.js +70 -0
  52. package/dist/cli/build-params-cli.js +139 -0
  53. package/dist/cli/command-group.js +123 -0
  54. package/dist/cli/commands/audit-agents.js +326 -0
  55. package/dist/cli/commands/audit.js +571 -0
  56. package/dist/cli/commands/build.js +920 -0
  57. package/dist/cli/commands/carve-apply.js +153 -0
  58. package/dist/cli/commands/carve-bridge.js +201 -0
  59. package/dist/cli/commands/carve-emit.js +332 -0
  60. package/dist/cli/commands/carve-status.js +119 -0
  61. package/dist/cli/commands/carve.js +204 -0
  62. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  63. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  64. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  65. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  66. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  67. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  68. package/dist/cli/commands/check-lexicon.js +766 -0
  69. package/dist/cli/commands/describe.js +85 -0
  70. package/dist/cli/commands/diff.js +175 -0
  71. package/dist/cli/commands/doctor.js +350 -0
  72. package/dist/cli/commands/import-agents.js +155 -0
  73. package/dist/cli/commands/import.js +670 -0
  74. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  75. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  76. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  77. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  78. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  79. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  80. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  81. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  82. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  83. package/dist/cli/commands/init-lexicon.js +172 -0
  84. package/dist/cli/commands/init.js +381 -0
  85. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  86. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  87. package/dist/cli/commands/licenses.js +125 -0
  88. package/dist/cli/commands/lint.d.ts.map +1 -1
  89. package/dist/cli/commands/lint.js +948 -0
  90. package/dist/cli/commands/list.js +63 -0
  91. package/dist/cli/commands/migrate.d.ts.map +1 -1
  92. package/dist/cli/commands/migrate.js +423 -0
  93. package/dist/cli/commands/onboard.js +403 -0
  94. package/dist/cli/commands/pinned-upgrade.js +191 -0
  95. package/dist/cli/commands/update.js +194 -0
  96. package/dist/cli/commands/vendor.js +217 -0
  97. package/dist/cli/conflict-check.js +104 -0
  98. package/dist/cli/debug.js +8 -0
  99. package/dist/cli/format.js +104 -0
  100. package/dist/cli/handlers/build.js +267 -0
  101. package/dist/cli/handlers/carve-apply.js +30 -0
  102. package/dist/cli/handlers/carve-bridge.js +28 -0
  103. package/dist/cli/handlers/carve-emit.js +50 -0
  104. package/dist/cli/handlers/carve-status.js +26 -0
  105. package/dist/cli/handlers/carve.js +40 -0
  106. package/dist/cli/handlers/change-set.js +46 -0
  107. package/dist/cli/handlers/components.js +730 -0
  108. package/dist/cli/handlers/dev.js +113 -0
  109. package/dist/cli/handlers/emulator.js +233 -0
  110. package/dist/cli/handlers/explain.js +54 -0
  111. package/dist/cli/handlers/fan-out.js +422 -0
  112. package/dist/cli/handlers/gate-resume.js +275 -0
  113. package/dist/cli/handlers/generate.js +84 -0
  114. package/dist/cli/handlers/graph.js +969 -0
  115. package/dist/cli/handlers/init.js +102 -0
  116. package/dist/cli/handlers/lifecycle.js +1727 -0
  117. package/dist/cli/handlers/lint.js +62 -0
  118. package/dist/cli/handlers/migrate.js +48 -0
  119. package/dist/cli/handlers/misc.js +391 -0
  120. package/dist/cli/handlers/operator.js +1162 -0
  121. package/dist/cli/handlers/override-approve.js +102 -0
  122. package/dist/cli/handlers/pr.js +503 -0
  123. package/dist/cli/handlers/promote.js +342 -0
  124. package/dist/cli/handlers/run-generate.js +206 -0
  125. package/dist/cli/handlers/run-wave.js +66 -0
  126. package/dist/cli/handlers/run.js +1191 -0
  127. package/dist/cli/handlers/scenario.js +325 -0
  128. package/dist/cli/handlers/search.js +924 -0
  129. package/dist/cli/handlers/serve.js +32 -0
  130. package/dist/cli/handlers/vendor.js +154 -0
  131. package/dist/cli/index.js +3 -0
  132. package/dist/cli/is-entry-point.js +23 -0
  133. package/dist/cli/lsp/capabilities.js +28 -0
  134. package/dist/cli/lsp/diagnostics.js +34 -0
  135. package/dist/cli/lsp/server.js +329 -0
  136. package/dist/cli/main.d.ts.map +1 -1
  137. package/dist/cli/main.js +2540 -0
  138. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  139. package/dist/cli/mcp/op-tools.js +306 -0
  140. package/dist/cli/mcp/resource-handlers.js +258 -0
  141. package/dist/cli/mcp/resources/context.js +85 -0
  142. package/dist/cli/mcp/server.js +353 -0
  143. package/dist/cli/mcp/tools/build.js +111 -0
  144. package/dist/cli/mcp/tools/composites.js +95 -0
  145. package/dist/cli/mcp/tools/explain.js +166 -0
  146. package/dist/cli/mcp/tools/import.js +49 -0
  147. package/dist/cli/mcp/tools/lint.js +41 -0
  148. package/dist/cli/mcp/tools/scaffold.js +111 -0
  149. package/dist/cli/mcp/tools/search.js +112 -0
  150. package/dist/cli/mcp/types.js +1 -0
  151. package/dist/cli/mcp/workspace-plugins.js +91 -0
  152. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  153. package/dist/cli/mcp/workspace-tools.js +564 -0
  154. package/dist/cli/mcp-config.js +70 -0
  155. package/dist/cli/plugins.js +313 -0
  156. package/dist/cli/registry.js +23 -0
  157. package/dist/cli/reporters/stylish.js +329 -0
  158. package/dist/cli/version.js +15 -0
  159. package/dist/cli/watch.js +79 -0
  160. package/dist/codegen/bound-property-types.js +82 -0
  161. package/dist/codegen/coverage.js +119 -0
  162. package/dist/codegen/docs-file-markers.js +60 -0
  163. package/dist/codegen/docs-pages.js +115 -0
  164. package/dist/codegen/docs-rule-scanning.js +164 -0
  165. package/dist/codegen/docs-rules.js +76 -0
  166. package/dist/codegen/docs-sections.js +117 -0
  167. package/dist/codegen/docs-sidebar.js +65 -0
  168. package/dist/codegen/docs-types.js +4 -0
  169. package/dist/codegen/docs.js +356 -0
  170. package/dist/codegen/fetch.js +340 -0
  171. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  172. package/dist/codegen/generate-registry.js +71 -0
  173. package/dist/codegen/generate-runtime-index.js +56 -0
  174. package/dist/codegen/generate-typescript.js +119 -0
  175. package/dist/codegen/generate.js +115 -0
  176. package/dist/codegen/json-patch.js +141 -0
  177. package/dist/codegen/json-schema-to-ts.js +344 -0
  178. package/dist/codegen/json-schema.js +246 -0
  179. package/dist/codegen/lexicon-regen.js +412 -0
  180. package/dist/codegen/naming.js +217 -0
  181. package/dist/codegen/okf-lexicon.js +245 -0
  182. package/dist/codegen/package.js +150 -0
  183. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  184. package/dist/codegen/pinned-upgrade.js +494 -0
  185. package/dist/codegen/registry.js +60 -0
  186. package/dist/codegen/rehype-base-url.mjs +68 -0
  187. package/dist/codegen/rolling-upgrade.js +217 -0
  188. package/dist/codegen/surface-snapshot.js +537 -0
  189. package/dist/codegen/testdata/postgres-tags.json +242 -0
  190. package/dist/codegen/topo-sort.js +36 -0
  191. package/dist/codegen/typecheck.js +115 -0
  192. package/dist/codegen/validate.js +200 -0
  193. package/dist/codegen/version-bump.js +35 -0
  194. package/dist/components/auto-release.js +143 -0
  195. package/dist/components/builders.js +47 -0
  196. package/dist/components/capability-plugin-loader.js +175 -0
  197. package/dist/components/capability-plugin-schema.js +46 -0
  198. package/dist/components/capability-plugin.js +99 -0
  199. package/dist/components/capability.js +60 -0
  200. package/dist/components/changed-files.js +72 -0
  201. package/dist/components/cli-support.js +427 -0
  202. package/dist/components/component.js +120 -0
  203. package/dist/components/component.schema.json +271 -0
  204. package/dist/components/config-defaults.js +130 -0
  205. package/dist/components/deploy-units.js +60 -0
  206. package/dist/components/discover.d.ts.map +1 -1
  207. package/dist/components/discover.js +189 -0
  208. package/dist/components/driver-output.js +86 -0
  209. package/dist/components/driver.js +728 -0
  210. package/dist/components/fan-out-output.js +165 -0
  211. package/dist/components/fan-out-record.js +94 -0
  212. package/dist/components/fan-out-run.js +373 -0
  213. package/dist/components/fan-out-support.js +60 -0
  214. package/dist/components/fan-out.js +273 -0
  215. package/dist/components/gate-plan.js +41 -0
  216. package/dist/components/gated-wave-pipeline.js +46 -0
  217. package/dist/components/index.js +24 -0
  218. package/dist/components/layers.js +28 -0
  219. package/dist/components/manifest-persistence.js +108 -0
  220. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  221. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  222. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  223. package/dist/components/pilots/lambda.pilot.js +52 -0
  224. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  225. package/dist/components/pilots/project.js +12 -0
  226. package/dist/components/pr-pipeline.d.ts.map +1 -1
  227. package/dist/components/pr-pipeline.js +135 -0
  228. package/dist/components/pr-run.js +363 -0
  229. package/dist/components/presets/ecs-fargate.js +72 -0
  230. package/dist/components/presets/index.js +28 -0
  231. package/dist/components/presets/lambda.js +34 -0
  232. package/dist/components/presets/single-host-compose.js +41 -0
  233. package/dist/components/promote.js +549 -0
  234. package/dist/components/registry.js +34 -0
  235. package/dist/components/run-progress.js +33 -0
  236. package/dist/components/sandbox/driver.d.ts.map +1 -1
  237. package/dist/components/sandbox/driver.js +93 -0
  238. package/dist/components/sandbox/run.js +115 -0
  239. package/dist/components/starter-plugin.js +104 -0
  240. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  241. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  242. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  243. package/dist/components/verbs/bom-writer.js +287 -0
  244. package/dist/components/verbs/build-archive.js +188 -0
  245. package/dist/components/verbs/build.js +142 -0
  246. package/dist/components/verbs/cloud-executor.js +110 -0
  247. package/dist/components/verbs/component-bom.js +125 -0
  248. package/dist/components/verbs/ensure-secret.js +50 -0
  249. package/dist/components/verbs/index.js +61 -0
  250. package/dist/components/verbs/license-policy.js +75 -0
  251. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  252. package/dist/components/verbs/process-runner.js +78 -0
  253. package/dist/components/verbs/r2-sync.js +93 -0
  254. package/dist/components/verbs/reproducibility.js +62 -0
  255. package/dist/components/verbs/run-agent.js +577 -0
  256. package/dist/components/verbs/sbom-generator.js +119 -0
  257. package/dist/components/verbs/sbom.js +97 -0
  258. package/dist/components/verbs/shell.js +32 -0
  259. package/dist/components/verbs/sign.js +221 -0
  260. package/dist/components/verbs/stub.js +28 -0
  261. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  262. package/dist/components/verbs/verify.js +112 -0
  263. package/dist/components/verbs/vex.js +131 -0
  264. package/dist/components/verbs/vuln-gate.js +152 -0
  265. package/dist/components/verbs/vuln-scan.js +288 -0
  266. package/dist/components/verbs/wait-verify.js +106 -0
  267. package/dist/components/verbs/wrangler.js +179 -0
  268. package/dist/components/wave-plan.js +102 -0
  269. package/dist/composite.d.ts +10 -2
  270. package/dist/composite.d.ts.map +1 -1
  271. package/dist/composite.js +313 -0
  272. package/dist/config-import.d.ts.map +1 -1
  273. package/dist/config-import.js +22 -0
  274. package/dist/config-sandbox.js +122 -0
  275. package/dist/config-static.js +206 -0
  276. package/dist/config.js +605 -0
  277. package/dist/content-digest.js +23 -0
  278. package/dist/declarable.js +114 -0
  279. package/dist/deep-observation.js +437 -0
  280. package/dist/detectLexicon.js +54 -0
  281. package/dist/discovery/cache.js +70 -0
  282. package/dist/discovery/collect.d.ts +2 -1
  283. package/dist/discovery/collect.d.ts.map +1 -1
  284. package/dist/discovery/collect.js +223 -0
  285. package/dist/discovery/cycles.js +95 -0
  286. package/dist/discovery/entity-wire-codec.js +391 -0
  287. package/dist/discovery/entity-wire.js +42 -0
  288. package/dist/discovery/files.js +121 -0
  289. package/dist/discovery/fold-import.d.ts.map +1 -1
  290. package/dist/discovery/fold-import.js +4073 -0
  291. package/dist/discovery/fold-rank.js +292 -0
  292. package/dist/discovery/graph.js +115 -0
  293. package/dist/discovery/host-composite.d.ts +35 -0
  294. package/dist/discovery/host-composite.d.ts.map +1 -0
  295. package/dist/discovery/host-composite.js +93 -0
  296. package/dist/discovery/import.d.ts.map +1 -1
  297. package/dist/discovery/import.js +65 -0
  298. package/dist/discovery/index.d.ts +9 -0
  299. package/dist/discovery/index.d.ts.map +1 -1
  300. package/dist/discovery/index.js +333 -0
  301. package/dist/discovery/param-deps.js +487 -0
  302. package/dist/discovery/resolve.js +39 -0
  303. package/dist/discovery/sandbox/bundle.js +214 -0
  304. package/dist/discovery/sandbox/child-errors.js +26 -0
  305. package/dist/discovery/sandbox/config-run.js +100 -0
  306. package/dist/discovery/sandbox/config-wire.js +183 -0
  307. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  308. package/dist/discovery/sandbox/driver.js +333 -0
  309. package/dist/discovery/sandbox/fork.js +229 -0
  310. package/dist/discovery/sandbox/policy-run.js +142 -0
  311. package/dist/discovery/sandbox/policy-wire.js +152 -0
  312. package/dist/discovery/sandbox/run.js +77 -0
  313. package/dist/discovery/specifier-resolve.js +320 -0
  314. package/dist/discovery/walk.js +284 -0
  315. package/dist/effect-receipt.js +340 -0
  316. package/dist/env.js +55 -0
  317. package/dist/errors.js +62 -0
  318. package/dist/fold/fold.js +1434 -0
  319. package/dist/fold/foldable-helpers.js +229 -0
  320. package/dist/fold/subset.js +696 -0
  321. package/dist/fold-provenance.js +414 -0
  322. package/dist/gate-decision.d.ts +20 -9
  323. package/dist/gate-decision.d.ts.map +1 -1
  324. package/dist/gate-decision.js +313 -0
  325. package/dist/gate-resume-run.js +154 -0
  326. package/dist/gated-waves.js +165 -0
  327. package/dist/governance.js +43 -0
  328. package/dist/graph-declared.js +45 -0
  329. package/dist/graph-detail.js +207 -0
  330. package/dist/graph-dot.js +54 -0
  331. package/dist/graph-effective.js +107 -0
  332. package/dist/graph-ir.js +623 -0
  333. package/dist/graph-layout.js +184 -0
  334. package/dist/graph-lens.js +105 -0
  335. package/dist/graph-mermaid.js +83 -0
  336. package/dist/graph-ops.js +39 -0
  337. package/dist/graph-refs.js +156 -0
  338. package/dist/held-elsewhere.js +87 -0
  339. package/dist/identity.js +251 -0
  340. package/dist/import/base-parser.js +34 -0
  341. package/dist/import/embedded.js +255 -0
  342. package/dist/import/generator.js +1 -0
  343. package/dist/import/ir-utils.js +85 -0
  344. package/dist/import/parser-options.js +45 -0
  345. package/dist/import/parser.js +1 -0
  346. package/dist/index.js +118 -0
  347. package/dist/intrinsic-interpolation.js +73 -0
  348. package/dist/intrinsic.js +31 -0
  349. package/dist/join-key.js +35 -0
  350. package/dist/kubectl-context.js +150 -0
  351. package/dist/lexicon-config.js +58 -0
  352. package/dist/lexicon-integrity.js +47 -0
  353. package/dist/lexicon-manifest.js +70 -0
  354. package/dist/lexicon-module.d.ts.map +1 -1
  355. package/dist/lexicon-module.js +241 -0
  356. package/dist/lexicon-output.js +218 -0
  357. package/dist/lexicon-plugin-helpers.js +104 -0
  358. package/dist/lexicon-schema.js +136 -0
  359. package/dist/lexicon.js +130 -0
  360. package/dist/lifecycle/affected.js +224 -0
  361. package/dist/lifecycle/assert-live.js +110 -0
  362. package/dist/lifecycle/build-ledger-store.js +160 -0
  363. package/dist/lifecycle/build-ledger.js +155 -0
  364. package/dist/lifecycle/change-set.js +356 -0
  365. package/dist/lifecycle/converge-ledger.js +161 -0
  366. package/dist/lifecycle/deep-diff.js +233 -0
  367. package/dist/lifecycle/deep-observe.js +147 -0
  368. package/dist/lifecycle/digest.js +143 -0
  369. package/dist/lifecycle/disruption.js +135 -0
  370. package/dist/lifecycle/gate-applied.js +113 -0
  371. package/dist/lifecycle/gate-audit.d.ts +69 -2
  372. package/dist/lifecycle/gate-audit.d.ts.map +1 -1
  373. package/dist/lifecycle/gate-audit.js +415 -0
  374. package/dist/lifecycle/gate-ledger-select.js +89 -0
  375. package/dist/lifecycle/gate-ledger.d.ts +24 -0
  376. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  377. package/dist/lifecycle/gate-ledger.js +201 -0
  378. package/dist/lifecycle/gate-origin.js +117 -0
  379. package/dist/lifecycle/gate-pending.js +58 -0
  380. package/dist/lifecycle/git.js +1182 -0
  381. package/dist/lifecycle/identity.js +58 -0
  382. package/dist/lifecycle/index.js +26 -0
  383. package/dist/lifecycle/lease.js +283 -0
  384. package/dist/lifecycle/ledger-port.js +1 -0
  385. package/dist/lifecycle/legacy-digest.js +91 -0
  386. package/dist/lifecycle/live-diff.js +274 -0
  387. package/dist/lifecycle/local-note.js +15 -0
  388. package/dist/lifecycle/member-ledger.js +122 -0
  389. package/dist/lifecycle/observation-baseline.js +155 -0
  390. package/dist/lifecycle/observe.js +375 -0
  391. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  392. package/dist/lifecycle/override-ledger.js +54 -0
  393. package/dist/lifecycle/plan-digest.js +110 -0
  394. package/dist/lifecycle/plan-ledger.js +129 -0
  395. package/dist/lifecycle/receipt-plan.js +192 -0
  396. package/dist/lifecycle/release-ledger.js +155 -0
  397. package/dist/lifecycle/release-read.js +64 -0
  398. package/dist/lifecycle/replay.js +193 -0
  399. package/dist/lifecycle/rollback.js +102 -0
  400. package/dist/lifecycle/run-ledger.js +183 -0
  401. package/dist/lifecycle/scenario-eval.js +204 -0
  402. package/dist/lifecycle/scenario.js +214 -0
  403. package/dist/lifecycle/snapshot.js +239 -0
  404. package/dist/lifecycle/status.js +447 -0
  405. package/dist/lifecycle/symptoms.js +117 -0
  406. package/dist/lifecycle/teardown.js +255 -0
  407. package/dist/lifecycle/types.js +1 -0
  408. package/dist/lifecycle/unobserved-gate.js +33 -0
  409. package/dist/lifecycle/wave-plans.js +68 -0
  410. package/dist/lifecycle/work-item-id.js +36 -0
  411. package/dist/lifecycle/work-lease.js +393 -0
  412. package/dist/lint/component-checks.js +87 -0
  413. package/dist/lint/config.js +483 -0
  414. package/dist/lint/declarative.js +122 -0
  415. package/dist/lint/discover.d.ts.map +1 -1
  416. package/dist/lint/discover.js +138 -0
  417. package/dist/lint/engine.js +246 -0
  418. package/dist/lint/knowledge-checks.js +64 -0
  419. package/dist/lint/named-checks.js +22 -0
  420. package/dist/lint/output-checks.js +87 -0
  421. package/dist/lint/output-docs.js +163 -0
  422. package/dist/lint/parser.js +33 -0
  423. package/dist/lint/pipeline-change-gate.js +70 -0
  424. package/dist/lint/policy-import.d.ts +1 -1
  425. package/dist/lint/policy-import.d.ts.map +1 -1
  426. package/dist/lint/policy-import.js +62 -0
  427. package/dist/lint/policy-sandbox.js +86 -0
  428. package/dist/lint/policy.js +122 -0
  429. package/dist/lint/post-synth.js +87 -0
  430. package/dist/lint/presets/relaxed.json +26 -0
  431. package/dist/lint/presets/strict.json +24 -24
  432. package/dist/lint/receipt-checks.js +83 -0
  433. package/dist/lint/rule-loader.d.ts.map +1 -1
  434. package/dist/lint/rule-loader.js +89 -0
  435. package/dist/lint/rule-registry.js +86 -0
  436. package/dist/lint/rule.js +1 -0
  437. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  438. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  439. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  440. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  441. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  442. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  443. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  444. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  445. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  446. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  447. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  448. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  449. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  450. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  451. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  452. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  453. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  454. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  455. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  456. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  457. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  458. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  459. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  460. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  461. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  462. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  463. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  464. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  465. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  466. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  467. package/dist/lint/rules/comp/index.js +33 -0
  468. package/dist/lint/rules/comp/support.js +129 -0
  469. package/dist/lint/rules/composite-scope.js +51 -0
  470. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  471. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  472. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  473. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  474. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  475. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  476. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  477. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  478. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  479. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  480. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  481. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  482. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  483. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  484. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  485. package/dist/lint/rules/export-required.js +115 -0
  486. package/dist/lint/rules/file-declarable-limit.js +88 -0
  487. package/dist/lint/rules/flat-declarations.js +62 -0
  488. package/dist/lint/rules/index.js +90 -0
  489. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  490. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  491. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  492. package/dist/lint/rules/no-string-ref.js +59 -0
  493. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  494. package/dist/lint/rules/no-unused-declarable.js +142 -0
  495. package/dist/lint/rules/op/index.js +28 -0
  496. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  497. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  498. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  499. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  500. package/dist/lint/rules/op/support.js +11 -0
  501. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  502. package/dist/lint/rules/property-kind.js +56 -0
  503. package/dist/lint/rules/single-concern-file.js +71 -0
  504. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  505. package/dist/lint/selectors.js +168 -0
  506. package/dist/lint/suppressions.js +129 -0
  507. package/dist/lint/typescript.js +17 -0
  508. package/dist/live-endpoint.js +113 -0
  509. package/dist/live-read-session.js +76 -0
  510. package/dist/lsp/lexicon-providers.js +163 -0
  511. package/dist/lsp/types.js +5 -0
  512. package/dist/managed-fields.js +293 -0
  513. package/dist/mcp/types.js +4 -0
  514. package/dist/notify-verify.js +0 -1
  515. package/dist/notify.js +0 -1
  516. package/dist/notify.schema.json +72 -0
  517. package/dist/observation.js +266 -0
  518. package/dist/okf-read.js +134 -0
  519. package/dist/okf.js +275 -0
  520. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  521. package/dist/op/activities/activity-contracts.d.ts +1 -1
  522. package/dist/op/activities/activity-contracts.js +313 -0
  523. package/dist/op/activities/apply.js +582 -0
  524. package/dist/op/activities/build.js +18 -0
  525. package/dist/op/activities/change-coverage.js +40 -0
  526. package/dist/op/activities/change-set.d.ts +8 -3
  527. package/dist/op/activities/change-set.d.ts.map +1 -1
  528. package/dist/op/activities/change-set.js +67 -0
  529. package/dist/op/activities/converge.js +492 -0
  530. package/dist/op/activities/decide.js +211 -0
  531. package/dist/op/activities/env-teardown.js +110 -0
  532. package/dist/op/activities/factory.js +591 -0
  533. package/dist/op/activities/forge-pull-request.js +82 -0
  534. package/dist/op/activities/gh-host.js +78 -0
  535. package/dist/op/activities/guard-validate.js +165 -0
  536. package/dist/op/activities/http-check.js +40 -0
  537. package/dist/op/activities/index.js +59 -0
  538. package/dist/op/activities/lexicon-upgrade.js +629 -0
  539. package/dist/op/activities/lifecycle.js +109 -0
  540. package/dist/op/activities/pipeline-audit.js +147 -0
  541. package/dist/op/activities/policy.js +26 -0
  542. package/dist/op/activities/predict-behaviour.js +341 -0
  543. package/dist/op/activities/propose-upgrade.js +165 -0
  544. package/dist/op/activities/reconcile.d.ts +28 -16
  545. package/dist/op/activities/reconcile.d.ts.map +1 -1
  546. package/dist/op/activities/reconcile.js +1011 -0
  547. package/dist/op/activities/shell.js +118 -0
  548. package/dist/op/activities/source-release.js +97 -0
  549. package/dist/op/activities/source-rollback.js +165 -0
  550. package/dist/op/activities/teardown.js +17 -0
  551. package/dist/op/activities/util.js +6 -0
  552. package/dist/op/activities/wait.js +51 -0
  553. package/dist/op/activities/work-evidence.js +35 -0
  554. package/dist/op/activities/workflow-audit.js +133 -0
  555. package/dist/op/activity-contract-registry.js +106 -0
  556. package/dist/op/activity-contract.js +232 -0
  557. package/dist/op/activity-failure.js +31 -0
  558. package/dist/op/activity-profiles.js +129 -0
  559. package/dist/op/activity-registry.js +105 -0
  560. package/dist/op/activity-runtime.js +28 -0
  561. package/dist/op/builders.d.ts +1 -1
  562. package/dist/op/builders.d.ts.map +1 -1
  563. package/dist/op/builders.js +801 -0
  564. package/dist/op/change-signal.js +118 -0
  565. package/dist/op/composites/apply-op.js +151 -0
  566. package/dist/op/composites/behaviour-op.js +65 -0
  567. package/dist/op/composites/converge-op.js +141 -0
  568. package/dist/op/composites/index.js +19 -0
  569. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  570. package/dist/op/composites/pipeline-audit-op.js +50 -0
  571. package/dist/op/composites/reconcile-op.js +84 -0
  572. package/dist/op/composites/watch-op.js +69 -0
  573. package/dist/op/composites/workflow-audit-op.js +57 -0
  574. package/dist/op/converge-rule.js +205 -0
  575. package/dist/op/cron.js +146 -0
  576. package/dist/op/decide-backend.js +181 -0
  577. package/dist/op/decide-config.js +68 -0
  578. package/dist/op/decide-read-inputs.js +141 -0
  579. package/dist/op/discover.d.ts.map +1 -1
  580. package/dist/op/discover.js +213 -0
  581. package/dist/op/duration.js +21 -0
  582. package/dist/op/emulator-freshness.js +80 -0
  583. package/dist/op/emulator-lifecycle.js +269 -0
  584. package/dist/op/factory.js +83 -0
  585. package/dist/op/gate-approval.js +172 -0
  586. package/dist/op/gate-name.js +86 -0
  587. package/dist/op/gate-plan-context.js +167 -0
  588. package/dist/op/gate-point-run.js +67 -0
  589. package/dist/op/gate-point.js +111 -0
  590. package/dist/op/gate-resume-plan.js +155 -0
  591. package/dist/op/gate-resume.js +31 -0
  592. package/dist/op/gate-review.js +290 -0
  593. package/dist/op/gate-run-locator.js +85 -0
  594. package/dist/op/gate-summary.js +100 -0
  595. package/dist/op/gate-wait.js +56 -0
  596. package/dist/op/gate.js +449 -0
  597. package/dist/op/generate-pipeline.js +124 -0
  598. package/dist/op/index.js +51 -0
  599. package/dist/op/lifecycle-receipt-store.js +45 -0
  600. package/dist/op/local-executor.js +1164 -0
  601. package/dist/op/local-output.js +140 -0
  602. package/dist/op/op-ir.js +317 -0
  603. package/dist/op/op-verb-class.js +131 -0
  604. package/dist/op/op-waves-notify.js +136 -0
  605. package/dist/op/op-waves-run.d.ts +1 -1
  606. package/dist/op/op-waves-run.d.ts.map +1 -1
  607. package/dist/op/op-waves-run.js +1657 -0
  608. package/dist/op/op-waves.js +409 -0
  609. package/dist/op/operator.js +743 -0
  610. package/dist/op/receipt-store.js +94 -0
  611. package/dist/op/resource.js +23 -0
  612. package/dist/op/run-context.js +28 -0
  613. package/dist/op/run-live.js +256 -0
  614. package/dist/op/runtime.js +21 -0
  615. package/dist/op/runtimes/local.js +195 -0
  616. package/dist/op/source-archive.js +131 -0
  617. package/dist/op/step-output-ref.js +397 -0
  618. package/dist/op/steward-beside.js +169 -0
  619. package/dist/op/steward-points.js +138 -0
  620. package/dist/op/steward-turn.js +59 -0
  621. package/dist/op/steward.js +317 -0
  622. package/dist/op/types.js +25 -0
  623. package/dist/op/work-lease-decl.js +81 -0
  624. package/dist/op/work-lease-run.js +393 -0
  625. package/dist/override-gate.js +284 -0
  626. package/dist/owner-chain.js +74 -0
  627. package/dist/ownership.js +92 -0
  628. package/dist/params.js +61 -0
  629. package/dist/plan-summary.js +711 -0
  630. package/dist/point-decision.js +211 -0
  631. package/dist/pr-forge.js +810 -0
  632. package/dist/pr-loop.js +203 -0
  633. package/dist/project-codegen.js +191 -0
  634. package/dist/project-root.js +74 -0
  635. package/dist/project-validation.js +50 -0
  636. package/dist/provenance.js +157 -0
  637. package/dist/pseudo-parameter.js +40 -0
  638. package/dist/reconcile.js +450 -0
  639. package/dist/resource-attributes.js +33 -0
  640. package/dist/runtime-adapter.js +77 -0
  641. package/dist/runtime.js +66 -0
  642. package/dist/secret-materialization.js +153 -0
  643. package/dist/secret-provenance.js +250 -0
  644. package/dist/serializer-walker.js +112 -0
  645. package/dist/serializer.js +1 -0
  646. package/dist/sort.js +45 -0
  647. package/dist/stack-output.js +115 -0
  648. package/dist/telemetry-attribution.js +149 -0
  649. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  650. package/dist/terraform/adopt-state.js +40 -0
  651. package/dist/terraform/aws-resources.js +384 -0
  652. package/dist/terraform/bridge.js +204 -0
  653. package/dist/terraform/carve-provider.js +155 -0
  654. package/dist/terraform/carve.js +138 -0
  655. package/dist/terraform/data-source-shape.js +57 -0
  656. package/dist/terraform/emit-source.js +36 -0
  657. package/dist/terraform/excise.js +123 -0
  658. package/dist/terraform/graduate.js +128 -0
  659. package/dist/terraform/graph.js +435 -0
  660. package/dist/terraform/hcl2json.js +60 -0
  661. package/dist/terraform/manifest.js +149 -0
  662. package/dist/terraform/parse.js +81 -0
  663. package/dist/terraform/providers/aws.js +146 -0
  664. package/dist/terraform/providers/gcp.js +294 -0
  665. package/dist/terraform/providers/index.js +17 -0
  666. package/dist/terraform/providers/kubernetes.js +253 -0
  667. package/dist/terraform/score.js +151 -0
  668. package/dist/terraform/state.js +67 -0
  669. package/dist/terraform/tier-map.js +74 -0
  670. package/dist/terraform/types.js +13 -0
  671. package/dist/terraform/unified-diff.js +132 -0
  672. package/dist/testing.js +295 -0
  673. package/dist/toml-emit.js +153 -0
  674. package/dist/toml-parse.js +355 -0
  675. package/dist/toml-utils.js +60 -0
  676. package/dist/toml.js +428 -0
  677. package/dist/ts-loader.d.ts +46 -0
  678. package/dist/ts-loader.d.ts.map +1 -0
  679. package/dist/ts-loader.js +103 -0
  680. package/dist/types.js +1 -0
  681. package/dist/utils.js +61 -0
  682. package/dist/validation.js +20 -0
  683. package/dist/vendor/js-yaml-load.js +1662 -0
  684. package/dist/workspace/__fixtures__/contract-repo.d.ts +7 -0
  685. package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
  686. package/dist/workspace/__fixtures__/contract-repo.js +119 -0
  687. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  688. package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
  689. package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
  690. package/dist/workspace/__fixtures__/sessions.js +91 -0
  691. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  692. package/dist/workspace/agent-cli.js +99 -0
  693. package/dist/workspace/agent.schema.json +390 -0
  694. package/dist/workspace/answers-ledger.js +89 -0
  695. package/dist/workspace/box-cli.js +142 -0
  696. package/dist/workspace/box-factory-write.js +196 -0
  697. package/dist/workspace/box-factory-write.schema.json +342 -0
  698. package/dist/workspace/box-factory.js +88 -0
  699. package/dist/workspace/box-intent.js +126 -0
  700. package/dist/workspace/box-isolation.js +169 -0
  701. package/dist/workspace/box-listing-write.schema.json +204 -0
  702. package/dist/workspace/box-listing.js +298 -0
  703. package/dist/workspace/box-publish.js +352 -0
  704. package/dist/workspace/box-publish.schema.json +498 -0
  705. package/dist/workspace/box-services.js +39 -0
  706. package/dist/workspace/broker-protocol.js +359 -0
  707. package/dist/workspace/broker-protocol.schema.json +228 -0
  708. package/dist/workspace/change-set.schema.json +462 -0
  709. package/dist/workspace/changes-cli.js +56 -0
  710. package/dist/workspace/changes.js +446 -0
  711. package/dist/workspace/changes.schema.json +642 -0
  712. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  713. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  714. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  715. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  716. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  717. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  718. package/dist/workspace/chant-migrations.js +113 -0
  719. package/dist/workspace/check.schema.json +433 -0
  720. package/dist/workspace/checks/box-isolation.js +62 -0
  721. package/dist/workspace/checks/boxes.js +491 -0
  722. package/dist/workspace/checks/diagrams.js +104 -0
  723. package/dist/workspace/checks/generated.js +419 -0
  724. package/dist/workspace/checks/ledgers.js +212 -0
  725. package/dist/workspace/checks/links.js +191 -0
  726. package/dist/workspace/checks/live.js +100 -0
  727. package/dist/workspace/checks/pipelines.js +188 -0
  728. package/dist/workspace/checks/records.js +169 -0
  729. package/dist/workspace/checks.js +426 -0
  730. package/dist/workspace/ci-green-cli.js +125 -0
  731. package/dist/workspace/ci-green-forge.js +83 -0
  732. package/dist/workspace/ci-green-workflow.d.ts +3 -1
  733. package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
  734. package/dist/workspace/ci-green-workflow.js +202 -0
  735. package/dist/workspace/ci-green.js +325 -0
  736. package/dist/workspace/ci-last-green.schema.json +158 -0
  737. package/dist/workspace/class-data.d.ts +84 -0
  738. package/dist/workspace/class-data.d.ts.map +1 -0
  739. package/dist/workspace/class-data.js +238 -0
  740. package/dist/workspace/compose-graph.js +235 -0
  741. package/dist/workspace/compose-reports.js +146 -0
  742. package/dist/workspace/composites.js +264 -0
  743. package/dist/workspace/composites.schema.json +617 -0
  744. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  745. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  746. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  747. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  748. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  749. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  750. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  751. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  752. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  753. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  754. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  755. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  756. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  757. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  758. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  759. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  760. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  761. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  762. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  763. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  764. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  765. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  766. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  767. package/dist/workspace/conformance/broker.js +736 -0
  768. package/dist/workspace/conformance/index.js +673 -0
  769. package/dist/workspace/conformance/vitest.js +108 -0
  770. package/dist/workspace/conformance/writer.js +1080 -0
  771. package/dist/workspace/decide.js +879 -0
  772. package/dist/workspace/decision-points.schema.json +135 -135
  773. package/dist/workspace/declaration-write-cli.js +74 -0
  774. package/dist/workspace/declaration-write.js +238 -0
  775. package/dist/workspace/declaration.js +938 -0
  776. package/dist/workspace/declaration.schema.json +1413 -1413
  777. package/dist/workspace/declared-kinds.js +106 -0
  778. package/dist/workspace/environments.js +164 -0
  779. package/dist/workspace/evidence.schema.json +279 -0
  780. package/dist/workspace/export-cli.js +185 -0
  781. package/dist/workspace/export.js +499 -0
  782. package/dist/workspace/factory-rules.js +175 -0
  783. package/dist/workspace/generated-files.js +92 -0
  784. package/dist/workspace/glob.js +45 -0
  785. package/dist/workspace/graph-cache.js +352 -0
  786. package/dist/workspace/graph-cli.js +348 -0
  787. package/dist/workspace/graph.schema.json +1338 -0
  788. package/dist/workspace/identity-gate-rule.js +75 -0
  789. package/dist/workspace/identity.js +126 -0
  790. package/dist/workspace/import.js +283 -0
  791. package/dist/workspace/init.js +620 -0
  792. package/dist/workspace/intent-cli.js +263 -0
  793. package/dist/workspace/intent-joins.js +201 -0
  794. package/dist/workspace/intent-record.js +352 -0
  795. package/dist/workspace/intent-record.schema.json +864 -0
  796. package/dist/workspace/intent.js +1582 -0
  797. package/dist/workspace/intent.schema.json +2420 -0
  798. package/dist/workspace/json-edit.js +221 -0
  799. package/dist/workspace/jsonc.js +235 -0
  800. package/dist/workspace/kind-readers.js +103 -0
  801. package/dist/workspace/kinds.d.ts +3 -7
  802. package/dist/workspace/kinds.d.ts.map +1 -1
  803. package/dist/workspace/kinds.js +553 -0
  804. package/dist/workspace/lexicon-symbols.js +112 -0
  805. package/dist/workspace/lineage-adopt-cli.js +102 -0
  806. package/dist/workspace/lineage-adopt.js +360 -0
  807. package/dist/workspace/lineage-check.js +282 -0
  808. package/dist/workspace/lineage-cli.js +121 -0
  809. package/dist/workspace/lineage-hash-index.js +284 -0
  810. package/dist/workspace/lineage-init.js +507 -0
  811. package/dist/workspace/lineage-lock.js +387 -0
  812. package/dist/workspace/lineage-merge.js +45 -0
  813. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  814. package/dist/workspace/lineage-migrations.js +329 -0
  815. package/dist/workspace/lineage-provenance.js +36 -0
  816. package/dist/workspace/lineage-update.js +138 -0
  817. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  818. package/dist/workspace/lineage-upgrade.js +889 -0
  819. package/dist/workspace/lineage-vendor.js +171 -0
  820. package/dist/workspace/lineage-version.js +128 -0
  821. package/dist/workspace/lineage-versions.js +275 -0
  822. package/dist/workspace/links.js +330 -0
  823. package/dist/workspace/ls-generated.js +95 -0
  824. package/dist/workspace/ls.js +277 -0
  825. package/dist/workspace/ls.schema.json +333 -0
  826. package/dist/workspace/member-commands.js +508 -0
  827. package/dist/workspace/member-handles.js +216 -0
  828. package/dist/workspace/member-pipeline.js +258 -0
  829. package/dist/workspace/member-run.js +117 -0
  830. package/dist/workspace/member-write.schema.json +193 -0
  831. package/dist/workspace/nested-graph.js +156 -0
  832. package/dist/workspace/nesting.js +38 -0
  833. package/dist/workspace/patch.js +301 -0
  834. package/dist/workspace/patch.schema.json +321 -0
  835. package/dist/workspace/pin-cli.js +55 -0
  836. package/dist/workspace/pin-integrity.js +100 -0
  837. package/dist/workspace/plan-summary.schema.json +155 -0
  838. package/dist/workspace/point-answer.schema.json +129 -129
  839. package/dist/workspace/points-cli.js +291 -0
  840. package/dist/workspace/points-write.schema.json +660 -0
  841. package/dist/workspace/points.js +521 -0
  842. package/dist/workspace/points.schema.json +916 -0
  843. package/dist/workspace/pr-report.schema.json +108 -0
  844. package/dist/workspace/principal-classes.d.ts +4 -11
  845. package/dist/workspace/principal-classes.d.ts.map +1 -1
  846. package/dist/workspace/principal-classes.js +162 -0
  847. package/dist/workspace/reason-codes.js +326 -0
  848. package/dist/workspace/record-assets.js +151 -0
  849. package/dist/workspace/record-decided.js +105 -0
  850. package/dist/workspace/record-sessions.js +96 -0
  851. package/dist/workspace/record-source.js +114 -0
  852. package/dist/workspace/records-amend.schema.json +284 -0
  853. package/dist/workspace/records-checkout.js +76 -0
  854. package/dist/workspace/records-cli.js +707 -0
  855. package/dist/workspace/records-close.js +116 -0
  856. package/dist/workspace/records-close.schema.json +278 -0
  857. package/dist/workspace/records-new.schema.json +202 -0
  858. package/dist/workspace/records-review.schema.json +367 -0
  859. package/dist/workspace/records-since.js +317 -0
  860. package/dist/workspace/records-since.schema.json +218 -0
  861. package/dist/workspace/records-write.js +1229 -0
  862. package/dist/workspace/records.js +1345 -0
  863. package/dist/workspace/records.schema.json +604 -0
  864. package/dist/workspace/reference-kinds/app/package.json +10 -0
  865. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  866. package/dist/workspace/returns.js +303 -0
  867. package/dist/workspace/root-refusal.js +75 -0
  868. package/dist/workspace/run-statement.schema.json +622 -0
  869. package/dist/workspace/runs-cli.js +584 -0
  870. package/dist/workspace/runs-write.schema.json +994 -0
  871. package/dist/workspace/runs.js +708 -0
  872. package/dist/workspace/runs.schema.json +1257 -0
  873. package/dist/workspace/runtimes.js +76 -0
  874. package/dist/workspace/session-kinds.js +83 -0
  875. package/dist/workspace/signers.schema.json +206 -0
  876. package/dist/workspace/source-block.js +125 -0
  877. package/dist/workspace/squash.js +177 -0
  878. package/dist/workspace/status-gates.js +162 -0
  879. package/dist/workspace/status-stewards.js +330 -0
  880. package/dist/workspace/status.js +514 -0
  881. package/dist/workspace/status.schema.json +998 -0
  882. package/dist/workspace/steward-index.js +191 -0
  883. package/dist/workspace/symbols.js +188 -0
  884. package/dist/workspace/template-manifest.js +227 -0
  885. package/dist/workspace/template-pins.js +115 -0
  886. package/dist/workspace/trailer-joins.js +65 -0
  887. package/dist/workspace/trailers.js +111 -0
  888. package/dist/workspace/tree.js +136 -0
  889. package/dist/workspace/trust/attestor.js +63 -0
  890. package/dist/workspace/trust/dsse.js +108 -0
  891. package/dist/workspace/trust/evidence-cli.js +175 -0
  892. package/dist/workspace/trust/evidence.js +161 -0
  893. package/dist/workspace/trust/gate-seal.js +226 -0
  894. package/dist/workspace/trust/policy.js +190 -0
  895. package/dist/workspace/trust/provenance.js +180 -0
  896. package/dist/workspace/trust/rotation.js +298 -0
  897. package/dist/workspace/trust/run-commits.js +101 -0
  898. package/dist/workspace/trust/run-statement.js +182 -0
  899. package/dist/workspace/trust/seal.js +272 -0
  900. package/dist/workspace/trust/signers-cli.js +152 -0
  901. package/dist/workspace/trust/ssh-commit.js +178 -0
  902. package/dist/workspace/trust/test-repo.js +118 -0
  903. package/dist/workspace/trust/trust-files.js +193 -0
  904. package/dist/workspace/trust/verify-cli.js +63 -0
  905. package/dist/workspace/trust/verify.js +192 -0
  906. package/dist/workspace/which-chant.js +141 -0
  907. package/dist/workspace/wip-cli.js +95 -0
  908. package/dist/workspace/wip-write.schema.json +504 -0
  909. package/dist/workspace/wip.js +631 -0
  910. package/dist/workspace/wip.schema.json +334 -0
  911. package/dist/workspace/work-cli.js +448 -0
  912. package/dist/workspace/work-evidence.js +122 -0
  913. package/dist/workspace/work-evidence.schema.json +222 -0
  914. package/dist/workspace/work-history.schema.json +421 -0
  915. package/dist/workspace/work-lease.schema.json +246 -0
  916. package/dist/workspace/work-size.js +77 -0
  917. package/dist/workspace/work.js +283 -0
  918. package/dist/workspace/workspace-kinds.schema.json +259 -259
  919. package/dist/workspace/workspace-principals.schema.json +53 -53
  920. package/dist/workspace/write-lock-cli.js +105 -0
  921. package/dist/workspace/write-lock.js +424 -0
  922. package/dist/workspace/write-lock.schema.json +172 -0
  923. package/dist/workspace/write-scope.js +484 -0
  924. package/dist/yaml.js +459 -0
  925. package/package.json +2 -2
  926. package/src/build.ts +8 -0
  927. package/src/change-set.test.ts +48 -0
  928. package/src/change-set.ts +52 -2
  929. package/src/ci-jobs.test.ts +49 -0
  930. package/src/ci-jobs.ts +515 -0
  931. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  932. package/src/cli/commands/lint.ts +3 -0
  933. package/src/cli/commands/migrate.ts +2 -0
  934. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  935. package/src/cli/main.ts +121 -27
  936. package/src/cli/mcp/workspace-tools.ts +1 -1
  937. package/src/codegen/pinned-upgrade.ts +2 -0
  938. package/src/components/discover.ts +2 -0
  939. package/src/components/pr-pipeline.ts +3 -2
  940. package/src/components/sandbox/driver.ts +3 -1
  941. package/src/composite.ts +15 -3
  942. package/src/config-import.ts +3 -0
  943. package/src/discovery/collect.ts +15 -1
  944. package/src/discovery/fold-build-parity.test.ts +71 -0
  945. package/src/discovery/fold-import.ts +25 -127
  946. package/src/discovery/fold-project-provenance.test.ts +21 -4
  947. package/src/discovery/host-composite.ts +101 -0
  948. package/src/discovery/import.ts +2 -0
  949. package/src/discovery/index.ts +11 -1
  950. package/src/discovery/sandbox/driver.ts +3 -1
  951. package/src/gate-decision-bundle.test.ts +5 -4
  952. package/src/gate-decision-identity.test.ts +59 -6
  953. package/src/gate-decision.ts +81 -21
  954. package/src/lexicon-module.ts +3 -0
  955. package/src/lifecycle/gate-audit.test.ts +55 -1
  956. package/src/lifecycle/gate-audit.ts +116 -3
  957. package/src/lifecycle/gate-ledger.test.ts +20 -1
  958. package/src/lifecycle/gate-ledger.ts +33 -1
  959. package/src/lint/config.ts +1 -1
  960. package/src/lint/discover.ts +28 -8
  961. package/src/lint/policy-import.ts +4 -1
  962. package/src/lint/rule-loader.ts +2 -0
  963. package/src/op/activities/activity-contracts.ts +1 -1
  964. package/src/op/activities/change-set.ts +11 -3
  965. package/src/op/activities/lexicon-upgrade.test.ts +2 -0
  966. package/src/op/activities/reconcile.test.ts +62 -2
  967. package/src/op/activities/reconcile.ts +46 -22
  968. package/src/op/builders.ts +1 -1
  969. package/src/op/discover.ts +3 -0
  970. package/src/op/op-waves-run.ts +4 -3
  971. package/src/op/op-waves.test.ts +2 -0
  972. package/src/op/work-lease-run.test.ts +12 -4
  973. package/src/ts-loader.test.ts +23 -0
  974. package/src/ts-loader.ts +122 -0
  975. package/src/workspace/__fixtures__/contract-repo.ts +17 -1
  976. package/src/workspace/__fixtures__/sessions.ts +3 -3
  977. package/src/workspace/change-set.schema.json +5 -3
  978. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  979. package/src/workspace/ci-green-workflow.test.ts +4 -4
  980. package/src/workspace/ci-green-workflow.ts +5 -2
  981. package/src/workspace/class-data.test.ts +64 -0
  982. package/src/workspace/class-data.ts +236 -0
  983. package/src/workspace/declaration.ts +1 -1
  984. package/src/workspace/kinds.ts +7 -36
  985. package/src/workspace/lineage-migrations.ts +2 -0
  986. package/src/workspace/points.ts +1 -1
  987. package/src/workspace/principal-classes.ts +12 -95
  988. package/src/workspace/records-formats.test.ts +7 -2
  989. package/src/workspace/records-sessions-write.test.ts +3 -3
  990. package/src/workspace/status-contract.e2e.test.ts +37 -0
  991. package/src/workspace/status-contract.test.ts +23 -21
@@ -0,0 +1,172 @@
1
+ /**
2
+ * What an engine is asked to price, and who gets to say so (#2382).
3
+ *
4
+ * `./behaviour.ts` says what a prediction may mean and `./behaviour-http.ts`
5
+ * carries one to an engine. Between them sits a question neither answers: for
6
+ * a given entity in a project's graph, what *kind* of thing is it, and is it
7
+ * something an engine prices at all? #2357 answered it with one table in one
8
+ * lexicon, keyed by every other lexicon's entity types. That table described
9
+ * 117 types it did not own, and the capability rode on whether an optional
10
+ * package happened to be installed — which gave a consumer a fourth
11
+ * outcome this contract never named: no overlay, no refusal, and no reason.
12
+ *
13
+ * So the resolution lives here, where every other part of the feature already
14
+ * does, and the *rows* are contributed by the lexicon that owns the substrate.
15
+ * Core learns that an entity has an engine kind. It never learns which.
16
+ *
17
+ * ## Why rows are safe to make optional when the capability is not
18
+ *
19
+ * A lexicon that is not installed declared no entities of its types, so it has
20
+ * no rows to contribute and nothing goes missing: the estate simply contains
21
+ * nothing of that substrate. That is the opposite of the capability itself
22
+ * being optional, where an uninstalled package means an estate full of
23
+ * entities nobody will say anything about.
24
+ *
25
+ * ## The three things a lexicon can say about its own types
26
+ *
27
+ * - **mapped** — this type is a `compute`/`database`/`queue`, and its size
28
+ * is read from this declared property, in the provider's own vocabulary.
29
+ * - **declared unmapped** — this type is real and carries no rate an engine
30
+ * can quote, with the sentence saying why. A grant is not a resource; a
31
+ * boundary is not a node; a meter chant cannot read is not a figure.
32
+ * - **nothing priced** — nothing this lexicon declares is an estate an
33
+ * engine prices, once, for the whole substrate. A CI workflow is not an
34
+ * estate, and a policy language has nothing to saturate.
35
+ *
36
+ * A type a contributor claims and has no row for is `unknown-type`: the one
37
+ * verdict that is a defect rather than a decision, and the reason the three
38
+ * above are distinct states instead of one absent row.
39
+ */
40
+ const ENGINE_KIND_WITNESS = {
41
+ compute: true,
42
+ serverless: true,
43
+ "control-plane": true,
44
+ database: true,
45
+ cache: true,
46
+ queue: true,
47
+ "object-store": true,
48
+ "block-store": true,
49
+ "load-balancer": true,
50
+ cdn: true,
51
+ };
52
+ /**
53
+ * Every legal {@link EngineKind}, derived from a total witness rather than
54
+ * written out by hand — the construction `behaviour.ts` uses for
55
+ * `BEHAVIOUR_BASES`, for the same reason: a hand-written array is checked for
56
+ * having legal members and never for having all of them.
57
+ */
58
+ export const ENGINE_KINDS = Object.keys(ENGINE_KIND_WITNESS);
59
+ /** True when `value` is a legal {@link EngineKind}. */
60
+ export function isEngineKind(value) {
61
+ return typeof value === "string" && ENGINE_KINDS.includes(value);
62
+ }
63
+ /** chant's own build-time entities, which no lexicon owns and nothing bills. */
64
+ const CHANT_PSEUDO_PREFIX = "chant:";
65
+ /**
66
+ * Resolve one entity type against the contributed rows.
67
+ *
68
+ * Total by construction: every type reaches one of the four states and there
69
+ * is no fifth arm for "dropped". That is the property the request builder
70
+ * relies on to guarantee every entity it was asked about lands in `entities`
71
+ * or in `unpredicted`.
72
+ *
73
+ * `hasOwnProperty` rather than a truthiness check, because these are plain
74
+ * object literals and an entity named after a prototype member would otherwise
75
+ * resolve to a mapping that does not exist.
76
+ */
77
+ export function coverageFor(contributors, entityType, props) {
78
+ if (entityType.startsWith(CHANT_PSEUDO_PREFIX)) {
79
+ return {
80
+ status: "declared-unmapped",
81
+ reason: "one of chant's own build-time entities rather than something an account holds — a declared " +
82
+ "output, or a default that rides onto the resources beside it. It is never created and never " +
83
+ "billed",
84
+ };
85
+ }
86
+ const owner = contributors.find((c) => c.prefixes.some((p) => entityType.startsWith(p)));
87
+ if (!owner)
88
+ return { status: "unknown-type" };
89
+ if (owner.nothingPriced)
90
+ return { status: "provider-not-modelled", substrate: owner.nothingPriced };
91
+ const type = owner.resolveType ? owner.resolveType(entityType, props) : entityType;
92
+ if (type === undefined)
93
+ return { status: "unknown-type" };
94
+ if (owner.mapped && Object.prototype.hasOwnProperty.call(owner.mapped, type)) {
95
+ const row = owner.mapped[type];
96
+ return { status: "mapped", mapping: { ...row, provider: row.provider ?? owner.provider } };
97
+ }
98
+ if (owner.unmapped && Object.prototype.hasOwnProperty.call(owner.unmapped, type)) {
99
+ return { status: "declared-unmapped", reason: owner.unmapped[type] };
100
+ }
101
+ // Before `unmappedWhen`, and after both tables: a row is this lexicon's
102
+ // decision about a type it models, and a substrate boundary is a statement
103
+ // about types it never will. A type inside the modelled substrate with no
104
+ // row falls past both and stays the defect it is.
105
+ const elsewhere = owner.notModelledWhen?.(type);
106
+ if (elsewhere !== undefined)
107
+ return { status: "provider-not-modelled", substrate: elsewhere };
108
+ const late = owner.unmappedWhen?.(type);
109
+ if (late !== undefined)
110
+ return { status: "declared-unmapped", reason: late };
111
+ return { status: "unknown-type" };
112
+ }
113
+ /**
114
+ * The contributor that owns an entity type, or `undefined` when nobody claims
115
+ * it. Exported because a caller that has already resolved a verdict often
116
+ * needs the owner too — to name it in a detail, or to label the entity the way
117
+ * its own lexicon would.
118
+ */
119
+ export function ownerOf(contributors, entityType) {
120
+ return contributors.find((c) => c.prefixes.some((p) => entityType.startsWith(p)));
121
+ }
122
+ /**
123
+ * How a detail names an entity's kind. The chant entity type, except where the
124
+ * owning lexicon keys its rows on something else: `Terraform::Resource` names
125
+ * nothing a reader can act on, and the provider type is the kind, so the label
126
+ * is `aws_vpc (Terraform::Resource)`.
127
+ */
128
+ export function coverageLabel(contributors, entityType, props) {
129
+ const owner = ownerOf(contributors, entityType);
130
+ if (!owner?.resolveType)
131
+ return entityType;
132
+ const type = owner.resolveType(entityType, props);
133
+ return type === undefined || type === entityType ? entityType : `${type} (${entityType})`;
134
+ }
135
+ /**
136
+ * The `detail` an `unpredicted` entry carries, naming the kind in every case.
137
+ *
138
+ * The kind is named here, in the per-entity decline, because that is the only
139
+ * place in this contract with a per-entity axis: a `BehaviourRefusalReport` is
140
+ * a statement about the whole run and has no `entities` key by design, so a
141
+ * report-level refusal for one unmapped bucket would take the other nineteen
142
+ * entities' figures down with it.
143
+ *
144
+ * The `unknown-type` arm names the lexicon that owns the type rather than a
145
+ * file path, because since #2382 the row belongs to whichever lexicon defines
146
+ * the type, and that is the thing a reader needs to be told.
147
+ */
148
+ export function unmappedDetail(label, verdict, owner) {
149
+ if (verdict.status === "declared-unmapped") {
150
+ return `${label} is declared unmapped by the ${owner?.provider ?? "declaring"} coverage rows: ${verdict.reason}.`;
151
+ }
152
+ if (verdict.status === "provider-not-modelled") {
153
+ return (`${label} belongs to ${verdict.substrate}, which nothing here models. A substrate is added by ` +
154
+ "the lexicon that owns its types contributing rows for them, not by adding a row elsewhere. " +
155
+ "This is a stated boundary rather than a gap — nothing needs filing.");
156
+ }
157
+ const where = owner
158
+ ? `the lexicon that owns ${owner.prefixes.join(", ")}`
159
+ : "the lexicon that owns this entity type";
160
+ return (`${label} has no row in any contributed coverage table. It is a type from a substrate that is ` +
161
+ "modelled, and is neither mapped to an engine kind nor declared unmapped, so nothing has an " +
162
+ `opinion about it rather than a stated one. Add a row in ${where}.`);
163
+ }
164
+ /**
165
+ * Compare two strings by UTF-16 code unit.
166
+ *
167
+ * Not `localeCompare`, which reads the ambient locale: under `sv-SE` and
168
+ * `et-EE` it orders these type names differently from `en-US`, which would
169
+ * make the request's bytes — and therefore any golden fixture, and therefore
170
+ * any declared-versus-live delta — a function of the machine that built them.
171
+ */
172
+ export const byCodeUnit = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
@@ -0,0 +1,50 @@
1
+ /**
2
+ * A behaviour result, in the shape the overlay carries it (#2360, epic #2355).
3
+ *
4
+ * behold reads a prediction off `chant graph --live --overlay`'s IR and never
5
+ * calls an engine itself: one block per entity on `attrs._behaviour`, the
6
+ * channel every other live fact rides on (`_status`, `_release`, `_carve`),
7
+ * and the graph-level half on `meta._behaviour`. Its reader
8
+ * (`behold/src/behaviour.ts`, `validateBehaviourMeta`) takes `meta._behaviour`
9
+ * as `{ engine?, version?, at?, total?, refusal? }` and short-circuits on
10
+ * `refusal`: a refusal is present *instead of* the engine, and a meta with
11
+ * neither is dropped as "meta.engine missing".
12
+ *
13
+ * That last sentence is the whole reason this module exists. What goes on
14
+ * `meta._behaviour` for a refusal is the **entire** {@link BehaviourRefusalReport}
15
+ * — `{ behaviour: "v1", refusal: { cause, reason, remedy, source? } }` — and
16
+ * not the bare {@link BehaviourRefusal} inside it. A bare refusal has `reason`
17
+ * and `remedy` at its top level and no `refusal` key, so behold's reader finds
18
+ * no refusal, then finds no engine, and drops the meta with a diagnostic that
19
+ * names the wrong thing. The contract doc said the wrong type once
20
+ * (#2360's second review comment); this is written against the reader.
21
+ *
22
+ * For a report, `meta._behaviour` is the report's own `meta`: engine, version,
23
+ * `at`, an optional `total`, and `edgeCoverage`, which behold's reader ignores
24
+ * and a consumer that wants to know what a resilience verdict was computed
25
+ * over reads. Each entity's block goes on its node verbatim — the contract's
26
+ * {@link PredictedBehaviour} is field for field the block behold validates.
27
+ *
28
+ * Pure. Nothing here calls an engine; the result is whatever a lexicon's
29
+ * `predictBehaviour` returned.
30
+ */
31
+ import { isBehaviourRefusalReport, } from "./behaviour.js";
32
+ /** The attribute a behaviour block rides on, on a node and on the graph's meta. */
33
+ export const BEHAVIOUR_OVERLAY_ATTR = "_behaviour";
34
+ /**
35
+ * Project a result onto the overlay's channels.
36
+ *
37
+ * A refusal keeps its envelope. behold reads `meta._behaviour.refusal`, and
38
+ * the envelope is also what makes the value self-describing to anything else
39
+ * reading the IR: `behaviour: "v1"` says which contract the refusal is in.
40
+ */
41
+ export function behaviourOverlay(result) {
42
+ if (isBehaviourRefusalReport(result)) {
43
+ return { meta: { [BEHAVIOUR_OVERLAY_ATTR]: result }, attrs: {} };
44
+ }
45
+ const attrs = Object.create(null);
46
+ for (const [name, block] of Object.entries(result.entities)) {
47
+ attrs[name] = { [BEHAVIOUR_OVERLAY_ATTR]: block };
48
+ }
49
+ return { meta: { [BEHAVIOUR_OVERLAY_ATTR]: result.meta }, attrs };
50
+ }
@@ -0,0 +1,188 @@
1
+ /**
2
+ * `predictBehaviour()` — the fourth
3
+ * observation method (#2357, contract #2356).
4
+ *
5
+ * The whole method is four moves, in this order, and the order is the contract:
6
+ *
7
+ * 1. **Screen the request.** `screenBehaviourRequest` and nothing else. It is
8
+ * the only entry point, and calling `assertNoCredentialInOptions` instead
9
+ * applies one rule of three — that was review finding F1 on #2365, where a
10
+ * `ghp_…` past the walk's depth budget and an `awsSecretAccessKey` in
11
+ * `props` both went out with the request.
12
+ * 2. **Resolve the engine.** `behaviourEngineFrom`, walking
13
+ * `CHANT_BEHAVIOUR_ENGINE_BEHAVIOUR_SCOPE` → `CHANT_BEHAVIOUR_ENGINE` →
14
+ * `BEHAVIOUR_ENGINE`. Nothing named means `noBehaviourEngineRefusal`, and
15
+ * it happens **before** anything is priced: a lexicon that prices first and
16
+ * checks the engine afterwards has already decided what zero means.
17
+ * 3. **Build the request.** `buildEngineRequest`, offline and pure
18
+ * (`./request.ts`).
19
+ * 4. **Ask, and translate the answer.** One {@link EngineOutcome} onto the
20
+ * contract's builders. A refusal comes back from the transport already
21
+ * built — the contract's transport (#2373) names the condition and the
22
+ * variable where the wire was seen — and is returned as it stands; this
23
+ * file holds no switch over causes. No figure is ever computed here either:
24
+ * this file has no arithmetic on money in it at all, and that is not an
25
+ * accident. The epic's first rule is that a missing engine produces a
26
+ * refusal and "never a locally faked number", and the surest way to keep
27
+ * that true is for the code that would have faked it not to exist.
28
+ *
29
+ * ## Every entity lands somewhere
30
+ *
31
+ * `behaviourReport` refuses a report that leaves a name in neither map, so the
32
+ * loop below has no `continue` that drops one. Four ways an entity can end up
33
+ * unpredicted, and each names a different thing:
34
+ *
35
+ * | Outcome | Reason | Means |
36
+ * |---|---|---|
37
+ * | the coverage table declares it unmapped | `unsupported-kind` | chant looked, and this kind has no rate |
38
+ * | the coverage table has never seen it | `unsupported-kind` | chant has not looked; the detail says so and where to add the row |
39
+ * | the engine declined it | `read-failed` | chant asked and the engine could not answer |
40
+ * | the engine answered about neither | `read-failed` | the engine lost it, and this says so rather than hiding it |
41
+ *
42
+ * The last row is the one that would otherwise be silent. An engine that
43
+ * returns figures for eleven of twelve nodes and mentions the twelfth nowhere
44
+ * is a bug in the engine, and an estate that quietly renders eleven nodes is
45
+ * how it stays a bug.
46
+ */
47
+ import { behaviourReport, behaviourEngineFrom, noBehaviourEngineRefusal, predictedRate, screenBehaviourRequest, unreachableBehaviourEngineRefusal, } from "./behaviour.js";
48
+ import { buildEngineRequest } from "./behaviour-request.js";
49
+ import { BEHAVIOUR_SCOPE, defaultConnect } from "./behaviour-engine.js";
50
+ export { BEHAVIOUR_SCOPE };
51
+ /**
52
+ * Build core's `predictBehaviour`, with the environment and the
53
+ * transport injected.
54
+ *
55
+ * Injected rather than read from module scope so a test can drive the whole
56
+ * method — screen, resolve, serialize, translate — against a fixture engine
57
+ * without touching `process.env`, which is what the shared conformance suite's
58
+ * probes need in order to ask the same request twice and compare.
59
+ */
60
+ export function createBehaviourPredict(deps = {}) {
61
+ const env = deps.env ?? process.env;
62
+ const kinds = deps.kinds ?? [];
63
+ const connect = deps.connect ?? defaultConnect;
64
+ return async function predictBehaviour(options) {
65
+ const unsafe = screenBehaviourRequest(BEHAVIOUR_SCOPE, options);
66
+ if (unsafe)
67
+ return unsafe;
68
+ const endpoint = behaviourEngineFrom(BEHAVIOUR_SCOPE, env);
69
+ if (!endpoint)
70
+ return noBehaviourEngineRefusal(BEHAVIOUR_SCOPE);
71
+ const engine = connect(endpoint, env);
72
+ if (!engine) {
73
+ return unreachableBehaviourEngineRefusal(BEHAVIOUR_SCOPE, endpoint, "no transport speaks that address — a http(s) URL is dialled with a bearer token, and a bare " +
74
+ "address is run as a command on PATH; any other scheme has no transport yet");
75
+ }
76
+ const request = buildEngineRequest(options, kinds);
77
+ const outcome = await engine.predict(request);
78
+ // Built where the wire was seen, and returned as it stands. The three
79
+ // engine-answered causes and the token cases are mapped once, in the
80
+ // contract's transport, rather than re-derived here from a cause.
81
+ if (!outcome.ok)
82
+ return outcome.refusal;
83
+ const { answer } = outcome;
84
+ // `Object.create(null)`, not `{}`. An entity named `constructor` or
85
+ // `toString` writes onto `Object.prototype`'s members on a plain literal,
86
+ // and one named `__proto__` sets the prototype instead of adding a key, so
87
+ // the entry vanishes and `behaviourReport`'s totality check fires on an
88
+ // entity this function believed it had reported. `coverageFor` already
89
+ // guards its own lookups this way (`./mapping.ts`); these are the same
90
+ // hazard on the writing side.
91
+ const entities = Object.create(null);
92
+ const unpredicted = Object.create(null);
93
+ for (const held of request.withheld) {
94
+ unpredicted[held.name] = {
95
+ ...(held.entityType === "(undeclared)" ? {} : { type: held.entityType }),
96
+ reason: "unsupported-kind",
97
+ detail: held.detail,
98
+ };
99
+ }
100
+ for (const node of request.nodes) {
101
+ // `hasOwnProperty` for the same reason: `answer.declined` comes from
102
+ // `JSON.parse`, so `declined["constructor"]` is a function rather than
103
+ // `undefined` and the `!== undefined` guard below missed it.
104
+ const declined = has(answer.declined, node.name) ? answer.declined[node.name] : undefined;
105
+ if (declined !== undefined) {
106
+ unpredicted[node.name] = {
107
+ type: node.entityType,
108
+ reason: "read-failed",
109
+ detail: `${answer.engine} was sent ${node.name} as a ${node.kind} and declined it: ${declined}`,
110
+ };
111
+ continue;
112
+ }
113
+ const figure = has(answer.figures, node.name) ? answer.figures[node.name] : undefined;
114
+ if (figure === undefined) {
115
+ unpredicted[node.name] = {
116
+ type: node.entityType,
117
+ reason: "read-failed",
118
+ detail: `${answer.engine} was sent ${node.name} and its answer names it in neither its figures nor ` +
119
+ "its declined list. An engine that loses a node is reported, not rendered as an estate one " +
120
+ "node smaller.",
121
+ };
122
+ continue;
123
+ }
124
+ entities[node.name] = block(options.traffic, figure, answer);
125
+ }
126
+ return behaviourReport(options, {
127
+ engine: answer.engine,
128
+ version: answer.version,
129
+ ...(answer.total
130
+ ? { total: predictedRate(answer.total.perHour, answer.total.currency) }
131
+ : {}),
132
+ }, entities, unpredicted);
133
+ };
134
+ }
135
+ /** An own key, not a prototype member. See the accumulators above. */
136
+ function has(map, key) {
137
+ return map !== undefined && Object.prototype.hasOwnProperty.call(map, key);
138
+ }
139
+ /**
140
+ * One engine figure as a contract block.
141
+ *
142
+ * `at` comes from the request rather than from the engine's answer. The engine
143
+ * was asked at one level and `behaviourReport` refuses a block priced at a
144
+ * level the run did not ask for, so echoing the engine's own idea of the level
145
+ * would turn an engine that quietly substituted a level it liked better into a
146
+ * report that agrees with itself and answers the wrong question.
147
+ *
148
+ * `headroom` is copied axis by axis. An axis the engine did not model is
149
+ * **absent**, never `0` — zero headroom means saturated, which is the opposite
150
+ * claim, and `BehaviourHeadroom` is a union requiring at least one axis so a
151
+ * figure with neither is a type error rather than a block behold drops.
152
+ */
153
+ function block(traffic, figure, answer) {
154
+ const cpu = figure.headroom?.cpu;
155
+ const latency = figure.headroom?.latency;
156
+ // Built axis by axis, and the cast the first version used here was a lie:
157
+ // `EngineFigure.headroom` is optional, so a figure stating none produced
158
+ // `{ latency: undefined }` — an object satisfying `BehaviourHeadroom`
159
+ // structurally and carrying no axis at all, which behold drops. The doc
160
+ // claiming a type error caught this was false. `parseEngineAnswer` now
161
+ // refuses such a figure before it reaches here; this stays correct anyway,
162
+ // because a lexicon should not depend on its own validator having run.
163
+ const headroom = cpu !== undefined
164
+ ? { cpu, ...(latency !== undefined ? { latency } : {}) }
165
+ : { latency: latency };
166
+ if (cpu === undefined && latency === undefined) {
167
+ throw new Error(`predictBehaviour: the engine's figure for this entity carries neither a cpu nor a latency ` +
168
+ "headroom axis, and parseEngineAnswer should have refused it.");
169
+ }
170
+ return {
171
+ at: { traffic },
172
+ cost: predictedRate(figure.perHour, figure.currency),
173
+ headroom,
174
+ errorRate: figure.errorRate,
175
+ resilience: {
176
+ failure: figure.resilience.failure,
177
+ verdict: figure.resilience.verdict,
178
+ ...(figure.resilience.note ? { note: figure.resilience.note } : {}),
179
+ },
180
+ ...(figure.rightSize ? { rightSize: figure.rightSize } : {}),
181
+ provenance: {
182
+ engine: answer.engine,
183
+ version: answer.version,
184
+ tolerance: answer.tolerance,
185
+ basis: answer.basis,
186
+ },
187
+ };
188
+ }
@@ -0,0 +1,194 @@
1
+ /**
2
+ * The engine's request, built offline from chant's typed source (#2357).
3
+ *
4
+ * `chant build` reaches no network and is byte-identical on re-run
5
+ * (`packages/core/src/components/verbs/reproducibility.ts`, the
6
+ * `deterministic-synthesis` basis). The request an engine is handed is built
7
+ * the same way and holds itself to the same property, for a reason that is not
8
+ * tidiness: the epic wants the declared prediction and the live prediction
9
+ * shown as a delta, and a delta is only a statement about the estate if both
10
+ * sides were assembled the same way from the same source. A request carrying a
11
+ * timestamp, an unsorted map or a floating-point rendering that depends on the
12
+ * platform makes every re-run look like drift.
13
+ *
14
+ * So everything here is pure. No clock, no `Math.random`, no environment, no
15
+ * filesystem, no network. {@link renderEngineRequest} is the only place bytes
16
+ * are produced, and it produces them through a canonical writer that sorts
17
+ * every object key and every list.
18
+ *
19
+ * ## What is in the request, and why the withheld list is in it too
20
+ *
21
+ * Nodes, edges, the traffic level, the caller's edge-coverage claim — and
22
+ * `withheld`, the entities the caller asked about that this lexicon is not
23
+ * asking the engine about, each with the reason from the coverage table.
24
+ *
25
+ * That last one is the same argument `edgeCoverage` won on the contract
26
+ * (#2365, review finding 6). An engine handed twelve nodes cannot tell whether
27
+ * the estate has twelve or twenty, and a resilience verdict computed over a
28
+ * graph with eight nodes missing is a confident answer to a question nobody
29
+ * asked. Omitting them would make the request's own coverage invisible one
30
+ * level down from where the contract made it visible.
31
+ */
32
+ import { byCodeUnit, coverageFor, coverageLabel, ownerOf, unmappedDetail, } from "./behaviour-kinds.js";
33
+ /** The wire version. Bumped when the shape changes, the way `behaviour: "v1"` is. */
34
+ export const BEHAVIOUR_REQUEST_VERSION = "behaviour/v1";
35
+ /** Read a dotted path out of a declared property bag. Returns `undefined` for any miss. */
36
+ function readPath(props, path) {
37
+ let cursor = props;
38
+ for (const segment of path.split(".")) {
39
+ if (typeof cursor !== "object" || cursor === null)
40
+ return undefined;
41
+ cursor = cursor[segment];
42
+ }
43
+ return cursor;
44
+ }
45
+ /**
46
+ * A declared size, as a string, or absent.
47
+ *
48
+ * `sizeType` says which type the row's property holds, and a value of the
49
+ * other type is **absent** rather than coerced. Without that, a
50
+ * `DBInstanceClass: 42` — a wrong-typed declaration, or a parameter that
51
+ * folded to a number — rendered as `"42"` and went to the engine to be matched
52
+ * against a price table of instance-class names it does not appear in. That is
53
+ * the outcome the paragraph below is written against, arriving through the
54
+ * door the paragraph left open.
55
+ *
56
+ * Anything else — an object, an array, an unresolved intrinsic, a `NaN` — is
57
+ * absent too, because a size an engine cannot read is worse than no size: it
58
+ * will either be ignored silently or matched against nothing.
59
+ *
60
+ * A terraform block's unresolved reference is a string, `"${var.size}"`, and
61
+ * is absent for the same reason a CloudFormation intrinsic object is: it is
62
+ * the name of a value, not the value (#2360).
63
+ */
64
+ export function sizeOf(props, sizeProp, sizeType) {
65
+ if (!sizeProp)
66
+ return undefined;
67
+ const raw = readPath(props, sizeProp);
68
+ if (sizeType === "number") {
69
+ return typeof raw === "number" && Number.isFinite(raw) ? String(raw) : undefined;
70
+ }
71
+ // `string`, and the default for a row naming a property and no type.
72
+ return isLiteral(raw) ? raw : undefined;
73
+ }
74
+ /** A non-empty string that is a value rather than a terraform `${…}` reference to one. */
75
+ function isLiteral(raw) {
76
+ return typeof raw === "string" && raw.length > 0 && !raw.includes("${");
77
+ }
78
+ /**
79
+ * Translate one request's worth of chant entities and edges into the engine's
80
+ * shape. Pure, and the same input gives the same output forever.
81
+ *
82
+ * Every name in `entityNames` comes out in exactly one of `nodes` or
83
+ * `withheld`. The caller in `./predict-behaviour.ts` depends on that to satisfy
84
+ * `behaviourReport`'s totality check, and a name the caller asked about that is
85
+ * missing from `options.entities` is `withheld` with an `unknown-type` detail
86
+ * rather than dropped — a `continue` in this loop is the exact silent hole the
87
+ * contract's totality refusal exists to catch.
88
+ */
89
+ export function buildEngineRequest(options, kinds) {
90
+ const nodes = [];
91
+ const withheld = [];
92
+ for (const name of [...options.entityNames].sort(byCodeUnit)) {
93
+ const declared = options.entities.get(name);
94
+ if (!declared) {
95
+ withheld.push({
96
+ name,
97
+ entityType: "(undeclared)",
98
+ status: "unknown-type",
99
+ detail: `${name} was named in entityNames and is not in the entities map, so this lexicon has ` +
100
+ "nothing to translate. It is reported rather than dropped: an entity that vanished " +
101
+ "between the build and the request is a defect in the caller, and a silent omission " +
102
+ "hides it behind an estate that looks smaller.",
103
+ });
104
+ continue;
105
+ }
106
+ const verdict = coverageFor(kinds, declared.entityType, declared.props);
107
+ // Where a lexicon keys its rows on something other than the entity type,
108
+ // that key rides beside the entity type on the wire and in the withheld
109
+ // list: `Terraform::Resource` alone names nothing an engine or a reader
110
+ // can act on (#2360), and its provider type is what does. Asked of the
111
+ // owning contributor rather than special-cased here (#2382).
112
+ const owner = ownerOf(kinds, declared.entityType);
113
+ const resolved = owner?.resolveType?.(declared.entityType, declared.props);
114
+ const resourceType = resolved && resolved !== declared.entityType ? resolved : undefined;
115
+ if (verdict.status !== "mapped") {
116
+ withheld.push({
117
+ name,
118
+ entityType: declared.entityType,
119
+ ...(resourceType ? { resourceType } : {}),
120
+ status: verdict.status,
121
+ detail: unmappedDetail(coverageLabel(kinds, declared.entityType, declared.props), verdict, owner),
122
+ });
123
+ continue;
124
+ }
125
+ const { mapping } = verdict;
126
+ const declaredRegion = mapping.regionProp
127
+ ? readPath(declared.props, mapping.regionProp)
128
+ : undefined;
129
+ const region = isLiteral(declaredRegion) ? declaredRegion : options.region;
130
+ const size = sizeOf(declared.props, mapping.sizeProp, mapping.sizeType);
131
+ nodes.push({
132
+ name,
133
+ entityType: declared.entityType,
134
+ ...(resourceType ? { resourceType } : {}),
135
+ kind: mapping.kind,
136
+ provider: mapping.provider,
137
+ ...(region ? { region } : {}),
138
+ ...(size ? { size } : {}),
139
+ });
140
+ }
141
+ const edges = options.edges
142
+ .map((edge) => ({
143
+ from: edge.from,
144
+ to: edge.to,
145
+ ...(edge.viaAttr ? { via: edge.viaAttr } : {}),
146
+ ...(edge.toAttr ? { toAttr: edge.toAttr } : {}),
147
+ }))
148
+ // By code unit, like the node order above. `localeCompare` reads the
149
+ // ambient locale, so two machines with different `LANG` values produced
150
+ // two different byte streams from one estate — in a module whose whole
151
+ // claim is that its bytes are a function of its content and nothing else.
152
+ .sort((a, b) => byCodeUnit(a.from, b.from) ||
153
+ byCodeUnit(a.to, b.to) ||
154
+ byCodeUnit(a.via ?? "", b.via ?? "") ||
155
+ byCodeUnit(a.toAttr ?? "", b.toAttr ?? ""));
156
+ return {
157
+ request: BEHAVIOUR_REQUEST_VERSION,
158
+ traffic: options.traffic,
159
+ ...(options.region ? { region: options.region } : {}),
160
+ nodes,
161
+ edges,
162
+ coverage: options.edgeCoverage,
163
+ withheld,
164
+ };
165
+ }
166
+ /**
167
+ * Canonical JSON: object keys sorted, arrays in the order they were built,
168
+ * two-space indent, one trailing newline.
169
+ *
170
+ * Key order is where a "deterministic" serializer usually is not. `JSON.stringify`
171
+ * preserves insertion order, and insertion order here follows the order a
172
+ * property bag was assembled in, which follows discovery order, which follows
173
+ * the filesystem. Sorting the keys makes the bytes a function of the content
174
+ * and nothing else — which is what `chant build`'s own reproducibility claim
175
+ * means, and what makes a re-run comparable rather than merely re-run.
176
+ */
177
+ export function renderEngineRequest(request) {
178
+ return `${JSON.stringify(canonical(request), null, 2)}\n`;
179
+ }
180
+ function canonical(value) {
181
+ if (Array.isArray(value))
182
+ return value.map(canonical);
183
+ if (typeof value === "object" && value !== null) {
184
+ const out = {};
185
+ for (const key of Object.keys(value).sort()) {
186
+ const inner = value[key];
187
+ if (inner === undefined)
188
+ continue;
189
+ out[key] = canonical(inner);
190
+ }
191
+ return out;
192
+ }
193
+ return value;
194
+ }