@intentius/chant 0.124.13 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/lexicon-module.ts +3 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +1 -1
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan and apply a pull request's members (#3183).
|
|
3
|
+
*
|
|
4
|
+
* `../pr-loop.ts` says what the gate binds and what the report holds; this
|
|
5
|
+
* produces them. Both stages call {@link planPrSet}: the plan stage to show
|
|
6
|
+
* the plan and its digest, the apply stage to plan the same members again
|
|
7
|
+
* before anything applies and decide the gate against what it gets. Planning
|
|
8
|
+
* everything before applying anything is what makes the two digests
|
|
9
|
+
* comparable: each member is planned against the same state both times.
|
|
10
|
+
*
|
|
11
|
+
* ## Dependents read the outputs standing now
|
|
12
|
+
*
|
|
13
|
+
* A member that reads another one's output through `stackOutput()` is
|
|
14
|
+
* planned with the value that output has now, read through the capability's
|
|
15
|
+
* `outputs` (`readComponentOutputs`). When the change moves that output, the
|
|
16
|
+
* dependent's approved plan still carries the old value; the apply applies
|
|
17
|
+
* it as approved and marks the member `inputsMoved`, and the next run plans
|
|
18
|
+
* it against the new value. A change that must carry a moved output through
|
|
19
|
+
* its dependents in one rollout is what gated waves are for (#3049): each
|
|
20
|
+
* wave is planned after the one before it applied.
|
|
21
|
+
*
|
|
22
|
+
* ## Finishing an apply that failed partway
|
|
23
|
+
*
|
|
24
|
+
* {@link resumePrSet} (#3464) is fan-out's resume (#2417, #3049) for a pull
|
|
25
|
+
* request. The attempt record (`./fan-out-record.ts`) keeps the change set
|
|
26
|
+
* the gate approved and the components that applied. A re-run on the same
|
|
27
|
+
* commit narrows the derivation to what is left (`remainingFanOut`), plans
|
|
28
|
+
* only that against the outputs the approved plans read, and checks each
|
|
29
|
+
* member it plans against the approved set. When every one is covered, the
|
|
30
|
+
* gate is decided against the approved digest, which still stands, and only
|
|
31
|
+
* the rest applies. Planning everything again would give the applied members
|
|
32
|
+
* empty plans and the set a new digest, and so ask for a second approval of
|
|
33
|
+
* work already approved.
|
|
34
|
+
*/
|
|
35
|
+
import { composeChangeSet, verifyChangeSetDigest } from "../change-set.js";
|
|
36
|
+
import { evaluateGate } from "../op/gate.js";
|
|
37
|
+
import { memberCounts, PR_REPORT_CONTRACT, PR_REPORT_SCHEMA_ID, } from "../pr-loop.js";
|
|
38
|
+
import { deployContext } from "./driver.js";
|
|
39
|
+
import { deployUnits } from "./deploy-units.js";
|
|
40
|
+
import { runFanOut } from "./fan-out-run.js";
|
|
41
|
+
import { remainingFanOut } from "./fan-out.js";
|
|
42
|
+
import { planWaveComponent, readComponentOutputs } from "./wave-plan.js";
|
|
43
|
+
/** A failed component's members: the units its steps target, else the component itself. */
|
|
44
|
+
function failedParts(component, error) {
|
|
45
|
+
const units = deployUnits(component.deploy).map((u) => u.unit);
|
|
46
|
+
return (units.length > 0 ? units : [component.name]).map((member) => ({
|
|
47
|
+
member: { member, lexicon: "chant", planner: "chant", status: "failed", error, planDigest: null, holes: [] },
|
|
48
|
+
entries: [],
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Plan every component in `plan.order`, a wave at a time, each against the
|
|
53
|
+
* outputs its dependencies have now. Never throws for a component that fails
|
|
54
|
+
* to plan: it becomes a failed member, and `failed` is set.
|
|
55
|
+
*/
|
|
56
|
+
export async function planPrSet(options) {
|
|
57
|
+
const byName = new Map(options.components.map((c) => [c.name, c]));
|
|
58
|
+
const outputs = { ...(options.seededOutputs ?? {}) };
|
|
59
|
+
const read = new Set(Object.keys(outputs));
|
|
60
|
+
const parts = [];
|
|
61
|
+
const componentOf = new Map();
|
|
62
|
+
const plans = {};
|
|
63
|
+
let failed = false;
|
|
64
|
+
for (const wave of options.plan.waves) {
|
|
65
|
+
// The dependencies' outputs first, each read once. A dependency that
|
|
66
|
+
// cannot say leaves its references unresolved, which its dependent's
|
|
67
|
+
// plan reports if it needs them.
|
|
68
|
+
for (const name of wave) {
|
|
69
|
+
for (const dep of byName.get(name)?.dependsOn ?? []) {
|
|
70
|
+
if (read.has(dep) || !byName.has(dep))
|
|
71
|
+
continue;
|
|
72
|
+
read.add(dep);
|
|
73
|
+
const found = await readComponentOutputs(byName.get(dep), options.registry, deployContext(options, dep), outputs);
|
|
74
|
+
if (found)
|
|
75
|
+
outputs[dep] = found;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const planned = await Promise.all(wave.map((name) => planWaveComponent(byName.get(name), options.registry, deployContext(options, name), outputs)));
|
|
79
|
+
for (const p of planned) {
|
|
80
|
+
const component = byName.get(p.component);
|
|
81
|
+
if ("error" in p) {
|
|
82
|
+
failed = true;
|
|
83
|
+
for (const part of failedParts(component, p.error)) {
|
|
84
|
+
parts.push(part);
|
|
85
|
+
componentOf.set(part.member.member, p.component);
|
|
86
|
+
}
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
plans[p.component] = p.plans;
|
|
90
|
+
for (const part of p.parts) {
|
|
91
|
+
parts.push(part);
|
|
92
|
+
componentOf.set(part.member.member, p.component);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const doc = composeChangeSet(parts);
|
|
97
|
+
const members = doc.members.map((m) => ({
|
|
98
|
+
member: m.member,
|
|
99
|
+
component: componentOf.get(m.member) ?? m.member,
|
|
100
|
+
planDigest: m.planDigest,
|
|
101
|
+
status: m.status === "failed" ? "plan-failed" : "planned",
|
|
102
|
+
counts: memberCounts(doc, m.member),
|
|
103
|
+
...(m.error ? { error: m.error } : {}),
|
|
104
|
+
}));
|
|
105
|
+
return { doc, members, plans, outputs, failed };
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* A ledger that reads the real one and records nothing. The plan stage
|
|
109
|
+
* decides the gate only to say where the approval stands; it runs the pull
|
|
110
|
+
* request's own code and holds no write access to `chant/lifecycle`.
|
|
111
|
+
*/
|
|
112
|
+
export function readOnlyLedger(port) {
|
|
113
|
+
return {
|
|
114
|
+
read: (op) => port.read(op),
|
|
115
|
+
...(port.approvalRule ? { approvalRule: (gate, at) => port.approvalRule(gate, at) } : {}),
|
|
116
|
+
async appendPending(input) {
|
|
117
|
+
return { record: { version: 1, kind: "pending", ...input }, pushed: false, pushWarning: "not recorded: the plan stage writes nothing" };
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/** Where the approval stands, as the report says it. */
|
|
122
|
+
export function approvalOf(check) {
|
|
123
|
+
if (check.satisfied) {
|
|
124
|
+
const by = check.approvals?.length ? check.approvals.map((r) => r.resolvedBy) : [check.resolution.resolvedBy];
|
|
125
|
+
return { status: "approved", approvedBy: [...new Set(by)] };
|
|
126
|
+
}
|
|
127
|
+
if (check.mismatch)
|
|
128
|
+
return { status: "changed", ...(check.mismatch.approved ? { approved: check.mismatch.approved } : {}) };
|
|
129
|
+
return { status: "pending" };
|
|
130
|
+
}
|
|
131
|
+
/** Decide the pull request's gate against `digest`. */
|
|
132
|
+
export async function decidePrGate(port, input) {
|
|
133
|
+
return evaluateGate(port, {
|
|
134
|
+
op: input.op,
|
|
135
|
+
gate: input.gate,
|
|
136
|
+
planDigest: input.digest,
|
|
137
|
+
...(input.description ? { description: input.description } : {}),
|
|
138
|
+
...(input.now ? { now: input.now } : {}),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Who approved the gate but has no standing approving review on the pull
|
|
143
|
+
* request. Each approval's `resolvedBy` is compared with the forge's own
|
|
144
|
+
* naming of each approver (#3163's form).
|
|
145
|
+
*/
|
|
146
|
+
export function approversWithoutReview(approvedBy, reviewers) {
|
|
147
|
+
const norm = (s) => s.trim().toLowerCase();
|
|
148
|
+
const allowed = new Set(reviewers.map(norm));
|
|
149
|
+
return approvedBy.filter((by) => !allowed.has(norm(by)));
|
|
150
|
+
}
|
|
151
|
+
const sameJson = (a, b) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null);
|
|
152
|
+
/**
|
|
153
|
+
* Apply the approved plans in dependency order. A failed component blocks
|
|
154
|
+
* its dependents and nothing else (`runFanOut`).
|
|
155
|
+
*/
|
|
156
|
+
export async function applyPrSet(options) {
|
|
157
|
+
const before = options.set.outputs;
|
|
158
|
+
const run = await runFanOut(options.plan, options.components, options.registry, {
|
|
159
|
+
env: options.env,
|
|
160
|
+
...(options.vars ? { vars: options.vars } : {}),
|
|
161
|
+
plans: options.set.plans,
|
|
162
|
+
componentOutputs: { ...before },
|
|
163
|
+
...(options.onProgress ? { onProgress: options.onProgress } : {}),
|
|
164
|
+
...(options.onComponentSettled ? { onComponentSettled: options.onComponentSettled } : {}),
|
|
165
|
+
});
|
|
166
|
+
const completed = new Set(run.completed);
|
|
167
|
+
const priorCompleted = new Set(options.resumed?.completed ?? []);
|
|
168
|
+
/**
|
|
169
|
+
* Whether a dependency's outputs moved from what the plans read: by this
|
|
170
|
+
* run's apply, or by the earlier attempt's when the record kept them.
|
|
171
|
+
*/
|
|
172
|
+
const movedBy = (dep) => {
|
|
173
|
+
if (completed.has(dep))
|
|
174
|
+
return !sameJson(before[dep], run.componentOutputs[dep]);
|
|
175
|
+
const earlier = options.resumed?.outputs;
|
|
176
|
+
return priorCompleted.has(dep) && earlier !== undefined && dep in earlier && !sameJson(before[dep], earlier[dep]);
|
|
177
|
+
};
|
|
178
|
+
const blocked = new Set(run.blocked.map((b) => b.component));
|
|
179
|
+
const errorOf = (component) => {
|
|
180
|
+
const result = run.results.find((r) => r.component === component);
|
|
181
|
+
if (result?.status === "gated")
|
|
182
|
+
return `stopped at its own gate ${result.gate?.gate ?? ""}`.trim();
|
|
183
|
+
return result?.records.find((r) => r.status === "fail")?.error;
|
|
184
|
+
};
|
|
185
|
+
const byName = new Map(options.components.map((c) => [c.name, c]));
|
|
186
|
+
const members = options.set.members.map((m) => {
|
|
187
|
+
if (priorCompleted.has(m.component))
|
|
188
|
+
return { ...m, status: "applied" };
|
|
189
|
+
if (completed.has(m.component)) {
|
|
190
|
+
const moved = (byName.get(m.component)?.dependsOn ?? [])
|
|
191
|
+
.filter(movedBy)
|
|
192
|
+
.sort();
|
|
193
|
+
return { ...m, status: "applied", ...(moved.length > 0 ? { inputsMoved: moved } : {}) };
|
|
194
|
+
}
|
|
195
|
+
if (blocked.has(m.component))
|
|
196
|
+
return { ...m, status: "blocked" };
|
|
197
|
+
const error = errorOf(m.component);
|
|
198
|
+
return { ...m, status: "failed", ...(error ? { error } : {}) };
|
|
199
|
+
});
|
|
200
|
+
return { members, status: run.status === "ok" ? "applied" : "failed", run };
|
|
201
|
+
}
|
|
202
|
+
const entryKey = (e) => `${e.member}\u0000${e.address}\u0000${e.deposed ?? ""}`;
|
|
203
|
+
/**
|
|
204
|
+
* Why `member`'s fresh plan is not covered by the approved change set, or
|
|
205
|
+
* `undefined` when it is. A member left over from a partial apply is covered
|
|
206
|
+
* when it plans to the digest that was approved, or when every change it
|
|
207
|
+
* plans now is one the approved plan made:
|
|
208
|
+
*
|
|
209
|
+
* - an entry at the same address with the same action, or a `create` or a
|
|
210
|
+
* `delete` where a `replace` was approved (the other half applied);
|
|
211
|
+
* - each attribute it writes was written by the approved entry, to the same
|
|
212
|
+
* value or to one the approved plan knew only after apply. A sensitive
|
|
213
|
+
* attribute carries no value to compare, so it is covered only where the
|
|
214
|
+
* approved entry wrote that attribute as sensitive too. On a `create` left
|
|
215
|
+
* from a `replace`, an attribute the replace did not change is not compared;
|
|
216
|
+
* - each side effect is one the approved plan ran.
|
|
217
|
+
*
|
|
218
|
+
* A member with holes the approved plan did not have is never covered by its
|
|
219
|
+
* entries, since its entries may not say everything it will do.
|
|
220
|
+
*/
|
|
221
|
+
export function planCoveredBy(approved, fresh, member) {
|
|
222
|
+
const was = approved.members.find((m) => m.member === member);
|
|
223
|
+
const now = fresh.members.find((m) => m.member === member);
|
|
224
|
+
if (!now)
|
|
225
|
+
return undefined;
|
|
226
|
+
if (!was)
|
|
227
|
+
return `${member} was not in the approved plan`;
|
|
228
|
+
if (now.status === "failed" || now.planDigest === null)
|
|
229
|
+
return `${member} failed to plan${now.error ? `: ${now.error}` : ""}`;
|
|
230
|
+
if (was.planDigest !== null && now.planDigest === was.planDigest)
|
|
231
|
+
return undefined;
|
|
232
|
+
if (was.status === "failed")
|
|
233
|
+
return `${member} had no approved plan`;
|
|
234
|
+
const knownHoles = new Set(was.holes.map((h) => h.address));
|
|
235
|
+
const newHole = now.holes.find((h) => !knownHoles.has(h.address));
|
|
236
|
+
if (newHole)
|
|
237
|
+
return `${member} cannot read ${newHole.address} (${newHole.reason}), so its plan cannot be checked against the approved one`;
|
|
238
|
+
const approvedEntries = new Map(approved.entries.filter((e) => e.member === member).map((e) => [entryKey(e), e]));
|
|
239
|
+
for (const e of fresh.entries) {
|
|
240
|
+
if (e.member !== member || e.action === "no-op" || e.action === "read")
|
|
241
|
+
continue;
|
|
242
|
+
// A create-before-destroy replace whose create applied leaves the old
|
|
243
|
+
// object deposed, and the plan now deletes it under a deposed key.
|
|
244
|
+
const a = approvedEntries.get(entryKey(e)) ??
|
|
245
|
+
(e.action === "delete" && e.deposed ? approvedEntries.get(entryKey({ ...e, deposed: undefined })) : undefined);
|
|
246
|
+
if (!a)
|
|
247
|
+
return `${member} now plans to ${e.action} ${e.address}, which the approved plan did not`;
|
|
248
|
+
const halfReplace = a.action === "replace" && (e.action === "create" || e.action === "delete");
|
|
249
|
+
if (a.action !== e.action && !halfReplace) {
|
|
250
|
+
return `${member} now plans to ${e.action} ${e.address}, where the approved plan would ${a.action} it`;
|
|
251
|
+
}
|
|
252
|
+
const approvedAttrs = new Map(a.attributes.map((attr) => [attr.path, attr]));
|
|
253
|
+
for (const attr of e.attributes) {
|
|
254
|
+
const at = `${e.address}.${attr.path}`;
|
|
255
|
+
const prior = approvedAttrs.get(attr.path);
|
|
256
|
+
if (!prior) {
|
|
257
|
+
if (halfReplace && e.action === "create")
|
|
258
|
+
continue;
|
|
259
|
+
return `${member} now writes ${at}, which the approved plan did not`;
|
|
260
|
+
}
|
|
261
|
+
if (attr.sensitive) {
|
|
262
|
+
if (!prior.sensitive)
|
|
263
|
+
return `${member} now writes ${at} as sensitive, so it cannot be compared with the approved value`;
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
if (prior.sensitive)
|
|
267
|
+
return `${member} writes ${at}, which the approved plan wrote as sensitive, so it cannot be compared`;
|
|
268
|
+
if (prior.unknown)
|
|
269
|
+
continue;
|
|
270
|
+
if (attr.unknown)
|
|
271
|
+
return `${member} now writes ${at} with a value known only after apply, where the approved plan knew it`;
|
|
272
|
+
if (!sameJson(attr.after, prior.after))
|
|
273
|
+
return `${member} now writes ${at} to a different value than the approved plan`;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
const approvedEffects = new Set((approved.sideEffects ?? []).filter((s) => s.member === member).map((s) => JSON.stringify([s.address, s.type, s.trigger ?? null, s.event ?? null])));
|
|
277
|
+
for (const s of fresh.sideEffects ?? []) {
|
|
278
|
+
if (s.member !== member)
|
|
279
|
+
continue;
|
|
280
|
+
if (!approvedEffects.has(JSON.stringify([s.address, s.type, s.trigger ?? null, s.event ?? null]))) {
|
|
281
|
+
return `${member} now runs ${s.address}, which the approved plan did not`;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Plan what an apply that failed partway left (#3464): narrow the plan by
|
|
288
|
+
* the components that applied, plan the rest against the outputs the
|
|
289
|
+
* approved plans read, and check each member against the approved change
|
|
290
|
+
* set ({@link planCoveredBy}). Covered, the result is the approved set with
|
|
291
|
+
* the new plans in it, to decide the gate against `record.digest` and hand
|
|
292
|
+
* to {@link applyPrSet}. Not covered, it says why, and the caller plans
|
|
293
|
+
* everything and asks for a fresh approval.
|
|
294
|
+
*
|
|
295
|
+
* The record now travels between CI jobs through a cache (#3543), so its
|
|
296
|
+
* change set has to be the one its digest names: the document's own digest
|
|
297
|
+
* is `record.digest`, and the document gives that digest. The digest binds
|
|
298
|
+
* the entries, holes and side effects {@link planCoveredBy} reads (#3555),
|
|
299
|
+
* so a record cannot widen what a re-planned member may do.
|
|
300
|
+
*/
|
|
301
|
+
export async function resumePrSet(options) {
|
|
302
|
+
const { record } = options;
|
|
303
|
+
if (record.changeSet.digest !== record.digest || !verifyChangeSetDigest(record.changeSet)) {
|
|
304
|
+
return { ok: false, reasons: [`the record's change set is not the one its digest ${record.digest} names`] };
|
|
305
|
+
}
|
|
306
|
+
const plan = remainingFanOut(options.plan, options.components, { completed: options.completed });
|
|
307
|
+
const fresh = await planPrSet({
|
|
308
|
+
components: options.components,
|
|
309
|
+
plan,
|
|
310
|
+
registry: options.registry,
|
|
311
|
+
env: options.env,
|
|
312
|
+
...(options.vars ? { vars: options.vars } : {}),
|
|
313
|
+
seededOutputs: { ...(options.seededOutputs ?? {}), ...options.record.planOutputs },
|
|
314
|
+
});
|
|
315
|
+
const reasons = fresh.doc.members
|
|
316
|
+
.map((m) => planCoveredBy(options.record.changeSet, fresh.doc, m.member))
|
|
317
|
+
.filter((r) => r !== undefined);
|
|
318
|
+
if (reasons.length > 0)
|
|
319
|
+
return { ok: false, reasons, fresh };
|
|
320
|
+
return {
|
|
321
|
+
ok: true,
|
|
322
|
+
plan,
|
|
323
|
+
fresh,
|
|
324
|
+
set: {
|
|
325
|
+
doc: options.record.changeSet,
|
|
326
|
+
members: options.record.members.map((m) => ({ ...m, status: "planned" })),
|
|
327
|
+
plans: fresh.plans,
|
|
328
|
+
outputs: options.record.planOutputs,
|
|
329
|
+
failed: false,
|
|
330
|
+
},
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
/** The report a stage writes. */
|
|
334
|
+
export function prReport(input) {
|
|
335
|
+
const changed = new Set(input.signal.changed);
|
|
336
|
+
return {
|
|
337
|
+
$schema: PR_REPORT_SCHEMA_ID,
|
|
338
|
+
contract: PR_REPORT_CONTRACT,
|
|
339
|
+
stage: input.stage,
|
|
340
|
+
pr: input.pr,
|
|
341
|
+
env: input.env,
|
|
342
|
+
...(input.member ? { member: input.member } : {}),
|
|
343
|
+
base: input.base,
|
|
344
|
+
head: input.head,
|
|
345
|
+
op: input.op,
|
|
346
|
+
gate: input.gate,
|
|
347
|
+
digest: input.set.doc.digest,
|
|
348
|
+
status: input.status,
|
|
349
|
+
...(input.refusal ? { refusal: input.refusal } : {}),
|
|
350
|
+
...(input.message ? { message: input.message } : {}),
|
|
351
|
+
...(input.resumed ? { resumed: { applied: [...input.resumed].sort() } } : {}),
|
|
352
|
+
approval: input.approval,
|
|
353
|
+
selection: {
|
|
354
|
+
changed: input.plan.order.filter((c) => changed.has(c)),
|
|
355
|
+
dependents: input.plan.order.filter((c) => !changed.has(c)),
|
|
356
|
+
unclaimed: input.signal.unclaimed,
|
|
357
|
+
indeterminate: input.plan.indeterminate,
|
|
358
|
+
waves: input.plan.waves,
|
|
359
|
+
},
|
|
360
|
+
members: input.members ?? input.set.members,
|
|
361
|
+
changeSet: input.set.doc,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset: `EcsFargateComponent` (#566, epic #551 §"6. Presets (Level 2 reuse)").
|
|
3
|
+
*
|
|
4
|
+
* The named-composition builder for the ALB/ECS shape
|
|
5
|
+
* (`../pilots/alb-ecs.pilot.ts`): `docker-build` -> `publish-image` ->
|
|
6
|
+
* `cfn-deploy` (importing a shared ALB's cross-stack outputs) ->
|
|
7
|
+
* `ecs-update-service` -> `wait-steady-state` + `health-gate`.
|
|
8
|
+
*
|
|
9
|
+
* There is no component-level `rollback` phase (#2576). The preset used to
|
|
10
|
+
* declare one holding a `rollback-previous` step with only `service` and
|
|
11
|
+
* `cluster`. The aws capability behind that kind rolls a service back to the
|
|
12
|
+
* `taskDefinition` it is given, and with none given it ran `aws ecs
|
|
13
|
+
* update-service` with no changes, so the phase restored nothing. The
|
|
14
|
+
* in-run unwind still calls each executed step's own rollback, and taking an
|
|
15
|
+
* environment back to an earlier recorded release is `chant components
|
|
16
|
+
* rollback <env> --component <name>` (#2531).
|
|
17
|
+
*
|
|
18
|
+
* This is Level 2 reuse over Level 1 raw capabilities: a component that looks
|
|
19
|
+
* like this composes `EcsFargateComponent({ ... })` directly; the odd case
|
|
20
|
+
* that needs something extra starts from the same shape and drops to raw
|
|
21
|
+
* `phase()`/capability `Step`s where it is special (see
|
|
22
|
+
* docs/components/capabilities.mdx#presets--reuse-without-a-closed-set) —
|
|
23
|
+
* `./ecs-fargate.test.ts` demonstrates exactly that by re-deriving
|
|
24
|
+
* `alb-ecs.pilot.ts`'s `searchService` component from this preset and
|
|
25
|
+
* asserting the two project to the identical JSON contract.
|
|
26
|
+
*/
|
|
27
|
+
import { phase, stackOutput } from "../component.js";
|
|
28
|
+
/**
|
|
29
|
+
* Expand an ECS/Fargate service behind an ALB to its standard
|
|
30
|
+
* Publish/Apply/Verify composition — the 80% shape `alb-ecs.pilot.ts` is the
|
|
31
|
+
* hand-composed reference for. Returns a full `Component`; a caller that
|
|
32
|
+
* needs one extra step (an additional Apply capability, a different Verify
|
|
33
|
+
* shape) spreads the result and edits `deploy`/`rollback` directly — the
|
|
34
|
+
* preset is a starting composition, not a closed strategy object.
|
|
35
|
+
*/
|
|
36
|
+
export function EcsFargateComponent(config) {
|
|
37
|
+
const service = config.service ?? config.name;
|
|
38
|
+
const template = config.template ?? `archive:${config.name}.template.json`;
|
|
39
|
+
const cluster = config.cluster ?? "$env.cluster";
|
|
40
|
+
const registry = config.registry ?? "$env.registry";
|
|
41
|
+
const sharedAlbOutputs = config.sharedAlbStack
|
|
42
|
+
? {
|
|
43
|
+
listenerArn: stackOutput(config.sharedAlbStack, "ListenerArn"),
|
|
44
|
+
clusterArn: stackOutput(config.sharedAlbStack, "ClusterArn"),
|
|
45
|
+
subnets: stackOutput(config.sharedAlbStack, "Subnets"),
|
|
46
|
+
}
|
|
47
|
+
: undefined;
|
|
48
|
+
const inputs = sharedAlbOutputs || config.extraInputs ? { ...sharedAlbOutputs, ...config.extraInputs } : undefined;
|
|
49
|
+
const dependsOn = [...(config.sharedAlbStack ? [config.sharedAlbStack] : []), ...(config.dependsOn ?? [])];
|
|
50
|
+
return {
|
|
51
|
+
name: config.name,
|
|
52
|
+
archetype: "service",
|
|
53
|
+
dependsOn,
|
|
54
|
+
build: { kind: "docker-build", context: config.context ?? ".", into: "archive" },
|
|
55
|
+
deploy: [
|
|
56
|
+
phase("Publish", [{ kind: "publish-image", from: "archive", to: registry }]),
|
|
57
|
+
phase("Apply", [
|
|
58
|
+
{
|
|
59
|
+
kind: "cfn-deploy",
|
|
60
|
+
template,
|
|
61
|
+
imageRef: "@Publish.digest",
|
|
62
|
+
...(inputs ? { inputs } : {}),
|
|
63
|
+
},
|
|
64
|
+
{ kind: "ecs-update-service", cluster, service },
|
|
65
|
+
]),
|
|
66
|
+
phase("Verify", [
|
|
67
|
+
{ kind: "wait-steady-state", service },
|
|
68
|
+
{ kind: "health-gate", path: config.healthPath },
|
|
69
|
+
]),
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset library (#566, epic #551 §"6. Presets (Level 2 reuse)") — named
|
|
3
|
+
* composition builders for the common component shapes. Each preset expands
|
|
4
|
+
* to a full, valid `Component` (../component.ts): the same typed authoring
|
|
5
|
+
* form and JSON contract every hand-composed component projects to, so a
|
|
6
|
+
* preset-based component and a hand-composed one are indistinguishable to
|
|
7
|
+
* `projectToJson`, schema validation, lint, and the driver.
|
|
8
|
+
*
|
|
9
|
+
* This is Level 2 reuse over Level 1 raw capabilities
|
|
10
|
+
* (docs/components/capabilities.mdx#presets--reuse-without-a-closed-set): a
|
|
11
|
+
* component that matches one of these shapes calls the preset directly; the
|
|
12
|
+
* odd one that needs something extra spreads the returned `Component` and
|
|
13
|
+
* edits `deploy`/`rollback` where it is special. Presets remove composition
|
|
14
|
+
* copy-paste (the COMP007 lint hint) without creating a closed strategy set —
|
|
15
|
+
* see ./ecs-fargate.test.ts, ./lambda.test.ts, and
|
|
16
|
+
* ./single-host-compose.test.ts, each of which re-derives an existing
|
|
17
|
+
* hand-composed pilot/fixture from its preset and asserts the two project to
|
|
18
|
+
* the identical JSON contract.
|
|
19
|
+
*
|
|
20
|
+
* Deliberately not exhaustive: three presets covering the three archetypes'
|
|
21
|
+
* most common shapes (a load-balanced container service, a container-image
|
|
22
|
+
* Lambda function, and a registry-less single-host compose deploy), per
|
|
23
|
+
* #566's explicit scope ("start with the common shapes; an exhaustive
|
|
24
|
+
* catalog is out of scope").
|
|
25
|
+
*/
|
|
26
|
+
export { EcsFargateComponent } from "./ecs-fargate.js";
|
|
27
|
+
export { LambdaComponent } from "./lambda.js";
|
|
28
|
+
export { SingleHostComposeComponent, } from "./single-host-compose.js";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset: `LambdaComponent` (#566, epic #551 §"6. Presets (Level 2 reuse)").
|
|
3
|
+
*
|
|
4
|
+
* The named-composition builder for the container-image Lambda shape
|
|
5
|
+
* (`../pilots/lambda.pilot.ts`): `docker-build` -> `publish-image` ->
|
|
6
|
+
* `lambda-deploy` -> `health-gate` against the function's alias. Distinct
|
|
7
|
+
* from `EcsFargateComponent`'s apply family on purpose — no CloudFormation
|
|
8
|
+
* stack in Apply at all, matching the pilot's documented "first pilot whose
|
|
9
|
+
* Apply phase contains no cfn-deploy" shape.
|
|
10
|
+
*/
|
|
11
|
+
import { phase } from "../component.js";
|
|
12
|
+
/**
|
|
13
|
+
* Expand a container-image AWS Lambda function to its standard
|
|
14
|
+
* Publish/Apply/Verify composition — the reference shape
|
|
15
|
+
* `lambda.pilot.ts` hand-composes. Reuses `docker-build`/`publish-image`
|
|
16
|
+
* unchanged from `EcsFargateComponent`'s build axis (build + promote-by-digest
|
|
17
|
+
* is identical for a container-image Lambda); only the apply/verify shape
|
|
18
|
+
* differs.
|
|
19
|
+
*/
|
|
20
|
+
export function LambdaComponent(config) {
|
|
21
|
+
const functionName = config.functionName ?? config.name;
|
|
22
|
+
const alias = config.alias ?? "live";
|
|
23
|
+
return {
|
|
24
|
+
name: config.name,
|
|
25
|
+
archetype: "service",
|
|
26
|
+
dependsOn: config.dependsOn ?? [],
|
|
27
|
+
build: { kind: "docker-build", context: config.context ?? ".", into: "archive" },
|
|
28
|
+
deploy: [
|
|
29
|
+
phase("Publish", [{ kind: "publish-image", from: "archive", to: config.registry ?? "$env.registry" }]),
|
|
30
|
+
phase("Apply", [{ kind: "lambda-deploy", functionName, codeRef: "@Publish.uri", alias }]),
|
|
31
|
+
phase("Verify", [{ kind: "health-gate", path: "@Apply.functionArn" }]),
|
|
32
|
+
],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset: `SingleHostComposeComponent` (#566, epic #551 §"6. Presets (Level 2
|
|
3
|
+
* reuse)").
|
|
4
|
+
*
|
|
5
|
+
* The named-composition builder for the registry-less single-host Docker
|
|
6
|
+
* Compose shape (`../__fixtures__/single-host-compose.json`): `docker-build`
|
|
7
|
+
* -> `load-image-on-host` (registry-free promotion, see
|
|
8
|
+
* ../verbs/publish.ts's `load-image-on-host` docstring) -> `copy-to-host` the
|
|
9
|
+
* compose file -> `remote-exec` a `docker compose up -d` -> `wait-endpoint`
|
|
10
|
+
* against the service's health path. This is the N=1 case of the fan-out
|
|
11
|
+
* shape `neo4j-fanout.pilot.ts` composes by hand at N=3 — single-host compose
|
|
12
|
+
* and a host fleet are the same composition shape at different N (see
|
|
13
|
+
* docs/components/composition-and-wiring.mdx#fan-out-is-composition-not-orchestrator-knowledge).
|
|
14
|
+
*/
|
|
15
|
+
import { phase } from "../component.js";
|
|
16
|
+
/**
|
|
17
|
+
* Expand a single-host Docker Compose deploy to its standard
|
|
18
|
+
* Publish/Apply/Verify composition. No registry ever in the path: the built
|
|
19
|
+
* image tarball is copied straight onto the host and `docker load`ed there
|
|
20
|
+
* (`load-image-on-host`), the compose file follows the same way, and
|
|
21
|
+
* `docker compose up -d` runs via `remote-exec` — the registry-less backend
|
|
22
|
+
* axis documented in docs/components/build-archive.mdx.
|
|
23
|
+
*/
|
|
24
|
+
export function SingleHostComposeComponent(config) {
|
|
25
|
+
const host = config.host ?? "$env.host";
|
|
26
|
+
const hostComposePath = config.hostComposePath ?? `/opt/${config.name}/compose.yaml`;
|
|
27
|
+
return {
|
|
28
|
+
name: config.name,
|
|
29
|
+
archetype: "service",
|
|
30
|
+
dependsOn: config.dependsOn ?? [],
|
|
31
|
+
build: { kind: "docker-build", context: config.context ?? ".", into: "archive" },
|
|
32
|
+
deploy: [
|
|
33
|
+
phase("Publish", [{ kind: "load-image-on-host", from: "archive", host }]),
|
|
34
|
+
phase("Apply", [
|
|
35
|
+
{ kind: "copy-to-host", from: config.composeFile ?? "archive:compose.yaml", to: hostComposePath, host },
|
|
36
|
+
{ kind: "remote-exec", host, command: `docker compose -f ${hostComposePath} up -d` },
|
|
37
|
+
]),
|
|
38
|
+
phase("Verify", [{ kind: "wait-endpoint", host, path: config.healthPath, port: config.healthPort }]),
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|