@intentius/chant 0.124.13 → 0.124.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.d.ts +6 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +669 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.d.ts +24 -2
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +361 -0
- package/dist/child-project.js +21 -0
- package/dist/ci-jobs.d.ts +227 -0
- package/dist/ci-jobs.d.ts.map +1 -0
- package/dist/ci-jobs.js +448 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +135 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.d.ts +10 -2
- package/dist/composite.d.ts.map +1 -1
- package/dist/composite.js +313 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.d.ts +2 -1
- package/dist/discovery/collect.d.ts.map +1 -1
- package/dist/discovery/collect.js +223 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4073 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/host-composite.d.ts +35 -0
- package/dist/discovery/host-composite.d.ts.map +1 -0
- package/dist/discovery/host-composite.js +93 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +20 -9
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +313 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.d.ts +69 -2
- package/dist/lifecycle/gate-audit.d.ts.map +1 -1
- package/dist/lifecycle/gate-audit.js +415 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +24 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +201 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.d.ts +1 -1
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.d.ts +8 -3
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +67 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.d.ts +28 -16
- package/dist/op/activities/reconcile.d.ts.map +1 -1
- package/dist/op/activities/reconcile.js +1011 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.d.ts +1 -1
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts +7 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.js +119 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
- package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +462 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.d.ts +3 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +202 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/class-data.d.ts +84 -0
- package/dist/workspace/class-data.d.ts.map +1 -0
- package/dist/workspace/class-data.js +238 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.d.ts +3 -7
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +553 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +4 -11
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +162 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/build.ts +8 -0
- package/src/change-set.test.ts +48 -0
- package/src/change-set.ts +52 -2
- package/src/ci-jobs.test.ts +49 -0
- package/src/ci-jobs.ts +515 -0
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/pr-pipeline.ts +3 -2
- package/src/components/sandbox/driver.ts +3 -1
- package/src/composite.ts +15 -3
- package/src/config-import.ts +3 -0
- package/src/discovery/collect.ts +15 -1
- package/src/discovery/fold-build-parity.test.ts +71 -0
- package/src/discovery/fold-import.ts +25 -127
- package/src/discovery/fold-project-provenance.test.ts +21 -4
- package/src/discovery/host-composite.ts +101 -0
- package/src/discovery/import.ts +2 -0
- package/src/discovery/index.ts +11 -1
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +5 -4
- package/src/gate-decision-identity.test.ts +59 -6
- package/src/gate-decision.ts +81 -21
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-audit.test.ts +55 -1
- package/src/lifecycle/gate-audit.ts +116 -3
- package/src/lifecycle/gate-ledger.test.ts +20 -1
- package/src/lifecycle/gate-ledger.ts +33 -1
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +11 -3
- package/src/op/activities/lexicon-upgrade.test.ts +2 -0
- package/src/op/activities/reconcile.test.ts +62 -2
- package/src/op/activities/reconcile.ts +46 -22
- package/src/op/builders.ts +1 -1
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-run.ts +4 -3
- package/src/op/op-waves.test.ts +2 -0
- package/src/op/work-lease-run.test.ts +12 -4
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/__fixtures__/contract-repo.ts +17 -1
- package/src/workspace/__fixtures__/sessions.ts +3 -3
- package/src/workspace/change-set.schema.json +5 -3
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/ci-green-workflow.test.ts +4 -4
- package/src/workspace/ci-green-workflow.ts +5 -2
- package/src/workspace/class-data.test.ts +64 -0
- package/src/workspace/class-data.ts +236 -0
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +7 -36
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +12 -95
- package/src/workspace/records-formats.test.ts +7 -2
- package/src/workspace/records-sessions-write.test.ts +3 -3
- package/src/workspace/status-contract.e2e.test.ts +37 -0
- package/src/workspace/status-contract.test.ts +23 -21
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A source tree as a release artifact (#2782): one directory of a commit,
|
|
3
|
+
* archived with `git archive`, and read back only when its bytes still hash
|
|
4
|
+
* to the digest a gate approved.
|
|
5
|
+
*
|
|
6
|
+
* `git archive <commit> -- <dir>` gives every entry the commit's own
|
|
7
|
+
* timestamp, so the same commit always archives to the same bytes, and the
|
|
8
|
+
* archive's sha256 names the tree exactly. A release plan carries that digest,
|
|
9
|
+
* the ship gate approves the plan, and whatever ships the release reads the
|
|
10
|
+
* archive through {@link readSourceArchive}, which refuses bytes that do not
|
|
11
|
+
* hash to the approved digest.
|
|
12
|
+
*
|
|
13
|
+
* Pure except for the git and file reads each function names.
|
|
14
|
+
*/
|
|
15
|
+
import { execFileSync } from "node:child_process";
|
|
16
|
+
import { createHash } from "node:crypto";
|
|
17
|
+
import { mkdirSync, readFileSync, realpathSync, writeFileSync } from "node:fs";
|
|
18
|
+
import { dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
19
|
+
export const sha256Digest = (data) => `sha256:${createHash("sha256").update(data).digest("hex")}`;
|
|
20
|
+
function git(cwd, args) {
|
|
21
|
+
return execFileSync("git", args, { cwd, maxBuffer: 1024 * 1024 * 1024, stdio: ["ignore", "pipe", "pipe"] });
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Archive `dir` (relative to `cwd`) as committed at `ref` (default HEAD) to
|
|
25
|
+
* `out` (default `<cwd>/dist/releases/<commit>.tar`). Uncommitted changes are
|
|
26
|
+
* not in it: a release ships what is committed. Running it again for the same
|
|
27
|
+
* commit writes the same bytes.
|
|
28
|
+
*/
|
|
29
|
+
export function archiveSourceTree(opts) {
|
|
30
|
+
const cwd = resolve(opts.cwd ?? process.cwd());
|
|
31
|
+
// git names the root by its real path, so the directory is resolved the same way.
|
|
32
|
+
const root = realpathSync(git(cwd, ["rev-parse", "--show-toplevel"]).toString("utf-8").trim());
|
|
33
|
+
const commit = git(cwd, ["rev-parse", "--verify", `${opts.ref ?? "HEAD"}^{commit}`]).toString("utf-8").trim();
|
|
34
|
+
const target = resolve(realpathSync(cwd), opts.dir);
|
|
35
|
+
const dir = relative(root, target).split("\\").join("/") || ".";
|
|
36
|
+
if (dir.startsWith("..") || isAbsolute(dir))
|
|
37
|
+
throw new Error(`${opts.dir} is outside the repository at ${root}`);
|
|
38
|
+
const spec = dir === "." ? commit : `${commit}:${dir}`;
|
|
39
|
+
try {
|
|
40
|
+
git(root, ["cat-file", "-e", spec]);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
throw new Error(`${dir} is not in commit ${commit.slice(0, 12)}: commit it before releasing it`);
|
|
44
|
+
}
|
|
45
|
+
const data = git(root, ["archive", "--format=tar", commit, "--", dir]);
|
|
46
|
+
const archive = resolve(cwd, opts.out ?? join("dist", "releases", `${commit}.tar`));
|
|
47
|
+
mkdirSync(dirname(archive), { recursive: true });
|
|
48
|
+
writeFileSync(archive, data);
|
|
49
|
+
const files = tarEntries(data).filter((e) => e.type === "file").length;
|
|
50
|
+
return { digest: sha256Digest(data), archive, commit, dir, files, bytes: data.length };
|
|
51
|
+
}
|
|
52
|
+
const field = (block, at, len) => {
|
|
53
|
+
const raw = block.subarray(at, at + len);
|
|
54
|
+
const end = raw.indexOf(0);
|
|
55
|
+
return raw.subarray(0, end < 0 ? raw.length : end).toString("utf-8");
|
|
56
|
+
};
|
|
57
|
+
const octal = (block, at, len) => parseInt(field(block, at, len).trim() || "0", 8);
|
|
58
|
+
/** The records of a pax header: `<len> key=value\n`. */
|
|
59
|
+
function paxRecords(data) {
|
|
60
|
+
const out = {};
|
|
61
|
+
let at = 0;
|
|
62
|
+
while (at < data.length) {
|
|
63
|
+
const space = data.indexOf(0x20, at);
|
|
64
|
+
if (space < 0)
|
|
65
|
+
break;
|
|
66
|
+
const len = parseInt(data.subarray(at, space).toString("utf-8"), 10);
|
|
67
|
+
if (!Number.isFinite(len) || len <= 0)
|
|
68
|
+
break;
|
|
69
|
+
const record = data.subarray(space + 1, at + len - 1).toString("utf-8");
|
|
70
|
+
const eq = record.indexOf("=");
|
|
71
|
+
if (eq > 0)
|
|
72
|
+
out[record.slice(0, eq)] = record.slice(eq + 1);
|
|
73
|
+
at += len;
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
/** The entries of a ustar/pax archive, as `git archive` writes one. */
|
|
78
|
+
function tarEntries(tar) {
|
|
79
|
+
const out = [];
|
|
80
|
+
let at = 0;
|
|
81
|
+
let pax = {};
|
|
82
|
+
while (at + 512 <= tar.length) {
|
|
83
|
+
const header = tar.subarray(at, at + 512);
|
|
84
|
+
if (header.every((b) => b === 0))
|
|
85
|
+
break;
|
|
86
|
+
const size = octal(header, 124, 12);
|
|
87
|
+
const flag = String.fromCharCode(header[156] || 0x30);
|
|
88
|
+
const data = tar.subarray(at + 512, at + 512 + size);
|
|
89
|
+
at += 512 + Math.ceil(size / 512) * 512;
|
|
90
|
+
if (flag === "x") {
|
|
91
|
+
pax = paxRecords(data);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (flag === "g")
|
|
95
|
+
continue;
|
|
96
|
+
const prefix = field(header, 345, 155);
|
|
97
|
+
const name = pax.path ?? (prefix ? `${prefix}/${field(header, 0, 100)}` : field(header, 0, 100));
|
|
98
|
+
pax = {};
|
|
99
|
+
const type = flag === "0" || flag === "\0" || flag === "7" ? "file" : flag === "5" ? "dir" : flag === "2" ? "symlink" : "other";
|
|
100
|
+
out.push({ type, path: name, mode: octal(header, 100, 8), data: Buffer.from(data) });
|
|
101
|
+
}
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The files of an archive `archiveSourceTree` wrote, relative to the directory
|
|
106
|
+
* it archived, once its bytes hash to `digest`. Throws, naming both digests,
|
|
107
|
+
* when they do not: whatever would ship them is not what was approved.
|
|
108
|
+
*
|
|
109
|
+
* A symbolic link in the tree is refused rather than followed or dropped.
|
|
110
|
+
*/
|
|
111
|
+
export function readSourceArchive(opts) {
|
|
112
|
+
const data = readFileSync(opts.archive);
|
|
113
|
+
const actual = sha256Digest(data);
|
|
114
|
+
if (actual !== opts.digest) {
|
|
115
|
+
throw new Error(`${opts.archive} is ${actual}, not the approved ${opts.digest}: it is not the tree the release was planned from`);
|
|
116
|
+
}
|
|
117
|
+
const entries = tarEntries(data);
|
|
118
|
+
const dir = opts.dir && opts.dir !== "." ? `${opts.dir.replace(/\/+$/, "")}/` : "";
|
|
119
|
+
const files = [];
|
|
120
|
+
for (const e of entries) {
|
|
121
|
+
if (e.type === "dir")
|
|
122
|
+
continue;
|
|
123
|
+
if (!e.path.startsWith(dir))
|
|
124
|
+
throw new Error(`${opts.archive} holds ${e.path}, outside ${dir || "its root"}`);
|
|
125
|
+
const path = e.path.slice(dir.length);
|
|
126
|
+
if (e.type !== "file")
|
|
127
|
+
throw new Error(`${opts.archive} holds ${path}, which is not a regular file; a source release ships regular files only`);
|
|
128
|
+
files.push({ path, executable: (e.mode & 0o111) !== 0, data: e.data });
|
|
129
|
+
}
|
|
130
|
+
return files;
|
|
131
|
+
}
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step-output references — chant #1290 ("A step cannot reference a prior
|
|
3
|
+
* step's output, so values leave an Op only as search attributes").
|
|
4
|
+
*
|
|
5
|
+
* An Op's steps run in a fixed sequence chant already knows: phases in
|
|
6
|
+
* order, and (within a non-parallel phase) steps in order. Today the only
|
|
7
|
+
* way a value escapes a step is `outcomeAttribute`, which stringifies it
|
|
8
|
+
* into a named run outcome — something to read a run back by, not something a
|
|
9
|
+
* later step can consume. `StepOutputRef` is the mechanism that lets a later
|
|
10
|
+
* step's `args` hold a *reference* to an earlier step's declared return
|
|
11
|
+
* value instead.
|
|
12
|
+
*
|
|
13
|
+
* Deliberately a reference, not an expression: `diff.out.driftedStacks` is
|
|
14
|
+
* a value placeholder that stays inert in the Op's data until the executor
|
|
15
|
+
* substitutes the producing step's recorded result for it, just before the
|
|
16
|
+
* consuming activity is called (`../op/local-executor.ts`'s
|
|
17
|
+
* `resolveStepOutputRefs` over `resultsById`) — never `diff.out.count >
|
|
18
|
+
* 0` or a `.map()` over a reference. That property (an Op is data you can
|
|
19
|
+
* read and know what it does, not a program) is exactly what makes it safe
|
|
20
|
+
* to add this without Ops becoming programs; see the issue's "line not to
|
|
21
|
+
* cross".
|
|
22
|
+
*
|
|
23
|
+
* Scope, kept deliberately tight (see the issue's "Open questions"):
|
|
24
|
+
* - same-Op only — no cross-Op plumbing (that needs a durable place to put
|
|
25
|
+
* the value, which #1290 explicitly defers).
|
|
26
|
+
* - main `phases` only — a step inside `onFailure` or nested inside an
|
|
27
|
+
* `EffectStep` can neither produce nor consume a step-output reference.
|
|
28
|
+
* `onFailure` compensation runs only when something upstream already
|
|
29
|
+
* failed, so a main-phase step's captured result isn't reliably
|
|
30
|
+
* available there; an effect step's nested steps run only when the
|
|
31
|
+
* receipt comparison mismatches, so a value it produces isn't reliably
|
|
32
|
+
* available to anything outside it either. Both are conditional
|
|
33
|
+
* execution paths, which is exactly the class of thing #1290 keeps out
|
|
34
|
+
* of an Op's inert-data model.
|
|
35
|
+
* - producer must run to completion before the consumer starts: an earlier
|
|
36
|
+
* phase, or an earlier step within the same non-parallel phase. Two
|
|
37
|
+
* steps in the same parallel phase run concurrently (`Promise.all`) with
|
|
38
|
+
* no ordering guarantee, so neither may reference the other.
|
|
39
|
+
* - the producer needs a registered `ActivityContract` with a `returns`
|
|
40
|
+
* schema — without one there is nothing to validate the reference
|
|
41
|
+
* against, and it degrades into the same stringly path `outcomeAttribute`
|
|
42
|
+
* already had (chant #1288 comment on this issue).
|
|
43
|
+
*
|
|
44
|
+
* Cross-contract type compatibility (chant #1950 pre-merge review, finding
|
|
45
|
+
* 3): `validateStepOutputRefs` checks the producer side (a registered
|
|
46
|
+
* contract with a `returns` schema, and — when `path` is set — that the path
|
|
47
|
+
* resolves on it) and, separately, `validateActivitySteps`/OPS012 checks a
|
|
48
|
+
* step's `args` against its own contract's `args` schema — but a
|
|
49
|
+
* {@link StepOutputRef} sitting in `args` is a placeholder object at build
|
|
50
|
+
* time, not the value it resolves to, so OPS012 skips it (see
|
|
51
|
+
* `activity-contract.ts`'s `isStepOutputRefValue` guard) rather than
|
|
52
|
+
* false-positive on it. Nothing before this compared the *consumer's*
|
|
53
|
+
* declared type at that position against the *producer's* declared type at
|
|
54
|
+
* `path` — a string-returning path could feed a number-typed arg and both
|
|
55
|
+
* checks would pass. `validateStepOutputRefs` now adds one more check for
|
|
56
|
+
* exactly this: when `path` is set, and both the producer's and the
|
|
57
|
+
* consumer's contracts are registered, it compares the zod schema at the
|
|
58
|
+
* producer's `path` against the zod schema at the consumer's arg position by
|
|
59
|
+
* primitive shape (`string`/`number`/`boolean`/`object`/`array` — see
|
|
60
|
+
* `activity-contract.ts`'s `primitiveKindOf`) and flags a mismatch. This is
|
|
61
|
+
* deliberately shallow, the same "hard stop rather than guess" posture
|
|
62
|
+
* `pathExistsInSchema`'s doc above takes for a record/array root: a union, an
|
|
63
|
+
* enum, a literal, `z.any()`/`z.unknown()`, a transform, or a ref sitting
|
|
64
|
+
* inside an array in `args` (no stable position to look up an arg schema
|
|
65
|
+
* against) all bail silently — no issue raised, not a false negative
|
|
66
|
+
* reported as clean, just genuinely out of this check's reach. A more
|
|
67
|
+
* complete version (real zod-schema subtyping/union-aware comparison) is
|
|
68
|
+
* exactly the kind of thing #1288 Stage 2 (typed step builders, deriving
|
|
69
|
+
* from contracts instead of restating them) would need anyway; deferred
|
|
70
|
+
* there rather than grown ad hoc here. A whole-value reference (no `path`)
|
|
71
|
+
* is skipped by this check for the same reason it's skipped by the
|
|
72
|
+
* path-existence check: there's no single field to compare.
|
|
73
|
+
*
|
|
74
|
+
* References only, no expressions: the issue asks for this to be "enforced
|
|
75
|
+
* by a lint rule rather than left as a convention." What's here instead is
|
|
76
|
+
* a runtime-on-load guard — `diff.out.count > 0` or a template literal over
|
|
77
|
+
* a reference coerces it to a primitive, and the reference throws when that
|
|
78
|
+
* happens, at the moment chant loads the `.op.ts` module to build the
|
|
79
|
+
* entity graph (i.e. still before anything runs). A real static lint rule
|
|
80
|
+
* would need to parse-inspect the author's TypeScript for expression syntax
|
|
81
|
+
* around a reference — a genuine ESLint-rule-shaped feature, and a bigger
|
|
82
|
+
* one than this issue's scope. The coercion guard catches the same misuse
|
|
83
|
+
* (arithmetic, comparisons, template literals, `String(...)`) without it;
|
|
84
|
+
* a `.map()`-style structural misuse already throws on its own (`StepOutputRef`
|
|
85
|
+
* has no array methods).
|
|
86
|
+
*/
|
|
87
|
+
import { WORK_LEASE_STEP_ID } from "./types.js";
|
|
88
|
+
import { pathExistsInSchema, schemaAtPath, primitiveKindOf } from "./activity-contract.js";
|
|
89
|
+
const STEP_OUTPUT_REF_BRAND = Symbol.for("chant.op.stepOutputRef");
|
|
90
|
+
/** Structural guard for a value produced by {@link stepOutput} (or `activity()`'s `.out`). */
|
|
91
|
+
export function isStepOutputRef(value) {
|
|
92
|
+
return typeof value === "object" && value !== null && value[STEP_OUTPUT_REF_BRAND] === true;
|
|
93
|
+
}
|
|
94
|
+
function makeStepOutputRef(step, path) {
|
|
95
|
+
const ref = { [STEP_OUTPUT_REF_BRAND]: true, kind: "step-output-ref", step, ...(path ? { path } : {}) };
|
|
96
|
+
// References only, no expressions (see module doc): coercing a reference
|
|
97
|
+
// to a primitive — `diff.out.count > 0`, `` `${diff.out.name}` ``,
|
|
98
|
+
// `String(diff.out.x)` — is exactly the "Op becomes a program" failure
|
|
99
|
+
// mode the issue calls out, so it throws immediately on load instead of
|
|
100
|
+
// silently producing a wrong value (NaN comparisons, "[object Object]").
|
|
101
|
+
const rejectExpression = () => {
|
|
102
|
+
throw new Error(`step-output reference (step "${step}"${path ? `, path "${path}"` : ""}) was coerced to a primitive — ` +
|
|
103
|
+
"references only, no expressions: use it as a plain arg value, never inside a comparison, arithmetic, or template literal.");
|
|
104
|
+
};
|
|
105
|
+
Object.defineProperty(ref, Symbol.toPrimitive, { value: rejectExpression, enumerable: false });
|
|
106
|
+
Object.defineProperty(ref, "toString", { value: rejectExpression, enumerable: false });
|
|
107
|
+
Object.defineProperty(ref, "valueOf", { value: rejectExpression, enumerable: false });
|
|
108
|
+
return ref;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Reference a named step's output from a later step's `args`. Works with
|
|
112
|
+
* any step that has an `id` — an `activity()` builder result (which also
|
|
113
|
+
* gets the `.out` proxy sugar below) or a plain `{ kind: "activity", ...,
|
|
114
|
+
* id: "..." }` object literal, the shape composites author directly.
|
|
115
|
+
*
|
|
116
|
+
* `stepOutput(diff, "driftedStacks")` and `diff.out.driftedStacks` produce
|
|
117
|
+
* an identical reference; `stepOutput` is the explicit form for authors who
|
|
118
|
+
* build steps as object literals, or whose return schema has a top-level
|
|
119
|
+
* field literally named `step`, `path`, or `kind` (the `.out` proxy
|
|
120
|
+
* reserves those three property names for its own introspection).
|
|
121
|
+
*/
|
|
122
|
+
export function stepOutput(step, path) {
|
|
123
|
+
const id = typeof step === "string" ? step : step.id;
|
|
124
|
+
if (!id) {
|
|
125
|
+
throw new Error("stepOutput(): the step has no `id` — pass one via activity(fn, args, { id: \"...\" }) or set `id` on the step object literal first.");
|
|
126
|
+
}
|
|
127
|
+
return makeStepOutputRef(id, path);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* `.out` proxy attached to `activity()`'s result: `diff.out.driftedStacks`
|
|
131
|
+
* builds a {@link StepOutputRef} without the explicit `stepOutput()` call.
|
|
132
|
+
*
|
|
133
|
+
* A single property-access level, matching `outcomeAttribute.from`'s
|
|
134
|
+
* existing convention — the property name IS the dot-path, so a nested
|
|
135
|
+
* field is `diff.out["result.healthy"]`, not `diff.out.result.healthy`.
|
|
136
|
+
* `kind`, `step`, and `path` are reserved (the ref's own introspection
|
|
137
|
+
* fields); a return schema with a top-level field by one of those names
|
|
138
|
+
* needs `stepOutput(diff, "step")` instead.
|
|
139
|
+
*/
|
|
140
|
+
export function makeOutProxy(stepId) {
|
|
141
|
+
const whole = makeStepOutputRef(stepId);
|
|
142
|
+
return new Proxy(whole, {
|
|
143
|
+
get(target, prop, receiver) {
|
|
144
|
+
if (typeof prop === "symbol" || prop === "kind" || prop === "step" || prop === "path" || prop === "toString" || prop === "valueOf") {
|
|
145
|
+
return Reflect.get(target, prop, receiver);
|
|
146
|
+
}
|
|
147
|
+
return makeStepOutputRef(stepId, prop);
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/** Every {@link StepOutputRef} found anywhere inside `value` (recursing through plain objects and arrays). */
|
|
152
|
+
export function collectStepOutputRefs(value) {
|
|
153
|
+
if (isStepOutputRef(value))
|
|
154
|
+
return [value];
|
|
155
|
+
if (Array.isArray(value))
|
|
156
|
+
return value.flatMap(collectStepOutputRefs);
|
|
157
|
+
if (value && typeof value === "object")
|
|
158
|
+
return Object.values(value).flatMap(collectStepOutputRefs);
|
|
159
|
+
return [];
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The property-key path from `value`'s root down to `target` (found by
|
|
163
|
+
* reference identity), or `undefined` if it isn't found or sits inside an
|
|
164
|
+
* array — an array index isn't a stable position to look up a declared arg
|
|
165
|
+
* schema against (chant #1950-3's cross-contract type check skips these,
|
|
166
|
+
* same "bail on anything fancier" policy as the rest of that check).
|
|
167
|
+
*/
|
|
168
|
+
function locateStepOutputRefPath(value, target, path = []) {
|
|
169
|
+
if (value === target)
|
|
170
|
+
return path;
|
|
171
|
+
if (Array.isArray(value))
|
|
172
|
+
return undefined;
|
|
173
|
+
if (value && typeof value === "object" && !isStepOutputRef(value)) {
|
|
174
|
+
for (const [k, v] of Object.entries(value)) {
|
|
175
|
+
const found = locateStepOutputRefPath(v, target, [...path, k]);
|
|
176
|
+
if (found)
|
|
177
|
+
return found;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
/** Top-level `ActivityStep`s of `phases`, in authored (phase, then step) order — gates, effects, and steps nested inside an effect are not producers or consumers (see the module doc's scope note). */
|
|
183
|
+
function locateActivitySteps(phases) {
|
|
184
|
+
const locations = [];
|
|
185
|
+
phases.forEach((phase, phaseIndex) => {
|
|
186
|
+
let stepIndex = 0;
|
|
187
|
+
for (const step of phase.steps) {
|
|
188
|
+
if (step.kind !== "activity")
|
|
189
|
+
continue;
|
|
190
|
+
locations.push({ phaseIndex, stepIndex, parallel: phase.parallel === true, step });
|
|
191
|
+
stepIndex++;
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
return locations;
|
|
195
|
+
}
|
|
196
|
+
/** True when `producer` is guaranteed to have completed before `consumer` starts. */
|
|
197
|
+
function producerPrecedes(producer, consumer) {
|
|
198
|
+
if (producer.phaseIndex !== consumer.phaseIndex)
|
|
199
|
+
return producer.phaseIndex < consumer.phaseIndex;
|
|
200
|
+
if (producer.parallel)
|
|
201
|
+
return false; // same parallel phase — Promise.all, no ordering guarantee
|
|
202
|
+
return producer.stepIndex < consumer.stepIndex;
|
|
203
|
+
}
|
|
204
|
+
function effectNestedActivitySteps(phase) {
|
|
205
|
+
return phase.steps.flatMap((s) => (s.kind === "effect" ? s.steps.filter((n) => n.kind === "activity") : []));
|
|
206
|
+
}
|
|
207
|
+
/** `byId`/`duplicateIds` over an Op's top-level main-phase activity steps — shared by {@link validateStepOutputRefScope} and {@link validateStepOutputRefs}. */
|
|
208
|
+
function indexById(locations) {
|
|
209
|
+
const byId = new Map();
|
|
210
|
+
const duplicateIds = new Set();
|
|
211
|
+
for (const loc of locations) {
|
|
212
|
+
if (!loc.step.id)
|
|
213
|
+
continue;
|
|
214
|
+
if (byId.has(loc.step.id))
|
|
215
|
+
duplicateIds.add(loc.step.id);
|
|
216
|
+
else
|
|
217
|
+
byId.set(loc.step.id, loc);
|
|
218
|
+
}
|
|
219
|
+
return { byId, duplicateIds };
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Validate every step-output reference in an Op against scope and ordering
|
|
223
|
+
* alone — no contract needed. This is the subset of {@link
|
|
224
|
+
* validateStepOutputRefs}'s checks that don't depend on a contract map, kept
|
|
225
|
+
* as its own export so a caller with no contracts on hand (or that wants to
|
|
226
|
+
* defend against exactly this class of bug regardless of what contracts are
|
|
227
|
+
* registered) can still refuse a scope-invalid reference. A hosting lexicon's
|
|
228
|
+
* own Op serializer is exactly this caller: OPS013 (which calls the fuller
|
|
229
|
+
* {@link validateStepOutputRefs}) protects `chant build`, but a serializer is
|
|
230
|
+
* a public export a caller can invoke directly, bypassing that lint pass —
|
|
231
|
+
* this is its own defense-in-depth.
|
|
232
|
+
*
|
|
233
|
+
* Flags:
|
|
234
|
+
* - a reference authored inside `onFailure`, or inside an `EffectStep`'s
|
|
235
|
+
* nested steps — out of scope by design (see the module doc); flagged
|
|
236
|
+
* explicitly here rather than left to fall through as "unknown producer",
|
|
237
|
+
* - a reference to an unregistered step id (no step in scope declares it),
|
|
238
|
+
* - a duplicate step id (ambiguous producer),
|
|
239
|
+
* - a reference to a step that does not precede the referencing step
|
|
240
|
+
* (a later phase, a later step in the same phase, itself, or a step in
|
|
241
|
+
* the same parallel phase).
|
|
242
|
+
*/
|
|
243
|
+
export function validateStepOutputRefScope(config) {
|
|
244
|
+
const issues = [];
|
|
245
|
+
const flagOutOfScope = (steps, phaseName, reason) => {
|
|
246
|
+
for (const step of steps) {
|
|
247
|
+
for (const ref of collectStepOutputRefs(step.args)) {
|
|
248
|
+
issues.push({
|
|
249
|
+
opName: config.name,
|
|
250
|
+
phase: phaseName,
|
|
251
|
+
fn: step.fn,
|
|
252
|
+
message: `references step "${ref.step}"'s output, but ${reason}`,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
for (const phase of config.onFailure ?? []) {
|
|
258
|
+
const steps = phase.steps.filter((s) => s.kind === "activity").concat(effectNestedActivitySteps(phase));
|
|
259
|
+
flagOutOfScope(steps, phase.name, "step-output references are not supported in onFailure compensation phases");
|
|
260
|
+
}
|
|
261
|
+
for (const phase of config.phases) {
|
|
262
|
+
flagOutOfScope(effectNestedActivitySteps(phase), phase.name, "step-output references are not supported for a step nested inside an effect step");
|
|
263
|
+
}
|
|
264
|
+
const locations = locateActivitySteps(config.phases);
|
|
265
|
+
const { byId, duplicateIds } = indexById(locations);
|
|
266
|
+
const phaseNameOf = (loc) => config.phases[loc.phaseIndex].name;
|
|
267
|
+
for (const consumer of locations) {
|
|
268
|
+
const refs = collectStepOutputRefs(consumer.step.args);
|
|
269
|
+
for (const ref of refs) {
|
|
270
|
+
// The run's work lease (#2748) is published under a reserved id once it
|
|
271
|
+
// is claimed; an Op that declares one may reference it from any step.
|
|
272
|
+
if (config.workLease && ref.step === WORK_LEASE_STEP_ID)
|
|
273
|
+
continue;
|
|
274
|
+
if (duplicateIds.has(ref.step)) {
|
|
275
|
+
issues.push({
|
|
276
|
+
opName: config.name,
|
|
277
|
+
phase: phaseNameOf(consumer),
|
|
278
|
+
fn: consumer.step.fn,
|
|
279
|
+
message: `references step id "${ref.step}", but that id is used by more than one step in this Op — ids must be unique`,
|
|
280
|
+
});
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
const producer = byId.get(ref.step);
|
|
284
|
+
if (!producer) {
|
|
285
|
+
issues.push({
|
|
286
|
+
opName: config.name,
|
|
287
|
+
phase: phaseNameOf(consumer),
|
|
288
|
+
fn: consumer.step.fn,
|
|
289
|
+
message: `references unknown step id "${ref.step}" — no step in this Op's main phases declares that id`,
|
|
290
|
+
});
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
if (!producerPrecedes(producer, consumer)) {
|
|
294
|
+
const reason = producer.phaseIndex > consumer.phaseIndex
|
|
295
|
+
? `step "${ref.step}" is in a later phase`
|
|
296
|
+
: producer.parallel
|
|
297
|
+
? `step "${ref.step}" is in the same parallel phase (steps there run concurrently, with no ordering guarantee)`
|
|
298
|
+
: `step "${ref.step}" does not run before this step`;
|
|
299
|
+
issues.push({
|
|
300
|
+
opName: config.name,
|
|
301
|
+
phase: phaseNameOf(consumer),
|
|
302
|
+
fn: consumer.step.fn,
|
|
303
|
+
message: `references ${reason} — a step can only reference an earlier step's output`,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return issues;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Validate every step-output reference in an Op's main phases against a
|
|
312
|
+
* contract map and the Op's own step ordering. Scope: `config.phases` only
|
|
313
|
+
* (never `onFailure`, never a step nested inside an `EffectStep` — see the
|
|
314
|
+
* module doc). Layers contract-based checks on top of {@link
|
|
315
|
+
* validateStepOutputRefScope}'s scope/ordering checks.
|
|
316
|
+
*
|
|
317
|
+
* Flags everything {@link validateStepOutputRefScope} does, plus:
|
|
318
|
+
* - a reference into a step whose `fn` has no registered
|
|
319
|
+
* {@link ActivityContract}, or whose contract declares no `returns`
|
|
320
|
+
* schema — nothing to validate the reference against,
|
|
321
|
+
* - a `path` that does not resolve on the producer's declared return
|
|
322
|
+
* schema (an empty `path` — the whole return value — is always valid).
|
|
323
|
+
*/
|
|
324
|
+
export function validateStepOutputRefs(config, contracts) {
|
|
325
|
+
const issues = validateStepOutputRefScope(config);
|
|
326
|
+
const locations = locateActivitySteps(config.phases);
|
|
327
|
+
const { byId, duplicateIds } = indexById(locations);
|
|
328
|
+
const phaseNameOf = (loc) => config.phases[loc.phaseIndex].name;
|
|
329
|
+
for (const consumer of locations) {
|
|
330
|
+
const refs = collectStepOutputRefs(consumer.step.args);
|
|
331
|
+
for (const ref of refs) {
|
|
332
|
+
// Already flagged by validateStepOutputRefScope — nothing to validate
|
|
333
|
+
// a contract-based check against.
|
|
334
|
+
if (duplicateIds.has(ref.step))
|
|
335
|
+
continue;
|
|
336
|
+
const producer = byId.get(ref.step);
|
|
337
|
+
if (!producer || !producerPrecedes(producer, consumer))
|
|
338
|
+
continue;
|
|
339
|
+
const producerContract = contracts.get(producer.step.fn);
|
|
340
|
+
if (!producerContract) {
|
|
341
|
+
issues.push({
|
|
342
|
+
opName: config.name,
|
|
343
|
+
phase: phaseNameOf(consumer),
|
|
344
|
+
fn: consumer.step.fn,
|
|
345
|
+
message: `references step "${ref.step}"'s output, but "${producer.step.fn}" has no registered activity contract to validate the reference against`,
|
|
346
|
+
});
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
if (!producerContract.returns) {
|
|
350
|
+
issues.push({
|
|
351
|
+
opName: config.name,
|
|
352
|
+
phase: phaseNameOf(consumer),
|
|
353
|
+
fn: consumer.step.fn,
|
|
354
|
+
message: `references step "${ref.step}"'s output, but "${producer.step.fn}"'s contract declares no return schema`,
|
|
355
|
+
});
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
if (ref.path && !pathExistsInSchema(producerContract.returns, ref.path)) {
|
|
359
|
+
issues.push({
|
|
360
|
+
opName: config.name,
|
|
361
|
+
phase: phaseNameOf(consumer),
|
|
362
|
+
fn: consumer.step.fn,
|
|
363
|
+
message: `references step "${ref.step}"'s output path "${ref.path}", which does not exist on "${producer.step.fn}"'s declared return type`,
|
|
364
|
+
});
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
// Finding #1950-3: cross-contract primitive-type compatibility. Only
|
|
368
|
+
// meaningful for a field reference (`ref.path` set) against a
|
|
369
|
+
// registered consumer contract's arg schema at the same position in
|
|
370
|
+
// `args` — a whole-value reference (no path) is intentionally left
|
|
371
|
+
// unchecked (see the "whole-value reference... passes even without
|
|
372
|
+
// checking the producer's return shape" test/doc above). Bails
|
|
373
|
+
// silently (no issue) on anything not a plain string/number/boolean/
|
|
374
|
+
// object/array — a union, enum, literal, transform, `z.any()`, etc. —
|
|
375
|
+
// there's no cheap structural comparison for those.
|
|
376
|
+
if (ref.path) {
|
|
377
|
+
const consumerContract = contracts.get(consumer.step.fn);
|
|
378
|
+
const argPath = consumerContract && locateStepOutputRefPath(consumer.step.args, ref);
|
|
379
|
+
if (consumerContract && argPath) {
|
|
380
|
+
const consumerFieldSchema = schemaAtPath(consumerContract.args, argPath);
|
|
381
|
+
const producerFieldSchema = schemaAtPath(producerContract.returns, ref.path.split("."));
|
|
382
|
+
const consumerKind = consumerFieldSchema && primitiveKindOf(consumerFieldSchema);
|
|
383
|
+
const producerKind = producerFieldSchema && primitiveKindOf(producerFieldSchema);
|
|
384
|
+
if (consumerKind && producerKind && consumerKind !== producerKind) {
|
|
385
|
+
issues.push({
|
|
386
|
+
opName: config.name,
|
|
387
|
+
phase: phaseNameOf(consumer),
|
|
388
|
+
fn: consumer.step.fn,
|
|
389
|
+
message: `references step "${ref.step}"'s output path "${ref.path}" (${producerKind}), but arg "${argPath.join(".")}" on "${consumer.step.fn}" declares ${consumerKind} — type mismatch`,
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return issues;
|
|
397
|
+
}
|