@intentius/chant 0.124.12 → 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.d.ts +36 -4
- package/dist/gate-decision.d.ts.map +1 -1
- 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.d.ts +8 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- 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.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.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.d.ts +65 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.d.ts +4 -2
- package/dist/workspace/identity.d.ts.map +1 -1
- 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.d.ts +3 -14
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- 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 +36 -6
- 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/gate-decision-bundle.test.ts +3 -2
- package/src/gate-decision-identity.test.ts +176 -0
- package/src/gate-decision.ts +100 -22
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-ledger.ts +8 -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/op/op-waves-point.test.ts +1 -0
- package/src/op/op-waves-run.ts +5 -4
- package/src/op/op-waves.test.ts +14 -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/identity-gate-rule.ts +109 -0
- package/src/workspace/identity.ts +8 -18
- 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 +5 -30
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderers for local Op execution. Both consume the same `OpRunResult`:
|
|
3
|
+
* `renderHuman` is the default (logs to stderr), `renderJson` prints the
|
|
4
|
+
* machine-readable record array to stdout and nothing else.
|
|
5
|
+
*/
|
|
6
|
+
import { approveCommand } from "./gate.js";
|
|
7
|
+
import { LIFECYCLE_LOCAL_NOTE, isLifecycleLocalNote } from "../lifecycle/local-note.js";
|
|
8
|
+
const stderr = (line) => process.stderr.write(line + "\n");
|
|
9
|
+
const stdout = (line) => process.stdout.write(line + "\n");
|
|
10
|
+
function formatArgs(args) {
|
|
11
|
+
return Object.entries(args)
|
|
12
|
+
.map(([k, v]) => `${k}=${typeof v === "string" ? v : JSON.stringify(v)}`)
|
|
13
|
+
.join(", ");
|
|
14
|
+
}
|
|
15
|
+
function formatDuration(ms) {
|
|
16
|
+
return ms < 1000 ? `${ms}ms` : `${(ms / 1000).toFixed(1)}s`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Render a run result as human-readable progress. Defaults to stderr so stdout
|
|
20
|
+
* stays clean for piping (the `--json` renderer owns stdout).
|
|
21
|
+
*/
|
|
22
|
+
export function renderHuman(result, write = stderr, sealed = false) {
|
|
23
|
+
let currentPhase;
|
|
24
|
+
for (const record of result.records) {
|
|
25
|
+
if (record.phase !== currentPhase) {
|
|
26
|
+
currentPhase = record.phase;
|
|
27
|
+
write(`[phase] ${currentPhase}`);
|
|
28
|
+
}
|
|
29
|
+
const mark = record.status === "ok" ? "✓" : record.status === "fail" ? "✗" : "•";
|
|
30
|
+
const call = `${record.fn}(${formatArgs(record.args ?? {})})`;
|
|
31
|
+
if (record.status === "skipped") {
|
|
32
|
+
write(` ${mark} ${call} skipped`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
write(` ${mark} ${call} ${formatDuration(record.durationMs)}`);
|
|
36
|
+
}
|
|
37
|
+
if (record.outcome) {
|
|
38
|
+
write(` [outcome] ${record.outcome.name}=${String(record.outcome.value)}`);
|
|
39
|
+
}
|
|
40
|
+
if (record.approval) {
|
|
41
|
+
write(` [approved] ${record.approval.resolvedBy} at ${record.approval.timestamp}` +
|
|
42
|
+
(record.approval.url ? ` (${record.approval.url})` : ""));
|
|
43
|
+
}
|
|
44
|
+
if (record.refusal) {
|
|
45
|
+
write(` [refused] ${record.refusal}`);
|
|
46
|
+
}
|
|
47
|
+
if (record.point) {
|
|
48
|
+
write(` [waiting] decision point ${record.point.point}: ${record.point.id} is ${record.point.state}`);
|
|
49
|
+
}
|
|
50
|
+
if (record.error) {
|
|
51
|
+
write(` ${record.error}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// The work lease (#2748): which item the run held, and how it ended.
|
|
55
|
+
const work = result.workLease;
|
|
56
|
+
if (work?.item) {
|
|
57
|
+
const end = work.lost
|
|
58
|
+
? `lost (${work.lost})`
|
|
59
|
+
: work.released
|
|
60
|
+
? `released ${work.outcome}`
|
|
61
|
+
: "not released; it runs out on its own";
|
|
62
|
+
write(`[work] ${work.item} held by ${work.holder}${work.branch ? ` on ${work.branch}` : ""}: ${end}${work.kept ? `; the attempt is kept at ${work.kept}` : ""}`);
|
|
63
|
+
}
|
|
64
|
+
else if (work?.refusal) {
|
|
65
|
+
write(`[work] nothing claimed: ${work.refusal}`);
|
|
66
|
+
}
|
|
67
|
+
const total = `${(result.totalMs / 1000).toFixed(1)}s`;
|
|
68
|
+
if (result.status === "ok") {
|
|
69
|
+
write(`Op "${result.op}" completed in ${total}`);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (result.status === "waiting" && result.point) {
|
|
73
|
+
// An open decision point (#2749): a fact like a gate. A person answers the
|
|
74
|
+
// question, through hud or at a shell, and the next run reads the answer.
|
|
75
|
+
const { point } = result;
|
|
76
|
+
write(`Op "${result.op}" is waiting on decision point "${point.point}" after ${total}`);
|
|
77
|
+
write(` question: ${point.id} (${point.state}) at ${point.path}`);
|
|
78
|
+
if (point.subject)
|
|
79
|
+
write(` subject : ${point.subject}`);
|
|
80
|
+
write(` answer : ${pointAnswerCommand(point.id)}`);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (result.status === "fail" || !result.gate) {
|
|
84
|
+
write(`Op "${result.op}" failed after ${total}`);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
// Gated (#2119): a standing fact and the one command that clears it. No
|
|
88
|
+
// hint at another runtime — the run ended here on purpose, and the next one
|
|
89
|
+
// re-reads the ledger.
|
|
90
|
+
const { gate } = result;
|
|
91
|
+
write(`Op "${result.op}" is gated on "${gate.gate}" after ${total}`);
|
|
92
|
+
if (gate.description)
|
|
93
|
+
write(` ${gate.description}`);
|
|
94
|
+
// #2300: the plan the approval will be bound to. Printed before the
|
|
95
|
+
// command, because it is what the command approves.
|
|
96
|
+
if (gate.planDigest)
|
|
97
|
+
write(` plan : ${gate.planDigest}`);
|
|
98
|
+
write(` approve : ${approveCommand(gate.op, gate.gate, undefined, gate.planDigest, sealed)}`);
|
|
99
|
+
if (gate.url)
|
|
100
|
+
write(` approve at: ${gate.url}`);
|
|
101
|
+
write(` expires : ${gate.expiresAt}`);
|
|
102
|
+
// #2310: this run's own append reached only the local chant/lifecycle
|
|
103
|
+
// branch, not the remote. The pending fact is still correct — the gate is
|
|
104
|
+
// still right to stand — but an operator working from a clone of the
|
|
105
|
+
// remote cannot see it to approve it, and nothing else here says so.
|
|
106
|
+
// #3677: with no remote at all, nobody elsewhere approves; one quiet line.
|
|
107
|
+
if (result.gatePushed === false && isLifecycleLocalNote(result.gatePushWarning)) {
|
|
108
|
+
write(` note : ${LIFECYCLE_LOCAL_NOTE}`);
|
|
109
|
+
}
|
|
110
|
+
else if (result.gatePushed === false) {
|
|
111
|
+
write(` warning : the pending fact was not pushed to the remote — ` +
|
|
112
|
+
(result.gatePushWarning ?? "it exists only in this checkout") +
|
|
113
|
+
`. An operator elsewhere cannot approve it until it does.`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Render the run's ledger record as JSON on stdout (and nothing else on
|
|
118
|
+
* stdout).
|
|
119
|
+
*
|
|
120
|
+
* The record, not the whole `OpRunResult` (#2118): what `chant run <op> --json`
|
|
121
|
+
* emits is byte-for-byte what the run appended to `<env>/runs__<op>.jsonl`, so
|
|
122
|
+
* a consumer reading stdout and one reading the ledger back later agree on
|
|
123
|
+
* every field, the run id included. A gated run's record names the gate it
|
|
124
|
+
* stopped on; the `approve` command line rides alongside so a CI job reporting
|
|
125
|
+
* the gate doesn't have to reassemble it from the op and gate names.
|
|
126
|
+
*/
|
|
127
|
+
export function renderJson(result, write = stdout, sealed = false) {
|
|
128
|
+
const approve = result.gate ? { approve: approveCommand(result.gate.op, result.gate.gate, undefined, result.gate.planDigest, sealed) } : {};
|
|
129
|
+
// #2310: whether this run's own append reached the remote — not part of
|
|
130
|
+
// the persisted ledger record (a replay has nothing new to report), but a
|
|
131
|
+
// live run's JSON consumer needs it exactly where the human render shows it.
|
|
132
|
+
const push = result.gatePushed === false
|
|
133
|
+
? { pushed: false, pushWarning: result.gatePushWarning ?? "the pending fact was recorded locally only" }
|
|
134
|
+
: {};
|
|
135
|
+
write(JSON.stringify({ ...result.record, ...approve, ...push }));
|
|
136
|
+
}
|
|
137
|
+
/** The command a person answers an open decision point with (#2749). */
|
|
138
|
+
export function pointAnswerCommand(id) {
|
|
139
|
+
return `chant workspace points answer ${id} --answer <answer> --by <your name>`;
|
|
140
|
+
}
|
package/dist/op/op-ir.js
ADDED
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* op.json IR — chant #1289 ("An Op compiles only to TypeScript, so walk-away
|
|
3
|
+
* cost is zero everywhere except Ops").
|
|
4
|
+
*
|
|
5
|
+
* `OpConfig` is already inert data: every field is a string, number, boolean,
|
|
6
|
+
* or a nested object of those (no functions, no closures, no runtime
|
|
7
|
+
* references — see `./types.ts`). This module is the "second, simpler output
|
|
8
|
+
* from the same walk" the issue asks for: a deterministic
|
|
9
|
+
* `dist/ops/<name>/op.json`, so a foreign runtime (or a dashboard, a policy
|
|
10
|
+
* check, an agent) can read what an Op does without importing chant or
|
|
11
|
+
* parsing generated TypeScript.
|
|
12
|
+
*
|
|
13
|
+
* It lives in core, not in a hosting lexicon (#2118, epic #2114). The IR is a
|
|
14
|
+
* restatement of `OpConfig`, and `OpConfig` is core's — as is the profile
|
|
15
|
+
* table a step's `profile` key names, since #2117. What core does not own is
|
|
16
|
+
* the activity contracts that give a step's args a schema: those stay
|
|
17
|
+
* decentralized, so `buildOpIR` takes the registry as a parameter and defaults
|
|
18
|
+
* it to empty. A caller holding a lexicon's contracts passes them in, and the
|
|
19
|
+
* `activityContracts` section fills out without core ever importing that
|
|
20
|
+
* lexicon.
|
|
21
|
+
*
|
|
22
|
+
* Two things beyond a literal restatement of `OpConfig` earn their place:
|
|
23
|
+
*
|
|
24
|
+
* - Every step's `profile` / gate `timeout` is resolved to its effective
|
|
25
|
+
* value (chant's own default when omitted), and every referenced profile's
|
|
26
|
+
* actual retry/timeout policy rides along out of `ACTIVITY_PROFILES`.
|
|
27
|
+
* Without it a foreign runtime would have to read chant's TypeScript to
|
|
28
|
+
* know what "fastIdempotent" means.
|
|
29
|
+
* - Every step whose `fn` has a registered {@link ActivityContract} in the
|
|
30
|
+
* contract registry the caller passes (chant #1288 Stage 1) gets its args/
|
|
31
|
+
* returns zod schema embedded as JSON Schema (via zod 4's built-in
|
|
32
|
+
* `z.toJSONSchema`), keyed by activity name. This is exactly the payoff
|
|
33
|
+
* the Stage 1 decision comment named: "#1289 (op.json IR) ... build on
|
|
34
|
+
* these [Stage 1] contracts." Ownership stays decentralized — only
|
|
35
|
+
* activities the passed registry knows are covered; a step calling an
|
|
36
|
+
* activity from a lexicon outside it (or one with no registered contract
|
|
37
|
+
* yet) simply has no entry here.
|
|
38
|
+
* - Every step whose contract declares entity-identifying args
|
|
39
|
+
* (`ActivityContract.entities`, chant #2022) gets those args' literal
|
|
40
|
+
* string values resolved into `entities` — the estate join a renderer
|
|
41
|
+
* otherwise had to invent off scope fields like `stackName`. The contract
|
|
42
|
+
* entry echoes the declared key list, so a consumer can resolve values
|
|
43
|
+
* this serialization could not (a step-output ref) itself.
|
|
44
|
+
* JSON-Schema-incompatible contracts (schemas containing transforms or
|
|
45
|
+
* custom types that zod cannot serialize) are skipped gracefully: the
|
|
46
|
+
* activity appears in the Op's step graph but has no entry in
|
|
47
|
+
* activityContracts, consistent with the decentralized and partial
|
|
48
|
+
* coverage philosophy.
|
|
49
|
+
*
|
|
50
|
+
* Resolving defaults loses nothing: parsing `op.json` back into an
|
|
51
|
+
* `OpConfig`-shaped object (`opConfigFromIR`) and re-serializing it produces
|
|
52
|
+
* a byte-identical `op.json`, and a lexicon serializer fed the reconstruction
|
|
53
|
+
* emits byte-identical code (verified by the round-trip tests here) — the
|
|
54
|
+
* issue's own verification criterion.
|
|
55
|
+
*
|
|
56
|
+
* ## Step-output references (chant #1290, #1288 Stage 2 follow-up)
|
|
57
|
+
*
|
|
58
|
+
* A step's `args` may hold a {@link StepOutputRef} (`./step-output-ref.ts`)
|
|
59
|
+
* anywhere in its structure — a placeholder for a
|
|
60
|
+
* prior step's declared return value, which the executor substitutes for at
|
|
61
|
+
* run time from the producing step's record. This module does not
|
|
62
|
+
* special-case it: `irActivityStep` copies `step.args` through as-is (same as
|
|
63
|
+
* every other value), and `JSON.stringify` — both the literal one in
|
|
64
|
+
* `serializeOpIR` and the structural-equality one `z.toJSONSchema`-adjacent
|
|
65
|
+
* consumers would use — drops a `StepOutputRef`'s brand (a `Symbol.for(...)`
|
|
66
|
+
* key; JSON has no symbols) while keeping its three own enumerable string
|
|
67
|
+
* properties. The result is a plain, first-class IR value at exactly the
|
|
68
|
+
* position the reference sat in `args`:
|
|
69
|
+
*
|
|
70
|
+
* ```json
|
|
71
|
+
* { "kind": "step-output-ref", "step": "build-step", "path": "manifestPath" }
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* (`path` omitted when the reference is to the whole return value.) This is
|
|
75
|
+
* deliberate, not an accident of `JSON.stringify`'s symbol-dropping — a
|
|
76
|
+
* foreign consumer of op.json can match on `args.<field>.kind ===
|
|
77
|
+
* "step-output-ref"` to recognize a placeholder and resolve it against
|
|
78
|
+
* `steps[].id`/`activityContracts[fn].returns` itself, without ever loading
|
|
79
|
+
* chant's TypeScript. `op-ir.test.ts` asserts the shape directly so a future
|
|
80
|
+
* change to `StepOutputRef`'s own fields (`./step-output-ref.ts`) that would
|
|
81
|
+
* silently change this JSON shape gets caught here.
|
|
82
|
+
*/
|
|
83
|
+
import { z } from "zod";
|
|
84
|
+
import { ACTIVITY_PROFILES } from "./activity-profiles.js";
|
|
85
|
+
import { gateName } from "./gate-name.js";
|
|
86
|
+
/**
|
|
87
|
+
* The op.json IR schema version. Bumped on a breaking change to this
|
|
88
|
+
* module's output shape — additive fields (a new optional key) do not
|
|
89
|
+
* require a bump.
|
|
90
|
+
*
|
|
91
|
+
* `2.0` (#2118): `taskQueue` and `namespace` are gone and `searchAttributes`
|
|
92
|
+
* is replaced by `labels`. Those three were the fields only a workflow engine
|
|
93
|
+
* read; an op.json now states what the Op does, not where it runs.
|
|
94
|
+
*/
|
|
95
|
+
export const OP_IR_FORMAT_VERSION = "2.0";
|
|
96
|
+
// ── Step helpers ──────────────────────────────────────────────────────────────
|
|
97
|
+
function effectiveProfile(step) {
|
|
98
|
+
return step.profile ?? "fastIdempotent";
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The step's entity-identifying arg values (#2022): the literal strings at
|
|
102
|
+
* the arg names its contract declares in `entities`. A non-string there (a
|
|
103
|
+
* step-output ref placeholder, a structured value) is skipped — the IR only
|
|
104
|
+
* states joins it can resolve at serialization; a consumer holding the
|
|
105
|
+
* contract's own `entities` key list can resolve the rest itself.
|
|
106
|
+
*/
|
|
107
|
+
function stepEntities(step, contracts) {
|
|
108
|
+
const declared = contracts.get(step.fn)?.entities;
|
|
109
|
+
if (!declared || declared.length === 0)
|
|
110
|
+
return undefined;
|
|
111
|
+
const values = [];
|
|
112
|
+
for (const key of declared) {
|
|
113
|
+
const value = (step.args ?? {})[key];
|
|
114
|
+
if (typeof value === "string")
|
|
115
|
+
values.push(value);
|
|
116
|
+
}
|
|
117
|
+
return values.length > 0 ? values : undefined;
|
|
118
|
+
}
|
|
119
|
+
function irActivityStep(step, contracts) {
|
|
120
|
+
const entities = stepEntities(step, contracts);
|
|
121
|
+
return {
|
|
122
|
+
kind: "activity",
|
|
123
|
+
fn: step.fn,
|
|
124
|
+
args: step.args ?? {},
|
|
125
|
+
profile: effectiveProfile(step),
|
|
126
|
+
...(step.timeout !== undefined ? { timeout: step.timeout } : {}),
|
|
127
|
+
...(entities ? { entities } : {}),
|
|
128
|
+
...(step.outcomeAttribute ? { outcomeAttribute: step.outcomeAttribute } : {}),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function irGateStep(step) {
|
|
132
|
+
return {
|
|
133
|
+
kind: "gate",
|
|
134
|
+
gate: gateName(step),
|
|
135
|
+
timeout: step.timeout ?? "48h",
|
|
136
|
+
...(step.description ? { description: step.description } : {}),
|
|
137
|
+
...(step.plan !== undefined ? { plan: step.plan } : {}),
|
|
138
|
+
...(step.approval !== undefined ? { approval: step.approval } : {}),
|
|
139
|
+
...(step.point !== undefined ? { point: step.point } : {}),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function irEffectStep(step, contracts) {
|
|
143
|
+
return {
|
|
144
|
+
kind: "effect",
|
|
145
|
+
receipt: step.receipt,
|
|
146
|
+
...(step.expectation !== undefined ? { expectation: step.expectation } : {}),
|
|
147
|
+
steps: step.steps.map((s) => (s.kind === "activity" ? irActivityStep(s, contracts) : irGateStep(s))),
|
|
148
|
+
...(step.description ? { description: step.description } : {}),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function irStep(step, contracts) {
|
|
152
|
+
if (step.kind === "activity")
|
|
153
|
+
return irActivityStep(step, contracts);
|
|
154
|
+
if (step.kind === "gate")
|
|
155
|
+
return irGateStep(step);
|
|
156
|
+
return irEffectStep(step, contracts);
|
|
157
|
+
}
|
|
158
|
+
function irPhase(phase, contracts) {
|
|
159
|
+
return {
|
|
160
|
+
name: phase.name,
|
|
161
|
+
parallel: phase.parallel ?? false,
|
|
162
|
+
steps: phase.steps.map((s) => irStep(s, contracts)),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// ── Referenced-activity collection ─────────────────────────────────────────────
|
|
166
|
+
/** Every `ActivityStep` reachable from a phase list, including ones nested inside an `EffectStep`. */
|
|
167
|
+
function activityStepsOf(phases) {
|
|
168
|
+
const out = [];
|
|
169
|
+
for (const phase of phases) {
|
|
170
|
+
for (const step of phase.steps) {
|
|
171
|
+
if (step.kind === "activity")
|
|
172
|
+
out.push(step);
|
|
173
|
+
else if (step.kind === "effect") {
|
|
174
|
+
for (const nested of step.steps)
|
|
175
|
+
if (nested.kind === "activity")
|
|
176
|
+
out.push(nested);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return out;
|
|
181
|
+
}
|
|
182
|
+
/** No contracts unless a caller supplies them — core does not own that registry. See the module doc. */
|
|
183
|
+
const NO_CONTRACTS = new Map();
|
|
184
|
+
/** Sort object keys for a set-like dictionary without a meaningful authored order (profiles/contracts, keyed by name). */
|
|
185
|
+
function sortedEntries(map) {
|
|
186
|
+
const out = {};
|
|
187
|
+
for (const key of [...map.keys()].sort())
|
|
188
|
+
out[key] = map.get(key);
|
|
189
|
+
return out;
|
|
190
|
+
}
|
|
191
|
+
// ── Public API ────────────────────────────────────────────────────────────────
|
|
192
|
+
/**
|
|
193
|
+
* Build the deterministic op.json IR for one Op's config.
|
|
194
|
+
*
|
|
195
|
+
* `contractRegistry` is the one thing core does not own (see the module doc):
|
|
196
|
+
* a caller holding a lexicon's activity contracts passes them in and
|
|
197
|
+
* `activityContracts` fills out. Omitted, that section is empty — the step
|
|
198
|
+
* graph, the labels and every step's resolved `profile` name are unaffected
|
|
199
|
+
* either way. `profileRegistry` defaults to core's own `ACTIVITY_PROFILES`;
|
|
200
|
+
* a test overrides it.
|
|
201
|
+
*/
|
|
202
|
+
export function buildOpIR(config, contractRegistry = NO_CONTRACTS, profileRegistry = ACTIVITY_PROFILES) {
|
|
203
|
+
const allSteps = [...activityStepsOf(config.phases), ...activityStepsOf(config.onFailure ?? [])];
|
|
204
|
+
const profiles = new Map();
|
|
205
|
+
const contracts = new Map();
|
|
206
|
+
for (const step of allSteps) {
|
|
207
|
+
const prof = effectiveProfile(step);
|
|
208
|
+
if (!profiles.has(prof) && prof in profileRegistry) {
|
|
209
|
+
profiles.set(prof, profileRegistry[prof]);
|
|
210
|
+
}
|
|
211
|
+
if (!contracts.has(step.fn)) {
|
|
212
|
+
const contract = contractRegistry.get(step.fn);
|
|
213
|
+
if (contract) {
|
|
214
|
+
try {
|
|
215
|
+
const args = z.toJSONSchema(contract.args);
|
|
216
|
+
const returns = contract.returns ? z.toJSONSchema(contract.returns) : undefined;
|
|
217
|
+
contracts.set(step.fn, {
|
|
218
|
+
args,
|
|
219
|
+
...(returns ? { returns } : {}),
|
|
220
|
+
...(contract.entities && contract.entities.length > 0 ? { entities: contract.entities } : {}),
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// zod 4's toJSONSchema throws on schemas containing transforms or custom types.
|
|
225
|
+
// Gracefully skip this contract — the activity remains in the step graph but
|
|
226
|
+
// has no entry in activityContracts. Consistent with the decentralized and
|
|
227
|
+
// partial coverage philosophy.
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
formatVersion: OP_IR_FORMAT_VERSION,
|
|
234
|
+
name: config.name,
|
|
235
|
+
overview: config.overview,
|
|
236
|
+
depends: config.depends ?? [],
|
|
237
|
+
labels: config.labels ?? {},
|
|
238
|
+
...(config.schedule ? { schedule: config.schedule } : {}),
|
|
239
|
+
...(config.workLease ? { workLease: config.workLease } : {}),
|
|
240
|
+
...(config.changesCheckout ? { changesCheckout: true } : {}),
|
|
241
|
+
...(config.neverOverMcp ? { neverOverMcp: true } : {}),
|
|
242
|
+
...(config.failOn ? { failOn: config.failOn } : {}),
|
|
243
|
+
phases: config.phases.map((p) => irPhase(p, contractRegistry)),
|
|
244
|
+
onFailure: (config.onFailure ?? []).map((p) => irPhase(p, contractRegistry)),
|
|
245
|
+
activityProfiles: sortedEntries(profiles),
|
|
246
|
+
activityContracts: sortedEntries(contracts),
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/** Serialize one Op's op.json IR to a deterministic JSON string (stable key order, 2-space indent, trailing newline). Takes the same two optional registries as {@link buildOpIR}. */
|
|
250
|
+
export function serializeOpIR(config, contractRegistry, profileRegistry) {
|
|
251
|
+
return JSON.stringify(buildOpIR(config, contractRegistry, profileRegistry), null, 2) + "\n";
|
|
252
|
+
}
|
|
253
|
+
// ── Round trip (op.json → OpConfig) ────────────────────────────────────────────
|
|
254
|
+
//
|
|
255
|
+
// The inverse of `buildOpIR`. Exists primarily to prove the IR's own
|
|
256
|
+
// verification criterion (chant #1289): parsing `op.json` back into an
|
|
257
|
+
// `OpConfig`-shaped object and re-serializing it round-trips byte-identically,
|
|
258
|
+
// and a lexicon serializer fed the reconstruction emits identical code. Also
|
|
259
|
+
// the mechanical shape a foreign consumer would use to drive its own executor
|
|
260
|
+
// off the IR rather than the generated TypeScript.
|
|
261
|
+
function opStepFromIR(step) {
|
|
262
|
+
if (step.kind === "activity") {
|
|
263
|
+
return {
|
|
264
|
+
kind: "activity",
|
|
265
|
+
fn: step.fn,
|
|
266
|
+
args: step.args,
|
|
267
|
+
profile: step.profile,
|
|
268
|
+
...(step.timeout !== undefined ? { timeout: step.timeout } : {}),
|
|
269
|
+
...(step.outcomeAttribute ? { outcomeAttribute: step.outcomeAttribute } : {}),
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
if (step.kind === "gate") {
|
|
273
|
+
return {
|
|
274
|
+
kind: "gate",
|
|
275
|
+
gate: step.gate,
|
|
276
|
+
timeout: step.timeout,
|
|
277
|
+
...(step.description ? { description: step.description } : {}),
|
|
278
|
+
...(step.plan !== undefined ? { plan: step.plan } : {}),
|
|
279
|
+
...(step.approval !== undefined ? { approval: step.approval } : {}),
|
|
280
|
+
...(step.point !== undefined ? { point: step.point } : {}),
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
kind: "effect",
|
|
285
|
+
receipt: step.receipt,
|
|
286
|
+
...(step.expectation !== undefined ? { expectation: step.expectation } : {}),
|
|
287
|
+
steps: step.steps.map((s) => opStepFromIR(s)),
|
|
288
|
+
...(step.description ? { description: step.description } : {}),
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function opPhaseFromIR(phase) {
|
|
292
|
+
return {
|
|
293
|
+
name: phase.name,
|
|
294
|
+
steps: phase.steps.map(opStepFromIR),
|
|
295
|
+
...(phase.parallel ? { parallel: true } : {}),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
/** Reconstruct an `OpConfig` from its op.json IR. */
|
|
299
|
+
export function opConfigFromIR(ir) {
|
|
300
|
+
if (ir.formatVersion !== OP_IR_FORMAT_VERSION) {
|
|
301
|
+
throw new Error(`op.json IR format mismatch: expected "${OP_IR_FORMAT_VERSION}", got "${ir.formatVersion}". ` +
|
|
302
|
+
`This op.json may be stale or from a newer chant version.`);
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
name: ir.name,
|
|
306
|
+
overview: ir.overview,
|
|
307
|
+
phases: ir.phases.map(opPhaseFromIR),
|
|
308
|
+
...(ir.depends.length > 0 ? { depends: ir.depends } : {}),
|
|
309
|
+
...(ir.onFailure.length > 0 ? { onFailure: ir.onFailure.map(opPhaseFromIR) } : {}),
|
|
310
|
+
...(Object.keys(ir.labels).length > 0 ? { labels: ir.labels } : {}),
|
|
311
|
+
...(ir.schedule ? { schedule: ir.schedule } : {}),
|
|
312
|
+
...(ir.workLease ? { workLease: ir.workLease } : {}),
|
|
313
|
+
...(ir.changesCheckout ? { changesCheckout: true } : {}),
|
|
314
|
+
...(ir.neverOverMcp ? { neverOverMcp: true } : {}),
|
|
315
|
+
...(ir.failOn ? { failOn: ir.failOn } : {}),
|
|
316
|
+
};
|
|
317
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Op verb classification (#1484) — generalizes `delete: "never" | "owned-only"
|
|
3
|
+
* | "gated"` (`../lifecycle` teardown/apply's `DeleteMode`) up one level, to
|
|
4
|
+
* the whole Op: read-only, mutating, or destructive. `ConvergeOp`'s
|
|
5
|
+
* dial × verb-class matrix (the issue's "Autonomy" table) needs to answer
|
|
6
|
+
* "what kind of thing is this dispatched Op, from the outside" for an
|
|
7
|
+
* arbitrary declared Op — including one this project's authors wrote, not
|
|
8
|
+
* just the pre-built composites — so classification walks `OpConfig`'s
|
|
9
|
+
* steps rather than trusting a self-reported tag.
|
|
10
|
+
*
|
|
11
|
+
* There is no existing per-Op verb-class field (`labels` is a free
|
|
12
|
+
* `Record<string,string>` an author may or may not set — `ApplyOp` tags
|
|
13
|
+
* `{ Apply: "true" }` but nothing requires it, and it carries no verb-class
|
|
14
|
+
* semantics on its own) and no existing "which activity names are
|
|
15
|
+
* destructive" registry (`../lint/pipeline-change-gate.ts`'s classifier is
|
|
16
|
+
* shaped for a `Component` composition's capability-verb steps, not an
|
|
17
|
+
* `OpConfig`'s activity steps — a genuinely different graph). This module is
|
|
18
|
+
* that registry's Op-shaped sibling: a small, explicit set of known
|
|
19
|
+
* mutating/destructive activity function names, plus the one piece of
|
|
20
|
+
* structured signal that already exists (`nativeApply`'s `deleteMode` arg).
|
|
21
|
+
*
|
|
22
|
+
* Fail-closed by construction: an activity `fn` this module doesn't
|
|
23
|
+
* recognize is classified `mutating`, never `read-only` — an unknown step
|
|
24
|
+
* might do anything, and "unknown never remediates" (the issue's own honesty
|
|
25
|
+
* requirement for symptoms) applies here too: this module never silently
|
|
26
|
+
* clears an Op to free-run just because its steps aren't in the known-safe
|
|
27
|
+
* list.
|
|
28
|
+
*/
|
|
29
|
+
/** Activity function names known to be read-only — verification, observation, audit. Anything not in this set is treated as at least `mutating` (fail-closed). */
|
|
30
|
+
const READ_ONLY_ACTIVITY_FNS = new Set([
|
|
31
|
+
"lifecycleSnapshot",
|
|
32
|
+
"lifecycleDiff",
|
|
33
|
+
"composeChangeSet",
|
|
34
|
+
"lifecyclePlanChangeSet",
|
|
35
|
+
"readChangeSetPart",
|
|
36
|
+
"httpCheck",
|
|
37
|
+
"policyGate",
|
|
38
|
+
"workflowSupplyChainAudit",
|
|
39
|
+
"pipelineSupplyChainAudit",
|
|
40
|
+
"receiptStaleness",
|
|
41
|
+
"waitForStack",
|
|
42
|
+
"waitForReady",
|
|
43
|
+
"waitForArgoSync",
|
|
44
|
+
"spriteReadFile",
|
|
45
|
+
"spriteListDir",
|
|
46
|
+
"listCheckpoints",
|
|
47
|
+
"convergeTick",
|
|
48
|
+
"spriteUrl",
|
|
49
|
+
"spriteServiceGet",
|
|
50
|
+
"spriteServiceList",
|
|
51
|
+
"spriteServiceLogs",
|
|
52
|
+
"spriteServicesObserve",
|
|
53
|
+
]);
|
|
54
|
+
/** Activity function names that always delete/destroy, regardless of args. */
|
|
55
|
+
const ALWAYS_DESTRUCTIVE_ACTIVITY_FNS = new Set([
|
|
56
|
+
"envTeardown",
|
|
57
|
+
"chantTeardown",
|
|
58
|
+
"azDelete",
|
|
59
|
+
"awsDelete",
|
|
60
|
+
"gcpDelete",
|
|
61
|
+
"spriteDestroy",
|
|
62
|
+
"spriteDelete",
|
|
63
|
+
"spriteServiceDelete",
|
|
64
|
+
"k3dDown",
|
|
65
|
+
"k3sUninstall",
|
|
66
|
+
]);
|
|
67
|
+
function stepsOf(config) {
|
|
68
|
+
const all = [...config.phases, ...(config.onFailure ?? [])].flatMap((p) => p.steps);
|
|
69
|
+
const flat = [];
|
|
70
|
+
for (const step of all) {
|
|
71
|
+
if (step.kind === "activity")
|
|
72
|
+
flat.push(step);
|
|
73
|
+
else if (step.kind === "effect")
|
|
74
|
+
flat.push(...step.steps.filter((s) => s.kind === "activity"));
|
|
75
|
+
}
|
|
76
|
+
return flat;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Classify an Op's own composition. Pure — reads only the passed config, no
|
|
80
|
+
* I/O. `nativeApply`'s `deleteMode` (`"never" | "owned-only" | "gated"`) is
|
|
81
|
+
* read straight off the step's `args` — `"owned-only"`/`"gated"` are
|
|
82
|
+
* destructive (both can delete a live resource), `"never"`/absent is merely
|
|
83
|
+
* mutating (creates/updates only). A step whose `fn` matches neither the
|
|
84
|
+
* read-only nor the destructive set is `mutating` by default (fail-closed).
|
|
85
|
+
*/
|
|
86
|
+
export function classifyOpVerbClass(config) {
|
|
87
|
+
let sawMutating = false;
|
|
88
|
+
for (const step of stepsOf(config)) {
|
|
89
|
+
if (ALWAYS_DESTRUCTIVE_ACTIVITY_FNS.has(step.fn))
|
|
90
|
+
return "destructive";
|
|
91
|
+
if (step.fn === "nativeApply") {
|
|
92
|
+
const deleteMode = step.args?.deleteMode;
|
|
93
|
+
if (deleteMode === "owned-only" || deleteMode === "gated")
|
|
94
|
+
return "destructive";
|
|
95
|
+
sawMutating = true;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (step.fn === "compensateApply") {
|
|
99
|
+
// Rollback compensation — mutating (it re-applies a prior state), not
|
|
100
|
+
// itself a fresh destructive act.
|
|
101
|
+
sawMutating = true;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (READ_ONLY_ACTIVITY_FNS.has(step.fn))
|
|
105
|
+
continue;
|
|
106
|
+
// Unknown or known-mutating fn: fail-closed to mutating.
|
|
107
|
+
sawMutating = true;
|
|
108
|
+
}
|
|
109
|
+
return sawMutating ? "mutating" : "read-only";
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Does this Op have its own approval gate anywhere in its phases (main or
|
|
113
|
+
* `onFailure`), including one nested inside an effect step?
|
|
114
|
+
*
|
|
115
|
+
* A declaration-time question, not a run-time one: a gate is a fact the
|
|
116
|
+
* executor decides against the ledger when it reaches one (#2119,
|
|
117
|
+
* `./gate.ts`), so this says "this op can stop for a human", never "this op
|
|
118
|
+
* will stop". `OPS014`'s dispatch refusals are the caller that needs it.
|
|
119
|
+
*/
|
|
120
|
+
export function isGated(config) {
|
|
121
|
+
const isGate = (s) => s.kind === "gate";
|
|
122
|
+
for (const phase of [...config.phases, ...(config.onFailure ?? [])]) {
|
|
123
|
+
for (const step of phase.steps) {
|
|
124
|
+
if (isGate(step))
|
|
125
|
+
return true;
|
|
126
|
+
if (step.kind === "effect" && step.steps.some(isGate))
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return false;
|
|
131
|
+
}
|