@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,114 @@
1
+ /**
2
+ * Marker symbol for Declarable type identification
3
+ */
4
+ export const DECLARABLE_MARKER = Symbol.for("chant.declarable");
5
+ /**
6
+ * Type guard for `ResourceDeclarable` — replaces the ad-hoc `"props" in x`
7
+ * checks that were previously repeated (with an `as unknown as` cast) at every
8
+ * call site that reads `props`/`attributes` off a `Declarable`.
9
+ */
10
+ export function isResourceDeclarable(value) {
11
+ return "props" in value;
12
+ }
13
+ /**
14
+ * The suffix a declarable marker's symbol description ends with.
15
+ *
16
+ * chant#2444 — what makes a marker mean "entity" rather than "some other kind
17
+ * of chant value". `Symbol.for("chant.declarable")` has it; so does the
18
+ * specification host's `Symbol.for("tsad.conformance.declarable")`.
19
+ */
20
+ const DECLARABLE_MARKER_SUFFIX = ".declarable";
21
+ /**
22
+ * Type guard to check if a value is a Declarable.
23
+ *
24
+ * chant#2444 — accepts an entity a HOST built, not only one chant built.
25
+ *
26
+ * `F-Host-Interface` item 1 says an entity carries a non-enumerable declarable
27
+ * marker, and a host supplies its own: the specification's conformance host
28
+ * marks with `Symbol.for("tsad.conformance.declarable")`. Testing identity
29
+ * against chant's symbol alone refused those for not being chant's rather than
30
+ * for being malformed, which is what chant#2442 hit inside composite member
31
+ * validation and what would otherwise keep biting in the entity tallies and the
32
+ * revival pass-through.
33
+ *
34
+ * ## Why NOT the reference implementation's reading
35
+ *
36
+ * The reference reads L6.1 as "any own symbol or non-enumerable own property",
37
+ * which is right in its domain and **unsafe in chant's**. Two measurements say
38
+ * so, and both were taken rather than assumed:
39
+ *
40
+ * - A real chant entity's non-enumerable own NAMES are `lexicon`,
41
+ * `entityType`, `kind`, `props`, `attributes`, `Ref`. "Any non-enumerable
42
+ * own property" is therefore close to "any chant object at all".
43
+ * - chant has SEVEN marker symbols, not one — `chant.intrinsic`,
44
+ * `chant.composite`, `chant.stackOutput`, `chant.lexiconOutput`,
45
+ * `chant.effect-receipt`, `chant.secret-declaration`, `chant.childProject`
46
+ * — each a non-enumerable own symbol set to `true`. Under "any own symbol"
47
+ * an Intrinsic and a StackOutput both classify as Declarable, which is a
48
+ * worse bug than the one being fixed: they would enter the entity tallies.
49
+ *
50
+ * The reference can read any symbol because its domain has one. chant
51
+ * distinguishes seven kinds BY symbol identity, so it needs the marker's name.
52
+ * Hence the suffix: the marker must say `declarable`, whoever owns it.
53
+ *
54
+ * ## What the suffix cannot do
55
+ *
56
+ * It is a convention, not a registry. A host that marks with, say,
57
+ * `Symbol.for("acme.entity")` carries a perfectly good non-enumerable marker
58
+ * and is refused here, because nothing in this function knows that package is
59
+ * one the caller named. The context that would settle it —
60
+ * `FoldProjectOptions.lexiconPackages`, chant#2438 — lives in the fold path and
61
+ * does not reach a type guard called from a dozen places.
62
+ *
63
+ * That is a deliberate trade, not an oversight: a convention that refuses an
64
+ * unknown-but-valid marker costs a host one symbol name, while a rule loose
65
+ * enough to accept any marker miscounts chant's own seven kinds on every build.
66
+ * If a real host ever needs the other side of it, the fix is to thread the
67
+ * named packages through rather than to widen the test.
68
+ */
69
+ export function isDeclarable(value) {
70
+ if (typeof value !== "object" || value === null)
71
+ return false;
72
+ // chant's own, which is every entity a chant build makes.
73
+ if (value[DECLARABLE_MARKER] === true)
74
+ return true;
75
+ return carriesForeignDeclarableMarker(value);
76
+ }
77
+ /** A declarable marker some other implementation owns — see {@link isDeclarable}. */
78
+ function carriesForeignDeclarableMarker(value) {
79
+ for (const marker of Object.getOwnPropertySymbols(value)) {
80
+ const descriptor = Object.getOwnPropertyDescriptor(value, marker);
81
+ // Non-enumerable and `true`, per F-Host-Interface item 1. An enumerable
82
+ // symbol would travel through a spread and reach an artifact, which a
83
+ // marker must not.
84
+ if (descriptor === undefined || descriptor.enumerable || descriptor.value !== true)
85
+ continue;
86
+ if (marker.description?.endsWith(DECLARABLE_MARKER_SUFFIX) === true)
87
+ return true;
88
+ }
89
+ return false;
90
+ }
91
+ /**
92
+ * Type guard to check if a Declarable is a property-level type
93
+ */
94
+ export function isPropertyDeclarable(value) {
95
+ return value.kind === "property";
96
+ }
97
+ /**
98
+ * A declarable with a live counterpart of its own: what the live paths
99
+ * (`describeResources`, `observeResourcesDeep`, the snapshot, the diff and the
100
+ * change set) put in front of a lexicon's reader.
101
+ *
102
+ * Outputs, parameters and serializer directives carry no `props` and are
103
+ * already left out by {@link isResourceDeclarable}. A property-kind declarable
104
+ * (`createProperty`: Grafana's panels, an aws `SecurityGroup_Ingress`) does
105
+ * carry `props`, but it exists only inside the resource that holds it, and the
106
+ * deep diff already compares it as part of that resource's tree (#1314).
107
+ * Asking a reader about one on its own makes the answer either "absent", so
108
+ * `lifecycle plan` proposes a `create`, or "not observed", a hole for
109
+ * something read in full (#3001). This is the same test `graph-ir.ts` uses to
110
+ * keep property-kind declarables off the graph's nodes.
111
+ */
112
+ export function isObservableDeclarable(value) {
113
+ return isResourceDeclarable(value) && !isPropertyDeclarable(value);
114
+ }
@@ -0,0 +1,437 @@
1
+ /**
2
+ * The deep observation contract (#1014) — what a lexicon's
3
+ * `observeResourcesDeep()` is allowed to mean, and how a live property tree is
4
+ * normalized before anything diffs it.
5
+ *
6
+ * `describeResources()` (./observation.ts) answers *whether* a declared entity
7
+ * exists and carries a handful of scrubbed outputs. That is thin by design, and
8
+ * it is why `lifecycle diff --live` only fires on a changed status, a replaced
9
+ * physical id, or a changed stack output. The drift people actually care about
10
+ * — a hand-edited security-group rule, an inline policy added in the console, a
11
+ * flipped bucket setting — lives one level down, in properties nobody was
12
+ * reading.
13
+ *
14
+ * This module adds the second, optional read: a normalized live property tree
15
+ * per declared entity. It composes with the tri-state contract rather than
16
+ * replacing it — {@link DeepObservationResult} carries the same
17
+ * {@link UnobservedEntity} map, so a deep read that fails for one entity is
18
+ * NOT-OBSERVED with a reason. A thin deep result is never allowed to pass for a
19
+ * clean one.
20
+ *
21
+ * ## The hard half is noise, not reading
22
+ *
23
+ * A raw live model is mostly fields nobody declared and nobody changed: arns,
24
+ * timestamps, generation counters, status subtrees, values the API filled in,
25
+ * fields a controller owns, and orderings that carry no meaning (tag order,
26
+ * policy statement order). Diffing that raw is all noise. So the contract is
27
+ * three parts, and a lexicon implements the last two:
28
+ *
29
+ * 1. **The normalization pass** (here, shared) — canonical key order,
30
+ * hook-driven array order, secret masking, non-JSON values collapsed to
31
+ * {@link UNRESOLVED}.
32
+ * 2. **The pruning hook** ({@link DeepNormalizationHooks.prune}) — the
33
+ * lexicon names its own read-only / server-populated / controller-managed /
34
+ * provider-defaulted fields.
35
+ * 3. **The ordering hook** ({@link DeepNormalizationHooks.orderKey}) — the
36
+ * lexicon names which arrays are sets, and by what key they canonicalize.
37
+ *
38
+ * Both hooks are applied to the *declared* tree and the *live* tree with the
39
+ * same rules, so the two sides are compared in the same shape. A hook sees
40
+ * which side it is normalizing ({@link DeepNode.side}) and whether the same path
41
+ * exists on the other side ({@link DeepNode.counterpart}) — that second flag is
42
+ * what makes default subtraction expressible: a provider default is only noise
43
+ * when nobody declared the property.
44
+ */
45
+ import { isHeldElsewhere, isNormalizedHeldElsewhere, normalizeHeldElsewhere } from "./held-elsewhere.js";
46
+ /** True when `value` is the versioned {@link DeepObservationResult} envelope. */
47
+ export function isDeepObservationResult(value) {
48
+ return (typeof value === "object" &&
49
+ value !== null &&
50
+ value.deepObservation === "v1");
51
+ }
52
+ /** Build a {@link DeepObservationResult}. Lexicons use this rather than writing the discriminant by hand. */
53
+ export function deepObservation(resources, unobserved, pending) {
54
+ return {
55
+ deepObservation: "v1",
56
+ resources,
57
+ ...(unobserved && Object.keys(unobserved).length > 0 ? { unobserved } : {}),
58
+ ...(pending && pending.length > 0 ? { pending } : {}),
59
+ };
60
+ }
61
+ /**
62
+ * Normalize a deep result. `undefined` (a lexicon that returned nothing at all)
63
+ * normalizes to two empty maps — which reads as "every declared entity's
64
+ * properties were read and there were none", so a reader that means "I could
65
+ * not look" must say so with `unobservedAll()` rather than returning nothing.
66
+ */
67
+ export function normalizeDeepObservation(value) {
68
+ if (!value)
69
+ return { resources: {}, unobserved: {} };
70
+ return {
71
+ resources: value.resources ?? {},
72
+ unobserved: value.unobserved ?? {},
73
+ ...(value.pending && value.pending.length > 0 ? { pending: value.pending } : {}),
74
+ };
75
+ }
76
+ // ── Normalization pass ──────────────────────────────────────────────────────
77
+ /**
78
+ * The placeholder a value takes when it is not JSON data — a class instance
79
+ * (an unevaluated intrinsic like `Sub`/`Ref` in a declared tree), a function, a
80
+ * symbol. The diff skips any path whose *declared* value is this: chant cannot
81
+ * know what `Fn::Sub` resolves to without deploying, and guessing would report
82
+ * every interpolated property as permanent drift.
83
+ */
84
+ export const UNRESOLVED = "<chant:unresolved>";
85
+ /** Value a masked (secret-bearing) property takes. Matches the thin path's convention. */
86
+ export const MASKED = "[REDACTED]";
87
+ /**
88
+ * Property-name patterns that mark a value secret-bearing. Deliberately narrow
89
+ * and key-name based: broadening this to e.g. `/key/i` would mask an AWS tag's
90
+ * `Key` field and every `*KeyName` reference, which is how masking turns into
91
+ * its own drift signal.
92
+ *
93
+ * Shared with the thin snapshot path (`./lifecycle/snapshot.ts`), which warns
94
+ * on the same names — one list, so the two paths cannot disagree about what
95
+ * counts as a secret.
96
+ */
97
+ export const SENSITIVE_KEY_PATTERNS = [
98
+ /password/i,
99
+ /secret/i,
100
+ /token/i,
101
+ /private.?key/i,
102
+ /credential/i,
103
+ /connection.?string/i,
104
+ ];
105
+ /** True when a property name looks secret-bearing (see {@link SENSITIVE_KEY_PATTERNS}). */
106
+ export function isSensitiveKey(key) {
107
+ return SENSITIVE_KEY_PATTERNS.some((p) => p.test(key));
108
+ }
109
+ /** True for a value the pass will walk into rather than treat as a leaf. */
110
+ function isPlainObject(value) {
111
+ if (typeof value !== "object" || value === null || Array.isArray(value))
112
+ return false;
113
+ const proto = Object.getPrototypeOf(value);
114
+ return proto === Object.prototype || proto === null;
115
+ }
116
+ /** True for a value that can be compared and serialized as-is. */
117
+ function isJsonPrimitive(value) {
118
+ return (value === null ||
119
+ typeof value === "string" ||
120
+ typeof value === "number" ||
121
+ typeof value === "boolean");
122
+ }
123
+ function joinPath(parent, key) {
124
+ return parent ? `${parent}.${key}` : key;
125
+ }
126
+ function joinIndex(parent, index) {
127
+ return `${parent}[${index}]`;
128
+ }
129
+ function joinPattern(parent) {
130
+ return `${parent}[]`;
131
+ }
132
+ /**
133
+ * Every path in a raw tree — both the exact form (`Tags[0].Value`) and the
134
+ * index-erased pattern (`Tags[].Value`) — for {@link
135
+ * NormalizeDeepOptions.counterpartPaths}. The two forms never collide (`[]` vs
136
+ * `[0]`), so one set answers both questions.
137
+ *
138
+ * Computed on the *raw* tree, before pruning: whether a property was declared
139
+ * cannot depend on whether the pruning rules kept it.
140
+ */
141
+ export function deepPathSet(tree) {
142
+ const out = new Set();
143
+ const walk = (value, path, pattern) => {
144
+ if (path) {
145
+ out.add(path);
146
+ out.add(pattern);
147
+ }
148
+ // A held marker (#2162) is one declared value, not a `{ by, reason }`
149
+ // object to walk into — same leaf treatment `normalizeDeepProperties`
150
+ // gives it, so this path set agrees with what the normalized tree
151
+ // actually looks like a path down.
152
+ if (isHeldElsewhere(value))
153
+ return;
154
+ // A property-kind declarable is walked as its props, exactly as
155
+ // `normalizeDeepProperties` inlines it (#1314). Stopping at it left every
156
+ // path under a typed nested property out of the set, so the other tree's
157
+ // nodes there read `counterpart: "absent"` and default subtraction fired
158
+ // on properties the author did declare.
159
+ if (isPropertyDeclarableValue(value)) {
160
+ walk(value.props ?? {}, path, pattern);
161
+ return;
162
+ }
163
+ if (Array.isArray(value)) {
164
+ value.forEach((el, i) => walk(el, joinIndex(path, i), joinPattern(pattern)));
165
+ return;
166
+ }
167
+ if (isPlainObject(value)) {
168
+ for (const [k, v] of Object.entries(value))
169
+ walk(v, joinPath(path, k), joinPath(pattern, k));
170
+ }
171
+ };
172
+ walk(tree, "", "");
173
+ return out;
174
+ }
175
+ /**
176
+ * Normalize one property tree: prune by hook, mask secret-bearing leaves,
177
+ * canonicalize key order, canonicalize array order where the hook knows how,
178
+ * and collapse anything that isn't JSON data to {@link UNRESOLVED}.
179
+ *
180
+ * Pure and total. Key order is canonicalized unconditionally because JSON
181
+ * object order is not semantic and a provider is free to return it differently
182
+ * on every read; array order is canonicalized only where the lexicon says the
183
+ * array is a set, because list order often *is* semantic.
184
+ */
185
+ /**
186
+ * A container whose every member the rules pruned.
187
+ *
188
+ * The distinction it carries is between a value that was empty in the source
189
+ * and one this pass emptied: `{}` a lexicon actually declared is a fact worth
190
+ * diffing, while `{}` left behind after both of a rule's fields were subtracted
191
+ * as provider defaults is a husk. Reporting the husk turns a suppressed default
192
+ * into `SecurityGroupEgress[#{}]: <undeclared> → {}` — noise wearing the shape
193
+ * of drift, which is the one thing the noise rules exist to prevent.
194
+ *
195
+ * Module-private: it never leaves this function's recursion.
196
+ */
197
+ const EMPTIED = Symbol("emptied-by-pruning");
198
+ /**
199
+ * A property-kind Declarable — a nested property authored through a lexicon's
200
+ * generated constructor rather than as a plain object (#1314).
201
+ *
202
+ * Duck-typed on the same three facts `declarable.ts` defines it by
203
+ * (`entityType`, `kind === "property"`, `props`) rather than imported, keeping
204
+ * this module free of a dependency on the authoring types it only ever
205
+ * inspects. A resource-kind Declarable deliberately does not match.
206
+ */
207
+ function isPropertyDeclarableValue(value) {
208
+ if (typeof value !== "object" || value === null)
209
+ return false;
210
+ const v = value;
211
+ return typeof v.entityType === "string" && v.kind === "property" && typeof v.props === "object" && v.props !== null;
212
+ }
213
+ export function normalizeDeepProperties(tree, options) {
214
+ const { entityType, side, hooks, counterpartPaths } = options;
215
+ const nodeOf = (path, pattern, key, value) => ({
216
+ entityType,
217
+ path,
218
+ pattern,
219
+ key,
220
+ value,
221
+ side,
222
+ counterpart: !counterpartPaths
223
+ ? "unknown"
224
+ : counterpartPaths.has(path) || counterpartPaths.has(pattern)
225
+ ? "present"
226
+ : "absent",
227
+ });
228
+ const prune = (path, pattern, key, value) => {
229
+ if (!hooks?.prune)
230
+ return false;
231
+ return hooks.prune(nodeOf(path, pattern, key, value));
232
+ };
233
+ const normalizeValue = (value, path, pattern, key) => {
234
+ // A `heldElsewhere()` marker (#2162) — declared on purpose, not
235
+ // unresolved and not a plain object to walk into. Checked ahead of even
236
+ // the secret-masking rules below: the marker carries no value at all,
237
+ // only who holds the field and why, so there is nothing for masking to
238
+ // protect and masking it would destroy the one thing worth reporting —
239
+ // a `heldElsewhere()` on a `password`-shaped key ("an operator rotates
240
+ // this out of band") must still say so, not collapse to `[REDACTED]`.
241
+ // Normalized to a JSON-safe tagged leaf so its identity survives this
242
+ // pass and a `--json` round-trip; `deep-diff.ts` reads the tag to
243
+ // report a live difference here as held rather than as drift, on
244
+ // either side (a lexicon's own reader never produces this shape, so
245
+ // the check is safe on the live tree too, though only the declared
246
+ // side ever carries one in practice). Checked ahead of the
247
+ // array/object branches too, same reason a property-Declarable is: it
248
+ // would otherwise be walked as a two-key plain object and lose the
249
+ // very identity that makes it a marker rather than authored data.
250
+ if (isHeldElsewhere(value))
251
+ return normalizeHeldElsewhere(value);
252
+ if (isSensitiveKey(key))
253
+ return MASKED;
254
+ // The lexicon's structural mask — same collapse, path-shaped rather than
255
+ // key-named (a k8s Secret's `data.*` no matter what the key is called).
256
+ if (hooks?.mask?.(nodeOf(path, pattern, key, value)))
257
+ return MASKED;
258
+ // A value the lexicon says cannot be known without deploying — an
259
+ // expression-string reference — collapses exactly like a class-instance
260
+ // intrinsic does below.
261
+ if (hooks?.unresolved?.(nodeOf(path, pattern, key, value)))
262
+ return UNRESOLVED;
263
+ if (isJsonPrimitive(value))
264
+ return value;
265
+ // A PROPERTY-kind Declarable is authored data wearing a class, not an
266
+ // opaque instance (#1314). The generated property constructors —
267
+ // `SecurityGroup_Ingress`, `Role_Policy`, `MicrovmImage_Logging` — are the
268
+ // typed way to write a nested property, and the serializer inlines their
269
+ // `.props` (serializer-walker.ts `visitor.propertyDeclarable`). The
270
+ // declared tree has to do the same, or the two sides disagree about a
271
+ // property the author did write: without this the declared side held
272
+ // UNRESOLVED while the live side held the real rule, so every one of its
273
+ // fields reported `<undeclared> → <value>` on a clean apply, and the noise
274
+ // scaled with how strictly a project typed its properties.
275
+ //
276
+ // Checked ahead of the array/object branches rather than in the non-JSON
277
+ // fallback below, so it holds whether the declarable arrives as a class
278
+ // instance (what a lexicon constructs) or as an equivalent plain object.
279
+ //
280
+ // Deliberately property-kind only. A RESOURCE-kind Declarable in another
281
+ // resource's props is a reference, which has no source-side value to
282
+ // compare against a live one, so UNRESOLVED stays correct for it — and a
283
+ // resource-kind instance falls through to that fallback unchanged.
284
+ if (isPropertyDeclarableValue(value)) {
285
+ return normalizeValue(value.props ?? {}, path, pattern, key);
286
+ }
287
+ if (Array.isArray(value)) {
288
+ const elements = [];
289
+ for (let i = 0; i < value.length; i++) {
290
+ const elPath = joinIndex(path, i);
291
+ const elPattern = joinPattern(pattern);
292
+ if (prune(elPath, elPattern, String(i), value[i]))
293
+ continue;
294
+ const element = normalizeValue(value[i], elPath, elPattern, String(i));
295
+ if (element === EMPTIED)
296
+ continue;
297
+ elements.push(element);
298
+ }
299
+ // An array that had elements and has none left was emptied by pruning,
300
+ // not declared empty. Reporting `[]` for it is reporting the husk of a
301
+ // value the rules just decided was noise.
302
+ if (elements.length === 0 && value.length > 0)
303
+ return EMPTIED;
304
+ return orderElements(elements, path, pattern);
305
+ }
306
+ if (isPlainObject(value)) {
307
+ const out = {};
308
+ let had = 0;
309
+ for (const childKey of Object.keys(value).sort()) {
310
+ const childPath = joinPath(path, childKey);
311
+ const childPattern = joinPath(pattern, childKey);
312
+ const childValue = value[childKey];
313
+ if (childValue === undefined)
314
+ continue;
315
+ had += 1;
316
+ if (prune(childPath, childPattern, childKey, childValue))
317
+ continue;
318
+ const child = normalizeValue(childValue, childPath, childPattern, childKey);
319
+ if (child === EMPTIED)
320
+ continue;
321
+ out[childKey] = child;
322
+ }
323
+ if (Object.keys(out).length === 0 && had > 0)
324
+ return EMPTIED;
325
+ return out;
326
+ }
327
+ // A class instance (an unevaluated intrinsic), a function, a symbol, a
328
+ // bigint — not JSON data, and not something the diff may guess at.
329
+ return UNRESOLVED;
330
+ };
331
+ const orderElements = (elements, path, pattern) => {
332
+ if (!hooks?.orderKey || elements.length < 2)
333
+ return elements;
334
+ const keyed = [];
335
+ for (let i = 0; i < elements.length; i++) {
336
+ const key = hooks.orderKey({
337
+ entityType,
338
+ path,
339
+ pattern,
340
+ element: elements[i],
341
+ index: i,
342
+ side,
343
+ });
344
+ // A partial answer is not an answer — leave the order alone.
345
+ if (key === undefined)
346
+ return elements;
347
+ keyed.push({ key, element: elements[i] });
348
+ }
349
+ keyed.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
350
+ return keyed.map((k) => k.element);
351
+ };
352
+ const root = normalizeValue(tree, "", "", "");
353
+ return isPlainObject(root) ? root : {};
354
+ }
355
+ /** Longest order key that may appear inside a path segment before it stops being readable. */
356
+ const MAX_KEYED_SEGMENT = 60;
357
+ /**
358
+ * Flatten a normalized tree to `path → leaf value`. Leaves are JSON primitives,
359
+ * {@link UNRESOLVED}, and empty containers (an empty object/array is itself a
360
+ * value — `Tags: []` differs from no `Tags` at all).
361
+ *
362
+ * Arrays the ordering hook can key are addressed **by that key**
363
+ * (`Tags[#env].Value`) rather than by position. Positional paths would make the
364
+ * diff shift-sensitive: one tag added in the console renames every tag after
365
+ * it, so a single new tag reports as a change to every other tag and a
366
+ * baseline entry stops matching the moment the set changes. Keying holds a
367
+ * property's identity still while the set around it moves.
368
+ *
369
+ * Positional paths remain for arrays the hook cannot key, arrays whose keys
370
+ * collide, and keys too long to read.
371
+ */
372
+ export function flattenDeepProperties(tree, options) {
373
+ const out = new Map();
374
+ const indexSegments = (elements, path, pattern) => {
375
+ const positional = elements.map((_, i) => joinIndex(path, i));
376
+ if (!options?.hooks?.orderKey)
377
+ return positional;
378
+ const keys = [];
379
+ for (let i = 0; i < elements.length; i++) {
380
+ const key = options.hooks.orderKey({
381
+ entityType: options.entityType,
382
+ path,
383
+ pattern,
384
+ element: elements[i],
385
+ index: i,
386
+ side: options.side,
387
+ });
388
+ if (key === undefined || key.length > MAX_KEYED_SEGMENT)
389
+ return positional;
390
+ keys.push(key);
391
+ }
392
+ if (new Set(keys).size !== keys.length)
393
+ return positional;
394
+ return keys.map((k) => `${path}[#${k}]`);
395
+ };
396
+ const walk = (value, path, pattern) => {
397
+ // A normalized held marker (#2162) is one value, not a two-key object to
398
+ // descend into — same reason UNRESOLVED and a JSON primitive are leaves.
399
+ if (isNormalizedHeldElsewhere(value)) {
400
+ out.set(path, value);
401
+ return;
402
+ }
403
+ if (Array.isArray(value)) {
404
+ if (value.length === 0) {
405
+ out.set(path, []);
406
+ return;
407
+ }
408
+ const segments = indexSegments(value, path, pattern);
409
+ value.forEach((el, i) => walk(el, segments[i], joinPattern(pattern)));
410
+ return;
411
+ }
412
+ if (isPlainObject(value)) {
413
+ const keys = Object.keys(value);
414
+ if (keys.length === 0) {
415
+ out.set(path, {});
416
+ return;
417
+ }
418
+ for (const k of keys)
419
+ walk(value[k], joinPath(path, k), joinPath(pattern, k));
420
+ return;
421
+ }
422
+ out.set(path, value);
423
+ };
424
+ for (const [k, v] of Object.entries(tree))
425
+ walk(v, k, k);
426
+ return out;
427
+ }
428
+ /** Structural equality over JSON-shaped values, order-sensitive (post-canonicalization). */
429
+ export function deepValueEqual(a, b) {
430
+ if (a === b)
431
+ return true;
432
+ if (a === null || b === null || a === undefined || b === undefined)
433
+ return false;
434
+ if (typeof a !== "object" || typeof b !== "object")
435
+ return false;
436
+ return JSON.stringify(a) === JSON.stringify(b);
437
+ }
@@ -0,0 +1,54 @@
1
+ import { readFile } from "node:fs/promises";
2
+ /**
3
+ * The message {@link detectLexicons} throws when a scan of the project's
4
+ * source files turns up no `@intentius/chant-lexicon-*` import at all.
5
+ *
6
+ * Named (chant #2222) because one caller has to tell this failure apart from
7
+ * every other one: `chant lint` reports a lexicon it cannot resolve as an
8
+ * error diagnostic, but "this directory declares no lexicon and imports none"
9
+ * is not that. It is a project that lints under the core rules alone, and it
10
+ * has always been allowed to. See {@link isNoLexiconDetected}.
11
+ */
12
+ export const NO_LEXICON_DETECTED_MESSAGE = "No lexicon detected in infrastructure files";
13
+ /** Whether `error` is the {@link NO_LEXICON_DETECTED_MESSAGE} failure. */
14
+ export function isNoLexiconDetected(error) {
15
+ return error instanceof Error && error.message === NO_LEXICON_DETECTED_MESSAGE;
16
+ }
17
+ /**
18
+ * Detects which lexicons are being used by analyzing import statements
19
+ * in the provided infrastructure files. Matches any `@intentius/chant-lexicon-*` package,
20
+ * imported by its root or by a subpath (`@intentius/chant-lexicon-sql/postgres`).
21
+ *
22
+ * @param files - Array of file paths to analyze
23
+ * @returns Array of detected lexicon names
24
+ * @throws Error if no lexicon is detected
25
+ */
26
+ export async function detectLexicons(files) {
27
+ const detectedLexicons = new Set();
28
+ for (const file of files) {
29
+ let content;
30
+ try {
31
+ content = await readFile(file, "utf-8");
32
+ }
33
+ catch (error) {
34
+ // Skip files that can't be read
35
+ continue;
36
+ }
37
+ // Match @intentius/chant-lexicon-<name> in import/export statements.
38
+ // Uses [\s\S] instead of . to handle multiline imports like:
39
+ // import { Foo, Bar } from "@intentius/chant-lexicon-k8s";
40
+ // chant #3648: a subpath import names the same lexicon, so
41
+ // "@intentius/chant-lexicon-sql/clickhouse" detects "sql". A project that
42
+ // imports a lexicon only through its subpaths (every sql project) has no
43
+ // other import for this scan to find.
44
+ const regex = /(?:import|export)\s+[\s\S]*?\s+from\s+['"]@intentius\/chant-lexicon-([a-z][\w-]*)(?:\/[^'"\s]*)?['"]/g;
45
+ for (const match of content.matchAll(regex)) {
46
+ detectedLexicons.add(match[1]);
47
+ }
48
+ }
49
+ // Validate results
50
+ if (detectedLexicons.size === 0) {
51
+ throw new Error(NO_LEXICON_DETECTED_MESSAGE);
52
+ }
53
+ return Array.from(detectedLexicons);
54
+ }
@@ -0,0 +1,70 @@
1
+ import { statSync } from "fs";
2
+ /**
3
+ * Discovery cache for incremental rebuilds.
4
+ *
5
+ * Tracks file mtimes and file→entity mappings so that only changed files
6
+ * need to be re-imported during watch-mode rebuilds.
7
+ */
8
+ export class DiscoveryCache {
9
+ constructor() {
10
+ this.files = new Map();
11
+ }
12
+ /**
13
+ * Check if a file has changed since it was last tracked.
14
+ * Returns true if the file is new or its mtime has changed.
15
+ */
16
+ hasFileChanged(filePath) {
17
+ const entry = this.files.get(filePath);
18
+ if (!entry)
19
+ return true;
20
+ try {
21
+ const stat = statSync(filePath);
22
+ return stat.mtimeMs !== entry.mtime;
23
+ }
24
+ catch {
25
+ // File may have been deleted
26
+ return true;
27
+ }
28
+ }
29
+ /**
30
+ * Record a successful import, storing the file's mtime and entity names.
31
+ */
32
+ trackFileImport(filePath, mtime, entityNames) {
33
+ this.files.set(filePath, { mtime, entityNames });
34
+ }
35
+ /**
36
+ * Invalidate cache entries for the given files.
37
+ * Returns the set of entity names that were invalidated.
38
+ */
39
+ invalidate(changedFiles) {
40
+ const invalidatedEntities = new Set();
41
+ for (const file of changedFiles) {
42
+ const entry = this.files.get(file);
43
+ if (entry) {
44
+ for (const name of entry.entityNames) {
45
+ invalidatedEntities.add(name);
46
+ }
47
+ this.files.delete(file);
48
+ }
49
+ }
50
+ return invalidatedEntities;
51
+ }
52
+ /**
53
+ * Get all tracked file paths.
54
+ */
55
+ trackedFiles() {
56
+ return [...this.files.keys()];
57
+ }
58
+ /**
59
+ * Get entity names for a tracked file.
60
+ */
61
+ getFileEntities(filePath) {
62
+ return this.files.get(filePath)?.entityNames;
63
+ }
64
+ /**
65
+ * Clear all cached data.
66
+ */
67
+ clear() {
68
+ this.files.clear();
69
+ }
70
+ }
@@ -2,7 +2,8 @@ import { type Declarable } from "../declarable.js";
2
2
  /**
3
3
  * Collects all declarable entities from imported modules.
4
4
  * CompositeInstance exports are expanded into individual entities
5
- * with `{exportName}_{memberName}` naming.
5
+ * with `{exportName}_{memberName}` naming, and so are host composite
6
+ * instances the fold resolved (chant#3612, ./host-composite.ts).
6
7
  * LexiconOutput exports are also collected so that build() can
7
8
  * extract them and pass them to the serializer.
8
9
  *