@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,483 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from "fs";
|
|
2
|
+
import { join, dirname, resolve } from "path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { evaluateProjectConfigSync } from "../config-sandbox.js";
|
|
5
|
+
import { moduleDir, getRuntime } from "../runtime-adapter.js";
|
|
6
|
+
import { canonicalRuleId } from "../audit/catalog.js";
|
|
7
|
+
import strictPreset from "./presets/strict.json" with { type: "json" };
|
|
8
|
+
// chant #1117 — the upward config-discovery walk moved to a shared module
|
|
9
|
+
// (`../project-root`) so `chant build`/`lint.policies` use the identical walk
|
|
10
|
+
// `chant lint`/`chant graph` already did. Re-exported here since this is
|
|
11
|
+
// still where every existing call site (`./config.test.ts`, `../cli/commands/lint.ts`)
|
|
12
|
+
// imports it from.
|
|
13
|
+
export { findProjectRoot } from "../project-root.js";
|
|
14
|
+
/** Mapping of built-in preset names to their file paths */
|
|
15
|
+
const BUILTIN_PRESETS = {
|
|
16
|
+
"@intentius/chant/lint/presets/strict": resolve(moduleDir(import.meta.url), "presets/strict.json"),
|
|
17
|
+
"@intentius/chant/lint/presets/relaxed": resolve(moduleDir(import.meta.url), "presets/relaxed.json"),
|
|
18
|
+
};
|
|
19
|
+
// ── Zod schemas for lint config validation ─────────────────────────
|
|
20
|
+
const SeveritySchema = z.enum(["off", "error", "warning", "info"]);
|
|
21
|
+
const RuleConfigSchema = z.union([
|
|
22
|
+
SeveritySchema,
|
|
23
|
+
z.tuple([SeveritySchema, z.record(z.string(), z.unknown())]),
|
|
24
|
+
]);
|
|
25
|
+
export const LintConfigSchema = z.object({
|
|
26
|
+
rules: z.record(z.string(), RuleConfigSchema).optional(),
|
|
27
|
+
extends: z.array(z.string()).optional(),
|
|
28
|
+
overrides: z.array(z.object({
|
|
29
|
+
files: z.array(z.string()),
|
|
30
|
+
rules: z.record(z.string(), RuleConfigSchema),
|
|
31
|
+
})).optional(),
|
|
32
|
+
plugins: z.array(z.string()).optional(),
|
|
33
|
+
policies: z.array(z.string()).optional(),
|
|
34
|
+
presets: z.record(z.string(), z.string()).optional(),
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Check if a Zod union error is specifically about an invalid severity string
|
|
38
|
+
* (as opposed to a completely wrong type like a number).
|
|
39
|
+
*/
|
|
40
|
+
function isBadSeverityError(issue, config, path) {
|
|
41
|
+
if (issue.code !== "invalid_union")
|
|
42
|
+
return null;
|
|
43
|
+
// Navigate to the value in the config to see what was actually provided
|
|
44
|
+
let value = config;
|
|
45
|
+
for (const key of path) {
|
|
46
|
+
if (value == null || typeof value !== "object")
|
|
47
|
+
return null;
|
|
48
|
+
value = value[key];
|
|
49
|
+
}
|
|
50
|
+
// If the value is a string, the user meant it as a severity — show the specific severity error
|
|
51
|
+
if (typeof value === "string") {
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Format a Zod error into a human-readable message matching existing error patterns.
|
|
58
|
+
*/
|
|
59
|
+
function formatLintConfigError(configPath, error, rawConfig) {
|
|
60
|
+
const issue = error.issues[0];
|
|
61
|
+
const path = issue.path;
|
|
62
|
+
// Cast path to (string | number)[] — Zod's path is PropertyKey[] but only uses string | number
|
|
63
|
+
const p = path;
|
|
64
|
+
// rules.{ruleId} — invalid severity or structure
|
|
65
|
+
if (p[0] === "rules" && p.length >= 2) {
|
|
66
|
+
const ruleId = p[1];
|
|
67
|
+
const badValue = isBadSeverityError(issue, rawConfig, p);
|
|
68
|
+
if (badValue !== null) {
|
|
69
|
+
return `Invalid config file ${configPath}: rule "${ruleId}" has invalid severity "${badValue}". Must be "off", "error", "warning", or "info"`;
|
|
70
|
+
}
|
|
71
|
+
return `Invalid config file ${configPath}: rule "${ruleId}" must be a severity string or [severity, options] tuple`;
|
|
72
|
+
}
|
|
73
|
+
// rules — wrong type
|
|
74
|
+
if (p[0] === "rules" && p.length === 1) {
|
|
75
|
+
return `Invalid config file ${configPath}: rules must be an object`;
|
|
76
|
+
}
|
|
77
|
+
// extends — wrong type or element type
|
|
78
|
+
if (p[0] === "extends") {
|
|
79
|
+
if (p.length === 1) {
|
|
80
|
+
return `Invalid config file ${configPath}: extends must be an array`;
|
|
81
|
+
}
|
|
82
|
+
return `Invalid config file ${configPath}: extends must be an array of strings`;
|
|
83
|
+
}
|
|
84
|
+
// overrides[i].* errors
|
|
85
|
+
if (p[0] === "overrides") {
|
|
86
|
+
if (p.length === 1) {
|
|
87
|
+
return `Invalid config file ${configPath}: overrides must be an array`;
|
|
88
|
+
}
|
|
89
|
+
const i = p[1];
|
|
90
|
+
if (p.length === 2) {
|
|
91
|
+
return `Invalid config file ${configPath}: overrides[${i}] must be an object`;
|
|
92
|
+
}
|
|
93
|
+
if (p[2] === "files") {
|
|
94
|
+
if (p.length === 3) {
|
|
95
|
+
return `Invalid config file ${configPath}: overrides[${i}].files must be an array`;
|
|
96
|
+
}
|
|
97
|
+
return `Invalid config file ${configPath}: overrides[${i}].files must be an array of strings`;
|
|
98
|
+
}
|
|
99
|
+
if (p[2] === "rules") {
|
|
100
|
+
if (p.length === 3) {
|
|
101
|
+
return `Invalid config file ${configPath}: overrides[${i}].rules must be an object`;
|
|
102
|
+
}
|
|
103
|
+
if (p.length >= 4) {
|
|
104
|
+
const ruleId = p[3];
|
|
105
|
+
const badValue = isBadSeverityError(issue, rawConfig, p);
|
|
106
|
+
if (badValue !== null) {
|
|
107
|
+
return `Invalid config file ${configPath}: overrides[${i}] rule "${ruleId}" has invalid severity "${badValue}". Must be "off", "error", "warning", or "info"`;
|
|
108
|
+
}
|
|
109
|
+
return `Invalid config file ${configPath}: overrides[${i}] rule "${ruleId}" must be a severity string or [severity, options] tuple`;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// plugins — wrong type or element type
|
|
114
|
+
if (p[0] === "plugins") {
|
|
115
|
+
if (p.length === 1) {
|
|
116
|
+
return `Invalid config file ${configPath}: plugins must be an array`;
|
|
117
|
+
}
|
|
118
|
+
return `Invalid config file ${configPath}: plugins must be an array of strings`;
|
|
119
|
+
}
|
|
120
|
+
// Fallback
|
|
121
|
+
return `Invalid config file ${configPath}: ${issue.message}`;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Parse a rule config value into severity and options
|
|
125
|
+
*/
|
|
126
|
+
export function parseRuleConfig(value) {
|
|
127
|
+
if (typeof value === "string") {
|
|
128
|
+
return { severity: value };
|
|
129
|
+
}
|
|
130
|
+
if (!Array.isArray(value) || value.length !== 2) {
|
|
131
|
+
throw new Error(`Invalid rule config: expected a severity string or [severity, options] tuple`);
|
|
132
|
+
}
|
|
133
|
+
const [severity, options] = value;
|
|
134
|
+
if (typeof severity !== "string" || !isValidSeverity(severity)) {
|
|
135
|
+
throw new Error(`Invalid rule config: severity "${severity}" must be "off", "error", "warning", or "info"`);
|
|
136
|
+
}
|
|
137
|
+
if (typeof options !== "object" || options === null || Array.isArray(options)) {
|
|
138
|
+
throw new Error(`Invalid rule config: options must be a plain object`);
|
|
139
|
+
}
|
|
140
|
+
return { severity, options };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Resolve one check/rule id's effective severity (and options) against an
|
|
144
|
+
* already-resolved `lint.rules` map — the ONE place `"off"`/severity-override
|
|
145
|
+
* resolution happens, so a rule id behaves identically regardless of which
|
|
146
|
+
* phase produced it.
|
|
147
|
+
*
|
|
148
|
+
* chant #1138 — before this, the same `lint.rules: { ID: "off" }` config was
|
|
149
|
+
* resolved by two independent call sites that had grown their own copy of
|
|
150
|
+
* this logic (`../cli/commands/lint.ts`'s `getDefaultRules` for AST COR/EVL
|
|
151
|
+
* rules, and its `runComponentCheckDiagnostics` for whole-component COMP*
|
|
152
|
+
* checks) — identical in effect, but a rule id's suppression having two
|
|
153
|
+
* places to (potentially, eventually) diverge is itself the bug class #1138
|
|
154
|
+
* is about. Both were converted to call this instead, and post-synth checks/
|
|
155
|
+
* policies (`./post-synth.ts`'s `applyConfiguredSeverity`) now go through it
|
|
156
|
+
* too, closing the gap the issue reports: a post-synth check id honors
|
|
157
|
+
* `lint.rules` exactly like an AST rule id does.
|
|
158
|
+
*
|
|
159
|
+
* `rules` takes the already-resolved map (`config.rules`, or
|
|
160
|
+
* `resolveRulesForFile`'s per-file merge) rather than a whole `LintConfig` —
|
|
161
|
+
* callers that need per-file `overrides` resolve that first; post-synth
|
|
162
|
+
* checks have no per-file scope to begin with (see {@link
|
|
163
|
+
* ./post-synth.ts!PostSynthDiagnostic}'s doc for why), so they always pass
|
|
164
|
+
* `config.rules` directly.
|
|
165
|
+
*
|
|
166
|
+
* `catalog` (chant #2113) is optional and off by default: pass a resolved
|
|
167
|
+
* audit catalog to also honor a `rules` key that names one of `id`'s
|
|
168
|
+
* `RuleMeta.aliases` rather than `id` itself. A project's
|
|
169
|
+
* `lint.rules: { OLD_ID: "off" }` then keeps suppressing the rule after it
|
|
170
|
+
* is renamed/renumbered, instead of silently starting to match nothing. Every
|
|
171
|
+
* existing call site omits `catalog` and is unaffected; a caller that has one
|
|
172
|
+
* handy (an audit-shaped consumer, not `chant build`'s post-synth loop, which
|
|
173
|
+
* has no catalog readily resolved at that point) opts in by passing it.
|
|
174
|
+
*/
|
|
175
|
+
export function resolveConfiguredSeverity(rules, id, defaultSeverity, catalog) {
|
|
176
|
+
const configValue = rules?.[id];
|
|
177
|
+
if (configValue !== undefined)
|
|
178
|
+
return parseRuleConfig(configValue);
|
|
179
|
+
if (catalog && rules) {
|
|
180
|
+
for (const [key, value] of Object.entries(rules)) {
|
|
181
|
+
if (canonicalRuleId(key, catalog) === id)
|
|
182
|
+
return parseRuleConfig(value);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return { severity: defaultSeverity };
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Default configuration with all rules enabled at strict preset severities
|
|
189
|
+
*/
|
|
190
|
+
export const DEFAULT_CONFIG = {
|
|
191
|
+
rules: { ...strictPreset.rules },
|
|
192
|
+
extends: [],
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* Validate that a severity string is valid
|
|
196
|
+
*/
|
|
197
|
+
function isValidSeverity(value) {
|
|
198
|
+
return value === "off" || value === "error" || value === "warning" || value === "info";
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Load and merge a single config file
|
|
202
|
+
*/
|
|
203
|
+
function loadConfigFile(configPath, visited = new Set()) {
|
|
204
|
+
// Check for circular extends
|
|
205
|
+
if (visited.has(configPath)) {
|
|
206
|
+
throw new Error(`Circular extends detected: ${configPath}`);
|
|
207
|
+
}
|
|
208
|
+
visited.add(configPath);
|
|
209
|
+
// Read and parse config file
|
|
210
|
+
if (!existsSync(configPath)) {
|
|
211
|
+
throw new Error(`Config file not found: ${configPath}`);
|
|
212
|
+
}
|
|
213
|
+
let content;
|
|
214
|
+
try {
|
|
215
|
+
content = readFileSync(configPath, "utf-8");
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
throw new Error(`Failed to read config file ${configPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
219
|
+
}
|
|
220
|
+
let raw;
|
|
221
|
+
try {
|
|
222
|
+
raw = JSON.parse(content);
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
throw new Error(`Failed to parse config file ${configPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
226
|
+
}
|
|
227
|
+
// Validate config structure
|
|
228
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
229
|
+
throw new Error(`Invalid config file ${configPath}: must be an object`);
|
|
230
|
+
}
|
|
231
|
+
// Accept both shapes: lint fields at top level (legacy) OR nested under a
|
|
232
|
+
// "lint" key (matches chant.config.ts ChantConfig shape). When the JSON has
|
|
233
|
+
// both a top-level "rules"/"extends"/etc AND a "lint": {...}, prefer the
|
|
234
|
+
// nested one — that matches the explicit ChantConfig contract.
|
|
235
|
+
const rawObj = raw;
|
|
236
|
+
let config;
|
|
237
|
+
if (rawObj.lint &&
|
|
238
|
+
typeof rawObj.lint === "object" &&
|
|
239
|
+
!Array.isArray(rawObj.lint)) {
|
|
240
|
+
config = rawObj.lint;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
config = rawObj;
|
|
244
|
+
}
|
|
245
|
+
// Validate with Zod schema
|
|
246
|
+
const parseResult = LintConfigSchema.safeParse(config);
|
|
247
|
+
if (!parseResult.success) {
|
|
248
|
+
throw new Error(formatLintConfigError(configPath, parseResult.error, config));
|
|
249
|
+
}
|
|
250
|
+
// Process extends
|
|
251
|
+
let mergedConfig = { rules: {}, extends: [] };
|
|
252
|
+
if (config.extends && config.extends.length > 0) {
|
|
253
|
+
const baseDir = dirname(configPath);
|
|
254
|
+
for (const extendPath of config.extends) {
|
|
255
|
+
// Resolve paths: relative, built-in preset, or absolute
|
|
256
|
+
let resolvedPath;
|
|
257
|
+
if (extendPath.startsWith(".")) {
|
|
258
|
+
resolvedPath = join(baseDir, extendPath);
|
|
259
|
+
}
|
|
260
|
+
else if (extendPath.startsWith("@intentius/chant")) {
|
|
261
|
+
const builtinPath = BUILTIN_PRESETS[extendPath];
|
|
262
|
+
if (builtinPath) {
|
|
263
|
+
resolvedPath = builtinPath;
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
throw new Error(`Unknown preset: ${extendPath} (extended from ${configPath})`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
resolvedPath = extendPath;
|
|
271
|
+
}
|
|
272
|
+
// Check if extended config exists
|
|
273
|
+
if (!existsSync(resolvedPath)) {
|
|
274
|
+
throw new Error(`Extended config file not found: ${resolvedPath} (extended from ${configPath})`);
|
|
275
|
+
}
|
|
276
|
+
// Load extended config recursively
|
|
277
|
+
const extendedConfig = loadConfigFile(resolvedPath, visited);
|
|
278
|
+
// Merge rules (later configs override earlier ones)
|
|
279
|
+
mergedConfig.rules = {
|
|
280
|
+
...mergedConfig.rules,
|
|
281
|
+
...extendedConfig.rules,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Merge current config rules on top
|
|
286
|
+
mergedConfig.rules = {
|
|
287
|
+
...mergedConfig.rules,
|
|
288
|
+
...config.rules,
|
|
289
|
+
};
|
|
290
|
+
// Preserve overrides from the current config
|
|
291
|
+
if (config.overrides) {
|
|
292
|
+
mergedConfig.overrides = config.overrides;
|
|
293
|
+
}
|
|
294
|
+
// Preserve plugins from the current config only (not inherited from extends)
|
|
295
|
+
if (config.plugins) {
|
|
296
|
+
mergedConfig.plugins = config.plugins;
|
|
297
|
+
}
|
|
298
|
+
return mergedConfig;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Load lint configuration from a directory.
|
|
302
|
+
*
|
|
303
|
+
* Tries `chant.config.ts` first (extracts `lint` property from ChantConfig),
|
|
304
|
+
* then falls back to `chant.config.json` (legacy LintConfig format).
|
|
305
|
+
* Returns default configuration if neither exists.
|
|
306
|
+
*
|
|
307
|
+
* chant #1113 — the `chant.config.ts` branch executes project-authored code,
|
|
308
|
+
* so it goes through `../config-sandbox.ts` like every other config load
|
|
309
|
+
* rather than `require`-ing the file itself. Unarmed (which is every `chant
|
|
310
|
+
* lint` invocation today — `lint` has no `--sandbox` flag) that is the
|
|
311
|
+
* identical `createRequire` path this used before, moved one module over.
|
|
312
|
+
*
|
|
313
|
+
* @param dir - Directory path to search for config file
|
|
314
|
+
* @returns Loaded and merged configuration, or default config if not found
|
|
315
|
+
*/
|
|
316
|
+
export function loadConfig(dir) {
|
|
317
|
+
// Try chant.config.ts first — Bun has native require() for .ts, Node uses tsx's loader
|
|
318
|
+
const tsConfigPath = join(dir, "chant.config.ts");
|
|
319
|
+
if (existsSync(tsConfigPath)) {
|
|
320
|
+
try {
|
|
321
|
+
const config = evaluateProjectConfigSync(tsConfigPath, dir);
|
|
322
|
+
if (typeof config === "object" && config !== null) {
|
|
323
|
+
// ChantConfig format: extract lint property
|
|
324
|
+
if ("lint" in config && typeof config.lint === "object") {
|
|
325
|
+
return config.lint;
|
|
326
|
+
}
|
|
327
|
+
// Bare rules at top level
|
|
328
|
+
if ("rules" in config) {
|
|
329
|
+
return config;
|
|
330
|
+
}
|
|
331
|
+
// Config exists but has no lint section — use defaults
|
|
332
|
+
return DEFAULT_CONFIG;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
// Fall through to JSON
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// Fall back to chant.config.json
|
|
340
|
+
const jsonConfigPath = join(dir, "chant.config.json");
|
|
341
|
+
if (!existsSync(jsonConfigPath)) {
|
|
342
|
+
return DEFAULT_CONFIG;
|
|
343
|
+
}
|
|
344
|
+
try {
|
|
345
|
+
return loadConfigFile(jsonConfigPath);
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
throw error;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Resolve the effective rules for a specific file path by applying overrides.
|
|
353
|
+
*
|
|
354
|
+
* Starts with the base config rules, then iterates through overrides in order.
|
|
355
|
+
* For each override whose file globs match the given path, merges override rules on top.
|
|
356
|
+
*
|
|
357
|
+
* @param config - The loaded lint configuration
|
|
358
|
+
* @param filePath - The file path to resolve rules for (relative to project root)
|
|
359
|
+
* @returns Merged rule configuration with overrides applied
|
|
360
|
+
*/
|
|
361
|
+
export function resolveRulesForFile(config, filePath) {
|
|
362
|
+
const rules = { ...config.rules };
|
|
363
|
+
if (!config.overrides) {
|
|
364
|
+
return rules;
|
|
365
|
+
}
|
|
366
|
+
for (const override of config.overrides) {
|
|
367
|
+
const matches = override.files.some((pattern) => {
|
|
368
|
+
return getRuntime().globMatch(pattern, filePath);
|
|
369
|
+
});
|
|
370
|
+
if (matches) {
|
|
371
|
+
Object.assign(rules, override.rules);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return rules;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Apply `lint.rules` severity overrides to already-produced post-synth
|
|
378
|
+
* diagnostics — one lexicon-shipped check's findings, or one project's
|
|
379
|
+
* `lint.policies` findings, it doesn't matter which: both are plain
|
|
380
|
+
* `PostSynthDiagnostic[]` by the time they reach this function, so both go
|
|
381
|
+
* through the identical resolution an AST rule id or a COMP* check id gets
|
|
382
|
+
* (`resolveConfiguredSeverity`, above), keyed by `diag.checkId` instead of
|
|
383
|
+
* `LintRule.id`/`ComponentCheck.id`. `"off"` suppresses (moved to
|
|
384
|
+
* `suppressed`); any other configured severity replaces `diag.severity`,
|
|
385
|
+
* exactly as a config override changes an AST diagnostic's reported level.
|
|
386
|
+
*
|
|
387
|
+
* Lives here rather than in `./post-synth.ts` (where `PostSynthDiagnostic` is
|
|
388
|
+
* declared) on purpose: `post-synth.ts` is a leaf every lexicon's checks
|
|
389
|
+
* import as a real runtime module, and this file resolves built-in preset
|
|
390
|
+
* paths via the runtime adapter at module scope — pulling that into every
|
|
391
|
+
* lexicon's check barrel merely to share one filter function would be the
|
|
392
|
+
* wrong trade. Only this file's TYPE (`PostSynthDiagnostic`) crosses back,
|
|
393
|
+
* which costs nothing at runtime.
|
|
394
|
+
*
|
|
395
|
+
* chant #1138 — deliberately does NOT also honor `chant-disable` source
|
|
396
|
+
* comments. `PostSynthDiagnostic` has no source anchor to disable AT — see
|
|
397
|
+
* its doc comment (`./post-synth.ts`) for why `entity` doesn't supply one —
|
|
398
|
+
* so there is no coherent site to check for a directive. Even in the one case
|
|
399
|
+
* a real anchor sometimes exists (a live, in-process `ctx.entities` value
|
|
400
|
+
* stamped with build provenance, `../provenance.ts`'s `getProvenance`), it
|
|
401
|
+
* would not generalize: not every check sets `entity`, `entity` isn't
|
|
402
|
+
* guaranteed to be an entities-map key (it's a name in the synthesized
|
|
403
|
+
* OUTPUT — a CFN logical id, a k8s `metadata.name` — which a serializer is
|
|
404
|
+
* free to have derived, prefixed, or renamed from the source-level entity
|
|
405
|
+
* name), and that provenance never crosses the `--sandbox` policy child's
|
|
406
|
+
* JSON wire (`../discovery/entity-wire-codec.ts` doesn't carry it, and
|
|
407
|
+
* re-deriving it on the far side would mean sending source file paths into a
|
|
408
|
+
* channel that's supposed to carry only the resolved build). Building
|
|
409
|
+
* directive suppression on a sometimes-present, sometimes-not anchor would
|
|
410
|
+
* make `chant build` and `chant build --sandbox` disagree about the
|
|
411
|
+
* identical finding depending on which path happened to still have the
|
|
412
|
+
* entity object around — precisely the kind of inconsistency #1138 exists to
|
|
413
|
+
* remove. Config severity (`"off"`) is the one suppression surface this can
|
|
414
|
+
* offer uniformly; a check that wants a per-instance escape hatch can read
|
|
415
|
+
* `ctx.env`/its own options to decide not to emit a diagnostic at all.
|
|
416
|
+
*
|
|
417
|
+
* chant #2111 adds a second, narrower surface next to this one:
|
|
418
|
+
* `./suppressions.ts`'s `applyInlineSuppressions` matches `diag.entity`
|
|
419
|
+
* against `ctx.entities` (a source-level map key every `PostSynthContext`
|
|
420
|
+
* carries) instead of a name in the synthesized output, so it sidesteps the
|
|
421
|
+
* exact mismatch this comment describes. It is opt-in per lexicon (an entity
|
|
422
|
+
* has to carry a `suppressions` field) and runs as its own pass, right after
|
|
423
|
+
* this one, in both `chant build` and `chant audit`. See that module's doc
|
|
424
|
+
* for the full reasoning.
|
|
425
|
+
*
|
|
426
|
+
* `catalog` (chant #2113, optional) passes straight through to
|
|
427
|
+
* `resolveConfiguredSeverity` above for alias resolution; see its doc for
|
|
428
|
+
* what that buys and why it's opt-in.
|
|
429
|
+
*/
|
|
430
|
+
export function applyConfiguredSeverity(diagnostics, rules, catalog) {
|
|
431
|
+
const kept = [];
|
|
432
|
+
const suppressed = [];
|
|
433
|
+
for (const diag of diagnostics) {
|
|
434
|
+
const resolved = resolveConfiguredSeverity(rules, diag.checkId, diag.severity, catalog);
|
|
435
|
+
if (resolved.severity === "off") {
|
|
436
|
+
suppressed.push(diag);
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
kept.push(resolved.severity === diag.severity ? diag : { ...diag, severity: resolved.severity });
|
|
440
|
+
}
|
|
441
|
+
return { diagnostics: kept, suppressed };
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Resolve `lint.presets`' name for one lexicon into the set of check ids that
|
|
445
|
+
* preset enables (chant #2113). `presets` is what a lexicon plugin's
|
|
446
|
+
* `lintPresets()` returns (`../lexicon.ts`). A lexicon that ships none
|
|
447
|
+
* passes `undefined` here, in which case this returns `undefined` and
|
|
448
|
+
* `applyConfiguredPreset` below becomes a no-op (every rule reports, exactly
|
|
449
|
+
* today's behavior for a lexicon this feature doesn't touch).
|
|
450
|
+
*
|
|
451
|
+
* An unrecognized preset name (a typo, or a name the lexicon doesn't define)
|
|
452
|
+
* also returns `undefined` rather than an empty set. Falling back to
|
|
453
|
+
* unfiltered is the safe failure direction; silently reporting nothing would
|
|
454
|
+
* not be.
|
|
455
|
+
*/
|
|
456
|
+
export function resolvePresetIds(presets, presetName) {
|
|
457
|
+
const ids = presets?.[presetName];
|
|
458
|
+
return ids ? new Set(ids) : undefined;
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Filter post-synth diagnostics down to an active preset's ids (chant
|
|
462
|
+
* #2113). `presetIds` is `resolvePresetIds`'s output. `undefined` disables
|
|
463
|
+
* filtering entirely (a lexicon with no presets, or an unresolved preset
|
|
464
|
+
* name), matching tflint's own precedence chain (`--only` / rule config,
|
|
465
|
+
* then preset, then `disabled_by_default`, `tflint-ruleset-terraform`'s
|
|
466
|
+
* config docs): an explicit `lint.rules` entry for a check id always keeps
|
|
467
|
+
* that id's findings, whether or not the active preset includes it, so a
|
|
468
|
+
* project can opt a single report-only rule back in under `recommended`
|
|
469
|
+
* without switching its whole lexicon to `all`.
|
|
470
|
+
*/
|
|
471
|
+
export function applyConfiguredPreset(diagnostics, presetIds, rules) {
|
|
472
|
+
if (!presetIds)
|
|
473
|
+
return { diagnostics: [...diagnostics], suppressed: [] };
|
|
474
|
+
const kept = [];
|
|
475
|
+
const suppressed = [];
|
|
476
|
+
for (const diag of diagnostics) {
|
|
477
|
+
if (presetIds.has(diag.checkId) || rules?.[diag.checkId] !== undefined)
|
|
478
|
+
kept.push(diag);
|
|
479
|
+
else
|
|
480
|
+
suppressed.push(diag);
|
|
481
|
+
}
|
|
482
|
+
return { diagnostics: kept, suppressed };
|
|
483
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { resolveSelector } from "./selectors.js";
|
|
2
|
+
import { getNamedCheck } from "./named-checks.js";
|
|
3
|
+
/**
|
|
4
|
+
* Build a standard LintRule from a declarative RuleSpec.
|
|
5
|
+
*/
|
|
6
|
+
export function rule(spec) {
|
|
7
|
+
const selectorFn = resolveSelector(spec.selector);
|
|
8
|
+
return {
|
|
9
|
+
id: spec.id,
|
|
10
|
+
severity: spec.severity,
|
|
11
|
+
category: spec.category,
|
|
12
|
+
description: spec.description,
|
|
13
|
+
helpUri: spec.helpUri,
|
|
14
|
+
check(context) {
|
|
15
|
+
const diagnostics = [];
|
|
16
|
+
const sf = context.sourceFile;
|
|
17
|
+
let nodes = selectorFn(sf);
|
|
18
|
+
// Apply match conditions
|
|
19
|
+
if (spec.match) {
|
|
20
|
+
nodes = nodes.filter((node) => matchNode(node, spec.match, sf, context));
|
|
21
|
+
}
|
|
22
|
+
// Apply custom validation
|
|
23
|
+
if (spec.validate) {
|
|
24
|
+
nodes = nodes.filter((node) => spec.validate(node, context));
|
|
25
|
+
}
|
|
26
|
+
for (const node of nodes) {
|
|
27
|
+
const { line, character } = sf.getLineAndCharacterOfPosition(node.getStart(sf));
|
|
28
|
+
const nodeText = node.getText(sf);
|
|
29
|
+
const message = spec.message.replace(/\{node\}/g, nodeText);
|
|
30
|
+
const diagnostic = {
|
|
31
|
+
file: context.filePath,
|
|
32
|
+
line: line + 1,
|
|
33
|
+
column: character + 1,
|
|
34
|
+
ruleId: spec.id,
|
|
35
|
+
severity: spec.severity,
|
|
36
|
+
message,
|
|
37
|
+
};
|
|
38
|
+
if (spec.fix) {
|
|
39
|
+
diagnostic.fix = buildFix(node, spec.fix, sf);
|
|
40
|
+
}
|
|
41
|
+
diagnostics.push(diagnostic);
|
|
42
|
+
}
|
|
43
|
+
return diagnostics;
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if a node matches the given condition.
|
|
49
|
+
*/
|
|
50
|
+
function matchNode(node, condition, sf, context) {
|
|
51
|
+
// Pattern match
|
|
52
|
+
if (condition.pattern) {
|
|
53
|
+
const text = node.getText(sf);
|
|
54
|
+
if (!condition.pattern.test(text))
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
// Within match — node must be inside a parent matching the selector
|
|
58
|
+
if (condition.within) {
|
|
59
|
+
const parentSelector = resolveSelector(condition.within);
|
|
60
|
+
const parents = parentSelector(sf);
|
|
61
|
+
const isWithin = parents.some((parent) => isAncestorOf(parent, node));
|
|
62
|
+
if (!isWithin)
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
// Require match — node must contain children matching the selector(s)
|
|
66
|
+
if (condition.require) {
|
|
67
|
+
const reqs = Array.isArray(condition.require) ? condition.require : [condition.require];
|
|
68
|
+
for (const req of reqs) {
|
|
69
|
+
const childSelector = resolveSelector(req);
|
|
70
|
+
const children = childSelector(sf);
|
|
71
|
+
const hasChild = children.some((child) => isAncestorOf(node, child));
|
|
72
|
+
if (!hasChild)
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Named check
|
|
77
|
+
if (condition.check) {
|
|
78
|
+
const checkFn = getNamedCheck(condition.check);
|
|
79
|
+
if (!checkFn) {
|
|
80
|
+
throw new Error(`Unknown named check: "${condition.check}"`);
|
|
81
|
+
}
|
|
82
|
+
if (!checkFn(node, context))
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if `ancestor` is an ancestor of `node`.
|
|
89
|
+
*/
|
|
90
|
+
function isAncestorOf(ancestor, node) {
|
|
91
|
+
let current = node.parent;
|
|
92
|
+
while (current) {
|
|
93
|
+
if (current === ancestor)
|
|
94
|
+
return true;
|
|
95
|
+
current = current.parent;
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Build a LintFix from a declarative fix spec.
|
|
101
|
+
*/
|
|
102
|
+
function buildFix(node, fix, sf) {
|
|
103
|
+
const start = node.getStart(sf);
|
|
104
|
+
const end = node.getEnd();
|
|
105
|
+
switch (fix.kind) {
|
|
106
|
+
case "replace": {
|
|
107
|
+
const text = fix.resolve ? fix.resolve(node, sf) : (fix.text ?? "");
|
|
108
|
+
return { range: [start, end], replacement: text, kind: "replace" };
|
|
109
|
+
}
|
|
110
|
+
case "insert-before": {
|
|
111
|
+
const text = fix.resolve ? fix.resolve(node, sf) : (fix.text ?? "");
|
|
112
|
+
return { range: [start, start], replacement: text, kind: "insert-before" };
|
|
113
|
+
}
|
|
114
|
+
case "insert-after": {
|
|
115
|
+
const text = fix.resolve ? fix.resolve(node, sf) : (fix.text ?? "");
|
|
116
|
+
return { range: [end, end], replacement: text, kind: "insert-after" };
|
|
117
|
+
}
|
|
118
|
+
case "delete": {
|
|
119
|
+
return { range: [start, end], replacement: "", kind: "delete" };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/lint/discover.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/lint/discover.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8BnD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmBhF;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,cAAc,EAAE,CAmB5F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAYnD"}
|