@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,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate state for `chant workspace status --json` (#2674): each member's gates
|
|
3
|
+
* as its gate ledger on `chant/lifecycle` records them, so a reader such as
|
|
4
|
+
* hud never runs `git show` on the branch itself.
|
|
5
|
+
*
|
|
6
|
+
* A member's gate ledger is the `_gates/` directory under its ledger prefix:
|
|
7
|
+
* `_members/<member>/_gates/<component>.jsonl` for a member that writes the
|
|
8
|
+
* member layout (#2538), and the flat `_gates/<component>.jsonl` otherwise,
|
|
9
|
+
* chosen the same way as its release ledger. Each file is keyed by the
|
|
10
|
+
* component, or by the op for a gate an Op run reached, and holds both the
|
|
11
|
+
* pending facts a run records and the approvals `chant approve` records
|
|
12
|
+
* (`../lifecycle/gate-ledger.ts`).
|
|
13
|
+
*
|
|
14
|
+
* A gate's state is decided the way a run decides it (`evaluateGate` in
|
|
15
|
+
* `../op/gate.ts`), without writing anything: the newest pending fact for the
|
|
16
|
+
* gate in its environment is the anchor, only approvals recorded since it and
|
|
17
|
+
* for its plan count, and a gate with an `approval` block counts them with
|
|
18
|
+
* `tallyGateApprovals`, as `describeApprovalProgress` does after an approve.
|
|
19
|
+
* Its human quorum reaches back to `humanQuorumSince` (#3206), as a run's does.
|
|
20
|
+
*/
|
|
21
|
+
import { execFileSync } from "node:child_process";
|
|
22
|
+
import { samePlanDigest } from "../lifecycle/plan-digest.js";
|
|
23
|
+
import { isPendingGateExpired, latestPendingGate, latestResolutionForPlan, parseGateLedger } from "../lifecycle/gate-ledger.js";
|
|
24
|
+
import { humanQuorumSince, tallyGateApprovals } from "../op/gate.js";
|
|
25
|
+
/** Why a member's gates can't be listed. Closed: a new code is a contract change. */
|
|
26
|
+
export const GATE_REASON_CODES = [
|
|
27
|
+
/** The checkout has no `chant/lifecycle` branch, so there is no ledger to read gates from. */
|
|
28
|
+
"gates-no-ledger",
|
|
29
|
+
/** The branch has no gate ledger for the member: no run of it has reached a gate. */
|
|
30
|
+
"gates-no-gate-ledger",
|
|
31
|
+
/** Reading the member's gate ledger failed, so no gate is listed. */
|
|
32
|
+
"gates-ledger-unreadable",
|
|
33
|
+
];
|
|
34
|
+
function git(cwd, args) {
|
|
35
|
+
return execFileSync("git", args, { cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"], maxBuffer: 64 * 1024 * 1024 });
|
|
36
|
+
}
|
|
37
|
+
export const defaultGateLedgerReader = async (dir, commit, cwd) => {
|
|
38
|
+
try {
|
|
39
|
+
git(cwd, ["rev-parse", "--verify", "--quiet", `${commit}:${dir}`]);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const files = new Map();
|
|
45
|
+
for (const name of git(cwd, ["ls-tree", "--name-only", `${commit}:${dir}`]).split("\n")) {
|
|
46
|
+
if (!name.endsWith(".jsonl"))
|
|
47
|
+
continue;
|
|
48
|
+
files.set(name.slice(0, -".jsonl".length), git(cwd, ["cat-file", "blob", `${commit}:${dir}/${name}`]));
|
|
49
|
+
}
|
|
50
|
+
return files;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* The exact `chant approve` line for a gate. A gate bound to a plan (#2300)
|
|
54
|
+
* gets `--plan <digest>` too (#2832), so running the line back approves the
|
|
55
|
+
* plan this read showed and not whatever happens to be pending by the time
|
|
56
|
+
* someone runs it.
|
|
57
|
+
*/
|
|
58
|
+
export function approveCommand(component, gate, env, planDigest, signed = false) {
|
|
59
|
+
return `chant approve ${component} ${gate}${env !== null ? ` --env ${env}` : ""}${planDigest ? ` --plan ${planDigest}` : ""}${signed ? " --sign" : ""}`;
|
|
60
|
+
}
|
|
61
|
+
const approvalOf = (r) => ({ principal: r.resolvedBy, channel: r.origin ?? null, relayedBy: r.relayedBy ?? null, at: r.timestamp });
|
|
62
|
+
/** One gate in one environment, decided against its newest pending fact. */
|
|
63
|
+
function decide(component, standing, facts, all, now, rule) {
|
|
64
|
+
const gate = standing.gate;
|
|
65
|
+
// #3163: under identity.gates, an unsigned approval, or one from outside the class, doesn't count, as a run reads it.
|
|
66
|
+
const resolutions = rule === null ? all : all.filter((r) => r.gate !== gate || rule.refuses(r) === null);
|
|
67
|
+
const env = standing.environment ?? null;
|
|
68
|
+
const since = standing.timestamp;
|
|
69
|
+
const planDigest = standing.planDigest;
|
|
70
|
+
// #2574: an approval recorded for another environment doesn't count; one
|
|
71
|
+
// that records none is kept, so it reads as a mismatch, as a run reads it.
|
|
72
|
+
const own = env === null ? resolutions : resolutions.filter((r) => r.environment === undefined || r.environment === env);
|
|
73
|
+
let approved;
|
|
74
|
+
let approvals;
|
|
75
|
+
let needed = 1;
|
|
76
|
+
let mismatched;
|
|
77
|
+
if (standing.approval) {
|
|
78
|
+
// #3206: a human approval from before a fact re-recorded for a mode or context change still counts.
|
|
79
|
+
const tally = tallyGateApprovals(own, gate, since, planDigest, standing.approval, humanQuorumSince(facts, standing));
|
|
80
|
+
approved = tally.permit !== undefined || tally.counted.length >= tally.need;
|
|
81
|
+
approvals = tally.permit && !tally.counted.includes(tally.permit) ? [...tally.counted, tally.permit] : tally.counted;
|
|
82
|
+
needed = tally.need;
|
|
83
|
+
mismatched = tally.mismatched;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const at = (r) => new Date(r.timestamp).getTime();
|
|
87
|
+
approvals = own
|
|
88
|
+
.filter((r) => r.gate === gate && at(r) >= new Date(since).getTime() && (planDigest === undefined || samePlanDigest(r.planDigest, planDigest)))
|
|
89
|
+
.sort((a, b) => at(a) - at(b));
|
|
90
|
+
approved = approvals.length > 0;
|
|
91
|
+
mismatched = latestResolutionForPlan(own, gate, since, planDigest).mismatched;
|
|
92
|
+
}
|
|
93
|
+
const state = approved ? "approved" : isPendingGateExpired(standing, now) ? "expired" : mismatched ? "superseded" : "pending";
|
|
94
|
+
return {
|
|
95
|
+
component,
|
|
96
|
+
name: gate,
|
|
97
|
+
env,
|
|
98
|
+
planDigest: planDigest ?? null,
|
|
99
|
+
state,
|
|
100
|
+
recordedAt: standing.timestamp,
|
|
101
|
+
expiresAt: standing.expiresAt,
|
|
102
|
+
approvals: approvals.map(approvalOf),
|
|
103
|
+
needed,
|
|
104
|
+
signed: rule === null ? null : { class: rule.requirement.class },
|
|
105
|
+
approve: standing.answer ? `chant workspace points answer ${standing.answer.id} --answer <value> --by <name>` : approveCommand(component, gate, env, planDigest, rule !== null),
|
|
106
|
+
...(standing.answer ? { answer: { point: standing.answer.point, id: standing.answer.id, path: standing.answer.path } } : {}),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Every gate in one ledger file, one per gate and environment, for the
|
|
111
|
+
* environments in `envs`. A gate whose facts record no environment (an Op
|
|
112
|
+
* gate) is listed whatever `envs` is. A pending fact with no environment on a
|
|
113
|
+
* gate whose other facts have one is left out, as a run leaves it out: such a
|
|
114
|
+
* line binds no environment, and `chant approve --expire` writes one.
|
|
115
|
+
*/
|
|
116
|
+
export function gatesInLedger(component, content, envs, now, rules = () => null) {
|
|
117
|
+
const { pending, resolutions, malformed } = parseGateLedger(content);
|
|
118
|
+
const gates = [];
|
|
119
|
+
for (const gate of [...new Set(pending.map((p) => p.gate))].sort()) {
|
|
120
|
+
const facts = pending.filter((p) => p.gate === gate);
|
|
121
|
+
const bound = facts.some((p) => p.environment !== undefined);
|
|
122
|
+
const byEnv = new Map();
|
|
123
|
+
for (const p of facts) {
|
|
124
|
+
const env = p.environment ?? null;
|
|
125
|
+
if (bound && env === null)
|
|
126
|
+
continue;
|
|
127
|
+
if (env !== null && !envs.includes(env))
|
|
128
|
+
continue;
|
|
129
|
+
byEnv.set(env, [...(byEnv.get(env) ?? []), p]);
|
|
130
|
+
}
|
|
131
|
+
for (const env of [...byEnv.keys()].sort((a, b) => envs.indexOf(a ?? "") - envs.indexOf(b ?? ""))) {
|
|
132
|
+
const envFacts = byEnv.get(env);
|
|
133
|
+
gates.push(decide(component, latestPendingGate(envFacts, gate), envFacts, resolutions, now, rules(gate)));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return { gates, malformed };
|
|
137
|
+
}
|
|
138
|
+
/** Read one member's gate ledger directory at `commit` and list its gates. */
|
|
139
|
+
export async function readMemberGates(dir, layout, commit, envs, cwd, now, read = defaultGateLedgerReader, rules = () => null) {
|
|
140
|
+
const ledger = { layout, path: dir, shared: false, malformed: 0, reason: null };
|
|
141
|
+
if (commit === null) {
|
|
142
|
+
return { gates: [], ledger: { ...ledger, reason: { code: "gates-no-ledger", message: "the checkout has no chant/lifecycle branch, so no gate is recorded in it" } } };
|
|
143
|
+
}
|
|
144
|
+
let files;
|
|
145
|
+
try {
|
|
146
|
+
files = await read(dir, commit, cwd);
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
const message = err instanceof Error ? err.message.split("\n")[0] : String(err);
|
|
150
|
+
return { gates: [], ledger: { ...ledger, reason: { code: "gates-ledger-unreadable", message: `${dir}: ${message}` } } };
|
|
151
|
+
}
|
|
152
|
+
if (files === null) {
|
|
153
|
+
return { gates: [], ledger: { ...ledger, reason: { code: "gates-no-gate-ledger", message: `${dir} does not exist on chant/lifecycle: no run has reached a gate` } } };
|
|
154
|
+
}
|
|
155
|
+
const gates = [];
|
|
156
|
+
for (const component of [...files.keys()].sort()) {
|
|
157
|
+
const read = gatesInLedger(component, files.get(component), envs, now, rules);
|
|
158
|
+
gates.push(...read.gates);
|
|
159
|
+
ledger.malformed += read.malformed;
|
|
160
|
+
}
|
|
161
|
+
return { gates, ledger };
|
|
162
|
+
}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stewards in `chant workspace status --json` (#2731): which steward runs a
|
|
3
|
+
* member's operational work, the form it takes in the environment asked for,
|
|
4
|
+
* its Ops with their schedules, and each Op's last run.
|
|
5
|
+
*
|
|
6
|
+
* The steward itself is read from its declaration, the same `*.op.ts` files
|
|
7
|
+
* `chant operator --steward` reads (`../op/discover.ts`), through the index
|
|
8
|
+
* kept per tree (`./steward-index.ts`, #3636), and only for a member
|
|
9
|
+
* of kind `chant` that is a chant project of its own (a `chant.config.ts` or
|
|
10
|
+
* `.json` in its directory), so a member never lists a parent project's
|
|
11
|
+
* steward. Everything
|
|
12
|
+
* else is read from the local `chant/lifecycle` branch and refs, never
|
|
13
|
+
* fetched, as the rest of status is:
|
|
14
|
+
*
|
|
15
|
+
* - each Op's last run is the newest record in its run ledger,
|
|
16
|
+
* `<env>/runs__<op>.jsonl` under the member's ledger prefix, where `<env>`
|
|
17
|
+
* is the Op's own `labels.Env` or `local`;
|
|
18
|
+
* - an Op's `inFlight` is the run of it in flight now, from the record a
|
|
19
|
+
* run keeps beside the checkout's git directory while it runs
|
|
20
|
+
* (`../op/run-live.ts`): its phase and step, the phases it has finished and
|
|
21
|
+
* its newest activity lines. Null once the run's ledger record is written,
|
|
22
|
+
* or when the process that wrote it is gone;
|
|
23
|
+
* - `waiting` lists the open decision points the steward waits on (#2749):
|
|
24
|
+
* each Op whose newest run is the steward's own and stopped on a question
|
|
25
|
+
* that is still open. The question's state is read now, the way `points`
|
|
26
|
+
* reads it (`readQuestionStates`), not copied from the run ledger, which
|
|
27
|
+
* keeps the state the run stopped with. A question answered since, or
|
|
28
|
+
* whose record is gone, is not waited on; nor is one whose Op has a newer
|
|
29
|
+
* run in flight that has not written its record yet: the Op's lease or one
|
|
30
|
+
* of its work leases was taken after the waiting run ended
|
|
31
|
+
* (`newerRunInFlight`). When the questions can't be read, the ledger's
|
|
32
|
+
* state stands, as the operator's does. A run is the steward's when its
|
|
33
|
+
* record names it (`steward`, written for a run started in the steward's
|
|
34
|
+
* turn or under `CHANT_STEWARD`), so this also covers the member's other
|
|
35
|
+
* Ops, those no steward lists, that such a run belongs to, such as an Op
|
|
36
|
+
* the steward's process starts itself;
|
|
37
|
+
* - `lease` is the local steward's own lease ref
|
|
38
|
+
* (`refs/chant/lease/[<prefix>]_stewards/<name>`), present while a
|
|
39
|
+
* `chant operator --steward` holds it or until it expires;
|
|
40
|
+
* - an Op's `workLease.held` is the work leases its turns hold (#2748): those
|
|
41
|
+
* whose holder is `<steward>/<op>@...` (`stewardWorkHolder`), read from the
|
|
42
|
+
* ledger of the Op's work kind, or the member's own;
|
|
43
|
+
* - an Op the steward runs beside its turns (#2861) has `beside`: whether it
|
|
44
|
+
* declares a ready step, and the Op's own lease
|
|
45
|
+
* (`refs/chant/lease/[<prefix>]<op>`), which a run of it holds while it runs.
|
|
46
|
+
* Its waiting run and its work leases are listed as for any of its Ops.
|
|
47
|
+
*/
|
|
48
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
49
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
50
|
+
import { stewardFormFor, stewardLeaseName } from "../op/steward.js";
|
|
51
|
+
import { readRunLedger, runEnvOf } from "../lifecycle/run-ledger.js";
|
|
52
|
+
import { readConvergeLedger } from "../lifecycle/converge-ledger.js";
|
|
53
|
+
import { leaseRef } from "../lifecycle/lease.js";
|
|
54
|
+
import { readBlobBySha, readRefSha } from "../lifecycle/git.js";
|
|
55
|
+
import { resolveMemberLedger } from "../lifecycle/member-ledger.js";
|
|
56
|
+
import { listWorkLeases } from "../lifecycle/work-lease.js";
|
|
57
|
+
import { stewardWorkHolder } from "../op/work-lease-run.js";
|
|
58
|
+
import { readStewardIndex } from "./steward-index.js";
|
|
59
|
+
import { readInFlightRun } from "../op/run-live.js";
|
|
60
|
+
import { approveCommand } from "./status-gates.js";
|
|
61
|
+
/** Why a member's stewards can't be fully listed. Closed: a new code is a contract change. */
|
|
62
|
+
export const STEWARD_REASON_CODES = [
|
|
63
|
+
/** An `*.op.ts` file could not be imported, so a steward it declares may be missing. */
|
|
64
|
+
"stewards-unreadable",
|
|
65
|
+
/** A steward was dropped: its name, or an Op it lists, belongs to another steward. */
|
|
66
|
+
"stewards-conflict",
|
|
67
|
+
/** Reading an Op's run ledger, or a ConvergeOp's converge ledger, failed, so its last run or last tick is null. */
|
|
68
|
+
"steward-runs-unreadable",
|
|
69
|
+
];
|
|
70
|
+
async function readQuestionStates(cwd) {
|
|
71
|
+
const { readQuestionStates: read } = await import("./points-cli.js");
|
|
72
|
+
return read(cwd);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The point a run stopped on, with the question's state now and whether it
|
|
76
|
+
* is still open. A question whose record is gone is not open, as the
|
|
77
|
+
* operator reads it (`stewardWaits` in `../op/operator.ts`); when the
|
|
78
|
+
* questions can't be read, the run ledger's state stands and it is open.
|
|
79
|
+
*/
|
|
80
|
+
function pointOf(p, states) {
|
|
81
|
+
const recorded = p.state === "proposed" ? "proposed" : "escalated";
|
|
82
|
+
const now = states?.get(p.id);
|
|
83
|
+
const state = now === "escalated" || now === "proposed" || now === "answered" ? now : recorded;
|
|
84
|
+
return {
|
|
85
|
+
wait: { id: p.id, point: p.point, state, path: p.path, subject: p.subject ?? null, since: p.since },
|
|
86
|
+
open: states === null || (now !== undefined && now !== "answered"),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Whether a newer run of the Op is in flight than the one that ended at
|
|
91
|
+
* `ended`: the Op's own lease is live, or one of its work leases is active,
|
|
92
|
+
* and was taken after that run ended. A run writes its record when it ends,
|
|
93
|
+
* so until then the ledger's newest record is the older run's.
|
|
94
|
+
*/
|
|
95
|
+
function newerRunInFlight(ended, lease, held) {
|
|
96
|
+
const after = (at) => Date.parse(at) >= Date.parse(ended);
|
|
97
|
+
return (lease?.live === true && after(lease.acquiredAt)) || held.some((l) => l.state === "active" && after(l.acquiredAt));
|
|
98
|
+
}
|
|
99
|
+
/** The Op's run in flight, unless its ledger record is already the newest. Never throws. */
|
|
100
|
+
async function inFlightOf(memberDir, env, op, lastRunId) {
|
|
101
|
+
try {
|
|
102
|
+
const run = await readInFlightRun(memberDir, env, op);
|
|
103
|
+
if (!run || run.id === lastRunId)
|
|
104
|
+
return null;
|
|
105
|
+
return {
|
|
106
|
+
id: run.id,
|
|
107
|
+
started: run.started,
|
|
108
|
+
updated: run.updated,
|
|
109
|
+
steward: run.steward,
|
|
110
|
+
item: run.item,
|
|
111
|
+
phase: run.phase,
|
|
112
|
+
step: run.step,
|
|
113
|
+
phases: run.phases.map((p) => ({ name: p.name, status: p.status, durationMs: p.durationMs })),
|
|
114
|
+
activity: run.activity,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function gateOf(g, opName) {
|
|
122
|
+
const op = g.op ?? opName;
|
|
123
|
+
return { name: g.name, since: g.since, op, approve: approveCommand(op, g.name, null) };
|
|
124
|
+
}
|
|
125
|
+
function tickOf(t) {
|
|
126
|
+
return {
|
|
127
|
+
id: t.id ?? null,
|
|
128
|
+
timestamp: t.timestamp,
|
|
129
|
+
log: t.log,
|
|
130
|
+
firedRuleIds: [...t.firedRuleIds],
|
|
131
|
+
outcomes: t.outcomes.map((o) => ({
|
|
132
|
+
ruleId: o.ruleId,
|
|
133
|
+
action: o.action,
|
|
134
|
+
op: o.op ?? null,
|
|
135
|
+
resource: o.resource ?? null,
|
|
136
|
+
reason: o.reason ?? null,
|
|
137
|
+
})),
|
|
138
|
+
resources: t.resources ? t.resources.map((r) => ({ name: r.name, status: r.status, detail: r.detail ?? null })) : null,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/** Whether a directory is a chant project of its own. */
|
|
142
|
+
function isChantProject(dir) {
|
|
143
|
+
return existsSync(join(dir, "chant.config.ts")) || existsSync(join(dir, "chant.config.json"));
|
|
144
|
+
}
|
|
145
|
+
/** A lease ref of the member, by its lease name (`_stewards/<name>`, or an Op's). */
|
|
146
|
+
async function readLeaseRef(leaseName, memberDir, now) {
|
|
147
|
+
try {
|
|
148
|
+
const { prefix } = await resolveMemberLedger(memberDir);
|
|
149
|
+
const sha = await readRefSha(leaseRef(leaseName, prefix), { cwd: memberDir });
|
|
150
|
+
if (!sha)
|
|
151
|
+
return null;
|
|
152
|
+
const record = JSON.parse((await readBlobBySha(sha, { cwd: memberDir })) ?? "");
|
|
153
|
+
if (typeof record.holder !== "string" || typeof record.expiresAt !== "string" || typeof record.acquiredAt !== "string")
|
|
154
|
+
return null;
|
|
155
|
+
return {
|
|
156
|
+
holder: record.holder,
|
|
157
|
+
acquiredAt: record.acquiredAt,
|
|
158
|
+
expiresAt: record.expiresAt,
|
|
159
|
+
live: new Date(record.expiresAt).getTime() > new Date(now).getTime(),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/** An Op's `beside` entry (#2861): null for an Op run as one of the steward's turns. */
|
|
167
|
+
async function besideOf(steward, op, memberDir, now) {
|
|
168
|
+
const beside = steward.beside.find((b) => b.op === op);
|
|
169
|
+
if (!beside)
|
|
170
|
+
return null;
|
|
171
|
+
return { ready: beside.ready, lease: await readLeaseRef(op, memberDir, now) };
|
|
172
|
+
}
|
|
173
|
+
/** The work leases `steward`'s turns of `op` hold, from the ledger of the Op's kind or the member's. */
|
|
174
|
+
async function readHeldWorkLeases(steward, op, memberDir, now) {
|
|
175
|
+
try {
|
|
176
|
+
const kind = op.workLease?.kind;
|
|
177
|
+
const cwd = kind ? dirname(resolve(memberDir, kind)) : memberDir;
|
|
178
|
+
const { prefix } = await resolveMemberLedger(cwd);
|
|
179
|
+
const mine = stewardWorkHolder(steward, op.name, "");
|
|
180
|
+
return (await listWorkLeases({ cwd, memberPrefix: prefix, now: new Date(now) }))
|
|
181
|
+
.filter((l) => l.holder.startsWith(mine))
|
|
182
|
+
.map((l) => ({ item: l.item, holder: l.holder, token: l.token, acquiredAt: l.acquiredAt, expiresAt: l.expiresAt, state: l.state }));
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* The stewards declared in one member, for `env`. `memberDir` is absolute.
|
|
190
|
+
* Only a member of kind `chant` with a config of its own is read.
|
|
191
|
+
*/
|
|
192
|
+
export async function readMemberStewards(memberDir, env, now, kind = "chant", box = null, deps = {}) {
|
|
193
|
+
const reasons = [];
|
|
194
|
+
// Read once per member, and only when a run stopped on a question.
|
|
195
|
+
let states;
|
|
196
|
+
const questionStates = () => (states ?? (states = (deps.readQuestions ?? readQuestionStates)(memberDir)));
|
|
197
|
+
if (kind !== "chant" || !isChantProject(memberDir))
|
|
198
|
+
return { stewards: [], reasons };
|
|
199
|
+
let index;
|
|
200
|
+
try {
|
|
201
|
+
index = await (deps.readIndex ?? readStewardIndex)(memberDir);
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
reasons.push({ code: "stewards-unreadable", message: err instanceof Error ? err.message.split("\n")[0] : String(err) });
|
|
205
|
+
return { stewards: [], reasons };
|
|
206
|
+
}
|
|
207
|
+
for (const message of index.errors)
|
|
208
|
+
reasons.push({ code: "stewards-unreadable", message });
|
|
209
|
+
for (const message of index.conflicts)
|
|
210
|
+
reasons.push({ code: "stewards-conflict", message });
|
|
211
|
+
const stewards = [];
|
|
212
|
+
for (const declaration of [...index.stewards].sort((a, b) => a.name.localeCompare(b.name))) {
|
|
213
|
+
const ops = [];
|
|
214
|
+
const waiting = [];
|
|
215
|
+
for (const op of declaration.ops) {
|
|
216
|
+
const opEnv = runEnvOf(op);
|
|
217
|
+
const workLease = op.workLease
|
|
218
|
+
? { kind: op.workLease.kind ?? null, held: await readHeldWorkLeases(declaration.name, op, memberDir, now) }
|
|
219
|
+
: null;
|
|
220
|
+
const beside = await besideOf(declaration, op.name, memberDir, now);
|
|
221
|
+
let lastRun = null;
|
|
222
|
+
try {
|
|
223
|
+
const newest = (await readRunLedger(opEnv, op.name, { cwd: memberDir })).records.at(-1);
|
|
224
|
+
if (newest) {
|
|
225
|
+
const point = newest.point ? pointOf(newest.point, await questionStates()) : null;
|
|
226
|
+
lastRun = {
|
|
227
|
+
id: newest.id,
|
|
228
|
+
status: newest.status,
|
|
229
|
+
started: newest.started,
|
|
230
|
+
ended: newest.ended,
|
|
231
|
+
gate: newest.gate ? gateOf(newest.gate, op.name) : null,
|
|
232
|
+
point: point?.wait ?? null,
|
|
233
|
+
phases: newest.phases.map((p) => ({
|
|
234
|
+
name: p.name,
|
|
235
|
+
status: p.status,
|
|
236
|
+
durationMs: p.durationMs ?? p.steps.reduce((sum, st) => sum + st.durationMs, 0),
|
|
237
|
+
})),
|
|
238
|
+
};
|
|
239
|
+
if (newest.status === "waiting" &&
|
|
240
|
+
point?.open &&
|
|
241
|
+
newest.steward === declaration.name &&
|
|
242
|
+
!newerRunInFlight(newest.ended, beside?.lease ?? null, workLease?.held ?? [])) {
|
|
243
|
+
waiting.push({ op: op.name, run: newest.id, ...point.wait });
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
reasons.push({
|
|
249
|
+
code: "steward-runs-unreadable",
|
|
250
|
+
message: `${opEnv}/runs__${op.name}.jsonl: ${err instanceof Error ? err.message.split("\n")[0] : String(err)}`,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
const inFlight = await inFlightOf(memberDir, opEnv, op.name, lastRun?.id ?? null);
|
|
254
|
+
let lastTick = null;
|
|
255
|
+
if (op.labels?.Converge === "true") {
|
|
256
|
+
try {
|
|
257
|
+
const newest = (await readConvergeLedger(opEnv, { cwd: memberDir })).records.filter((r) => r.op === op.name).at(-1);
|
|
258
|
+
if (newest)
|
|
259
|
+
lastTick = tickOf(newest);
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
reasons.push({
|
|
263
|
+
code: "steward-runs-unreadable",
|
|
264
|
+
message: `${opEnv}/converge.jsonl: ${err instanceof Error ? err.message.split("\n")[0] : String(err)}`,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
ops.push({
|
|
269
|
+
name: op.name,
|
|
270
|
+
schedule: op.schedule ? { cron: op.schedule.cron, overlap: "skip" } : null,
|
|
271
|
+
env: opEnv,
|
|
272
|
+
lastRun,
|
|
273
|
+
inFlight,
|
|
274
|
+
lastTick,
|
|
275
|
+
changesCheckout: op.changesCheckout === true,
|
|
276
|
+
workLease,
|
|
277
|
+
beside,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
stewards.push({
|
|
281
|
+
name: declaration.name,
|
|
282
|
+
file: relative(realpathSync(memberDir), realpathSync(declaration.filePath)).split("\\").join("/"),
|
|
283
|
+
form: stewardFormFor(declaration, env),
|
|
284
|
+
forms: { default: declaration.form.default, environments: { ...declaration.form.environments } },
|
|
285
|
+
vault: declaration.vault,
|
|
286
|
+
capabilities: declaration.capabilities.map((name) => {
|
|
287
|
+
const declared = box?.capabilities.find((c) => c.name === name);
|
|
288
|
+
return { name, broker: declared?.broker ?? null, declared: declared !== undefined };
|
|
289
|
+
}),
|
|
290
|
+
lease: await readLeaseRef(stewardLeaseName(declaration.name), memberDir, now),
|
|
291
|
+
ops,
|
|
292
|
+
waiting,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
if (stewards.length > 0 && index.otherOps)
|
|
296
|
+
await addUndeclaredWaits(memberDir, stewards, index.otherOps, reasons, now, questionStates);
|
|
297
|
+
return { stewards, reasons };
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* The waiting runs of the member's Ops that no steward lists, each under the
|
|
301
|
+
* steward its record names. A steward's process can start an Op itself
|
|
302
|
+
* with `CHANT_STEWARD` set (studio#137), and the run ledger then records
|
|
303
|
+
* the run as the steward's though the declaration does not list the Op.
|
|
304
|
+
* `ops` are the member's Ops no steward lists, from the index; import
|
|
305
|
+
* failures are left out there, as discovering the stewards reported them as
|
|
306
|
+
* `stewards-unreadable`.
|
|
307
|
+
*/
|
|
308
|
+
async function addUndeclaredWaits(memberDir, stewards, ops, reasons, now, questionStates) {
|
|
309
|
+
const byName = new Map(stewards.map((s) => [s.name, s]));
|
|
310
|
+
for (const op of [...ops].sort((a, b) => a.name.localeCompare(b.name))) {
|
|
311
|
+
const opEnv = runEnvOf(op);
|
|
312
|
+
try {
|
|
313
|
+
const newest = (await readRunLedger(opEnv, op.name, { cwd: memberDir })).records.at(-1);
|
|
314
|
+
const steward = newest?.steward ? byName.get(newest.steward) : undefined;
|
|
315
|
+
if (steward && newest?.status === "waiting" && newest.point) {
|
|
316
|
+
const point = pointOf(newest.point, await questionStates());
|
|
317
|
+
const held = op.workLease ? await readHeldWorkLeases(steward.name, op, memberDir, now) : [];
|
|
318
|
+
if (point.open && !newerRunInFlight(newest.ended, await readLeaseRef(op.name, memberDir, now), held)) {
|
|
319
|
+
steward.waiting.push({ op: op.name, run: newest.id, ...point.wait });
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
reasons.push({
|
|
325
|
+
code: "steward-runs-unreadable",
|
|
326
|
+
message: `${opEnv}/runs__${op.name}.jsonl: ${err instanceof Error ? err.message.split("\n")[0] : String(err)}`,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|