@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,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* behold's two closed member kinds, read through chant's workspace (#2545).
|
|
3
|
+
*
|
|
4
|
+
* `terraform` ships from the terraform lexicon's `./workspace-kinds` subpath,
|
|
5
|
+
* and `choudoufu` from the kinds-only package
|
|
6
|
+
* `@intentius/workspace-kind-choudoufu`. A workspace that pins both lists
|
|
7
|
+
* members of either kind through `chant workspace ls --json`, with the kinds
|
|
8
|
+
* behold gave the same directories, and reading the kinds imports neither
|
|
9
|
+
* package.
|
|
10
|
+
*
|
|
11
|
+
* The installed packages are the repo's own: their package.json and kinds
|
|
12
|
+
* file are copied as they ship, and every code entry their `exports` name is
|
|
13
|
+
* replaced by a module that leaves a marker file when it is imported.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { tmpdir } from "node:os";
|
|
18
|
+
import { dirname, join } from "node:path";
|
|
19
|
+
import { afterAll, afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
|
20
|
+
import { parseArgs } from "../cli/main";
|
|
21
|
+
import { runDeclarationChecks } from "./checks";
|
|
22
|
+
import { loadKindRegistry, resolveKind } from "./kinds";
|
|
23
|
+
import { runWorkspaceLs, type LsDocument } from "./ls";
|
|
24
|
+
import { workingTree } from "./tree";
|
|
25
|
+
|
|
26
|
+
const REPO = join(import.meta.dirname, "..", "..", "..", "..");
|
|
27
|
+
const TERRAFORM = join(REPO, "lexicons", "terraform");
|
|
28
|
+
const CHOUDOUFU = join(REPO, "packages", "workspace-kind-choudoufu");
|
|
29
|
+
const FIXTURES = join(TERRAFORM, "src", "__fixtures__");
|
|
30
|
+
|
|
31
|
+
const scratch: string[] = [];
|
|
32
|
+
afterAll(() => {
|
|
33
|
+
for (const d of scratch) rmSync(d, { recursive: true, force: true });
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const version = (dir: string): string => (JSON.parse(readFileSync(join(dir, "package.json"), "utf-8")) as { version: string }).version;
|
|
37
|
+
|
|
38
|
+
const MARKER = `import { writeFileSync } from "node:fs";\nwriteFileSync(new URL("./IMPORTED", import.meta.url), "");\n(globalThis as { __chantKindsImported?: boolean }).__chantKindsImported = true;\n`;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Install the package in `from` under `root/node_modules`: its package.json
|
|
42
|
+
* and kinds file as they are, and a marker module at every code target its
|
|
43
|
+
* exports name, the `./*` pattern's target for `workspace-kinds` included.
|
|
44
|
+
*/
|
|
45
|
+
function install(root: string, from: string): string {
|
|
46
|
+
const manifest = JSON.parse(readFileSync(join(from, "package.json"), "utf-8")) as { name: string; exports: Record<string, unknown> };
|
|
47
|
+
const dir = join(root, "node_modules", ...manifest.name.split("/"));
|
|
48
|
+
mkdirSync(dir, { recursive: true });
|
|
49
|
+
cpSync(join(from, "package.json"), join(dir, "package.json"));
|
|
50
|
+
cpSync(join(from, "workspace-kinds.json"), join(dir, "workspace-kinds.json"));
|
|
51
|
+
const targets = new Set<string>(["./index.js"]);
|
|
52
|
+
const collect = (entry: unknown): void => {
|
|
53
|
+
if (typeof entry === "string") targets.add(entry.replace("*", "workspace-kinds"));
|
|
54
|
+
else if (entry && typeof entry === "object") for (const v of Object.values(entry)) collect(v);
|
|
55
|
+
};
|
|
56
|
+
for (const [key, entry] of Object.entries(manifest.exports)) if (key !== "./workspace-kinds") collect(entry);
|
|
57
|
+
for (const t of targets) {
|
|
58
|
+
if (!/\.(ts|js|mjs)$/.test(t)) continue;
|
|
59
|
+
mkdirSync(dirname(join(dir, t)), { recursive: true });
|
|
60
|
+
writeFileSync(join(dir, t), MARKER);
|
|
61
|
+
}
|
|
62
|
+
return dir;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function workspace(): { root: string; installed: string[] } {
|
|
66
|
+
const root = realpathSync(mkdtempSync(join(tmpdir(), "chant-behold-kinds-")));
|
|
67
|
+
scratch.push(root);
|
|
68
|
+
const installed = [install(root, TERRAFORM), install(root, CHOUDOUFU)];
|
|
69
|
+
// Estates in the shapes behold serves: a stock root, a choudoufu root with
|
|
70
|
+
// the sidecar, one with the live block, and a chant project beside .tf files.
|
|
71
|
+
cpSync(join(FIXTURES, "no-backend"), join(root, "estates", "stock"), { recursive: true });
|
|
72
|
+
cpSync(join(FIXTURES, "live-estate"), join(root, "estates", "sidecar"), { recursive: true });
|
|
73
|
+
cpSync(join(FIXTURES, "live"), join(root, "estates", "inline"), { recursive: true });
|
|
74
|
+
mkdirSync(join(root, "app"), { recursive: true });
|
|
75
|
+
writeFileSync(join(root, "app", "chant.config.ts"), "export default {};\n");
|
|
76
|
+
writeFileSync(join(root, "app", "main.tf"), 'resource "null_resource" "x" {}\n');
|
|
77
|
+
writeFileSync(
|
|
78
|
+
join(root, "chant.workspace.json"),
|
|
79
|
+
JSON.stringify(
|
|
80
|
+
{
|
|
81
|
+
name: "estate",
|
|
82
|
+
schema: 1,
|
|
83
|
+
pins: [
|
|
84
|
+
{ package: "@intentius/chant-lexicon-terraform", version: version(TERRAFORM) },
|
|
85
|
+
{ package: "@intentius/workspace-kind-choudoufu", version: version(CHOUDOUFU) },
|
|
86
|
+
],
|
|
87
|
+
members: [
|
|
88
|
+
{ name: "stock", dir: "estates/stock", kind: "terraform" },
|
|
89
|
+
{ name: "sidecar", dir: "estates/sidecar", kind: "choudoufu" },
|
|
90
|
+
{ name: "inline", dir: "estates/inline", kind: "choudoufu" },
|
|
91
|
+
{ name: "app", dir: "app", kind: "chant" },
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
null,
|
|
95
|
+
2,
|
|
96
|
+
),
|
|
97
|
+
);
|
|
98
|
+
return { root, installed };
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
describe("behold's member kinds from their packages (#2545)", () => {
|
|
102
|
+
let out: string[];
|
|
103
|
+
beforeEach(() => {
|
|
104
|
+
out = [];
|
|
105
|
+
vi.spyOn(console, "log").mockImplementation((...a: unknown[]) => void out.push(a.join(" ")));
|
|
106
|
+
});
|
|
107
|
+
afterEach(() => vi.restoreAllMocks());
|
|
108
|
+
|
|
109
|
+
test("chant workspace ls --json lists terraform and choudoufu members, readable, and imports neither package", async () => {
|
|
110
|
+
const { root, installed } = workspace();
|
|
111
|
+
const code = await runWorkspaceLs({ args: parseArgs(["workspace", "ls", root, "--json"]), plugins: [] } as never);
|
|
112
|
+
expect(code).toBe(0);
|
|
113
|
+
const doc = JSON.parse(out.join("\n")) as Extract<LsDocument, { members: unknown }>;
|
|
114
|
+
expect(doc.members.map((m) => [m.name, m.kind, m.readable])).toEqual([
|
|
115
|
+
["stock", "terraform", true],
|
|
116
|
+
["sidecar", "choudoufu", true],
|
|
117
|
+
["inline", "choudoufu", true],
|
|
118
|
+
["app", "chant", true],
|
|
119
|
+
]);
|
|
120
|
+
for (const dir of installed) expect(existsSync(join(dir, "IMPORTED")), dir).toBe(false);
|
|
121
|
+
expect(existsSync(join(installed[0], "src", "IMPORTED"))).toBe(false);
|
|
122
|
+
expect((globalThis as { __chantKindsImported?: boolean }).__chantKindsImported).toBeUndefined();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
test("each directory's kind is the one behold gave it: chant over choudoufu over terraform", () => {
|
|
126
|
+
const { root } = workspace();
|
|
127
|
+
const pins = [
|
|
128
|
+
{ package: "@intentius/chant-lexicon-terraform", version: version(TERRAFORM), path: null },
|
|
129
|
+
{ package: "@intentius/workspace-kind-choudoufu", version: version(CHOUDOUFU), path: null },
|
|
130
|
+
];
|
|
131
|
+
const { registry, problems } = loadKindRegistry(pins, root);
|
|
132
|
+
expect(problems).toEqual([]);
|
|
133
|
+
expect(registry.get("terraform")).toMatchObject({ source: "@intentius/chant-lexicon-terraform", precedence: 400 });
|
|
134
|
+
expect(registry.get("choudoufu")).toMatchObject({ source: "@intentius/workspace-kind-choudoufu", precedence: 450 });
|
|
135
|
+
const tree = workingTree(root);
|
|
136
|
+
const winner = (dir: string) => resolveKind(registry, tree, dir).winner?.name;
|
|
137
|
+
expect(winner("estates/stock")).toBe("terraform");
|
|
138
|
+
expect(winner("estates/sidecar")).toBe("choudoufu");
|
|
139
|
+
expect(winner("estates/inline")).toBe("choudoufu");
|
|
140
|
+
expect(winner("app")).toBe("chant");
|
|
141
|
+
expect(resolveKind(registry, tree, "estates/inline").claims.map((k) => k.name)).toEqual(["choudoufu", "terraform"]);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
test("chant workspace check passes with no error: no member is outranked, and no probes tie", async () => {
|
|
145
|
+
const { root } = workspace();
|
|
146
|
+
const report = await runDeclarationChecks(root);
|
|
147
|
+
expect(report.diagnostics.filter((d) => d.severity === "error")).toEqual([]);
|
|
148
|
+
expect(report.ok).toBe(true);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
test("without the pins, the same members are an unknown kind, and the message names the known ones", async () => {
|
|
152
|
+
const { root } = workspace();
|
|
153
|
+
const file = join(root, "chant.workspace.json");
|
|
154
|
+
const decl = JSON.parse(readFileSync(file, "utf-8")) as { pins?: unknown };
|
|
155
|
+
delete decl.pins;
|
|
156
|
+
writeFileSync(file, JSON.stringify(decl));
|
|
157
|
+
await runWorkspaceLs({ args: parseArgs(["workspace", "ls", root, "--json"]), plugins: [] } as never);
|
|
158
|
+
const doc = JSON.parse(out.join("\n")) as Extract<LsDocument, { members: unknown }>;
|
|
159
|
+
expect(doc.members.map((m) => m.reason?.code ?? null)).toEqual(["unknown-kind", "unknown-kind", "unknown-kind", null]);
|
|
160
|
+
expect(doc.members[0].reason?.message).toMatch(/known kinds: chant, other, workspace$/);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The read contract for `chant workspace check --json` and `--format json`
|
|
3
|
+
* (#2536, #2524 D15): the output schema is a valid draft 2020-12 document, its
|
|
4
|
+
* closed code lists match the code, and real output validates against it, for
|
|
5
|
+
* the chant repo (#2557), for built workspaces, and for `--at <rev>`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { afterAll, describe, expect, test } from "vitest";
|
|
11
|
+
import { cleanScratch, commitAll, contract, declaration, git, REPO, repo, scratchDir, validSchema } from "./__fixtures__/contract-repo";
|
|
12
|
+
import schema from "./check.schema.json";
|
|
13
|
+
import { WORKSPACE_ERROR_CODES } from "./declaration";
|
|
14
|
+
import { CHECK_CODES, CHECK_CONTRACT_VERSION, CHECK_ERROR_CODES, CHECK_OUTPUT_SCHEMA_ID, runChecks, type CheckDocument } from "./lineage-check";
|
|
15
|
+
|
|
16
|
+
afterAll(cleanScratch);
|
|
17
|
+
|
|
18
|
+
const { expectValid } = contract(schema);
|
|
19
|
+
|
|
20
|
+
function result(doc: CheckDocument): Extract<CheckDocument, { findings: unknown }> {
|
|
21
|
+
if ("error" in doc) throw new Error(`${doc.error.code}: ${doc.error.message}`);
|
|
22
|
+
return doc;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const ruleIds = (doc: Extract<CheckDocument, { findings: unknown }>) => doc.declaration?.diagnostics.map((d) => d.ruleId) ?? [];
|
|
26
|
+
|
|
27
|
+
describe("check output schema", () => {
|
|
28
|
+
test("is a valid draft 2020-12 document with the published $id", () => {
|
|
29
|
+
expect(schema.$schema).toBe("https://json-schema.org/draft/2020-12/schema");
|
|
30
|
+
expect(validSchema(schema)).toBe(true);
|
|
31
|
+
expect(schema.$id).toBe(CHECK_OUTPUT_SCHEMA_ID);
|
|
32
|
+
expect(CHECK_CONTRACT_VERSION).toBe(1);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("lists exactly the codes the code can return", () => {
|
|
36
|
+
expect(schema.$defs.lockFinding.properties.code.enum).toEqual([...CHECK_CODES]);
|
|
37
|
+
expect(schema.$defs.failure.properties.error.properties.code.enum).toEqual([...CHECK_ERROR_CODES]);
|
|
38
|
+
expect(schema.$defs.diagnostic.properties.code.enum).toEqual([...WORKSPACE_ERROR_CODES]);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
describe("chant workspace check on the chant repo (#2557)", () => {
|
|
43
|
+
test("validates in the working tree and at HEAD", async () => {
|
|
44
|
+
const now = result(await runChecks(REPO));
|
|
45
|
+
expectValid(now);
|
|
46
|
+
expect(now.workspace).toEqual({ name: "chant", root: "." });
|
|
47
|
+
expect(now.declaration?.file).toBe("chant.workspace.json");
|
|
48
|
+
|
|
49
|
+
const head = result(await runChecks(join(REPO, "packages", "core"), "HEAD"));
|
|
50
|
+
expectValid(head);
|
|
51
|
+
expect(head.at).toBe(git(REPO, "rev-parse", "HEAD"));
|
|
52
|
+
expect(head.workspace).toEqual({ name: "chant", root: "." });
|
|
53
|
+
expect(head.declaration?.file).toBe("../../chant.workspace.json");
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
describe("chant workspace check on built workspaces", () => {
|
|
58
|
+
test("a lock with no declaration: the lock findings carry their reason code", async () => {
|
|
59
|
+
const root = repo({ ".chant/workspace.lock.json": "{ not json" });
|
|
60
|
+
const doc = result(await runChecks(root));
|
|
61
|
+
expectValid(doc);
|
|
62
|
+
expect(doc.workspace).toBeNull();
|
|
63
|
+
expect(doc.declaration).toBeUndefined();
|
|
64
|
+
expect(doc.ok).toBe(false);
|
|
65
|
+
expect(doc.findings.map((f) => f.code)).toEqual(["lock-invalid"]);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("declaration findings carry WSP ids, and an unreadable declaration is WSP001 with its reason code", async () => {
|
|
69
|
+
const root = repo({
|
|
70
|
+
"chant.workspace.json": declaration([
|
|
71
|
+
{ name: "gone", dir: "gone", kind: "chant" },
|
|
72
|
+
{ name: "infra", dir: "infra", kind: "terraform" },
|
|
73
|
+
]),
|
|
74
|
+
"infra/main.tf": "",
|
|
75
|
+
});
|
|
76
|
+
const doc = result(await runChecks(root));
|
|
77
|
+
expectValid(doc);
|
|
78
|
+
expect(doc.ok).toBe(false);
|
|
79
|
+
expect(doc.workspace).toEqual({ name: "acme", root: "." });
|
|
80
|
+
expect(ruleIds(doc)).toEqual(["WSP004", "WSP003"]);
|
|
81
|
+
|
|
82
|
+
const tooOld = repo({ "chant.workspace.json": declaration([], { minReader: "999.0.0" }) });
|
|
83
|
+
const pinned = repo({ "chant.workspace.json": declaration([], { pins: [{ package: "@intentius/chant", version: "0.0.1" }] }) });
|
|
84
|
+
for (const [dir, code] of [
|
|
85
|
+
[tooOld, "reader-too-old"],
|
|
86
|
+
[pinned, "root-chant-required"],
|
|
87
|
+
] as const) {
|
|
88
|
+
const d = result(await runChecks(dir));
|
|
89
|
+
expectValid(d);
|
|
90
|
+
expect(d.workspace).toEqual({ name: null, root: "." });
|
|
91
|
+
expect(d.declaration?.diagnostics.map((x) => [x.ruleId, x.code])).toEqual([["WSP001", code]]);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test("--at <rev> checks the declaration and lock as they were at the revision", async () => {
|
|
96
|
+
const root = repo({
|
|
97
|
+
"chant.workspace.json": declaration([{ name: "web", dir: "web", kind: "chant" }]),
|
|
98
|
+
"web/chant.config.ts": "",
|
|
99
|
+
});
|
|
100
|
+
const first = commitAll(root, "one");
|
|
101
|
+
// Break the working tree after the commit: the declaration, a member and the lock.
|
|
102
|
+
writeFileSync(join(root, "chant.workspace.json"), "{ broken");
|
|
103
|
+
mkdirSync(join(root, "web", ".chant"), { recursive: true });
|
|
104
|
+
writeFileSync(join(root, "web", ".chant", "workspace.lock.json"), "{ broken");
|
|
105
|
+
|
|
106
|
+
const at = result(await runChecks(join(root, "web"), first));
|
|
107
|
+
expectValid(at);
|
|
108
|
+
expect(at.at).toBe(first);
|
|
109
|
+
expect(at.ok).toBe(true);
|
|
110
|
+
expect(at.lock).toBeNull();
|
|
111
|
+
expect(at.declaration).toMatchObject({ file: "../chant.workspace.json", diagnostics: [], ok: true });
|
|
112
|
+
|
|
113
|
+
const now = result(await runChecks(join(root, "web")));
|
|
114
|
+
expectValid(now);
|
|
115
|
+
expect(now.ok).toBe(false);
|
|
116
|
+
expect(now.findings.map((f) => f.code)).toEqual(["lock-invalid"]);
|
|
117
|
+
expect(now.declaration?.diagnostics.map((d) => [d.ruleId, d.code])).toEqual([["WSP001", "declaration-unparseable"]]);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
test("--at outside git or at an unknown revision is a failure document", async () => {
|
|
121
|
+
const outside = scratchDir("chant-check-nogit-");
|
|
122
|
+
const empty = repo({});
|
|
123
|
+
const docs = [await runChecks(outside, "HEAD"), await runChecks(empty, "no-such-rev")];
|
|
124
|
+
for (const d of docs) expectValid(d);
|
|
125
|
+
expect(docs.map((d) => ("error" in d ? d.error.code : "ok"))).toEqual(["not-a-git-repository", "revision-unknown"]);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://intentius.io/chant/schemas/workspace/check/v1/check.schema.json",
|
|
4
|
+
"title": "chant workspace check output",
|
|
5
|
+
"description": "What `chant workspace check --format json` prints, version 1 of the read contract for checking a workspace (#2524 D9, D15, D16, #2535, #2536). The lineage lock findings carry reason codes; the declaration findings carry WSP ids from the check catalog, and WSP001, a declaration that can't be read, also carries the declaration's reason code. Readers ignore fields they do not know; a field is only ever added within a version. The reason and error codes are closed lists: a new code is a new contract version. Contract version 1 is written by chant 0.81.0 and newer; a reader that needs it refuses output whose `contract` it doesn't know. Every code is in the one closed list of `reason-codes.ts`.",
|
|
6
|
+
"oneOf": [
|
|
7
|
+
{
|
|
8
|
+
"$ref": "#/$defs/result"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"$ref": "#/$defs/failure"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"$defs": {
|
|
15
|
+
"result": {
|
|
16
|
+
"description": "The checks ran. Exit code 0 when ok is true, 1 otherwise.",
|
|
17
|
+
"type": "object",
|
|
18
|
+
"required": [
|
|
19
|
+
"$schema",
|
|
20
|
+
"contract",
|
|
21
|
+
"chant",
|
|
22
|
+
"at",
|
|
23
|
+
"workspace",
|
|
24
|
+
"ok",
|
|
25
|
+
"lock",
|
|
26
|
+
"findings"
|
|
27
|
+
],
|
|
28
|
+
"properties": {
|
|
29
|
+
"$schema": {
|
|
30
|
+
"const": "https://intentius.io/chant/schemas/workspace/check/v1/check.schema.json"
|
|
31
|
+
},
|
|
32
|
+
"contract": {
|
|
33
|
+
"const": 1
|
|
34
|
+
},
|
|
35
|
+
"chant": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "The version of the chant that ran the checks."
|
|
38
|
+
},
|
|
39
|
+
"at": {
|
|
40
|
+
"description": "The full commit id the checks read (--at), or null for the working tree.",
|
|
41
|
+
"type": [
|
|
42
|
+
"string",
|
|
43
|
+
"null"
|
|
44
|
+
],
|
|
45
|
+
"pattern": "^[0-9a-f]{40,64}$"
|
|
46
|
+
},
|
|
47
|
+
"error": false,
|
|
48
|
+
"workspace": {
|
|
49
|
+
"description": "The workspace whose declaration was checked, or null when no declaration sits between the directory and the git root.",
|
|
50
|
+
"oneOf": [
|
|
51
|
+
{
|
|
52
|
+
"type": "null"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"type": "object",
|
|
56
|
+
"required": [
|
|
57
|
+
"name",
|
|
58
|
+
"root"
|
|
59
|
+
],
|
|
60
|
+
"properties": {
|
|
61
|
+
"name": {
|
|
62
|
+
"type": [
|
|
63
|
+
"string",
|
|
64
|
+
"null"
|
|
65
|
+
],
|
|
66
|
+
"description": "The declared name, or null when the declaration can't be read."
|
|
67
|
+
},
|
|
68
|
+
"root": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "The workspace root relative to the git root, with / separators, \".\" for the git root itself. An absolute path outside a git repository."
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
"ok": {
|
|
77
|
+
"type": "boolean",
|
|
78
|
+
"description": "No lock finding, and no declaration finding of error severity."
|
|
79
|
+
},
|
|
80
|
+
"lock": {
|
|
81
|
+
"description": "The lineage lock's path, or null when the directory has none.",
|
|
82
|
+
"oneOf": [
|
|
83
|
+
{
|
|
84
|
+
"type": "null"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"const": ".chant/workspace.lock.json"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
"findings": {
|
|
92
|
+
"description": "The lineage lock findings.",
|
|
93
|
+
"type": "array",
|
|
94
|
+
"items": {
|
|
95
|
+
"$ref": "#/$defs/lockFinding"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"declaration": {
|
|
99
|
+
"$ref": "#/$defs/declaration"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"lockFinding": {
|
|
104
|
+
"type": "object",
|
|
105
|
+
"required": [
|
|
106
|
+
"code",
|
|
107
|
+
"scope",
|
|
108
|
+
"message"
|
|
109
|
+
],
|
|
110
|
+
"properties": {
|
|
111
|
+
"code": {
|
|
112
|
+
"enum": [
|
|
113
|
+
"lock-invalid",
|
|
114
|
+
"manual-step-open"
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
"scope": {
|
|
118
|
+
"type": [
|
|
119
|
+
"string",
|
|
120
|
+
"null"
|
|
121
|
+
],
|
|
122
|
+
"description": "The lock scope, or null for the lock as a whole."
|
|
123
|
+
},
|
|
124
|
+
"path": {
|
|
125
|
+
"type": "string"
|
|
126
|
+
},
|
|
127
|
+
"message": {
|
|
128
|
+
"type": "string"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"declaration": {
|
|
133
|
+
"description": "Present when a declaration sits between the directory and the git root.",
|
|
134
|
+
"type": "object",
|
|
135
|
+
"required": [
|
|
136
|
+
"file",
|
|
137
|
+
"diagnostics",
|
|
138
|
+
"suppressed",
|
|
139
|
+
"ok"
|
|
140
|
+
],
|
|
141
|
+
"properties": {
|
|
142
|
+
"file": {
|
|
143
|
+
"type": "string",
|
|
144
|
+
"description": "The declaration, relative to the directory the command ran in."
|
|
145
|
+
},
|
|
146
|
+
"ok": {
|
|
147
|
+
"type": "boolean"
|
|
148
|
+
},
|
|
149
|
+
"diagnostics": {
|
|
150
|
+
"description": "Active findings, in the shape `chant lint --format json` prints, sorted by position.",
|
|
151
|
+
"type": "array",
|
|
152
|
+
"items": {
|
|
153
|
+
"$ref": "#/$defs/diagnostic"
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"suppressed": {
|
|
157
|
+
"description": "Findings an entry's suppress turned off, with its reason. They never fail the command.",
|
|
158
|
+
"type": "array",
|
|
159
|
+
"items": {
|
|
160
|
+
"$ref": "#/$defs/suppressed"
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"diagnostic": {
|
|
166
|
+
"type": "object",
|
|
167
|
+
"required": [
|
|
168
|
+
"file",
|
|
169
|
+
"line",
|
|
170
|
+
"column",
|
|
171
|
+
"ruleId",
|
|
172
|
+
"severity",
|
|
173
|
+
"message"
|
|
174
|
+
],
|
|
175
|
+
"properties": {
|
|
176
|
+
"file": {
|
|
177
|
+
"type": "string",
|
|
178
|
+
"description": "Relative to the directory the command ran in."
|
|
179
|
+
},
|
|
180
|
+
"line": {
|
|
181
|
+
"type": "integer",
|
|
182
|
+
"minimum": 1
|
|
183
|
+
},
|
|
184
|
+
"column": {
|
|
185
|
+
"type": "integer",
|
|
186
|
+
"minimum": 1
|
|
187
|
+
},
|
|
188
|
+
"endLine": {
|
|
189
|
+
"type": "integer",
|
|
190
|
+
"minimum": 1
|
|
191
|
+
},
|
|
192
|
+
"endColumn": {
|
|
193
|
+
"type": "integer",
|
|
194
|
+
"minimum": 1
|
|
195
|
+
},
|
|
196
|
+
"ruleId": {
|
|
197
|
+
"type": "string",
|
|
198
|
+
"pattern": "^WSP[0-9]{3}$",
|
|
199
|
+
"description": "The declaration check's id, from the catalog on the workspace check page."
|
|
200
|
+
},
|
|
201
|
+
"severity": {
|
|
202
|
+
"enum": [
|
|
203
|
+
"error",
|
|
204
|
+
"warning",
|
|
205
|
+
"info"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
"message": {
|
|
209
|
+
"type": "string"
|
|
210
|
+
},
|
|
211
|
+
"entity": {
|
|
212
|
+
"type": "string",
|
|
213
|
+
"description": "The member or group the finding is about."
|
|
214
|
+
},
|
|
215
|
+
"code": {
|
|
216
|
+
"enum": [
|
|
217
|
+
"declaration-missing",
|
|
218
|
+
"declaration-ambiguous",
|
|
219
|
+
"declaration-unparseable",
|
|
220
|
+
"declaration-invalid",
|
|
221
|
+
"placement-invalid",
|
|
222
|
+
"reader-too-old",
|
|
223
|
+
"root-chant-required",
|
|
224
|
+
"not-a-git-repository",
|
|
225
|
+
"revision-unknown"
|
|
226
|
+
],
|
|
227
|
+
"description": "For WSP001: why the declaration can't be read."
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
"suppressed": {
|
|
232
|
+
"type": "object",
|
|
233
|
+
"required": [
|
|
234
|
+
"file",
|
|
235
|
+
"line",
|
|
236
|
+
"column",
|
|
237
|
+
"ruleId",
|
|
238
|
+
"severity",
|
|
239
|
+
"message",
|
|
240
|
+
"reason"
|
|
241
|
+
],
|
|
242
|
+
"properties": {
|
|
243
|
+
"file": {
|
|
244
|
+
"type": "string",
|
|
245
|
+
"description": "Relative to the directory the command ran in."
|
|
246
|
+
},
|
|
247
|
+
"line": {
|
|
248
|
+
"type": "integer",
|
|
249
|
+
"minimum": 1
|
|
250
|
+
},
|
|
251
|
+
"column": {
|
|
252
|
+
"type": "integer",
|
|
253
|
+
"minimum": 1
|
|
254
|
+
},
|
|
255
|
+
"endLine": {
|
|
256
|
+
"type": "integer",
|
|
257
|
+
"minimum": 1
|
|
258
|
+
},
|
|
259
|
+
"endColumn": {
|
|
260
|
+
"type": "integer",
|
|
261
|
+
"minimum": 1
|
|
262
|
+
},
|
|
263
|
+
"ruleId": {
|
|
264
|
+
"type": "string",
|
|
265
|
+
"pattern": "^WSP[0-9]{3}$",
|
|
266
|
+
"description": "The declaration check's id, from the catalog on the workspace check page."
|
|
267
|
+
},
|
|
268
|
+
"severity": {
|
|
269
|
+
"enum": [
|
|
270
|
+
"error",
|
|
271
|
+
"warning",
|
|
272
|
+
"info"
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
"message": {
|
|
276
|
+
"type": "string"
|
|
277
|
+
},
|
|
278
|
+
"entity": {
|
|
279
|
+
"type": "string",
|
|
280
|
+
"description": "The member or group the finding is about."
|
|
281
|
+
},
|
|
282
|
+
"code": {
|
|
283
|
+
"enum": [
|
|
284
|
+
"declaration-missing",
|
|
285
|
+
"declaration-ambiguous",
|
|
286
|
+
"declaration-unparseable",
|
|
287
|
+
"declaration-invalid",
|
|
288
|
+
"placement-invalid",
|
|
289
|
+
"reader-too-old",
|
|
290
|
+
"root-chant-required",
|
|
291
|
+
"not-a-git-repository",
|
|
292
|
+
"revision-unknown"
|
|
293
|
+
],
|
|
294
|
+
"description": "For WSP001: why the declaration can't be read."
|
|
295
|
+
},
|
|
296
|
+
"reason": {
|
|
297
|
+
"type": "string"
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
"failure": {
|
|
302
|
+
"description": "The checks could not run: --at outside a git repository or at an unknown revision. Exit code 1.",
|
|
303
|
+
"type": "object",
|
|
304
|
+
"required": [
|
|
305
|
+
"$schema",
|
|
306
|
+
"contract",
|
|
307
|
+
"chant",
|
|
308
|
+
"error"
|
|
309
|
+
],
|
|
310
|
+
"properties": {
|
|
311
|
+
"$schema": {
|
|
312
|
+
"const": "https://intentius.io/chant/schemas/workspace/check/v1/check.schema.json"
|
|
313
|
+
},
|
|
314
|
+
"contract": {
|
|
315
|
+
"const": 1
|
|
316
|
+
},
|
|
317
|
+
"chant": {
|
|
318
|
+
"type": "string"
|
|
319
|
+
},
|
|
320
|
+
"error": {
|
|
321
|
+
"type": "object",
|
|
322
|
+
"required": [
|
|
323
|
+
"code",
|
|
324
|
+
"message",
|
|
325
|
+
"location"
|
|
326
|
+
],
|
|
327
|
+
"properties": {
|
|
328
|
+
"code": {
|
|
329
|
+
"enum": [
|
|
330
|
+
"not-a-git-repository",
|
|
331
|
+
"revision-unknown"
|
|
332
|
+
]
|
|
333
|
+
},
|
|
334
|
+
"message": {
|
|
335
|
+
"type": "string"
|
|
336
|
+
},
|
|
337
|
+
"location": {
|
|
338
|
+
"type": "null"
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
"findings": false,
|
|
343
|
+
"declaration": false
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|