@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,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic pseudo-parameter class for lexicon-provided global named references.
|
|
3
|
+
*
|
|
4
|
+
* AWS uses "AWS::StackName", Terraform has "path.module", Azure has
|
|
5
|
+
* "subscription().id" — every format needs the same class that serializes
|
|
6
|
+
* to a Ref-like structure and has the INTRINSIC_MARKER.
|
|
7
|
+
*/
|
|
8
|
+
var _a;
|
|
9
|
+
import { INTRINSIC_MARKER } from "./intrinsic.js";
|
|
10
|
+
export class PseudoParameter {
|
|
11
|
+
constructor(refName) {
|
|
12
|
+
this[_a] = true;
|
|
13
|
+
this.refName = refName;
|
|
14
|
+
}
|
|
15
|
+
toJSON() {
|
|
16
|
+
return { Ref: this.refName };
|
|
17
|
+
}
|
|
18
|
+
toString() {
|
|
19
|
+
return `\${${this.refName}}`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
_a = INTRINSIC_MARKER;
|
|
23
|
+
/**
|
|
24
|
+
* Create a namespace of pseudo-parameters from a name map.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* export const { StackName, Region } = createPseudoParameters({
|
|
29
|
+
* StackName: "AWS::StackName",
|
|
30
|
+
* Region: "AWS::Region",
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function createPseudoParameters(nameMap) {
|
|
35
|
+
const result = {};
|
|
36
|
+
for (const [key, refName] of Object.entries(nameMap)) {
|
|
37
|
+
result[key] = new PseudoParameter(refName);
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-agnostic reconcile primitive.
|
|
3
|
+
*
|
|
4
|
+
* The reusable machinery behind a declarative reconcile loop, with NO knowledge
|
|
5
|
+
* of any specific provider (GitHub, GitLab, a cloud, …): the change-set model,
|
|
6
|
+
* the generic collection diff (selective-by-omission + ownership-gated deletes),
|
|
7
|
+
* the plan renderer, and the guardrail framework (rename resolution + a removal
|
|
8
|
+
* cap + a pluggable check runner).
|
|
9
|
+
*
|
|
10
|
+
* A consumer application (e.g. github-warden) builds its provider-specific resource diffing,
|
|
11
|
+
* live-state types, and domain guardrails on top of this, and drives them with
|
|
12
|
+
* the generic `runReconcile` loop + `Cycle` interface (below). It complements
|
|
13
|
+
* chant's `ownership.ts` marker contract: ownership markers make a `delete`
|
|
14
|
+
* precise; this module decides *which* entries are creates / updates / deletes
|
|
15
|
+
* in the first place.
|
|
16
|
+
*
|
|
17
|
+
* Consumed as `@intentius/chant/reconcile`. The diff and guardrail primitives
|
|
18
|
+
* are pure and clock-free; `runReconcile` is the orchestration loop and is the
|
|
19
|
+
* only part that drives I/O (through the provider's `Cycle` implementations).
|
|
20
|
+
*/
|
|
21
|
+
import { GOVERNANCE_VERBS } from "./governance.js";
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Generic field/value diffing
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
/** Deep value equality via JSON for plain data (config/live snapshots). */
|
|
26
|
+
export function deepEqual(a, b) {
|
|
27
|
+
if (a === b)
|
|
28
|
+
return true;
|
|
29
|
+
if (a === null || b === null)
|
|
30
|
+
return false;
|
|
31
|
+
if (typeof a !== "object" || typeof b !== "object")
|
|
32
|
+
return false;
|
|
33
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Diff fields of `desired` against `live`, returning one `FieldChange` per
|
|
37
|
+
* differing field. When `keys` is given, only those keys are compared (and only
|
|
38
|
+
* when present in `desired`); otherwise every key in `desired` is compared.
|
|
39
|
+
* Selective-by-omission: keys absent from `desired` are never compared.
|
|
40
|
+
*/
|
|
41
|
+
export function diffFields(desired, live, keys) {
|
|
42
|
+
const fields = [];
|
|
43
|
+
const compareKeys = keys ?? Object.keys(desired);
|
|
44
|
+
for (const key of compareKeys) {
|
|
45
|
+
if (keys && !Object.prototype.hasOwnProperty.call(desired, key))
|
|
46
|
+
continue;
|
|
47
|
+
const dv = desired[key];
|
|
48
|
+
const lv = live[key];
|
|
49
|
+
if (!deepEqual(dv, lv))
|
|
50
|
+
fields.push({ field: key, before: lv, after: dv });
|
|
51
|
+
}
|
|
52
|
+
return fields;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The generic managed-collection diff: creates for desired-not-live, updates
|
|
56
|
+
* when `compareFields` reports differences, and ownership-gated deletes for
|
|
57
|
+
* live-not-desired. This is the selective-by-omission + ownership-gated-delete
|
|
58
|
+
* pattern shared by every keyed-collection diff.
|
|
59
|
+
*
|
|
60
|
+
* Returns the live entry count for this collection, so the diff layer can sum
|
|
61
|
+
* `ChangeSet.managedCount` across the collections it diffs (#2067).
|
|
62
|
+
*/
|
|
63
|
+
export function diffCollection(params) {
|
|
64
|
+
const { resourceType, keyPrefix = "", desired, live, compareFields, createAfter, updateAfter, opts, out, } = params;
|
|
65
|
+
for (const [key, d] of desired) {
|
|
66
|
+
const entryKey = `${keyPrefix}${key}`;
|
|
67
|
+
const l = live.get(key);
|
|
68
|
+
if (l === undefined) {
|
|
69
|
+
out.push({
|
|
70
|
+
kind: "create",
|
|
71
|
+
resourceType,
|
|
72
|
+
key: entryKey,
|
|
73
|
+
after: createAfter ? createAfter(key, d) : d,
|
|
74
|
+
});
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const fields = compareFields(d, l);
|
|
78
|
+
if (fields.length > 0) {
|
|
79
|
+
out.push({
|
|
80
|
+
kind: "update",
|
|
81
|
+
resourceType,
|
|
82
|
+
key: entryKey,
|
|
83
|
+
before: l,
|
|
84
|
+
after: updateAfter ? updateAfter(key, d, l) : d,
|
|
85
|
+
fields,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
for (const [key, l] of live) {
|
|
90
|
+
if (desired.has(key))
|
|
91
|
+
continue;
|
|
92
|
+
const entryKey = `${keyPrefix}${key}`;
|
|
93
|
+
if (opts.isOwned?.(resourceType, entryKey)) {
|
|
94
|
+
out.push({ kind: "delete", resourceType, key: entryKey, before: l });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return live.size;
|
|
98
|
+
}
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
// Summary / rendering
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
/** Count entries per change kind. */
|
|
103
|
+
export function summarizeChangeSet(cs) {
|
|
104
|
+
const counts = { create: 0, update: 0, delete: 0 };
|
|
105
|
+
for (const e of cs.entries)
|
|
106
|
+
counts[e.kind]++;
|
|
107
|
+
return counts;
|
|
108
|
+
}
|
|
109
|
+
/** Human-readable plan summary for dry-run output. Pure. */
|
|
110
|
+
export function renderChangeSet(cs) {
|
|
111
|
+
const counts = summarizeChangeSet(cs);
|
|
112
|
+
const header = `Plan for ${cs.org}: ${counts.create} to create, ${counts.update} to update, ${counts.delete} to delete`;
|
|
113
|
+
if (cs.entries.length === 0)
|
|
114
|
+
return `${header}\nNo changes.`;
|
|
115
|
+
const lines = [header];
|
|
116
|
+
const byKind = { create: [], update: [], delete: [] };
|
|
117
|
+
for (const e of cs.entries)
|
|
118
|
+
byKind[e.kind].push(e);
|
|
119
|
+
const ORDER = ["create", "update", "delete"];
|
|
120
|
+
for (const kind of ORDER) {
|
|
121
|
+
let group = byKind[kind];
|
|
122
|
+
if (group.length === 0)
|
|
123
|
+
continue;
|
|
124
|
+
// Verb-aware grouping: when entries carry governance verbs, order
|
|
125
|
+
// each section by verb (vocabulary order, unverbed entries last) so mixed
|
|
126
|
+
// plans read category-by-category. Stable, and line format is unchanged —
|
|
127
|
+
// a verbless change set renders exactly as before.
|
|
128
|
+
if (group.some((e) => e.verb)) {
|
|
129
|
+
const rank = (e) => e.verb ? GOVERNANCE_VERBS.indexOf(e.verb) : GOVERNANCE_VERBS.length;
|
|
130
|
+
group = [...group].sort((a, b) => rank(a) - rank(b));
|
|
131
|
+
}
|
|
132
|
+
lines.push(`\n${kind.toUpperCase()}:`);
|
|
133
|
+
for (const e of group) {
|
|
134
|
+
lines.push(` [${e.resourceType}] ${e.key}`);
|
|
135
|
+
for (const f of e.fields ?? []) {
|
|
136
|
+
lines.push(` ${f.field}: ${fmt(f.before)} → ${fmt(f.after)}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return lines.join("\n");
|
|
141
|
+
}
|
|
142
|
+
function fmt(v) {
|
|
143
|
+
if (v === undefined)
|
|
144
|
+
return "<unset>";
|
|
145
|
+
if (typeof v === "string")
|
|
146
|
+
return v.length > 60 ? `${v.slice(0, 57)}...` : v;
|
|
147
|
+
const json = JSON.stringify(v);
|
|
148
|
+
return json.length > 60 ? `${json.slice(0, 57)}...` : json;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Resolve rename aliases. A create entry carrying a `previously` key matching a
|
|
152
|
+
* delete entry's key OF THE SAME RESOURCE TYPE is collapsed into an update,
|
|
153
|
+
* removing the delete. Matching across resource types would let e.g. a team
|
|
154
|
+
* create with `previously: "old"` swallow an unrelated member delete keyed
|
|
155
|
+
* "old", hiding a real delete from guardrail counting. Returns a new ChangeSet
|
|
156
|
+
* with renames resolved. Provider-agnostic — works on any entry whose
|
|
157
|
+
* `after.previously` is a string.
|
|
158
|
+
*/
|
|
159
|
+
export function resolveRenames(changeSet) {
|
|
160
|
+
// Keys and resource types are both free-form strings, so scope the lookup
|
|
161
|
+
// with an unambiguous composite key ("\u0000" cannot appear in either).
|
|
162
|
+
const typedKey = (resourceType, key) => `${resourceType}\u0000${key}`;
|
|
163
|
+
const deleteEntries = new Map();
|
|
164
|
+
for (const e of changeSet.entries) {
|
|
165
|
+
if (e.kind === "delete")
|
|
166
|
+
deleteEntries.set(typedKey(e.resourceType, e.key), e);
|
|
167
|
+
}
|
|
168
|
+
const resolvedDeletes = new Set();
|
|
169
|
+
const resolvedCreates = new Set();
|
|
170
|
+
const syntheticUpdates = [];
|
|
171
|
+
for (const e of changeSet.entries) {
|
|
172
|
+
if (e.kind !== "create")
|
|
173
|
+
continue;
|
|
174
|
+
const after = e.after;
|
|
175
|
+
if (!after)
|
|
176
|
+
continue;
|
|
177
|
+
const previously = after["previously"];
|
|
178
|
+
if (typeof previously !== "string")
|
|
179
|
+
continue;
|
|
180
|
+
const deleted = deleteEntries.get(typedKey(e.resourceType, previously));
|
|
181
|
+
if (!deleted)
|
|
182
|
+
continue;
|
|
183
|
+
resolvedDeletes.add(typedKey(e.resourceType, previously));
|
|
184
|
+
resolvedCreates.add(typedKey(e.resourceType, e.key));
|
|
185
|
+
syntheticUpdates.push({
|
|
186
|
+
kind: "update",
|
|
187
|
+
resourceType: e.resourceType,
|
|
188
|
+
key: e.key,
|
|
189
|
+
before: deleted.before,
|
|
190
|
+
after: e.after,
|
|
191
|
+
fields: [{ field: "key", before: previously, after: e.key }],
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
if (resolvedDeletes.size === 0)
|
|
195
|
+
return changeSet;
|
|
196
|
+
const filteredEntries = changeSet.entries.filter((e) => !(e.kind === "delete" && resolvedDeletes.has(typedKey(e.resourceType, e.key))) &&
|
|
197
|
+
!(e.kind === "create" && resolvedCreates.has(typedKey(e.resourceType, e.key))));
|
|
198
|
+
return { ...changeSet, entries: [...filteredEntries, ...syntheticUpdates] };
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Refuse if deletes exceed `maxFraction` of the pre-existing managed entries
|
|
202
|
+
* (deletes + updates; creates excluded so a flood of new entries can't dilute
|
|
203
|
+
* the delete fraction). Guards against a typo wiping the config in one apply.
|
|
204
|
+
*
|
|
205
|
+
* With per-type live counts (`opts.managedTotals`, else
|
|
206
|
+
* `changeSet.managedCounts`) the cap is evaluated PER RESOURCE TYPE: for each
|
|
207
|
+
* type with deletes, that type's deletes divide by that type's live count when
|
|
208
|
+
* present and positive, else by that type's own plan non-creates. Any type
|
|
209
|
+
* over `maxFraction` blocks, and the diagnostic names the worst offender. The
|
|
210
|
+
* pooled denominator this replaces was unsafe — live entries of one type
|
|
211
|
+
* (team members, repos) diluted a wipe of another (teams, org secrets) below
|
|
212
|
+
* the cap.
|
|
213
|
+
*
|
|
214
|
+
* With only a pooled live denominator (`opts.managedTotal`, else
|
|
215
|
+
* `changeSet.managedCount`; #2067) deletes are measured against the pooled
|
|
216
|
+
* live entries under management — so a converged cycle's plan of exactly one
|
|
217
|
+
* stale delete does not trip at 1/1 = 100%. Without either, behavior is
|
|
218
|
+
* plan-relative as before.
|
|
219
|
+
*
|
|
220
|
+
* Throws on a `maxFraction` outside (0,1] (NaN included) — fail closed, never
|
|
221
|
+
* silently disable the cap.
|
|
222
|
+
*
|
|
223
|
+
* CONTRACT: pass a RENAME-RESOLVED change set (see {@link resolveRenames}).
|
|
224
|
+
*/
|
|
225
|
+
export function removalDeltaCap(changeSet, opts = {}) {
|
|
226
|
+
const maxFraction = opts.maxFraction ?? 0.25;
|
|
227
|
+
if (!(maxFraction > 0 && maxFraction <= 1)) {
|
|
228
|
+
// The negated form catches NaN too. A bad cap must never pass silently:
|
|
229
|
+
// maxFraction: 5 would otherwise wave every wipe through.
|
|
230
|
+
throw new Error(`removalDeltaCap: maxFraction must be in (0, 1], got ${String(maxFraction)}`);
|
|
231
|
+
}
|
|
232
|
+
const managedTotals = opts.managedTotals ?? changeSet.managedCounts;
|
|
233
|
+
if (managedTotals !== undefined) {
|
|
234
|
+
return removalDeltaCapPerType(changeSet, managedTotals, maxFraction);
|
|
235
|
+
}
|
|
236
|
+
const deletes = changeSet.entries.filter((e) => e.kind === "delete").length;
|
|
237
|
+
const managedTotal = opts.managedTotal ?? changeSet.managedCount;
|
|
238
|
+
if (managedTotal !== undefined && managedTotal > 0) {
|
|
239
|
+
const fraction = deletes / managedTotal;
|
|
240
|
+
if (fraction > maxFraction) {
|
|
241
|
+
return {
|
|
242
|
+
guardrail: "removalDeltaCap",
|
|
243
|
+
message: `${deletes} of ${managedTotal} live managed entries (${Math.round(fraction * 100)}%) would be deleted, ` +
|
|
244
|
+
`exceeding the ${Math.round(maxFraction * 100)}% threshold. ` +
|
|
245
|
+
`Check for typos in config or raise maxFraction to proceed.`,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
const total = changeSet.entries.filter((e) => e.kind !== "create").length;
|
|
251
|
+
if (total === 0)
|
|
252
|
+
return null;
|
|
253
|
+
const fraction = deletes / total;
|
|
254
|
+
if (fraction > maxFraction) {
|
|
255
|
+
return {
|
|
256
|
+
guardrail: "removalDeltaCap",
|
|
257
|
+
message: `${deletes} of ${total} managed entries (${Math.round(fraction * 100)}%) would be deleted, ` +
|
|
258
|
+
`exceeding the ${Math.round(maxFraction * 100)}% threshold. ` +
|
|
259
|
+
`Check for typos in config or raise maxFraction to proceed.`,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Per-resource-type evaluation for {@link removalDeltaCap}. Each type with
|
|
266
|
+
* deletes gets its own denominator: the type's live count from `managedTotals`
|
|
267
|
+
* when present and positive, else that type's plan non-creates (the same
|
|
268
|
+
* plan-relative rule as the typeless cap, scoped to the type). Blocks when ANY
|
|
269
|
+
* type exceeds `maxFraction`; the message leads with the worst offender and
|
|
270
|
+
* lists the rest.
|
|
271
|
+
*/
|
|
272
|
+
function removalDeltaCapPerType(changeSet, managedTotals, maxFraction) {
|
|
273
|
+
const deletesByType = new Map();
|
|
274
|
+
const nonCreatesByType = new Map();
|
|
275
|
+
for (const e of changeSet.entries) {
|
|
276
|
+
if (e.kind === "create")
|
|
277
|
+
continue;
|
|
278
|
+
nonCreatesByType.set(e.resourceType, (nonCreatesByType.get(e.resourceType) ?? 0) + 1);
|
|
279
|
+
if (e.kind === "delete") {
|
|
280
|
+
deletesByType.set(e.resourceType, (deletesByType.get(e.resourceType) ?? 0) + 1);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
const tripping = [];
|
|
284
|
+
for (const [resourceType, deletes] of deletesByType) {
|
|
285
|
+
const liveCount = managedTotals[resourceType];
|
|
286
|
+
// A zero (or negative) live count means "no live info for this type",
|
|
287
|
+
// never a looser or divide-by-zero cap — same rule as the pooled total.
|
|
288
|
+
const live = liveCount !== undefined && liveCount > 0;
|
|
289
|
+
const total = live ? liveCount : nonCreatesByType.get(resourceType);
|
|
290
|
+
const fraction = deletes / total;
|
|
291
|
+
if (fraction > maxFraction)
|
|
292
|
+
tripping.push({ resourceType, deletes, total, fraction, live });
|
|
293
|
+
}
|
|
294
|
+
if (tripping.length === 0)
|
|
295
|
+
return null;
|
|
296
|
+
// Worst offender first; deterministic tie-break by delete count then name.
|
|
297
|
+
tripping.sort((a, b) => b.fraction - a.fraction ||
|
|
298
|
+
b.deletes - a.deletes ||
|
|
299
|
+
a.resourceType.localeCompare(b.resourceType));
|
|
300
|
+
const [worst, ...rest] = tripping;
|
|
301
|
+
const pct = (f) => Math.round(f * 100);
|
|
302
|
+
const describe = (t) => `${t.deletes} of ${t.total} ${t.live ? "live" : "planned"} ${t.resourceType} entries (${pct(t.fraction)}%)`;
|
|
303
|
+
return {
|
|
304
|
+
guardrail: "removalDeltaCap",
|
|
305
|
+
message: `${describe(worst)} would be deleted, exceeding the ${pct(maxFraction)}% threshold. ` +
|
|
306
|
+
(rest.length > 0 ? `Also over the cap: ${rest.map(describe).join(", ")}. ` : "") +
|
|
307
|
+
`Check for typos in config or raise maxFraction to proceed.`,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Run a set of guardrail checks against a change set. Resolves renames ONCE,
|
|
312
|
+
* then runs every check on the resolved set, aggregating any diagnostics. The
|
|
313
|
+
* caller composes provider-specific checks (e.g. an admin floor) as closures.
|
|
314
|
+
* `ctx` (optional, #2067) threads live context — e.g. the managed-live count —
|
|
315
|
+
* to every check; single-argument checks ignore it.
|
|
316
|
+
*/
|
|
317
|
+
export function runGuardrailChecks(changeSet, checks, ctx) {
|
|
318
|
+
const resolved = resolveRenames(changeSet);
|
|
319
|
+
const diagnostics = [];
|
|
320
|
+
for (const check of checks) {
|
|
321
|
+
const d = check(resolved, ctx);
|
|
322
|
+
if (d)
|
|
323
|
+
diagnostics.push(d);
|
|
324
|
+
}
|
|
325
|
+
return diagnostics.length > 0 ? { ok: false, diagnostics } : { ok: true };
|
|
326
|
+
}
|
|
327
|
+
/** Thrown when a cycle or apply step attempts to use an exhausted budget. */
|
|
328
|
+
export class BudgetExhaustedError extends Error {
|
|
329
|
+
constructor(message = "rate budget exhausted") {
|
|
330
|
+
super(message);
|
|
331
|
+
this.name = "BudgetExhaustedError";
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
class MutableRateBudget {
|
|
335
|
+
constructor(initial) {
|
|
336
|
+
this._remaining = initial;
|
|
337
|
+
}
|
|
338
|
+
get remaining() {
|
|
339
|
+
return this._remaining;
|
|
340
|
+
}
|
|
341
|
+
get exhausted() {
|
|
342
|
+
return this._remaining <= 0;
|
|
343
|
+
}
|
|
344
|
+
use(n = 1) {
|
|
345
|
+
if (this.exhausted)
|
|
346
|
+
throw new BudgetExhaustedError();
|
|
347
|
+
this._remaining = Math.max(0, this._remaining - n);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
function errMsg(err) {
|
|
351
|
+
return err instanceof Error ? err.message : String(err);
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Run the reconcile loop. For each scope in `scopes` and each cycle:
|
|
355
|
+
* 1. fetchLive 2. buildDesired 3. diff 4. guardrails
|
|
356
|
+
* 5a. dry-run: record the plan 5b. apply: apply each entry (if guardrails pass)
|
|
357
|
+
*
|
|
358
|
+
* Budget-aware (stops cleanly + records deferred work on exhaustion) and
|
|
359
|
+
* fault-tolerant (a cycle that errors is recorded and the run continues).
|
|
360
|
+
* Returns a structured `ReconcileResult`.
|
|
361
|
+
*/
|
|
362
|
+
export async function runReconcile(opts) {
|
|
363
|
+
const { scopes, client, cycles, scope, mode = "dry-run", diff: diffFn, guardrails = () => ({ ok: true }), diffOptions = {}, allowGuardrailOverride = false, requestBudget = 1000, } = opts;
|
|
364
|
+
const budget = new MutableRateBudget(requestBudget);
|
|
365
|
+
const cycleResults = [];
|
|
366
|
+
const erroredCycles = [];
|
|
367
|
+
const deferred = { skippedCycles: [], skippedEntries: [] };
|
|
368
|
+
const scopeEntries = Object.entries(scopes);
|
|
369
|
+
for (const cycle of cycles) {
|
|
370
|
+
for (const [scopeId, scopeConfig] of scopeEntries) {
|
|
371
|
+
if (budget.exhausted) {
|
|
372
|
+
deferred.skippedCycles.push(`${cycle.name}@${scopeId}`);
|
|
373
|
+
continue;
|
|
374
|
+
}
|
|
375
|
+
let live;
|
|
376
|
+
try {
|
|
377
|
+
live = await cycle.fetchLive(client, scopeId, scope, budget);
|
|
378
|
+
}
|
|
379
|
+
catch (err) {
|
|
380
|
+
if (err instanceof BudgetExhaustedError) {
|
|
381
|
+
deferred.skippedCycles.push(`${cycle.name}@${scopeId}`);
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
erroredCycles.push({ name: cycle.name, org: scopeId, stage: "fetchLive", error: errMsg(err) });
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
387
|
+
let desired;
|
|
388
|
+
try {
|
|
389
|
+
desired = cycle.buildDesired(scopeConfig, scopeId, scope);
|
|
390
|
+
}
|
|
391
|
+
catch (err) {
|
|
392
|
+
erroredCycles.push({ name: cycle.name, org: scopeId, stage: "buildDesired", error: errMsg(err) });
|
|
393
|
+
continue;
|
|
394
|
+
}
|
|
395
|
+
const changeSet = diffFn(scopeId, desired, live, diffOptions);
|
|
396
|
+
// Stamp the cycle's governance verb onto entries that don't
|
|
397
|
+
// carry one, so provider diffs stay verb-unaware.
|
|
398
|
+
if (cycle.verb) {
|
|
399
|
+
for (const e of changeSet.entries)
|
|
400
|
+
e.verb ?? (e.verb = cycle.verb);
|
|
401
|
+
}
|
|
402
|
+
const guardrailResult = guardrails(changeSet, live);
|
|
403
|
+
const counts = { create: 0, update: 0, delete: 0 };
|
|
404
|
+
for (const e of changeSet.entries)
|
|
405
|
+
counts[e.kind]++;
|
|
406
|
+
const cycleResult = {
|
|
407
|
+
name: cycle.name,
|
|
408
|
+
verb: cycle.verb,
|
|
409
|
+
org: scopeId,
|
|
410
|
+
counts,
|
|
411
|
+
guardrails: guardrailResult,
|
|
412
|
+
applied: [],
|
|
413
|
+
failed: [],
|
|
414
|
+
plan: renderChangeSet(changeSet),
|
|
415
|
+
guardrailBlocked: false,
|
|
416
|
+
};
|
|
417
|
+
if (mode === "dry-run") {
|
|
418
|
+
cycleResults.push(cycleResult);
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
if (!guardrailResult.ok && !allowGuardrailOverride) {
|
|
422
|
+
cycleResult.guardrailBlocked = true;
|
|
423
|
+
cycleResults.push(cycleResult);
|
|
424
|
+
continue;
|
|
425
|
+
}
|
|
426
|
+
for (const entry of changeSet.entries) {
|
|
427
|
+
if (budget.exhausted) {
|
|
428
|
+
deferred.skippedEntries.push({ cycleName: cycle.name, entry });
|
|
429
|
+
continue;
|
|
430
|
+
}
|
|
431
|
+
try {
|
|
432
|
+
await cycle.apply(client, entry, scopeId, scope, budget);
|
|
433
|
+
cycleResult.applied.push(entry);
|
|
434
|
+
}
|
|
435
|
+
catch (err) {
|
|
436
|
+
if (err instanceof BudgetExhaustedError) {
|
|
437
|
+
deferred.skippedEntries.push({ cycleName: cycle.name, entry });
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
cycleResult.failed.push({ entry, error: errMsg(err) });
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
cycleResults.push(cycleResult);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
const completed = deferred.skippedCycles.length === 0 &&
|
|
447
|
+
deferred.skippedEntries.length === 0 &&
|
|
448
|
+
erroredCycles.length === 0;
|
|
449
|
+
return { mode, completed, cycles: cycleResults, errored: erroredCycles, deferred, budgetRemaining: budget.remaining };
|
|
450
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for resolving resource-level attributes (DependsOn, Condition, etc.).
|
|
3
|
+
*
|
|
4
|
+
* Shared by lexicon serializers — the DependsOn resolution logic converts
|
|
5
|
+
* Declarable object references to logical names.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Resolve a DependsOn value (Declarable, string, or mixed array) into
|
|
9
|
+
* an array of logical resource names.
|
|
10
|
+
*
|
|
11
|
+
* - Strings pass through as-is (user-specified logical names)
|
|
12
|
+
* - Declarable objects are looked up in the entityNames map
|
|
13
|
+
* - Unknown values emit a console warning and are skipped
|
|
14
|
+
*/
|
|
15
|
+
export function resolveDependsOn(deps, entityNames, resourceName) {
|
|
16
|
+
const items = Array.isArray(deps) ? deps : [deps];
|
|
17
|
+
const resolved = [];
|
|
18
|
+
for (const dep of items) {
|
|
19
|
+
if (typeof dep === "string") {
|
|
20
|
+
resolved.push(dep);
|
|
21
|
+
}
|
|
22
|
+
else if (typeof dep === "object" && dep !== null && "entityType" in dep) {
|
|
23
|
+
const depName = entityNames.get(dep);
|
|
24
|
+
if (depName) {
|
|
25
|
+
resolved.push(depName);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.warn(`[chant] warning: DependsOn in "${resourceName}" references a declarable not found in the build — is the target resource exported?`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return resolved;
|
|
33
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime adapter — abstracts child-process and filesystem APIs for chant.
|
|
3
|
+
*
|
|
4
|
+
* The `target` parameter (from config) controls what commands get spawned
|
|
5
|
+
* (node/npx/npm), not which adapter class is used.
|
|
6
|
+
*/
|
|
7
|
+
import { dirname } from "path";
|
|
8
|
+
import { fileURLToPath } from "url";
|
|
9
|
+
import { createHash } from "crypto";
|
|
10
|
+
import { execFile } from "child_process";
|
|
11
|
+
// @ts-ignore — picomatch has no types declaration
|
|
12
|
+
import picomatch from "picomatch";
|
|
13
|
+
// ── Node adapter ─────────────────────────────────────────────────
|
|
14
|
+
class NodeRuntimeAdapter {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.name = "node";
|
|
17
|
+
this.hashAlgorithm = "sha256";
|
|
18
|
+
this.commands = { runner: "node", exec: "npx", packCmd: ["npm", "pack"] };
|
|
19
|
+
}
|
|
20
|
+
hash(content) {
|
|
21
|
+
return createHash("sha256").update(content).digest("hex");
|
|
22
|
+
}
|
|
23
|
+
globMatch(pattern, filePath) {
|
|
24
|
+
return picomatch(pattern)(filePath);
|
|
25
|
+
}
|
|
26
|
+
async spawn(cmd, opts) {
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
const child = execFile(cmd[0], cmd.slice(1), {
|
|
29
|
+
cwd: opts?.cwd,
|
|
30
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
31
|
+
...(opts?.env ? { env: { ...process.env, ...opts.env } } : {}),
|
|
32
|
+
}, (err, stdout, stderr) => {
|
|
33
|
+
resolve({
|
|
34
|
+
stdout: stdout ?? "",
|
|
35
|
+
stderr: stderr ?? "",
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
|
+
exitCode: err ? err.code ?? 1 : 0,
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
// Content is written verbatim (utf-8) — no shell involved, so nothing
|
|
41
|
+
// reinterprets backslash-escape sequences or needs quote-escaping.
|
|
42
|
+
// The error handler is load-bearing: a child that exits without reading
|
|
43
|
+
// stdin (any command that ignores it) makes this write race the pipe
|
|
44
|
+
// teardown, and an unhandled EPIPE 'error' event crashes the process.
|
|
45
|
+
if (child.stdin) {
|
|
46
|
+
child.stdin.on("error", () => {
|
|
47
|
+
/* EPIPE: child exited without consuming stdin — harmless */
|
|
48
|
+
});
|
|
49
|
+
child.stdin.end(opts?.stdin ?? "");
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// ── Singleton ────────────────────────────────────────────────────
|
|
55
|
+
let _runtime;
|
|
56
|
+
/**
|
|
57
|
+
* Initialize the runtime adapter singleton.
|
|
58
|
+
*/
|
|
59
|
+
export function initRuntime() {
|
|
60
|
+
_runtime = new NodeRuntimeAdapter();
|
|
61
|
+
return _runtime;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get the runtime adapter. Lazily initializes if not yet set.
|
|
65
|
+
*/
|
|
66
|
+
export function getRuntime() {
|
|
67
|
+
if (!_runtime) {
|
|
68
|
+
return initRuntime();
|
|
69
|
+
}
|
|
70
|
+
return _runtime;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Convert `import.meta.url` to a directory path.
|
|
74
|
+
*/
|
|
75
|
+
export function moduleDir(importMetaUrl) {
|
|
76
|
+
return dirname(fileURLToPath(importMetaUrl));
|
|
77
|
+
}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime factory constructors for generated resource and property classes.
|
|
3
|
+
*
|
|
4
|
+
* Creates classes that implement the Declarable interface with DECLARABLE_MARKER,
|
|
5
|
+
* lexicon, entityType, kind, and attribute references.
|
|
6
|
+
*/
|
|
7
|
+
import { DECLARABLE_MARKER } from "./declarable.js";
|
|
8
|
+
import { AttrRef } from "./attrref.js";
|
|
9
|
+
/**
|
|
10
|
+
* Create a resource class for a given type.
|
|
11
|
+
* The returned constructor creates Declarable objects with:
|
|
12
|
+
* - DECLARABLE_MARKER for type identification
|
|
13
|
+
* - lexicon identifier
|
|
14
|
+
* - entityType set to the resource type
|
|
15
|
+
* - kind "resource"
|
|
16
|
+
* - props stored from constructor argument
|
|
17
|
+
* - AttrRef instances for each attribute
|
|
18
|
+
*/
|
|
19
|
+
export function createResource(type, lexicon, attrMap) {
|
|
20
|
+
const ResourceClass = function (props, attributes) {
|
|
21
|
+
Object.defineProperty(this, DECLARABLE_MARKER, { value: true, enumerable: false });
|
|
22
|
+
Object.defineProperty(this, "lexicon", { value: lexicon, enumerable: false });
|
|
23
|
+
Object.defineProperty(this, "entityType", { value: type, enumerable: false });
|
|
24
|
+
Object.defineProperty(this, "kind", { value: "resource", enumerable: false });
|
|
25
|
+
Object.defineProperty(this, "props", { value: props ?? {}, enumerable: false, configurable: true });
|
|
26
|
+
Object.defineProperty(this, "attributes", { value: attributes ?? {}, enumerable: false, configurable: true });
|
|
27
|
+
// Ref returns the resource instance itself — the serializer walker
|
|
28
|
+
// detects Declarable objects and emits { Ref: logicalName }
|
|
29
|
+
Object.defineProperty(this, "Ref", { value: this, enumerable: false });
|
|
30
|
+
// Create AttrRef instances for each attribute
|
|
31
|
+
// Must be enumerable so getAttributes() can discover them for resolveAttrRefs()
|
|
32
|
+
for (const [camelName, attrName] of Object.entries(attrMap)) {
|
|
33
|
+
Object.defineProperty(this, camelName, {
|
|
34
|
+
value: new AttrRef(this, attrName),
|
|
35
|
+
enumerable: true,
|
|
36
|
+
writable: false,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
// Set the constructor name for debugging
|
|
41
|
+
Object.defineProperty(ResourceClass, "name", { value: type.split("::").pop() ?? type });
|
|
42
|
+
return ResourceClass;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a property-kind class for a given property type.
|
|
46
|
+
*
|
|
47
|
+
* Instances carry DECLARABLE_MARKER/lexicon/entityType/kind at runtime (set
|
|
48
|
+
* via defineProperty below), so they already satisfy `Declarable` — the
|
|
49
|
+
* return type just needs to say so. Before this, the signature was
|
|
50
|
+
* `Record<string, unknown>` with no `Declarable`, so any composite that
|
|
51
|
+
* returned a property-kind instance as a top-level member only type-checked
|
|
52
|
+
* by accident: either the caller went through an untyped `require()` (losing
|
|
53
|
+
* the type entirely) or never assigned the instance where its `Declarable`-ness
|
|
54
|
+
* was checked statically. See chant #1068.
|
|
55
|
+
*/
|
|
56
|
+
export function createProperty(type, lexicon) {
|
|
57
|
+
const PropertyClass = function (props) {
|
|
58
|
+
Object.defineProperty(this, DECLARABLE_MARKER, { value: true, enumerable: false });
|
|
59
|
+
Object.defineProperty(this, "lexicon", { value: lexicon, enumerable: false });
|
|
60
|
+
Object.defineProperty(this, "entityType", { value: type, enumerable: false });
|
|
61
|
+
Object.defineProperty(this, "kind", { value: "property", enumerable: false });
|
|
62
|
+
Object.defineProperty(this, "props", { value: props ?? {}, enumerable: false, configurable: true });
|
|
63
|
+
};
|
|
64
|
+
Object.defineProperty(PropertyClass, "name", { value: type.split(".").pop() ?? type });
|
|
65
|
+
return PropertyClass;
|
|
66
|
+
}
|