@intentius/chant 0.80.0 → 0.81.0
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/dist/audit/discover.d.ts +8 -16
- package/dist/audit/discover.d.ts.map +1 -1
- package/dist/audit/report-html.d.ts +5 -0
- package/dist/audit/report-html.d.ts.map +1 -1
- package/dist/audit/report-model.d.ts +13 -0
- package/dist/audit/report-model.d.ts.map +1 -1
- package/dist/audit/terraform-state.d.ts +4 -5
- package/dist/audit/terraform-state.d.ts.map +1 -1
- package/dist/cli/commands/audit.d.ts +25 -9
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon.d.ts +8 -0
- package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/import-agents.d.ts.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/update.d.ts +6 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/vendor.d.ts +5 -0
- package/dist/cli/commands/vendor.d.ts.map +1 -1
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/components.d.ts.map +1 -1
- package/dist/cli/handlers/dev.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/init.d.ts.map +1 -1
- package/dist/cli/handlers/operator.d.ts +7 -0
- package/dist/cli/handlers/operator.d.ts.map +1 -1
- package/dist/cli/handlers/promote.d.ts +7 -4
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/run-generate.d.ts.map +1 -1
- package/dist/cli/handlers/run.d.ts +4 -1
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/handlers/vendor.d.ts +8 -3
- package/dist/cli/handlers/vendor.d.ts.map +1 -1
- package/dist/cli/main.d.ts +12 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/plugins.d.ts +12 -7
- package/dist/cli/plugins.d.ts.map +1 -1
- package/dist/cli/registry.d.ts +32 -0
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/codegen/fetch.d.ts +10 -0
- package/dist/codegen/fetch.d.ts.map +1 -1
- package/dist/components/cli-support.d.ts +3 -1
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/driver.d.ts +16 -2
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/gate-plan.d.ts +40 -0
- package/dist/components/gate-plan.d.ts.map +1 -0
- package/dist/components/promote.d.ts +60 -7
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/run.d.ts.map +1 -1
- package/dist/components/verbs/build-archive.d.ts +22 -11
- package/dist/components/verbs/build-archive.d.ts.map +1 -1
- package/dist/components/verbs/run-agent.d.ts.map +1 -1
- package/dist/config-static.d.ts +59 -0
- package/dist/config-static.d.ts.map +1 -0
- package/dist/config.d.ts +32 -10
- package/dist/config.d.ts.map +1 -1
- package/dist/content-digest.d.ts +17 -0
- package/dist/content-digest.d.ts.map +1 -0
- package/dist/discovery/files.d.ts +10 -5
- package/dist/discovery/files.d.ts.map +1 -1
- package/dist/discovery/fold-import.d.ts +20 -4
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.d.ts +20 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/fork.d.ts +20 -0
- package/dist/discovery/sandbox/fork.d.ts.map +1 -1
- package/dist/discovery/walk.d.ts +119 -0
- package/dist/discovery/walk.d.ts.map +1 -0
- package/dist/graph-ir.d.ts +4 -1
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/join-key.d.ts +31 -0
- package/dist/join-key.d.ts.map +1 -0
- package/dist/lexicon-module.d.ts +51 -6
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon.d.ts +58 -1
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/build-ledger-store.d.ts.map +1 -1
- package/dist/lifecycle/digest.d.ts +5 -1
- package/dist/lifecycle/digest.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts +20 -5
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/git.d.ts +64 -0
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/lease.d.ts +8 -1
- package/dist/lifecycle/lease.d.ts.map +1 -1
- package/dist/lifecycle/legacy-digest.d.ts +41 -8
- package/dist/lifecycle/legacy-digest.d.ts.map +1 -1
- package/dist/lifecycle/member-ledger.d.ts +67 -0
- package/dist/lifecycle/member-ledger.d.ts.map +1 -0
- package/dist/lifecycle/plan-digest.d.ts +4 -3
- package/dist/lifecycle/plan-digest.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.d.ts +18 -2
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/status.d.ts +90 -5
- package/dist/lifecycle/status.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.d.ts +32 -0
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/index.d.ts +2 -0
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/propose-upgrade.d.ts +75 -0
- package/dist/op/activities/propose-upgrade.d.ts.map +1 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/gate-name.d.ts +7 -0
- package/dist/op/gate-name.d.ts.map +1 -1
- package/dist/op/gate-summary.d.ts +16 -0
- package/dist/op/gate-summary.d.ts.map +1 -1
- package/dist/op/gate.d.ts +16 -2
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/project-root.d.ts +26 -0
- package/dist/project-root.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.d.ts +37 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -0
- package/dist/workspace/__fixtures__/two-member-workspace.d.ts +11 -0
- package/dist/workspace/__fixtures__/two-member-workspace.d.ts.map +1 -0
- package/dist/workspace/checks/generated.d.ts +156 -0
- package/dist/workspace/checks/generated.d.ts.map +1 -0
- package/dist/workspace/checks/ledgers.d.ts +78 -0
- package/dist/workspace/checks/ledgers.d.ts.map +1 -0
- package/dist/workspace/checks/links.d.ts +25 -0
- package/dist/workspace/checks/links.d.ts.map +1 -0
- package/dist/workspace/checks/pipelines.d.ts +76 -0
- package/dist/workspace/checks/pipelines.d.ts.map +1 -0
- package/dist/workspace/checks.d.ts +161 -0
- package/dist/workspace/checks.d.ts.map +1 -0
- package/dist/workspace/compose-graph.d.ts +115 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -0
- package/dist/workspace/compose-reports.d.ts +68 -0
- package/dist/workspace/compose-reports.d.ts.map +1 -0
- package/dist/workspace/declaration.d.ts +220 -0
- package/dist/workspace/declaration.d.ts.map +1 -0
- package/dist/workspace/declaration.schema.json +434 -0
- package/dist/workspace/generated-files.d.ts +65 -0
- package/dist/workspace/generated-files.d.ts.map +1 -0
- package/dist/workspace/glob.d.ts +13 -0
- package/dist/workspace/glob.d.ts.map +1 -0
- package/dist/workspace/graph-cli.d.ts +75 -0
- package/dist/workspace/graph-cli.d.ts.map +1 -0
- package/dist/workspace/init.d.ts +96 -0
- package/dist/workspace/init.d.ts.map +1 -0
- package/dist/workspace/jsonc.d.ts +38 -0
- package/dist/workspace/jsonc.d.ts.map +1 -0
- package/dist/workspace/kinds.d.ts +192 -0
- package/dist/workspace/kinds.d.ts.map +1 -0
- package/dist/workspace/lineage-check.d.ts +84 -0
- package/dist/workspace/lineage-check.d.ts.map +1 -0
- package/dist/workspace/lineage-cli.d.ts +31 -0
- package/dist/workspace/lineage-cli.d.ts.map +1 -0
- package/dist/workspace/lineage-init.d.ts +101 -0
- package/dist/workspace/lineage-init.d.ts.map +1 -0
- package/dist/workspace/lineage-lock.d.ts +258 -0
- package/dist/workspace/lineage-lock.d.ts.map +1 -0
- package/dist/workspace/lineage-merge.d.ts +14 -0
- package/dist/workspace/lineage-merge.d.ts.map +1 -0
- package/dist/workspace/lineage-migrations.d.ts +178 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -0
- package/dist/workspace/lineage-update.d.ts +59 -0
- package/dist/workspace/lineage-update.d.ts.map +1 -0
- package/dist/workspace/lineage-upgrade-cli.d.ts +40 -0
- package/dist/workspace/lineage-upgrade-cli.d.ts.map +1 -0
- package/dist/workspace/lineage-upgrade.d.ts +146 -0
- package/dist/workspace/lineage-upgrade.d.ts.map +1 -0
- package/dist/workspace/lineage-vendor.d.ts +63 -0
- package/dist/workspace/lineage-vendor.d.ts.map +1 -0
- package/dist/workspace/lineage-version.d.ts +32 -0
- package/dist/workspace/lineage-version.d.ts.map +1 -0
- package/dist/workspace/links.d.ts +150 -0
- package/dist/workspace/links.d.ts.map +1 -0
- package/dist/workspace/ls.d.ts +99 -0
- package/dist/workspace/ls.d.ts.map +1 -0
- package/dist/workspace/member-commands.d.ts +139 -0
- package/dist/workspace/member-commands.d.ts.map +1 -0
- package/dist/workspace/member-handles.d.ts +54 -0
- package/dist/workspace/member-handles.d.ts.map +1 -0
- package/dist/workspace/member-pipeline.d.ts +143 -0
- package/dist/workspace/member-pipeline.d.ts.map +1 -0
- package/dist/workspace/member-run.d.ts +67 -0
- package/dist/workspace/member-run.d.ts.map +1 -0
- package/dist/workspace/reason-codes.d.ts +65 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -0
- package/dist/workspace/records-cli.d.ts +28 -4
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records.d.ts.map +1 -1
- package/dist/workspace/root-refusal.d.ts +53 -0
- package/dist/workspace/root-refusal.d.ts.map +1 -0
- package/dist/workspace/status.d.ts +150 -0
- package/dist/workspace/status.d.ts.map +1 -0
- package/dist/workspace/template-manifest.d.ts +90 -0
- package/dist/workspace/template-manifest.d.ts.map +1 -0
- package/dist/workspace/tree.d.ts +36 -0
- package/dist/workspace/tree.d.ts.map +1 -0
- package/dist/workspace/trust/attestor.d.ts +67 -0
- package/dist/workspace/trust/attestor.d.ts.map +1 -0
- package/dist/workspace/trust/policy.d.ts +111 -0
- package/dist/workspace/trust/policy.d.ts.map +1 -0
- package/dist/workspace/trust/provenance.d.ts +67 -0
- package/dist/workspace/trust/provenance.d.ts.map +1 -0
- package/dist/workspace/trust/ssh-commit.d.ts +43 -0
- package/dist/workspace/trust/ssh-commit.d.ts.map +1 -0
- package/dist/workspace/trust/test-repo.d.ts +42 -0
- package/dist/workspace/trust/test-repo.d.ts.map +1 -0
- package/dist/workspace/trust/verify-cli.d.ts +9 -0
- package/dist/workspace/trust/verify-cli.d.ts.map +1 -0
- package/dist/workspace/trust/verify.d.ts +66 -0
- package/dist/workspace/trust/verify.d.ts.map +1 -0
- package/dist/workspace/which-chant.d.ts +58 -0
- package/dist/workspace/which-chant.d.ts.map +1 -0
- package/dist/workspace/workspace-kinds.schema.json +133 -0
- package/package.json +2 -1
- package/src/audit/discover.ts +66 -78
- package/src/audit/report-html.ts +3 -1
- package/src/audit/report-model.ts +14 -1
- package/src/audit/terraform-state.test.ts +4 -9
- package/src/audit/terraform-state.ts +4 -5
- package/src/cli/commands/audit-truncation.test.ts +167 -0
- package/src/cli/commands/audit.ts +89 -60
- package/src/cli/commands/check-lexicon.ts +24 -0
- package/src/cli/commands/doctor.test.ts +30 -0
- package/src/cli/commands/doctor.ts +18 -0
- package/src/cli/commands/import-agents.ts +6 -2
- package/src/cli/commands/init.ts +22 -3
- package/src/cli/commands/lint.test.ts +17 -23
- package/src/cli/commands/lint.ts +24 -84
- package/src/cli/commands/update.ts +13 -4
- package/src/cli/commands/vendor.ts +11 -6
- package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +38 -0
- package/src/cli/handlers/build-member.test.ts +127 -0
- package/src/cli/handlers/build.ts +35 -1
- package/src/cli/handlers/components.test.ts +127 -0
- package/src/cli/handlers/components.ts +70 -8
- package/src/cli/handlers/dev.ts +5 -3
- package/src/cli/handlers/fan-out.ts +9 -2
- package/src/cli/handlers/init.ts +54 -1
- package/src/cli/handlers/operator.test.ts +68 -0
- package/src/cli/handlers/operator.ts +37 -9
- package/src/cli/handlers/promote.test.ts +118 -2
- package/src/cli/handlers/promote.ts +82 -16
- package/src/cli/handlers/run-generate-member.test.ts +83 -0
- package/src/cli/handlers/run-generate.test.ts +6 -8
- package/src/cli/handlers/run-generate.ts +36 -1
- package/src/cli/handlers/run.test.ts +47 -0
- package/src/cli/handlers/run.ts +28 -5
- package/src/cli/handlers/vendor.ts +147 -43
- package/src/cli/main.test.ts +105 -1
- package/src/cli/main.ts +230 -17
- package/src/cli/plugins.ts +17 -17
- package/src/cli/registry.ts +32 -0
- package/src/cli/static-config-read.test.ts +208 -0
- package/src/codegen/fetch.test.ts +63 -1
- package/src/codegen/fetch.ts +30 -1
- package/src/components/cli-support.ts +6 -1
- package/src/components/discover.test.ts +27 -57
- package/src/components/discover.ts +13 -68
- package/src/components/driver.test.ts +78 -1
- package/src/components/driver.ts +43 -7
- package/src/components/gate-plan.ts +53 -0
- package/src/components/promote.test.ts +276 -2
- package/src/components/promote.ts +119 -15
- package/src/components/sandbox/driver.ts +8 -8
- package/src/components/sandbox/run.ts +4 -1
- package/src/components/verbs/build-archive.ts +27 -21
- package/src/components/verbs/run-agent.ts +3 -5
- package/src/config-static.test.ts +136 -0
- package/src/config-static.ts +232 -0
- package/src/config.test.ts +2 -2
- package/src/config.ts +48 -15
- package/src/content-digest.test.ts +120 -0
- package/src/content-digest.ts +21 -0
- package/src/discovery/files.test.ts +10 -10
- package/src/discovery/files.ts +25 -81
- package/src/discovery/fold-import.ts +49 -5
- package/src/discovery/index.ts +1 -0
- package/src/discovery/sandbox/driver.ts +73 -35
- package/src/discovery/sandbox/fork-diagnostic.test.ts +136 -13
- package/src/discovery/sandbox/fork.ts +83 -43
- package/src/discovery/sandbox/path-lexicon-multifile.test.ts +285 -0
- package/src/discovery/walk.test.ts +263 -0
- package/src/discovery/walk.ts +334 -0
- package/src/effect-receipt.ts +2 -2
- package/src/graph-ir.ts +4 -1
- package/src/join-key.test.ts +25 -0
- package/src/join-key.ts +39 -0
- package/src/lexicon-module.ts +108 -10
- package/src/lexicon.ts +79 -1
- package/src/lifecycle/build-ledger-store.ts +11 -10
- package/src/lifecycle/digest.ts +9 -5
- package/src/lifecycle/gate-ledger.test.ts +20 -0
- package/src/lifecycle/gate-ledger.ts +28 -6
- package/src/lifecycle/git.test.ts +13 -1
- package/src/lifecycle/git.ts +221 -176
- package/src/lifecycle/lease.ts +25 -10
- package/src/lifecycle/legacy-digest.test.ts +115 -23
- package/src/lifecycle/legacy-digest.ts +60 -19
- package/src/lifecycle/member-ledger.test.ts +319 -0
- package/src/lifecycle/member-ledger.ts +145 -0
- package/src/lifecycle/plan-digest.ts +7 -7
- package/src/lifecycle/release-ledger.test.ts +20 -0
- package/src/lifecycle/release-ledger.ts +23 -7
- package/src/lifecycle/status.test.ts +151 -1
- package/src/lifecycle/status.ts +228 -7
- package/src/op/activities/activity-contracts.ts +37 -0
- package/src/op/activities/index.ts +10 -0
- package/src/op/activities/propose-upgrade.ts +206 -0
- package/src/op/discover.test.ts +14 -4
- package/src/op/discover.ts +19 -27
- package/src/op/gate-name.ts +8 -0
- package/src/op/gate-summary.test.ts +14 -0
- package/src/op/gate-summary.ts +25 -2
- package/src/op/gate.ts +36 -7
- package/src/op/generate-pipeline.test.ts +14 -5
- package/src/project-root.test.ts +66 -1
- package/src/project-root.ts +48 -0
- package/src/workspace/__fixtures__/contract-repo.ts +100 -0
- package/src/workspace/__fixtures__/two-member-workspace.ts +35 -0
- package/src/workspace/behold-kinds.test.ts +162 -0
- package/src/workspace/check-contract.test.ts +127 -0
- package/src/workspace/check.schema.json +347 -0
- package/src/workspace/checks/generated.test.ts +287 -0
- package/src/workspace/checks/generated.ts +475 -0
- package/src/workspace/checks/ledgers.test.ts +139 -0
- package/src/workspace/checks/ledgers.ts +246 -0
- package/src/workspace/checks/links.ts +183 -0
- package/src/workspace/checks/pipelines.test.ts +133 -0
- package/src/workspace/checks/pipelines.ts +225 -0
- package/src/workspace/checks-repo.test.ts +71 -0
- package/src/workspace/checks.test.ts +450 -0
- package/src/workspace/checks.ts +461 -0
- package/src/workspace/compose-graph.test.ts +146 -0
- package/src/workspace/compose-graph.ts +228 -0
- package/src/workspace/compose-reports.test.ts +109 -0
- package/src/workspace/compose-reports.ts +186 -0
- package/src/workspace/declaration.schema.json +434 -0
- package/src/workspace/declaration.test.ts +347 -0
- package/src/workspace/declaration.ts +623 -0
- package/src/workspace/generated-files.test.ts +114 -0
- package/src/workspace/generated-files.ts +94 -0
- package/src/workspace/glob.ts +49 -0
- package/src/workspace/graph-cli.ts +220 -0
- package/src/workspace/graph-contract.test.ts +204 -0
- package/src/workspace/graph.schema.json +662 -0
- package/src/workspace/init.test.ts +223 -0
- package/src/workspace/init.ts +585 -0
- package/src/workspace/jsonc.test.ts +65 -0
- package/src/workspace/jsonc.ts +231 -0
- package/src/workspace/kinds.test.ts +288 -0
- package/src/workspace/kinds.ts +506 -0
- package/src/workspace/lineage-check.ts +264 -0
- package/src/workspace/lineage-cli.ts +114 -0
- package/src/workspace/lineage-init.test.ts +231 -0
- package/src/workspace/lineage-init.ts +365 -0
- package/src/workspace/lineage-lock.test.ts +224 -0
- package/src/workspace/lineage-lock.ts +357 -0
- package/src/workspace/lineage-merge.ts +44 -0
- package/src/workspace/lineage-migrations.test.ts +178 -0
- package/src/workspace/lineage-migrations.ts +343 -0
- package/src/workspace/lineage-update.ts +160 -0
- package/src/workspace/lineage-upgrade-cli.ts +151 -0
- package/src/workspace/lineage-upgrade.test.ts +474 -0
- package/src/workspace/lineage-upgrade.ts +624 -0
- package/src/workspace/lineage-vendor.test.ts +126 -0
- package/src/workspace/lineage-vendor.ts +215 -0
- package/src/workspace/lineage-version.ts +127 -0
- package/src/workspace/links.test.ts +344 -0
- package/src/workspace/links.ts +331 -0
- package/src/workspace/ls-contract.test.ts +200 -0
- package/src/workspace/ls.schema.json +190 -0
- package/src/workspace/ls.ts +254 -0
- package/src/workspace/member-commands.e2e.test.ts +244 -0
- package/src/workspace/member-commands.test.ts +217 -0
- package/src/workspace/member-commands.ts +540 -0
- package/src/workspace/member-handles.test.ts +76 -0
- package/src/workspace/member-handles.ts +228 -0
- package/src/workspace/member-pipeline.test.ts +135 -0
- package/src/workspace/member-pipeline.ts +317 -0
- package/src/workspace/member-run.ts +146 -0
- package/src/workspace/read-contract.test.ts +129 -0
- package/src/workspace/reason-codes.test.ts +113 -0
- package/src/workspace/reason-codes.ts +81 -0
- package/src/workspace/records-cli.ts +86 -14
- package/src/workspace/records-contract.test.ts +5 -0
- package/src/workspace/records.schema.json +32 -2
- package/src/workspace/records.ts +3 -2
- package/src/workspace/root-refusal.ts +97 -0
- package/src/workspace/status-contract.test.ts +308 -0
- package/src/workspace/status.schema.json +210 -0
- package/src/workspace/status.ts +412 -0
- package/src/workspace/template-manifest.test.ts +79 -0
- package/src/workspace/template-manifest.ts +221 -0
- package/src/workspace/tree.ts +132 -0
- package/src/workspace/trust/attestor.ts +93 -0
- package/src/workspace/trust/policy.ts +306 -0
- package/src/workspace/trust/provenance.ts +181 -0
- package/src/workspace/trust/ssh-commit.ts +138 -0
- package/src/workspace/trust/test-repo.ts +138 -0
- package/src/workspace/trust/trust.test.ts +397 -0
- package/src/workspace/trust/verify-cli.ts +56 -0
- package/src/workspace/trust/verify.ts +194 -0
- package/src/workspace/which-chant.test.ts +117 -0
- package/src/workspace/which-chant.ts +151 -0
- package/src/workspace/workspace-kinds.schema.json +133 -0
- package/dist/components/unbound-gate-approval.d.ts +0 -24
- package/dist/components/unbound-gate-approval.d.ts.map +0 -1
- package/dist/discovery/convergence.d.ts +0 -97
- package/dist/discovery/convergence.d.ts.map +0 -1
- package/src/cli/commands/audit-walk-warnings.test.ts +0 -156
- package/src/components/unbound-gate-approval.test.ts +0 -82
- package/src/components/unbound-gate-approval.ts +0 -51
- package/src/discovery/convergence.test.ts +0 -231
- package/src/discovery/convergence.ts +0 -399
- package/src/op/discover-convergence.test.ts +0 -70
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant workspace upgrade <scope>`: bring one lineage scope to a newer
|
|
3
|
+
* version of its template (#2550, D9, ws-005, ws-032).
|
|
4
|
+
*
|
|
5
|
+
* The upgrade is a core command, never an Op the template ships, so the
|
|
6
|
+
* template cannot change the rules that judge its own upgrade. It works in the
|
|
7
|
+
* six steps of D9:
|
|
8
|
+
*
|
|
9
|
+
* 1. Fetch the target version of the template. For a git source that is one
|
|
10
|
+
* `git fetch` of the target ref, plus the commit the scope was made from.
|
|
11
|
+
* This is the command's only network step, catalogued in
|
|
12
|
+
* `test/egress-catalogue.ts`. A local repository reaches nothing.
|
|
13
|
+
* 2. Rebuild the merge base offline: each recorded file's content at the base
|
|
14
|
+
* commit, kept only when it has the hash the lock recorded. A file the
|
|
15
|
+
* project never edited is its own merge base. Vendor sources keep no
|
|
16
|
+
* history, so only unedited vendored files have a base.
|
|
17
|
+
* 3. Migrate in a separate git worktree, checked out at HEAD under
|
|
18
|
+
* `.chant/upgrade/`. The chain is planned from the template's
|
|
19
|
+
* `.chant/migrations/`, and a gap refuses the upgrade.
|
|
20
|
+
* 4. Merge per file (ws-005): an edited file takes the new version only when
|
|
21
|
+
* every hunk merges cleanly. Otherwise it stays as it was, with one manual
|
|
22
|
+
* step. The worktree never holds conflict markers.
|
|
23
|
+
* 5. Check the worktree: `chant build` and `chant lint` when the project is a
|
|
24
|
+
* chant project, and the lineage checks of `chant workspace check`.
|
|
25
|
+
* 6. Bind the gate to the digest of the resulting patch: the pending fact and
|
|
26
|
+
* the approval name it, so an approval covers exactly this patch.
|
|
27
|
+
*
|
|
28
|
+
* The project's own tree changes only once the gate is approved, when the
|
|
29
|
+
* patch is applied to it. A patch that changes governance files (Op files,
|
|
30
|
+
* `chant.config`, CI workflows, CODEOWNERS) needs human approvals, as many as
|
|
31
|
+
* the strictest gate in the Op files it changes asks for at HEAD. The
|
|
32
|
+
* upgraded Op files never decide their own gate.
|
|
33
|
+
*/
|
|
34
|
+
import type { ResolvedGateApproval } from "../op/gate-approval.js";
|
|
35
|
+
import { LockError, type Lineage, type ManualStep } from "./lineage-lock.js";
|
|
36
|
+
import { type UpdateResult } from "./lineage-update.js";
|
|
37
|
+
/** The kind the patch digest is taken under, so it never collides with another kind of plan. */
|
|
38
|
+
export declare const UPGRADE_PLAN_KIND = "workspace-upgrade";
|
|
39
|
+
/** Where staging worktrees live, relative to the project root. */
|
|
40
|
+
export declare const UPGRADE_DIR = ".chant/upgrade";
|
|
41
|
+
export declare class UpgradeError extends LockError {
|
|
42
|
+
name: string;
|
|
43
|
+
}
|
|
44
|
+
export interface UpgradeCheck {
|
|
45
|
+
name: "build" | "lint" | "workspace check";
|
|
46
|
+
status: "passed" | "failed" | "skipped";
|
|
47
|
+
/** Why a check was skipped, or the tail of a failed command's output. */
|
|
48
|
+
detail?: string;
|
|
49
|
+
}
|
|
50
|
+
/** Runs `chant build` or `chant lint` in a directory. */
|
|
51
|
+
export type ChantRunner = (command: "build" | "lint", cwd: string) => Promise<{
|
|
52
|
+
exitCode: number;
|
|
53
|
+
output: string;
|
|
54
|
+
}>;
|
|
55
|
+
/**
|
|
56
|
+
* The default runner: this same chant, in a child process. The child sees the
|
|
57
|
+
* worktree's sources and resolves packages the way the project does, since the
|
|
58
|
+
* worktree sits inside the project.
|
|
59
|
+
*/
|
|
60
|
+
export declare const spawnChant: ChantRunner;
|
|
61
|
+
export interface UpgradeOptions {
|
|
62
|
+
/** The directory holding `.chant/workspace.lock.json`. */
|
|
63
|
+
root: string;
|
|
64
|
+
/** The scope to upgrade: `"."` or a vendor scope's directory. */
|
|
65
|
+
scope?: string;
|
|
66
|
+
/** The target ref (git) or label (vendor). Defaults to the ref the scope is pinned at. */
|
|
67
|
+
to?: string;
|
|
68
|
+
/** Run migrations whose body is code. */
|
|
69
|
+
allowCode?: boolean;
|
|
70
|
+
/** Replaces the child-process build and lint. For tests. */
|
|
71
|
+
runChant?: ChantRunner;
|
|
72
|
+
}
|
|
73
|
+
export interface GovernanceChange {
|
|
74
|
+
/** Changed governance paths, relative to the repository root. */
|
|
75
|
+
paths: string[];
|
|
76
|
+
/** The approval the gate asks for, from the rules at HEAD. */
|
|
77
|
+
approval: ResolvedGateApproval;
|
|
78
|
+
/** Where the rules came from. */
|
|
79
|
+
rules: string;
|
|
80
|
+
}
|
|
81
|
+
export interface StagedUpgrade {
|
|
82
|
+
scope: string;
|
|
83
|
+
template: string;
|
|
84
|
+
kind: Lineage["kind"];
|
|
85
|
+
/** The pin before and after. */
|
|
86
|
+
from: string | null;
|
|
87
|
+
to: string | null;
|
|
88
|
+
commit?: {
|
|
89
|
+
from?: string;
|
|
90
|
+
to: string;
|
|
91
|
+
};
|
|
92
|
+
migrations: string[];
|
|
93
|
+
written: string[];
|
|
94
|
+
merged: string[];
|
|
95
|
+
removed: string[];
|
|
96
|
+
kept: string[];
|
|
97
|
+
skipped: UpdateResult["skipped"];
|
|
98
|
+
manualSteps: ManualStep[];
|
|
99
|
+
/** Paths the patch changes, relative to the repository root. */
|
|
100
|
+
changedPaths: string[];
|
|
101
|
+
patch: string;
|
|
102
|
+
/**
|
|
103
|
+
* The new lock. When git tracks it, its change is in `patch`. A template
|
|
104
|
+
* whose `.gitignore` covers `.chant/` leaves it untracked; the text is then
|
|
105
|
+
* applied beside the patch and covered by the digest on its own.
|
|
106
|
+
*/
|
|
107
|
+
lock: {
|
|
108
|
+
path: string;
|
|
109
|
+
tracked: boolean;
|
|
110
|
+
text: string;
|
|
111
|
+
};
|
|
112
|
+
/** Whether the upgrade changes anything: the patch, or an untracked lock. */
|
|
113
|
+
changed: boolean;
|
|
114
|
+
/** `computePlanDigest(UPGRADE_PLAN_KIND, { scope, patch })`, plus `lock` when untracked: what the gate binds. */
|
|
115
|
+
digest: string;
|
|
116
|
+
governance: GovernanceChange | null;
|
|
117
|
+
checks: UpgradeCheck[];
|
|
118
|
+
checksOk: boolean;
|
|
119
|
+
/** The repository root and the commit the worktree was made from. */
|
|
120
|
+
repo: string;
|
|
121
|
+
head: string;
|
|
122
|
+
/** The staging worktree, and the project root inside it. */
|
|
123
|
+
worktree: string;
|
|
124
|
+
worktreeProject: string;
|
|
125
|
+
/** Remove the worktree. Safe to call twice. */
|
|
126
|
+
dispose(): void;
|
|
127
|
+
}
|
|
128
|
+
/** Whether a repository path is a governance file: one that decides gates, pipelines or review. */
|
|
129
|
+
export declare function isGovernancePath(path: string): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Stage an upgrade: steps 1 to 5 and the digest of step 6. Nothing in the
|
|
132
|
+
* project's tree changes. The caller decides the gate, then applies the patch
|
|
133
|
+
* with {@link applyStagedUpgrade} or commits it with {@link commitStagedUpgrade},
|
|
134
|
+
* and always calls `dispose()`.
|
|
135
|
+
*/
|
|
136
|
+
export declare function stageUpgrade(options: UpgradeOptions): Promise<StagedUpgrade>;
|
|
137
|
+
/** Apply the staged patch to the project's tree. Leaves it uncommitted. */
|
|
138
|
+
export declare function applyStagedUpgrade(staged: StagedUpgrade): void;
|
|
139
|
+
/**
|
|
140
|
+
* Commit the staged patch in the worktree and point `branch` at it. Returns
|
|
141
|
+
* the commit. The caller has already refused the default branch.
|
|
142
|
+
*/
|
|
143
|
+
export declare function commitStagedUpgrade(staged: StagedUpgrade, branch: string, message: string): string;
|
|
144
|
+
/** One line per staged change, for the terminal and for a PR body. */
|
|
145
|
+
export declare function describeStaged(staged: StagedUpgrade): string[];
|
|
146
|
+
//# sourceMappingURL=lineage-upgrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage-upgrade.d.ts","sourceRoot":"","sources":["../../src/workspace/lineage-upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant vendor` over the lineage lock (#2540, ws-038).
|
|
3
|
+
*
|
|
4
|
+
* A vendored target is one lineage scope of kind `vendor`: copied, with no
|
|
5
|
+
* parameters. `pull` updates it file by file through {@link applyUpstream}, so
|
|
6
|
+
* local edits survive and a file both sides changed becomes a manual step.
|
|
7
|
+
* `check` reports edits and fails on open manual steps.
|
|
8
|
+
*
|
|
9
|
+
* `vendor.json` is still read. A project whose lock has no vendor scopes and
|
|
10
|
+
* which never ran `chant vendor migrate` keeps today's `vendor.json` behaviour
|
|
11
|
+
* byte for byte (#2525 rule 2): this module loads only when a lock exists or
|
|
12
|
+
* `migrate` runs.
|
|
13
|
+
*/
|
|
14
|
+
import { type Lineage, type LineageLock, type ManualStep } from "./lineage-lock.js";
|
|
15
|
+
/** Vendor scopes in the lock, by scope key. */
|
|
16
|
+
export declare function vendorScopes(lock: LineageLock): Array<[string, Lineage]>;
|
|
17
|
+
export interface LockedPull {
|
|
18
|
+
name: string;
|
|
19
|
+
target: string;
|
|
20
|
+
digest: string;
|
|
21
|
+
fileCount: number;
|
|
22
|
+
written: number;
|
|
23
|
+
kept: number;
|
|
24
|
+
removed: number;
|
|
25
|
+
manualSteps: ManualStep[];
|
|
26
|
+
}
|
|
27
|
+
/** Pull the lock's vendor scopes (or just `only`). Writes the lock. */
|
|
28
|
+
export declare function pullLockedScopes(root: string, only?: string): Promise<LockedPull[]>;
|
|
29
|
+
export declare function formatLockedPull(p: LockedPull): string;
|
|
30
|
+
export type LockedCheckStatus = "ok" | "customised" | "manual" | "unpinned" | "missing";
|
|
31
|
+
export interface LockedCheck {
|
|
32
|
+
name: string;
|
|
33
|
+
status: LockedCheckStatus;
|
|
34
|
+
customised: string[];
|
|
35
|
+
manualSteps: ManualStep[];
|
|
36
|
+
}
|
|
37
|
+
/** Check each vendor scope in the lock against the tree. */
|
|
38
|
+
export declare function checkLockedScopes(root: string): LockedCheck[];
|
|
39
|
+
export declare function formatLockedCheck(c: LockedCheck): string;
|
|
40
|
+
/** Whether a check result fails the check the way drift does for `vendor.json`. */
|
|
41
|
+
export declare function lockedCheckFails(c: LockedCheck): boolean;
|
|
42
|
+
export interface MigrateResult {
|
|
43
|
+
migrated: Array<{
|
|
44
|
+
name: string;
|
|
45
|
+
target: string;
|
|
46
|
+
files: number;
|
|
47
|
+
pinned: boolean;
|
|
48
|
+
}>;
|
|
49
|
+
lockCreated: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Move every `vendor.json` entry into the lock as a vendor scope, then delete
|
|
53
|
+
* `vendor.json`. An entry's checksum becomes the scope's digest.
|
|
54
|
+
*
|
|
55
|
+
* Per-file merge bases come from the target when it still matches the
|
|
56
|
+
* checksum. When it has been edited, they come from the source instead, which
|
|
57
|
+
* must still hash to the checksum; otherwise the pinned content is gone and the
|
|
58
|
+
* entry is refused. Nothing is written unless every entry migrates.
|
|
59
|
+
*/
|
|
60
|
+
export declare function migrateVendorManifest(root: string): Promise<MigrateResult>;
|
|
61
|
+
/** Whether `vendor.json` sits next to the lock. */
|
|
62
|
+
export declare function manifestPresent(root: string): boolean;
|
|
63
|
+
//# sourceMappingURL=lineage-vendor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage-vendor.d.ts","sourceRoot":"","sources":["../../src/workspace/lineage-vendor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,EAA6G,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAS5L,+CAA+C;AAC/C,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAExE;AAUD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,uEAAuE;AACvE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAoBzF;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAKtD;AAID,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAExF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAoB7D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAgBxD;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAExD;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAClF,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAiDhF;AAED,mDAAmD;AACnD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template versions and version ranges, for migration chains (#2550, D9).
|
|
3
|
+
*
|
|
4
|
+
* A template's version is read from the ref it was pinned at: `v1.4.0`,
|
|
5
|
+
* `1.4`, or a prefixed release tag such as `chant-v0.80.0`. Missing minor and
|
|
6
|
+
* patch numbers read as 0. A ref that is not a version (a branch, a commit)
|
|
7
|
+
* has none, and a chain of migrations cannot be planned from it.
|
|
8
|
+
*
|
|
9
|
+
* Ranges use the familiar npm subset: comparators (`>=1.0.0 <2.0.0`), `^`,
|
|
10
|
+
* `~`, `x` wildcards, a bare version for an exact match, `*` for any, and
|
|
11
|
+
* `||` between alternatives. Pre-release tags compare below their release,
|
|
12
|
+
* and a range matches a pre-release only through an exact comparator.
|
|
13
|
+
*/
|
|
14
|
+
export interface Version {
|
|
15
|
+
major: number;
|
|
16
|
+
minor: number;
|
|
17
|
+
patch: number;
|
|
18
|
+
/** The pre-release label after `-`, or empty for a release. */
|
|
19
|
+
pre: string;
|
|
20
|
+
}
|
|
21
|
+
/** The version a ref names, or null when it names none. */
|
|
22
|
+
export declare function parseVersion(ref: string | undefined | null): Version | null;
|
|
23
|
+
export declare function formatVersion(v: Version): string;
|
|
24
|
+
export declare function compareVersions(a: Version, b: Version): number;
|
|
25
|
+
export declare class VersionRangeError extends Error {
|
|
26
|
+
name: string;
|
|
27
|
+
}
|
|
28
|
+
/** Check a range's syntax, throwing {@link VersionRangeError} when it cannot be read. */
|
|
29
|
+
export declare function validateRange(range: string): void;
|
|
30
|
+
/** Whether `version` falls in `range`. */
|
|
31
|
+
export declare function satisfies(version: Version, range: string): boolean;
|
|
32
|
+
//# sourceMappingURL=lineage-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage-version.d.ts","sourceRoot":"","sources":["../../src/workspace/lineage-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;CACb;AAID,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAK3E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAQ9D;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IACjC,IAAI,SAAuB;CACrC;AAkED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,0CAA0C;AAC1C,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAMlE"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Member links (#2524 D6, #2539; ws-008).
|
|
3
|
+
*
|
|
4
|
+
* A member link is stated once, on the consumer, as `{member, output}`, and it
|
|
5
|
+
* is matched exactly against the outputs the producer exposes. Which outputs
|
|
6
|
+
* a member exposes is up to its kind ({@link KindOutputs}): a `chant` member's
|
|
7
|
+
* are read from its source, a nested workspace exposes none, and `other` and
|
|
8
|
+
* kinds from a package expose what the kind and the entry list.
|
|
9
|
+
*
|
|
10
|
+
* A join nobody wrote down is inferred: a `chant` consumer's parameter is
|
|
11
|
+
* matched to other members' outputs with the core {@link joinKey}, and the
|
|
12
|
+
* join is labelled `exact` or `folded`. A parameter that matches two or more
|
|
13
|
+
* outputs is an ambiguity row, not an edge. A declared link from the same
|
|
14
|
+
* consumer to one of the matched outputs settles it: the inferred rows for
|
|
15
|
+
* that parameter give way to the declared one, which is how an inferred edge
|
|
16
|
+
* is promoted.
|
|
17
|
+
*
|
|
18
|
+
* Every row says how it was found (`declared` or `inferred:joinKey`), where it
|
|
19
|
+
* resolved (`source`; `check --live` comes later) and its status. A link that
|
|
20
|
+
* can't be resolved is kept, with the reason.
|
|
21
|
+
*
|
|
22
|
+
* {@link resolveLinks} takes the members' handles as plain data, so the same
|
|
23
|
+
* rules serve `chant workspace check`, which reads the handles from source
|
|
24
|
+
* (`sourceMemberHandles` in `./member-handles.ts`, which loads the TypeScript
|
|
25
|
+
* parser), and `chant workspace graph`, which reads
|
|
26
|
+
* them from each member's graph IR ({@link irMemberHandles}).
|
|
27
|
+
*/
|
|
28
|
+
import { type JoinLabel } from "../join-key.js";
|
|
29
|
+
import type { Declaration, LinkDeclaration, Member } from "./declaration.js";
|
|
30
|
+
import type { KindRegistry, MemberKind } from "./kinds.js";
|
|
31
|
+
/** The link kinds chant knows. Closed: a link of any other kind fails closed. */
|
|
32
|
+
export declare const LINK_KINDS: readonly ["output"];
|
|
33
|
+
export declare const DEFAULT_LINK_KIND = "output";
|
|
34
|
+
/** How a row was found: written down, or inferred by the named rule. */
|
|
35
|
+
export type LinkOrigin = "declared" | "inferred:joinKey";
|
|
36
|
+
/** One output or parameter of a member, as a join sees it. */
|
|
37
|
+
export interface JoinHandle {
|
|
38
|
+
name: string;
|
|
39
|
+
/** The node that holds it, when the reader knows one (a graph IR id). */
|
|
40
|
+
node?: string;
|
|
41
|
+
}
|
|
42
|
+
/** What a member offers links, and what it reads. */
|
|
43
|
+
export interface MemberHandles {
|
|
44
|
+
member: string;
|
|
45
|
+
outputs: JoinHandle[];
|
|
46
|
+
/** Parameters a join may feed. Only `chant` members have them. */
|
|
47
|
+
inputs: JoinHandle[];
|
|
48
|
+
/**
|
|
49
|
+
* Whether `outputs` is every output the member exposes. When it isn't, a
|
|
50
|
+
* link to a name not in the list is unresolved, not missing.
|
|
51
|
+
*/
|
|
52
|
+
complete: boolean;
|
|
53
|
+
/** Why the list is incomplete, or why the member exposes none. */
|
|
54
|
+
why: string | null;
|
|
55
|
+
/** True when the member's kind exposes no outputs at all. */
|
|
56
|
+
exposesNone: boolean;
|
|
57
|
+
}
|
|
58
|
+
interface RowBase {
|
|
59
|
+
consumer: string;
|
|
60
|
+
kind: string;
|
|
61
|
+
origin: LinkOrigin;
|
|
62
|
+
resolves: "source";
|
|
63
|
+
/** Why the row is not `resolved`, or null. */
|
|
64
|
+
reason: string | null;
|
|
65
|
+
}
|
|
66
|
+
/** A declared link, or an inferred join with one producer. */
|
|
67
|
+
export interface LinkRow extends RowBase {
|
|
68
|
+
status: "resolved" | "missing" | "unresolved" | "invalid";
|
|
69
|
+
producer: string;
|
|
70
|
+
output: string;
|
|
71
|
+
/** `exact` for every declared link; `exact` or `folded` for an inferred one. */
|
|
72
|
+
label: JoinLabel;
|
|
73
|
+
/** The consumer's parameter an inferred join feeds; null for a declared link. */
|
|
74
|
+
input: string | null;
|
|
75
|
+
/** The consumer's parameter node and the producer's output node, when known. */
|
|
76
|
+
from?: string;
|
|
77
|
+
to?: string;
|
|
78
|
+
/** The declared link's JSON Pointer in the declaration. */
|
|
79
|
+
pointer?: string;
|
|
80
|
+
}
|
|
81
|
+
/** A parameter that joins outputs of two or more producers (or two outputs of one). */
|
|
82
|
+
export interface AmbiguousRow extends RowBase {
|
|
83
|
+
status: "ambiguous";
|
|
84
|
+
input: string;
|
|
85
|
+
from?: string;
|
|
86
|
+
candidates: {
|
|
87
|
+
producer: string;
|
|
88
|
+
output: string;
|
|
89
|
+
label: JoinLabel;
|
|
90
|
+
to?: string;
|
|
91
|
+
}[];
|
|
92
|
+
}
|
|
93
|
+
export type LinkTableRow = LinkRow | AmbiguousRow;
|
|
94
|
+
/** A link between two members, in the shape the pipeline checks read (#2542). */
|
|
95
|
+
export interface MemberLinkPair {
|
|
96
|
+
consumer: string;
|
|
97
|
+
producer: string;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The member pairs the declaration links, consumer first, once each, in
|
|
101
|
+
* declaration order. Only links to a declared member other than the consumer
|
|
102
|
+
* count.
|
|
103
|
+
*/
|
|
104
|
+
export declare function declaredMemberLinks(declaration: Declaration): MemberLinkPair[];
|
|
105
|
+
/** Why a declared link's target is not a member it may name, or undefined. */
|
|
106
|
+
export declare function linkTargetProblem(declaration: Declaration, consumer: Member, link: LinkDeclaration): string | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Resolve every declared link and infer the joins nobody wrote down.
|
|
109
|
+
* `handles` holds one entry per member whose handles were read; a member
|
|
110
|
+
* missing from it is unresolved. Declared rows come first, in declaration
|
|
111
|
+
* order; inferred and ambiguous rows follow, sorted by consumer and parameter.
|
|
112
|
+
*/
|
|
113
|
+
export declare function resolveLinks(declaration: Declaration, handles: ReadonlyMap<string, MemberHandles>): LinkTableRow[];
|
|
114
|
+
/**
|
|
115
|
+
* The handles of a member whose kind lists its outputs, or exposes none.
|
|
116
|
+
* Undefined for a kind whose outputs are read from the member (`chant`).
|
|
117
|
+
*/
|
|
118
|
+
export declare function kindHandles(m: Member, kind: MemberKind): MemberHandles | undefined;
|
|
119
|
+
/** The part of a composed workspace graph (#2537) the links read. */
|
|
120
|
+
export interface ComposedHandles {
|
|
121
|
+
/** Members whose IR was composed. */
|
|
122
|
+
composed: readonly string[];
|
|
123
|
+
exports: readonly {
|
|
124
|
+
member: string;
|
|
125
|
+
name: string;
|
|
126
|
+
node?: string;
|
|
127
|
+
}[];
|
|
128
|
+
imports: readonly {
|
|
129
|
+
member: string;
|
|
130
|
+
name: string;
|
|
131
|
+
node: string;
|
|
132
|
+
}[];
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Every composed member's handles, from the `exports` and `imports` of the
|
|
136
|
+
* composed workspace graph, for its `links` section. Node ids are the
|
|
137
|
+
* composed ones (`<member>/<id>`). A member's IR lists all its outputs, so
|
|
138
|
+
* its list is complete.
|
|
139
|
+
*/
|
|
140
|
+
export declare function irMemberHandles(graph: ComposedHandles): Map<string, MemberHandles>;
|
|
141
|
+
/**
|
|
142
|
+
* The `links` section of the composed workspace graph (#2537, #2524 D8):
|
|
143
|
+
* the declared links and inferred joins, with composed node ids on the ends
|
|
144
|
+
* that have one. Declared links suppress the inferred edges they cover.
|
|
145
|
+
* With `kinds`, a member that isn't composed but whose kind lists its outputs
|
|
146
|
+
* (`other`, kinds from a package) is a link target too.
|
|
147
|
+
*/
|
|
148
|
+
export declare function graphLinks(declaration: Declaration, graph: ComposedHandles, kinds?: KindRegistry): LinkTableRow[];
|
|
149
|
+
export {};
|
|
150
|
+
//# sourceMappingURL=links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/workspace/links.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant workspace ls [dir] [--at <rev>] [--json]` (#2534): list a workspace's
|
|
3
|
+
* members and example groups from its declaration.
|
|
4
|
+
*
|
|
5
|
+
* A member that can't be read is still listed, with a reason code, and the
|
|
6
|
+
* command still exits 0 (#2524 D15, ws-020). Failing on it is the job of
|
|
7
|
+
* `chant workspace check`. Only a declaration that can't be read exits 1.
|
|
8
|
+
*
|
|
9
|
+
* The `--json` output is part of the read contract, versioned like
|
|
10
|
+
* `workspace records` and described by `ls.schema.json` beside this file.
|
|
11
|
+
*/
|
|
12
|
+
import type { CommandContext } from "../cli/registry.js";
|
|
13
|
+
import { type Declaration, type ErrorLocation, type Member, type WorkspaceErrorCode } from "./declaration.js";
|
|
14
|
+
import { type KindRegistry } from "./kinds.js";
|
|
15
|
+
import type { WorkspaceTree } from "./tree.js";
|
|
16
|
+
/** The version of the `ls` output this chant writes. */
|
|
17
|
+
export declare const LS_CONTRACT_VERSION = 1;
|
|
18
|
+
/** `$id` of the JSON Schema for the `--json` output, shipped beside this file. */
|
|
19
|
+
export declare const LS_OUTPUT_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/ls/v1/ls.schema.json";
|
|
20
|
+
/**
|
|
21
|
+
* Why one member can't be read. Closed, like the error codes: a new code is a
|
|
22
|
+
* contract change.
|
|
23
|
+
*/
|
|
24
|
+
export declare const MEMBER_REASON_CODES: readonly ["dir-missing", "unknown-kind", "kind-probe-failed"];
|
|
25
|
+
export type MemberReasonCode = (typeof MEMBER_REASON_CODES)[number];
|
|
26
|
+
/** Why a group lists nothing. */
|
|
27
|
+
export declare const GROUP_REASON_CODES: readonly ["no-matches"];
|
|
28
|
+
export type GroupReasonCode = (typeof GROUP_REASON_CODES)[number];
|
|
29
|
+
export interface LsMember {
|
|
30
|
+
name: string;
|
|
31
|
+
dir: string;
|
|
32
|
+
kind: string;
|
|
33
|
+
roles: {
|
|
34
|
+
name: string;
|
|
35
|
+
path: string | null;
|
|
36
|
+
}[];
|
|
37
|
+
upstream: string | null;
|
|
38
|
+
because: string | null;
|
|
39
|
+
readable: boolean;
|
|
40
|
+
reason: {
|
|
41
|
+
code: MemberReasonCode;
|
|
42
|
+
message: string;
|
|
43
|
+
} | null;
|
|
44
|
+
}
|
|
45
|
+
export interface LsGroup {
|
|
46
|
+
name: string;
|
|
47
|
+
kind: "examples";
|
|
48
|
+
glob: string[];
|
|
49
|
+
matches: string[];
|
|
50
|
+
skipped: string[];
|
|
51
|
+
reason: {
|
|
52
|
+
code: GroupReasonCode;
|
|
53
|
+
message: string;
|
|
54
|
+
} | null;
|
|
55
|
+
}
|
|
56
|
+
export type LsDocument = {
|
|
57
|
+
$schema: string;
|
|
58
|
+
contract: number;
|
|
59
|
+
chant: string;
|
|
60
|
+
at: string | null;
|
|
61
|
+
workspace: {
|
|
62
|
+
name: string;
|
|
63
|
+
/** The workspace root relative to the git root, `"."` for the git root itself. Absolute outside git. */
|
|
64
|
+
root: string;
|
|
65
|
+
file: string;
|
|
66
|
+
schema: number;
|
|
67
|
+
minReader: string | null;
|
|
68
|
+
pins: Declaration["pins"];
|
|
69
|
+
};
|
|
70
|
+
members: LsMember[];
|
|
71
|
+
groups: LsGroup[];
|
|
72
|
+
summary: {
|
|
73
|
+
members: number;
|
|
74
|
+
unreadable: number;
|
|
75
|
+
groups: number;
|
|
76
|
+
matches: number;
|
|
77
|
+
};
|
|
78
|
+
} | {
|
|
79
|
+
$schema: string;
|
|
80
|
+
contract: number;
|
|
81
|
+
chant: string;
|
|
82
|
+
error: {
|
|
83
|
+
code: WorkspaceErrorCode;
|
|
84
|
+
message: string;
|
|
85
|
+
location: ErrorLocation | null;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
export interface LsQuery {
|
|
89
|
+
/** Where the walk up to the declaration starts. */
|
|
90
|
+
cwd: string;
|
|
91
|
+
at?: string;
|
|
92
|
+
kinds?: KindRegistry;
|
|
93
|
+
}
|
|
94
|
+
/** A member's reason code, or null when its kind can read it. */
|
|
95
|
+
export declare function memberReason(member: Member, tree: WorkspaceTree, kinds: KindRegistry): LsMember["reason"];
|
|
96
|
+
/** Find the workspace, read it and build the document `--json` prints. Never throws a {@link WorkspaceReadError}. */
|
|
97
|
+
export declare function listWorkspace(query: LsQuery): LsDocument;
|
|
98
|
+
export declare function runWorkspaceLs(ctx: CommandContext): Promise<number>;
|
|
99
|
+
//# sourceMappingURL=ls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../src/workspace/ls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant workspace build|lint|audit|graph [dir]` (#2537, #2524 D3, D8, D12,
|
|
3
|
+
* D16): run a level-0 command in every member, each under the member's own
|
|
4
|
+
* chant, and put the answers together.
|
|
5
|
+
*
|
|
6
|
+
* What runs:
|
|
7
|
+
*
|
|
8
|
+
* - Members of kind `chant`, the root member `.` included when it is one.
|
|
9
|
+
* Members of kind `other` are never read, and a nested `workspace` member
|
|
10
|
+
* runs its own workspace commands, so both are listed as skipped with the
|
|
11
|
+
* reason code `kind-not-run`.
|
|
12
|
+
* - For `build` and `lint` only, every project an example group matches
|
|
13
|
+
* (ws-051): groups are built and linted, and have no ledger, audit or place
|
|
14
|
+
* in the graph. On a large repository this is most of the run, so
|
|
15
|
+
* `--member <name>` narrows it to the named members and groups.
|
|
16
|
+
*
|
|
17
|
+
* Which chant runs a member (its toolchain): the `node_modules/.bin/chant`
|
|
18
|
+
* found by walking up from the member's directory to the workspace root,
|
|
19
|
+
* followed to its real path. A member with none uses the root's, and when
|
|
20
|
+
* the root has none either, the chant running this command. Members are
|
|
21
|
+
* grouped by that real path, and each group gets one process: the chant's
|
|
22
|
+
* `workspace member-run`, handed every member's command line on stdin (see
|
|
23
|
+
* `member-run.ts`). A chant too old to have `member-run` gets one level-0
|
|
24
|
+
* process per member instead, from inside the member's directory.
|
|
25
|
+
*
|
|
26
|
+
* Member `.` is the root project minus every other member, so its run leaves
|
|
27
|
+
* the member directories and group matches out of discovery, as
|
|
28
|
+
* `chant build --root-only` does.
|
|
29
|
+
*/
|
|
30
|
+
import type { CommandContext, ParsedArgs } from "../cli/registry.js";
|
|
31
|
+
import type { ComposedMember, MemberReason } from "./compose-graph.js";
|
|
32
|
+
import { type MemberOutput } from "./compose-reports.js";
|
|
33
|
+
import { type KindRegistry } from "./kinds.js";
|
|
34
|
+
import { type MemberRunLine } from "./member-run.js";
|
|
35
|
+
import { type WorkspaceTree } from "./tree.js";
|
|
36
|
+
export type WorkspaceVerb = "build" | "lint" | "audit" | "graph";
|
|
37
|
+
/** One project a workspace command runs: a member, or one match of an example group. */
|
|
38
|
+
export interface RunUnit {
|
|
39
|
+
/** The member's name, or `<group>:<dir>` for a group match. */
|
|
40
|
+
id: string;
|
|
41
|
+
/** The member or group name. */
|
|
42
|
+
member: string;
|
|
43
|
+
kind: string;
|
|
44
|
+
group: boolean;
|
|
45
|
+
/** Relative to the workspace root, `"."` for the root member. */
|
|
46
|
+
dir: string;
|
|
47
|
+
abs: string;
|
|
48
|
+
/** Directories (relative to `dir`) left out of discovery; set for member `.`. */
|
|
49
|
+
exclude: string[];
|
|
50
|
+
}
|
|
51
|
+
export interface SkippedEntry {
|
|
52
|
+
name: string;
|
|
53
|
+
dir: string | null;
|
|
54
|
+
kind: string;
|
|
55
|
+
reason: MemberReason;
|
|
56
|
+
}
|
|
57
|
+
/** How a toolchain was found. */
|
|
58
|
+
export type ToolchainSource = "member" | "root" | "reader";
|
|
59
|
+
export interface Toolchain {
|
|
60
|
+
/** The command that starts this chant: the executable, then any arguments that come before chant's own. */
|
|
61
|
+
command: string[];
|
|
62
|
+
/** The real path of its `bin/chant`: members with the same one share a process. */
|
|
63
|
+
identity: string;
|
|
64
|
+
source: ToolchainSource;
|
|
65
|
+
}
|
|
66
|
+
export interface ToolchainGroup {
|
|
67
|
+
toolchain: Toolchain;
|
|
68
|
+
units: RunUnit[];
|
|
69
|
+
}
|
|
70
|
+
export interface MemberPlan {
|
|
71
|
+
verb: WorkspaceVerb;
|
|
72
|
+
workspace: {
|
|
73
|
+
name: string;
|
|
74
|
+
root: string;
|
|
75
|
+
file: string;
|
|
76
|
+
};
|
|
77
|
+
groups: ToolchainGroup[];
|
|
78
|
+
/** Chant members that can't be run, such as one whose directory is missing. They fail the run. */
|
|
79
|
+
unreadable: SkippedEntry[];
|
|
80
|
+
/** Members and groups the command does not run. */
|
|
81
|
+
skipped: SkippedEntry[];
|
|
82
|
+
}
|
|
83
|
+
/** The `bin/chant` of the chant this module belongs to. */
|
|
84
|
+
export declare function readerBin(): string;
|
|
85
|
+
/**
|
|
86
|
+
* How to start the chant running this command. When this process is chant's
|
|
87
|
+
* own CLI, it is started again the same way (node, its loader flags and
|
|
88
|
+
* `main.ts`), which works from any directory. `bin/chant` looks for tsx
|
|
89
|
+
* relative to an installed package, and from a source checkout it can only
|
|
90
|
+
* fall back to `npx tsx` in the current directory.
|
|
91
|
+
*/
|
|
92
|
+
export declare function readerToolchain(): Toolchain;
|
|
93
|
+
/**
|
|
94
|
+
* The chant a directory resolves: the first `node_modules/.bin/chant` from
|
|
95
|
+
* `dir` up to `root` (both absolute, `dir` inside `root`), else `reader`.
|
|
96
|
+
* A bin that is the reader's own chant is started the way the reader is.
|
|
97
|
+
*/
|
|
98
|
+
export declare function resolveToolchain(dir: string, root: string, reader?: Toolchain): Toolchain;
|
|
99
|
+
export interface PlanOptions {
|
|
100
|
+
/** Only these member or group names. */
|
|
101
|
+
only?: string[];
|
|
102
|
+
kinds?: KindRegistry;
|
|
103
|
+
/** The chant to use when neither a member nor the root has one. Defaults to {@link readerToolchain}. */
|
|
104
|
+
reader?: Toolchain;
|
|
105
|
+
/** The files to plan from, such as a revision's (`--at`); the working tree under `root` by default. */
|
|
106
|
+
tree?: WorkspaceTree;
|
|
107
|
+
}
|
|
108
|
+
/** Work out which projects run and under which chant. Throws a {@link WorkspaceReadError} for an unreadable declaration or an unknown `--member` name. */
|
|
109
|
+
export declare function planMembers(verb: WorkspaceVerb, root: string, options?: PlanOptions): MemberPlan;
|
|
110
|
+
/** What each member's run prints, for the verb and the workspace command's own flags. */
|
|
111
|
+
export declare function memberFormat(verb: WorkspaceVerb, args: Pick<ParsedArgs, "format" | "json">): string;
|
|
112
|
+
/** The level-0 command line one member runs. */
|
|
113
|
+
export declare function memberArgv(verb: WorkspaceVerb, unit: RunUnit, args: ParsedArgs): string[];
|
|
114
|
+
/** `workspace build -o <dir>` writes `<dir>/<member>.<ext>`, and `<dir>/<group>/<match dir>.<ext>` for a group match. */
|
|
115
|
+
export declare function buildOutputPath(outDir: string, unit: RunUnit, format: string): string;
|
|
116
|
+
export interface UnitResult extends MemberOutput {
|
|
117
|
+
unit: RunUnit;
|
|
118
|
+
toolchain: Toolchain;
|
|
119
|
+
/** The chant version the member-run header named; null when the per-member fallback ran. */
|
|
120
|
+
chant: string | null;
|
|
121
|
+
/** How the member ran: inside its toolchain's shared process, or in a level-0 process of its own. */
|
|
122
|
+
mode: "member-run" | "per-member";
|
|
123
|
+
}
|
|
124
|
+
/** Parse a member-run answer. `undefined` when there is no header: the chant has no member-run. */
|
|
125
|
+
export declare function parseMemberRunOutput(stdout: string): {
|
|
126
|
+
chant: string;
|
|
127
|
+
results: Map<string, Extract<MemberRunLine, {
|
|
128
|
+
type: "result";
|
|
129
|
+
}>>;
|
|
130
|
+
stray: string;
|
|
131
|
+
} | undefined;
|
|
132
|
+
/** Run every group of the plan, one process per toolchain at a time each, and return the results in plan order. */
|
|
133
|
+
export declare function executePlan(plan: MemberPlan, args: ParsedArgs): Promise<UnitResult[]>;
|
|
134
|
+
export declare function describePlan(plan: MemberPlan): string;
|
|
135
|
+
export declare function planJson(plan: MemberPlan): unknown;
|
|
136
|
+
export declare function emitDocument(doc: unknown, output: string | undefined): void;
|
|
137
|
+
export declare function memberStatus(name: string, dir: string, kind: string, status: ComposedMember["status"], reason: MemberReason | null, chant: string | null): ComposedMember;
|
|
138
|
+
export declare function runWorkspaceMembers(ctx: CommandContext, verb: WorkspaceVerb): Promise<number>;
|
|
139
|
+
//# sourceMappingURL=member-commands.d.ts.map
|