@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,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The installed CLI runs compiled JS with plain node (#3878). This packs core
|
|
3
|
+
* (its prepack builds dist/) and the render lexicon the way a release does,
|
|
4
|
+
* installs both into a scratch project with npm, and runs the package's own
|
|
5
|
+
* `bin/chant`.
|
|
6
|
+
*
|
|
7
|
+
* Each run is traced through a load hook that NODE_OPTIONS hands to the CLI's
|
|
8
|
+
* node, so the test can say what loaded: none of chant's TypeScript source,
|
|
9
|
+
* ever, and tsx only for a command that imports TypeScript (here the
|
|
10
|
+
* lexicon and the project source).
|
|
11
|
+
*
|
|
12
|
+
* End to end because it packs, installs from the registry and spawns the CLI.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { execFileSync, spawnSync } from "node:child_process";
|
|
16
|
+
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { tmpdir } from "node:os";
|
|
18
|
+
import { join, resolve } from "node:path";
|
|
19
|
+
import { afterAll, beforeAll, describe, expect, test } from "vitest";
|
|
20
|
+
|
|
21
|
+
const coreRoot = resolve(import.meta.dirname, "..", "..");
|
|
22
|
+
const renderRoot = resolve(coreRoot, "..", "..", "lexicons", "render");
|
|
23
|
+
const version = (JSON.parse(readFileSync(join(coreRoot, "package.json"), "utf-8")) as { version: string }).version;
|
|
24
|
+
|
|
25
|
+
let scratch: string;
|
|
26
|
+
let project: string;
|
|
27
|
+
let waves: string;
|
|
28
|
+
let chant: string;
|
|
29
|
+
let tracer: string;
|
|
30
|
+
|
|
31
|
+
const TRACER = `
|
|
32
|
+
import { registerHooks } from "node:module";
|
|
33
|
+
import { appendFileSync } from "node:fs";
|
|
34
|
+
const out = process.env.CHANT_TRACE_OUT;
|
|
35
|
+
const seen = { chantSrc: 0, chantDist: 0, tsx: 0 };
|
|
36
|
+
registerHooks({
|
|
37
|
+
load(url, context, next) {
|
|
38
|
+
if (url.includes("/@intentius/chant/src/")) seen.chantSrc++;
|
|
39
|
+
else if (url.includes("/@intentius/chant/dist/")) seen.chantDist++;
|
|
40
|
+
else if (url.includes("/node_modules/tsx/")) seen.tsx++;
|
|
41
|
+
return next(url, context);
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
process.on("exit", () => { if (out) appendFileSync(out, JSON.stringify(seen) + "\\n"); });
|
|
45
|
+
`;
|
|
46
|
+
|
|
47
|
+
function pack(dir: string, ignoreScripts = false): string {
|
|
48
|
+
const args = ["pack", "--json", "--pack-destination", scratch, ...(ignoreScripts ? ["--ignore-scripts"] : [])];
|
|
49
|
+
const packed = JSON.parse(execFileSync("npm", args, { cwd: dir, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] })) as { filename: string }[];
|
|
50
|
+
return join(scratch, packed[0].filename);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
interface Run {
|
|
54
|
+
status: number | null;
|
|
55
|
+
stdout: string;
|
|
56
|
+
stderr: string;
|
|
57
|
+
loaded: { chantSrc: number; chantDist: number; tsx: number };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function run(cwd: string, args: string[]): Run {
|
|
61
|
+
const traceOut = join(scratch, `trace-${Math.random().toString(36).slice(2)}.jsonl`);
|
|
62
|
+
const env: NodeJS.ProcessEnv = { ...process.env, NODE_OPTIONS: `--import ${tracer}`, CHANT_TRACE_OUT: traceOut };
|
|
63
|
+
delete env.CHANT_ENV;
|
|
64
|
+
const result = spawnSync(chant, args, { cwd, env, encoding: "utf-8" });
|
|
65
|
+
const lines = readFileSync(traceOut, "utf-8").trim().split("\n");
|
|
66
|
+
return { status: result.status, stdout: result.stdout, stderr: result.stderr, loaded: JSON.parse(lines[0]!) as Run["loaded"] };
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
beforeAll(() => {
|
|
70
|
+
scratch = mkdtempSync(join(tmpdir(), "chant-compiled-cli-"));
|
|
71
|
+
tracer = join(scratch, "trace.mjs");
|
|
72
|
+
writeFileSync(tracer, TRACER);
|
|
73
|
+
const core = pack(coreRoot);
|
|
74
|
+
// The lexicon's prepack regenerates it from upstream specs; the checkout's
|
|
75
|
+
// generated source and dist are what this test needs, so pack them as they are.
|
|
76
|
+
const render = pack(renderRoot, true);
|
|
77
|
+
|
|
78
|
+
project = join(scratch, "project");
|
|
79
|
+
mkdirSync(join(project, "src"), { recursive: true });
|
|
80
|
+
writeFileSync(join(project, "package.json"), JSON.stringify({ name: "compiled-cli-e2e", private: true, type: "module" }));
|
|
81
|
+
execFileSync("npm", ["install", "--no-audit", "--no-fund", "--prefer-offline", core, render], { cwd: project, stdio: "ignore" });
|
|
82
|
+
writeFileSync(join(project, "chant.config.ts"), `import type { ChantConfig } from "@intentius/chant";\nexport default { lexicons: ["render"] } satisfies ChantConfig;\n`);
|
|
83
|
+
writeFileSync(
|
|
84
|
+
join(project, "src", "infra.ts"),
|
|
85
|
+
`import { Postgres, Render } from "@intentius/chant-lexicon-render";\n` +
|
|
86
|
+
`export const db = new Postgres({ name: "e2e-db", plan: "free", version: "16", region: Render.Region });\n`,
|
|
87
|
+
);
|
|
88
|
+
chant = join(project, "node_modules", ".bin", "chant");
|
|
89
|
+
|
|
90
|
+
// A waves spec whose plan writes a fixed digest and whose apply does nothing,
|
|
91
|
+
// in a repository with the history `run wave` reads its gate policy from.
|
|
92
|
+
waves = join(scratch, "waves");
|
|
93
|
+
mkdirSync(waves);
|
|
94
|
+
writeFileSync(join(waves, "plan.mjs"), `import { writeFileSync } from "node:fs";\nwriteFileSync(process.argv[3], JSON.stringify({ planDigest: "sha256:" + "a".repeat(64) }));\n`);
|
|
95
|
+
writeFileSync(
|
|
96
|
+
join(waves, "waves.json"),
|
|
97
|
+
JSON.stringify({
|
|
98
|
+
name: "smoke",
|
|
99
|
+
op: "smoke",
|
|
100
|
+
plan: ["node", "plan.mjs", "{target}", "{plan}"],
|
|
101
|
+
apply: ["node", "-e", "0", "{target}", "{plan}"],
|
|
102
|
+
waves: [{ name: "dev", runs: [{ target: "dev" }], gate: "never" }],
|
|
103
|
+
}),
|
|
104
|
+
);
|
|
105
|
+
const git = (...args: string[]) => execFileSync("git", ["-c", "user.email=e2e@chant", "-c", "user.name=e2e", ...args], { cwd: waves, stdio: "ignore" });
|
|
106
|
+
git("init", "-q", "-b", "main");
|
|
107
|
+
git("add", "-A");
|
|
108
|
+
git("commit", "-qm", "spec");
|
|
109
|
+
writeFileSync(join(waves, ".gitignore"), ".chant/\n");
|
|
110
|
+
git("add", "-A");
|
|
111
|
+
git("commit", "-qm", "ignore");
|
|
112
|
+
}, 600_000);
|
|
113
|
+
|
|
114
|
+
afterAll(() => {
|
|
115
|
+
if (scratch) rmSync(scratch, { recursive: true, force: true });
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
describe("the installed chant CLI (#3878)", () => {
|
|
119
|
+
test("--version runs compiled JS and loads no TypeScript loader", () => {
|
|
120
|
+
const r = run(project, ["--version"]);
|
|
121
|
+
expect(r.status, r.stderr).toBe(0);
|
|
122
|
+
expect(r.stdout.trim()).toBe(version);
|
|
123
|
+
expect(r.loaded.chantDist).toBeGreaterThan(0);
|
|
124
|
+
expect(r.loaded).toMatchObject({ chantSrc: 0, tsx: 0 });
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test("run wave plans and applies a wave without loading tsx", () => {
|
|
128
|
+
const r = run(waves, ["run", "wave", "--spec", "waves.json", "--wave", "1", "--json"]);
|
|
129
|
+
expect(r.status, r.stderr).toBe(0);
|
|
130
|
+
expect(JSON.parse(r.stdout)).toMatchObject({ exitCode: 0 });
|
|
131
|
+
expect(r.loaded).toMatchObject({ chantSrc: 0, tsx: 0 });
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test("build loads the TypeScript lexicon and project through tsx, against the one compiled core", () => {
|
|
135
|
+
const r = run(project, ["build", "src", "-o", "out/render.json"]);
|
|
136
|
+
expect(r.status, r.stderr).toBe(0);
|
|
137
|
+
const built = JSON.parse(readFileSync(join(project, "out", "render.json"), "utf-8")) as Record<string, { body?: { name?: string } }>;
|
|
138
|
+
expect(built.db?.body?.name).toBe("e2e-db");
|
|
139
|
+
expect(r.loaded.tsx).toBeGreaterThan(0);
|
|
140
|
+
expect(r.loaded.chantSrc).toBe(0);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
test("lint passes on the project", () => {
|
|
144
|
+
const r = run(project, ["lint", "src"]);
|
|
145
|
+
expect(r.status, r.stdout + r.stderr).toBe(0);
|
|
146
|
+
expect(r.loaded.chantSrc).toBe(0);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test("build --sandbox bundles chant's source for the sandboxed child", () => {
|
|
150
|
+
writeFileSync(
|
|
151
|
+
join(project, "src", "made.ts"),
|
|
152
|
+
`import { Postgres, Render } from "@intentius/chant-lexicon-render";\n` +
|
|
153
|
+
`function make(name: string) { const n = [1, 2].map((i) => i * 2).length; return new Postgres({ name: name + n, plan: "free", version: "16", region: Render.Region }); }\n` +
|
|
154
|
+
`export const made = make("made");\n`,
|
|
155
|
+
);
|
|
156
|
+
try {
|
|
157
|
+
const r = run(project, ["build", "src", "--sandbox", "-o", "out/sandbox.json"]);
|
|
158
|
+
expect(r.status, r.stderr).toBe(0);
|
|
159
|
+
const built = JSON.parse(readFileSync(join(project, "out", "sandbox.json"), "utf-8")) as Record<string, { body?: { name?: string } }>;
|
|
160
|
+
expect(built.made?.body?.name).toBe("made2");
|
|
161
|
+
} finally {
|
|
162
|
+
rmSync(join(project, "src", "made.ts"));
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
});
|
package/src/cli/main.ts
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
4
|
import { isEntryPoint } from "./is-entry-point";
|
|
5
5
|
import { formatSuccess, formatError } from "./format";
|
|
6
|
-
import { loadPlugins, resolveProjectLexicons } from "./plugins";
|
|
7
6
|
import { resolveCommand, type CommandDef, type ParsedArgs } from "./registry";
|
|
8
7
|
import { loadChantConfigUpward } from "../config";
|
|
9
8
|
import { findProjectRoot, findWorkspaceRoot } from "../project-root";
|
|
@@ -14,34 +13,118 @@ import { armSandboxConfigEvaluation } from "../config-sandbox";
|
|
|
14
13
|
import { armSandboxPolicyExecution } from "../lint/policy-import";
|
|
15
14
|
import { ENV_VAR, unknownEnvError } from "../env";
|
|
16
15
|
import { initRuntime } from "../runtime-adapter";
|
|
17
|
-
import {
|
|
18
|
-
import { runLint } from "./handlers/lint";
|
|
19
|
-
import { runDevGenerate, runDevPublish, runDevOnboard, runDevCheckLexicon, runDevSurfaceDiff, runDevPinnedUpgrade, runDevRollingUpgrade, runDevUnknown } from "./handlers/dev";
|
|
20
|
-
import { runServeLsp, runServeMcp, runServeUnknown } from "./handlers/serve";
|
|
21
|
-
import { runInit, runInitLexicon } from "./handlers/init";
|
|
22
|
-
import { runList, runDescribe, runImport, runAudit, runUpdate, runDoctor } from "./handlers/misc";
|
|
23
|
-
import { runVendor } from "./handlers/vendor";
|
|
24
|
-
import { runMigrate } from "./handlers/migrate";
|
|
25
|
-
import { runCarveAdvise, runCarveUnknown } from "./handlers/carve";
|
|
26
|
-
import { runCarveEmit } from "./handlers/carve-emit";
|
|
27
|
-
import { runCarveBridge } from "./handlers/carve-bridge";
|
|
28
|
-
import { runCarveApply } from "./handlers/carve-apply";
|
|
29
|
-
import { runCarveStatus } from "./handlers/carve-status";
|
|
30
|
-
import { runLifecycleSnapshot, runLifecycleShow, runLifecycleDiff, runLifecycleRollback, runLifecyclePlan, runLifecycleAffected, runLifecycleLog, runLifecycleTeardown, runLifecycleWhoami, runLifecycleUnknown } from "./handlers/lifecycle";
|
|
31
|
-
import { runComponentsStatus, runComponentsReleaseRecord, runComponentsExport, runComponentsUnknown } from "./handlers/components";
|
|
32
|
-
import { runComponentsFanOut } from "./handlers/fan-out";
|
|
33
|
-
import { runComponentsPromote, runComponentsRollback, runComponentsRedeploy } from "./handlers/promote";
|
|
34
|
-
import { runScenarioCheck, runScenarioUnknown } from "./handlers/scenario";
|
|
35
|
-
import { runGraph } from "./handlers/graph";
|
|
36
|
-
import { runExplain } from "./handlers/explain";
|
|
37
|
-
import { runSearch } from "./handlers/search";
|
|
38
|
-
import { runOp, runOpList, runOpStatus, runOpApprove, runOpSignalRenamed, runOpCancel, runOpLog } from "./handlers/run";
|
|
39
|
-
import { runOpWaveCommand } from "./handlers/run-wave";
|
|
40
|
-
import { runOperator, runOperatorStatus, runOperatorLog, runApprove } from "./handlers/operator";
|
|
41
|
-
import { runEmulator, formatEmulatorHelp } from "./handlers/emulator";
|
|
16
|
+
import { installCompiledCli } from "../ts-loader";
|
|
42
17
|
import { splitJoinedFlags, dispatchCommandGroup, collectCommandGroups, formatCommandGroupsHelp, type CommandGroup } from "./command-group";
|
|
43
18
|
import type { LexiconPlugin } from "../lexicon";
|
|
44
19
|
|
|
20
|
+
/**
|
|
21
|
+
* #3878 — each command's handler module loads when that command runs, not on
|
|
22
|
+
* every start: together they pull in most of chant (the TypeScript compiler
|
|
23
|
+
* among it), and `chant --version` or `chant run wave` need almost none of it.
|
|
24
|
+
*/
|
|
25
|
+
type Handler = CommandDef["handler"];
|
|
26
|
+
const handlerModules = new Map<Handler, () => Promise<unknown>>();
|
|
27
|
+
function lazyHandler<M>(load: () => Promise<M>, pick: (module: M) => Handler): Handler {
|
|
28
|
+
const handler: Handler = async (ctx) => pick(await load())(ctx);
|
|
29
|
+
handlerModules.set(handler, load);
|
|
30
|
+
return handler;
|
|
31
|
+
}
|
|
32
|
+
const buildHandlers = () => import("./handlers/build");
|
|
33
|
+
const runBuild = lazyHandler(buildHandlers, (m) => m.runBuild);
|
|
34
|
+
const lintHandlers = () => import("./handlers/lint");
|
|
35
|
+
const runLint = lazyHandler(lintHandlers, (m) => m.runLint);
|
|
36
|
+
const devHandlers = () => import("./handlers/dev");
|
|
37
|
+
const runDevGenerate = lazyHandler(devHandlers, (m) => m.runDevGenerate);
|
|
38
|
+
const runDevPublish = lazyHandler(devHandlers, (m) => m.runDevPublish);
|
|
39
|
+
const runDevOnboard = lazyHandler(devHandlers, (m) => m.runDevOnboard);
|
|
40
|
+
const runDevCheckLexicon = lazyHandler(devHandlers, (m) => m.runDevCheckLexicon);
|
|
41
|
+
const runDevSurfaceDiff = lazyHandler(devHandlers, (m) => m.runDevSurfaceDiff);
|
|
42
|
+
const runDevPinnedUpgrade = lazyHandler(devHandlers, (m) => m.runDevPinnedUpgrade);
|
|
43
|
+
const runDevRollingUpgrade = lazyHandler(devHandlers, (m) => m.runDevRollingUpgrade);
|
|
44
|
+
const runDevUnknown = lazyHandler(devHandlers, (m) => m.runDevUnknown);
|
|
45
|
+
const serveHandlers = () => import("./handlers/serve");
|
|
46
|
+
const runServeLsp = lazyHandler(serveHandlers, (m) => m.runServeLsp);
|
|
47
|
+
const runServeMcp = lazyHandler(serveHandlers, (m) => m.runServeMcp);
|
|
48
|
+
const runServeUnknown = lazyHandler(serveHandlers, (m) => m.runServeUnknown);
|
|
49
|
+
const initHandlers = () => import("./handlers/init");
|
|
50
|
+
const runInit = lazyHandler(initHandlers, (m) => m.runInit);
|
|
51
|
+
const runInitLexicon = lazyHandler(initHandlers, (m) => m.runInitLexicon);
|
|
52
|
+
const miscHandlers = () => import("./handlers/misc");
|
|
53
|
+
const runList = lazyHandler(miscHandlers, (m) => m.runList);
|
|
54
|
+
const runDescribe = lazyHandler(miscHandlers, (m) => m.runDescribe);
|
|
55
|
+
const runImport = lazyHandler(miscHandlers, (m) => m.runImport);
|
|
56
|
+
const runAudit = lazyHandler(miscHandlers, (m) => m.runAudit);
|
|
57
|
+
const runUpdate = lazyHandler(miscHandlers, (m) => m.runUpdate);
|
|
58
|
+
const runDoctor = lazyHandler(miscHandlers, (m) => m.runDoctor);
|
|
59
|
+
const vendorHandlers = () => import("./handlers/vendor");
|
|
60
|
+
const runVendor = lazyHandler(vendorHandlers, (m) => m.runVendor);
|
|
61
|
+
const migrateHandlers = () => import("./handlers/migrate");
|
|
62
|
+
const runMigrate = lazyHandler(migrateHandlers, (m) => m.runMigrate);
|
|
63
|
+
const carveHandlers = () => import("./handlers/carve");
|
|
64
|
+
const runCarveAdvise = lazyHandler(carveHandlers, (m) => m.runCarveAdvise);
|
|
65
|
+
const runCarveUnknown = lazyHandler(carveHandlers, (m) => m.runCarveUnknown);
|
|
66
|
+
const carveEmitHandlers = () => import("./handlers/carve-emit");
|
|
67
|
+
const runCarveEmit = lazyHandler(carveEmitHandlers, (m) => m.runCarveEmit);
|
|
68
|
+
const carveBridgeHandlers = () => import("./handlers/carve-bridge");
|
|
69
|
+
const runCarveBridge = lazyHandler(carveBridgeHandlers, (m) => m.runCarveBridge);
|
|
70
|
+
const carveApplyHandlers = () => import("./handlers/carve-apply");
|
|
71
|
+
const runCarveApply = lazyHandler(carveApplyHandlers, (m) => m.runCarveApply);
|
|
72
|
+
const carveStatusHandlers = () => import("./handlers/carve-status");
|
|
73
|
+
const runCarveStatus = lazyHandler(carveStatusHandlers, (m) => m.runCarveStatus);
|
|
74
|
+
const lifecycleHandlers = () => import("./handlers/lifecycle");
|
|
75
|
+
const runLifecycleSnapshot = lazyHandler(lifecycleHandlers, (m) => m.runLifecycleSnapshot);
|
|
76
|
+
const runLifecycleShow = lazyHandler(lifecycleHandlers, (m) => m.runLifecycleShow);
|
|
77
|
+
const runLifecycleDiff = lazyHandler(lifecycleHandlers, (m) => m.runLifecycleDiff);
|
|
78
|
+
const runLifecycleRollback = lazyHandler(lifecycleHandlers, (m) => m.runLifecycleRollback);
|
|
79
|
+
const runLifecyclePlan = lazyHandler(lifecycleHandlers, (m) => m.runLifecyclePlan);
|
|
80
|
+
const runLifecycleAffected = lazyHandler(lifecycleHandlers, (m) => m.runLifecycleAffected);
|
|
81
|
+
const runLifecycleLog = lazyHandler(lifecycleHandlers, (m) => m.runLifecycleLog);
|
|
82
|
+
const runLifecycleTeardown = lazyHandler(lifecycleHandlers, (m) => m.runLifecycleTeardown);
|
|
83
|
+
const runLifecycleWhoami = lazyHandler(lifecycleHandlers, (m) => m.runLifecycleWhoami);
|
|
84
|
+
const runLifecycleUnknown = lazyHandler(lifecycleHandlers, (m) => m.runLifecycleUnknown);
|
|
85
|
+
const componentsHandlers = () => import("./handlers/components");
|
|
86
|
+
const runComponentsStatus = lazyHandler(componentsHandlers, (m) => m.runComponentsStatus);
|
|
87
|
+
const runComponentsReleaseRecord = lazyHandler(componentsHandlers, (m) => m.runComponentsReleaseRecord);
|
|
88
|
+
const runComponentsExport = lazyHandler(componentsHandlers, (m) => m.runComponentsExport);
|
|
89
|
+
const runComponentsUnknown = lazyHandler(componentsHandlers, (m) => m.runComponentsUnknown);
|
|
90
|
+
const fanOutHandlers = () => import("./handlers/fan-out");
|
|
91
|
+
const runComponentsFanOut = lazyHandler(fanOutHandlers, (m) => m.runComponentsFanOut);
|
|
92
|
+
const promoteHandlers = () => import("./handlers/promote");
|
|
93
|
+
const runComponentsPromote = lazyHandler(promoteHandlers, (m) => m.runComponentsPromote);
|
|
94
|
+
const runComponentsRollback = lazyHandler(promoteHandlers, (m) => m.runComponentsRollback);
|
|
95
|
+
const runComponentsRedeploy = lazyHandler(promoteHandlers, (m) => m.runComponentsRedeploy);
|
|
96
|
+
const scenarioHandlers = () => import("./handlers/scenario");
|
|
97
|
+
const runScenarioCheck = lazyHandler(scenarioHandlers, (m) => m.runScenarioCheck);
|
|
98
|
+
const runScenarioUnknown = lazyHandler(scenarioHandlers, (m) => m.runScenarioUnknown);
|
|
99
|
+
const graphHandlers = () => import("./handlers/graph");
|
|
100
|
+
const runGraph = lazyHandler(graphHandlers, (m) => m.runGraph);
|
|
101
|
+
const explainHandlers = () => import("./handlers/explain");
|
|
102
|
+
const runExplain = lazyHandler(explainHandlers, (m) => m.runExplain);
|
|
103
|
+
const searchHandlers = () => import("./handlers/search");
|
|
104
|
+
const runSearch = lazyHandler(searchHandlers, (m) => m.runSearch);
|
|
105
|
+
const runHandlers = () => import("./handlers/run");
|
|
106
|
+
const runOp = lazyHandler(runHandlers, (m) => m.runOp);
|
|
107
|
+
const runOpList = lazyHandler(runHandlers, (m) => m.runOpList);
|
|
108
|
+
const runOpStatus = lazyHandler(runHandlers, (m) => m.runOpStatus);
|
|
109
|
+
const runOpApprove = lazyHandler(runHandlers, (m) => m.runOpApprove);
|
|
110
|
+
const runOpSignalRenamed = lazyHandler(runHandlers, (m) => m.runOpSignalRenamed);
|
|
111
|
+
const runOpCancel = lazyHandler(runHandlers, (m) => m.runOpCancel);
|
|
112
|
+
const runOpLog = lazyHandler(runHandlers, (m) => m.runOpLog);
|
|
113
|
+
const runWaveHandlers = () => import("./handlers/run-wave");
|
|
114
|
+
const runOpWaveCommand = lazyHandler(runWaveHandlers, (m) => m.runOpWaveCommand);
|
|
115
|
+
const operatorHandlers = () => import("./handlers/operator");
|
|
116
|
+
const runOperator = lazyHandler(operatorHandlers, (m) => m.runOperator);
|
|
117
|
+
const runOperatorStatus = lazyHandler(operatorHandlers, (m) => m.runOperatorStatus);
|
|
118
|
+
const runOperatorLog = lazyHandler(operatorHandlers, (m) => m.runOperatorLog);
|
|
119
|
+
const runApprove = lazyHandler(operatorHandlers, (m) => m.runApprove);
|
|
120
|
+
const emulatorHandlers = () => import("./handlers/emulator");
|
|
121
|
+
const runEmulator = lazyHandler(emulatorHandlers, (m) => m.runEmulator);
|
|
122
|
+
|
|
123
|
+
/** The lexicon plugin loader, which imports the lint, fold and build machinery: loaded when a command needs plugins (#3878). */
|
|
124
|
+
const loadPlugins: typeof import("./plugins").loadPlugins = async (...a) => (await import("./plugins")).loadPlugins(...a);
|
|
125
|
+
const resolveProjectLexicons: typeof import("./plugins").resolveProjectLexicons = async (...a) =>
|
|
126
|
+
(await import("./plugins")).resolveProjectLexicons(...a);
|
|
127
|
+
|
|
45
128
|
/**
|
|
46
129
|
* Long-form flags that are pure booleans in {@link parseArgs} — their branch
|
|
47
130
|
* below sets a field to `true` and never consumes a following array element.
|
|
@@ -2002,6 +2085,9 @@ export const commandRegistry: CommandDef[] = [
|
|
|
2002
2085
|
* Main entry point
|
|
2003
2086
|
*/
|
|
2004
2087
|
async function main(): Promise<void> {
|
|
2088
|
+
// #3878 — run from dist/ with plain node, TypeScript loads only when
|
|
2089
|
+
// something imports it. A no-op from source.
|
|
2090
|
+
installCompiledCli();
|
|
2005
2091
|
const rawArgv = process.argv.slice(2);
|
|
2006
2092
|
|
|
2007
2093
|
let args: ParsedArgs;
|
|
@@ -2035,7 +2121,7 @@ async function main(): Promise<void> {
|
|
|
2035
2121
|
// ports and sign-in each configured lexicon's emulator uses, not the
|
|
2036
2122
|
// global command list it used to print.
|
|
2037
2123
|
if (args.help && args.command === "emulator") {
|
|
2038
|
-
console.log(formatEmulatorHelp(await loadPluginsBestEffort().catch(() => [])));
|
|
2124
|
+
console.log((await emulatorHandlers()).formatEmulatorHelp(await loadPluginsBestEffort().catch(() => [])));
|
|
2039
2125
|
await flushAndExit(0);
|
|
2040
2126
|
return;
|
|
2041
2127
|
}
|
|
@@ -2080,6 +2166,14 @@ async function main(): Promise<void> {
|
|
|
2080
2166
|
// command gets no `--env` check against the declared environments either.
|
|
2081
2167
|
const earlyMatch = resolveCommand(args, commandRegistry);
|
|
2082
2168
|
const runsNoConfig = earlyMatch != null && commandRunsNoConfig(earlyMatch.def, args);
|
|
2169
|
+
// #3878 — load the command's own modules (and the plugin loader, when it
|
|
2170
|
+
// needs plugins) before anything imports TypeScript: once a chant.config.ts
|
|
2171
|
+
// has registered tsx, every module after it is resolved and loaded through
|
|
2172
|
+
// tsx's hooks, which costs far more than plain node.
|
|
2173
|
+
await Promise.all([
|
|
2174
|
+
earlyMatch ? handlerModules.get(earlyMatch.def.handler)?.() : undefined,
|
|
2175
|
+
earlyMatch?.def.requiresPlugins ? import("./plugins") : undefined,
|
|
2176
|
+
]);
|
|
2083
2177
|
const projectPath0 = resolve(args.path === "." ? "." : args.path);
|
|
2084
2178
|
let loadedConfig;
|
|
2085
2179
|
try {
|
|
@@ -51,7 +51,7 @@ const AGENT_ENV = "CHANT_AGENT";
|
|
|
51
51
|
export type ChantCommand = string[];
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
|
-
* The chant this process runs as: node with the same flags (the tsx loader
|
|
54
|
+
* The chant this process runs as: node with the same flags (from source, the tsx loader
|
|
55
55
|
* `bin/chant` registers) and the same entry script.
|
|
56
56
|
*/
|
|
57
57
|
export function ownChantCommand(): ChantCommand {
|
|
@@ -29,6 +29,7 @@ import { regenLexicon, type RegenResult } from "./lexicon-regen";
|
|
|
29
29
|
import { fetchWithRetry } from "./fetch";
|
|
30
30
|
import { isLexiconPlugin, type UpstreamPin } from "../lexicon";
|
|
31
31
|
import { importLexiconPackage } from "../lexicon-module";
|
|
32
|
+
import { ensureTypeScriptLoader } from "../ts-loader";
|
|
32
33
|
|
|
33
34
|
// ── Public types ──────────────────────────────────────────────────────
|
|
34
35
|
|
|
@@ -251,6 +252,7 @@ export async function loadUpstreamPins(lexicon: LexiconId, lexiconDir?: string):
|
|
|
251
252
|
const entry = lexiconDir ? lexiconEntry(lexiconDir) : null;
|
|
252
253
|
if (entry) {
|
|
253
254
|
try {
|
|
255
|
+
ensureTypeScriptLoader();
|
|
254
256
|
const pins = pinsOf((await import(pathToFileURL(entry).href)) as Record<string, unknown>);
|
|
255
257
|
if (pins.length > 0) return pins;
|
|
256
258
|
} catch {
|
|
@@ -50,6 +50,7 @@ import { setBuildParams } from "../params";
|
|
|
50
50
|
import { hasDiscoveryMarkerSync } from "../discovery/files";
|
|
51
51
|
import { resolveDiscoveryGlobs } from "../config";
|
|
52
52
|
import { walkDiscovery, workspaceMemberDirs } from "../discovery/walk";
|
|
53
|
+
import { ensureTypeScriptLoader } from "../ts-loader";
|
|
53
54
|
|
|
54
55
|
/** One discovered component, paired with the file it was exported from. */
|
|
55
56
|
export interface DiscoveredComponent {
|
|
@@ -212,6 +213,7 @@ async function importAndCollectComponents(
|
|
|
212
213
|
// `filePath` (e.g. from `chant build --components --generate`, which passes
|
|
213
214
|
// a bare "." path) would otherwise be treated by `import()` as a bare
|
|
214
215
|
// package specifier and fail with "Cannot find package 'x.component.ts'".
|
|
216
|
+
ensureTypeScriptLoader();
|
|
215
217
|
const exports = await import(pathToFileURL(resolve(filePath)).href);
|
|
216
218
|
modules.push({ file: filePath, exports });
|
|
217
219
|
} catch (err) {
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
import type { ForgeKind } from "../pr-forge";
|
|
40
40
|
import { PR_APPLY_GATE } from "../pr-loop";
|
|
41
|
+
import { CI_IMAGE, GITHUB_JOB_TOKEN } from "../ci-jobs";
|
|
41
42
|
|
|
42
43
|
/** Where both jobs write their reports, kept as a CI artifact. */
|
|
43
44
|
export const PR_LOOP_REPORT_DIR = ".chant/pr";
|
|
@@ -55,7 +56,7 @@ export const PR_APPLY_RECORD = ".chant/pr-resume/pr-apply.json";
|
|
|
55
56
|
* `PR_LOOP_SETUP` adds OpenTofu on top of it. A caller who sets `image`
|
|
56
57
|
* brings both and gets no setup lines.
|
|
57
58
|
*/
|
|
58
|
-
export const PR_LOOP_IMAGE =
|
|
59
|
+
export const PR_LOOP_IMAGE = CI_IMAGE;
|
|
59
60
|
|
|
60
61
|
/** Installs OpenTofu into `PR_LOOP_IMAGE`. */
|
|
61
62
|
export const PR_LOOP_SETUP = [
|
|
@@ -113,7 +114,7 @@ export function prLoopJobs(forge: ForgeKind, env: string, options: PrLoopPipelin
|
|
|
113
114
|
...(member ? ["--member", member] : []),
|
|
114
115
|
];
|
|
115
116
|
const github = forge !== "gitlab";
|
|
116
|
-
const token: Record<string, string> = github ? { GITHUB_TOKEN:
|
|
117
|
+
const token: Record<string, string> = github ? { GITHUB_TOKEN: GITHUB_JOB_TOKEN } : {};
|
|
117
118
|
return [
|
|
118
119
|
{
|
|
119
120
|
jobName: "plan",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { join, resolve } from "node:path";
|
|
2
2
|
import { params as currentBuildParams } from "../../params";
|
|
3
3
|
import { sendFunctionSource } from "../../discovery/sandbox/driver";
|
|
4
|
+
import { chantSourceDir } from "../../ts-loader";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* chant #1051 — generates the source of the "driver" module that runs INSIDE
|
|
@@ -25,7 +26,8 @@ import { sendFunctionSource } from "../../discovery/sandbox/driver";
|
|
|
25
26
|
* for the full identity-correctness argument).
|
|
26
27
|
*/
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
// #3878: the TypeScript source, also when this module runs compiled from dist/.
|
|
30
|
+
const HERE = chantSourceDir(import.meta.url);
|
|
29
31
|
const COMPONENTS_DIR = join(HERE, "..");
|
|
30
32
|
|
|
31
33
|
/** Absolute paths to chant's OWN trusted modules the generated driver imports — resolved relative to THIS file's own location on disk, exactly like `../../discovery/sandbox/driver.ts` does for the entity path (works whether chant runs from the monorepo or a consumer's `node_modules`). */
|
package/src/composite.ts
CHANGED
|
@@ -115,11 +115,23 @@ export class CompositeRegistry {
|
|
|
115
115
|
* });
|
|
116
116
|
* export const storage = SecureStorage({ name: "data" });
|
|
117
117
|
* ```
|
|
118
|
+
*
|
|
119
|
+
* `D` (chant#3787) lets a lexicon give the definition a more precise call
|
|
120
|
+
* signature than `(props: P) => M`, such as a generic one whose members' types
|
|
121
|
+
* depend on the literal props it is called with. It is a type only: the value
|
|
122
|
+
* is the same definition, and `D` must still be a `CompositeDefinition<P, M>`,
|
|
123
|
+
* so an intersection with the precise signature first is the usual form. It
|
|
124
|
+
* is passed as a type argument rather than by casting the result, because the
|
|
125
|
+
* fold recognizes a composite by its `export const X = Composite(...)` shape.
|
|
118
126
|
*/
|
|
119
|
-
export function Composite<
|
|
127
|
+
export function Composite<
|
|
128
|
+
P,
|
|
129
|
+
M extends CompositeFactoryMembers = CompositeMembers,
|
|
130
|
+
D extends CompositeDefinition<P, M> = CompositeDefinition<P, M>,
|
|
131
|
+
>(
|
|
120
132
|
factory: (props: P) => M,
|
|
121
133
|
name?: string,
|
|
122
|
-
):
|
|
134
|
+
): D {
|
|
123
135
|
const id = Symbol();
|
|
124
136
|
const compositeName = name ?? "anonymous";
|
|
125
137
|
|
|
@@ -163,7 +175,7 @@ export function Composite<P, M extends CompositeFactoryMembers = CompositeMember
|
|
|
163
175
|
|
|
164
176
|
CompositeRegistry.register(definition as CompositeDefinition<unknown>);
|
|
165
177
|
|
|
166
|
-
return definition;
|
|
178
|
+
return definition as D;
|
|
167
179
|
}
|
|
168
180
|
|
|
169
181
|
/** Non-enumerable, symbol-keyed: invisible to serializers, spreads and comparisons, like provenance. */
|
package/src/config-import.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import { ensureTypeScriptLoader } from "./ts-loader";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* The single place chant evaluates a project's `chant.config.ts` **in the CLI's
|
|
@@ -29,6 +30,7 @@ export type ConfigModuleNamespace = Record<string, unknown>;
|
|
|
29
30
|
* evaluate the file once — the behavior `loadChantConfig` has always had.
|
|
30
31
|
*/
|
|
31
32
|
export async function importConfigModule(configPath: string): Promise<ConfigModuleNamespace> {
|
|
33
|
+
ensureTypeScriptLoader();
|
|
32
34
|
return (await import(configPath)) as ConfigModuleNamespace;
|
|
33
35
|
}
|
|
34
36
|
|
|
@@ -39,5 +41,6 @@ export async function importConfigModule(configPath: string): Promise<ConfigModu
|
|
|
39
41
|
*/
|
|
40
42
|
export function requireConfigModule(configPath: string, dir: string): ConfigModuleNamespace {
|
|
41
43
|
const req = createRequire(join(dir, "package.json"));
|
|
44
|
+
ensureTypeScriptLoader();
|
|
42
45
|
return req(configPath) as ConfigModuleNamespace;
|
|
43
46
|
}
|
package/src/discovery/collect.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { isCompositeInstance, expandComposite, compositeOfMember } from "../comp
|
|
|
4
4
|
import { isLexiconOutput } from "../lexicon-output";
|
|
5
5
|
import { DiscoveryError } from "../errors";
|
|
6
6
|
import { setProvenance, type EntityProvenance } from "../provenance";
|
|
7
|
+
import { expandHostComposite, hostCompositeName } from "./host-composite";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* The entity key for an export. `export default` is per-module — the `Op` pattern
|
|
@@ -119,6 +120,18 @@ function enumerateEntries(
|
|
|
119
120
|
provenance: { sourceFile: file, compositeInstance: name },
|
|
120
121
|
});
|
|
121
122
|
}
|
|
123
|
+
} else if (hostCompositeName(value) !== undefined) {
|
|
124
|
+
// chant#3612 — a host composite instance the fold resolved, expanded
|
|
125
|
+
// here rather than by one caller, so `build()` and `foldProject`
|
|
126
|
+
// report the same entities for it. See ./host-composite.ts.
|
|
127
|
+
for (const [expandedName, entity] of expandHostComposite(name, value as Record<string, unknown>)) {
|
|
128
|
+
entries.push({
|
|
129
|
+
bareKey: expandedName,
|
|
130
|
+
value: entity,
|
|
131
|
+
file,
|
|
132
|
+
provenance: { sourceFile: file, compositeInstance: name },
|
|
133
|
+
});
|
|
134
|
+
}
|
|
122
135
|
} else if (isLexiconOutput(value)) {
|
|
123
136
|
// LexiconOutput is not a Declarable but build() expects to find them in
|
|
124
137
|
// the entities map so it can collect and pass them to serializers.
|
|
@@ -133,7 +146,8 @@ function enumerateEntries(
|
|
|
133
146
|
/**
|
|
134
147
|
* Collects all declarable entities from imported modules.
|
|
135
148
|
* CompositeInstance exports are expanded into individual entities
|
|
136
|
-
* with `{exportName}_{memberName}` naming
|
|
149
|
+
* with `{exportName}_{memberName}` naming, and so are host composite
|
|
150
|
+
* instances the fold resolved (chant#3612, ./host-composite.ts).
|
|
137
151
|
* LexiconOutput exports are also collected so that build() can
|
|
138
152
|
* extract them and pass them to the serializer.
|
|
139
153
|
*
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chant#3612 — `build()` and `foldProject` report the same entities, under the
|
|
3
|
+
* same names, with the same provenance, for projects that use composites.
|
|
4
|
+
*
|
|
5
|
+
* The two share `collectEntities` and `foldProvenanceOfEntities`; what could
|
|
6
|
+
* still differ is what each hands them. These fixtures are real examples, one
|
|
7
|
+
* per lexicon whose composites a project calls, built the way `chant build`
|
|
8
|
+
* builds them (fold on, the plugins' intrinsics, the lexicon names).
|
|
9
|
+
*/
|
|
10
|
+
import { describe, test, expect, beforeAll } from "vitest";
|
|
11
|
+
import { join, resolve, dirname } from "node:path";
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
import { build } from "../build";
|
|
14
|
+
import { foldProject, type FoldProvenance } from "../index";
|
|
15
|
+
import { findInfraFiles } from "./files";
|
|
16
|
+
import { loadPlugins, resolveProjectLexicons } from "../cli/plugins";
|
|
17
|
+
import type { LexiconPlugin } from "../lexicon";
|
|
18
|
+
|
|
19
|
+
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../../../..");
|
|
20
|
+
|
|
21
|
+
const FIXTURES = [
|
|
22
|
+
"lexicons/aws/examples/fargate-alb",
|
|
23
|
+
"lexicons/aws/examples/lambda-function",
|
|
24
|
+
"lexicons/aws/examples/multi-service-alb",
|
|
25
|
+
"lexicons/k8s/examples/batch-workers",
|
|
26
|
+
"lexicons/k8s/examples/web-platform",
|
|
27
|
+
"lexicons/sql/examples/postgres-composites",
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
describe("build() and foldProject agree on composite-using projects (chant#3612)", () => {
|
|
31
|
+
// Loading a lexicon (aws's generated barrel above all) is the slow part, and
|
|
32
|
+
// it is not what the tests measure, so it happens once, up front.
|
|
33
|
+
const pluginsOf = new Map<string, LexiconPlugin[]>();
|
|
34
|
+
beforeAll(async () => {
|
|
35
|
+
for (const fixture of FIXTURES) {
|
|
36
|
+
const project = join(repoRoot, fixture);
|
|
37
|
+
pluginsOf.set(fixture, await loadPlugins(await resolveProjectLexicons(project)));
|
|
38
|
+
}
|
|
39
|
+
}, 60_000);
|
|
40
|
+
|
|
41
|
+
test.each(FIXTURES)("%s", async (fixture) => {
|
|
42
|
+
const src = join(repoRoot, fixture, "src");
|
|
43
|
+
const plugins = pluginsOf.get(fixture)!;
|
|
44
|
+
const intrinsics = plugins.flatMap((p) => p.intrinsics?.() ?? []);
|
|
45
|
+
const lexicons = plugins.map((p) => p.name);
|
|
46
|
+
|
|
47
|
+
const built = await build(src, plugins.map((p) => p.serializer), undefined, { fold: true, intrinsics, lexicons });
|
|
48
|
+
expect(built.errors).toEqual([]);
|
|
49
|
+
|
|
50
|
+
const files = await findInfraFiles(src);
|
|
51
|
+
const verdicts = await foldProject(files, intrinsics, { lexicons });
|
|
52
|
+
// Same verdict per file. A file that runs (a `chant.config.ts` in `src`)
|
|
53
|
+
// has no fold provenance in foldProject, so it is left out of both sides.
|
|
54
|
+
const mode = new Map(built.foldDecisions.map((d) => [d.file, d.mode]));
|
|
55
|
+
const folded: FoldProvenance = {};
|
|
56
|
+
for (const [file, verdict] of verdicts) {
|
|
57
|
+
expect({ file, verdict: verdict.verdict }).toEqual({ file, verdict: mode.get(file) });
|
|
58
|
+
Object.assign(folded, verdict.foldProvenance);
|
|
59
|
+
}
|
|
60
|
+
const foldedFiles = new Set(files.filter((file) => verdicts.get(file)!.verdict === "fold"));
|
|
61
|
+
expect(foldedFiles.size).toBeGreaterThan(0);
|
|
62
|
+
const fromBuild = Object.fromEntries(
|
|
63
|
+
Object.entries(built.foldProvenance).filter(([, record]) => foldedFiles.has(record.sourceFile ?? "")),
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
// The fixture has to exercise a composite, or the comparison proves nothing.
|
|
67
|
+
expect(Object.values(fromBuild).some((record) => record.composite !== undefined)).toBe(true);
|
|
68
|
+
expect(Object.keys(folded).sort()).toEqual(Object.keys(fromBuild).sort());
|
|
69
|
+
expect(folded).toEqual(fromBuild);
|
|
70
|
+
});
|
|
71
|
+
});
|