@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.
- 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.d.ts +6 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +669 -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.d.ts +24 -2
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +361 -0
- package/dist/child-project.js +21 -0
- package/dist/ci-jobs.d.ts +227 -0
- package/dist/ci-jobs.d.ts.map +1 -0
- package/dist/ci-jobs.js +448 -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.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +135 -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.d.ts +10 -2
- package/dist/composite.d.ts.map +1 -1
- package/dist/composite.js +313 -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.d.ts +2 -1
- package/dist/discovery/collect.d.ts.map +1 -1
- package/dist/discovery/collect.js +223 -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 +4073 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/host-composite.d.ts +35 -0
- package/dist/discovery/host-composite.d.ts.map +1 -0
- package/dist/discovery/host-composite.js +93 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -1
- 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 +20 -9
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +313 -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.d.ts +69 -2
- package/dist/lifecycle/gate-audit.d.ts.map +1 -1
- package/dist/lifecycle/gate-audit.js +415 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +24 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +201 -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.d.ts +1 -1
- 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.d.ts +8 -3
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +67 -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.d.ts +28 -16
- package/dist/op/activities/reconcile.d.ts.map +1 -1
- package/dist/op/activities/reconcile.js +1011 -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.d.ts +1 -1
- package/dist/op/builders.d.ts.map +1 -1
- 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.d.ts +7 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.js +119 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
- package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
- 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 +462 -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.d.ts +3 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +202 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/class-data.d.ts +84 -0
- package/dist/workspace/class-data.d.ts.map +1 -0
- package/dist/workspace/class-data.js +238 -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.js +75 -0
- 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.d.ts +3 -7
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +553 -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 +4 -11
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +162 -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/build.ts +8 -0
- package/src/change-set.test.ts +48 -0
- package/src/change-set.ts +52 -2
- package/src/ci-jobs.test.ts +49 -0
- package/src/ci-jobs.ts +515 -0
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- 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/pr-pipeline.ts +3 -2
- package/src/components/sandbox/driver.ts +3 -1
- package/src/composite.ts +15 -3
- package/src/config-import.ts +3 -0
- package/src/discovery/collect.ts +15 -1
- package/src/discovery/fold-build-parity.test.ts +71 -0
- package/src/discovery/fold-import.ts +25 -127
- package/src/discovery/fold-project-provenance.test.ts +21 -4
- package/src/discovery/host-composite.ts +101 -0
- package/src/discovery/import.ts +2 -0
- package/src/discovery/index.ts +11 -1
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +5 -4
- package/src/gate-decision-identity.test.ts +59 -6
- package/src/gate-decision.ts +81 -21
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-audit.test.ts +55 -1
- package/src/lifecycle/gate-audit.ts +116 -3
- package/src/lifecycle/gate-ledger.test.ts +20 -1
- package/src/lifecycle/gate-ledger.ts +33 -1
- 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/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +11 -3
- package/src/op/activities/lexicon-upgrade.test.ts +2 -0
- package/src/op/activities/reconcile.test.ts +62 -2
- package/src/op/activities/reconcile.ts +46 -22
- package/src/op/builders.ts +1 -1
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-run.ts +4 -3
- package/src/op/op-waves.test.ts +2 -0
- package/src/op/work-lease-run.test.ts +12 -4
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/__fixtures__/contract-repo.ts +17 -1
- package/src/workspace/__fixtures__/sessions.ts +3 -3
- package/src/workspace/change-set.schema.json +5 -3
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/ci-green-workflow.test.ts +4 -4
- package/src/workspace/ci-green-workflow.ts +5 -2
- package/src/workspace/class-data.test.ts +64 -0
- package/src/workspace/class-data.ts +236 -0
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +7 -36
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +12 -95
- package/src/workspace/records-formats.test.ts +7 -2
- package/src/workspace/records-sessions-write.test.ts +3 -3
- package/src/workspace/status-contract.e2e.test.ts +37 -0
- package/src/workspace/status-contract.test.ts +23 -21
|
@@ -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 {};
|
package/dist/change-set.d.ts
CHANGED
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* Each planner reaches it through an adapter that returns a
|
|
12
12
|
* {@link ChangeSetPart}: one member and its entries. The lifecycle and
|
|
13
13
|
* reconcile adapters are here; the terraform-family ones live in the
|
|
14
|
-
* terraform lexicon's `change-set` subpath
|
|
14
|
+
* terraform lexicon's `change-set` subpath and the SQL ones in the sql
|
|
15
|
+
* lexicon's. A part another process wrote to a file reads back through
|
|
16
|
+
* {@link readChangeSetPartFile}. {@link composeChangeSet} joins
|
|
15
17
|
* the parts.
|
|
16
18
|
*
|
|
17
19
|
* ## The digest
|
|
@@ -52,7 +54,14 @@ export declare const CHANGE_SET_ACTIONS: readonly ChangeSetAction[];
|
|
|
52
54
|
/** How much applying one change hurts, in the vocabulary of `./lifecycle/disruption.ts`. */
|
|
53
55
|
export type ChangeSetDisruption = "in-place" | "rolling" | "replace" | "destroy" | "unknown";
|
|
54
56
|
/** Which tool produced a member's plan. */
|
|
55
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Which tool produced a member's plan. `sql` is a SQL schema change: a
|
|
59
|
+
* versioned plan (a product's migrations) or one of the sql lexicon's
|
|
60
|
+
* migration Ops' plans, through `@intentius/chant-lexicon-sql/change-set`.
|
|
61
|
+
*/
|
|
62
|
+
export type ChangeSetPlanner = "terraform" | "tofu" | "choudoufu" | "chant" | "warden" | "sql";
|
|
63
|
+
/** Every planner, in the order the schema lists them. */
|
|
64
|
+
export declare const CHANGE_SET_PLANNERS: readonly ChangeSetPlanner[];
|
|
56
65
|
/** One attribute a change writes, at top-level granularity. */
|
|
57
66
|
export interface ChangeSetAttribute {
|
|
58
67
|
path: string;
|
|
@@ -251,4 +260,17 @@ export interface ReconcilePlanPartInput {
|
|
|
251
260
|
* the managed counts, which are guardrail denominators rather than changes.
|
|
252
261
|
*/
|
|
253
262
|
export declare function reconcilePlanPart(input: ReconcilePlanPartInput): ChangeSetPart;
|
|
263
|
+
/**
|
|
264
|
+
* A part an adapter in another process wrote as JSON, read back as `member`'s
|
|
265
|
+
* part. The `sql` planner's plans arrive this way: the sql lexicon's
|
|
266
|
+
* `change-set` adapters, or a product that fills them, write the part, and
|
|
267
|
+
* `readChangeSetPart` with `planner: "sql"` reads it.
|
|
268
|
+
*
|
|
269
|
+
* The part must name `planner` on its member and on every entry, and say
|
|
270
|
+
* `status`, `planDigest` and `holes`. Its member and entries are renamed to
|
|
271
|
+
* `member`, so the file need not know the name the run gives it; a `lexicon`
|
|
272
|
+
* given here replaces the part's. Nothing is recomputed: the plan digest is
|
|
273
|
+
* the one the writer took, over a plan this process never sees.
|
|
274
|
+
*/
|
|
275
|
+
export declare function readChangeSetPartFile(part: unknown, planner: ChangeSetPlanner, member: string, lexicon?: string): ChangeSetPart;
|
|
254
276
|
//# sourceMappingURL=change-set.d.ts.map
|
package/dist/change-set.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,361 @@
|
|
|
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 and the SQL ones in the sql
|
|
15
|
+
* lexicon's. A part another process wrote to a file reads back through
|
|
16
|
+
* {@link readChangeSetPartFile}. {@link composeChangeSet} joins
|
|
17
|
+
* the parts.
|
|
18
|
+
*
|
|
19
|
+
* ## The digest
|
|
20
|
+
*
|
|
21
|
+
* Every member carries the plan digest a gate on that member alone binds
|
|
22
|
+
* (#2300): `terraformPlanDigest` for a terraform-family root, and here
|
|
23
|
+
* `computePlanDigest("lifecycle-plan", …)` and `computePlanDigest(
|
|
24
|
+
* "reconcile-plan", …)`. {@link changeSetDigest} over the sorted `{ member,
|
|
25
|
+
* planDigest }` pairs is the set digest #3049 describes, and a wave's digest
|
|
26
|
+
* is that function over the wave's members.
|
|
27
|
+
*
|
|
28
|
+
* The document's digest is {@link changeSetDocumentDigest}: the set digest,
|
|
29
|
+
* each member's status and holes, the entries and the side effects. An
|
|
30
|
+
* approval of the document binds what it says as well as the plans it came
|
|
31
|
+
* from, so a pull request's apply that resumes from a record (#3464) can
|
|
32
|
+
* check a re-planned member against the record's entries without trusting
|
|
33
|
+
* whoever wrote the record. The summary is computed from the entries and is
|
|
34
|
+
* not hashed. A change to how chant projects a plan into entries moves the
|
|
35
|
+
* document's digest, so an approval given under one chant does not carry to
|
|
36
|
+
* an apply under a chant that projects the same plan differently.
|
|
37
|
+
*
|
|
38
|
+
* ## The import graph
|
|
39
|
+
*
|
|
40
|
+
* terragucci runs this in customer CI as one bundled file with no TypeScript
|
|
41
|
+
* toolchain (#3421). Everything here imports `./lifecycle/plan-digest` and
|
|
42
|
+
* types only, and `change-set-bundle.test.ts` holds that.
|
|
43
|
+
*/
|
|
44
|
+
import { computePlanDigest } from "./lifecycle/plan-digest.js";
|
|
45
|
+
/** The schema a change-set document names in `$schema`. */
|
|
46
|
+
export const CHANGE_SET_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/change-set/v1/change-set.schema.json";
|
|
47
|
+
/** The read-contract version the document follows. */
|
|
48
|
+
export const CHANGE_SET_CONTRACT = 1;
|
|
49
|
+
/** Every action, in the order the summary lists them. */
|
|
50
|
+
export const CHANGE_SET_ACTIONS = ["create", "update", "replace", "delete", "read", "no-op", "forget"];
|
|
51
|
+
/** Every planner, in the order the schema lists them. */
|
|
52
|
+
export const CHANGE_SET_PLANNERS = ["terraform", "tofu", "choudoufu", "chant", "warden", "sql"];
|
|
53
|
+
const byString = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
|
|
54
|
+
function entryKey(e) {
|
|
55
|
+
return `${e.member}\u0000${e.address}\u0000${e.deposed ?? ""}\u0000${e.action}`;
|
|
56
|
+
}
|
|
57
|
+
const bySideEffect = (a, b) => byString(a.member, b.member) || byString(a.address, b.address) || byString(a.trigger ?? "", b.trigger ?? "");
|
|
58
|
+
/**
|
|
59
|
+
* The set digest over members' plan digests: `computePlanDigest("change-set",
|
|
60
|
+
* …)` over `{ member, planDigest }` sorted by member. Order-independent,
|
|
61
|
+
* and different whenever one member's plan digest is. Refuses a set that
|
|
62
|
+
* names a member twice, which has no single plan for that member.
|
|
63
|
+
*
|
|
64
|
+
* Provisional members are left out: their plans may stand on values that do
|
|
65
|
+
* not exist yet, so an approval of this digest never covers them.
|
|
66
|
+
*/
|
|
67
|
+
export function changeSetDigest(members) {
|
|
68
|
+
const pairs = members
|
|
69
|
+
.filter((m) => m.provisional !== true)
|
|
70
|
+
.map((m) => ({ member: m.member, planDigest: m.planDigest }))
|
|
71
|
+
.sort((a, b) => byString(a.member, b.member));
|
|
72
|
+
for (let i = 1; i < pairs.length; i++) {
|
|
73
|
+
if (pairs[i - 1].member === pairs[i].member)
|
|
74
|
+
throw new Error(`the change set names member ${pairs[i].member} twice`);
|
|
75
|
+
}
|
|
76
|
+
return computePlanDigest("change-set", pairs);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The document's digest: `computePlanDigest("change-set-document", …)` over
|
|
80
|
+
* the set digest ({@link changeSetDigest}), each member's name, status and
|
|
81
|
+
* holes, the entries and the side effects. Members are sorted by name and
|
|
82
|
+
* entries and side effects by the keys {@link composeChangeSet} sorts them by,
|
|
83
|
+
* so order makes no difference.
|
|
84
|
+
*
|
|
85
|
+
* A provisional member is left out, with its entries and side effects, as
|
|
86
|
+
* the set digest leaves it out: no approval of the document covers it.
|
|
87
|
+
*/
|
|
88
|
+
export function changeSetDocumentDigest(doc) {
|
|
89
|
+
const provisional = new Set(doc.members.filter((m) => m.provisional === true).map((m) => m.member));
|
|
90
|
+
const members = doc.members
|
|
91
|
+
.filter((m) => !provisional.has(m.member))
|
|
92
|
+
.map((m) => ({ member: m.member, status: m.status, holes: m.holes }))
|
|
93
|
+
.sort((a, b) => byString(a.member, b.member));
|
|
94
|
+
const entries = doc.entries.filter((e) => !provisional.has(e.member)).sort((a, b) => byString(entryKey(a), entryKey(b)));
|
|
95
|
+
const sideEffects = (doc.sideEffects ?? []).filter((s) => !provisional.has(s.member)).sort(bySideEffect);
|
|
96
|
+
return computePlanDigest("change-set-document", { set: changeSetDigest(doc.members), members, entries, sideEffects });
|
|
97
|
+
}
|
|
98
|
+
/** The summary of a set of members and entries. */
|
|
99
|
+
export function summarizeChangeSet(members, entries) {
|
|
100
|
+
const actions = Object.fromEntries(CHANGE_SET_ACTIONS.map((a) => [a, 0]));
|
|
101
|
+
const types = {};
|
|
102
|
+
const byMember = {};
|
|
103
|
+
const deletes = [];
|
|
104
|
+
const replacements = [];
|
|
105
|
+
const bump = (into, key, action) => {
|
|
106
|
+
const counts = (into[key] ?? (into[key] = {}));
|
|
107
|
+
counts[action] = (counts[action] ?? 0) + 1;
|
|
108
|
+
};
|
|
109
|
+
for (const e of entries) {
|
|
110
|
+
actions[e.action]++;
|
|
111
|
+
bump(types, e.type, e.action);
|
|
112
|
+
bump(byMember, e.member, e.action);
|
|
113
|
+
const named = {
|
|
114
|
+
member: e.member, address: e.address, type: e.type,
|
|
115
|
+
...(e.deposed !== undefined ? { deposed: e.deposed } : {}),
|
|
116
|
+
...(e.disruption !== undefined ? { disruption: e.disruption } : {}),
|
|
117
|
+
};
|
|
118
|
+
if (e.action === "delete")
|
|
119
|
+
deletes.push(named);
|
|
120
|
+
if (e.action === "replace")
|
|
121
|
+
replacements.push(named);
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
members: members.length,
|
|
125
|
+
entries: entries.length,
|
|
126
|
+
actions,
|
|
127
|
+
types: sortKeys(types),
|
|
128
|
+
byMember: sortKeys(byMember),
|
|
129
|
+
deletes,
|
|
130
|
+
replacements,
|
|
131
|
+
failed: members.filter((m) => m.status === "failed").map((m) => m.member),
|
|
132
|
+
holes: members.reduce((n, m) => n + m.holes.length, 0),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function sortKeys(o) {
|
|
136
|
+
return Object.fromEntries(Object.entries(o).sort(([a], [b]) => byString(a, b)));
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Join adapters' parts into one document: members sorted by name, entries
|
|
140
|
+
* by member, address, deposed key and action, the summary, and the digest.
|
|
141
|
+
* Throws when two parts name the same member, or an entry names a member
|
|
142
|
+
* other than its part's.
|
|
143
|
+
*/
|
|
144
|
+
export function composeChangeSet(parts, options = {}) {
|
|
145
|
+
const members = parts.map((p) => p.member).sort((a, b) => byString(a.member, b.member));
|
|
146
|
+
const entries = [];
|
|
147
|
+
for (const part of parts) {
|
|
148
|
+
for (const e of part.entries) {
|
|
149
|
+
if (e.member !== part.member.member)
|
|
150
|
+
throw new Error(`an entry at ${e.address} names member ${e.member}, inside member ${part.member.member}`);
|
|
151
|
+
entries.push(e);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
entries.sort((a, b) => byString(entryKey(a), entryKey(b)));
|
|
155
|
+
const sideEffects = parts
|
|
156
|
+
.flatMap((p) => (p.sideEffects ?? []).map((s) => ({ member: p.member.member, ...s })))
|
|
157
|
+
.sort(bySideEffect);
|
|
158
|
+
const digest = changeSetDocumentDigest({ members, entries, sideEffects });
|
|
159
|
+
return {
|
|
160
|
+
$schema: CHANGE_SET_SCHEMA_ID,
|
|
161
|
+
contract: CHANGE_SET_CONTRACT,
|
|
162
|
+
...(options.chant !== undefined ? { chant: options.chant } : {}),
|
|
163
|
+
digest,
|
|
164
|
+
members,
|
|
165
|
+
entries,
|
|
166
|
+
...(sideEffects.length > 0 ? { sideEffects } : {}),
|
|
167
|
+
summary: summarizeChangeSet(members, entries),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Whether a document's digest is the one its members, entries and side
|
|
172
|
+
* effects give ({@link changeSetDocumentDigest}). A document that names a
|
|
173
|
+
* member twice has no digest and is not verified.
|
|
174
|
+
*/
|
|
175
|
+
export function verifyChangeSetDigest(doc) {
|
|
176
|
+
try {
|
|
177
|
+
return changeSetDocumentDigest(doc) === doc.digest;
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function lifecycleAttributes(entry) {
|
|
184
|
+
const because = new Set(entry.disruptionBecause ?? []);
|
|
185
|
+
return (entry.deltas ?? []).map((d) => ({
|
|
186
|
+
path: d.path,
|
|
187
|
+
...(d.oldValue !== undefined ? { before: d.oldValue } : {}),
|
|
188
|
+
...(d.newValue !== undefined ? { after: d.newValue } : {}),
|
|
189
|
+
...(because.has(d.path) ? { forcesReplacement: true } : {}),
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* A chant member's part, from `chant lifecycle plan <env> --json`.
|
|
194
|
+
*
|
|
195
|
+
* `create`, `update`, `delete` and `noop` map across. An `update` whose
|
|
196
|
+
* lexicon says it replaces or destroys becomes a `replace`. An `effect`
|
|
197
|
+
* entry is the receipt its effect step writes: a `create` when the receipt
|
|
198
|
+
* is absent, else an `update`. `unobserved` entries are holes. `adopt` and
|
|
199
|
+
* `runtime` propose nothing and are left out.
|
|
200
|
+
*
|
|
201
|
+
* The member's plan digest is `computePlanDigest("lifecycle-plan", plan)`
|
|
202
|
+
* over the whole document, which carries no timestamp or run id.
|
|
203
|
+
*/
|
|
204
|
+
export function lifecyclePlanPart(input) {
|
|
205
|
+
const { plan } = input;
|
|
206
|
+
const fallback = input.lexicon ?? "chant";
|
|
207
|
+
const entries = [];
|
|
208
|
+
const holes = [];
|
|
209
|
+
for (const e of plan.entries ?? []) {
|
|
210
|
+
const lexicon = e.lexicon ?? fallback;
|
|
211
|
+
if (e.action === "unobserved") {
|
|
212
|
+
holes.push({ address: e.name, ...(e.type ? { type: e.type } : {}), reason: e.unobservedReason ?? "unobserved" });
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
let action;
|
|
216
|
+
let disruption;
|
|
217
|
+
switch (e.action) {
|
|
218
|
+
case "create":
|
|
219
|
+
action = "create";
|
|
220
|
+
break;
|
|
221
|
+
case "noop":
|
|
222
|
+
action = "no-op";
|
|
223
|
+
break;
|
|
224
|
+
case "delete":
|
|
225
|
+
action = "delete";
|
|
226
|
+
disruption = "destroy";
|
|
227
|
+
break;
|
|
228
|
+
case "effect":
|
|
229
|
+
action = e.effectReason === "receipt-absent" ? "create" : "update";
|
|
230
|
+
break;
|
|
231
|
+
case "update":
|
|
232
|
+
disruption = e.disruption ?? "unknown";
|
|
233
|
+
action = disruption === "replace" || disruption === "destroy" ? "replace" : "update";
|
|
234
|
+
break;
|
|
235
|
+
default: continue; // adopt, runtime: not a proposal
|
|
236
|
+
}
|
|
237
|
+
entries.push({
|
|
238
|
+
member: input.member,
|
|
239
|
+
lexicon,
|
|
240
|
+
planner: "chant",
|
|
241
|
+
address: e.name,
|
|
242
|
+
type: e.type ?? "unknown",
|
|
243
|
+
...(e.physicalId ? { id: e.physicalId } : {}),
|
|
244
|
+
action,
|
|
245
|
+
...(disruption ? { disruption } : {}),
|
|
246
|
+
scope: plan.env,
|
|
247
|
+
attributes: lifecycleAttributes(e),
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
const lexicons = [...new Set(entries.map((e) => e.lexicon))].sort();
|
|
251
|
+
return {
|
|
252
|
+
member: {
|
|
253
|
+
member: input.member,
|
|
254
|
+
lexicon: lexicons.length === 1 ? lexicons[0] : fallback,
|
|
255
|
+
planner: "chant",
|
|
256
|
+
scope: plan.env,
|
|
257
|
+
status: "planned",
|
|
258
|
+
planDigest: computePlanDigest("lifecycle-plan", plan),
|
|
259
|
+
holes,
|
|
260
|
+
},
|
|
261
|
+
entries,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function topLevelKeys(value) {
|
|
265
|
+
return value && typeof value === "object" && !Array.isArray(value) ? Object.keys(value).sort() : [];
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* A warden member's part, from the reconcile `ChangeSet`s it planned
|
|
269
|
+
* (`./reconcile.ts`). The address is `<resourceType>.<key>`, unique within
|
|
270
|
+
* one org, and the scope is the org. An update's disruption is `unknown`:
|
|
271
|
+
* the reconcile model says nothing about it.
|
|
272
|
+
*
|
|
273
|
+
* The plan digest covers each change set's org and entries, and leaves out
|
|
274
|
+
* the managed counts, which are guardrail denominators rather than changes.
|
|
275
|
+
*/
|
|
276
|
+
export function reconcilePlanPart(input) {
|
|
277
|
+
const sets = (Array.isArray(input.plan) ? input.plan : [input.plan])
|
|
278
|
+
.map((cs) => ({ org: cs.org, entries: [...cs.entries].sort((a, b) => byString(`${a.resourceType}\u0000${a.key}`, `${b.resourceType}\u0000${b.key}`)) }))
|
|
279
|
+
.sort((a, b) => byString(a.org, b.org));
|
|
280
|
+
const lexicon = input.lexicon ?? "github";
|
|
281
|
+
const entries = [];
|
|
282
|
+
for (const cs of sets) {
|
|
283
|
+
for (const e of cs.entries) {
|
|
284
|
+
const attributes = e.kind === "update"
|
|
285
|
+
? (e.fields ?? []).map((f) => ({ path: f.field, ...(f.before !== undefined ? { before: f.before } : {}), ...(f.after !== undefined ? { after: f.after } : {}) }))
|
|
286
|
+
: e.kind === "create"
|
|
287
|
+
? topLevelKeys(e.after).map((k) => ({ path: k, after: e.after[k] }))
|
|
288
|
+
: [];
|
|
289
|
+
entries.push({
|
|
290
|
+
member: input.member,
|
|
291
|
+
lexicon,
|
|
292
|
+
planner: "warden",
|
|
293
|
+
address: `${e.resourceType}.${e.key}`,
|
|
294
|
+
type: e.resourceType,
|
|
295
|
+
name: e.key,
|
|
296
|
+
action: e.kind,
|
|
297
|
+
...(e.kind === "delete" ? { disruption: "destroy" } : e.kind === "update" ? { disruption: "unknown" } : {}),
|
|
298
|
+
scope: cs.org,
|
|
299
|
+
attributes,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
const orgs = [...new Set(sets.map((s) => s.org))];
|
|
304
|
+
return {
|
|
305
|
+
member: {
|
|
306
|
+
member: input.member,
|
|
307
|
+
lexicon,
|
|
308
|
+
planner: "warden",
|
|
309
|
+
...(orgs.length === 1 ? { scope: orgs[0] } : {}),
|
|
310
|
+
status: "planned",
|
|
311
|
+
planDigest: computePlanDigest("reconcile-plan", sets),
|
|
312
|
+
holes: [],
|
|
313
|
+
},
|
|
314
|
+
entries,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
// ── a part written to a file ───────────────────────────────────────────────────
|
|
318
|
+
const isRecord = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
319
|
+
/**
|
|
320
|
+
* A part an adapter in another process wrote as JSON, read back as `member`'s
|
|
321
|
+
* part. The `sql` planner's plans arrive this way: the sql lexicon's
|
|
322
|
+
* `change-set` adapters, or a product that fills them, write the part, and
|
|
323
|
+
* `readChangeSetPart` with `planner: "sql"` reads it.
|
|
324
|
+
*
|
|
325
|
+
* The part must name `planner` on its member and on every entry, and say
|
|
326
|
+
* `status`, `planDigest` and `holes`. Its member and entries are renamed to
|
|
327
|
+
* `member`, so the file need not know the name the run gives it; a `lexicon`
|
|
328
|
+
* given here replaces the part's. Nothing is recomputed: the plan digest is
|
|
329
|
+
* the one the writer took, over a plan this process never sees.
|
|
330
|
+
*/
|
|
331
|
+
export function readChangeSetPartFile(part, planner, member, lexicon) {
|
|
332
|
+
const where = `the ${planner} part for ${member}`;
|
|
333
|
+
if (!isRecord(part) || !isRecord(part.member) || !Array.isArray(part.entries))
|
|
334
|
+
throw new Error(`${where} is not a change-set part: it needs member and entries`);
|
|
335
|
+
const m = part.member;
|
|
336
|
+
if (m.planner !== planner)
|
|
337
|
+
throw new Error(`${where} names planner ${String(m.planner)}, not ${planner}`);
|
|
338
|
+
if (m.status !== "planned" && m.status !== "failed")
|
|
339
|
+
throw new Error(`${where} has no status`);
|
|
340
|
+
if (m.planDigest !== null && typeof m.planDigest !== "string")
|
|
341
|
+
throw new Error(`${where} has no planDigest`);
|
|
342
|
+
if (m.status === "planned" && m.planDigest === null)
|
|
343
|
+
throw new Error(`${where} planned but has no planDigest`);
|
|
344
|
+
if (!Array.isArray(m.holes))
|
|
345
|
+
throw new Error(`${where} has no holes array`);
|
|
346
|
+
const entries = part.entries.map((e, i) => {
|
|
347
|
+
if (!isRecord(e) || typeof e.address !== "string" || typeof e.type !== "string" || typeof e.action !== "string" || !Array.isArray(e.attributes)) {
|
|
348
|
+
throw new Error(`${where}: entries[${i}] needs address, type, action and attributes`);
|
|
349
|
+
}
|
|
350
|
+
if (!CHANGE_SET_ACTIONS.includes(e.action))
|
|
351
|
+
throw new Error(`${where}: entries[${i}] has action ${e.action}`);
|
|
352
|
+
if (e.planner !== planner)
|
|
353
|
+
throw new Error(`${where}: entries[${i}] names planner ${String(e.planner)}, not ${planner}`);
|
|
354
|
+
return { ...e, member, ...(lexicon !== undefined ? { lexicon } : {}) };
|
|
355
|
+
});
|
|
356
|
+
return {
|
|
357
|
+
member: { ...m, member, ...(lexicon !== undefined ? { lexicon } : {}) },
|
|
358
|
+
entries,
|
|
359
|
+
...(Array.isArray(part.sideEffects) ? { sideEffects: part.sideEffects } : {}),
|
|
360
|
+
};
|
|
361
|
+
}
|
|
@@ -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
|
+
}
|