@intentius/chant 0.124.13 → 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.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.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.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.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.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.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 +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/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/lexicon-module.ts +3 -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/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/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 +1 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
/**
|
|
3
|
+
* EVL007: Invalid Siblings Access
|
|
4
|
+
*
|
|
5
|
+
* In a Composite factory, resource() callbacks receive a `siblings` parameter.
|
|
6
|
+
* Accessing siblings.key must reference a key that exists in the composite's
|
|
7
|
+
* resource map.
|
|
8
|
+
*/
|
|
9
|
+
function checkNode(node, context, diagnostics) {
|
|
10
|
+
// Look for Composite(...) calls
|
|
11
|
+
if (ts.isCallExpression(node) &&
|
|
12
|
+
ts.isIdentifier(node.expression) &&
|
|
13
|
+
node.expression.text === "Composite") {
|
|
14
|
+
// The factory function is the argument to Composite
|
|
15
|
+
const factoryArg = node.arguments[0];
|
|
16
|
+
if (factoryArg && (ts.isArrowFunction(factoryArg) || ts.isFunctionExpression(factoryArg))) {
|
|
17
|
+
checkCompositeFactory(factoryArg, context, diagnostics);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
ts.forEachChild(node, (child) => checkNode(child, context, diagnostics));
|
|
21
|
+
}
|
|
22
|
+
function checkCompositeFactory(factory, context, diagnostics) {
|
|
23
|
+
// The factory body should contain an object literal with resource() calls
|
|
24
|
+
// that define the composite members. Collect the keys.
|
|
25
|
+
const body = factory.body;
|
|
26
|
+
let memberKeys = null;
|
|
27
|
+
if (ts.isBlock(body)) {
|
|
28
|
+
// Look for return statement with object literal
|
|
29
|
+
for (const stmt of body.statements) {
|
|
30
|
+
if (ts.isReturnStatement(stmt) && stmt.expression && ts.isObjectLiteralExpression(stmt.expression)) {
|
|
31
|
+
memberKeys = collectObjectKeys(stmt.expression);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if (ts.isParenthesizedExpression(body) && ts.isObjectLiteralExpression(body.expression)) {
|
|
36
|
+
memberKeys = collectObjectKeys(body.expression);
|
|
37
|
+
}
|
|
38
|
+
else if (ts.isObjectLiteralExpression(body)) {
|
|
39
|
+
memberKeys = collectObjectKeys(body);
|
|
40
|
+
}
|
|
41
|
+
if (!memberKeys || memberKeys.size === 0)
|
|
42
|
+
return;
|
|
43
|
+
// Now find resource() calls within the factory and check siblings access
|
|
44
|
+
walkForResourceCalls(body, memberKeys, context, diagnostics);
|
|
45
|
+
}
|
|
46
|
+
function collectObjectKeys(obj) {
|
|
47
|
+
const keys = new Set();
|
|
48
|
+
for (const prop of obj.properties) {
|
|
49
|
+
if (ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) {
|
|
50
|
+
if (ts.isIdentifier(prop.name)) {
|
|
51
|
+
keys.add(prop.name.text);
|
|
52
|
+
}
|
|
53
|
+
else if (ts.isStringLiteral(prop.name)) {
|
|
54
|
+
keys.add(prop.name.text);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return keys;
|
|
59
|
+
}
|
|
60
|
+
function walkForResourceCalls(node, memberKeys, context, diagnostics) {
|
|
61
|
+
if (ts.isCallExpression(node) &&
|
|
62
|
+
ts.isIdentifier(node.expression) &&
|
|
63
|
+
node.expression.text === "resource") {
|
|
64
|
+
// resource(Type, (props, siblings) => ...)
|
|
65
|
+
const callback = node.arguments[1];
|
|
66
|
+
if (callback && (ts.isArrowFunction(callback) || ts.isFunctionExpression(callback))) {
|
|
67
|
+
const siblingsParam = callback.parameters[1];
|
|
68
|
+
if (siblingsParam && ts.isIdentifier(siblingsParam.name)) {
|
|
69
|
+
const siblingsName = siblingsParam.name.text;
|
|
70
|
+
checkSiblingsAccess(callback.body, siblingsName, memberKeys, context, diagnostics);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
ts.forEachChild(node, (child) => walkForResourceCalls(child, memberKeys, context, diagnostics));
|
|
75
|
+
}
|
|
76
|
+
function checkSiblingsAccess(node, siblingsName, memberKeys, context, diagnostics) {
|
|
77
|
+
if (ts.isPropertyAccessExpression(node)) {
|
|
78
|
+
if (ts.isIdentifier(node.expression) && node.expression.text === siblingsName) {
|
|
79
|
+
const accessedKey = node.name.text;
|
|
80
|
+
if (!memberKeys.has(accessedKey)) {
|
|
81
|
+
const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(node.getStart(context.sourceFile));
|
|
82
|
+
diagnostics.push({
|
|
83
|
+
file: context.filePath,
|
|
84
|
+
line: line + 1,
|
|
85
|
+
column: character + 1,
|
|
86
|
+
ruleId: "EVL007",
|
|
87
|
+
severity: "error",
|
|
88
|
+
message: `Invalid siblings access — "${accessedKey}" is not a member of this composite`,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
ts.forEachChild(node, (child) => checkSiblingsAccess(child, siblingsName, memberKeys, context, diagnostics));
|
|
94
|
+
}
|
|
95
|
+
export const evl007InvalidSiblingsRule = {
|
|
96
|
+
id: "EVL007",
|
|
97
|
+
severity: "error",
|
|
98
|
+
category: "correctness",
|
|
99
|
+
description: "Validates that siblings access in Composite factories references existing member keys",
|
|
100
|
+
check(context) {
|
|
101
|
+
const diagnostics = [];
|
|
102
|
+
checkNode(context.sourceFile, context, diagnostics);
|
|
103
|
+
return diagnostics;
|
|
104
|
+
},
|
|
105
|
+
};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
import { getCompositeFactory } from "./composite-scope.js";
|
|
3
|
+
/**
|
|
4
|
+
* EVL009: No extractable constants inside Composite factory
|
|
5
|
+
*
|
|
6
|
+
* Composite factories should only reference props, sibling members, and
|
|
7
|
+
* imported identifiers. Object literals and arrays-of-objects that don't
|
|
8
|
+
* reference any of these are extractable constants that belong in a
|
|
9
|
+
* separate file (e.g. defaults.ts).
|
|
10
|
+
*
|
|
11
|
+
* Triggers on: assumeRolePolicyDocument: { Version: "2012-10-17", Statement: [...] }
|
|
12
|
+
* Triggers on: managedPolicyArns: ["arn:aws:iam::aws:policy/..."]
|
|
13
|
+
* OK: assumeRolePolicyDocument: lambdaTrustPolicy (imported)
|
|
14
|
+
* OK: policies: props.policies
|
|
15
|
+
* OK: role: role.arn
|
|
16
|
+
* OK: action: "lambda:InvokeFunction" (simple string literal — not an object)
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Collect all imported identifiers from import declarations in the file.
|
|
20
|
+
*/
|
|
21
|
+
function collectImportedNames(sourceFile) {
|
|
22
|
+
const names = new Set();
|
|
23
|
+
for (const stmt of sourceFile.statements) {
|
|
24
|
+
if (!ts.isImportDeclaration(stmt) || !stmt.importClause)
|
|
25
|
+
continue;
|
|
26
|
+
// import foo from "..."
|
|
27
|
+
if (stmt.importClause.name) {
|
|
28
|
+
names.add(stmt.importClause.name.text);
|
|
29
|
+
}
|
|
30
|
+
const bindings = stmt.importClause.namedBindings;
|
|
31
|
+
if (!bindings)
|
|
32
|
+
continue;
|
|
33
|
+
if (ts.isNamespaceImport(bindings)) {
|
|
34
|
+
// import * as ns from "..."
|
|
35
|
+
names.add(bindings.name.text);
|
|
36
|
+
}
|
|
37
|
+
else if (ts.isNamedImports(bindings)) {
|
|
38
|
+
// import { a, b } from "..."
|
|
39
|
+
for (const spec of bindings.elements) {
|
|
40
|
+
names.add(spec.name.text);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return names;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check whether any leaf node in the subtree references:
|
|
48
|
+
* - The props parameter identifier
|
|
49
|
+
* - An imported identifier (direct import or namespace import)
|
|
50
|
+
* - A local variable declared in the composite factory body
|
|
51
|
+
*/
|
|
52
|
+
function referencesPropsOrMembers(node, propsName, localNames, importedNames) {
|
|
53
|
+
if (ts.isIdentifier(node)) {
|
|
54
|
+
// Direct props reference
|
|
55
|
+
if (node.text === propsName)
|
|
56
|
+
return true;
|
|
57
|
+
// Local variable reference (sibling member)
|
|
58
|
+
if (localNames.has(node.text))
|
|
59
|
+
return true;
|
|
60
|
+
// Imported identifier (direct or namespace)
|
|
61
|
+
if (importedNames.has(node.text))
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
let found = false;
|
|
65
|
+
ts.forEachChild(node, (child) => {
|
|
66
|
+
if (!found && referencesPropsOrMembers(child, propsName, localNames, importedNames)) {
|
|
67
|
+
found = true;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
return found;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if a value is an extractable constant:
|
|
74
|
+
* - Object literal (with any nesting)
|
|
75
|
+
* - Array literal containing object literals
|
|
76
|
+
* Simple primitives (string, number, boolean) are allowed inline.
|
|
77
|
+
*/
|
|
78
|
+
function isExtractableShape(node) {
|
|
79
|
+
if (ts.isObjectLiteralExpression(node))
|
|
80
|
+
return true;
|
|
81
|
+
if (ts.isArrayLiteralExpression(node)) {
|
|
82
|
+
return node.elements.some((el) => ts.isObjectLiteralExpression(el) || ts.isArrayLiteralExpression(el));
|
|
83
|
+
}
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
function checkComposite(call, context, diagnostics, importedNames) {
|
|
87
|
+
const factory = call.arguments[0];
|
|
88
|
+
if (!factory || (!ts.isArrowFunction(factory) && !ts.isFunctionExpression(factory)))
|
|
89
|
+
return;
|
|
90
|
+
// Get props parameter name
|
|
91
|
+
const propsParam = factory.parameters[0];
|
|
92
|
+
const propsName = propsParam && ts.isIdentifier(propsParam.name) ? propsParam.name.text : "";
|
|
93
|
+
// Collect local variable names declared in the factory body
|
|
94
|
+
const localNames = new Set();
|
|
95
|
+
const body = factory.body;
|
|
96
|
+
if (ts.isBlock(body)) {
|
|
97
|
+
for (const stmt of body.statements) {
|
|
98
|
+
if (ts.isVariableStatement(stmt)) {
|
|
99
|
+
for (const decl of stmt.declarationList.declarations) {
|
|
100
|
+
if (ts.isIdentifier(decl.name)) {
|
|
101
|
+
localNames.add(decl.name.text);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Walk all NewExpression nodes inside the factory body
|
|
108
|
+
checkForConstants(body, context, diagnostics, propsName, localNames, importedNames);
|
|
109
|
+
}
|
|
110
|
+
function checkForConstants(node, context, diagnostics, propsName, localNames, importedNames) {
|
|
111
|
+
if (ts.isNewExpression(node) && node.arguments && node.arguments.length > 0) {
|
|
112
|
+
const firstArg = node.arguments[0];
|
|
113
|
+
if (ts.isObjectLiteralExpression(firstArg)) {
|
|
114
|
+
for (const prop of firstArg.properties) {
|
|
115
|
+
if (!ts.isPropertyAssignment(prop))
|
|
116
|
+
continue;
|
|
117
|
+
const value = prop.initializer;
|
|
118
|
+
if (isExtractableShape(value) && !referencesPropsOrMembers(value, propsName, localNames, importedNames)) {
|
|
119
|
+
const propName = ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)
|
|
120
|
+
? (ts.isIdentifier(prop.name) ? prop.name.text : prop.name.text)
|
|
121
|
+
: "<computed>";
|
|
122
|
+
const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(value.getStart(context.sourceFile));
|
|
123
|
+
diagnostics.push({
|
|
124
|
+
file: context.filePath,
|
|
125
|
+
line: line + 1,
|
|
126
|
+
column: character + 1,
|
|
127
|
+
ruleId: "EVL009",
|
|
128
|
+
severity: "warning",
|
|
129
|
+
message: `Extractable constant in Composite factory property "${propName}" — move to a separate file and import directly`,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
ts.forEachChild(node, (child) => checkForConstants(child, context, diagnostics, propsName, localNames, importedNames));
|
|
136
|
+
}
|
|
137
|
+
function checkNode(node, context, diagnostics, importedNames) {
|
|
138
|
+
if (ts.isCallExpression(node)) {
|
|
139
|
+
const factory = getCompositeFactory(node);
|
|
140
|
+
if (factory) {
|
|
141
|
+
checkComposite(node, context, diagnostics, importedNames);
|
|
142
|
+
return; // Don't recurse further — checkComposite handles it
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
ts.forEachChild(node, (child) => checkNode(child, context, diagnostics, importedNames));
|
|
146
|
+
}
|
|
147
|
+
export const evl009CompositeNoConstantRule = {
|
|
148
|
+
id: "EVL009",
|
|
149
|
+
severity: "warning",
|
|
150
|
+
category: "style",
|
|
151
|
+
description: "Flags extractable constants inside Composite factories — move to a separate file",
|
|
152
|
+
check(context) {
|
|
153
|
+
const diagnostics = [];
|
|
154
|
+
const importedNames = collectImportedNames(context.sourceFile);
|
|
155
|
+
checkNode(context.sourceFile, context, diagnostics, importedNames);
|
|
156
|
+
return diagnostics;
|
|
157
|
+
},
|
|
158
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
import { isInsideCompositeFactory } from "./composite-scope.js";
|
|
3
|
+
/**
|
|
4
|
+
* EVL010: No data transformation inside Composite factory
|
|
5
|
+
*
|
|
6
|
+
* Composite factories should only compose resources from props, not transform data.
|
|
7
|
+
* Data transformation (map, filter, reduce, etc.) should happen before passing props.
|
|
8
|
+
*
|
|
9
|
+
* Triggers on: props.items.map(x => new Thing(x))
|
|
10
|
+
* Triggers on: props.list.filter(Boolean)
|
|
11
|
+
* Triggers on: Object.keys(props.env).reduce(...)
|
|
12
|
+
* OK: props.policies (pass-through)
|
|
13
|
+
* OK: [a, b] (array literal)
|
|
14
|
+
*/
|
|
15
|
+
const TRANSFORM_METHODS = new Set([
|
|
16
|
+
"map",
|
|
17
|
+
"filter",
|
|
18
|
+
"reduce",
|
|
19
|
+
"flatMap",
|
|
20
|
+
"forEach",
|
|
21
|
+
"find",
|
|
22
|
+
"some",
|
|
23
|
+
"every",
|
|
24
|
+
"sort",
|
|
25
|
+
"reverse",
|
|
26
|
+
"splice",
|
|
27
|
+
"slice",
|
|
28
|
+
"concat",
|
|
29
|
+
]);
|
|
30
|
+
function checkNode(node, context, diagnostics) {
|
|
31
|
+
if (ts.isCallExpression(node) &&
|
|
32
|
+
ts.isPropertyAccessExpression(node.expression) &&
|
|
33
|
+
isInsideCompositeFactory(node)) {
|
|
34
|
+
const methodName = node.expression.name.text;
|
|
35
|
+
if (TRANSFORM_METHODS.has(methodName)) {
|
|
36
|
+
const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(node.expression.name.getStart(context.sourceFile));
|
|
37
|
+
diagnostics.push({
|
|
38
|
+
file: context.filePath,
|
|
39
|
+
line: line + 1,
|
|
40
|
+
column: character + 1,
|
|
41
|
+
ruleId: "EVL010",
|
|
42
|
+
severity: "warning",
|
|
43
|
+
message: `Data transformation .${methodName}() inside Composite factory — transform data before passing it as props`,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
ts.forEachChild(node, (child) => checkNode(child, context, diagnostics));
|
|
48
|
+
}
|
|
49
|
+
export const evl010CompositeNoTransformRule = {
|
|
50
|
+
id: "EVL010",
|
|
51
|
+
severity: "warning",
|
|
52
|
+
category: "style",
|
|
53
|
+
description: "Flags data transformations (map, filter, reduce) inside Composite factories",
|
|
54
|
+
check(context) {
|
|
55
|
+
const diagnostics = [];
|
|
56
|
+
checkNode(context.sourceFile, context, diagnostics);
|
|
57
|
+
return diagnostics;
|
|
58
|
+
},
|
|
59
|
+
};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
/**
|
|
3
|
+
* EVL011: a symbolic reference inside a plain template literal
|
|
4
|
+
*
|
|
5
|
+
* `` `${bucket.arn}-suffix` `` cannot be evaluated to a string. A resource
|
|
6
|
+
* attribute stands for a value the build resolves later, so there is nothing
|
|
7
|
+
* to interpolate yet, and JavaScript's answer — `"[object Object]"` — is
|
|
8
|
+
* wrong on both of chant's paths.
|
|
9
|
+
*
|
|
10
|
+
* This rule is the friendly half of #2349. The unfriendly half already landed:
|
|
11
|
+
* `fold()` refuses the span with a located error and `AttrRef.toString` throws,
|
|
12
|
+
* so the program fails either way. What a rule adds is finding it at lint time
|
|
13
|
+
* with the remedy attached, rather than at build time with a stack.
|
|
14
|
+
*
|
|
15
|
+
* ## Why it is a heuristic, and why that is acceptable here
|
|
16
|
+
*
|
|
17
|
+
* Lint sees syntax, not values. `foo.bar` inside a template is a resource
|
|
18
|
+
* attribute only if `foo` is a resource, which is a fact `fold()` has and this
|
|
19
|
+
* rule does not — so the check is: a property access whose object is a
|
|
20
|
+
* plain identifier bound in this file by `new`. That is the shape #2349 was
|
|
21
|
+
* reported against and the shape a lexicon's own docs show.
|
|
22
|
+
*
|
|
23
|
+
* It therefore misses a reference reached some other way (through a parameter,
|
|
24
|
+
* an array, a helper's return) and does not flag an access on a plain object.
|
|
25
|
+
* Missing a case costs nothing, because `fold()` still refuses it; flagging a
|
|
26
|
+
* plain object would be a false positive on code that works, which is the
|
|
27
|
+
* error worth avoiding. This is the same asymmetry `../../fold/subset.ts`
|
|
28
|
+
* documents for EVL generally, pointed the other way: there EVL may be
|
|
29
|
+
* stricter than fold, here it is deliberately looser.
|
|
30
|
+
*/
|
|
31
|
+
/** Identifiers bound by `const x = new T(...)` at any depth in this file. */
|
|
32
|
+
function resourceBindings(sourceFile) {
|
|
33
|
+
const names = new Set();
|
|
34
|
+
const visit = (node) => {
|
|
35
|
+
if (ts.isVariableDeclaration(node) &&
|
|
36
|
+
ts.isIdentifier(node.name) &&
|
|
37
|
+
node.initializer &&
|
|
38
|
+
ts.isNewExpression(node.initializer)) {
|
|
39
|
+
names.add(node.name.text);
|
|
40
|
+
}
|
|
41
|
+
ts.forEachChild(node, visit);
|
|
42
|
+
};
|
|
43
|
+
visit(sourceFile);
|
|
44
|
+
return names;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* What this span is, if it is one of the shapes that has no string form — or
|
|
48
|
+
* `undefined` for an ordinary expression.
|
|
49
|
+
*
|
|
50
|
+
* The three kinds a syntactic rule can see, matching what `fold()` refuses
|
|
51
|
+
* (#2397): a resource attribute on an identifier bound by `new` in this file,
|
|
52
|
+
* a nested construction used as a value, and a composite `.step`.
|
|
53
|
+
*/
|
|
54
|
+
function symbolicSpan(expr, bound) {
|
|
55
|
+
if (ts.isNewExpression(expr)) {
|
|
56
|
+
const name = ts.isIdentifier(expr.expression) ? expr.expression.text : "…";
|
|
57
|
+
return `a nested \`new ${name}\``;
|
|
58
|
+
}
|
|
59
|
+
if (ts.isPropertyAccessExpression(expr)) {
|
|
60
|
+
// `Checkout({}).step` — a call's `.step`, whatever the callee is: the
|
|
61
|
+
// idiom is the shape, and a rule cannot know which callees are composites.
|
|
62
|
+
if (expr.name.text === "step" && ts.isCallExpression(expr.expression)) {
|
|
63
|
+
const callee = ts.isIdentifier(expr.expression.expression) ? expr.expression.expression.text : "…";
|
|
64
|
+
return `the composite step \`${callee}(…).step\``;
|
|
65
|
+
}
|
|
66
|
+
if (ts.isIdentifier(expr.expression) && bound.has(expr.expression.text)) {
|
|
67
|
+
return `\`${expr.expression.text}.${expr.name.text}\` is a resource attribute and`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
function checkNode(node, context, bound, diagnostics) {
|
|
73
|
+
// Untagged only: a tagged template is the documented remedy, and its
|
|
74
|
+
// interior handles envelopes.
|
|
75
|
+
if (ts.isTemplateExpression(node) && !ts.isTaggedTemplateExpression(node.parent)) {
|
|
76
|
+
for (const span of node.templateSpans) {
|
|
77
|
+
const expr = span.expression;
|
|
78
|
+
const what = symbolicSpan(expr, bound);
|
|
79
|
+
if (what) {
|
|
80
|
+
const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(expr.getStart(context.sourceFile));
|
|
81
|
+
diagnostics.push({
|
|
82
|
+
file: context.filePath,
|
|
83
|
+
line: line + 1,
|
|
84
|
+
column: character + 1,
|
|
85
|
+
ruleId: "EVL011",
|
|
86
|
+
severity: "error",
|
|
87
|
+
message: `${what} has no string form until the build resolves it — a plain template would ` +
|
|
88
|
+
"stringify it as \"[object Object]\". Use the lexicon's own intrinsic, whose interior " +
|
|
89
|
+
"handles these (`Sub`${…}`` for CloudFormation), or move it out of the template.",
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
ts.forEachChild(node, (child) => checkNode(child, context, bound, diagnostics));
|
|
95
|
+
}
|
|
96
|
+
export const evl011SymbolicInTemplateRule = {
|
|
97
|
+
id: "EVL011",
|
|
98
|
+
severity: "error",
|
|
99
|
+
category: "correctness",
|
|
100
|
+
description: "A resource attribute cannot be interpolated into a plain template literal",
|
|
101
|
+
check(context) {
|
|
102
|
+
const diagnostics = [];
|
|
103
|
+
checkNode(context.sourceFile, context, resourceBindings(context.sourceFile), diagnostics);
|
|
104
|
+
return diagnostics;
|
|
105
|
+
},
|
|
106
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
function isDeclarableClass(node, sourceFile) {
|
|
3
|
+
// Check if it's a class with Declarable interface implementation
|
|
4
|
+
if (ts.isClassDeclaration(node) && node.heritageClauses) {
|
|
5
|
+
for (const clause of node.heritageClauses) {
|
|
6
|
+
for (const type of clause.types) {
|
|
7
|
+
const typeName = type.expression.getText(sourceFile);
|
|
8
|
+
if (typeName === "Declarable") {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
function collectExportInfo(sourceFile) {
|
|
17
|
+
const exportedNames = new Set();
|
|
18
|
+
const localVariableNames = new Set();
|
|
19
|
+
function visit(node) {
|
|
20
|
+
// Handle exported variable declarations
|
|
21
|
+
if (ts.isVariableStatement(node)) {
|
|
22
|
+
const hasExportModifier = node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword);
|
|
23
|
+
for (const declaration of node.declarationList.declarations) {
|
|
24
|
+
if (ts.isIdentifier(declaration.name)) {
|
|
25
|
+
const name = declaration.name.text;
|
|
26
|
+
if (hasExportModifier) {
|
|
27
|
+
exportedNames.add(name);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
localVariableNames.add(name);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Handle export assignments: export = something
|
|
36
|
+
if (ts.isExportAssignment(node)) {
|
|
37
|
+
if (ts.isIdentifier(node.expression)) {
|
|
38
|
+
exportedNames.add(node.expression.text);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
ts.forEachChild(node, visit);
|
|
42
|
+
}
|
|
43
|
+
visit(sourceFile);
|
|
44
|
+
return { exportedNames, localVariableNames };
|
|
45
|
+
}
|
|
46
|
+
function isDeclarableNewExpression(node, context) {
|
|
47
|
+
// Check if the class being instantiated implements Declarable
|
|
48
|
+
// We look for the class declaration in the source file or imports
|
|
49
|
+
const className = node.expression.getText(context.sourceFile);
|
|
50
|
+
// Check local class declarations
|
|
51
|
+
let isDeclarable = false;
|
|
52
|
+
function checkClassDeclarations(n) {
|
|
53
|
+
if (ts.isClassDeclaration(n) && n.name?.text === className) {
|
|
54
|
+
if (isDeclarableClass(n, context.sourceFile)) {
|
|
55
|
+
isDeclarable = true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
ts.forEachChild(n, checkClassDeclarations);
|
|
59
|
+
}
|
|
60
|
+
checkClassDeclarations(context.sourceFile);
|
|
61
|
+
// For imported classes, we use a heuristic: check if the class name is capitalized
|
|
62
|
+
// and follows common declarable patterns (like Bucket, Parameter, etc.)
|
|
63
|
+
if (!isDeclarable && /^[A-Z]/.test(className)) {
|
|
64
|
+
// Additional check: see if it's imported from a declarable-looking module
|
|
65
|
+
// For now, we'll be conservative and only flag classes that are clearly local
|
|
66
|
+
return isDeclarable;
|
|
67
|
+
}
|
|
68
|
+
return isDeclarable;
|
|
69
|
+
}
|
|
70
|
+
function checkNode(node, context, exportInfo, diagnostics) {
|
|
71
|
+
// Check for new expressions that are not exported
|
|
72
|
+
if (ts.isNewExpression(node)) {
|
|
73
|
+
// Skip if this is part of a variable initializer that's exported
|
|
74
|
+
let parent = node.parent;
|
|
75
|
+
let isPartOfExportedVariable = false;
|
|
76
|
+
let variableName;
|
|
77
|
+
while (parent) {
|
|
78
|
+
if (ts.isVariableDeclaration(parent) && ts.isIdentifier(parent.name)) {
|
|
79
|
+
variableName = parent.name.text;
|
|
80
|
+
if (exportInfo.exportedNames.has(variableName)) {
|
|
81
|
+
isPartOfExportedVariable = true;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
parent = parent.parent;
|
|
86
|
+
}
|
|
87
|
+
if (!isPartOfExportedVariable && isDeclarableNewExpression(node, context)) {
|
|
88
|
+
const { line, character } = context.sourceFile.getLineAndCharacterOfPosition(node.getStart(context.sourceFile));
|
|
89
|
+
const className = node.expression.getText(context.sourceFile);
|
|
90
|
+
const label = variableName ? `'${variableName}' (${className})` : `'${className}'`;
|
|
91
|
+
diagnostics.push({
|
|
92
|
+
file: context.filePath,
|
|
93
|
+
line: line + 1,
|
|
94
|
+
column: character + 1,
|
|
95
|
+
ruleId: "COR008",
|
|
96
|
+
severity: "warning",
|
|
97
|
+
message: `Declarable ${label} is not exported — add 'export' so chant can discover it during synthesis.`,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Recursively check child nodes
|
|
102
|
+
ts.forEachChild(node, child => checkNode(child, context, exportInfo, diagnostics));
|
|
103
|
+
}
|
|
104
|
+
export const exportRequiredRule = {
|
|
105
|
+
id: "COR008",
|
|
106
|
+
severity: "warning",
|
|
107
|
+
category: "correctness",
|
|
108
|
+
description: "Detects declarable instances that are not exported for chant discovery",
|
|
109
|
+
check(context) {
|
|
110
|
+
const diagnostics = [];
|
|
111
|
+
const exportInfo = collectExportInfo(context.sourceFile);
|
|
112
|
+
checkNode(context.sourceFile, context, exportInfo, diagnostics);
|
|
113
|
+
return diagnostics;
|
|
114
|
+
},
|
|
115
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
import { isPropertyKindNew } from "./property-kind.js";
|
|
3
|
+
const DECLARABLE_LIMIT = 8;
|
|
4
|
+
const BUILTIN_CONSTRUCTORS = new Set([
|
|
5
|
+
"Array",
|
|
6
|
+
"ArrayBuffer",
|
|
7
|
+
"BigInt64Array",
|
|
8
|
+
"BigUint64Array",
|
|
9
|
+
"Boolean",
|
|
10
|
+
"DataView",
|
|
11
|
+
"Date",
|
|
12
|
+
"Error",
|
|
13
|
+
"EvalError",
|
|
14
|
+
"Float32Array",
|
|
15
|
+
"Float64Array",
|
|
16
|
+
"Int8Array",
|
|
17
|
+
"Int16Array",
|
|
18
|
+
"Int32Array",
|
|
19
|
+
"Map",
|
|
20
|
+
"Number",
|
|
21
|
+
"Object",
|
|
22
|
+
"Promise",
|
|
23
|
+
"Proxy",
|
|
24
|
+
"RangeError",
|
|
25
|
+
"ReferenceError",
|
|
26
|
+
"RegExp",
|
|
27
|
+
"Set",
|
|
28
|
+
"SharedArrayBuffer",
|
|
29
|
+
"String",
|
|
30
|
+
"SyntaxError",
|
|
31
|
+
"TypeError",
|
|
32
|
+
"URIError",
|
|
33
|
+
"URL",
|
|
34
|
+
"URLSearchParams",
|
|
35
|
+
"Uint8Array",
|
|
36
|
+
"Uint8ClampedArray",
|
|
37
|
+
"Uint16Array",
|
|
38
|
+
"Uint32Array",
|
|
39
|
+
"WeakMap",
|
|
40
|
+
"WeakRef",
|
|
41
|
+
"WeakSet",
|
|
42
|
+
]);
|
|
43
|
+
function isDeclarableConstructor(node) {
|
|
44
|
+
const expr = node.expression;
|
|
45
|
+
if (ts.isIdentifier(expr)) {
|
|
46
|
+
const name = expr.text;
|
|
47
|
+
return (name.length > 0 &&
|
|
48
|
+
name[0] >= "A" &&
|
|
49
|
+
name[0] <= "Z" &&
|
|
50
|
+
!BUILTIN_CONSTRUCTORS.has(name));
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Collect the declarable `new` expressions this rule counts. Property-kind
|
|
56
|
+
* declarables (chant #2957) are left out: a dashboard with twenty panels,
|
|
57
|
+
* queries and variables is one resource, not twenty-one.
|
|
58
|
+
*/
|
|
59
|
+
function collectDeclarableNewExpressions(node, context, results) {
|
|
60
|
+
if (ts.isNewExpression(node) && isDeclarableConstructor(node) && !isPropertyKindNew(node, context)) {
|
|
61
|
+
results.push(node);
|
|
62
|
+
}
|
|
63
|
+
ts.forEachChild(node, (child) => collectDeclarableNewExpressions(child, context, results));
|
|
64
|
+
}
|
|
65
|
+
export const fileDeclarableLimitRule = {
|
|
66
|
+
id: "COR009",
|
|
67
|
+
severity: "warning",
|
|
68
|
+
category: "style",
|
|
69
|
+
description: "Limits the number of resource Declarable instances per file to encourage splitting by concern; property-kind declarables are not counted",
|
|
70
|
+
check(context, options) {
|
|
71
|
+
const limit = (typeof options?.max === "number" ? options.max : null) ?? DECLARABLE_LIMIT;
|
|
72
|
+
const instances = [];
|
|
73
|
+
collectDeclarableNewExpressions(context.sourceFile, context, instances);
|
|
74
|
+
if (instances.length > limit) {
|
|
75
|
+
return [
|
|
76
|
+
{
|
|
77
|
+
file: context.filePath,
|
|
78
|
+
line: 1,
|
|
79
|
+
column: 1,
|
|
80
|
+
ruleId: "COR009",
|
|
81
|
+
severity: "warning",
|
|
82
|
+
message: `File contains ${instances.length} Declarable instances (limit: ${limit}) — consider splitting into separate files by concern`,
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
return [];
|
|
87
|
+
},
|
|
88
|
+
};
|