@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
package/dist/build.js
ADDED
|
@@ -0,0 +1,668 @@
|
|
|
1
|
+
import { getProvenance } from "./provenance.js";
|
|
2
|
+
import { foldProvenanceOfEntities } from "./fold-provenance.js";
|
|
3
|
+
import { DiscoveryError, BuildError as BuildErrorClass } from "./errors.js";
|
|
4
|
+
import { LexiconOutput, isLexiconOutput } from "./lexicon-output.js";
|
|
5
|
+
import { isSecretDeclaration } from "./secret-provenance.js";
|
|
6
|
+
import { splitReceiptEntities } from "./effect-receipt.js";
|
|
7
|
+
import { isScenario } from "./lifecycle/scenario.js";
|
|
8
|
+
import { isOpEntity } from "./op/resource.js";
|
|
9
|
+
import { isAttrRefLike } from "./utils.js";
|
|
10
|
+
import { isChildProject } from "./child-project.js";
|
|
11
|
+
import { discover } from "./discovery/index.js";
|
|
12
|
+
import { decodeEntitySet } from "./discovery/entity-wire.js";
|
|
13
|
+
import { buildDependencyGraph } from "./discovery/graph.js";
|
|
14
|
+
import { topologicalSort } from "./sort.js";
|
|
15
|
+
import { statSync } from "node:fs";
|
|
16
|
+
import { resolve } from "node:path";
|
|
17
|
+
/**
|
|
18
|
+
* Compute the cross-stack apply-ordering graph from resolved entities. Edges are
|
|
19
|
+
* inferred from cross-lexicon attribute references (a resource in lexicon A
|
|
20
|
+
* referencing an attribute of a resource in lexicon B ⇒ A depends on B). Returns
|
|
21
|
+
* the edge set plus a topological order, parallel-safe waves, and any cycles.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Is this entity a member of a lexicon stack?
|
|
25
|
+
*
|
|
26
|
+
* Four kinds are not, and every one of them is serializer-neutral: a
|
|
27
|
+
* `LexiconOutput` is collected separately, a secret provenance declaration
|
|
28
|
+
* (#1828) and a plan scenario (#1292) are data lint and the CLI read off the
|
|
29
|
+
* entity map, and an Op (#2118) builds to its own `op.json` rather than
|
|
30
|
+
* through a lexicon serializer.
|
|
31
|
+
*
|
|
32
|
+
* {@link partitionByLexicon} has skipped all four since each landed, and
|
|
33
|
+
* {@link computeStackGraph}'s walk did not — so an entity with no `lexicon`
|
|
34
|
+
* (a `LexiconOutput`) entered `edges`, `order` and `waves` as `undefined`
|
|
35
|
+
* while `nodes`, built from the partition, could never contain it (#2480).
|
|
36
|
+
* One predicate for both sites, so they cannot drift apart again.
|
|
37
|
+
*/
|
|
38
|
+
export function isStackMember(entity) {
|
|
39
|
+
return (!isLexiconOutput(entity) &&
|
|
40
|
+
!isSecretDeclaration(entity) &&
|
|
41
|
+
!isScenario(entity) &&
|
|
42
|
+
!isOpEntity(entity));
|
|
43
|
+
}
|
|
44
|
+
export function computeStackGraph(entities, lexiconNames) {
|
|
45
|
+
const edges = [];
|
|
46
|
+
const edgeSet = new Set();
|
|
47
|
+
const addEdge = (from, to) => {
|
|
48
|
+
// A structural guard, not a defensive one: `nodes` comes from the
|
|
49
|
+
// partition, so an endpoint the partition would have dropped can never be
|
|
50
|
+
// a legitimate member of this graph (#2480).
|
|
51
|
+
if (typeof from !== "string" || typeof to !== "string")
|
|
52
|
+
return;
|
|
53
|
+
if (from === to)
|
|
54
|
+
return;
|
|
55
|
+
const key = `${from}\0${to}`;
|
|
56
|
+
if (edgeSet.has(key))
|
|
57
|
+
return;
|
|
58
|
+
edgeSet.add(key);
|
|
59
|
+
edges.push({ from, to });
|
|
60
|
+
};
|
|
61
|
+
const walk = (value, consumer, visited) => {
|
|
62
|
+
if (value === null || value === undefined || typeof value !== "object")
|
|
63
|
+
return;
|
|
64
|
+
if (visited.has(value))
|
|
65
|
+
return;
|
|
66
|
+
visited.add(value);
|
|
67
|
+
// Duck-type, not `instanceof` (chant #1137): a lexicon built against a
|
|
68
|
+
// separate copy of `@intentius/chant` produces AttrRefs that fail
|
|
69
|
+
// `instanceof AttrRef` here but carry the same shape. Without this, a
|
|
70
|
+
// real cross-stack dependency silently falls through to the generic
|
|
71
|
+
// object walk below instead of producing an edge, which can misorder —
|
|
72
|
+
// or entirely drop — the apply order this graph exists to compute.
|
|
73
|
+
if (isAttrRefLike(value)) {
|
|
74
|
+
const parent = value.parent.deref();
|
|
75
|
+
const producer = parent ? parent.lexicon : undefined;
|
|
76
|
+
if (typeof producer === "string" && producer !== consumer)
|
|
77
|
+
addEdge(consumer, producer);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (isLexiconOutput(value))
|
|
81
|
+
return;
|
|
82
|
+
if (Array.isArray(value)) {
|
|
83
|
+
for (const item of value)
|
|
84
|
+
walk(item, consumer, visited);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
for (const val of Object.values(value))
|
|
88
|
+
walk(val, consumer, visited);
|
|
89
|
+
};
|
|
90
|
+
for (const [, entity] of entities) {
|
|
91
|
+
// #2480: the same four kinds `partitionByLexicon` drops. Walking one as a
|
|
92
|
+
// consumer takes its absent `lexicon` as the edge's `from`.
|
|
93
|
+
if (!isStackMember(entity))
|
|
94
|
+
continue;
|
|
95
|
+
const consumer = entity.lexicon;
|
|
96
|
+
const visited = new Set();
|
|
97
|
+
for (const val of Object.values(entity)) {
|
|
98
|
+
walk(val, consumer, visited);
|
|
99
|
+
}
|
|
100
|
+
if ("props" in entity && typeof entity.props === "object" && entity.props !== null) {
|
|
101
|
+
walk(entity.props, consumer, visited);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Dependency map: node → producers it depends on.
|
|
105
|
+
const nodes = lexiconNames.length
|
|
106
|
+
? [...lexiconNames]
|
|
107
|
+
: // The same predicate, rather than the partial copy of it this branch
|
|
108
|
+
// carried: it filtered secrets and scenarios but not outputs or Ops, so
|
|
109
|
+
// it could mint a node the partition would have dropped (#2480).
|
|
110
|
+
[...new Set([...entities.values()].filter(isStackMember).map((e) => e.lexicon))];
|
|
111
|
+
const deps = new Map();
|
|
112
|
+
for (const n of nodes)
|
|
113
|
+
deps.set(n, new Set());
|
|
114
|
+
for (const { from, to } of edges) {
|
|
115
|
+
if (!deps.has(from))
|
|
116
|
+
deps.set(from, new Set());
|
|
117
|
+
if (!deps.has(to))
|
|
118
|
+
deps.set(to, new Set());
|
|
119
|
+
deps.get(from).add(to);
|
|
120
|
+
}
|
|
121
|
+
// Kahn layering: a node is ready once every producer it depends on is placed.
|
|
122
|
+
const remaining = new Set(deps.keys());
|
|
123
|
+
const waves = [];
|
|
124
|
+
const order = [];
|
|
125
|
+
while (remaining.size > 0) {
|
|
126
|
+
const wave = [...remaining]
|
|
127
|
+
.filter((n) => [...deps.get(n)].every((d) => !remaining.has(d)))
|
|
128
|
+
.sort();
|
|
129
|
+
if (wave.length === 0)
|
|
130
|
+
break; // remaining nodes form a cycle
|
|
131
|
+
for (const n of wave) {
|
|
132
|
+
remaining.delete(n);
|
|
133
|
+
order.push(n);
|
|
134
|
+
}
|
|
135
|
+
waves.push(wave);
|
|
136
|
+
}
|
|
137
|
+
const cycles = remaining.size > 0 ? [[...remaining].sort()] : [];
|
|
138
|
+
edges.sort((a, b) => `${a.from}\0${a.to}`.localeCompare(`${b.from}\0${b.to}`));
|
|
139
|
+
return { nodes: [...nodes].sort(), edges, order, waves, cycles };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Partitions entities by their lexicon field.
|
|
143
|
+
* Property-kind Declarables are included in the same partition as their parent
|
|
144
|
+
* (they get inlined during serialization).
|
|
145
|
+
*
|
|
146
|
+
* @param entities - Map of entity name to Declarable
|
|
147
|
+
* @returns Map of lexicon name to Map of entity name to Declarable
|
|
148
|
+
*/
|
|
149
|
+
export function partitionByLexicon(entities) {
|
|
150
|
+
const partitions = new Map();
|
|
151
|
+
for (const [name, entity] of entities) {
|
|
152
|
+
// The four serializer-neutral kinds, each explained on {@link isStackMember}:
|
|
153
|
+
// a LexiconOutput is collected separately, and a secret declaration
|
|
154
|
+
// (#1828), a plan scenario (#1292) and an Op (#2118) are read off the
|
|
155
|
+
// entity map rather than routed through a lexicon serializer. Keeping them
|
|
156
|
+
// out of every partition is what stops a "No serializer found" warning
|
|
157
|
+
// firing for a pseudo-lexicon.
|
|
158
|
+
if (!isStackMember(entity))
|
|
159
|
+
continue;
|
|
160
|
+
const lexicon = entity.lexicon;
|
|
161
|
+
if (!partitions.has(lexicon)) {
|
|
162
|
+
partitions.set(lexicon, new Map());
|
|
163
|
+
}
|
|
164
|
+
partitions.get(lexicon).set(name, entity);
|
|
165
|
+
}
|
|
166
|
+
return partitions;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Collect LexiconOutput instances from all entity property trees.
|
|
170
|
+
* Walks entity properties recursively to find LexiconOutput values.
|
|
171
|
+
*/
|
|
172
|
+
export function collectLexiconOutputs(entities) {
|
|
173
|
+
const outputs = [];
|
|
174
|
+
const visited = new Set();
|
|
175
|
+
function walk(value) {
|
|
176
|
+
if (value === null || value === undefined || typeof value !== "object") {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (visited.has(value))
|
|
180
|
+
return;
|
|
181
|
+
visited.add(value);
|
|
182
|
+
if (isLexiconOutput(value)) {
|
|
183
|
+
outputs.push(value);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (Array.isArray(value)) {
|
|
187
|
+
for (const item of value) {
|
|
188
|
+
walk(item);
|
|
189
|
+
}
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
for (const val of Object.values(value)) {
|
|
193
|
+
walk(val);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
for (const [name, entity] of entities) {
|
|
197
|
+
if (isLexiconOutput(entity)) {
|
|
198
|
+
const lexiconOutput = entity;
|
|
199
|
+
// A literal-valued output (chant #1121) has no source entity at all —
|
|
200
|
+
// it isn't a reference to anything, so it must not fall back to the
|
|
201
|
+
// output's OWN map key the way an AttrRef whose parent didn't resolve
|
|
202
|
+
// would. Leaving `sourceEntity` empty keeps `getOutputValue()`'s
|
|
203
|
+
// (never-reached, for a literal) `Fn::GetAtt` fallback from ever being
|
|
204
|
+
// handed a bogus source, and keeps consumers that read `sourceEntity`
|
|
205
|
+
// directly (e.g. `graph-ir.ts`'s cross-stack export, the build
|
|
206
|
+
// manifest) from reporting the output as its own source.
|
|
207
|
+
if (lexiconOutput._literalValue === null) {
|
|
208
|
+
// Resolve source entity name from the WeakRef parent identity
|
|
209
|
+
const parent = lexiconOutput._sourceParent?.deref();
|
|
210
|
+
let sourceName = name;
|
|
211
|
+
if (parent) {
|
|
212
|
+
for (const [entityName, e] of entities) {
|
|
213
|
+
if (e === parent) {
|
|
214
|
+
sourceName = entityName;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
lexiconOutput._setSourceEntity(sourceName);
|
|
220
|
+
}
|
|
221
|
+
outputs.push(lexiconOutput);
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
if ("props" in entity && typeof entity.props === "object" && entity.props !== null) {
|
|
225
|
+
// Set source entity name for any LexiconOutputs found in props
|
|
226
|
+
const prevLength = outputs.length;
|
|
227
|
+
walk(entity.props);
|
|
228
|
+
for (let i = prevLength; i < outputs.length; i++) {
|
|
229
|
+
// Same #1121 guard as above — a literal has no source entity to name.
|
|
230
|
+
if (!outputs[i].sourceEntity && outputs[i]._literalValue === null) {
|
|
231
|
+
outputs[i]._setSourceEntity(name);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return outputs;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Detect cross-lexicon AttrRefs by walking each entity's property tree.
|
|
240
|
+
* For each AttrRef whose parent entity belongs to a different lexicon than
|
|
241
|
+
* the consuming entity, auto-create a LexiconOutput.
|
|
242
|
+
*
|
|
243
|
+
* @param entities - Map of entity name to Declarable
|
|
244
|
+
* @returns Array of auto-detected LexiconOutput instances
|
|
245
|
+
*/
|
|
246
|
+
export function detectCrossLexiconRefs(entities) {
|
|
247
|
+
const outputs = [];
|
|
248
|
+
// Track by "sourceEntityName_attribute" to avoid duplicates
|
|
249
|
+
const seen = new Set();
|
|
250
|
+
// Build a reverse lookup: object identity -> entity name
|
|
251
|
+
const objectToName = new Map();
|
|
252
|
+
for (const [name, entity] of entities) {
|
|
253
|
+
objectToName.set(entity, name);
|
|
254
|
+
}
|
|
255
|
+
function walk(value, consumingLexicon, visited) {
|
|
256
|
+
if (value === null || value === undefined || typeof value !== "object") {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
if (visited.has(value))
|
|
260
|
+
return;
|
|
261
|
+
visited.add(value);
|
|
262
|
+
// Duck-type, not `instanceof` (chant #1137): a lexicon built against a
|
|
263
|
+
// separate copy of `@intentius/chant` produces AttrRefs that fail
|
|
264
|
+
// `instanceof AttrRef` here but carry the same shape. Without this, a
|
|
265
|
+
// real cross-lexicon reference silently falls through to the generic
|
|
266
|
+
// object walk below instead of auto-creating a `LexiconOutput`, and the
|
|
267
|
+
// whole `Outputs` entry for it vanishes (same failure shape as #1122).
|
|
268
|
+
if (isAttrRefLike(value)) {
|
|
269
|
+
const parent = value.parent.deref();
|
|
270
|
+
if (!parent)
|
|
271
|
+
return;
|
|
272
|
+
const parentLexicon = parent.lexicon;
|
|
273
|
+
if (typeof parentLexicon !== "string")
|
|
274
|
+
return;
|
|
275
|
+
if (parentLexicon !== consumingLexicon) {
|
|
276
|
+
// Find the parent's entity name
|
|
277
|
+
const parentName = objectToName.get(parent);
|
|
278
|
+
if (!parentName)
|
|
279
|
+
return;
|
|
280
|
+
const key = `${parentName}_${value.attribute}`;
|
|
281
|
+
if (!seen.has(key)) {
|
|
282
|
+
seen.add(key);
|
|
283
|
+
outputs.push(LexiconOutput.auto(value, parentName));
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
// Skip LexiconOutput instances — these are explicit outputs
|
|
289
|
+
if (isLexiconOutput(value))
|
|
290
|
+
return;
|
|
291
|
+
// Do not descend into a whole resource entity (e.g. `Ref(bucket)` embeds
|
|
292
|
+
// the resource object). Every resource instance carries a latent AttrRef
|
|
293
|
+
// for *every* attribute in its spec (see runtime.ts) — most are never
|
|
294
|
+
// referenced and, for config-gated attributes (S3 `WebsiteURL`,
|
|
295
|
+
// `MetadataConfiguration.*`), don't exist at deploy time unless the
|
|
296
|
+
// matching config block is set. Harvesting those as cross-lexicon outputs
|
|
297
|
+
// emits `Fn::GetAtt` outputs for nonexistent attributes, which real
|
|
298
|
+
// CloudFormation rejects (#959). Only an explicitly-accessed attribute
|
|
299
|
+
// (a standalone AttrRef value, handled above) should produce an output.
|
|
300
|
+
if (objectToName.has(value))
|
|
301
|
+
return;
|
|
302
|
+
if (Array.isArray(value)) {
|
|
303
|
+
for (const item of value) {
|
|
304
|
+
walk(item, consumingLexicon, visited);
|
|
305
|
+
}
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
for (const val of Object.values(value)) {
|
|
309
|
+
walk(val, consumingLexicon, visited);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
for (const [, entity] of entities) {
|
|
313
|
+
const visited = new Set();
|
|
314
|
+
const consumingLexicon = entity.lexicon;
|
|
315
|
+
// Walk entity-level properties (AttrRefs could be direct properties)
|
|
316
|
+
for (const val of Object.values(entity)) {
|
|
317
|
+
walk(val, consumingLexicon, visited);
|
|
318
|
+
}
|
|
319
|
+
// Walk props if present
|
|
320
|
+
if ("props" in entity &&
|
|
321
|
+
typeof entity.props === "object" &&
|
|
322
|
+
entity.props !== null) {
|
|
323
|
+
walk(entity.props, consumingLexicon, visited);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return outputs;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Compute deploy order: source lexicons before consuming lexicons.
|
|
330
|
+
*/
|
|
331
|
+
function computeDeployOrder(lexiconNames, lexiconOutputs) {
|
|
332
|
+
// Build a dependency graph: consuming lexicons depend on source lexicons
|
|
333
|
+
const deps = new Map();
|
|
334
|
+
for (const name of lexiconNames) {
|
|
335
|
+
deps.set(name, new Set());
|
|
336
|
+
}
|
|
337
|
+
for (const output of lexiconOutputs) {
|
|
338
|
+
// All lexicons other than the source lexicon implicitly depend on it
|
|
339
|
+
for (const name of lexiconNames) {
|
|
340
|
+
if (name !== output.sourceLexicon) {
|
|
341
|
+
deps.get(name)?.add(output.sourceLexicon);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// Simple topological sort for deploy order
|
|
346
|
+
const sorted = [];
|
|
347
|
+
const visited = new Set();
|
|
348
|
+
const visiting = new Set();
|
|
349
|
+
function visit(name) {
|
|
350
|
+
if (visited.has(name))
|
|
351
|
+
return;
|
|
352
|
+
if (visiting.has(name))
|
|
353
|
+
return; // cycle, just skip
|
|
354
|
+
visiting.add(name);
|
|
355
|
+
for (const dep of deps.get(name) ?? []) {
|
|
356
|
+
visit(dep);
|
|
357
|
+
}
|
|
358
|
+
visiting.delete(name);
|
|
359
|
+
visited.add(name);
|
|
360
|
+
sorted.push(name);
|
|
361
|
+
}
|
|
362
|
+
for (const name of lexiconNames) {
|
|
363
|
+
visit(name);
|
|
364
|
+
}
|
|
365
|
+
return sorted;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Generate the build manifest
|
|
369
|
+
*/
|
|
370
|
+
function generateManifest(lexiconNames, lexiconOutputs, entities) {
|
|
371
|
+
const outputsRecord = {};
|
|
372
|
+
for (const output of lexiconOutputs) {
|
|
373
|
+
outputsRecord[output.outputName] = {
|
|
374
|
+
source: output.sourceLexicon,
|
|
375
|
+
entity: output.sourceEntity,
|
|
376
|
+
attribute: output.sourceAttribute ?? "",
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
return {
|
|
380
|
+
lexicons: lexiconNames,
|
|
381
|
+
outputs: outputsRecord,
|
|
382
|
+
deployOrder: computeDeployOrder(lexiconNames, lexiconOutputs),
|
|
383
|
+
stackGraph: computeStackGraph(entities, lexiconNames),
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
/** The directory a build discovered from, for build-root contributors; undefined when the build's path is not one (an entity-set JSON's label). */
|
|
387
|
+
function sourceDirOf(path) {
|
|
388
|
+
try {
|
|
389
|
+
return statSync(path).isDirectory() ? resolve(path) : undefined;
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
return undefined;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Run each build-root contributor (#1548 piece 3) and merge its rendered
|
|
397
|
+
* entities into `entities`, in place. THE one merge implementation — `build()`
|
|
398
|
+
* uses it for step 4b, and the graph handler's discover-based paths reuse it
|
|
399
|
+
* so a rendered kustomize root joins the graphed entity set under exactly the
|
|
400
|
+
* rules the build applies (#1626):
|
|
401
|
+
*
|
|
402
|
+
* - a contributed name colliding with an existing entity is an error, never a
|
|
403
|
+
* silent overwrite;
|
|
404
|
+
* - a contributor that throws becomes an error carrying its message (the k8s
|
|
405
|
+
* hook's missing-binary refusal names the binaries), not a stack trace.
|
|
406
|
+
*
|
|
407
|
+
* Errors come back as plain messages; each caller wraps them in its own error
|
|
408
|
+
* vocabulary (`BuildErrorClass` in `build()`, the CLI's `formatError` on the
|
|
409
|
+
* graph paths).
|
|
410
|
+
*/
|
|
411
|
+
export async function mergeBuildRootEntities(entities, contributors, sourceDir) {
|
|
412
|
+
const warnings = [];
|
|
413
|
+
const errors = [];
|
|
414
|
+
for (const contribute of contributors) {
|
|
415
|
+
try {
|
|
416
|
+
// The discovered set, read-only, so a contributor can react to what the
|
|
417
|
+
// project DECLARED (a committed-encrypted `declareSecret()` naming a
|
|
418
|
+
// ciphertext file to resolve). Contributors run in order, so this also
|
|
419
|
+
// carries what earlier contributors added; the merge below is still the
|
|
420
|
+
// only writer, which is what keeps the collision refusal meaningful.
|
|
421
|
+
const contribution = await contribute({ entities, ...(sourceDir !== undefined ? { sourceDir } : {}) });
|
|
422
|
+
warnings.push(...(contribution.warnings ?? []));
|
|
423
|
+
for (const [name, entity] of contribution.entities) {
|
|
424
|
+
if (entities.has(name)) {
|
|
425
|
+
errors.push(`Build-root entity "${name}" collides with a discovered entity of the same name`);
|
|
426
|
+
continue;
|
|
427
|
+
}
|
|
428
|
+
entities.set(name, entity);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
catch (error) {
|
|
432
|
+
errors.push(error instanceof Error ? error.message : String(error));
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
return { warnings, errors };
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Builds a lexicon specification by discovering entities, sorting them
|
|
439
|
+
* topologically, and serializing them using the lexicon serializers.
|
|
440
|
+
*
|
|
441
|
+
* @param path - The directory path containing the specification files
|
|
442
|
+
* @param serializers - The serializers to use for serialization
|
|
443
|
+
* @returns BuildResult with outputs, entities, warnings, and errors
|
|
444
|
+
*/
|
|
445
|
+
export async function build(path, serializers, parentBuildStack, options) {
|
|
446
|
+
// Step 1: Discover entities and dependencies
|
|
447
|
+
const discoveryResult = await discover(path, {
|
|
448
|
+
fold: options?.fold,
|
|
449
|
+
intrinsics: options?.intrinsics,
|
|
450
|
+
lexicons: options?.lexicons,
|
|
451
|
+
sandbox: options?.sandbox,
|
|
452
|
+
executing: options?.executing,
|
|
453
|
+
buildParams: options?.buildParams,
|
|
454
|
+
});
|
|
455
|
+
return buildFromDiscoveryResult(discoveryResult, path, serializers, parentBuildStack, options);
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* chant #1045 (Phase 1) — build from a discovery result produced OUTSIDE the
|
|
459
|
+
* normal `discover(path)` call, i.e. decoded from {@link DiscoveredEntitiesJson}
|
|
460
|
+
* (see {@link buildFromEntitiesJson}). Everything from here on (topological
|
|
461
|
+
* sort, recursive child-project builds, partitioning, output detection,
|
|
462
|
+
* serialization, manifest) is exactly what `build()` already does after its
|
|
463
|
+
* own `discover()` call — extracted so the JSON path reuses it verbatim
|
|
464
|
+
* instead of forking it.
|
|
465
|
+
*
|
|
466
|
+
* @param resolvedPathForChildStack - Used only to seed the circular-nested-
|
|
467
|
+
* stack detection (`buildStack`); the JSON path has no single directory a
|
|
468
|
+
* decoded entity set came from, so callers without one may pass any stable
|
|
469
|
+
* label (child projects aren't supported by the JSON boundary yet — see
|
|
470
|
+
* `discovery/entity-wire.ts` — so this is inert for that path today).
|
|
471
|
+
*/
|
|
472
|
+
async function buildFromDiscoveryResult(discoveryResult, resolvedPathForChildStack, serializers, parentBuildStack, options) {
|
|
473
|
+
const warnings = [];
|
|
474
|
+
const errors = [];
|
|
475
|
+
// Collect discovery errors
|
|
476
|
+
errors.push(...discoveryResult.errors);
|
|
477
|
+
// Step 2: Convert Map<string, Set<string>> to Record<string, string[]> for topologicalSort
|
|
478
|
+
const dependenciesRecord = {};
|
|
479
|
+
for (const [entityName, deps] of discoveryResult.dependencies) {
|
|
480
|
+
dependenciesRecord[entityName] = Array.from(deps);
|
|
481
|
+
}
|
|
482
|
+
// Step 3: Perform topological sort
|
|
483
|
+
try {
|
|
484
|
+
topologicalSort(dependenciesRecord);
|
|
485
|
+
}
|
|
486
|
+
catch (error) {
|
|
487
|
+
// BuildError from cycle detection
|
|
488
|
+
if (error instanceof Error && error.name === "BuildError") {
|
|
489
|
+
errors.push(error);
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
// Unexpected error
|
|
493
|
+
errors.push(new BuildErrorClass("", error instanceof Error ? error.message : String(error)));
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
// Step 4: Recursively build child projects
|
|
497
|
+
const resolvedPath = resolve(resolvedPathForChildStack);
|
|
498
|
+
const buildStack = parentBuildStack
|
|
499
|
+
? new Set(parentBuildStack)
|
|
500
|
+
: new Set();
|
|
501
|
+
buildStack.add(resolvedPath);
|
|
502
|
+
for (const [name, entity] of discoveryResult.entities) {
|
|
503
|
+
if (isChildProject(entity)) {
|
|
504
|
+
const childPath = resolve(entity.projectPath);
|
|
505
|
+
if (buildStack.has(childPath)) {
|
|
506
|
+
errors.push(new BuildErrorClass(childPath, `Circular nested stack: ${[...buildStack].join(" → ")} → ${childPath}`));
|
|
507
|
+
continue;
|
|
508
|
+
}
|
|
509
|
+
const childResult = await build(childPath, serializers, buildStack, options);
|
|
510
|
+
entity.buildResult = childResult;
|
|
511
|
+
if (childResult.errors.length > 0) {
|
|
512
|
+
for (const err of childResult.errors) {
|
|
513
|
+
errors.push(err);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
// Step 4b (#1548 piece 3): lexicon-contributed build roots — rendered
|
|
519
|
+
// non-source roots (kustomize dirs) joining the entity set before
|
|
520
|
+
// partitioning, so everything downstream (serialization with ownership
|
|
521
|
+
// stamping, post-synth checks, observation) treats them as declared.
|
|
522
|
+
// Top-level build only: nested child builds receive the same options
|
|
523
|
+
// object, and re-running the contributors there would duplicate every
|
|
524
|
+
// contributed entity once per child.
|
|
525
|
+
if (!parentBuildStack && options?.buildRoots) {
|
|
526
|
+
const merged = await mergeBuildRootEntities(discoveryResult.entities, options.buildRoots, sourceDirOf(resolvedPathForChildStack));
|
|
527
|
+
warnings.push(...merged.warnings);
|
|
528
|
+
for (const message of merged.errors) {
|
|
529
|
+
errors.push(new BuildErrorClass("", message));
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
// Step 5: Partition entities by lexicon
|
|
533
|
+
const partitions = partitionByLexicon(discoveryResult.entities);
|
|
534
|
+
// Build a serializer lookup by name
|
|
535
|
+
const serializersByName = new Map();
|
|
536
|
+
for (const serializer of serializers) {
|
|
537
|
+
serializersByName.set(serializer.name, serializer);
|
|
538
|
+
}
|
|
539
|
+
// Step 6: Collect explicit LexiconOutputs from all entities
|
|
540
|
+
const explicitOutputs = collectLexiconOutputs(discoveryResult.entities);
|
|
541
|
+
// Step 6b: Auto-detect cross-lexicon AttrRefs
|
|
542
|
+
const autoOutputs = detectCrossLexiconRefs(discoveryResult.entities);
|
|
543
|
+
// Merge: explicit outputs take precedence over auto-detected ones.
|
|
544
|
+
// Match by parent object identity + attribute to detect collisions.
|
|
545
|
+
const explicitRefs = explicitOutputs.map((o) => ({
|
|
546
|
+
parent: o._sourceParent?.deref(),
|
|
547
|
+
attribute: o.sourceAttribute,
|
|
548
|
+
}));
|
|
549
|
+
const lexiconOutputs = [
|
|
550
|
+
...explicitOutputs,
|
|
551
|
+
...autoOutputs.filter((auto) => {
|
|
552
|
+
const autoParent = auto._sourceParent?.deref();
|
|
553
|
+
return !explicitRefs.some((e) => e.parent === autoParent && e.attribute === auto.sourceAttribute);
|
|
554
|
+
}),
|
|
555
|
+
];
|
|
556
|
+
// Group outputs by source lexicon.
|
|
557
|
+
// Intrinsic-based outputs (sourceLexicon === "") have no source entity to derive a lexicon from,
|
|
558
|
+
// so they are included in every lexicon's output list.
|
|
559
|
+
const outputsByLexicon = new Map();
|
|
560
|
+
const unassignedOutputs = [];
|
|
561
|
+
for (const output of lexiconOutputs) {
|
|
562
|
+
if (!output.sourceLexicon) {
|
|
563
|
+
unassignedOutputs.push(output);
|
|
564
|
+
continue;
|
|
565
|
+
}
|
|
566
|
+
if (!outputsByLexicon.has(output.sourceLexicon)) {
|
|
567
|
+
outputsByLexicon.set(output.sourceLexicon, []);
|
|
568
|
+
}
|
|
569
|
+
outputsByLexicon.get(output.sourceLexicon).push(output);
|
|
570
|
+
}
|
|
571
|
+
// Step 7: Serialize each lexicon's entities
|
|
572
|
+
const outputs = new Map();
|
|
573
|
+
for (const [lexiconName, lexiconEntities] of partitions) {
|
|
574
|
+
const serializer = serializersByName.get(lexiconName);
|
|
575
|
+
// #1832: effect receipts are withheld from the apply-bound entity set at
|
|
576
|
+
// this seam — the narrowest choke point every applier's input flows
|
|
577
|
+
// through, since appliers consume the serialized outputs assembled here.
|
|
578
|
+
// Receipts ride `SerializeContext.receipts` instead, so a lexicon can
|
|
579
|
+
// render them for visibility (#1835) without them ever entering the
|
|
580
|
+
// document an applier writes (or prunes) from. The `effect()` step is the
|
|
581
|
+
// sole receipt writer (epic #1703, decision 3).
|
|
582
|
+
const { applyBound, receipts } = splitReceiptEntities(lexiconEntities);
|
|
583
|
+
if (serializer) {
|
|
584
|
+
const lexiconLexiconOutputs = [
|
|
585
|
+
...(outputsByLexicon.get(lexiconName) ?? []),
|
|
586
|
+
...unassignedOutputs,
|
|
587
|
+
];
|
|
588
|
+
const serialized = serializer.serialize(applyBound, lexiconLexiconOutputs, {
|
|
589
|
+
ownership: options?.ownership,
|
|
590
|
+
config: options?.config,
|
|
591
|
+
...(options?.telemetry ? { telemetry: options.telemetry } : {}),
|
|
592
|
+
...(receipts.size > 0 ? { receipts } : {}),
|
|
593
|
+
});
|
|
594
|
+
// Collect any non-fatal serializer diagnostics into the build warnings.
|
|
595
|
+
if (typeof serialized !== "string" && serialized.warnings) {
|
|
596
|
+
for (const w of serialized.warnings)
|
|
597
|
+
warnings.push(w);
|
|
598
|
+
}
|
|
599
|
+
outputs.set(lexiconName, serialized);
|
|
600
|
+
}
|
|
601
|
+
else if (applyBound.size === 0 && receipts.size > 0) {
|
|
602
|
+
// A partition holding only receipts (the core factory's "chant"
|
|
603
|
+
// pseudo-lexicon) has nothing apply-bound to serialize; that is the
|
|
604
|
+
// designed shape until a lexicon materializes the receipt (#1835), not
|
|
605
|
+
// a missing-serializer problem.
|
|
606
|
+
}
|
|
607
|
+
else {
|
|
608
|
+
warnings.push(`No serializer found for lexicon "${lexiconName}". List the lexicon in chant.config.ts.`);
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
// Step 8: Generate manifest
|
|
612
|
+
const lexiconNames = Array.from(partitions.keys());
|
|
613
|
+
const manifest = generateManifest(lexiconNames, lexiconOutputs, discoveryResult.entities);
|
|
614
|
+
return {
|
|
615
|
+
outputs,
|
|
616
|
+
entities: discoveryResult.entities,
|
|
617
|
+
dependencies: discoveryResult.dependencies,
|
|
618
|
+
warnings,
|
|
619
|
+
errors,
|
|
620
|
+
manifest,
|
|
621
|
+
sourceFileCount: discoveryResult.sourceFiles.length,
|
|
622
|
+
foldDecisions: discoveryResult.foldDecisions,
|
|
623
|
+
lexiconVersions: { ...(options?.lexiconVersions ?? {}) },
|
|
624
|
+
buildParams: options?.buildParams ?? [],
|
|
625
|
+
// chant #2161 — read off the entities AFTER every step that can change
|
|
626
|
+
// them (the shared-props merge in `expandComposite`, the build-root merge
|
|
627
|
+
// above), and deliberately after Step 7, so nothing about computing it can
|
|
628
|
+
// reach a serializer.
|
|
629
|
+
foldProvenance: foldProvenanceOfEntities(discoveryResult.entities, getProvenance),
|
|
630
|
+
};
|
|
631
|
+
}
|
|
632
|
+
/**
|
|
633
|
+
* chant #1045 (Phase 1) — build directly from a JSON-encoded discovery
|
|
634
|
+
* result (see {@link discoverEntitySetJson} in `./discovery/entity-wire.ts`)
|
|
635
|
+
* instead of pointing `build()` at a directory.
|
|
636
|
+
*
|
|
637
|
+
* Decodes the wire entity set back into a live entities map — see
|
|
638
|
+
* `decodeEntitySet`'s doc for why the decoded entities are functionally
|
|
639
|
+
* indistinguishable from what `discover()` produces in-process (real
|
|
640
|
+
* `AttrRef` instances, whole-entity identity preserved by reference, not by
|
|
641
|
+
* clone) — then runs the exact same post-discovery pipeline `build()` uses
|
|
642
|
+
* ({@link buildFromDiscoveryResult}), so partitioning, output detection,
|
|
643
|
+
* serialization, and the manifest are the SAME code path, not a fork of it.
|
|
644
|
+
*
|
|
645
|
+
* Dependencies aren't part of the wire format: unlike entities, a dependency
|
|
646
|
+
* graph is plain name-to-name data with no identity problem, so it's cheaper
|
|
647
|
+
* and more honest to recompute it from the decoded entities via the same
|
|
648
|
+
* `buildDependencyGraph()` `discover()` itself uses than to carry a second,
|
|
649
|
+
* redundant wire shape across the boundary.
|
|
650
|
+
*
|
|
651
|
+
* @param label - Used only to seed circular-nested-stack detection; a JSON
|
|
652
|
+
* entity set has no single source directory the way a `build(path, …)`
|
|
653
|
+
* call does. Inert today — child projects (`nestedStack()`) aren't
|
|
654
|
+
* supported by the JSON boundary yet (see `discovery/entity-wire.ts`).
|
|
655
|
+
*/
|
|
656
|
+
export async function buildFromEntitiesJson(json, serializers, label = "<json-entity-set>", parentBuildStack, options) {
|
|
657
|
+
const entities = decodeEntitySet(json.entitySet);
|
|
658
|
+
const dependencies = buildDependencyGraph(entities);
|
|
659
|
+
const errors = json.errors.map((e) => new DiscoveryError(e.file, e.message, e.type));
|
|
660
|
+
const discoveryResult = {
|
|
661
|
+
entities,
|
|
662
|
+
dependencies,
|
|
663
|
+
sourceFiles: json.sourceFiles,
|
|
664
|
+
errors,
|
|
665
|
+
foldDecisions: json.foldDecisions,
|
|
666
|
+
};
|
|
667
|
+
return buildFromDiscoveryResult(discoveryResult, label, serializers, parentBuildStack, options);
|
|
668
|
+
}
|