@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
package/dist/config.js
ADDED
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "fs";
|
|
2
|
+
import { dirname, join } from "path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { DEFAULT_SBOM_FORMAT } from "./components/verbs/sbom-generator.js";
|
|
5
|
+
import { findProjectConfig } from "./project-root.js";
|
|
6
|
+
import { evaluateProjectConfig } from "./config-sandbox.js";
|
|
7
|
+
import { lexiconNames, pathLexiconRoot, registerLexiconDeclarations } from "./lexicon-module.js";
|
|
8
|
+
import { decideConfigSchema } from "./op/decide-config.js";
|
|
9
|
+
/** The declared name of one `environments` entry, whichever form it takes. */
|
|
10
|
+
export function environmentName(entry) {
|
|
11
|
+
return typeof entry === "string" ? entry : entry.name;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Every declared environment's name, in `environments` order. `undefined` in,
|
|
15
|
+
* `undefined` out — mirrors the field itself being optional, so a caller that
|
|
16
|
+
* already writes `config.environments?.something` can keep doing so:
|
|
17
|
+
* `environmentNames(config.environments)?.includes(name)`.
|
|
18
|
+
*/
|
|
19
|
+
export function environmentNames(environments) {
|
|
20
|
+
return environments?.map(environmentName);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Whether a declared environment name is a glob pattern rather than a literal
|
|
24
|
+
* (#1221) — it contains at least one `*`.
|
|
25
|
+
*/
|
|
26
|
+
export function isEnvironmentPattern(declaredName) {
|
|
27
|
+
return declaredName.includes("*");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Anchored `*`-glob match (#1221): each `*` in `pattern` matches any run of
|
|
31
|
+
* characters (possibly empty); everything else matches itself. Deliberately
|
|
32
|
+
* the whole surface — no `?`, no character classes, no regex. A pattern with
|
|
33
|
+
* no `*` degenerates to string equality.
|
|
34
|
+
*/
|
|
35
|
+
export function matchesEnvironmentPattern(pattern, name) {
|
|
36
|
+
const parts = pattern.split("*");
|
|
37
|
+
if (parts.length === 1)
|
|
38
|
+
return pattern === name;
|
|
39
|
+
const first = parts[0];
|
|
40
|
+
const last = parts[parts.length - 1];
|
|
41
|
+
if (!name.startsWith(first))
|
|
42
|
+
return false;
|
|
43
|
+
let cursor = first.length;
|
|
44
|
+
for (let i = 1; i < parts.length - 1; i++) {
|
|
45
|
+
const part = parts[i];
|
|
46
|
+
if (part === "")
|
|
47
|
+
continue;
|
|
48
|
+
const at = name.indexOf(part, cursor);
|
|
49
|
+
if (at === -1)
|
|
50
|
+
return false;
|
|
51
|
+
cursor = at + part.length;
|
|
52
|
+
}
|
|
53
|
+
return name.length - cursor >= last.length && name.endsWith(last);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Environment-membership test (#1221): is `name` covered by this project's
|
|
57
|
+
* declared `environments`? A literal entry matches by equality; an entry
|
|
58
|
+
* containing `*` matches as a glob pattern (`"pr-*"` covers `pr-42`).
|
|
59
|
+
* Literals are checked first across the whole list, then patterns — so a
|
|
60
|
+
* name that is declared outright never depends on pattern order. `undefined`
|
|
61
|
+
* / empty `environments` returns `false`; callers that treat "no declared
|
|
62
|
+
* environments" as "anything goes" (e.g. {@link unknownEnvError} in
|
|
63
|
+
* `./env.ts`) guard that case themselves.
|
|
64
|
+
*/
|
|
65
|
+
export function matchesDeclaredEnvironment(environments, name) {
|
|
66
|
+
const names = environmentNames(environments) ?? [];
|
|
67
|
+
if (names.includes(name))
|
|
68
|
+
return true;
|
|
69
|
+
return names.some((declared) => isEnvironmentPattern(declared) && matchesEnvironmentPattern(declared, name));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The endpoint `name` declares (chant #1166) — `undefined` for a bare-string
|
|
73
|
+
* entry, an entry with no `endpoint` set, or a name this project doesn't
|
|
74
|
+
* declare at all. `./live-endpoint.ts`'s `applyLiveEndpoint` is the consumer:
|
|
75
|
+
* it injects this into the ambient env var each observing lexicon's CLI
|
|
76
|
+
* shell-out reads (e.g. `AWS_ENDPOINT_URL`), unless that var is already set —
|
|
77
|
+
* ambient always wins.
|
|
78
|
+
*
|
|
79
|
+
* A pattern entry (#1221) can carry an endpoint too: `{ name: "pr-*",
|
|
80
|
+
* endpoint }` supplies the endpoint for every `pr-<n>` environment. A literal
|
|
81
|
+
* entry always wins over a pattern — declaring `pr-special` alongside
|
|
82
|
+
* `pr-*` resolves `pr-special` to the literal entry's endpoint (or none).
|
|
83
|
+
*/
|
|
84
|
+
export function environmentEndpoint(environments, name) {
|
|
85
|
+
const found = environments?.find((e) => environmentName(e) === name) ??
|
|
86
|
+
environments?.find((e) => isEnvironmentPattern(environmentName(e)) && matchesEnvironmentPattern(environmentName(e), name));
|
|
87
|
+
return found && typeof found !== "string" ? found.endpoint : undefined;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Zod schema for ChantConfig validation.
|
|
91
|
+
*/
|
|
92
|
+
const EnvironmentEntrySchema = z.union([
|
|
93
|
+
z.string().min(1),
|
|
94
|
+
z.object({
|
|
95
|
+
name: z.string().min(1),
|
|
96
|
+
endpoint: z.string().min(1).optional(),
|
|
97
|
+
}),
|
|
98
|
+
]);
|
|
99
|
+
const LexiconEntrySchema = z.union([
|
|
100
|
+
z.string().min(1),
|
|
101
|
+
z.object({
|
|
102
|
+
name: z.string().min(1),
|
|
103
|
+
module: z.string().min(1),
|
|
104
|
+
root: z.string().min(1).optional(),
|
|
105
|
+
}).strict(),
|
|
106
|
+
]);
|
|
107
|
+
export const ChantConfigSchema = z.object({
|
|
108
|
+
lexicons: z.array(LexiconEntrySchema).optional(),
|
|
109
|
+
capabilities: z.array(z.string().min(1)).optional(),
|
|
110
|
+
environments: z.array(EnvironmentEntrySchema).optional(),
|
|
111
|
+
sourceDir: z.string().min(1).optional(),
|
|
112
|
+
lint: z.record(z.string(), z.unknown()).optional(),
|
|
113
|
+
ownership: z.object({
|
|
114
|
+
stack: z.string().min(1).optional(),
|
|
115
|
+
env: z.union([z.string().min(1), z.object({ param: z.string().min(1) })]).optional(),
|
|
116
|
+
enabled: z.boolean().optional(),
|
|
117
|
+
}).optional(),
|
|
118
|
+
build: z.object({
|
|
119
|
+
fold: z.boolean().optional(),
|
|
120
|
+
}).optional(),
|
|
121
|
+
buildParams: z.record(z.string(), z.object({
|
|
122
|
+
type: z.enum(["string", "number", "boolean"]),
|
|
123
|
+
default: z.union([z.string(), z.number(), z.boolean()]).optional(),
|
|
124
|
+
enum: z.array(z.union([z.string(), z.number(), z.boolean()])).optional(),
|
|
125
|
+
env: z.string().min(1).optional(),
|
|
126
|
+
required: z.boolean().optional(),
|
|
127
|
+
description: z.string().optional(),
|
|
128
|
+
})).optional(),
|
|
129
|
+
release: z.object({
|
|
130
|
+
autoRecord: z.boolean().optional(),
|
|
131
|
+
}).optional(),
|
|
132
|
+
// Strict: a misspelt key here would leave Ops on the local runtime with
|
|
133
|
+
// nothing said (#2523).
|
|
134
|
+
run: z.object({
|
|
135
|
+
on: z.string().min(1).optional(),
|
|
136
|
+
}).strict().optional(),
|
|
137
|
+
sbom: z.object({
|
|
138
|
+
format: z.enum(["spdx", "cyclonedx"]).optional(),
|
|
139
|
+
enabled: z.boolean().optional(),
|
|
140
|
+
}).optional(),
|
|
141
|
+
signing: z.object({
|
|
142
|
+
keyless: z.boolean().optional(),
|
|
143
|
+
oidcIssuer: z.string().min(1).optional(),
|
|
144
|
+
identity: z.string().min(1).optional(),
|
|
145
|
+
identityIsRegexp: z.boolean().optional(),
|
|
146
|
+
key: z.string().min(1).optional(),
|
|
147
|
+
}).optional(),
|
|
148
|
+
vulnPolicy: z.object({
|
|
149
|
+
failSeverity: z.enum(["critical", "high", "medium", "low", "negligible", "unknown"]).optional(),
|
|
150
|
+
fixableOnly: z.boolean().optional(),
|
|
151
|
+
warnSeverity: z.enum(["critical", "high", "medium", "low", "negligible", "unknown"]).optional(),
|
|
152
|
+
failOnLicense: z.boolean().optional(),
|
|
153
|
+
failOnUnknownSeverity: z.boolean().optional(),
|
|
154
|
+
failOnKev: z.boolean().optional(),
|
|
155
|
+
failEpssAtOrAbove: z.number().min(0).max(1).optional(),
|
|
156
|
+
warnEpssAtOrAbove: z.number().min(0).max(1).optional(),
|
|
157
|
+
exploitabilityFixableOnly: z.boolean().optional(),
|
|
158
|
+
license: z.object({
|
|
159
|
+
allow: z.array(z.string()).optional(),
|
|
160
|
+
deny: z.array(z.string()).optional(),
|
|
161
|
+
}).optional(),
|
|
162
|
+
scanner: z.enum(["grype", "trivy"]).optional(),
|
|
163
|
+
vexSources: z.array(z.string()).optional(),
|
|
164
|
+
}).optional(),
|
|
165
|
+
knowledge: z.object({
|
|
166
|
+
dir: z.string().min(1).optional(),
|
|
167
|
+
}).optional(),
|
|
168
|
+
codegen: z.object({
|
|
169
|
+
outDir: z.string().min(1).optional(),
|
|
170
|
+
}).strict().optional(),
|
|
171
|
+
decide: decideConfigSchema.optional(),
|
|
172
|
+
exclude: z.array(z.string().min(1)).optional(),
|
|
173
|
+
include: z.array(z.string().min(1)).optional(),
|
|
174
|
+
rootOnly: z.boolean().optional(),
|
|
175
|
+
}).passthrough();
|
|
176
|
+
/**
|
|
177
|
+
* Default configuration when no config file exists.
|
|
178
|
+
*/
|
|
179
|
+
export const DEFAULT_CHANT_CONFIG = {};
|
|
180
|
+
/**
|
|
181
|
+
* Load project configuration from a directory.
|
|
182
|
+
*
|
|
183
|
+
* Tries `chant.config.ts` first, then `chant.config.json`. Returns default
|
|
184
|
+
* config if neither exists.
|
|
185
|
+
*
|
|
186
|
+
* chant #1113 — `chant.config.ts` is project-authored code, so *where* it is
|
|
187
|
+
* evaluated is a security question, and the answer is
|
|
188
|
+
* `./config-sandbox.ts`'s: in a sandboxed child when this process was armed by
|
|
189
|
+
* `chant build --sandbox`, in-process (exactly as before) otherwise. Either
|
|
190
|
+
* way the result is the same plain configuration object, and validation
|
|
191
|
+
* ({@link normalizeConfig}) happens here, in the trusted process.
|
|
192
|
+
* `chant.config.json` is data, not code — it is parsed in-process under
|
|
193
|
+
* `--sandbox` too, because there is nothing to execute.
|
|
194
|
+
*/
|
|
195
|
+
export async function loadChantConfig(dir) {
|
|
196
|
+
// Try chant.config.ts first
|
|
197
|
+
const tsPath = join(dir, "chant.config.ts");
|
|
198
|
+
if (existsSync(tsPath)) {
|
|
199
|
+
const config = await evaluateProjectConfig(tsPath, dir);
|
|
200
|
+
return { config: normalizeConfig(config, tsPath), configPath: tsPath };
|
|
201
|
+
}
|
|
202
|
+
// Fall back to chant.config.json
|
|
203
|
+
const jsonPath = join(dir, "chant.config.json");
|
|
204
|
+
if (existsSync(jsonPath)) {
|
|
205
|
+
const { readFileSync } = await import("fs");
|
|
206
|
+
const content = readFileSync(jsonPath, "utf-8");
|
|
207
|
+
const parsed = JSON.parse(content);
|
|
208
|
+
return { config: normalizeConfig(parsed, jsonPath), configPath: jsonPath };
|
|
209
|
+
}
|
|
210
|
+
return { config: DEFAULT_CHANT_CONFIG };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Load project configuration by walking up from `startDir` to the project
|
|
214
|
+
* root (chant #1117), instead of trying only `startDir` itself.
|
|
215
|
+
*
|
|
216
|
+
* `chant build src/<stack>` (and anything else invoked with a subdirectory —
|
|
217
|
+
* `lint.policies`' `evaluateProjectPolicies`, `--components --generate`)
|
|
218
|
+
* builds scoped to that subdirectory, but `chant.config.ts` almost always
|
|
219
|
+
* lives at the project root, one or more levels up. Before this, callers
|
|
220
|
+
* either read `startDir` alone or bolted on a single `dirname()` fallback —
|
|
221
|
+
* fine for a one-level-deep stack, silently blind to anything deeper
|
|
222
|
+
* (a `src/<stack>` layout is exactly one level too deep: `buildParams`' declared
|
|
223
|
+
* `env:` mappings never resolved, so the env vars they named were inert under
|
|
224
|
+
* every `npm run synth:*` for two releases). Uses the same walk `chant
|
|
225
|
+
* lint`/`chant graph` already used ({@link findProjectConfig},
|
|
226
|
+
* shared with `./lint/config.ts`'s `findProjectRoot`) — one config-discovery
|
|
227
|
+
* contract for the whole CLI.
|
|
228
|
+
*
|
|
229
|
+
* chant #1502 — a lint-scoping fragment does not end the walk. The convention
|
|
230
|
+
* of a `src/chant.config.json` holding only `extends`/`rules` (cc-aws-canonical
|
|
231
|
+
* and most of examples/) sits BETWEEN the build directory and the real
|
|
232
|
+
* `chant.config.ts`, and stopping there re-introduced the exact silent
|
|
233
|
+
* fallback this walk exists to prevent: `chant build src` resolved the
|
|
234
|
+
* fragment, found no `ownership`, and built unstamped manifests that every
|
|
235
|
+
* owned-scoped live read then withheld. A fragment is skipped, not merged —
|
|
236
|
+
* lint resolution keeps its own nearest-wins walk untouched, and a JSON
|
|
237
|
+
* config declaring any project-level key still wins where it stands.
|
|
238
|
+
*/
|
|
239
|
+
export async function loadChantConfigUpward(startDir) {
|
|
240
|
+
const { dir, configPath } = findProjectConfigPastFragments(startDir);
|
|
241
|
+
if (configPath)
|
|
242
|
+
warnIfFragmentShadowsProjectConfig(configPath);
|
|
243
|
+
return loadChantConfig(dir);
|
|
244
|
+
}
|
|
245
|
+
/** The walk {@link loadChantConfigUpward} makes, lint-only fragments skipped, without its warning. */
|
|
246
|
+
export function findProjectConfigPastFragments(startDir) {
|
|
247
|
+
let { dir, configPath } = findProjectConfig(startDir);
|
|
248
|
+
while (configPath && isLintOnlyFragment(configPath)) {
|
|
249
|
+
const parent = dirname(dir);
|
|
250
|
+
if (parent === dir)
|
|
251
|
+
break;
|
|
252
|
+
({ dir, configPath } = findProjectConfig(parent));
|
|
253
|
+
}
|
|
254
|
+
return { dir, configPath };
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* The `exclude`/`include` globs of the project `startDir` belongs to, found by
|
|
258
|
+
* the same upward walk as {@link loadChantConfigUpward}. `undefined` when the
|
|
259
|
+
* project declares neither. `include` re-admits what `exclude` skips, and
|
|
260
|
+
* also what the discovery walk skips by default (#2527), so it means
|
|
261
|
+
* something on its own.
|
|
262
|
+
*
|
|
263
|
+
* A config that fails to load is left to the command's own config load to
|
|
264
|
+
* report, so discovery keeps working where it did before, unless the failure
|
|
265
|
+
* is in `exclude` or `include` themselves: ignoring those would discover the
|
|
266
|
+
* very files the project asked to skip.
|
|
267
|
+
*/
|
|
268
|
+
export async function resolveDiscoveryGlobs(startDir) {
|
|
269
|
+
const { dir, configPath } = findProjectConfigPastFragments(startDir);
|
|
270
|
+
if (!configPath)
|
|
271
|
+
return undefined;
|
|
272
|
+
let config;
|
|
273
|
+
try {
|
|
274
|
+
({ config } = await loadChantConfig(dir));
|
|
275
|
+
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
if (err instanceof InvalidChantConfigError && (err.key === "exclude" || err.key === "include"))
|
|
278
|
+
throw err;
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
const exclude = config.exclude ?? [];
|
|
282
|
+
const include = config.include ?? [];
|
|
283
|
+
if (exclude.length === 0 && include.length === 0)
|
|
284
|
+
return undefined;
|
|
285
|
+
return { root: dir, exclude, include };
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* The top-level keys of `./lint/config.ts`'s `LintConfigSchema` (plus the
|
|
289
|
+
* `$schema` editor convention). A `chant.config.json` whose keys all come from
|
|
290
|
+
* this set is a lint-scoping fragment, not a project config — see
|
|
291
|
+
* {@link loadChantConfigUpward}. `chant.config.ts` is never a fragment: it is
|
|
292
|
+
* project-authored code, and inspecting it would mean evaluating it.
|
|
293
|
+
*/
|
|
294
|
+
const LINT_FRAGMENT_KEYS = new Set(["$schema", "extends", "rules", "overrides", "plugins", "policies"]);
|
|
295
|
+
/**
|
|
296
|
+
* JSON has no comments, so a project that wants to explain why it disabled a
|
|
297
|
+
* rule reaches for an underscore-prefixed key. chant #1711: both CockroachDB
|
|
298
|
+
* examples carried a `_ruleNotes` object in every stack's fragment, and one
|
|
299
|
+
* unrecognized key was enough to stop the walk — `chant build src/east`
|
|
300
|
+
* resolved the fragment as the project config, found no `buildParams`, no
|
|
301
|
+
* `ownership` and no `lexicons`, and emitted
|
|
302
|
+
* `gke-crdb-east-crdb@undefined.iam.gserviceaccount.com`. Silently.
|
|
303
|
+
*
|
|
304
|
+
* An underscore key is a comment. It does not make a fragment a project config.
|
|
305
|
+
*/
|
|
306
|
+
const isCommentKey = (k) => k.startsWith("_");
|
|
307
|
+
export function isLintOnlyFragment(configPath) {
|
|
308
|
+
if (!configPath.endsWith("chant.config.json"))
|
|
309
|
+
return false;
|
|
310
|
+
try {
|
|
311
|
+
const parsed = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
312
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
|
|
313
|
+
return false;
|
|
314
|
+
const keys = Object.keys(parsed).filter((k) => !isCommentKey(k));
|
|
315
|
+
return keys.length > 0 && keys.every((k) => LINT_FRAGMENT_KEYS.has(k));
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
// Unreadable/unparseable JSON: let loadChantConfig surface the real error
|
|
319
|
+
// in place rather than silently walking past it.
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* The `chant.config.json` the walk stopped at declares no project-level key at
|
|
325
|
+
* all — so it is about to be used as the project config while carrying none of
|
|
326
|
+
* the things a project config exists to carry.
|
|
327
|
+
*
|
|
328
|
+
* The comment-key rule above fixes the case that bit (chant #1711), but the
|
|
329
|
+
* hole it came from is general: any key outside {@link LINT_FRAGMENT_KEYS}
|
|
330
|
+
* turns a fragment into the project config, and the consequence is a build
|
|
331
|
+
* that silently loses every parameter, the ownership marker and the lexicon
|
|
332
|
+
* list. This says so, naming the key responsible, instead of leaving it to be
|
|
333
|
+
* discovered in the output.
|
|
334
|
+
*/
|
|
335
|
+
function warnIfFragmentShadowsProjectConfig(configPath) {
|
|
336
|
+
if (!configPath.endsWith("chant.config.json"))
|
|
337
|
+
return;
|
|
338
|
+
try {
|
|
339
|
+
const parsed = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
340
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
|
|
341
|
+
return;
|
|
342
|
+
const keys = Object.keys(parsed).filter((k) => !isCommentKey(k));
|
|
343
|
+
if (keys.some((k) => !LINT_FRAGMENT_KEYS.has(k)) && !keys.some((k) => PROJECT_CONFIG_KEYS.has(k))) {
|
|
344
|
+
const offenders = keys.filter((k) => !LINT_FRAGMENT_KEYS.has(k));
|
|
345
|
+
console.error(`warning: ${configPath} is being used as the project config, but declares no project-level ` +
|
|
346
|
+
`key (${[...PROJECT_CONFIG_KEYS].slice(0, 4).join(", ")}, …). ` +
|
|
347
|
+
`${offenders.length === 1 ? "The key" : "The keys"} ${offenders.map((k) => `"${k}"`).join(", ")} ` +
|
|
348
|
+
`stopped the walk to the real one — any config above this file is being ignored. ` +
|
|
349
|
+
`Prefix a comment key with "_", or move the key to the project config. (chant #1711)`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
// Unreadable/unparseable: loadChantConfig reports it properly.
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/** Top-level keys that make a config a *project* config rather than a lint fragment. */
|
|
357
|
+
const PROJECT_CONFIG_KEYS = new Set(Object.keys(ChantConfigSchema.shape).filter((k) => k !== "lint"));
|
|
358
|
+
/** Whether an `ownership.env` entry is a build-parameter reference rather than a literal. */
|
|
359
|
+
export function isOwnershipParamRef(env) {
|
|
360
|
+
return typeof env === "object" && env !== null && typeof env.param === "string";
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* The ownership stack identity alone — `ownership.stack` when marking is on
|
|
364
|
+
* (no `stack`, or `enabled: false`, means off). For callers that need the
|
|
365
|
+
* stack and nothing else (a field manager, a prune selector) and so have no
|
|
366
|
+
* build parameters to resolve `env` against.
|
|
367
|
+
*/
|
|
368
|
+
export function resolveOwnershipStack(config) {
|
|
369
|
+
const o = config.ownership;
|
|
370
|
+
if (!o || !o.stack || o.enabled === false)
|
|
371
|
+
return undefined;
|
|
372
|
+
return o.stack;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Resolve the `env` half of the ownership marker (#1396). A literal is
|
|
376
|
+
* returned as-is. A `{ param }` reference is looked up in this build's resolved
|
|
377
|
+
* build parameters and must find one: a reference to a parameter that was
|
|
378
|
+
* never declared, or that resolved to no value, throws rather than quietly
|
|
379
|
+
* stamping a marker without an env — an env-less marker is exactly what lets
|
|
380
|
+
* a prod deployment go unseen by `--owned` filtering scoped to prod.
|
|
381
|
+
*/
|
|
382
|
+
export function resolveOwnershipEnv(config, buildParams) {
|
|
383
|
+
const env = config.ownership?.env;
|
|
384
|
+
if (!isOwnershipParamRef(env))
|
|
385
|
+
return env;
|
|
386
|
+
const name = env.param;
|
|
387
|
+
const declared = config.buildParams?.[name];
|
|
388
|
+
if (!declared) {
|
|
389
|
+
throw new Error(`ownership.env references build parameter "${name}", which chant.config.ts's buildParams does not declare`);
|
|
390
|
+
}
|
|
391
|
+
const resolved = buildParams?.find((p) => p.name === name);
|
|
392
|
+
if (!resolved) {
|
|
393
|
+
throw new Error(`ownership.env references build parameter "${name}", which resolved to no value for this build — pass --param ${name}=<value>${declared.env ? `, set ${declared.env}` : ""}, or give it a default`);
|
|
394
|
+
}
|
|
395
|
+
return String(resolved.value);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Resolve the ownership marker to stamp from project config, or undefined when
|
|
399
|
+
* ownership marking is off (no `stack`, or `enabled: false`). `buildParams` is
|
|
400
|
+
* this build's resolved parameters (`resolveBuildParams`'s provenance), which
|
|
401
|
+
* an `ownership.env: { param }` reference resolves against — see {@link
|
|
402
|
+
* resolveOwnershipEnv}; it throws when the reference cannot be satisfied.
|
|
403
|
+
*/
|
|
404
|
+
export function resolveOwnershipMarker(config, buildParams) {
|
|
405
|
+
const stack = resolveOwnershipStack(config);
|
|
406
|
+
if (stack === undefined)
|
|
407
|
+
return undefined;
|
|
408
|
+
return { stack, env: resolveOwnershipEnv(config, buildParams) };
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* The divergence #1396 is about, made loud when it cannot be removed: a
|
|
412
|
+
* project whose `ownership.env` is a literal while it also declares a build
|
|
413
|
+
* parameter named `env` has two answers to "which environment is this", and
|
|
414
|
+
* the manifest carries both (the ownership marker from config, the labels
|
|
415
|
+
* from the parameter). Returns a warning naming both values when they differ;
|
|
416
|
+
* undefined when there is nothing to say (no literal, no `env` parameter, or
|
|
417
|
+
* the two agree). The fix is the `{ param: "env" }` reference.
|
|
418
|
+
*/
|
|
419
|
+
export function ownershipEnvDisagreement(config, buildParams) {
|
|
420
|
+
const literal = config.ownership?.env;
|
|
421
|
+
if (typeof literal !== "string")
|
|
422
|
+
return undefined;
|
|
423
|
+
if (resolveOwnershipStack(config) === undefined)
|
|
424
|
+
return undefined;
|
|
425
|
+
const param = buildParams?.find((p) => p.name === "env");
|
|
426
|
+
if (!param || String(param.value) === literal)
|
|
427
|
+
return undefined;
|
|
428
|
+
return (`ownership.env is "${literal}" but the env build parameter resolved to ${JSON.stringify(param.value)} (${param.source}) — ` +
|
|
429
|
+
`the ownership marker and params.env disagree about which environment this build is for. ` +
|
|
430
|
+
`Use ownership: { env: { param: "env" } } so the marker follows the parameter.`);
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Whether auto-emitting a release-ledger record after a successful `chant
|
|
434
|
+
* run --components` deploy should be skipped (#597). Opt-out, not opt-in:
|
|
435
|
+
* recording happens unless the CLI's `--no-release-record` flag was passed
|
|
436
|
+
* (`cliFlag`) or the project config sets `release.autoRecord: false` — the
|
|
437
|
+
* flag always wins for that one invocation, regardless of config.
|
|
438
|
+
*/
|
|
439
|
+
export function resolveAutoReleaseDisabled(config, cliFlag) {
|
|
440
|
+
if (cliFlag)
|
|
441
|
+
return true;
|
|
442
|
+
return config.release?.autoRecord === false;
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Whether `chant build` should use the fold path (#1022, epic #1019)
|
|
446
|
+
* instead of running each source module. DEFAULT-ON since chant #1134: fold
|
|
447
|
+
* is the build path unless something turns it off. Precedence, most specific
|
|
448
|
+
* wins: an explicit CLI flag (`--fold` → true, `--no-fold` → false, arriving
|
|
449
|
+
* here as `cliFlag`), then the project config's `build.fold`, then the
|
|
450
|
+
* default of `true`. The epic's evidence base for the flip — coverage,
|
|
451
|
+
* byte-identity, and the sandbox execution boundary — is recorded on #1134
|
|
452
|
+
* and #1090.
|
|
453
|
+
*/
|
|
454
|
+
export function resolveFoldEnabled(config, cliFlag) {
|
|
455
|
+
if (cliFlag !== undefined)
|
|
456
|
+
return cliFlag;
|
|
457
|
+
if (config.build?.fold !== undefined)
|
|
458
|
+
return config.build.fold;
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Whether `chant build` should run its run-fallback files (or, without
|
|
463
|
+
* `--fold`, every file) in an isolated sandboxed child process rather than
|
|
464
|
+
* in-process (chant #1045 Phase 2). Opt-in: off unless the CLI's `--sandbox`
|
|
465
|
+
* flag was passed (`cliFlag`) or the project config sets `build.sandbox:
|
|
466
|
+
* true` — the flag always wins for that one invocation, regardless of
|
|
467
|
+
* config. Independent of {@link resolveFoldEnabled}: sandboxing without
|
|
468
|
+
* folding isolates every discovered file; sandboxing with folding isolates
|
|
469
|
+
* only the per-file run-fallback remainder.
|
|
470
|
+
*/
|
|
471
|
+
export function resolveSandboxEnabled(config, cliFlag) {
|
|
472
|
+
if (cliFlag)
|
|
473
|
+
return true;
|
|
474
|
+
return config.build?.sandbox === true;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Resolve which SBOM format a `generate-sbom` step should request (#606),
|
|
478
|
+
* given the project's `chant.config.ts` `sbom.format` and an optional
|
|
479
|
+
* component/step-level override. Precedence, most to least specific:
|
|
480
|
+
* `stepFormat` (the component's own `build.sbom.format` or an explicit
|
|
481
|
+
* `generate-sbom` step input) > `config.sbom.format` (project default) >
|
|
482
|
+
* `DEFAULT_SBOM_FORMAT` ("spdx", ./components/verbs/sbom-generator.ts).
|
|
483
|
+
* Never hardcodes one format as *the* format — this is purely precedence
|
|
484
|
+
* resolution over the two first-class formats SPDX/CycloneDX.
|
|
485
|
+
*/
|
|
486
|
+
export function resolveSbomFormat(config, stepFormat) {
|
|
487
|
+
return stepFormat ?? config.sbom?.format ?? DEFAULT_SBOM_FORMAT;
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Resolve project-wide signing defaults from `chant.config.ts`'s `signing`
|
|
491
|
+
* section (#622). Keyless unless `signing.keyless === false` — the same
|
|
492
|
+
* "default is the safe choice, override is explicit" precedence
|
|
493
|
+
* `resolveOwnershipMarker`/`resolveAutoReleaseDisabled` already use for their
|
|
494
|
+
* respective opt-outs.
|
|
495
|
+
*/
|
|
496
|
+
export function resolveSigningDefaults(config) {
|
|
497
|
+
const s = config.signing;
|
|
498
|
+
const keyless = s?.keyless !== false;
|
|
499
|
+
return {
|
|
500
|
+
keyless,
|
|
501
|
+
...(!keyless && s?.key ? { key: { key: s.key } } : {}),
|
|
502
|
+
identityPolicyDefaults: {
|
|
503
|
+
expectedIssuer: s?.oidcIssuer,
|
|
504
|
+
expectedIdentity: s?.identity,
|
|
505
|
+
identityIsRegexp: s?.identityIsRegexp,
|
|
506
|
+
key: s?.keyless === false ? s?.key : undefined,
|
|
507
|
+
},
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Resolve the `vuln-gate` policy overrides from `chant.config.ts`'s
|
|
512
|
+
* `vulnPolicy` section (#626). Returns only the fields the project set; the
|
|
513
|
+
* gate merges these over its own `DEFAULT_VULN_POLICY`
|
|
514
|
+
* (`./components/verbs/vuln-gate.ts`), so an empty/absent section yields the
|
|
515
|
+
* beginner-safe defaults. `scanner`/`vexSources` are not policy fields — they
|
|
516
|
+
* configure how the capability is constructed and are read separately.
|
|
517
|
+
*/
|
|
518
|
+
export function resolveVulnPolicy(config) {
|
|
519
|
+
const v = config.vulnPolicy;
|
|
520
|
+
if (!v)
|
|
521
|
+
return {};
|
|
522
|
+
const out = {};
|
|
523
|
+
if (v.failSeverity)
|
|
524
|
+
out.failSeverity = v.failSeverity;
|
|
525
|
+
if (v.fixableOnly !== undefined)
|
|
526
|
+
out.fixableOnly = v.fixableOnly;
|
|
527
|
+
if (v.warnSeverity)
|
|
528
|
+
out.warnSeverity = v.warnSeverity;
|
|
529
|
+
if (v.failOnLicense !== undefined)
|
|
530
|
+
out.failOnLicense = v.failOnLicense;
|
|
531
|
+
if (v.failOnUnknownSeverity !== undefined)
|
|
532
|
+
out.failOnUnknownSeverity = v.failOnUnknownSeverity;
|
|
533
|
+
// `!== undefined`, never truthiness: `failEpssAtOrAbove: 0` (match any scored
|
|
534
|
+
// finding) and an explicit `failOnKev: false` override must both survive.
|
|
535
|
+
if (v.failOnKev !== undefined)
|
|
536
|
+
out.failOnKev = v.failOnKev;
|
|
537
|
+
if (v.failEpssAtOrAbove !== undefined)
|
|
538
|
+
out.failEpssAtOrAbove = v.failEpssAtOrAbove;
|
|
539
|
+
if (v.warnEpssAtOrAbove !== undefined)
|
|
540
|
+
out.warnEpssAtOrAbove = v.warnEpssAtOrAbove;
|
|
541
|
+
if (v.exploitabilityFixableOnly !== undefined)
|
|
542
|
+
out.exploitabilityFixableOnly = v.exploitabilityFixableOnly;
|
|
543
|
+
if (v.license)
|
|
544
|
+
out.license = v.license;
|
|
545
|
+
return out;
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Resolve the OKF knowledge bundle directory (#1864, design #1059):
|
|
549
|
+
* `knowledge.dir` relative to `projectPath` when configured, else the
|
|
550
|
+
* `knowledge/` convention beside `chant.config.ts`. Never checks existence —
|
|
551
|
+
* a project with no bundle yet resolves a path all the same, and
|
|
552
|
+
* `okf-read.ts`'s `loadOkfBundle` treats a missing directory as an empty
|
|
553
|
+
* bundle rather than an error.
|
|
554
|
+
*/
|
|
555
|
+
export function resolveKnowledgeDir(config, projectPath) {
|
|
556
|
+
return join(projectPath, config.knowledge?.dir ?? "knowledge");
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* A config that failed schema validation. `key` is the top-level key of the
|
|
560
|
+
* first problem. `name` stays `"Error"`, so the printed error reads as before.
|
|
561
|
+
*/
|
|
562
|
+
export class InvalidChantConfigError extends Error {
|
|
563
|
+
constructor(message, key) {
|
|
564
|
+
super(message);
|
|
565
|
+
this.key = key;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Validate and normalize a raw config object into ChantConfig shape.
|
|
570
|
+
*/
|
|
571
|
+
function normalizeConfig(raw, source) {
|
|
572
|
+
if (typeof raw !== "object" || raw === null) {
|
|
573
|
+
return DEFAULT_CHANT_CONFIG;
|
|
574
|
+
}
|
|
575
|
+
const result = ChantConfigSchema.safeParse(raw);
|
|
576
|
+
if (!result.success) {
|
|
577
|
+
const issue = result.error.issues[0];
|
|
578
|
+
const path = issue.path.length > 0 ? issue.path.join(".") : undefined;
|
|
579
|
+
const loc = source ? ` in ${source}` : "";
|
|
580
|
+
throw new InvalidChantConfigError(`Invalid chant config${loc}: ${path ? `${path}: ` : ""}${issue.message}`, issue.path.length > 0 ? String(issue.path[0]) : undefined);
|
|
581
|
+
}
|
|
582
|
+
// chant #2520 — a lexicon declared by module path. The path is recorded for
|
|
583
|
+
// the loaders and the entry becomes its name, so every reader of `lexicons`
|
|
584
|
+
// keeps seeing names. A config of plain names is returned untouched.
|
|
585
|
+
const lexicons = raw.lexicons;
|
|
586
|
+
const baseDir = source !== undefined ? dirname(source) : process.cwd();
|
|
587
|
+
const sourceDir = raw.sourceDir;
|
|
588
|
+
// chant#2590 — a declared `root` must stay inside the project and must not
|
|
589
|
+
// contain its source directory. Refused here rather than narrowed, since
|
|
590
|
+
// the project asked for it by name.
|
|
591
|
+
for (const [i, entry] of (lexicons ?? []).entries()) {
|
|
592
|
+
if (typeof entry === "string" || entry.root === undefined)
|
|
593
|
+
continue;
|
|
594
|
+
const { problem } = pathLexiconRoot(entry, baseDir, sourceDir);
|
|
595
|
+
if (problem !== undefined) {
|
|
596
|
+
const loc = source ? ` in ${source}` : "";
|
|
597
|
+
throw new InvalidChantConfigError(`Invalid chant config${loc}: lexicons.${i}.root: ${problem}`, "lexicons");
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
const recorded = registerLexiconDeclarations(lexicons, baseDir, sourceDir);
|
|
601
|
+
if (Object.keys(recorded).length > 0) {
|
|
602
|
+
return { ...raw, lexicons: lexiconNames(lexicons), lexiconModules: recorded };
|
|
603
|
+
}
|
|
604
|
+
return raw;
|
|
605
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one content digest chant computes itself (chant #2514).
|
|
3
|
+
*
|
|
4
|
+
* `contentDigest(x)` is `"sha256:"` followed by the lowercase hex SHA-256 of
|
|
5
|
+
* the UTF-8 bytes of `x`. Anything core hashes goes through it, and anything
|
|
6
|
+
* structured is first put in canonical form with `canonicalJson`
|
|
7
|
+
* (./effect-receipt.ts), so the same value always hashes the same way. The
|
|
8
|
+
* build archive re-exports it from ./components/verbs/build-archive.ts, where
|
|
9
|
+
* it used to live.
|
|
10
|
+
*
|
|
11
|
+
* Before #2514 this function computed a 32-bit string hash and repeated its
|
|
12
|
+
* eight hex digits eight times. Values recorded then are recognised and
|
|
13
|
+
* flagged by ./lifecycle/legacy-digest.ts.
|
|
14
|
+
*/
|
|
15
|
+
import { createHash } from "node:crypto";
|
|
16
|
+
/** `sha256:<64 hex>` over the UTF-8 bytes of `input`. */
|
|
17
|
+
export function contentDigest(input) {
|
|
18
|
+
return `sha256:${createHash("sha256").update(input, "utf8").digest("hex")}`;
|
|
19
|
+
}
|
|
20
|
+
/** Lowercase hex SHA-256 of `bytes`, with no prefix: the form a decision's evidence pin holds (#2549). */
|
|
21
|
+
export function sha256Hex(bytes) {
|
|
22
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
23
|
+
}
|