@intentius/chant 0.124.12 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +36 -4
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +8 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.d.ts +65 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.d.ts +4 -2
- package/dist/workspace/identity.d.ts.map +1 -1
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +3 -14
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +36 -6
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +3 -2
- package/src/gate-decision-identity.test.ts +176 -0
- package/src/gate-decision.ts +100 -22
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-point.test.ts +1 -0
- package/src/op/op-waves-run.ts +5 -4
- package/src/op/op-waves.test.ts +14 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/identity-gate-rule.ts +109 -0
- package/src/workspace/identity.ts +8 -18
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +5 -30
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activity contract registry — the schema-shaped sibling of
|
|
3
|
+
* `./activity-registry.ts` (chant #2101).
|
|
4
|
+
*
|
|
5
|
+
* `activity-contract.ts` left contract ownership per-caller on purpose: an
|
|
6
|
+
* activity declares its contract alongside its implementation, and whoever
|
|
7
|
+
* builds a contract map decides which activities it covers. What was missing
|
|
8
|
+
* was the other half of that arrangement, a way for the checks that validate
|
|
9
|
+
* Op steps to SEE a contract a lexicon declared. OPS012 and OPS013
|
|
10
|
+
* (`../lint/rules/op/`) walk every Op entity in the build, including steps
|
|
11
|
+
* calling `terraformPlan`, `k3sInstall`, `flyApply` or `gcpApply`, over
|
|
12
|
+
* core's own static table alone. Since #2122 moved those checks into core
|
|
13
|
+
* they fire on every project that declares an Op, so an Op built out of one
|
|
14
|
+
* lexicon's steps failed `chant build` outright even though `loadActivities`
|
|
15
|
+
* resolves the very same names at run time. Both terraform examples that
|
|
16
|
+
* carry an Op kept it outside `src/` because of the older, lexicon-hosted
|
|
17
|
+
* form of the same gap, which meant no example ever proved its Op builds.
|
|
18
|
+
*
|
|
19
|
+
* The resolution mirrors activities exactly, by convention:
|
|
20
|
+
* `@intentius/chant-lexicon-<name>/op/activity-contracts` is imported for
|
|
21
|
+
* every configured lexicon and every {@link ActivityContract} it exports is
|
|
22
|
+
* collected, keyed by the contract's declared `name`. A lexicon that ships
|
|
23
|
+
* no such module is skipped, the same way `loadActivities` skips one that
|
|
24
|
+
* contributes no activities. A plugin may also hand its contracts over
|
|
25
|
+
* directly through {@link LexiconActivityContractContributor}, for a lexicon
|
|
26
|
+
* whose contracts are not reachable at a subpath (a bundled single-file
|
|
27
|
+
* plugin, a project-local one).
|
|
28
|
+
*
|
|
29
|
+
* The merged map reaches a post-synth check as
|
|
30
|
+
* `PostSynthContext.activityContracts` (`../lint/post-synth.ts`), filled in
|
|
31
|
+
* by whoever runs the checks: `chant build`, `chant lint` and
|
|
32
|
+
* `check-lexicon`'s example harness all do. A check merges it over its own
|
|
33
|
+
* base table rather than replacing it, so a context that carries none (a
|
|
34
|
+
* hand-built one in a test) behaves exactly as before this existed.
|
|
35
|
+
*/
|
|
36
|
+
import * as coreContracts from "./activities/activity-contracts.js";
|
|
37
|
+
import { collectActivityContracts } from "./activity-contract.js";
|
|
38
|
+
import { importLexiconModule, importLexiconPackage } from "../lexicon-module.js";
|
|
39
|
+
/**
|
|
40
|
+
* Build the activity-contract map for build-time validation: core's own
|
|
41
|
+
* contracts (`./activities/activity-contracts`, a static import so a project
|
|
42
|
+
* that has installed nothing but chant still gets them) plus every contract
|
|
43
|
+
* the named lexicons contribute.
|
|
44
|
+
*
|
|
45
|
+
* `lexicons` may be plain names or plugin-shaped objects; a plugin's
|
|
46
|
+
* `activityContracts()` is read after its conventional module, so a plugin
|
|
47
|
+
* that declares both wins on a name collision with itself. Across lexicons,
|
|
48
|
+
* last one in wins, which is the same rule `loadActivities` applies to
|
|
49
|
+
* implementations.
|
|
50
|
+
*
|
|
51
|
+
* Never throws: an absent lexicon, a missing subpath, or a plugin member that
|
|
52
|
+
* throws all leave the map as it was.
|
|
53
|
+
*/
|
|
54
|
+
export async function loadActivityContracts(lexicons = []) {
|
|
55
|
+
const contracts = new Map();
|
|
56
|
+
collectActivityContracts(coreContracts, contracts);
|
|
57
|
+
for (const entry of lexicons) {
|
|
58
|
+
const name = typeof entry === "string" ? entry : entry.name;
|
|
59
|
+
let contributor = typeof entry === "string" ? undefined : entry;
|
|
60
|
+
try {
|
|
61
|
+
// chant #2520 — a lexicon declared by module path has no subpath to
|
|
62
|
+
// import. Its plugin's `activityContracts()` member stands in for it;
|
|
63
|
+
// given only the name, the plugin is read from the declared module.
|
|
64
|
+
const local = await importLexiconModule(name);
|
|
65
|
+
if (local !== undefined) {
|
|
66
|
+
contributor ?? (contributor = Object.values(local).find((v) => typeof v === "object" && v !== null && v.name === name &&
|
|
67
|
+
typeof v.activityContracts === "function"));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const spec = `@intentius/chant-lexicon-${name}/op/activity-contracts`;
|
|
71
|
+
collectActivityContracts((await importLexiconPackage(spec)), contracts);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Lexicon absent or declares no contracts at the conventional subpath.
|
|
76
|
+
}
|
|
77
|
+
if (contributor !== undefined && typeof contributor.activityContracts === "function") {
|
|
78
|
+
try {
|
|
79
|
+
for (const contract of contributor.activityContracts())
|
|
80
|
+
contracts.set(contract.name, contract);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// A plugin member that throws contributes nothing, the same as one that is absent.
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return contracts;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Merge a check's own base contracts with the ones the build loaded, into the
|
|
91
|
+
* map `validateActivitySteps`/`validateStepOutputRefs` take. The loaded set
|
|
92
|
+
* wins on a name collision: it is the one resolved against the lexicons this
|
|
93
|
+
* build actually configured, whereas the base table is whatever the check
|
|
94
|
+
* imported statically.
|
|
95
|
+
*
|
|
96
|
+
* `loaded` being `undefined` is the ordinary case for a hand-built
|
|
97
|
+
* `PostSynthContext` and yields the base table unchanged.
|
|
98
|
+
*/
|
|
99
|
+
export function mergeActivityContracts(base, loaded) {
|
|
100
|
+
if (!loaded || loaded.size === 0)
|
|
101
|
+
return base;
|
|
102
|
+
const merged = new Map(base);
|
|
103
|
+
for (const [name, contract] of loaded)
|
|
104
|
+
merged.set(name, contract);
|
|
105
|
+
return merged;
|
|
106
|
+
}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activity contracts — the Stage 1 fix for chant #1288 ("Ops are the one
|
|
3
|
+
* place chant accepts untyped arguments and resolves names at runtime").
|
|
4
|
+
*
|
|
5
|
+
* Maintainer decision (#1288, 2026-08-25): a staged approach. Stage 1 (this
|
|
6
|
+
* module) is registered args/return schemas per activity, validated by
|
|
7
|
+
* `chant build` against every step — non-breaking, no change to
|
|
8
|
+
* {@link ActivityStep.args}'s `Record<string, unknown>` shape or the step
|
|
9
|
+
* builders. Stage 2 (a separate PR) regenerates the step builders as fully
|
|
10
|
+
* typed wrappers for editor completion and go-to-definition. #1289 (op.json
|
|
11
|
+
* IR) and #1290 (step-output references) build on these contracts — #1290
|
|
12
|
+
* specifically needs a declared `returns` schema to validate a later step's
|
|
13
|
+
* reference into an earlier one's output against, which is why `returns` is
|
|
14
|
+
* part of the shape here even though nothing in Stage 1 reads it for that.
|
|
15
|
+
*
|
|
16
|
+
* An activity declares a contract alongside its implementation — the same
|
|
17
|
+
* "registration surface" the issue asked for (`activity-registry.ts`'s
|
|
18
|
+
* `collectActivities` already does this for implementations; this is the
|
|
19
|
+
* schema-shaped sibling). `chant build` resolves each step's `fn` against a
|
|
20
|
+
* contract map built from `Object.values()` of an activity-contracts module
|
|
21
|
+
* and validates `args` and `outcomeAttribute.from` — core's own OPS012
|
|
22
|
+
* (`../lint/rules/op/ops012-activity-contract.ts`, chant #2122) does this
|
|
23
|
+
* for every declared Op regardless of which lexicons are configured; a
|
|
24
|
+
* lexicon's own post-synth check can additionally validate against its own
|
|
25
|
+
* roster the same way (a lexicon-owned check did this before #2122 moved the
|
|
26
|
+
* op-model checks to core). A step whose `fn` has no registered
|
|
27
|
+
* contract is skipped (not an error): this is deliberately incremental — a
|
|
28
|
+
* contract map opts an activity in by declaring one for it, and the
|
|
29
|
+
* k8s/aws/azure/gcp/fly activity sets are expected to pick this up one at a
|
|
30
|
+
* time rather than all at once (see the issue's "worth checking this lands
|
|
31
|
+
* cleanly" note).
|
|
32
|
+
*
|
|
33
|
+
* Ownership of a contract map is per-caller, not a shared cross-lexicon
|
|
34
|
+
* registry: whoever builds the map (core's OPS012/OPS013, or a lexicon's own
|
|
35
|
+
* check) decides which activities it covers. A `Chant::Op` step can call an
|
|
36
|
+
* activity contributed by any lexicon, and `PostSynthContext.entities`
|
|
37
|
+
* already carries the whole resolved graph to every check, so no new
|
|
38
|
+
* plumbing is needed for that to work.
|
|
39
|
+
*/
|
|
40
|
+
import { z } from "zod";
|
|
41
|
+
import { outcomeAttributesOf } from "./types.js";
|
|
42
|
+
import { ACTIVITY_PROFILE_NAMES, stepTimeoutProblem } from "./activity-profiles.js";
|
|
43
|
+
/**
|
|
44
|
+
* Every literal value {@link ActivityStep.profile} may hold, read off
|
|
45
|
+
* {@link ACTIVITY_PROFILES} itself so the runtime list cannot drift from the
|
|
46
|
+
* table the type is derived from.
|
|
47
|
+
*/
|
|
48
|
+
export const KNOWN_ACTIVITY_PROFILES = ACTIVITY_PROFILE_NAMES;
|
|
49
|
+
const CONTRACT_BRAND = Symbol.for("chant.op.activityContract");
|
|
50
|
+
/** Declare an activity contract. */
|
|
51
|
+
export function activityContract(name, args, returns, opts) {
|
|
52
|
+
return {
|
|
53
|
+
[CONTRACT_BRAND]: true,
|
|
54
|
+
name,
|
|
55
|
+
args,
|
|
56
|
+
...(returns ? { returns } : {}),
|
|
57
|
+
...(opts?.entities && opts.entities.length > 0 ? { entities: opts.entities } : {}),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** Structural guard for a value produced by {@link activityContract}. */
|
|
61
|
+
export function isActivityContract(value) {
|
|
62
|
+
return typeof value === "object" && value !== null && value[CONTRACT_BRAND] === true;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Add every {@link ActivityContract} exported from an activity-contracts
|
|
66
|
+
* module to `into`, keyed by its declared `name` — the schema-shaped sibling
|
|
67
|
+
* of `activity-registry.ts`'s `collectActivities`.
|
|
68
|
+
*/
|
|
69
|
+
export function collectActivityContracts(mod, into) {
|
|
70
|
+
for (const value of Object.values(mod)) {
|
|
71
|
+
if (isActivityContract(value))
|
|
72
|
+
into.set(value.name, value);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** Every `ActivityStep` in a phase, including ones nested inside an `EffectStep`. */
|
|
76
|
+
function activityStepsOf(steps) {
|
|
77
|
+
return steps.flatMap((s) => (s.kind === "activity" ? [s] : s.kind === "effect" ? s.steps.filter((n) => n.kind === "activity") : []));
|
|
78
|
+
}
|
|
79
|
+
// Same global symbol `step-output-ref.ts` brands a `StepOutputRef` with —
|
|
80
|
+
// `Symbol.for(...)` interns by string key, so this recognizes one without
|
|
81
|
+
// importing that module (which itself imports `pathExistsInSchema` below;
|
|
82
|
+
// importing the other way would make the two files a cycle).
|
|
83
|
+
const STEP_OUTPUT_REF_BRAND = Symbol.for("chant.op.stepOutputRef");
|
|
84
|
+
function isStepOutputRefValue(value) {
|
|
85
|
+
return typeof value === "object" && value !== null && value[STEP_OUTPUT_REF_BRAND] === true;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Does any prefix of `path` (a zod issue's `.path`) inside `obj` land on a
|
|
89
|
+
* step-output reference? A reference stands in for the whole value at its
|
|
90
|
+
* position, so an issue at or below it describes the placeholder, not the
|
|
91
|
+
* value it resolves to. "Below" matters for a whole-value reference in a
|
|
92
|
+
* record-typed arg (`inputs: step.out.json`, #3299): zod walks the
|
|
93
|
+
* reference's own keys, brand symbol included, and reports issues inside it.
|
|
94
|
+
*/
|
|
95
|
+
function pathCrossesStepOutputRef(obj, path) {
|
|
96
|
+
let current = obj;
|
|
97
|
+
for (const segment of path) {
|
|
98
|
+
if (current === null || typeof current !== "object")
|
|
99
|
+
return false;
|
|
100
|
+
current = current[segment];
|
|
101
|
+
if (isStepOutputRefValue(current))
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
/** Unwrap `ZodOptional`/`ZodNullable`/`ZodDefault` (and similar) down to the schema they wrap. */
|
|
107
|
+
function unwrap(schema) {
|
|
108
|
+
let current = schema;
|
|
109
|
+
while (typeof current.unwrap === "function") {
|
|
110
|
+
current = current.unwrap();
|
|
111
|
+
}
|
|
112
|
+
return current;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Does dot-path `path` resolve to a field that exists on `schema`? Object
|
|
116
|
+
* shapes only — a return schema whose root (or an intermediate segment) is
|
|
117
|
+
* a `z.record(...)`/`z.array(...)` rather than a `z.object(...)` hard-errors
|
|
118
|
+
* (returns `false`) instead of skipping, deliberately (chant #1290 comment
|
|
119
|
+
* on #1288's pre-merge review): a record's keys are dynamic and an array's
|
|
120
|
+
* elements are index-addressed, neither of which a dot-path segment can
|
|
121
|
+
* check against in any way that's more meaningful than "the author probably
|
|
122
|
+
* meant something else." No declared `returns` schema needs this today, so
|
|
123
|
+
* there's no live case to design against yet. The escape hatch is an empty
|
|
124
|
+
* path — `outcomeAttribute.from` omitted, or a {@link StepOutputRef}'s
|
|
125
|
+
* `path` omitted — which references the whole return value and never calls
|
|
126
|
+
* this function; a record/array-returning activity's whole value is always
|
|
127
|
+
* a valid reference target.
|
|
128
|
+
*/
|
|
129
|
+
export function pathExistsInSchema(schema, path) {
|
|
130
|
+
return schemaAtPath(schema, path.split(".")) !== undefined;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The zod schema at property-key path `path` inside `schema`, walking
|
|
134
|
+
* through `z.ZodObject` shapes only (unwrapping optional/nullable/default at
|
|
135
|
+
* each level, same as {@link pathExistsInSchema}). `undefined` when a
|
|
136
|
+
* segment doesn't resolve, or an intermediate schema isn't a `z.ZodObject` —
|
|
137
|
+
* same record/array hard-stop {@link pathExistsInSchema} documents. An empty
|
|
138
|
+
* `path` returns `schema` itself (unwrapped).
|
|
139
|
+
*/
|
|
140
|
+
export function schemaAtPath(schema, path) {
|
|
141
|
+
let current = unwrap(schema);
|
|
142
|
+
for (const segment of path) {
|
|
143
|
+
if (!(current instanceof z.ZodObject))
|
|
144
|
+
return undefined;
|
|
145
|
+
const shape = current.shape;
|
|
146
|
+
if (!(segment in shape))
|
|
147
|
+
return undefined;
|
|
148
|
+
current = unwrap(shape[segment]);
|
|
149
|
+
}
|
|
150
|
+
return current;
|
|
151
|
+
}
|
|
152
|
+
export function primitiveKindOf(schema) {
|
|
153
|
+
const s = unwrap(schema);
|
|
154
|
+
if (s instanceof z.ZodString)
|
|
155
|
+
return "string";
|
|
156
|
+
if (s instanceof z.ZodNumber)
|
|
157
|
+
return "number";
|
|
158
|
+
if (s instanceof z.ZodBoolean)
|
|
159
|
+
return "boolean";
|
|
160
|
+
if (s instanceof z.ZodObject)
|
|
161
|
+
return "object";
|
|
162
|
+
if (s instanceof z.ZodArray)
|
|
163
|
+
return "array";
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Validate every activity step in an Op's phases (main and `onFailure`)
|
|
168
|
+
* against a contract map. A step whose `fn` has no entry in `contracts` is
|
|
169
|
+
* skipped — Stage 1 is opt-in per activity, not a hard requirement that
|
|
170
|
+
* every activity have a declared contract.
|
|
171
|
+
*
|
|
172
|
+
* Catches the four failure classes chant #1288 names:
|
|
173
|
+
* - an unrecognized `profile` (checked against {@link KNOWN_ACTIVITY_PROFILES}, independent of whether `fn` has a contract),
|
|
174
|
+
* - a step's own `timeout` that is not a duration, or is longer than `MAX_STEP_TIMEOUT` (#2787),
|
|
175
|
+
* - an args key the declared schema doesn't recognize,
|
|
176
|
+
* - an args value of the wrong type (including a required key that's missing),
|
|
177
|
+
* - an `outcomeAttribute.from` path that can't exist on the declared return type.
|
|
178
|
+
*/
|
|
179
|
+
export function validateActivitySteps(config, contracts) {
|
|
180
|
+
const issues = [];
|
|
181
|
+
const phasesToWalk = [...config.phases, ...(config.onFailure ?? [])];
|
|
182
|
+
for (const phase of phasesToWalk) {
|
|
183
|
+
for (const step of activityStepsOf(phase.steps)) {
|
|
184
|
+
if (step.profile && !KNOWN_ACTIVITY_PROFILES.includes(step.profile)) {
|
|
185
|
+
issues.push({
|
|
186
|
+
opName: config.name,
|
|
187
|
+
phase: phase.name,
|
|
188
|
+
fn: step.fn,
|
|
189
|
+
message: `unknown profile "${step.profile}" (known: ${KNOWN_ACTIVITY_PROFILES.join(", ")})`,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
if (step.timeout !== undefined) {
|
|
193
|
+
const problem = stepTimeoutProblem(step.timeout);
|
|
194
|
+
if (problem)
|
|
195
|
+
issues.push({ opName: config.name, phase: phase.name, fn: step.fn, message: problem });
|
|
196
|
+
}
|
|
197
|
+
const contract = contracts.get(step.fn);
|
|
198
|
+
if (!contract)
|
|
199
|
+
continue;
|
|
200
|
+
const parsed = contract.args.safeParse(step.args ?? {});
|
|
201
|
+
if (!parsed.success) {
|
|
202
|
+
for (const issue of parsed.error.issues) {
|
|
203
|
+
// A step-output reference (#1290) sitting at this path, or above
|
|
204
|
+
// it, is a placeholder object at build time, not the value it
|
|
205
|
+
// will resolve to — so an args-schema issue there is a false
|
|
206
|
+
// positive; OPS013 (`validateStepOutputRefs`) is what validates
|
|
207
|
+
// a reference, against the *producer's* declared return schema.
|
|
208
|
+
// An unrecognized-key issue's path is the parent object (`[]`
|
|
209
|
+
// for a top-level extra key), which is never itself a reference,
|
|
210
|
+
// so a genuinely misspelled key is still caught either way.
|
|
211
|
+
if (pathCrossesStepOutputRef(step.args, issue.path))
|
|
212
|
+
continue;
|
|
213
|
+
// String(), not join(): a zod path can hold a symbol key, and
|
|
214
|
+
// join() throws converting one (#3299).
|
|
215
|
+
const path = issue.path.length > 0 ? issue.path.map((segment) => String(segment)).join(".") : "(args)";
|
|
216
|
+
issues.push({ opName: config.name, phase: phase.name, fn: step.fn, message: `args.${path}: ${issue.message}` });
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
for (const attr of outcomeAttributesOf(step)) {
|
|
220
|
+
if (attr.from && contract.returns && !pathExistsInSchema(contract.returns, attr.from)) {
|
|
221
|
+
issues.push({
|
|
222
|
+
opName: config.name,
|
|
223
|
+
phase: phase.name,
|
|
224
|
+
fn: step.fn,
|
|
225
|
+
message: `outcomeAttribute.from "${attr.from}" does not exist on "${step.fn}"'s declared return type`,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return issues;
|
|
232
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A terminal activity failure.
|
|
3
|
+
*
|
|
4
|
+
* Some activities fail deterministically: an organizational policy violation
|
|
5
|
+
* (`policyGate`) or a cfn-guard finding (`guardValidate`) reads the same on the
|
|
6
|
+
* second attempt as on the first, so a retry only delays the report. Those
|
|
7
|
+
* activities used to raise an orchestrator SDK's non-retryable failure type,
|
|
8
|
+
* which put that SDK on the import path of every base activity. Core owns the
|
|
9
|
+
* base activities now (chant #2114), and depends on no runtime SDK — this is
|
|
10
|
+
* the same signal in a plain `Error`.
|
|
11
|
+
*
|
|
12
|
+
* `name` is the failure type, not the class name, so the local executor's
|
|
13
|
+
* `retry.nonRetryableErrorTypes` (which matches on `Error.name`) can name it in
|
|
14
|
+
* a profile. `type` and `nonRetryable` are kept alongside it because that is
|
|
15
|
+
* the shape callers and tests already read.
|
|
16
|
+
*/
|
|
17
|
+
export class NonRetryableActivityError extends Error {
|
|
18
|
+
constructor(message,
|
|
19
|
+
/** Failure type, e.g. `"PolicyViolation"`. Also this error's `name`. */
|
|
20
|
+
type) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.type = type;
|
|
23
|
+
/** Always true — present so a caller can branch without an `instanceof`. */
|
|
24
|
+
this.nonRetryable = true;
|
|
25
|
+
this.name = type;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Build a {@link NonRetryableActivityError} — a non-retryable failure with no SDK behind it. */
|
|
29
|
+
export function nonRetryableFailure(message, type) {
|
|
30
|
+
return new NonRetryableActivityError(message, type);
|
|
31
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activity timeout and retry profiles.
|
|
3
|
+
*
|
|
4
|
+
* A profile is a named retry/timeout shape an Op step opts into
|
|
5
|
+
* (`activity("chantBuild", …, "fastIdempotent")`), so tuning lives in one table
|
|
6
|
+
* instead of inline at every call site. The six names cover the shapes infra
|
|
7
|
+
* steps actually take: fast idempotent work, long infra, K8s wait loops, a
|
|
8
|
+
* human gate, an Argo sync wait, and a deterministic policy check.
|
|
9
|
+
*
|
|
10
|
+
* These lived in a hosting lexicon, under its own prefixed name, until chant
|
|
11
|
+
* #2114 moved the base activities into core. Nothing about a timeout or a
|
|
12
|
+
* backoff coefficient belonged to that runtime, so the table came with them and
|
|
13
|
+
* lost the prefix. `heartbeatTimeout` did not come along: it configured a
|
|
14
|
+
* liveness protocol between a worker and a server, and no in-process step
|
|
15
|
+
* heartbeats to anything.
|
|
16
|
+
*/
|
|
17
|
+
import { parseDuration } from "./duration.js";
|
|
18
|
+
/** Named activity profiles for common infrastructure step patterns. */
|
|
19
|
+
export const ACTIVITY_PROFILES = {
|
|
20
|
+
/**
|
|
21
|
+
* Fast, idempotent operations: `chant build`, `kubectl apply` without `--wait`,
|
|
22
|
+
* fetching nameservers, reading cluster status.
|
|
23
|
+
*/
|
|
24
|
+
fastIdempotent: {
|
|
25
|
+
timeout: "5m",
|
|
26
|
+
retry: { maximumAttempts: 3, initialInterval: "5s", backoffCoefficient: 2 },
|
|
27
|
+
},
|
|
28
|
+
/**
|
|
29
|
+
* Long-running infra: GKE cluster creation via Config Connector (~10-20 min),
|
|
30
|
+
* `kubectl apply --wait` for large resource sets, Helm installs.
|
|
31
|
+
*/
|
|
32
|
+
longInfra: {
|
|
33
|
+
timeout: "20m",
|
|
34
|
+
retry: { maximumAttempts: 3, initialInterval: "30s", backoffCoefficient: 2 },
|
|
35
|
+
},
|
|
36
|
+
/**
|
|
37
|
+
* K8s wait loops: polling for StatefulSet rollout, ExternalDNS A-records,
|
|
38
|
+
* DNS propagation.
|
|
39
|
+
*/
|
|
40
|
+
k8sWait: {
|
|
41
|
+
timeout: "15m",
|
|
42
|
+
// A terminal-state resource (waitForReady's ReadinessFailedError) will never
|
|
43
|
+
// become ready — fail fast instead of exhausting retries.
|
|
44
|
+
retry: {
|
|
45
|
+
maximumAttempts: 3,
|
|
46
|
+
initialInterval: "10s",
|
|
47
|
+
backoffCoefficient: 2,
|
|
48
|
+
nonRetryableErrorTypes: ["ReadinessFailedError"],
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
/**
|
|
52
|
+
* A command chant did not write and cannot know is safe to repeat (#2411).
|
|
53
|
+
*
|
|
54
|
+
* `shellCmd` is the escape hatch: its whole purpose is to run something
|
|
55
|
+
* outside the model, so nothing here can judge whether a second attempt is
|
|
56
|
+
* harmless or a second deployment. Every other activity carrying a retrying
|
|
57
|
+
* profile is one chant authored and knows the shape of.
|
|
58
|
+
*
|
|
59
|
+
* Twenty minutes, because a shell step is as likely to be a long build as a
|
|
60
|
+
* quick script, and one attempt, because retrying is the claim that needs
|
|
61
|
+
* evidence. An author who knows their command is idempotent names
|
|
62
|
+
* `fastIdempotent` or `longInfra` and gets retries back.
|
|
63
|
+
*/
|
|
64
|
+
atMostOnce: {
|
|
65
|
+
timeout: "20m",
|
|
66
|
+
retry: { maximumAttempts: 1 },
|
|
67
|
+
},
|
|
68
|
+
/**
|
|
69
|
+
* Human-gate steps: waiting for an operator action (DNS delegation, approval).
|
|
70
|
+
* Very long timeout, single attempt — no retry on human-gate timeouts.
|
|
71
|
+
*/
|
|
72
|
+
humanGate: {
|
|
73
|
+
timeout: "48h",
|
|
74
|
+
retry: { maximumAttempts: 1 },
|
|
75
|
+
},
|
|
76
|
+
/**
|
|
77
|
+
* Argo CD sync waits: poll an Application until `health=Healthy && sync=Synced`
|
|
78
|
+
* (`waitForArgoSync`). Long timeout for slow first syncs, cheap idempotent
|
|
79
|
+
* retries — re-polling is free. A terminal-unhealthy Application fails fast
|
|
80
|
+
* via `ArgoSyncFailedError` (non-retryable).
|
|
81
|
+
*/
|
|
82
|
+
argoSync: {
|
|
83
|
+
timeout: "30m",
|
|
84
|
+
retry: {
|
|
85
|
+
maximumAttempts: 5,
|
|
86
|
+
initialInterval: "10s",
|
|
87
|
+
backoffCoefficient: 2,
|
|
88
|
+
maximumInterval: "1m",
|
|
89
|
+
nonRetryableErrorTypes: ["ArgoSyncFailedError"],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
/**
|
|
93
|
+
* Organizational policy gate (`policyGate`): build the project and evaluate
|
|
94
|
+
* `lint.policies`. Deterministic — a violation is the same on every attempt —
|
|
95
|
+
* so a single attempt, short timeout, no retry.
|
|
96
|
+
*/
|
|
97
|
+
policyCheck: {
|
|
98
|
+
timeout: "5m",
|
|
99
|
+
retry: { maximumAttempts: 1 },
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
/** Every profile name, as a runtime list (`KNOWN_ACTIVITY_PROFILES`'s source). */
|
|
103
|
+
export const ACTIVITY_PROFILE_NAMES = Object.keys(ACTIVITY_PROFILES);
|
|
104
|
+
/**
|
|
105
|
+
* The longest timeout one step may declare for itself (#2787): six hours, the
|
|
106
|
+
* ceiling hosted CI puts on a single job. A step's own `timeout` replaces its
|
|
107
|
+
* profile's and keeps the profile's retries, so a builder `shell` step can
|
|
108
|
+
* run 45 minutes on its one attempt. Anything that waits longer is waiting on
|
|
109
|
+
* someone, which is a gate's job (`humanGate`, 48 hours), not a step's.
|
|
110
|
+
*/
|
|
111
|
+
export const MAX_STEP_TIMEOUT = "6h";
|
|
112
|
+
/** {@link MAX_STEP_TIMEOUT} in milliseconds. */
|
|
113
|
+
export const MAX_STEP_TIMEOUT_MS = 6 * 3600000;
|
|
114
|
+
/**
|
|
115
|
+
* Why `timeout` can't be a step's own timeout, or null when it can: it must
|
|
116
|
+
* be a duration such as `45m` or `1h30m`, more than zero, and at most
|
|
117
|
+
* {@link MAX_STEP_TIMEOUT}.
|
|
118
|
+
*/
|
|
119
|
+
export function stepTimeoutProblem(timeout) {
|
|
120
|
+
if (typeof timeout !== "string" || !/^(\d+(ms|s|m|h|d))+$/.test(timeout)) {
|
|
121
|
+
return `timeout ${JSON.stringify(timeout)} is not a duration such as "45m" or "1h30m"`;
|
|
122
|
+
}
|
|
123
|
+
const ms = parseDuration(timeout);
|
|
124
|
+
if (ms <= 0)
|
|
125
|
+
return `timeout "${timeout}" must be more than zero`;
|
|
126
|
+
if (ms > MAX_STEP_TIMEOUT_MS)
|
|
127
|
+
return `timeout "${timeout}" is longer than a step may run (${MAX_STEP_TIMEOUT}); a longer wait is a gate's`;
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activity registry — resolves an Op step's `fn` name to a callable activity
|
|
3
|
+
* implementation for local execution.
|
|
4
|
+
*
|
|
5
|
+
* The base activities are core's own (`./activities`): plain async functions
|
|
6
|
+
* taking a single args object, with no workflow engine anywhere in the call
|
|
7
|
+
* path. They are imported statically, so `loadActivities([])` works in a
|
|
8
|
+
* project that has installed nothing but chant. Product-specific appliers stay
|
|
9
|
+
* in their owning lexicon (#809) and are pulled in dynamically per the
|
|
10
|
+
* project's configured lexicon list.
|
|
11
|
+
*/
|
|
12
|
+
import * as baseActivities from "./activities/index.js";
|
|
13
|
+
import { ACTIVITY_PROFILES } from "./activity-profiles.js";
|
|
14
|
+
import { importLexiconModule, importLexiconPackage } from "../lexicon-module.js";
|
|
15
|
+
/**
|
|
16
|
+
* The export an activity module lists its fallback activities under: names it
|
|
17
|
+
* provides only when no other configured lexicon does (#3657). The sql
|
|
18
|
+
* lexicon's `receiptRead` / `receiptWrite` / `receiptStaleness` are the case:
|
|
19
|
+
* a project that uses only sql keeps its `effect()` receipts on its database
|
|
20
|
+
* server, and one that also configures aws or k8s keeps them in that
|
|
21
|
+
* lexicon's receipt row, whichever order `lexicons` lists them in.
|
|
22
|
+
*/
|
|
23
|
+
export const ACTIVITY_FALLBACKS_EXPORT = "ACTIVITY_FALLBACKS";
|
|
24
|
+
/**
|
|
25
|
+
* Add every exported function from an activity module to `into`, keyed by
|
|
26
|
+
* name. A name the module lists in {@link ACTIVITY_FALLBACKS_EXPORT} is added
|
|
27
|
+
* only when nothing provides it yet; any other export replaces what is there,
|
|
28
|
+
* a fallback included.
|
|
29
|
+
*/
|
|
30
|
+
function collectActivities(mod, into) {
|
|
31
|
+
const listed = mod[ACTIVITY_FALLBACKS_EXPORT];
|
|
32
|
+
const fallbacks = new Set(Array.isArray(listed) ? listed.filter((n) => typeof n === "string") : []);
|
|
33
|
+
for (const [name, value] of Object.entries(mod)) {
|
|
34
|
+
if (typeof value !== "function")
|
|
35
|
+
continue;
|
|
36
|
+
if (fallbacks.has(name) && into.has(name))
|
|
37
|
+
continue;
|
|
38
|
+
into.set(name, value);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build the activity map for local execution: core's base activities plus every
|
|
43
|
+
* activity module the project's configured lexicons contribute, keyed by export
|
|
44
|
+
* name (`shellCmd`, `kubectlApply`, `gcpApply`, …).
|
|
45
|
+
*
|
|
46
|
+
* Cloud-specific appliers live in their own lexicon (aws → `flociUp`/`flociDown`,
|
|
47
|
+
* gcp → `gcpApply`, azure → `azGroupEnsure`/`azGroupDelete`), so `lexicons` —
|
|
48
|
+
* the project's configured lexicon list — is consulted to pull those in. A
|
|
49
|
+
* lexicon that ships no `op/activities` module is skipped. A lexicon's
|
|
50
|
+
* fallback activities ({@link ACTIVITY_FALLBACKS_EXPORT}) give way to another
|
|
51
|
+
* lexicon's activity of the same name; otherwise a later lexicon's export
|
|
52
|
+
* replaces an earlier one's.
|
|
53
|
+
*
|
|
54
|
+
* Never throws: the base library is a static import, so there is no "no
|
|
55
|
+
* activities registered" state to report.
|
|
56
|
+
*/
|
|
57
|
+
export async function loadActivities(lexicons = []) {
|
|
58
|
+
const activities = new Map();
|
|
59
|
+
collectActivities(baseActivities, activities);
|
|
60
|
+
for (const name of lexicons) {
|
|
61
|
+
try {
|
|
62
|
+
// chant #2520 — a lexicon declared by module path has no subpath to
|
|
63
|
+
// import; its plugin's `activities()` member stands in for it.
|
|
64
|
+
const local = await importLexiconModule(name);
|
|
65
|
+
if (local !== undefined) {
|
|
66
|
+
const plugin = Object.values(local).find((v) => isActivityContributor(v) && v.name === name);
|
|
67
|
+
if (plugin)
|
|
68
|
+
collectActivities(await plugin.activities(), activities);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const spec = `@intentius/chant-lexicon-${name}/op/activities`;
|
|
72
|
+
collectActivities((await importLexiconPackage(spec)), activities);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Lexicon absent or contributes no activities — fine.
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return activities;
|
|
79
|
+
}
|
|
80
|
+
function isActivityContributor(value) {
|
|
81
|
+
return (typeof value === "object" &&
|
|
82
|
+
value !== null &&
|
|
83
|
+
typeof value.name === "string" &&
|
|
84
|
+
typeof value.activities === "function");
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The built-in profile table. Kept async because it is awaited on the CLI's
|
|
88
|
+
* run path alongside {@link loadActivities}, and because a hosted runtime may
|
|
89
|
+
* one day resolve profiles from somewhere less immediate.
|
|
90
|
+
*/
|
|
91
|
+
export async function loadProfiles() {
|
|
92
|
+
return ACTIVITY_PROFILES;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Resolve a step's `fn` against the loaded activity map.
|
|
96
|
+
* Throws a clear error listing known names if the activity is missing.
|
|
97
|
+
*/
|
|
98
|
+
export function resolveActivity(activities, fn) {
|
|
99
|
+
const activity = activities.get(fn);
|
|
100
|
+
if (!activity) {
|
|
101
|
+
const known = [...activities.keys()].sort().join(", ");
|
|
102
|
+
throw new Error(`no activity named "${fn}" (known: ${known})`);
|
|
103
|
+
}
|
|
104
|
+
return activity;
|
|
105
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activity runtime helpers shared by every Op activity implementation, wherever
|
|
3
|
+
* it lives — the base activities in `./activities` and the product-specific
|
|
4
|
+
* appliers in the aws/gcp/azure/k8s/fly lexicons. Hosting them in core keeps a
|
|
5
|
+
* lexicon from depending on another lexicon just to sleep between polls.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Sleep for `ms`, rejecting early if `signal` aborts. Polling activities use
|
|
9
|
+
* this between attempts so a local-executor timeout or Ctrl-C interrupts the
|
|
10
|
+
* wait instead of running it to completion.
|
|
11
|
+
*/
|
|
12
|
+
export function sleep(ms, signal) {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
if (signal?.aborted) {
|
|
15
|
+
reject(new Error("aborted"));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const onAbort = () => {
|
|
19
|
+
clearTimeout(timer);
|
|
20
|
+
reject(new Error("aborted"));
|
|
21
|
+
};
|
|
22
|
+
const timer = setTimeout(() => {
|
|
23
|
+
signal?.removeEventListener("abort", onAbort);
|
|
24
|
+
resolve();
|
|
25
|
+
}, ms);
|
|
26
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
27
|
+
});
|
|
28
|
+
}
|