@intentius/chant 0.124.13 → 0.124.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.d.ts +6 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +669 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.d.ts +24 -2
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +361 -0
- package/dist/child-project.js +21 -0
- package/dist/ci-jobs.d.ts +227 -0
- package/dist/ci-jobs.d.ts.map +1 -0
- package/dist/ci-jobs.js +448 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +135 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.d.ts +10 -2
- package/dist/composite.d.ts.map +1 -1
- package/dist/composite.js +313 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.d.ts +2 -1
- package/dist/discovery/collect.d.ts.map +1 -1
- package/dist/discovery/collect.js +223 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4073 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/host-composite.d.ts +35 -0
- package/dist/discovery/host-composite.d.ts.map +1 -0
- package/dist/discovery/host-composite.js +93 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +20 -9
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +313 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.d.ts +69 -2
- package/dist/lifecycle/gate-audit.d.ts.map +1 -1
- package/dist/lifecycle/gate-audit.js +415 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +24 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +201 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.d.ts +1 -1
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.d.ts +8 -3
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +67 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.d.ts +28 -16
- package/dist/op/activities/reconcile.d.ts.map +1 -1
- package/dist/op/activities/reconcile.js +1011 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.d.ts +1 -1
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts +7 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.js +119 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
- package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +462 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.d.ts +3 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +202 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/class-data.d.ts +84 -0
- package/dist/workspace/class-data.d.ts.map +1 -0
- package/dist/workspace/class-data.js +238 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.d.ts +3 -7
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +553 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +4 -11
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +162 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/build.ts +8 -0
- package/src/change-set.test.ts +48 -0
- package/src/change-set.ts +52 -2
- package/src/ci-jobs.test.ts +49 -0
- package/src/ci-jobs.ts +515 -0
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/pr-pipeline.ts +3 -2
- package/src/components/sandbox/driver.ts +3 -1
- package/src/composite.ts +15 -3
- package/src/config-import.ts +3 -0
- package/src/discovery/collect.ts +15 -1
- package/src/discovery/fold-build-parity.test.ts +71 -0
- package/src/discovery/fold-import.ts +25 -127
- package/src/discovery/fold-project-provenance.test.ts +21 -4
- package/src/discovery/host-composite.ts +101 -0
- package/src/discovery/import.ts +2 -0
- package/src/discovery/index.ts +11 -1
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +5 -4
- package/src/gate-decision-identity.test.ts +59 -6
- package/src/gate-decision.ts +81 -21
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-audit.test.ts +55 -1
- package/src/lifecycle/gate-audit.ts +116 -3
- package/src/lifecycle/gate-ledger.test.ts +20 -1
- package/src/lifecycle/gate-ledger.ts +33 -1
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +11 -3
- package/src/op/activities/lexicon-upgrade.test.ts +2 -0
- package/src/op/activities/reconcile.test.ts +62 -2
- package/src/op/activities/reconcile.ts +46 -22
- package/src/op/builders.ts +1 -1
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-run.ts +4 -3
- package/src/op/op-waves.test.ts +2 -0
- package/src/op/work-lease-run.test.ts +12 -4
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/__fixtures__/contract-repo.ts +17 -1
- package/src/workspace/__fixtures__/sessions.ts +3 -3
- package/src/workspace/change-set.schema.json +5 -3
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/ci-green-workflow.test.ts +4 -4
- package/src/workspace/ci-green-workflow.ts +5 -2
- package/src/workspace/class-data.test.ts +64 -0
- package/src/workspace/class-data.ts +236 -0
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +7 -36
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +12 -95
- package/src/workspace/records-formats.test.ts +7 -2
- package/src/workspace/records-sessions-write.test.ts +3 -3
- package/src/workspace/status-contract.e2e.test.ts +37 -0
- package/src/workspace/status-contract.test.ts +23 -21
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
/**
|
|
3
|
+
* COR013: Single-concern file
|
|
4
|
+
*
|
|
5
|
+
* Advisory rule that flags files mixing resource Declarables (e.g. Bucket,
|
|
6
|
+
* Function, Role) with property/config Declarables (e.g. BucketEncryption,
|
|
7
|
+
* VersioningConfiguration) as `new` expressions.
|
|
8
|
+
*
|
|
9
|
+
* Heuristic: class names containing "Configuration", "Encryption", "Policy",
|
|
10
|
+
* "Rule", "Setting", "Block", "Specification" are considered property-kind.
|
|
11
|
+
* All other capitalized `new` expressions are considered resource-kind.
|
|
12
|
+
*
|
|
13
|
+
* Triggers when a single file has `new` expressions for both kinds.
|
|
14
|
+
*/
|
|
15
|
+
const PROPERTY_KIND_PATTERNS = [
|
|
16
|
+
"Configuration",
|
|
17
|
+
"Encryption",
|
|
18
|
+
"Policy",
|
|
19
|
+
"Rule",
|
|
20
|
+
"Setting",
|
|
21
|
+
"Block",
|
|
22
|
+
"Specification",
|
|
23
|
+
];
|
|
24
|
+
function isPropertyKindClass(className) {
|
|
25
|
+
return PROPERTY_KIND_PATTERNS.some(pattern => className.includes(pattern));
|
|
26
|
+
}
|
|
27
|
+
function isResourceKindClass(className) {
|
|
28
|
+
return /^[A-Z]/.test(className) && !isPropertyKindClass(className);
|
|
29
|
+
}
|
|
30
|
+
function collectNewExpressions(node, sourceFile, results) {
|
|
31
|
+
if (ts.isNewExpression(node)) {
|
|
32
|
+
const className = node.expression.getText(sourceFile);
|
|
33
|
+
// Only consider capitalized class names (likely Declarable constructors)
|
|
34
|
+
if (/^[A-Z]/.test(className) || /\.[A-Z]/.test(className)) {
|
|
35
|
+
// Extract the simple class name (after any dot for qualified access like aws.Bucket)
|
|
36
|
+
const simpleName = className.includes(".")
|
|
37
|
+
? className.split(".").pop()
|
|
38
|
+
: className;
|
|
39
|
+
results.push({ className: simpleName, node });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
ts.forEachChild(node, child => collectNewExpressions(child, sourceFile, results));
|
|
43
|
+
}
|
|
44
|
+
export const singleConcernFileRule = {
|
|
45
|
+
id: "COR013",
|
|
46
|
+
severity: "info",
|
|
47
|
+
category: "style",
|
|
48
|
+
description: "Flags files mixing resource Declarables with configuration Declarables",
|
|
49
|
+
check(context) {
|
|
50
|
+
const newExpressions = [];
|
|
51
|
+
collectNewExpressions(context.sourceFile, context.sourceFile, newExpressions);
|
|
52
|
+
const resourceExpressions = newExpressions.filter(e => isResourceKindClass(e.className));
|
|
53
|
+
const propertyExpressions = newExpressions.filter(e => isPropertyKindClass(e.className));
|
|
54
|
+
// Only flag if the file has both kinds
|
|
55
|
+
if (resourceExpressions.length === 0 || propertyExpressions.length === 0) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
// Report a single diagnostic at the file level (first line)
|
|
59
|
+
const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(0);
|
|
60
|
+
return [
|
|
61
|
+
{
|
|
62
|
+
file: context.filePath,
|
|
63
|
+
line: line + 1,
|
|
64
|
+
column: character + 1,
|
|
65
|
+
ruleId: "COR013",
|
|
66
|
+
severity: "info",
|
|
67
|
+
message: "COR013: File mixes resource Declarables with configuration Declarables — consider splitting into separate files",
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
},
|
|
71
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
/**
|
|
3
|
+
* SYS001: a `decide` backend's key is never a literal (#2740, core's since
|
|
4
|
+
* #2828).
|
|
5
|
+
*
|
|
6
|
+
* A key is `{ env: "VARIABLE" }` or a brokered capability
|
|
7
|
+
* (`{ capability: "inference", member: "box" }`, #2726). A string written
|
|
8
|
+
* where a key goes is a credential in git history, and a box that holds one
|
|
9
|
+
* fails `workspace check` with WSP121 as well.
|
|
10
|
+
*
|
|
11
|
+
* Fires on a `key` property whose value is a string or template literal,
|
|
12
|
+
* inside a backend of a `backends` object that belongs to `decide`: the
|
|
13
|
+
* `decide` block of a config object (`decide: { backends: ... }`) or the
|
|
14
|
+
* options of a `decide(...)` step. A `backends` object anywhere else, such as
|
|
15
|
+
* a Terraform backend's `key`, is not a decide backend and is left alone.
|
|
16
|
+
* The id keeps the SYS prefix it had in the systemone lexicon.
|
|
17
|
+
*/
|
|
18
|
+
function keyText(name) {
|
|
19
|
+
if (ts.isIdentifier(name) || ts.isStringLiteral(name))
|
|
20
|
+
return name.text;
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
const isLiteral = (node) => ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node) || ts.isTemplateExpression(node);
|
|
24
|
+
const isDecideCall = (node) => ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "decide";
|
|
25
|
+
export const noLiteralKeyRule = {
|
|
26
|
+
id: "SYS001",
|
|
27
|
+
severity: "error",
|
|
28
|
+
category: "security",
|
|
29
|
+
description: "A decide backend key is { env } or a brokered capability, never a literal string",
|
|
30
|
+
check(context) {
|
|
31
|
+
const diagnostics = [];
|
|
32
|
+
const source = context.sourceFile;
|
|
33
|
+
const visit = (node, scope) => {
|
|
34
|
+
let within = scope;
|
|
35
|
+
if (isDecideCall(node))
|
|
36
|
+
within = "decide";
|
|
37
|
+
else if (ts.isPropertyAssignment(node)) {
|
|
38
|
+
const key = keyText(node.name);
|
|
39
|
+
if (key === "decide")
|
|
40
|
+
within = "decide";
|
|
41
|
+
else if (key === "backends" && scope === "decide")
|
|
42
|
+
within = "backends";
|
|
43
|
+
if (scope === "backends" && key === "key" && isLiteral(node.initializer)) {
|
|
44
|
+
const { line, character } = source.getLineAndCharacterOfPosition(node.initializer.getStart(source));
|
|
45
|
+
diagnostics.push({
|
|
46
|
+
ruleId: "SYS001",
|
|
47
|
+
severity: "error",
|
|
48
|
+
message: 'Literal backend key: use { env: "VARIABLE" } or a brokered capability ({ capability, member }) instead',
|
|
49
|
+
file: context.filePath,
|
|
50
|
+
line: line + 1,
|
|
51
|
+
column: character + 1,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
ts.forEachChild(node, (child) => visit(child, within));
|
|
56
|
+
};
|
|
57
|
+
visit(source, "outside");
|
|
58
|
+
return diagnostics;
|
|
59
|
+
},
|
|
60
|
+
};
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
/**
|
|
3
|
+
* Registry of named selectors.
|
|
4
|
+
*/
|
|
5
|
+
const selectorRegistry = new Map();
|
|
6
|
+
/**
|
|
7
|
+
* Recursively collect nodes matching a predicate.
|
|
8
|
+
*/
|
|
9
|
+
export function collectNodes(root, predicate) {
|
|
10
|
+
const results = [];
|
|
11
|
+
function visit(node) {
|
|
12
|
+
if (predicate(node)) {
|
|
13
|
+
results.push(node);
|
|
14
|
+
}
|
|
15
|
+
ts.forEachChild(node, visit);
|
|
16
|
+
}
|
|
17
|
+
visit(root);
|
|
18
|
+
return results;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Built-in selector: matches `new X(...)` constructor calls (resource instantiations).
|
|
22
|
+
*/
|
|
23
|
+
function selectResource(sf) {
|
|
24
|
+
return collectNodes(sf, (node) => ts.isNewExpression(node));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Built-in selector: matches any resource — alias for `resource`.
|
|
28
|
+
*/
|
|
29
|
+
function selectAnyResource(sf) {
|
|
30
|
+
return selectResource(sf);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Built-in selector: matches string literal nodes.
|
|
34
|
+
*/
|
|
35
|
+
function selectStringLiteral(sf) {
|
|
36
|
+
return collectNodes(sf, (node) => ts.isStringLiteral(node));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Built-in selector: matches exported declaration names.
|
|
40
|
+
*/
|
|
41
|
+
function selectExportName(sf) {
|
|
42
|
+
return collectNodes(sf, (node) => {
|
|
43
|
+
if (ts.isVariableStatement(node)) {
|
|
44
|
+
return node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) ?? false;
|
|
45
|
+
}
|
|
46
|
+
if (ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node)) {
|
|
47
|
+
return node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) ?? false;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Built-in selector: matches import source strings.
|
|
54
|
+
*/
|
|
55
|
+
function selectImportSource(sf) {
|
|
56
|
+
return collectNodes(sf, (node) => {
|
|
57
|
+
if (ts.isImportDeclaration(node)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Built-in selector: matches property assignments.
|
|
65
|
+
*/
|
|
66
|
+
function selectProperty(sf) {
|
|
67
|
+
return collectNodes(sf, (node) => ts.isPropertyAssignment(node));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Built-in selector: matches the type argument of `new X<Type>(...)` expressions.
|
|
71
|
+
*/
|
|
72
|
+
function selectResourceType(sf) {
|
|
73
|
+
return collectNodes(sf, (node) => {
|
|
74
|
+
if (ts.isNewExpression(node) && node.typeArguments && node.typeArguments.length > 0) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Built-in selector: matches exported const declarations.
|
|
82
|
+
*/
|
|
83
|
+
function selectExportedConst(sf) {
|
|
84
|
+
return collectNodes(sf, (node) => {
|
|
85
|
+
if (!ts.isVariableStatement(node))
|
|
86
|
+
return false;
|
|
87
|
+
const hasExport = node.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) ?? false;
|
|
88
|
+
if (!hasExport)
|
|
89
|
+
return false;
|
|
90
|
+
return node.declarationList.flags === ts.NodeFlags.Const ||
|
|
91
|
+
(node.declarationList.flags & ts.NodeFlags.Const) !== 0;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// Register built-in selectors
|
|
95
|
+
const builtins = [
|
|
96
|
+
["resource", selectResource],
|
|
97
|
+
["any-resource", selectAnyResource],
|
|
98
|
+
["string-literal", selectStringLiteral],
|
|
99
|
+
["export-name", selectExportName],
|
|
100
|
+
["import-source", selectImportSource],
|
|
101
|
+
["property", selectProperty],
|
|
102
|
+
["resource-type", selectResourceType],
|
|
103
|
+
["exported-const", selectExportedConst],
|
|
104
|
+
];
|
|
105
|
+
for (const [name, fn] of builtins) {
|
|
106
|
+
selectorRegistry.set(name, fn);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Register a custom selector.
|
|
110
|
+
*/
|
|
111
|
+
export function registerSelector(name, fn) {
|
|
112
|
+
selectorRegistry.set(name, fn);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Resolve a selector name (or compound expression) to a SelectorFn.
|
|
116
|
+
*
|
|
117
|
+
* Compound selectors use `>` to scope: `"resource > property"` means
|
|
118
|
+
* "find all `resource` nodes, then within each, find all `property` nodes".
|
|
119
|
+
*/
|
|
120
|
+
export function resolveSelector(name) {
|
|
121
|
+
// Check for compound selector
|
|
122
|
+
if (name.includes(">")) {
|
|
123
|
+
const parts = name.split(">").map((s) => s.trim());
|
|
124
|
+
const fns = parts.map((part) => {
|
|
125
|
+
const fn = selectorRegistry.get(part);
|
|
126
|
+
if (!fn) {
|
|
127
|
+
throw new Error(`Unknown selector: "${part}"`);
|
|
128
|
+
}
|
|
129
|
+
return fn;
|
|
130
|
+
});
|
|
131
|
+
return (sf) => {
|
|
132
|
+
// Start with results from first selector
|
|
133
|
+
let nodes = fns[0](sf);
|
|
134
|
+
// For each subsequent selector, search within current nodes
|
|
135
|
+
for (let i = 1; i < fns.length; i++) {
|
|
136
|
+
const nextNodes = [];
|
|
137
|
+
for (const parent of nodes) {
|
|
138
|
+
const childSelector = fns[i];
|
|
139
|
+
const allMatches = childSelector(sf);
|
|
140
|
+
for (const match of allMatches) {
|
|
141
|
+
if (isDescendantOf(match, parent)) {
|
|
142
|
+
nextNodes.push(match);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
nodes = nextNodes;
|
|
147
|
+
}
|
|
148
|
+
return nodes;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const fn = selectorRegistry.get(name);
|
|
152
|
+
if (!fn) {
|
|
153
|
+
throw new Error(`Unknown selector: "${name}"`);
|
|
154
|
+
}
|
|
155
|
+
return fn;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Check if a node is a descendant of another node.
|
|
159
|
+
*/
|
|
160
|
+
function isDescendantOf(node, ancestor) {
|
|
161
|
+
let current = node.parent;
|
|
162
|
+
while (current) {
|
|
163
|
+
if (current === ancestor)
|
|
164
|
+
return true;
|
|
165
|
+
current = current.parent;
|
|
166
|
+
}
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline HCL-comment suppression (chant #2111). This file is core's small,
|
|
3
|
+
* generic half of the mechanism. It filters already-produced
|
|
4
|
+
* `PostSynthDiagnostic`s against suppression directives an entity carries,
|
|
5
|
+
* with no knowledge of which lexicon produced that entity. The other half,
|
|
6
|
+
* reading `# chant-ignore` / `# chant-ignore-file` / `# chant-ignore-block`
|
|
7
|
+
* comments out of raw `.tf` text and attaching the result to each parsed
|
|
8
|
+
* entity, is terraform-specific and lives in
|
|
9
|
+
* `lexicons/terraform/src/hcl/suppressions.ts`.
|
|
10
|
+
*
|
|
11
|
+
* Placement. The issue that asked for this weighed two options: a wrapper
|
|
12
|
+
* over `runPostSynthChecks` private to the terraform lexicon, or a
|
|
13
|
+
* `PostSynthContext` field every lexicon could share. Neither is quite what
|
|
14
|
+
* this file does. `ctx.entities` is already the one thing every
|
|
15
|
+
* `PostSynthContext` carries regardless of lexicon, and a suppression
|
|
16
|
+
* directive is inherently a fact ABOUT one entity, namely which block it
|
|
17
|
+
* anchors to, not a fact about the run as a whole. That is the same reasoning
|
|
18
|
+
* that already lets each lexicon's `Declarable` carry its own `props` shape
|
|
19
|
+
* (`TerraformEntity.props`, `K8sEntity.props`, and so on), so the hook here
|
|
20
|
+
* is a plain, duck-typed optional field, `suppressions`, that any entity MAY
|
|
21
|
+
* carry beside its `props`, read generically through `entitySuppressions()`
|
|
22
|
+
* below. Choosing this over a `PostSynthContext.suppressions` field needed no
|
|
23
|
+
* change to `PostSynthContext`, `Declarable`, or any of the places that
|
|
24
|
+
* construct a context (`./post-synth.ts`'s `runPostSynthChecks`, `chant
|
|
25
|
+
* audit`'s `../audit/core.ts`, and the two test-utils builders). Every one
|
|
26
|
+
* of them already hands `applyInlineSuppressions` below `ctx.entities`, so a
|
|
27
|
+
* lexicon that wants this (k8s manifests are the epic's other named
|
|
28
|
+
* candidate) adopts the convention on its own entities, with zero further
|
|
29
|
+
* core changes.
|
|
30
|
+
*
|
|
31
|
+
* `rules` (a project's `lint.rules`) is optional here on purpose. `chant
|
|
32
|
+
* build` has one to pass, so `ignorable: false` works there; `chant audit`'s
|
|
33
|
+
* audit-core path does not thread a project config through at all today, see
|
|
34
|
+
* `../audit/core.ts`, so it calls this with `rules` omitted. Every rule
|
|
35
|
+
* reads as ignorable in that path, the same default this module
|
|
36
|
+
* gives an unconfigured rule id everywhere else.
|
|
37
|
+
*/
|
|
38
|
+
/** An expired suppression is reported once as its own finding, not dropped. */
|
|
39
|
+
export const SUPPRESSION_EXPIRED_ID = "SUPP001";
|
|
40
|
+
/** A `chant-ignore-file` found anywhere but the first non-blank line. */
|
|
41
|
+
export const SUPPRESSION_MISPLACED_FILE_ID = "SUPP002";
|
|
42
|
+
/** A directive explicitly names a rule id configured `ignorable: false`. */
|
|
43
|
+
export const SUPPRESSION_UNIGNORABLE_ID = "SUPP003";
|
|
44
|
+
/** Read an entity's directives, if it carries any (duck-typed; see module doc). */
|
|
45
|
+
export function entitySuppressions(entity) {
|
|
46
|
+
if (!entity)
|
|
47
|
+
return [];
|
|
48
|
+
const s = entity.suppressions;
|
|
49
|
+
return Array.isArray(s) ? s : [];
|
|
50
|
+
}
|
|
51
|
+
/** Default is ignorable (per the issue); only an explicit `{ ignorable: false }` option denies it. */
|
|
52
|
+
function isIgnorable(rules, id) {
|
|
53
|
+
const cfg = rules?.[id];
|
|
54
|
+
if (!Array.isArray(cfg))
|
|
55
|
+
return true;
|
|
56
|
+
const options = cfg[1];
|
|
57
|
+
return options?.ignorable !== false;
|
|
58
|
+
}
|
|
59
|
+
function namesId(ids, checkId) {
|
|
60
|
+
return ids === "all" || ids.has(checkId);
|
|
61
|
+
}
|
|
62
|
+
function isExpired(expires, today) {
|
|
63
|
+
if (!expires)
|
|
64
|
+
return false;
|
|
65
|
+
const parsed = new Date(`${expires}T00:00:00Z`);
|
|
66
|
+
if (Number.isNaN(parsed.getTime()))
|
|
67
|
+
return false;
|
|
68
|
+
return parsed.getTime() < today.getTime();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Apply inline (`# chant-ignore*`) suppression to a set of post-synth
|
|
72
|
+
* diagnostics. `entities` is `ctx.entities`, the same map every
|
|
73
|
+
* `PostSynthContext` already carries. `rules` is the project's `lint.rules`,
|
|
74
|
+
* for `ignorable: false`; see this module's doc comment for why it is
|
|
75
|
+
* optional. `today` is injectable so an expiry test doesn't depend on the
|
|
76
|
+
* clock.
|
|
77
|
+
*/
|
|
78
|
+
export function applyInlineSuppressions(diagnostics, entities, rules, today = new Date()) {
|
|
79
|
+
const kept = [];
|
|
80
|
+
const suppressed = [];
|
|
81
|
+
const meta = [];
|
|
82
|
+
const reported = new Set();
|
|
83
|
+
const reportMeta = (d, checkId, message) => {
|
|
84
|
+
const dedupeKey = `${checkId}:${d.key}`;
|
|
85
|
+
if (reported.has(dedupeKey))
|
|
86
|
+
return;
|
|
87
|
+
reported.add(dedupeKey);
|
|
88
|
+
meta.push({ checkId, severity: "warning", file: d.file, line: d.line, message });
|
|
89
|
+
};
|
|
90
|
+
// Expired and misplaced directives are findings on their own. They don't
|
|
91
|
+
// need a matching diagnostic to be worth reporting, so every directive
|
|
92
|
+
// attached to any entity is checked once here, deduplicated by its own
|
|
93
|
+
// identity (a directive attached to several entities, as a file-level one
|
|
94
|
+
// is, would otherwise be reported once per entity).
|
|
95
|
+
for (const entity of entities.values()) {
|
|
96
|
+
for (const d of entitySuppressions(entity)) {
|
|
97
|
+
if (d.misplaced) {
|
|
98
|
+
reportMeta(d, SUPPRESSION_MISPLACED_FILE_ID, `chant-ignore-file at ${d.file}:${d.line} is not the first non-blank line of the file, so it has no effect. Move it to the top.`);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (isExpired(d.expires, today)) {
|
|
102
|
+
reportMeta(d, SUPPRESSION_EXPIRED_ID, `Suppression at ${d.file}:${d.line} expired ${d.expires} and no longer applies.`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
for (const diag of diagnostics) {
|
|
107
|
+
const entity = diag.entity ? entities.get(diag.entity) : undefined;
|
|
108
|
+
let matched;
|
|
109
|
+
for (const d of entitySuppressions(entity)) {
|
|
110
|
+
if (d.misplaced)
|
|
111
|
+
continue;
|
|
112
|
+
if (isExpired(d.expires, today))
|
|
113
|
+
continue;
|
|
114
|
+
if (!namesId(d.ids, diag.checkId))
|
|
115
|
+
continue;
|
|
116
|
+
if (d.ids !== "all" && !isIgnorable(rules, diag.checkId)) {
|
|
117
|
+
reportMeta(d, SUPPRESSION_UNIGNORABLE_ID, `${diag.checkId} is configured \`ignorable: false\`; the ${d.form} at ${d.file}:${d.line} naming it has no effect.`);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
matched = d;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
if (matched)
|
|
124
|
+
suppressed.push(diag);
|
|
125
|
+
else
|
|
126
|
+
kept.push(diag);
|
|
127
|
+
}
|
|
128
|
+
return { diagnostics: kept, suppressed, meta };
|
|
129
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The TypeScript compiler API chant parses with, for lexicon lint rules and
|
|
3
|
+
* language services (#3864).
|
|
4
|
+
*
|
|
5
|
+
* Core parses every source file with its own `typescript` dependency, which
|
|
6
|
+
* stays on 5.x. A lexicon that imported `typescript` itself got the project's
|
|
7
|
+
* copy instead, and a project on TypeScript 7 has no JS compiler API there:
|
|
8
|
+
* `ts.isImportDeclaration` is undefined and every rule threw. Even when two
|
|
9
|
+
* 5.x copies load, their `SyntaxKind` numbers can differ between minors, so a
|
|
10
|
+
* rule must test nodes with the same module that built them.
|
|
11
|
+
*
|
|
12
|
+
* Lexicons import `ts` from here, never from "typescript":
|
|
13
|
+
*
|
|
14
|
+
* import { ts } from "@intentius/chant/lint/typescript";
|
|
15
|
+
*/
|
|
16
|
+
import * as ts from "typescript";
|
|
17
|
+
export { ts };
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chant #1166 — let a declared `environment` carry its own endpoint so
|
|
3
|
+
* `--live --env <name>` is self-sufficient.
|
|
4
|
+
*
|
|
5
|
+
* The bug this closes: `chant graph --live --env floci` (and `lifecycle
|
|
6
|
+
* diff`/`plan`) observe a stack by shelling out through each lexicon's
|
|
7
|
+
* `describeResources()`. For AWS that shell-out honors the ambient
|
|
8
|
+
* `AWS_ENDPOINT_URL` env var — when a project's `floci` environment is a local
|
|
9
|
+
* emulator (`http://localhost:4566`) but the invoking shell never exported
|
|
10
|
+
* that var, the AWS CLI silently targets real AWS instead. The stack named
|
|
11
|
+
* after the environment doesn't exist there, so `describeResources` hits its
|
|
12
|
+
* `stackDoesNotExist` branch and returns an empty, unremarkable "nothing is
|
|
13
|
+
* deployed" — indistinguishable from the truthful answer. This cost real
|
|
14
|
+
* debugging time validating #1162's live overlay: the observation code was
|
|
15
|
+
* right, the manual repro just never set the var.
|
|
16
|
+
*
|
|
17
|
+
* The fix: `environments` in `chant.config.ts` can name an endpoint per
|
|
18
|
+
* environment (`config.ts`'s `EnvironmentDeclaration`), and {@link
|
|
19
|
+
* applyLiveEndpoint} injects it into the ambient env var each observing
|
|
20
|
+
* lexicon's CLI shell-out actually reads — but only for a var that isn't
|
|
21
|
+
* already set. Ambient always wins: a shell that already exports
|
|
22
|
+
* `AWS_ENDPOINT_URL` sees no change in behavior.
|
|
23
|
+
*
|
|
24
|
+
* Audited (#1166) which lexicons have an ambient-env-var endpoint knob at
|
|
25
|
+
* all, since that's the specific footgun — a lexicon whose environment
|
|
26
|
+
* binding is resolved from `chant.config` itself (not an ambient var) has
|
|
27
|
+
* nothing to inject here.
|
|
28
|
+
*
|
|
29
|
+
* Which var that is per lexicon is no longer written down twice (#1345). It is
|
|
30
|
+
* derived from the lexicon's own {@link EmulatorCapability.env}, which already
|
|
31
|
+
* has to name the var that points tooling at a booted emulator. The map this
|
|
32
|
+
* replaced listed aws and fly, and its prose asserted azure had no ambient
|
|
33
|
+
* endpoint var — while `lexicons/azure/src/describe-resources.ts` and
|
|
34
|
+
* `deep-observe.ts` both read `AZURE_ENDPOINT_URL` on every call, so a
|
|
35
|
+
* `--live --env floci` read against azure silently went to real Azure.
|
|
36
|
+
*/
|
|
37
|
+
import { environmentEndpoint } from "./config.js";
|
|
38
|
+
import { emulatorsOf, endpointEnvVars } from "./op/emulator-lifecycle.js";
|
|
39
|
+
/**
|
|
40
|
+
* The ambient endpoint vars a lexicon honors, from its emulator capability.
|
|
41
|
+
*
|
|
42
|
+
* A lexicon with no emulator contributes nothing, which is the same answer the
|
|
43
|
+
* hand-maintained map gave for k8s and gcp — they resolve their live
|
|
44
|
+
* target from `chant.config` itself, so there is nothing to inject.
|
|
45
|
+
*/
|
|
46
|
+
export function endpointEnvVarsFor(lexicon) {
|
|
47
|
+
return emulatorsOf(lexicon.emulator).flatMap((cap) => endpointEnvVars(cap));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolve `environment`'s declared endpoint (if any) from `config.environments`
|
|
51
|
+
* and apply it to the ambient env var of every lexicon in `lexicons` that has
|
|
52
|
+
* one ({@link LEXICON_ENDPOINT_ENV_VAR}) — but only when that var isn't
|
|
53
|
+
* already set. Ambient always wins (#1166): behavior for a shell that already
|
|
54
|
+
* exports `AWS_ENDPOINT_URL` is unchanged.
|
|
55
|
+
*
|
|
56
|
+
* Call before a `--live` describe/enrich pass; `restore()` in a `finally` so
|
|
57
|
+
* the injected value never leaks into a later invocation in the same process
|
|
58
|
+
* (tests, or a long-lived host like the MCP server).
|
|
59
|
+
*/
|
|
60
|
+
export function applyLiveEndpoint(environments, environment, lexicons, env = process.env) {
|
|
61
|
+
const endpoint = environmentEndpoint(environments, environment);
|
|
62
|
+
if (!endpoint)
|
|
63
|
+
return { restore: () => { } };
|
|
64
|
+
const applied = [];
|
|
65
|
+
const overridden = [];
|
|
66
|
+
const seen = new Set(); // a var shared by two lexicons is only reported once
|
|
67
|
+
for (const lexicon of lexicons) {
|
|
68
|
+
for (const varName of endpointEnvVarsFor(lexicon)) {
|
|
69
|
+
if (seen.has(varName))
|
|
70
|
+
continue;
|
|
71
|
+
seen.add(varName);
|
|
72
|
+
if (env[varName]) {
|
|
73
|
+
overridden.push(varName);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
env[varName] = endpoint;
|
|
77
|
+
applied.push(varName);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const notices = [];
|
|
81
|
+
if (applied.length > 0) {
|
|
82
|
+
notices.push(`environment "${environment}" declares endpoint ${endpoint} — applied to ${applied.join(", ")} for this read`);
|
|
83
|
+
}
|
|
84
|
+
if (overridden.length > 0) {
|
|
85
|
+
notices.push(`ambient ${overridden.join(", ")} already set — keeping it over environment "${environment}"'s declared endpoint (${endpoint})`);
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
notice: notices.length > 0 ? notices.join("; ") : undefined,
|
|
89
|
+
restore: () => {
|
|
90
|
+
for (const varName of applied)
|
|
91
|
+
delete env[varName];
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* #1166 acceptance: when a `--live` describe comes back with zero resources
|
|
97
|
+
* for a lexicon that had declared entities to look for, and nothing was
|
|
98
|
+
* already reported NOT-OBSERVED (#1089) either, that is either "genuinely
|
|
99
|
+
* nothing is deployed yet" or a misconfigured endpoint/credentials — the two
|
|
100
|
+
* are visually identical, so a caller must say so rather than stay quiet.
|
|
101
|
+
* Returns `undefined` when there is nothing to declare (no declared entities
|
|
102
|
+
* to have asked about, or the emptiness is already explained by #1089's
|
|
103
|
+
* `unobserved`).
|
|
104
|
+
*/
|
|
105
|
+
export function zeroResourcesWarning(lexicon, environment, declaredCount, observed) {
|
|
106
|
+
if (declaredCount === 0)
|
|
107
|
+
return undefined;
|
|
108
|
+
if (Object.keys(observed.resources).length > 0)
|
|
109
|
+
return undefined;
|
|
110
|
+
if (Object.keys(observed.unobserved).length > 0)
|
|
111
|
+
return undefined;
|
|
112
|
+
return `${lexicon}: 0 live resources for env "${environment}" (${declaredCount} declared) — check the endpoint/credentials`;
|
|
113
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One command, one read of the account (chant #2498).
|
|
3
|
+
*
|
|
4
|
+
* A `chant graph --live --traffic` against a live root reads the account
|
|
5
|
+
* twice: once for the graph's observation and once for the prediction, and
|
|
6
|
+
* each of those used to run `live-plan` twice for the document and its human
|
|
7
|
+
* render. Four `live-plan` runs for one answer, which on a drifted estate
|
|
8
|
+
* whose provider retries a deleted resource was five minutes against a
|
|
9
|
+
* consumer's three-minute budget.
|
|
10
|
+
*
|
|
11
|
+
* Nothing shared a read because nothing could: a plugin method takes options
|
|
12
|
+
* alone and cannot be handed the documents another method already holds. So
|
|
13
|
+
* the sharing is ambient instead. A command that wants its reads shared runs
|
|
14
|
+
* inside {@link withLiveReadSession}; a read that can be shared calls
|
|
15
|
+
* {@link memoLiveRead} with a key naming everything that would change its
|
|
16
|
+
* answer (root, directory, binary, flags, environment), and gets the pending
|
|
17
|
+
* or settled promise of an identical read made earlier in the same session.
|
|
18
|
+
*
|
|
19
|
+
* The scope is the session, never the process. A watch Op ticking on a
|
|
20
|
+
* schedule runs the same activity every tick and must see the account move,
|
|
21
|
+
* so outside a session {@link memoLiveRead} simply reads. A rejection is
|
|
22
|
+
* never memoised either: the next caller tries again, since a read that
|
|
23
|
+
* failed on credentials or a timeout says nothing about the next one.
|
|
24
|
+
*
|
|
25
|
+
* `AsyncLocalStorage` carries the session across every `await` under the
|
|
26
|
+
* wrapped call, which is how two plugin methods called one after the other
|
|
27
|
+
* by one handler share it without either knowing about the other.
|
|
28
|
+
*/
|
|
29
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
30
|
+
const sessions = new AsyncLocalStorage();
|
|
31
|
+
/**
|
|
32
|
+
* Run `fn` with a fresh read session, so every {@link memoLiveRead} under
|
|
33
|
+
* it with the same key is one read. A call already inside a session joins
|
|
34
|
+
* it rather than opening a nested one: the outer command is the unit of
|
|
35
|
+
* "once".
|
|
36
|
+
*/
|
|
37
|
+
export function withLiveReadSession(fn) {
|
|
38
|
+
if (sessions.getStore())
|
|
39
|
+
return fn();
|
|
40
|
+
return sessions.run(new Map(), fn);
|
|
41
|
+
}
|
|
42
|
+
/** Whether the caller is inside a {@link withLiveReadSession} scope. */
|
|
43
|
+
export function inLiveReadSession() {
|
|
44
|
+
return sessions.getStore() !== undefined;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The result of `read()`, shared with every earlier and later call in the
|
|
48
|
+
* same session that names the same `key`. Outside a session, `read()` and
|
|
49
|
+
* nothing else. A read that rejects is dropped from the session so the next
|
|
50
|
+
* call with its key reads again.
|
|
51
|
+
*/
|
|
52
|
+
export function memoLiveRead(key, read) {
|
|
53
|
+
const memo = sessions.getStore();
|
|
54
|
+
if (!memo)
|
|
55
|
+
return read();
|
|
56
|
+
const shared = memo.get(key);
|
|
57
|
+
if (shared)
|
|
58
|
+
return shared;
|
|
59
|
+
const pending = read();
|
|
60
|
+
memo.set(key, pending);
|
|
61
|
+
pending.catch(() => {
|
|
62
|
+
if (memo.get(key) === pending)
|
|
63
|
+
memo.delete(key);
|
|
64
|
+
});
|
|
65
|
+
return pending;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* A key from the facts that decide a read's answer. Sorted keys, so two
|
|
69
|
+
* callers that spell the same read in a different order share it.
|
|
70
|
+
*/
|
|
71
|
+
export function liveReadKey(activity, facts) {
|
|
72
|
+
const ordered = {};
|
|
73
|
+
for (const name of Object.keys(facts).sort())
|
|
74
|
+
ordered[name] = facts[name];
|
|
75
|
+
return `${activity}:${JSON.stringify(ordered)}`;
|
|
76
|
+
}
|