@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,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant workspace verify [--base <rev>] [--head <rev>] [--require attested | attested-runs] [--json]`
|
|
3
|
+
* (#2547): check a change against the trust policy at its base. See ./verify.ts.
|
|
4
|
+
*
|
|
5
|
+
* Exit 0 when the change passes, 1 when it does not or cannot be checked.
|
|
6
|
+
*/
|
|
7
|
+
import { formatError, formatSuccess } from "../../cli/format.js";
|
|
8
|
+
import { gitRoot } from "../record-source.js";
|
|
9
|
+
import { activeAttestors } from "./attestor.js";
|
|
10
|
+
import { verifyChange } from "./verify.js";
|
|
11
|
+
const USAGE = "chant workspace verify [--base <rev>] [--head <rev>] [--require attested | attested-runs] [--json]";
|
|
12
|
+
export async function runWorkspaceVerify(ctx) {
|
|
13
|
+
const { args } = ctx;
|
|
14
|
+
if (args.require !== undefined && args.require !== "attested" && args.require !== "attested-runs") {
|
|
15
|
+
console.error(formatError({ message: `--require takes attested or attested-runs, not ${JSON.stringify(args.require)}`, hint: USAGE }));
|
|
16
|
+
return 1;
|
|
17
|
+
}
|
|
18
|
+
const repo = gitRoot(process.cwd());
|
|
19
|
+
if (!repo) {
|
|
20
|
+
console.error(formatError({ message: "chant workspace verify checks git commits, and this directory is not in a git repository", hint: USAGE }));
|
|
21
|
+
return 1;
|
|
22
|
+
}
|
|
23
|
+
const report = verifyChange({
|
|
24
|
+
repo,
|
|
25
|
+
base: args.base,
|
|
26
|
+
head: args.head,
|
|
27
|
+
require: args.require === "attested" || args.require === "attested-runs" ? args.require : undefined,
|
|
28
|
+
attestors: await activeAttestors(),
|
|
29
|
+
});
|
|
30
|
+
if (args.json)
|
|
31
|
+
console.log(JSON.stringify(report, null, 2));
|
|
32
|
+
else
|
|
33
|
+
printReport(report);
|
|
34
|
+
return report.ok ? 0 : 1;
|
|
35
|
+
}
|
|
36
|
+
function printReport(r) {
|
|
37
|
+
const lines = [];
|
|
38
|
+
if (r.base)
|
|
39
|
+
lines.push(`base ${r.base.slice(0, 8)} (${r.baseFrom})${r.head ? `, head ${r.head.slice(0, 8)}` : ""}`);
|
|
40
|
+
if (r.policy.active) {
|
|
41
|
+
lines.push(`policy at base: ${r.policy.principals.length} signers in ${r.policy.signersPath}; policy writers: ${r.policy.writers.join(", ") || "none"}`);
|
|
42
|
+
for (const e of r.policy.excluded)
|
|
43
|
+
lines.push(` ${r.policy.signersPath}:${e.line} not used: ${e.reason}`);
|
|
44
|
+
}
|
|
45
|
+
for (const c of r.commits) {
|
|
46
|
+
const who = c.principal ? ` by ${c.principal}` : "";
|
|
47
|
+
const note = c.skipped ? ` (${c.skipped})` : c.level === "attested" ? "" : ` (${c.reason})`;
|
|
48
|
+
lines.push(` ${c.commit.slice(0, 8)} ${c.level}${who} ${c.subject}${note}`);
|
|
49
|
+
}
|
|
50
|
+
for (const c of r.runs.commits)
|
|
51
|
+
lines.push(` ${c.commit.slice(0, 8)} agent run ${c.runs.join(", ") || c.run}: ${c.attested ? "attested" : "not attested"}, ${c.reason}`);
|
|
52
|
+
for (const w of r.protectedWrites)
|
|
53
|
+
lines.push(` protected write ${w.commit.slice(0, 8)} ${w.paths.join(", ")}: ${w.allowed ? "allowed" : "refused"}, ${w.reason}`);
|
|
54
|
+
if (r.rotation && "to" in r.rotation)
|
|
55
|
+
lines.push(` signer set: version ${r.rotation.from} to ${r.rotation.to}, signed by ${r.rotation.signedBy.join(", ")}`);
|
|
56
|
+
for (const n of r.notes)
|
|
57
|
+
lines.push(n);
|
|
58
|
+
console.log(lines.join("\n"));
|
|
59
|
+
if (r.ok)
|
|
60
|
+
console.log(formatSuccess(`verified ${r.commits.length} commits against the policy at base`));
|
|
61
|
+
else
|
|
62
|
+
console.error(formatError({ message: `verification failed:\n${r.failures.map((f) => ` ${f}`).join("\n")}`, hint: USAGE }));
|
|
63
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify a change against the policy at its base (#2524 D5, Threat model).
|
|
3
|
+
*
|
|
4
|
+
* This is what CI runs on a protected branch: every commit in `base..head` is
|
|
5
|
+
* asked of the attestors with the policy read at base, so nothing the change
|
|
6
|
+
* does to its own copy of the policy counts. A change that edits the policy
|
|
7
|
+
* (the signers file or `.chant/trust.json`) is a protected write: every commit
|
|
8
|
+
* that touches those files must be attested by a signer the base policy
|
|
9
|
+
* trusts, and by an admin when the base policy grants the admin role.
|
|
10
|
+
*
|
|
11
|
+
* Attestation is opt-in (#2525 rule 6). Without a signers file at base the
|
|
12
|
+
* check passes and says so, unless `--require attested` asks for more.
|
|
13
|
+
*
|
|
14
|
+
* Agent runs (#3192): a commit an agent run made, by its `Chant-Run` trailer
|
|
15
|
+
* or its run's end, is attested by a run statement that a runner or steward
|
|
16
|
+
* key at base signed and that names the commit. Such a commit counts as
|
|
17
|
+
* `attested` with the attestor `agent-run`, so `--require attested` tells a
|
|
18
|
+
* person's signed commit from a run's attested one by the attestor.
|
|
19
|
+
* `--require attested-runs` asks only that every commit a run made be
|
|
20
|
+
* covered, and needs runner keys at base but no signers file. Without
|
|
21
|
+
* `--require`, `runs` reports and nothing fails (studio-035 d).
|
|
22
|
+
*/
|
|
23
|
+
import { execFileSync } from "node:child_process";
|
|
24
|
+
import { policyAtBase, commitProvenance, resolveBase } from "./provenance.js";
|
|
25
|
+
import { policyWriters, protectedPaths } from "./policy.js";
|
|
26
|
+
import { fileAt, nextVersion, rotationPath, signerHistory } from "./rotation.js";
|
|
27
|
+
import { changeRuns } from "./run-commits.js";
|
|
28
|
+
function git(repo, args) {
|
|
29
|
+
return execFileSync("git", args, { cwd: repo, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"], maxBuffer: 256 * 1024 * 1024 });
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Commits in `range` that change any of `paths`, each with the paths it
|
|
33
|
+
* changes. Merges count only for what they change beyond every parent.
|
|
34
|
+
*/
|
|
35
|
+
export function commitsTouching(repo, range, paths) {
|
|
36
|
+
const out = new Map();
|
|
37
|
+
const log = git(repo, ["--literal-pathspecs", "log", "-c", "--name-only", "--no-renames", "--format=%x00%H", range, "--", ...paths]);
|
|
38
|
+
const wanted = new Set(paths);
|
|
39
|
+
let commit = "";
|
|
40
|
+
for (const line of log.split("\n")) {
|
|
41
|
+
if (line.startsWith("\0"))
|
|
42
|
+
commit = line.slice(1).trim();
|
|
43
|
+
else if (line && wanted.has(line))
|
|
44
|
+
out.set(commit, [...(out.get(commit) ?? []), line]);
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
/** Whether a merge commit changes nothing beyond what its parents bring. */
|
|
49
|
+
function mergeWithoutOwnChanges(repo, commit, parents) {
|
|
50
|
+
if (parents < 2)
|
|
51
|
+
return false;
|
|
52
|
+
return git(repo, ["diff-tree", "-c", "--name-only", "--no-commit-id", "-r", commit]).trim() === "";
|
|
53
|
+
}
|
|
54
|
+
export function verifyChange(opts) {
|
|
55
|
+
const { repo } = opts;
|
|
56
|
+
const base = resolveBase(repo, opts.base);
|
|
57
|
+
const policy = policyAtBase(repo, base);
|
|
58
|
+
const report = {
|
|
59
|
+
base: base.commit,
|
|
60
|
+
baseFrom: base.from,
|
|
61
|
+
head: null,
|
|
62
|
+
policy: {
|
|
63
|
+
active: policy.active,
|
|
64
|
+
signersPath: policy.signersPath,
|
|
65
|
+
principals: [...new Set(policy.signers.map((s) => s.principal))].sort(),
|
|
66
|
+
excluded: policy.excluded,
|
|
67
|
+
writers: [...policyWriters(policy)].sort(),
|
|
68
|
+
problems: policy.problems,
|
|
69
|
+
},
|
|
70
|
+
require: opts.require ?? null,
|
|
71
|
+
commits: [],
|
|
72
|
+
runs: { ledger: null, runners: [], commits: [] },
|
|
73
|
+
protectedPaths: protectedPaths(policy),
|
|
74
|
+
protectedChanged: [],
|
|
75
|
+
protectedWrites: [],
|
|
76
|
+
rotation: null,
|
|
77
|
+
notes: [],
|
|
78
|
+
failures: [],
|
|
79
|
+
ok: false,
|
|
80
|
+
};
|
|
81
|
+
const headRev = opts.head ?? "HEAD";
|
|
82
|
+
let head;
|
|
83
|
+
try {
|
|
84
|
+
head = headRev.startsWith("-") ? undefined : git(repo, ["rev-parse", "--verify", "--quiet", `${headRev}^{commit}`]).trim() || undefined;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
head = undefined;
|
|
88
|
+
}
|
|
89
|
+
if (!base.commit)
|
|
90
|
+
report.failures.push(base.problem ?? "no base revision");
|
|
91
|
+
if (!head)
|
|
92
|
+
report.failures.push(`--head ${headRev} names no commit in this repository`);
|
|
93
|
+
if (!base.commit || !head)
|
|
94
|
+
return report;
|
|
95
|
+
report.head = head;
|
|
96
|
+
if (policy.problems.length > 0) {
|
|
97
|
+
report.failures.push(...policy.problems.map((p) => `the policy at base cannot be read, so nothing verifies: ${p}`));
|
|
98
|
+
return report;
|
|
99
|
+
}
|
|
100
|
+
// Every commit in the change, oldest first, with its parents.
|
|
101
|
+
const listing = git(repo, ["rev-list", "--reverse", "--parents", `${base.commit}..${head}`]).split("\n").filter(Boolean);
|
|
102
|
+
const parentsOf = new Map(listing.map((l) => { const [c, ...p] = l.split(" "); return [c, p.length]; }));
|
|
103
|
+
report.runs = changeRuns(repo, [...parentsOf.keys()], policy.runners);
|
|
104
|
+
if (opts.require === "attested-runs") {
|
|
105
|
+
if (policy.runners.length === 0 && report.runs.commits.length > 0) {
|
|
106
|
+
report.notes.push(`.chant/trust.json at base lists no runner keys, so no run statement can verify`);
|
|
107
|
+
}
|
|
108
|
+
for (const r of report.runs.commits) {
|
|
109
|
+
if (r.attested || r.runs.length === 0 || mergeWithoutOwnChanges(repo, r.commit, parentsOf.get(r.commit) ?? 0))
|
|
110
|
+
continue;
|
|
111
|
+
report.failures.push(`${r.commit.slice(0, 8)} was made by agent run ${r.runs.join(", ")}, and --require attested-runs was given: ${r.reason}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const mergeBase = git(repo, ["merge-base", base.commit, head]).trim();
|
|
115
|
+
const changedPaths = git(repo, ["--literal-pathspecs", "diff", "--name-only", "--no-renames", mergeBase, head, "--", ...report.protectedPaths])
|
|
116
|
+
.split("\n")
|
|
117
|
+
.filter(Boolean);
|
|
118
|
+
report.protectedChanged = changedPaths;
|
|
119
|
+
if (!policy.active) {
|
|
120
|
+
report.notes.push(`no signers file (${policy.signersPath}) at base ${base.commit.slice(0, 8)}: attestation is off and nothing is verified`);
|
|
121
|
+
if (changedPaths.includes(policy.signersPath)) {
|
|
122
|
+
report.notes.push(`this change adds ${policy.signersPath}; it applies to changes made after it is merged, never to this one`);
|
|
123
|
+
}
|
|
124
|
+
if (opts.require && opts.require !== "attested-runs")
|
|
125
|
+
report.failures.push(`--require ${opts.require} was given, and there is no signers file at base to attest anything`);
|
|
126
|
+
report.ok = report.failures.length === 0;
|
|
127
|
+
return report;
|
|
128
|
+
}
|
|
129
|
+
// Every commit in the change, judged by the policy at base.
|
|
130
|
+
const runCover = new Map(report.runs.commits.filter((r) => r.attested).map((r) => [r.commit, r]));
|
|
131
|
+
const verdicts = new Map();
|
|
132
|
+
for (const line of listing) {
|
|
133
|
+
const [commit, ...parents] = line.split(" ");
|
|
134
|
+
const subject = git(repo, ["log", "-1", "--format=%s", commit]).trim();
|
|
135
|
+
let p = commitProvenance(repo, policy, commit, opts.attestors);
|
|
136
|
+
const cover = runCover.get(commit);
|
|
137
|
+
// A commit no signer attests, made by a run a runner key at base vouches for (#3192).
|
|
138
|
+
if (p.level !== "attested" && cover)
|
|
139
|
+
p = { level: "attested", commit, attestor: "agent-run", principal: cover.signer, reason: cover.reason };
|
|
140
|
+
const v = { ...p, commit, subject };
|
|
141
|
+
if (p.level !== "attested" && mergeWithoutOwnChanges(repo, commit, parents.length)) {
|
|
142
|
+
v.skipped = "a merge with no changes of its own; the commits it brings are checked instead";
|
|
143
|
+
}
|
|
144
|
+
verdicts.set(commit, v);
|
|
145
|
+
report.commits.push(v);
|
|
146
|
+
}
|
|
147
|
+
// Protected writes: every commit that touches the policy needs a writer's signature.
|
|
148
|
+
if (changedPaths.length > 0) {
|
|
149
|
+
const writers = policyWriters(policy);
|
|
150
|
+
const touching = commitsTouching(repo, `${base.commit}..${head}`, report.protectedPaths);
|
|
151
|
+
if (touching.size === 0) {
|
|
152
|
+
report.failures.push(`the policy files ${changedPaths.join(", ")} differ from base, and no commit in the change accounts for it`);
|
|
153
|
+
}
|
|
154
|
+
for (const [commit, paths] of touching) {
|
|
155
|
+
const v = verdicts.get(commit) ?? { ...commitProvenance(repo, policy, commit, opts.attestors), commit, subject: "" };
|
|
156
|
+
const allowed = v.level === "attested" && v.principal !== undefined && writers.has(v.principal);
|
|
157
|
+
const who = policy.roles.admin?.length ? "an admin the policy at base names" : "a signer the policy at base lists";
|
|
158
|
+
const reason = allowed
|
|
159
|
+
? `signed by ${v.principal}, ${who.replace(/^an? /, "")}`
|
|
160
|
+
: v.level === "attested"
|
|
161
|
+
? `signed by ${v.principal}, who is not ${who}`
|
|
162
|
+
: `${paths.join(", ")} is protected and needs a signature by ${who}: ${v.reason}`;
|
|
163
|
+
report.protectedWrites.push({ commit, paths, level: v.level, ...(v.principal ? { principal: v.principal } : {}), allowed, reason });
|
|
164
|
+
if (!allowed)
|
|
165
|
+
report.failures.push(`${commit.slice(0, 8)} changes ${paths.join(", ")}: ${reason}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// A new signer set must be signed by a threshold of the set at base (#2553).
|
|
169
|
+
const rotation = rotationPath(policy.signersPath);
|
|
170
|
+
if (changedPaths.includes(policy.signersPath) || changedPaths.includes(rotation)) {
|
|
171
|
+
const next = { signers: fileAt(repo, head, policy.signersPath), rotation: fileAt(repo, head, rotation) };
|
|
172
|
+
const latest = signerHistory(repo, base.commit, policy.signersPath).versions.at(-1);
|
|
173
|
+
if (next.signers !== undefined && latest && latest.version > 0) {
|
|
174
|
+
const v = nextVersion(latest, next, null);
|
|
175
|
+
if ("code" in v) {
|
|
176
|
+
report.rotation = { from: latest.version, code: v.code, reason: v.reason };
|
|
177
|
+
report.failures.push(`the signer set at head is not a valid rotation of the set at base (${v.code}): ${v.reason}`);
|
|
178
|
+
}
|
|
179
|
+
else if (v !== latest)
|
|
180
|
+
report.rotation = { from: latest.version, to: v.version, signedBy: v.signedBy };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (opts.require && opts.require !== "attested-runs") {
|
|
184
|
+
for (const v of report.commits) {
|
|
185
|
+
if (v.skipped || v.level === opts.require)
|
|
186
|
+
continue;
|
|
187
|
+
report.failures.push(`${v.commit.slice(0, 8)} is ${v.level}, and --require ${opts.require} was given: ${v.reason}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
report.ok = report.failures.length === 0;
|
|
191
|
+
return report;
|
|
192
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a workspace read starts, and which chant does it (#2536; #2524 D15,
|
|
3
|
+
* ws-016, ws-021).
|
|
4
|
+
*
|
|
5
|
+
* {@link locateWorkspace} finds the declaration from a directory, in the
|
|
6
|
+
* working tree or in one commit's git objects (`--at <rev>`), and gives the
|
|
7
|
+
* tree every read-contract command reads from.
|
|
8
|
+
*
|
|
9
|
+
* Which chant reads the declaration: the root's. The root names its chant by
|
|
10
|
+
* pinning `@intentius/chant` in the declaration's `pins`. When it pins one,
|
|
11
|
+
* that version reads the declaration, and any other chant refuses with
|
|
12
|
+
* `root-chant-required` (`parseDeclaration`'s `rootChant` option). The CLI
|
|
13
|
+
* first hands the whole command to the pinned chant when the root has it
|
|
14
|
+
* installed ({@link handToRootChant}), so a user sees the refusal only when
|
|
15
|
+
* it isn't. When the root pins no chant, the reader's own chant reads the
|
|
16
|
+
* declaration if it meets `minReader`, and refuses with `reader-too-old`
|
|
17
|
+
* otherwise. Members are always read by their own toolchains.
|
|
18
|
+
*/
|
|
19
|
+
import { spawn } from "node:child_process";
|
|
20
|
+
import { existsSync, readFileSync, realpathSync } from "node:fs";
|
|
21
|
+
import { join, relative, resolve } from "node:path";
|
|
22
|
+
import { findWorkspaceRoot } from "../project-root.js";
|
|
23
|
+
import { CHANT_PACKAGE, DECLARATION_FILES, findDeclarationDir, pinnedChant, readerVersion, WorkspaceReadError } from "./declaration.js";
|
|
24
|
+
import { parseJsonText } from "./jsonc.js";
|
|
25
|
+
import { findInstalledPackage } from "./kinds.js";
|
|
26
|
+
import { gitTop, gitTree, resolveCommit, workingTree } from "./tree.js";
|
|
27
|
+
const posix = (p) => p.split("\\").join("/");
|
|
28
|
+
/**
|
|
29
|
+
* Find the workspace whose declaration is nearest above `cwd`, in the working
|
|
30
|
+
* tree or at revision `at`. Throws a {@link WorkspaceReadError}:
|
|
31
|
+
* `declaration-missing`, or for `--at`, `not-a-git-repository` and
|
|
32
|
+
* `revision-unknown`.
|
|
33
|
+
*/
|
|
34
|
+
export function locateWorkspace(cwd, at) {
|
|
35
|
+
const top = gitTop(cwd);
|
|
36
|
+
if (at !== undefined) {
|
|
37
|
+
if (!top)
|
|
38
|
+
throw new WorkspaceReadError("not-a-git-repository", "--at reads git objects, and this directory is not in a git repository");
|
|
39
|
+
const commit = resolveCommit(top, at);
|
|
40
|
+
if (!commit)
|
|
41
|
+
throw new WorkspaceReadError("revision-unknown", `--at ${at} names no commit in this repository`);
|
|
42
|
+
const whole = gitTree(top, commit);
|
|
43
|
+
const start = posix(relative(top, realpathSync(resolve(cwd))));
|
|
44
|
+
const found = findDeclarationDir(whole, start.startsWith("..") ? "" : start);
|
|
45
|
+
if (found === undefined) {
|
|
46
|
+
throw new WorkspaceReadError("declaration-missing", `no chant.workspace.json or .jsonc between ${start || "."} and the git root at ${commit.slice(0, 8)}`);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
tree: found === "" ? whole : gitTree(top, commit, found),
|
|
50
|
+
root: found === "" ? "." : found,
|
|
51
|
+
rootOnDisk: join(top, ...found.split("/")),
|
|
52
|
+
at: commit,
|
|
53
|
+
top,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const found = findWorkspaceRoot(cwd);
|
|
57
|
+
if (!found) {
|
|
58
|
+
throw new WorkspaceReadError("declaration-missing", top
|
|
59
|
+
? "no chant.workspace.json or .jsonc between this directory and the git root; chant workspace init proposes one"
|
|
60
|
+
: "no chant.workspace.json or .jsonc in this directory; chant workspace init proposes one");
|
|
61
|
+
}
|
|
62
|
+
// git reports the top with symlinks resolved (/private/var on macOS), so compare like with like.
|
|
63
|
+
const rel = top ? posix(relative(top, realpathSync(found.dir))) : found.dir;
|
|
64
|
+
return { tree: workingTree(found.dir), root: rel === "" ? "." : rel, rootOnDisk: found.dir, at: null, top };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The `bin/chant` of `@intentius/chant` at `version`, installed where the
|
|
68
|
+
* workspace root resolves packages. Undefined when it isn't installed there,
|
|
69
|
+
* or is installed at another version.
|
|
70
|
+
*/
|
|
71
|
+
export function rootChantBin(rootOnDisk, version) {
|
|
72
|
+
const dir = findInstalledPackage(CHANT_PACKAGE, rootOnDisk);
|
|
73
|
+
if (!dir)
|
|
74
|
+
return undefined;
|
|
75
|
+
let pkg;
|
|
76
|
+
try {
|
|
77
|
+
pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf-8"));
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
if (pkg.version !== version)
|
|
83
|
+
return undefined;
|
|
84
|
+
const rel = typeof pkg.bin === "string" ? pkg.bin : pkg.bin?.chant;
|
|
85
|
+
if (typeof rel !== "string")
|
|
86
|
+
return undefined;
|
|
87
|
+
const bin = join(dir, rel);
|
|
88
|
+
return existsSync(bin) ? bin : undefined;
|
|
89
|
+
}
|
|
90
|
+
/** Set in the environment of a command handed to the root's chant, so it is handed on once at most. */
|
|
91
|
+
export const HANDED_TO_ROOT_ENV = "CHANT_WORKSPACE_ROOT_CHANT";
|
|
92
|
+
/** The version the declaration at `located` pins for `@intentius/chant`, or undefined. Never throws. */
|
|
93
|
+
export function declaredChantPin(located) {
|
|
94
|
+
const file = DECLARATION_FILES.find((f) => located.tree.stat(f) === "file");
|
|
95
|
+
if (!file)
|
|
96
|
+
return undefined;
|
|
97
|
+
let text;
|
|
98
|
+
try {
|
|
99
|
+
text = located.tree.read(file);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
const parsed = parseJsonText(text, { jsonc: file.endsWith(".jsonc") });
|
|
105
|
+
if (!parsed.ok || parsed.value === null || typeof parsed.value !== "object" || Array.isArray(parsed.value))
|
|
106
|
+
return undefined;
|
|
107
|
+
return pinnedChant(parsed.value)?.version;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Hand a read-contract command to the root's chant (ws-021). When the
|
|
111
|
+
* declaration above `cwd` (at `at`, for `--at`) pins a chant other than this
|
|
112
|
+
* one, and the root has that chant installed, run the same command line
|
|
113
|
+
* under it and return its exit code. Otherwise return undefined, and this
|
|
114
|
+
* chant runs the command: it reads the declaration itself, or refuses with
|
|
115
|
+
* `root-chant-required` when the pinned chant isn't installed.
|
|
116
|
+
*/
|
|
117
|
+
export async function handToRootChant(cwd, at, argv = process.argv.slice(2)) {
|
|
118
|
+
if (process.env[HANDED_TO_ROOT_ENV])
|
|
119
|
+
return undefined;
|
|
120
|
+
let located;
|
|
121
|
+
try {
|
|
122
|
+
located = locateWorkspace(cwd, at);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
const pinned = declaredChantPin(located);
|
|
128
|
+
if (pinned === undefined || pinned === readerVersion())
|
|
129
|
+
return undefined;
|
|
130
|
+
const bin = rootChantBin(located.rootOnDisk, pinned);
|
|
131
|
+
if (!bin)
|
|
132
|
+
return undefined;
|
|
133
|
+
return new Promise((done) => {
|
|
134
|
+
const child = spawn(bin, argv, { stdio: "inherit", env: { ...process.env, [HANDED_TO_ROOT_ENV]: pinned } });
|
|
135
|
+
child.on("error", (e) => {
|
|
136
|
+
process.stderr.write(`could not start the root's chant ${pinned} at ${bin}: ${e.message}\n`);
|
|
137
|
+
done(1);
|
|
138
|
+
});
|
|
139
|
+
child.on("close", (code) => done(code ?? 1));
|
|
140
|
+
});
|
|
141
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant workspace wip` (#3172, ws-085): work in progress under
|
|
3
|
+
* `refs/chant/wip/<branch>`, and its replication.
|
|
4
|
+
*
|
|
5
|
+
* wip [--branch <branch>] [--json] every branch's snapshots, and where replication stands
|
|
6
|
+
* wip save [--label <text>] [--by <principal>] snapshot the working tree, then push if the policy says so
|
|
7
|
+
* wip restore [<snapshot>] [--by <principal>] put the working tree back as a snapshot holds it
|
|
8
|
+
* wip push push what the policy names, for the host's schedule
|
|
9
|
+
* wip fetch on a replacement box, bring back what was replicated
|
|
10
|
+
*
|
|
11
|
+
* The read prints `wip.schema.json` with `--json`; every write prints
|
|
12
|
+
* `wip-write.schema.json`, with or without `--json`.
|
|
13
|
+
*/
|
|
14
|
+
import { formatError } from "../cli/format.js";
|
|
15
|
+
import { readerVersion } from "./declaration.js";
|
|
16
|
+
import { wipFetch, wipPush, wipRestore, wipSave, workspaceWip, WIP_CONTRACT_VERSION, WIP_WRITE_SCHEMA_ID } from "./wip.js";
|
|
17
|
+
import { AGENT_ENV } from "./write-scope.js";
|
|
18
|
+
const USAGE = "chant workspace wip [--branch <branch>] [--json] | wip save [--label <text>] [--by <principal>] | wip restore [<snapshot>] [--by <principal>] | wip push | wip fetch";
|
|
19
|
+
const VERBS = ["save", "restore", "push", "fetch"];
|
|
20
|
+
export async function runWorkspaceWip(ctx) {
|
|
21
|
+
const { args } = ctx;
|
|
22
|
+
const cwd = process.cwd();
|
|
23
|
+
// workspace wip [<verb> [<snapshot>]]
|
|
24
|
+
const [, verb, ...rest] = args.positionals ?? [];
|
|
25
|
+
if (verb === undefined) {
|
|
26
|
+
if (rest.length > 0 || args.label !== undefined) {
|
|
27
|
+
console.error(formatError({ message: "chant workspace wip lists work in progress; save, restore, push and fetch write it", hint: USAGE }));
|
|
28
|
+
return 1;
|
|
29
|
+
}
|
|
30
|
+
const doc = workspaceWip({ cwd, branch: args.branch });
|
|
31
|
+
if (args.json || "error" in doc) {
|
|
32
|
+
console.log(JSON.stringify(doc, null, 2));
|
|
33
|
+
return "error" in doc ? 1 : 0;
|
|
34
|
+
}
|
|
35
|
+
console.log(formatWip(doc));
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
const print = (doc) => {
|
|
39
|
+
console.log(JSON.stringify(doc, null, 2));
|
|
40
|
+
return "error" in doc ? 1 : 0;
|
|
41
|
+
};
|
|
42
|
+
const usage = (action, message) => print({ $schema: WIP_WRITE_SCHEMA_ID, contract: WIP_CONTRACT_VERSION, chant: readerVersion(), action, error: { code: "write-usage-invalid", message } });
|
|
43
|
+
if (!VERBS.includes(verb))
|
|
44
|
+
return usage(null, `chant workspace wip takes save, restore, push or fetch, not ${verb}: ${USAGE}`);
|
|
45
|
+
const action = verb;
|
|
46
|
+
const agent = process.env[AGENT_ENV] || undefined;
|
|
47
|
+
if (args.branch !== undefined)
|
|
48
|
+
return usage(action, `wip ${action} works on the branch checked out; --branch is for listing`);
|
|
49
|
+
switch (action) {
|
|
50
|
+
case "save":
|
|
51
|
+
if (rest.length > 0)
|
|
52
|
+
return usage(action, `wip save takes no positional argument, and was given ${rest.join(" ")}; name the snapshot with --label`);
|
|
53
|
+
return print(wipSave({ cwd, label: args.label, by: args.by, agent }));
|
|
54
|
+
case "restore":
|
|
55
|
+
if (rest.length > 1)
|
|
56
|
+
return usage(action, `wip restore takes at most one snapshot, and was given ${rest.join(" ")}`);
|
|
57
|
+
if (args.label !== undefined)
|
|
58
|
+
return usage(action, "wip restore takes the snapshot's commit, not --label");
|
|
59
|
+
return print(wipRestore({ cwd, snapshot: rest[0], by: args.by, agent }));
|
|
60
|
+
case "push":
|
|
61
|
+
case "fetch":
|
|
62
|
+
if (rest.length > 0 || args.label !== undefined || args.by !== undefined)
|
|
63
|
+
return usage(action, `wip ${action} takes no arguments: it does what the box's replicate policy says`);
|
|
64
|
+
return print(action === "push" ? wipPush({ cwd }) : wipFetch({ cwd }));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** The text `chant workspace wip` prints without `--json`. */
|
|
68
|
+
export function formatWip(doc) {
|
|
69
|
+
const lines = [];
|
|
70
|
+
if (doc.branches.length === 0)
|
|
71
|
+
lines.push("No work in progress is kept under refs/chant/wip/.");
|
|
72
|
+
for (const b of doc.branches) {
|
|
73
|
+
const here = b.branch === doc.checkout.branch ? " (checked out)" : "";
|
|
74
|
+
lines.push(`${b.branch}${here}: ${b.snapshots.length} snapshot${b.snapshots.length === 1 ? "" : "s"}`);
|
|
75
|
+
for (const s of b.snapshots.slice(0, 10)) {
|
|
76
|
+
const what = [s.kind === "pre-restore" ? "before a restore" : null, s.label, s.by ? `by ${s.by}` : null].filter(Boolean).join(", ");
|
|
77
|
+
lines.push(` ${s.commit.slice(0, 12)} ${s.at} on ${s.head.slice(0, 12)}${what ? ` ${what}` : ""}`);
|
|
78
|
+
}
|
|
79
|
+
if (b.snapshots.length > 10)
|
|
80
|
+
lines.push(` ... and ${b.snapshots.length - 10} older`);
|
|
81
|
+
}
|
|
82
|
+
const r = doc.replication;
|
|
83
|
+
if (r === null) {
|
|
84
|
+
lines.push("", "No box declares replicate, so work in progress stays on this disk.");
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const behind = r.refs.filter((x) => !x.replicated);
|
|
88
|
+
lines.push("", `Replicated to ${r.policy.remote} (${r.policy.box}'s box: ${r.policy.refs.join(", ")}; pushes on ${r.policy.on.join(" and ") || "wip push only"}${r.policy.every ? `, and every ${r.policy.every} by the host` : ""})${r.remoteConfigured ? "" : `; this checkout has no remote named ${r.policy.remote}`}`);
|
|
89
|
+
if (behind.length === 0)
|
|
90
|
+
lines.push(` all ${r.refs.length} refs are on the remote`);
|
|
91
|
+
for (const x of behind)
|
|
92
|
+
lines.push(` ${x.ref}: not on the remote${x.ahead > 0 ? `, ${x.ahead} commit${x.ahead === 1 ? "" : "s"} ahead` : ""}`);
|
|
93
|
+
}
|
|
94
|
+
return lines.join("\n");
|
|
95
|
+
}
|