@intentius/chant 0.124.12 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +36 -4
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +8 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.d.ts +65 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.d.ts +4 -2
- package/dist/workspace/identity.d.ts.map +1 -1
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +3 -14
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +36 -6
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +3 -2
- package/src/gate-decision-identity.test.ts +176 -0
- package/src/gate-decision.ts +100 -22
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-point.test.ts +1 -0
- package/src/op/op-waves-run.ts +5 -4
- package/src/op/op-waves.test.ts +14 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/identity-gate-rule.ts +109 -0
- package/src/workspace/identity.ts +8 -18
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +5 -30
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudFormation-type → native-spec tier for the CDK carve advisor (#1056).
|
|
3
|
+
*
|
|
4
|
+
* The Terraform path's hardest layer — translating `aws_s3_bucket` into
|
|
5
|
+
* `AWS::S3::Bucket` and a tier — does not exist here: a synthesized template is
|
|
6
|
+
* already in CloudFormation type space, which is the space
|
|
7
|
+
* `AWS_CARVE_TYPES.nativeType` is written in. So this is the same table read
|
|
8
|
+
* from the other end, not a second table to keep in step. Adding an AWS type to
|
|
9
|
+
* the carve-out table lights it up for both advisors at once.
|
|
10
|
+
*
|
|
11
|
+
* `mapsTo` is the CloudFormation type itself, because that identity is the
|
|
12
|
+
* point: chant's AWS lexicon constructors take CloudFormation PascalCase props,
|
|
13
|
+
* so a CDK resource needs no translation to become one.
|
|
14
|
+
*/
|
|
15
|
+
import { AWS_CARVE_TYPES } from "../terraform/aws-resources.js";
|
|
16
|
+
/**
|
|
17
|
+
* CloudFormation type → tier. Two Terraform types can name one CloudFormation
|
|
18
|
+
* type (`aws_lb` and `aws_alb` are the same load balancer); the first entry
|
|
19
|
+
* wins, and since aliases share a tier by construction there is nothing to
|
|
20
|
+
* reconcile.
|
|
21
|
+
*/
|
|
22
|
+
export const CFN_TIER_MAP = (() => {
|
|
23
|
+
const map = {};
|
|
24
|
+
for (const entry of AWS_CARVE_TYPES) {
|
|
25
|
+
if (map[entry.nativeType])
|
|
26
|
+
continue;
|
|
27
|
+
map[entry.nativeType] = { tier: entry.tier, mapsTo: entry.nativeType };
|
|
28
|
+
}
|
|
29
|
+
return map;
|
|
30
|
+
})();
|
|
31
|
+
/** The chant AWS lexicon constructor a CloudFormation type would carve into. */
|
|
32
|
+
export const CFN_CTOR = (() => {
|
|
33
|
+
var _a;
|
|
34
|
+
const map = {};
|
|
35
|
+
for (const entry of AWS_CARVE_TYPES)
|
|
36
|
+
map[_a = entry.nativeType] ?? (map[_a] = entry.ctor);
|
|
37
|
+
return map;
|
|
38
|
+
})();
|
|
39
|
+
export function resolveCfnTier(cfnType) {
|
|
40
|
+
return CFN_TIER_MAP[cfnType] ?? null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A nested stack is an assembly of its own: its resources live in a separate
|
|
44
|
+
* template that this advisor does not descend into, so carving the
|
|
45
|
+
* `AWS::CloudFormation::Stack` resource means carving everything under it.
|
|
46
|
+
*/
|
|
47
|
+
export const NESTED_STACK_TYPE = "AWS::CloudFormation::Stack";
|
|
48
|
+
/**
|
|
49
|
+
* CloudFormation resources CDK synthesizes for its own bookkeeping. They
|
|
50
|
+
* describe the synthesis, not the infrastructure, so they never appear in the
|
|
51
|
+
* ranking.
|
|
52
|
+
*/
|
|
53
|
+
export const SCAFFOLDING_TYPES = new Set(["AWS::CDK::Metadata"]);
|
|
54
|
+
/**
|
|
55
|
+
* Template parameters CDK adds for bootstrap and asset plumbing. A reference to
|
|
56
|
+
* one is not a sign the resource is parameterized by its author — it is the
|
|
57
|
+
* synthesizer talking to itself — so these do not mark a construct dynamic.
|
|
58
|
+
*/
|
|
59
|
+
export function isScaffoldingParameter(name) {
|
|
60
|
+
return (name === "BootstrapVersion" ||
|
|
61
|
+
name === "CdkBootstrapVersion" ||
|
|
62
|
+
name.startsWith("AssetParameters") ||
|
|
63
|
+
name.startsWith("BootstrapVersion"));
|
|
64
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The parts of a CDK cloud assembly the carve advisor reads (#1056).
|
|
3
|
+
*
|
|
4
|
+
* A cloud assembly is already JSON, so there is no parser to install and no
|
|
5
|
+
* expression AST to resolve — the Terraform path's two hardest layers do not
|
|
6
|
+
* exist here. Three files carry everything the advisor needs:
|
|
7
|
+
*
|
|
8
|
+
* - `manifest.json` — which artifacts are stacks, which template file each
|
|
9
|
+
* one synthesized to, and (crucially) whether any context lookup went
|
|
10
|
+
* unresolved.
|
|
11
|
+
* - `tree.json` — the construct tree, so CloudFormation resources can be
|
|
12
|
+
* grouped back under the construct that emitted them. Optional: CDK can be
|
|
13
|
+
* told not to write it, and the advisor degrades to a coarser grouping.
|
|
14
|
+
* - `*.template.json` — the CloudFormation templates themselves, already in
|
|
15
|
+
* `AWS::*` type space, which is exactly what the AWS tier map keys on.
|
|
16
|
+
*
|
|
17
|
+
* Everything here is post-jsii, so a Python or Java CDK app reads through the
|
|
18
|
+
* same code path as a TypeScript one. Nothing in this module reads CDK source.
|
|
19
|
+
*
|
|
20
|
+
* The declarations are deliberately loose — every field optional, unknown keys
|
|
21
|
+
* tolerated — because the assembly schema is not chant's to own and gains
|
|
22
|
+
* fields between CDK releases.
|
|
23
|
+
*/
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One change-set document across planners (#3181).
|
|
3
|
+
*
|
|
4
|
+
* Several things plan changes, each with its own output: `chant lifecycle
|
|
5
|
+
* plan` for the cloud lexicons, terraform, tofu and choudoufu plans, and a
|
|
6
|
+
* warden's reconcile plan. This module is the one typed document they all
|
|
7
|
+
* become, so a reader can ask one question of every plan in a run: what will
|
|
8
|
+
* change, where, and how risky it is. Its schema is
|
|
9
|
+
* `./workspace/change-set.schema.json`, part of the workspace read contract.
|
|
10
|
+
*
|
|
11
|
+
* Each planner reaches it through an adapter that returns a
|
|
12
|
+
* {@link ChangeSetPart}: one member and its entries. The lifecycle and
|
|
13
|
+
* reconcile adapters are here; the terraform-family ones live in the
|
|
14
|
+
* terraform lexicon's `change-set` subpath. {@link composeChangeSet} joins
|
|
15
|
+
* the parts.
|
|
16
|
+
*
|
|
17
|
+
* ## The digest
|
|
18
|
+
*
|
|
19
|
+
* Every member carries the plan digest a gate on that member alone binds
|
|
20
|
+
* (#2300): `terraformPlanDigest` for a terraform-family root, and here
|
|
21
|
+
* `computePlanDigest("lifecycle-plan", …)` and `computePlanDigest(
|
|
22
|
+
* "reconcile-plan", …)`. {@link changeSetDigest} over the sorted `{ member,
|
|
23
|
+
* planDigest }` pairs is the set digest #3049 describes, and a wave's digest
|
|
24
|
+
* is that function over the wave's members.
|
|
25
|
+
*
|
|
26
|
+
* The document's digest is {@link changeSetDocumentDigest}: the set digest,
|
|
27
|
+
* each member's status and holes, the entries and the side effects. An
|
|
28
|
+
* approval of the document binds what it says as well as the plans it came
|
|
29
|
+
* from, so a pull request's apply that resumes from a record (#3464) can
|
|
30
|
+
* check a re-planned member against the record's entries without trusting
|
|
31
|
+
* whoever wrote the record. The summary is computed from the entries and is
|
|
32
|
+
* not hashed. A change to how chant projects a plan into entries moves the
|
|
33
|
+
* document's digest, so an approval given under one chant does not carry to
|
|
34
|
+
* an apply under a chant that projects the same plan differently.
|
|
35
|
+
*
|
|
36
|
+
* ## The import graph
|
|
37
|
+
*
|
|
38
|
+
* terragucci runs this in customer CI as one bundled file with no TypeScript
|
|
39
|
+
* toolchain (#3421). Everything here imports `./lifecycle/plan-digest` and
|
|
40
|
+
* types only, and `change-set-bundle.test.ts` holds that.
|
|
41
|
+
*/
|
|
42
|
+
import { computePlanDigest } from "./lifecycle/plan-digest.js";
|
|
43
|
+
/** The schema a change-set document names in `$schema`. */
|
|
44
|
+
export const CHANGE_SET_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/change-set/v1/change-set.schema.json";
|
|
45
|
+
/** The read-contract version the document follows. */
|
|
46
|
+
export const CHANGE_SET_CONTRACT = 1;
|
|
47
|
+
/** Every action, in the order the summary lists them. */
|
|
48
|
+
export const CHANGE_SET_ACTIONS = ["create", "update", "replace", "delete", "read", "no-op", "forget"];
|
|
49
|
+
const byString = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
|
|
50
|
+
function entryKey(e) {
|
|
51
|
+
return `${e.member}\u0000${e.address}\u0000${e.deposed ?? ""}\u0000${e.action}`;
|
|
52
|
+
}
|
|
53
|
+
const bySideEffect = (a, b) => byString(a.member, b.member) || byString(a.address, b.address) || byString(a.trigger ?? "", b.trigger ?? "");
|
|
54
|
+
/**
|
|
55
|
+
* The set digest over members' plan digests: `computePlanDigest("change-set",
|
|
56
|
+
* …)` over `{ member, planDigest }` sorted by member. Order-independent,
|
|
57
|
+
* and different whenever one member's plan digest is. Refuses a set that
|
|
58
|
+
* names a member twice, which has no single plan for that member.
|
|
59
|
+
*
|
|
60
|
+
* Provisional members are left out: their plans may stand on values that do
|
|
61
|
+
* not exist yet, so an approval of this digest never covers them.
|
|
62
|
+
*/
|
|
63
|
+
export function changeSetDigest(members) {
|
|
64
|
+
const pairs = members
|
|
65
|
+
.filter((m) => m.provisional !== true)
|
|
66
|
+
.map((m) => ({ member: m.member, planDigest: m.planDigest }))
|
|
67
|
+
.sort((a, b) => byString(a.member, b.member));
|
|
68
|
+
for (let i = 1; i < pairs.length; i++) {
|
|
69
|
+
if (pairs[i - 1].member === pairs[i].member)
|
|
70
|
+
throw new Error(`the change set names member ${pairs[i].member} twice`);
|
|
71
|
+
}
|
|
72
|
+
return computePlanDigest("change-set", pairs);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The document's digest: `computePlanDigest("change-set-document", …)` over
|
|
76
|
+
* the set digest ({@link changeSetDigest}), each member's name, status and
|
|
77
|
+
* holes, the entries and the side effects. Members are sorted by name and
|
|
78
|
+
* entries and side effects by the keys {@link composeChangeSet} sorts them by,
|
|
79
|
+
* so order makes no difference.
|
|
80
|
+
*
|
|
81
|
+
* A provisional member is left out, with its entries and side effects, as
|
|
82
|
+
* the set digest leaves it out: no approval of the document covers it.
|
|
83
|
+
*/
|
|
84
|
+
export function changeSetDocumentDigest(doc) {
|
|
85
|
+
const provisional = new Set(doc.members.filter((m) => m.provisional === true).map((m) => m.member));
|
|
86
|
+
const members = doc.members
|
|
87
|
+
.filter((m) => !provisional.has(m.member))
|
|
88
|
+
.map((m) => ({ member: m.member, status: m.status, holes: m.holes }))
|
|
89
|
+
.sort((a, b) => byString(a.member, b.member));
|
|
90
|
+
const entries = doc.entries.filter((e) => !provisional.has(e.member)).sort((a, b) => byString(entryKey(a), entryKey(b)));
|
|
91
|
+
const sideEffects = (doc.sideEffects ?? []).filter((s) => !provisional.has(s.member)).sort(bySideEffect);
|
|
92
|
+
return computePlanDigest("change-set-document", { set: changeSetDigest(doc.members), members, entries, sideEffects });
|
|
93
|
+
}
|
|
94
|
+
/** The summary of a set of members and entries. */
|
|
95
|
+
export function summarizeChangeSet(members, entries) {
|
|
96
|
+
const actions = Object.fromEntries(CHANGE_SET_ACTIONS.map((a) => [a, 0]));
|
|
97
|
+
const types = {};
|
|
98
|
+
const byMember = {};
|
|
99
|
+
const deletes = [];
|
|
100
|
+
const replacements = [];
|
|
101
|
+
const bump = (into, key, action) => {
|
|
102
|
+
const counts = (into[key] ?? (into[key] = {}));
|
|
103
|
+
counts[action] = (counts[action] ?? 0) + 1;
|
|
104
|
+
};
|
|
105
|
+
for (const e of entries) {
|
|
106
|
+
actions[e.action]++;
|
|
107
|
+
bump(types, e.type, e.action);
|
|
108
|
+
bump(byMember, e.member, e.action);
|
|
109
|
+
const named = {
|
|
110
|
+
member: e.member, address: e.address, type: e.type,
|
|
111
|
+
...(e.deposed !== undefined ? { deposed: e.deposed } : {}),
|
|
112
|
+
...(e.disruption !== undefined ? { disruption: e.disruption } : {}),
|
|
113
|
+
};
|
|
114
|
+
if (e.action === "delete")
|
|
115
|
+
deletes.push(named);
|
|
116
|
+
if (e.action === "replace")
|
|
117
|
+
replacements.push(named);
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
members: members.length,
|
|
121
|
+
entries: entries.length,
|
|
122
|
+
actions,
|
|
123
|
+
types: sortKeys(types),
|
|
124
|
+
byMember: sortKeys(byMember),
|
|
125
|
+
deletes,
|
|
126
|
+
replacements,
|
|
127
|
+
failed: members.filter((m) => m.status === "failed").map((m) => m.member),
|
|
128
|
+
holes: members.reduce((n, m) => n + m.holes.length, 0),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function sortKeys(o) {
|
|
132
|
+
return Object.fromEntries(Object.entries(o).sort(([a], [b]) => byString(a, b)));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Join adapters' parts into one document: members sorted by name, entries
|
|
136
|
+
* by member, address, deposed key and action, the summary, and the digest.
|
|
137
|
+
* Throws when two parts name the same member, or an entry names a member
|
|
138
|
+
* other than its part's.
|
|
139
|
+
*/
|
|
140
|
+
export function composeChangeSet(parts, options = {}) {
|
|
141
|
+
const members = parts.map((p) => p.member).sort((a, b) => byString(a.member, b.member));
|
|
142
|
+
const entries = [];
|
|
143
|
+
for (const part of parts) {
|
|
144
|
+
for (const e of part.entries) {
|
|
145
|
+
if (e.member !== part.member.member)
|
|
146
|
+
throw new Error(`an entry at ${e.address} names member ${e.member}, inside member ${part.member.member}`);
|
|
147
|
+
entries.push(e);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
entries.sort((a, b) => byString(entryKey(a), entryKey(b)));
|
|
151
|
+
const sideEffects = parts
|
|
152
|
+
.flatMap((p) => (p.sideEffects ?? []).map((s) => ({ member: p.member.member, ...s })))
|
|
153
|
+
.sort(bySideEffect);
|
|
154
|
+
const digest = changeSetDocumentDigest({ members, entries, sideEffects });
|
|
155
|
+
return {
|
|
156
|
+
$schema: CHANGE_SET_SCHEMA_ID,
|
|
157
|
+
contract: CHANGE_SET_CONTRACT,
|
|
158
|
+
...(options.chant !== undefined ? { chant: options.chant } : {}),
|
|
159
|
+
digest,
|
|
160
|
+
members,
|
|
161
|
+
entries,
|
|
162
|
+
...(sideEffects.length > 0 ? { sideEffects } : {}),
|
|
163
|
+
summary: summarizeChangeSet(members, entries),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Whether a document's digest is the one its members, entries and side
|
|
168
|
+
* effects give ({@link changeSetDocumentDigest}). A document that names a
|
|
169
|
+
* member twice has no digest and is not verified.
|
|
170
|
+
*/
|
|
171
|
+
export function verifyChangeSetDigest(doc) {
|
|
172
|
+
try {
|
|
173
|
+
return changeSetDocumentDigest(doc) === doc.digest;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function lifecycleAttributes(entry) {
|
|
180
|
+
const because = new Set(entry.disruptionBecause ?? []);
|
|
181
|
+
return (entry.deltas ?? []).map((d) => ({
|
|
182
|
+
path: d.path,
|
|
183
|
+
...(d.oldValue !== undefined ? { before: d.oldValue } : {}),
|
|
184
|
+
...(d.newValue !== undefined ? { after: d.newValue } : {}),
|
|
185
|
+
...(because.has(d.path) ? { forcesReplacement: true } : {}),
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* A chant member's part, from `chant lifecycle plan <env> --json`.
|
|
190
|
+
*
|
|
191
|
+
* `create`, `update`, `delete` and `noop` map across. An `update` whose
|
|
192
|
+
* lexicon says it replaces or destroys becomes a `replace`. An `effect`
|
|
193
|
+
* entry is the receipt its effect step writes: a `create` when the receipt
|
|
194
|
+
* is absent, else an `update`. `unobserved` entries are holes. `adopt` and
|
|
195
|
+
* `runtime` propose nothing and are left out.
|
|
196
|
+
*
|
|
197
|
+
* The member's plan digest is `computePlanDigest("lifecycle-plan", plan)`
|
|
198
|
+
* over the whole document, which carries no timestamp or run id.
|
|
199
|
+
*/
|
|
200
|
+
export function lifecyclePlanPart(input) {
|
|
201
|
+
const { plan } = input;
|
|
202
|
+
const fallback = input.lexicon ?? "chant";
|
|
203
|
+
const entries = [];
|
|
204
|
+
const holes = [];
|
|
205
|
+
for (const e of plan.entries ?? []) {
|
|
206
|
+
const lexicon = e.lexicon ?? fallback;
|
|
207
|
+
if (e.action === "unobserved") {
|
|
208
|
+
holes.push({ address: e.name, ...(e.type ? { type: e.type } : {}), reason: e.unobservedReason ?? "unobserved" });
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
let action;
|
|
212
|
+
let disruption;
|
|
213
|
+
switch (e.action) {
|
|
214
|
+
case "create":
|
|
215
|
+
action = "create";
|
|
216
|
+
break;
|
|
217
|
+
case "noop":
|
|
218
|
+
action = "no-op";
|
|
219
|
+
break;
|
|
220
|
+
case "delete":
|
|
221
|
+
action = "delete";
|
|
222
|
+
disruption = "destroy";
|
|
223
|
+
break;
|
|
224
|
+
case "effect":
|
|
225
|
+
action = e.effectReason === "receipt-absent" ? "create" : "update";
|
|
226
|
+
break;
|
|
227
|
+
case "update":
|
|
228
|
+
disruption = e.disruption ?? "unknown";
|
|
229
|
+
action = disruption === "replace" || disruption === "destroy" ? "replace" : "update";
|
|
230
|
+
break;
|
|
231
|
+
default: continue; // adopt, runtime: not a proposal
|
|
232
|
+
}
|
|
233
|
+
entries.push({
|
|
234
|
+
member: input.member,
|
|
235
|
+
lexicon,
|
|
236
|
+
planner: "chant",
|
|
237
|
+
address: e.name,
|
|
238
|
+
type: e.type ?? "unknown",
|
|
239
|
+
...(e.physicalId ? { id: e.physicalId } : {}),
|
|
240
|
+
action,
|
|
241
|
+
...(disruption ? { disruption } : {}),
|
|
242
|
+
scope: plan.env,
|
|
243
|
+
attributes: lifecycleAttributes(e),
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
const lexicons = [...new Set(entries.map((e) => e.lexicon))].sort();
|
|
247
|
+
return {
|
|
248
|
+
member: {
|
|
249
|
+
member: input.member,
|
|
250
|
+
lexicon: lexicons.length === 1 ? lexicons[0] : fallback,
|
|
251
|
+
planner: "chant",
|
|
252
|
+
scope: plan.env,
|
|
253
|
+
status: "planned",
|
|
254
|
+
planDigest: computePlanDigest("lifecycle-plan", plan),
|
|
255
|
+
holes,
|
|
256
|
+
},
|
|
257
|
+
entries,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
function topLevelKeys(value) {
|
|
261
|
+
return value && typeof value === "object" && !Array.isArray(value) ? Object.keys(value).sort() : [];
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* A warden member's part, from the reconcile `ChangeSet`s it planned
|
|
265
|
+
* (`./reconcile.ts`). The address is `<resourceType>.<key>`, unique within
|
|
266
|
+
* one org, and the scope is the org. An update's disruption is `unknown`:
|
|
267
|
+
* the reconcile model says nothing about it.
|
|
268
|
+
*
|
|
269
|
+
* The plan digest covers each change set's org and entries, and leaves out
|
|
270
|
+
* the managed counts, which are guardrail denominators rather than changes.
|
|
271
|
+
*/
|
|
272
|
+
export function reconcilePlanPart(input) {
|
|
273
|
+
const sets = (Array.isArray(input.plan) ? input.plan : [input.plan])
|
|
274
|
+
.map((cs) => ({ org: cs.org, entries: [...cs.entries].sort((a, b) => byString(`${a.resourceType}\u0000${a.key}`, `${b.resourceType}\u0000${b.key}`)) }))
|
|
275
|
+
.sort((a, b) => byString(a.org, b.org));
|
|
276
|
+
const lexicon = input.lexicon ?? "github";
|
|
277
|
+
const entries = [];
|
|
278
|
+
for (const cs of sets) {
|
|
279
|
+
for (const e of cs.entries) {
|
|
280
|
+
const attributes = e.kind === "update"
|
|
281
|
+
? (e.fields ?? []).map((f) => ({ path: f.field, ...(f.before !== undefined ? { before: f.before } : {}), ...(f.after !== undefined ? { after: f.after } : {}) }))
|
|
282
|
+
: e.kind === "create"
|
|
283
|
+
? topLevelKeys(e.after).map((k) => ({ path: k, after: e.after[k] }))
|
|
284
|
+
: [];
|
|
285
|
+
entries.push({
|
|
286
|
+
member: input.member,
|
|
287
|
+
lexicon,
|
|
288
|
+
planner: "warden",
|
|
289
|
+
address: `${e.resourceType}.${e.key}`,
|
|
290
|
+
type: e.resourceType,
|
|
291
|
+
name: e.key,
|
|
292
|
+
action: e.kind,
|
|
293
|
+
...(e.kind === "delete" ? { disruption: "destroy" } : e.kind === "update" ? { disruption: "unknown" } : {}),
|
|
294
|
+
scope: cs.org,
|
|
295
|
+
attributes,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
const orgs = [...new Set(sets.map((s) => s.org))];
|
|
300
|
+
return {
|
|
301
|
+
member: {
|
|
302
|
+
member: input.member,
|
|
303
|
+
lexicon,
|
|
304
|
+
planner: "warden",
|
|
305
|
+
...(orgs.length === 1 ? { scope: orgs[0] } : {}),
|
|
306
|
+
status: "planned",
|
|
307
|
+
planDigest: computePlanDigest("reconcile-plan", sets),
|
|
308
|
+
holes: [],
|
|
309
|
+
},
|
|
310
|
+
entries,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Child Project — represents a nested project directory that gets built
|
|
3
|
+
* independently and referenced from a parent as a single deployment unit.
|
|
4
|
+
*
|
|
5
|
+
* Lexicons create ChildProjectInstance via their own factory (e.g. `nestedStack()`).
|
|
6
|
+
* The core build pipeline detects these and recursively builds children.
|
|
7
|
+
*/
|
|
8
|
+
import { DECLARABLE_MARKER } from "./declarable.js";
|
|
9
|
+
/**
|
|
10
|
+
* Marker symbol for child project identification.
|
|
11
|
+
*/
|
|
12
|
+
export const CHILD_PROJECT_MARKER = Symbol.for("chant.childProject");
|
|
13
|
+
/**
|
|
14
|
+
* Type guard for ChildProjectInstance.
|
|
15
|
+
*/
|
|
16
|
+
export function isChildProject(value) {
|
|
17
|
+
return (typeof value === "object" &&
|
|
18
|
+
value !== null &&
|
|
19
|
+
CHILD_PROJECT_MARKER in value &&
|
|
20
|
+
value[CHILD_PROJECT_MARKER] === true);
|
|
21
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The claimed-field set (#2160) — which properties this declaration ever set.
|
|
3
|
+
*
|
|
4
|
+
* chant's ownership question has always been answered per resource, from a
|
|
5
|
+
* marker: is this thing mine. The finer question was never asked. A live
|
|
6
|
+
* property tree carries fields nobody declared — an autoscaler's replica count,
|
|
7
|
+
* a controller's annotation, a value a person typed into a console — and the
|
|
8
|
+
* deep diff (./lifecycle/deep-diff.ts) reported every one of them as a
|
|
9
|
+
* difference, because a difference is all a two-way comparison can produce.
|
|
10
|
+
*
|
|
11
|
+
* Every lexicon has been paying for that in hand-written knowledge.
|
|
12
|
+
* `DeepNormalizationHooks.prune` is where the noise goes, and three of the four
|
|
13
|
+
* hooks exist because the live tree holds fields the declaration never
|
|
14
|
+
* mentions. Kubernetes is the one substrate that escapes it: the API server
|
|
15
|
+
* records a field manager per field (`metadata.managedFields`), so a foreign
|
|
16
|
+
* write is a fact about the object rather than a rule somebody maintains.
|
|
17
|
+
* `lexicons/gcp/src/deep-observe.ts` says why nobody else can do that — "a REST
|
|
18
|
+
* payload carries no field ownership" — and answers with a static per-kind
|
|
19
|
+
* table instead.
|
|
20
|
+
*
|
|
21
|
+
* The declaration is the table they are missing. A `ResourceDeclarable`'s
|
|
22
|
+
* `props` are exactly the fields chant set, they are available on every
|
|
23
|
+
* substrate, and they come from the same build that produced the entity.
|
|
24
|
+
* Nothing has to come back from the provider.
|
|
25
|
+
*
|
|
26
|
+
* ## The grammar is the diff's grammar
|
|
27
|
+
*
|
|
28
|
+
* A claim is a set of property paths in the form `flattenDeepProperties`
|
|
29
|
+
* produces: `spec.replicas`, `Tags[#env].Value`, `ingress[0].fromPort`. Same
|
|
30
|
+
* hooks, same normalization, same flattening — so a path in the claim and a
|
|
31
|
+
* path in the diff are the same string or they are different fields. Deriving
|
|
32
|
+
* the claim any other way (walking raw props, say) would give a set that agrees
|
|
33
|
+
* with the diff for most trees and disagrees for exactly the ones the hooks
|
|
34
|
+
* were written for.
|
|
35
|
+
*
|
|
36
|
+
* ## Membership is exact, deliberately
|
|
37
|
+
*
|
|
38
|
+
* A claimed path is matched exactly, never by its index-erased pattern
|
|
39
|
+
* (`Tags[].Value`). The pattern is the right test for
|
|
40
|
+
* {@link import("./deep-observation.js").DeepNode.counterpart}, which asks a
|
|
41
|
+
* shape question ("did source declare tag values at all") before array order is
|
|
42
|
+
* canonical. Classification asks a value question, and it pairs a declared
|
|
43
|
+
* value with a live one at the same path. A pattern match would answer
|
|
44
|
+
* "declared" for a path that has no declared value to compare against, which is
|
|
45
|
+
* neither of the two declared classifications and would quietly become a third
|
|
46
|
+
* meaning of "drift".
|
|
47
|
+
*
|
|
48
|
+
* ## What the claim does not decide
|
|
49
|
+
*
|
|
50
|
+
* It does not prune. A field chant never declared still reaches the diff, still
|
|
51
|
+
* appears in the report, and still carries its live value — it is reported as
|
|
52
|
+
* unclaimed rather than dropped, because chant #1191 already lost a
|
|
53
|
+
* console-added label by pruning what it could not attribute. What the claim
|
|
54
|
+
* changes is the verdict: unclaimed is not drift, and drift is the only thing
|
|
55
|
+
* that may become an update.
|
|
56
|
+
*/
|
|
57
|
+
import { deepValueEqual, flattenDeepProperties, normalizeDeepProperties, } from "./deep-observation.js";
|
|
58
|
+
/** An empty claim — a declaration with no props, and the safe default. */
|
|
59
|
+
export const NO_CLAIMED_FIELDS = { paths: new Set() };
|
|
60
|
+
/**
|
|
61
|
+
* Build a claim from an already-normalized declared property tree.
|
|
62
|
+
*
|
|
63
|
+
* `options` must be the same {@link FlattenDeepOptions} the diff flattens the
|
|
64
|
+
* declared side with, or the two disagree about keyed list segments.
|
|
65
|
+
*/
|
|
66
|
+
export function claimedFieldsOfTree(declared, options) {
|
|
67
|
+
const flat = flattenDeepProperties(declared, {
|
|
68
|
+
entityType: options.entityType,
|
|
69
|
+
side: "declared",
|
|
70
|
+
...(options.hooks ? { hooks: options.hooks } : {}),
|
|
71
|
+
});
|
|
72
|
+
return { paths: new Set(flat.keys()) };
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Build a claim straight from a declaration's raw `props` — the entry point for
|
|
76
|
+
* a consumer that has an entity and no diff.
|
|
77
|
+
*
|
|
78
|
+
* Normalizes with the lexicon's own hooks first, exactly as the diff does, so
|
|
79
|
+
* pruned and masked paths land the same way on both routes. `livePaths` is the
|
|
80
|
+
* counterpart set (`deepPathSet` over the live tree) where the caller has one:
|
|
81
|
+
* without it the pass runs one-sided and any hook gated on
|
|
82
|
+
* {@link import("./deep-observation.js").DeepNode.counterpart} sees `"unknown"`,
|
|
83
|
+
* which is the honest answer and prunes nothing default-related.
|
|
84
|
+
*/
|
|
85
|
+
export function claimedFieldsOfProps(props, options) {
|
|
86
|
+
const normalized = normalizeDeepProperties(props, {
|
|
87
|
+
entityType: options.entityType,
|
|
88
|
+
side: "declared",
|
|
89
|
+
...(options.hooks ? { hooks: options.hooks } : {}),
|
|
90
|
+
...(options.livePaths ? { counterpartPaths: options.livePaths } : {}),
|
|
91
|
+
});
|
|
92
|
+
return claimedFieldsOfTree(normalized, options);
|
|
93
|
+
}
|
|
94
|
+
/** True when this declaration set the property at `path`. */
|
|
95
|
+
export function isClaimed(claimed, path) {
|
|
96
|
+
return claimed !== undefined && claimed.paths.has(path);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The claim as a sorted array — the wire form, for
|
|
100
|
+
* {@link import("./deep-observation.js").DeepResourceObservation.claimedFields}
|
|
101
|
+
* and for anything serializing a result to JSON.
|
|
102
|
+
*/
|
|
103
|
+
export function claimedFieldPaths(claimed) {
|
|
104
|
+
return [...claimed.paths].sort();
|
|
105
|
+
}
|
|
106
|
+
/** Rebuild a claim from its wire form. */
|
|
107
|
+
export function claimedFieldsFromPaths(paths) {
|
|
108
|
+
return { paths: new Set(paths) };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Classify one live value against the claim.
|
|
112
|
+
*
|
|
113
|
+
* `declaredValue` is only read when the path is claimed; pass whatever the
|
|
114
|
+
* declared tree holds there (including `undefined`, which is a legal declared
|
|
115
|
+
* value on a claimed path only in the sense that the flattener never emits it).
|
|
116
|
+
*/
|
|
117
|
+
export function classifyLiveField(input) {
|
|
118
|
+
if (!isClaimed(input.claimed, input.path))
|
|
119
|
+
return "undeclared";
|
|
120
|
+
return deepValueEqual(input.declaredValue, input.liveValue) ? "declared-equal" : "declared-changed";
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Who holds an undeclared live field, and which source said so.
|
|
124
|
+
*
|
|
125
|
+
* The manager wins where the substrate records one: "owned by `hpa-controller`"
|
|
126
|
+
* and "chant never set it" are the same verdict with very different amounts of
|
|
127
|
+
* information in them, and an operator can act on the first. The claim is the
|
|
128
|
+
* fallback, and it answers on every substrate.
|
|
129
|
+
*/
|
|
130
|
+
export function heldBy(fieldOwners, path) {
|
|
131
|
+
const manager = fieldOwners?.[path];
|
|
132
|
+
if (manager)
|
|
133
|
+
return { holder: manager, source: "field-manager" };
|
|
134
|
+
return { source: "claimed-fields" };
|
|
135
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one place chant assembles `build()`'s options for a project directory.
|
|
3
|
+
*
|
|
4
|
+
* chant #2002 — `chant build` (./commands/build.ts) and the `policyGate` Op
|
|
5
|
+
* step (../lint/policy.ts's `evaluateProjectPolicies`) both build the same
|
|
6
|
+
* directory, and each used to assemble that option object itself. The two lists
|
|
7
|
+
* drifted to nine options against two: the gate built with fold off (the path
|
|
8
|
+
* `chant build` retired as its default in #1134), without the project's config
|
|
9
|
+
* (so serializers lost their lexicon-scoped dialect settings and a policy
|
|
10
|
+
* reading `ctx.docs` inspected different documents), and without `buildRoots`
|
|
11
|
+
* (so config-declared roots contributed no entities at all). A gate can only
|
|
12
|
+
* decide on a build `chant build` would produce if the two are assembled from
|
|
13
|
+
* one place, so they are.
|
|
14
|
+
*
|
|
15
|
+
* Two functions rather than one because the *modes* are needed earlier than the
|
|
16
|
+
* rest: `chant build` arms sandboxed policy execution from the resolved
|
|
17
|
+
* `sandbox` before it loads any policy module, which happens before build-time
|
|
18
|
+
* parameters and the ownership marker exist. {@link resolveBuildModes} is that
|
|
19
|
+
* early half; {@link resolveProjectBuildOptions} takes its result and assembles
|
|
20
|
+
* everything `build()` is given.
|
|
21
|
+
*/
|
|
22
|
+
import { resolveFoldEnabled, resolveSandboxEnabled } from "../config.js";
|
|
23
|
+
import { collectBuildRootContributors, resolveLexiconVersions } from "./plugins.js";
|
|
24
|
+
/**
|
|
25
|
+
* Resolve this build's execution modes: an explicit CLI flag wins over
|
|
26
|
+
* `chant.config.ts`'s `build.fold`/`build.sandbox`, which wins over the default
|
|
27
|
+
* (fold on, sandbox off). Callers with no flags to offer (the `policyGate` step)
|
|
28
|
+
* pass no overrides and get the project's own answer.
|
|
29
|
+
*/
|
|
30
|
+
export function resolveBuildModes(config, overrides) {
|
|
31
|
+
return {
|
|
32
|
+
fold: resolveFoldEnabled(config, overrides?.fold),
|
|
33
|
+
sandbox: resolveSandboxEnabled(config, overrides?.sandbox),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Assemble the option object `build()` takes for a project directory.
|
|
38
|
+
*
|
|
39
|
+
* Every option here is derived from the project (its config, its plugins, its
|
|
40
|
+
* resolved parameters) rather than from the command that asked, so two callers
|
|
41
|
+
* handing in the same project get byte-identical builds. A new option belongs
|
|
42
|
+
* in this function, never at a call site.
|
|
43
|
+
*/
|
|
44
|
+
export function resolveProjectBuildOptions(input) {
|
|
45
|
+
const { config, configDir, plugins, modes, ownership, buildParams, telemetry } = input;
|
|
46
|
+
// #1039 — each loaded plugin's registered intrinsics (e.g. AWS's `Sub`), so
|
|
47
|
+
// a file using a registered intrinsic tagged template folds instead of
|
|
48
|
+
// unconditionally falling back to run. `intrinsics` is an optional plugin
|
|
49
|
+
// extension, hence the guard.
|
|
50
|
+
const intrinsics = plugins?.flatMap((plugin) => plugin.intrinsics?.() ?? []) ?? [];
|
|
51
|
+
// #1063 — the same loaded plugins, by NAME, are this build's allowlist for
|
|
52
|
+
// following a bare import specifier into a lexicon package (so `Azure`,
|
|
53
|
+
// `GCP`, `S3Actions`, `CI` fold as values).
|
|
54
|
+
const lexicons = plugins?.map((plugin) => plugin.name) ?? [];
|
|
55
|
+
return {
|
|
56
|
+
ownership,
|
|
57
|
+
...(telemetry ? { telemetry } : {}),
|
|
58
|
+
config: config,
|
|
59
|
+
fold: modes.fold,
|
|
60
|
+
sandbox: modes.sandbox,
|
|
61
|
+
intrinsics,
|
|
62
|
+
lexicons,
|
|
63
|
+
// chant #1442 — which lexicon VERSION interpreted each declaration.
|
|
64
|
+
lexiconVersions: resolveLexiconVersions(lexicons),
|
|
65
|
+
buildParams,
|
|
66
|
+
// #1548 piece 3 — config-declared build roots (kustomize dirs, committed
|
|
67
|
+
// ciphertext), rendered into entities by the owning lexicon's hook.
|
|
68
|
+
buildRoots: collectBuildRootContributors(plugins, config, configDir),
|
|
69
|
+
};
|
|
70
|
+
}
|