@intentius/chant 0.124.13 → 0.124.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.js +668 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.js +312 -0
- package/dist/child-project.js +21 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.js +134 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.js +305 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.js +208 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.js +260 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.js +193 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.js +64 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.js +997 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +460 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.js +587 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.js +245 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/lexicon-module.ts +3 -0
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/discover.ts +3 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +1 -1
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The work lease (#2732, ws-055 option a): who is working on which work item,
|
|
3
|
+
* as a lease beside the operator lease.
|
|
4
|
+
*
|
|
5
|
+
* A work item's lease is the operator lease (./lease.ts) under the key
|
|
6
|
+
* `work/<id>`, so its ref is `refs/chant/lease/work/<id>`, or
|
|
7
|
+
* `refs/chant/lease/_members/<member>/work/<id>` in a workspace member's
|
|
8
|
+
* ledger (#2524 D7). It keeps every property the operator lease has: a claim
|
|
9
|
+
* is one compare-and-set of that ref, the record carries a fencing token that
|
|
10
|
+
* changes only when the lease changes hands, it expires after its time to
|
|
11
|
+
* live, and it is pushed to and fetched from the project's remote. Unlike the
|
|
12
|
+
* operator's, a work lease counts only once the remote has taken it
|
|
13
|
+
* (`requirePush`), so two workers in separate clones cannot both hold one
|
|
14
|
+
* item.
|
|
15
|
+
*
|
|
16
|
+
* The ref holds only the live lease. Every claim, renew and release also
|
|
17
|
+
* appends a line to `_leases/<id>.jsonl` on `chant/lifecycle`, the same
|
|
18
|
+
* append-only shape as `_gates/<op>.jsonl` (./gate-ledger.ts), so the history
|
|
19
|
+
* of an item's leases is a ledger like the others.
|
|
20
|
+
*
|
|
21
|
+
* The lease is coordination, not a record of work: it never touches the
|
|
22
|
+
* working branch, so it stays out of a release's nothing-to-ship test and out
|
|
23
|
+
* of the write-scope checks (ws-055, and chud's own leases.mjs before it).
|
|
24
|
+
*
|
|
25
|
+
* Which ledger an item's lease lives in is decided by the caller through
|
|
26
|
+
* `cwd`: `chant workspace work` passes the directory of the work kind file,
|
|
27
|
+
* so the member owning the kind owns its items' leases wherever the command
|
|
28
|
+
* runs from.
|
|
29
|
+
*/
|
|
30
|
+
import { sortedJsonReplacer } from "../utils.js";
|
|
31
|
+
import { getRuntime } from "../runtime-adapter.js";
|
|
32
|
+
import { acquireLease, leaseRef, LEASE_REF_PREFIX, LEASE_REMOTE_TRACKING_PREFIX, readLease, releaseLease, } from "./lease.js";
|
|
33
|
+
import { fetchLifecycleStatus, pushLifecycle, readBlobBySha, readBlobFromPath, readPathSha, RefCASConflictError, writeBlobToPath, } from "./git.js";
|
|
34
|
+
import { dirname } from "node:path";
|
|
35
|
+
import { resolveMemberLedger } from "./member-ledger.js";
|
|
36
|
+
import { WORK_ITEM_ID_PATTERN, isWorkItemId, workItemIdProblem } from "./work-item-id.js";
|
|
37
|
+
/** The key prefix of a work lease under the operator lease's ref namespace. */
|
|
38
|
+
export const WORK_LEASE_KEY_PREFIX = "work/";
|
|
39
|
+
/** The directory on `chant/lifecycle` that holds lease histories, under a member's prefix when it has one. */
|
|
40
|
+
export const LEASES_DIR = "_leases";
|
|
41
|
+
/** How long a claim lasts unless renewed: chud's default, which its dispatcher renews at a third of. */
|
|
42
|
+
export const DEFAULT_WORK_LEASE_TTL_MS = 10 * 60000;
|
|
43
|
+
export { WORK_ITEM_ID_PATTERN, isWorkItemId, workItemIdProblem };
|
|
44
|
+
/** How long a claim waits out another process's lock on the ref before calling it stale. */
|
|
45
|
+
const LOCK_WAIT_MS = 2000;
|
|
46
|
+
const APPEND_RETRY_ATTEMPTS = 5;
|
|
47
|
+
/** The lease key of work item `id`. */
|
|
48
|
+
export function workLeaseKey(id) {
|
|
49
|
+
return `${WORK_LEASE_KEY_PREFIX}${id}`;
|
|
50
|
+
}
|
|
51
|
+
/** The lease ref of work item `id` in the ledger with `memberPrefix`. */
|
|
52
|
+
export function workLeaseRef(id, memberPrefix = "") {
|
|
53
|
+
return leaseRef(workLeaseKey(id), memberPrefix);
|
|
54
|
+
}
|
|
55
|
+
/** The path of work item `id`'s lease history on `chant/lifecycle`. */
|
|
56
|
+
export function leaseHistoryPath(id, memberPrefix = "") {
|
|
57
|
+
return `${memberPrefix}${LEASES_DIR}/${id}.jsonl`;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* How a work lease can end (#3147): the closed list of outcomes a release
|
|
61
|
+
* records. A new outcome is a contract change. Readers of an older history
|
|
62
|
+
* may still find free text from before the list was closed, which counts as
|
|
63
|
+
* an attempt (see {@link outcomeCountsAsAttempt}).
|
|
64
|
+
*/
|
|
65
|
+
export const WORK_LEASE_OUTCOMES = [
|
|
66
|
+
/** The work was finished: built, checked and recorded. */
|
|
67
|
+
"done",
|
|
68
|
+
/** A build ran and did not finish, or the run failed. Counts as an attempt. */
|
|
69
|
+
"not_done",
|
|
70
|
+
/** An expired lease closed out by someone other than its holder: the worker went away. Counts as an attempt. */
|
|
71
|
+
"abandoned",
|
|
72
|
+
/** The run stopped at a gate, waiting for an approval. */
|
|
73
|
+
"gated",
|
|
74
|
+
/** The run stopped on a decision point's open question, waiting for a person. */
|
|
75
|
+
"waiting",
|
|
76
|
+
/** The item was dropped, such as by a refuse at the understand point. Nothing was built. */
|
|
77
|
+
"dropped",
|
|
78
|
+
/** The understand point answered redraft: the item goes back to its author. Nothing was built. */
|
|
79
|
+
"redraft",
|
|
80
|
+
/** The understand point answered ask: the item waits on a question to its author. Nothing was built. */
|
|
81
|
+
"ask",
|
|
82
|
+
];
|
|
83
|
+
/** The outcomes that count toward an item's attempt limit. */
|
|
84
|
+
export const ATTEMPT_OUTCOMES = ["not_done", "abandoned"];
|
|
85
|
+
/** Whether `value` is one of {@link WORK_LEASE_OUTCOMES}. */
|
|
86
|
+
export function isWorkLeaseOutcome(value) {
|
|
87
|
+
return typeof value === "string" && WORK_LEASE_OUTCOMES.includes(value);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Whether a release with `outcome` counts toward the item's attempt limit:
|
|
91
|
+
* `not_done` and `abandoned` do, and so does a release that gave no outcome
|
|
92
|
+
* or one outside the closed list (free text written before #3147), since
|
|
93
|
+
* nothing says the work got anywhere.
|
|
94
|
+
*/
|
|
95
|
+
export function outcomeCountsAsAttempt(outcome) {
|
|
96
|
+
if (!isWorkLeaseOutcome(outcome))
|
|
97
|
+
return true;
|
|
98
|
+
return ATTEMPT_OUTCOMES.includes(outcome);
|
|
99
|
+
}
|
|
100
|
+
/** The ref prefix that keeps an unfinished attempt's work (#3147). */
|
|
101
|
+
export const KEPT_REF_PREFIX = "refs/chant/kept/";
|
|
102
|
+
/**
|
|
103
|
+
* Where the work of an attempt that ended `not_done` is kept: one ref per
|
|
104
|
+
* lease token, `refs/chant/kept/[<member>/...]<item>/<token>`, scoped by the
|
|
105
|
+
* members the way the work branch `chant/work/[<member>/]<item>` is.
|
|
106
|
+
*/
|
|
107
|
+
export function keptAttemptRef(id, token, members = []) {
|
|
108
|
+
return `${keptAttemptPrefix(id, members)}${token}`;
|
|
109
|
+
}
|
|
110
|
+
/** The prefix under which every kept attempt of item `id` sits. */
|
|
111
|
+
export function keptAttemptPrefix(id, members = []) {
|
|
112
|
+
return `${KEPT_REF_PREFIX}${members.length ? `${members.join("/")}/` : ""}${id}/`;
|
|
113
|
+
}
|
|
114
|
+
/** Every kept attempt of item `id`, from the local refs, sorted by ref. Empty outside git. */
|
|
115
|
+
export async function listKeptAttempts(id, opts) {
|
|
116
|
+
const prefix = keptAttemptPrefix(id, opts.members ?? []);
|
|
117
|
+
const out = await getRuntime().spawn(["git", "for-each-ref", "--format=%(refname) %(objectname)", prefix], { cwd: opts.cwd });
|
|
118
|
+
if (out.exitCode !== 0)
|
|
119
|
+
return [];
|
|
120
|
+
return out.stdout
|
|
121
|
+
.split("\n")
|
|
122
|
+
.filter(Boolean)
|
|
123
|
+
.map((line) => {
|
|
124
|
+
const [ref, commit] = line.split(" ");
|
|
125
|
+
return { token: ref.slice(prefix.length), ref, commit };
|
|
126
|
+
})
|
|
127
|
+
.filter((k) => k.token !== "" && !k.token.includes("/"))
|
|
128
|
+
.sort((a, b) => (a.ref < b.ref ? -1 : a.ref > b.ref ? 1 : 0));
|
|
129
|
+
}
|
|
130
|
+
/** Why a claim, renew or release was refused. Closed: a new code is a contract change. */
|
|
131
|
+
export const WORK_LEASE_REFUSALS = [
|
|
132
|
+
/** Someone holds the lease live: another worker, or, for a claim, the same one. */
|
|
133
|
+
"lease-held",
|
|
134
|
+
/** Nobody holds it live: it expired, was released or was never claimed. */
|
|
135
|
+
"lease-not-held",
|
|
136
|
+
/** The live lease has another token than the one given. */
|
|
137
|
+
"lease-token-mismatch",
|
|
138
|
+
/** Another writer changed the lease between the read and the write. */
|
|
139
|
+
"lease-race",
|
|
140
|
+
/** The remote refused the push: another clone got there first, or it could not be reached. */
|
|
141
|
+
"lease-push-rejected",
|
|
142
|
+
];
|
|
143
|
+
function toWorkLease(item, r) {
|
|
144
|
+
return { item, holder: r.holder, token: r.token, acquiredAt: r.acquiredAt, expiresAt: r.expiresAt };
|
|
145
|
+
}
|
|
146
|
+
function checkId(id) {
|
|
147
|
+
const problem = workItemIdProblem(id);
|
|
148
|
+
if (problem)
|
|
149
|
+
throw new Error(problem);
|
|
150
|
+
}
|
|
151
|
+
const REASONS = {
|
|
152
|
+
held: "lease-held",
|
|
153
|
+
"not-held": "lease-not-held",
|
|
154
|
+
"token-mismatch": "lease-token-mismatch",
|
|
155
|
+
race: "lease-race",
|
|
156
|
+
"push-rejected": "lease-push-rejected",
|
|
157
|
+
};
|
|
158
|
+
function refusalMessage(id, reason, heldBy) {
|
|
159
|
+
const by = heldBy ? `${heldBy.holder} until ${heldBy.expiresAt}` : undefined;
|
|
160
|
+
switch (reason) {
|
|
161
|
+
case "lease-held":
|
|
162
|
+
return `${id} is held by ${by}`;
|
|
163
|
+
case "lease-not-held":
|
|
164
|
+
return `${id} is not held${heldBy ? ` by the caller: ${by}` : ""}; claim it again`;
|
|
165
|
+
case "lease-token-mismatch":
|
|
166
|
+
return `${id} is held with another token (${heldBy?.token}) by ${by}`;
|
|
167
|
+
case "lease-race":
|
|
168
|
+
return `${id} changed while it was being written${by ? `: it is held by ${by}` : ""}`;
|
|
169
|
+
case "lease-push-rejected":
|
|
170
|
+
return `the remote refused the lease on ${id}${by ? `: it is held there by ${by}` : ", or could not be reached"}`;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Claim work item `id` for `holder` for `ttlMs`. Refused with `lease-held`,
|
|
175
|
+
* naming the holder, when anyone holds it live, `holder` included; an expired
|
|
176
|
+
* lease does not refuse a claim, and the new claim gets a new token.
|
|
177
|
+
*/
|
|
178
|
+
export async function claimWorkLease(id, holder, opts) {
|
|
179
|
+
checkId(id);
|
|
180
|
+
const result = await acquireLease(workLeaseKey(id), holder, {
|
|
181
|
+
cwd: opts.cwd,
|
|
182
|
+
ttlMs: opts.ttlMs ?? DEFAULT_WORK_LEASE_TTL_MS,
|
|
183
|
+
now: opts.now,
|
|
184
|
+
mode: "claim",
|
|
185
|
+
requirePush: true,
|
|
186
|
+
lockWaitMs: LOCK_WAIT_MS,
|
|
187
|
+
});
|
|
188
|
+
return finish(id, "claim", holder, result, opts);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Move the expiry of `holder`'s live lease on `id` to `ttlMs` from now,
|
|
192
|
+
* keeping its token. With `token`, the live lease must carry it. Refused with
|
|
193
|
+
* `lease-not-held` once the lease has expired or was released: the holder
|
|
194
|
+
* claims it again, and gets a new token.
|
|
195
|
+
*/
|
|
196
|
+
export async function renewWorkLease(id, holder, opts) {
|
|
197
|
+
checkId(id);
|
|
198
|
+
const result = await acquireLease(workLeaseKey(id), holder, {
|
|
199
|
+
cwd: opts.cwd,
|
|
200
|
+
ttlMs: opts.ttlMs ?? DEFAULT_WORK_LEASE_TTL_MS,
|
|
201
|
+
now: opts.now,
|
|
202
|
+
mode: "renew",
|
|
203
|
+
token: opts.token,
|
|
204
|
+
requirePush: true,
|
|
205
|
+
lockWaitMs: LOCK_WAIT_MS,
|
|
206
|
+
});
|
|
207
|
+
return finish(id, "renew", holder, result, opts);
|
|
208
|
+
}
|
|
209
|
+
async function finish(id, event, holder, result, opts) {
|
|
210
|
+
if (!result.acquired || !result.lease) {
|
|
211
|
+
const reason = REASONS[result.reason ?? "race"];
|
|
212
|
+
const heldBy = result.heldBy ? toWorkLease(id, result.heldBy) : undefined;
|
|
213
|
+
return { ok: false, reason, message: refusalMessage(id, reason, heldBy), ...(heldBy ? { heldBy } : {}) };
|
|
214
|
+
}
|
|
215
|
+
const lease = toWorkLease(id, result.lease);
|
|
216
|
+
const now = opts.now?.() ?? new Date();
|
|
217
|
+
const history = await appendLeaseHistory({ version: 1, event, item: id, holder, by: holder, token: lease.token, acquiredAt: lease.acquiredAt, expiresAt: lease.expiresAt, timestamp: now.toISOString(), ...(opts.note ? { note: opts.note } : {}) }, opts);
|
|
218
|
+
return { ok: true, lease, history };
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Give the lease on `id` back. The holder releases a live lease (with
|
|
222
|
+
* `token`, only that one); anyone may release an expired one, which is how an
|
|
223
|
+
* abandoned claim is closed out. `outcome` says how the work ended, from the
|
|
224
|
+
* closed list {@link WORK_LEASE_OUTCOMES}; any other value throws. Refused
|
|
225
|
+
* with `lease-not-held` when there is no lease, and `lease-held` when someone
|
|
226
|
+
* else holds it live.
|
|
227
|
+
*/
|
|
228
|
+
export async function releaseWorkLease(id, by, opts) {
|
|
229
|
+
checkId(id);
|
|
230
|
+
if (opts.outcome !== undefined && !isWorkLeaseOutcome(opts.outcome)) {
|
|
231
|
+
throw new Error(`${JSON.stringify(opts.outcome)} is not a work lease outcome: use one of ${WORK_LEASE_OUTCOMES.join(", ")}`);
|
|
232
|
+
}
|
|
233
|
+
const key = workLeaseKey(id);
|
|
234
|
+
const now = opts.now?.() ?? new Date();
|
|
235
|
+
const { record } = await readLease(key, { cwd: opts.cwd });
|
|
236
|
+
if (!record)
|
|
237
|
+
return { ok: false, reason: "lease-not-held", message: refusalMessage(id, "lease-not-held", undefined) };
|
|
238
|
+
const current = toWorkLease(id, record);
|
|
239
|
+
const live = new Date(record.expiresAt).getTime() > now.getTime();
|
|
240
|
+
if (live && record.holder !== by)
|
|
241
|
+
return { ok: false, reason: "lease-held", message: refusalMessage(id, "lease-held", current), heldBy: current };
|
|
242
|
+
if (opts.token !== undefined && record.token !== opts.token) {
|
|
243
|
+
return { ok: false, reason: "lease-token-mismatch", message: refusalMessage(id, "lease-token-mismatch", current), heldBy: current };
|
|
244
|
+
}
|
|
245
|
+
if (!(await releaseLease(key, record.holder, record.token, { cwd: opts.cwd }))) {
|
|
246
|
+
const after = (await readLease(key, { cwd: opts.cwd })).record;
|
|
247
|
+
const heldBy = after ? toWorkLease(id, after) : undefined;
|
|
248
|
+
return { ok: false, reason: "lease-race", message: refusalMessage(id, "lease-race", heldBy), ...(heldBy ? { heldBy } : {}) };
|
|
249
|
+
}
|
|
250
|
+
const history = await appendLeaseHistory({
|
|
251
|
+
version: 1,
|
|
252
|
+
event: "release",
|
|
253
|
+
item: id,
|
|
254
|
+
holder: record.holder,
|
|
255
|
+
by,
|
|
256
|
+
token: record.token,
|
|
257
|
+
acquiredAt: record.acquiredAt,
|
|
258
|
+
expiresAt: record.expiresAt,
|
|
259
|
+
timestamp: now.toISOString(),
|
|
260
|
+
...(opts.outcome ? { outcome: opts.outcome } : {}),
|
|
261
|
+
...(opts.note ? { note: opts.note } : {}),
|
|
262
|
+
}, opts);
|
|
263
|
+
return { ok: true, lease: current, history };
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Append one line to `_leases/<id>.jsonl`, with the same read-then-CAS retry
|
|
267
|
+
* the gate ledger's appends use, then push `chant/lifecycle`. The branch is
|
|
268
|
+
* fetched first when it fast-forwards, and the push is best-effort: the lease
|
|
269
|
+
* ref is what coordinates, and a history that did not reach the remote is
|
|
270
|
+
* reported as `pushed: false` rather than failing a lease that was taken.
|
|
271
|
+
*/
|
|
272
|
+
async function appendLeaseHistory(record, opts) {
|
|
273
|
+
await fetchLifecycleStatus(opts).catch(() => undefined);
|
|
274
|
+
const file = `${record.item}.jsonl`;
|
|
275
|
+
const json = JSON.stringify(record, sortedJsonReplacer);
|
|
276
|
+
let commit;
|
|
277
|
+
let lastErr;
|
|
278
|
+
for (let attempt = 1; attempt <= APPEND_RETRY_ATTEMPTS && commit === undefined; attempt++) {
|
|
279
|
+
try {
|
|
280
|
+
const priorSha = await readPathSha(LEASES_DIR, file, opts);
|
|
281
|
+
const existing = priorSha ? await readBlobBySha(priorSha, opts) : null;
|
|
282
|
+
const content = `${existing ? `${existing.replace(/\n$/, "")}\n` : ""}${json}\n`;
|
|
283
|
+
commit = await writeBlobToPath(LEASES_DIR, file, content, `Work lease ${record.event}: ${record.item} (${record.holder})`, {
|
|
284
|
+
...opts,
|
|
285
|
+
expectPriorPathSha: priorSha,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
catch (err) {
|
|
289
|
+
if (!(err instanceof RefCASConflictError))
|
|
290
|
+
throw err;
|
|
291
|
+
lastErr = err;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
if (commit === undefined)
|
|
295
|
+
throw lastErr;
|
|
296
|
+
const pushed = await pushLifecycle(opts).catch(() => false);
|
|
297
|
+
const { prefix } = await resolveMemberLedger(opts.cwd);
|
|
298
|
+
return { path: leaseHistoryPath(record.item, prefix), commit, pushed };
|
|
299
|
+
}
|
|
300
|
+
/** Parse the text of a lease history file, oldest first. Malformed lines are counted and skipped. */
|
|
301
|
+
export function parseLeaseHistory(content) {
|
|
302
|
+
const records = [];
|
|
303
|
+
let malformed = 0;
|
|
304
|
+
for (const line of content.split("\n").map((l) => l.trim()).filter(Boolean)) {
|
|
305
|
+
try {
|
|
306
|
+
const r = JSON.parse(line);
|
|
307
|
+
const ok = r.version === 1 &&
|
|
308
|
+
(r.event === "claim" || r.event === "renew" || r.event === "release") &&
|
|
309
|
+
[r.item, r.holder, r.by, r.token, r.acquiredAt, r.expiresAt, r.timestamp].every((v) => typeof v === "string");
|
|
310
|
+
if (ok)
|
|
311
|
+
records.push(r);
|
|
312
|
+
else
|
|
313
|
+
malformed++;
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
malformed++;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return { records, malformed };
|
|
320
|
+
}
|
|
321
|
+
/** Read work item `id`'s lease history in the ledger of the project at `opts.cwd`. Empty when it has none. */
|
|
322
|
+
export async function readLeaseHistory(id, opts) {
|
|
323
|
+
checkId(id);
|
|
324
|
+
const content = await readBlobFromPath(LEASES_DIR, `${id}.jsonl`, opts);
|
|
325
|
+
return content ? parseLeaseHistory(content) : { records: [], malformed: 0 };
|
|
326
|
+
}
|
|
327
|
+
function parseRecord(raw) {
|
|
328
|
+
try {
|
|
329
|
+
const v = JSON.parse(raw);
|
|
330
|
+
return typeof v.holder === "string" && typeof v.token === "string" && typeof v.acquiredAt === "string" && typeof v.expiresAt === "string"
|
|
331
|
+
? v
|
|
332
|
+
: undefined;
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
return undefined;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Every work lease in the ledger with `memberPrefix`, read from the local
|
|
340
|
+
* refs only: the lease refs this clone wrote, and the remote's as last
|
|
341
|
+
* fetched (`refs/chant/lease-remote/`), the fresher of the two per item, as
|
|
342
|
+
* `readLease` picks. It never fetches, so a read-only report stays off the
|
|
343
|
+
* network; a claim or renew fetches before it decides. Released leases have
|
|
344
|
+
* no ref and are not listed; expired ones are, with `state: "expired"`.
|
|
345
|
+
* Sorted by item.
|
|
346
|
+
*/
|
|
347
|
+
export async function listWorkLeases(opts) {
|
|
348
|
+
const rt = getRuntime();
|
|
349
|
+
const now = (opts.now ?? new Date()).getTime();
|
|
350
|
+
const local = `${LEASE_REF_PREFIX}${opts.memberPrefix}${WORK_LEASE_KEY_PREFIX}`;
|
|
351
|
+
const remote = `${LEASE_REMOTE_TRACKING_PREFIX}${opts.memberPrefix}${WORK_LEASE_KEY_PREFIX}`;
|
|
352
|
+
const out = await rt.spawn(["git", "for-each-ref", "--format=%(refname) %(objectname)", local, remote], { cwd: opts.cwd });
|
|
353
|
+
if (out.exitCode !== 0)
|
|
354
|
+
return [];
|
|
355
|
+
const best = new Map();
|
|
356
|
+
for (const line of out.stdout.split("\n").filter(Boolean)) {
|
|
357
|
+
const [ref, sha] = line.split(" ");
|
|
358
|
+
const id = ref.startsWith(local) ? ref.slice(local.length) : ref.slice(remote.length);
|
|
359
|
+
if (!WORK_ITEM_ID_PATTERN.test(id))
|
|
360
|
+
continue;
|
|
361
|
+
const record = parseRecord((await readBlobBySha(sha, opts)) ?? "");
|
|
362
|
+
if (!record)
|
|
363
|
+
continue;
|
|
364
|
+
const prior = best.get(id);
|
|
365
|
+
const key = (r) => `${r.acquiredAt} ${r.expiresAt}`;
|
|
366
|
+
if (!prior || key(record) > key(prior) || (key(record) === key(prior) && ref.startsWith(local)))
|
|
367
|
+
best.set(id, record);
|
|
368
|
+
}
|
|
369
|
+
return [...best.entries()]
|
|
370
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
|
|
371
|
+
.map(([id, r]) => ({
|
|
372
|
+
...toWorkLease(id, r),
|
|
373
|
+
state: new Date(r.expiresAt).getTime() > now ? "active" : "expired",
|
|
374
|
+
ref: workLeaseRef(id, opts.memberPrefix),
|
|
375
|
+
}));
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* The active lease of each work item of the kind at `kindFile`, by item id,
|
|
379
|
+
* for `chant workspace records --json`. Read from the local refs of the
|
|
380
|
+
* ledger owning the kind file's directory, without fetching. Empty when
|
|
381
|
+
* nothing can be read.
|
|
382
|
+
*/
|
|
383
|
+
export async function activeWorkLeases(kindFile, now = new Date()) {
|
|
384
|
+
const cwd = dirname(kindFile);
|
|
385
|
+
try {
|
|
386
|
+
const { prefix } = await resolveMemberLedger(cwd);
|
|
387
|
+
const leases = await listWorkLeases({ cwd, memberPrefix: prefix, now });
|
|
388
|
+
return new Map(leases.filter((l) => l.state === "active").map((l) => [l.item, { holder: l.holder, token: l.token, acquiredAt: l.acquiredAt, expiresAt: l.expiresAt }]));
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
return new Map();
|
|
392
|
+
}
|
|
393
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Component composition checks — the COMP* rule family (#562, epic #551).
|
|
3
|
+
*
|
|
4
|
+
* COR/EVL rules (./rule.ts, ./engine.ts) check one `ts.SourceFile`'s AST in
|
|
5
|
+
* isolation, synchronously — no execution, no cross-file knowledge. A COMP*
|
|
6
|
+
* rule cannot work that way: "publishes but never applies", "`imageRef`
|
|
7
|
+
* points at a nonexistent phase", and "identical composition repeated across
|
|
8
|
+
* components" are all properties of the *discovered component graph*, which
|
|
9
|
+
* only exists after `*.component.ts` files are actually imported (mirroring
|
|
10
|
+
* `../components/discover.ts`'s `discoverComponents`, itself async for the
|
|
11
|
+
* same reason `../discovery/index.ts`'s `discover()` is).
|
|
12
|
+
*
|
|
13
|
+
* Rather than stretch `LintRule.check(context)` (sync, single-file, AST-only)
|
|
14
|
+
* to cover this, COMP* rules follow the precedent chant already has for
|
|
15
|
+
* "check something that needs real, resolved, whole-project data":
|
|
16
|
+
* `./post-synth.ts`'s `PostSynthCheck`/`PostSynthContext`/`runPostSynthChecks`,
|
|
17
|
+
* which wraps a real (async) build result for a sync `check(ctx)` call. This
|
|
18
|
+
* module is that same shape, one layer earlier in the pipeline — over the
|
|
19
|
+
* discovered `Component` graph instead of serialized resource output — so
|
|
20
|
+
* `chant lint` (not just `chant build`) can run it. See
|
|
21
|
+
* ../components/discover.ts's own docstring for why `Component` gets a
|
|
22
|
+
* parallel, purpose-built convention rather than reusing `Declarable`'s.
|
|
23
|
+
*/
|
|
24
|
+
import { discoverComponents } from "../components/discover.js";
|
|
25
|
+
/**
|
|
26
|
+
* Discover every component under `path` and run every `ComponentCheck`
|
|
27
|
+
* against the resulting graph. Mirrors `runPostSynthChecks`'s shape
|
|
28
|
+
* (async discovery/build once, then every check runs sync over the result),
|
|
29
|
+
* except the input is `discoverComponents`'s result rather than a build's
|
|
30
|
+
* serialized output.
|
|
31
|
+
*
|
|
32
|
+
* Discovery errors (e.g. a duplicate component name, a `*.component.ts` file
|
|
33
|
+
* that throws on import) are surfaced as a single synthetic diagnostic per
|
|
34
|
+
* error under the pseudo-check id "COMP000" rather than silently dropped —
|
|
35
|
+
* matching how `discoverComponents`'s caller (`../components/cli-support.ts`)
|
|
36
|
+
* always surfaces `result.errors` rather than ignoring them.
|
|
37
|
+
*
|
|
38
|
+
* `sandbox` (chant #1051, `chant lint --sandbox`) is threaded straight
|
|
39
|
+
* through to `discoverComponents` — `chant lint`'s own AST-only rule engine
|
|
40
|
+
* never executes project source (see this module's own doc comment), but
|
|
41
|
+
* COMP* checks exist precisely because they need the discovered `Component`
|
|
42
|
+
* graph, which does mean importing `*.component.ts` files.
|
|
43
|
+
*/
|
|
44
|
+
export async function runComponentChecks(path, checks, registryContext, sandbox, buildParams) {
|
|
45
|
+
if (checks.length === 0)
|
|
46
|
+
return [];
|
|
47
|
+
// #1490 — this import runs BEFORE the caller's own component discovery, and
|
|
48
|
+
// an ES module is evaluated once per path. Whatever parameters are in effect
|
|
49
|
+
// here are the ones every later reader sees, however carefully that reader
|
|
50
|
+
// resolves its own. Passing them at the second call and not this one left
|
|
51
|
+
// the graph on defaults while the CLI reported the values it had resolved.
|
|
52
|
+
const result = await discoverComponents(path, { sandbox, buildParams });
|
|
53
|
+
const diagnostics = [];
|
|
54
|
+
for (const err of result.errors) {
|
|
55
|
+
diagnostics.push({
|
|
56
|
+
checkId: "COMP000",
|
|
57
|
+
severity: "error",
|
|
58
|
+
message: `Component discovery error: ${err.message}`,
|
|
59
|
+
file: err.file,
|
|
60
|
+
component: "(unknown)",
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const components = new Map();
|
|
64
|
+
for (const [name, discovered] of result.components) {
|
|
65
|
+
components.set(name, { component: discovered.component, filePath: discovered.filePath });
|
|
66
|
+
}
|
|
67
|
+
const ctx = {
|
|
68
|
+
components,
|
|
69
|
+
knownKinds: registryContext?.knownKinds,
|
|
70
|
+
rollbackPolicies: registryContext?.rollbackPolicies,
|
|
71
|
+
};
|
|
72
|
+
for (const check of checks) {
|
|
73
|
+
diagnostics.push(...check.check(ctx));
|
|
74
|
+
}
|
|
75
|
+
return diagnostics;
|
|
76
|
+
}
|
|
77
|
+
/** Structural type guard, mirroring `isPostSynthCheck` — used by rule discovery/registry code. */
|
|
78
|
+
export function isComponentCheck(value) {
|
|
79
|
+
if (typeof value !== "object" || value === null)
|
|
80
|
+
return false;
|
|
81
|
+
const v = value;
|
|
82
|
+
return (typeof v.id === "string" &&
|
|
83
|
+
typeof v.description === "string" &&
|
|
84
|
+
typeof v.severity === "string" &&
|
|
85
|
+
typeof v.category === "string" &&
|
|
86
|
+
typeof v.check === "function");
|
|
87
|
+
}
|