@intentius/chant 0.124.27 → 0.124.29
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/README.md +1 -1
- package/dist/__golden__/wave-loop/fan-out-gated.json +8 -0
- package/dist/__golden__/wave-loop/fan-out-no-members.json +4 -0
- package/dist/__golden__/wave-loop/fan-out-only.json +6 -0
- package/dist/__golden__/wave-loop/op-by-apply-hold.json +2 -0
- package/dist/__golden__/wave-loop/op-cost-member.json +3 -0
- package/dist/__golden__/wave-loop/op-held-on-before-apply.json +1 -0
- package/dist/__golden__/wave-loop/op-held-on.json +2 -0
- package/dist/__golden__/wave-loop/op-hooks-held.json +2 -0
- package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +2 -0
- package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +3 -0
- package/dist/__golden__/wave-loop/op-hooks-share.json +3 -0
- package/dist/__golden__/wave-loop/op-per-run.json +7 -0
- package/dist/__golden__/wave-loop/op-pr-review.json +7 -0
- package/dist/__golden__/wave-loop/op-sealed.json +3 -0
- package/dist/__golden__/wave-loop/op-spend.json +3 -0
- package/dist/__golden__/wave-loop/op-wave-commands.json +7 -0
- package/dist/__golden__/wave-loop/op-wide-waiting.json +4 -0
- package/dist/build-params.d.ts +34 -1
- package/dist/build-params.d.ts.map +1 -1
- package/dist/build-params.js +31 -1
- package/dist/change-set-graph.d.ts +63 -0
- package/dist/change-set-graph.d.ts.map +1 -0
- package/dist/change-set-graph.js +130 -0
- package/dist/change-set.d.ts +62 -3
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +36 -4
- package/dist/chant-version.d.ts +9 -0
- package/dist/chant-version.d.ts.map +1 -0
- package/dist/chant-version.js +16 -0
- package/dist/cli/build-params-cli.d.ts +7 -1
- package/dist/cli/build-params-cli.d.ts.map +1 -1
- package/dist/cli/build-params-cli.js +17 -8
- package/dist/cli/commands/build.d.ts +8 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +15 -11
- package/dist/cli/commands/check-lexicon-docs.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-docs.js +30 -2
- package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon.js +13 -2
- package/dist/cli/commands/init-lexicon/templates/docs.d.ts +4 -1
- package/dist/cli/commands/init-lexicon/templates/docs.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon/templates/docs.js +6 -6
- package/dist/cli/commands/init-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon.js +17 -8
- package/dist/cli/handlers/approve.d.ts.map +1 -1
- package/dist/cli/handlers/approve.js +64 -4
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +43 -4
- package/dist/cli/handlers/change-set.d.ts +10 -0
- package/dist/cli/handlers/change-set.d.ts.map +1 -1
- package/dist/cli/handlers/change-set.js +51 -1
- package/dist/cli/handlers/fan-out.d.ts +10 -1
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +54 -6
- package/dist/cli/handlers/lifecycle-gc.d.ts +19 -0
- package/dist/cli/handlers/lifecycle-gc.d.ts.map +1 -0
- package/dist/cli/handlers/lifecycle-gc.js +143 -0
- package/dist/cli/handlers/pr.d.ts +16 -2
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +269 -37
- package/dist/cli/handlers/promote.d.ts +7 -0
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +440 -28
- package/dist/cli/handlers/release.d.ts +91 -0
- package/dist/cli/handlers/release.d.ts.map +1 -0
- package/dist/cli/handlers/release.js +589 -0
- package/dist/cli/handlers/run.d.ts +38 -2
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/handlers/run.js +234 -16
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +143 -17
- package/dist/cli/mcp/workspace-tools.js +1 -1
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +73 -5
- package/dist/cli/registry.d.ts +43 -5
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/run-events.d.ts +30 -0
- package/dist/cli/run-events.d.ts.map +1 -0
- package/dist/cli/run-events.js +49 -0
- package/dist/cli/version.d.ts +3 -5
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +3 -13
- package/dist/codegen/docs-in-site.d.ts +71 -0
- package/dist/codegen/docs-in-site.d.ts.map +1 -0
- package/dist/codegen/docs-in-site.js +177 -0
- package/dist/codegen/docs-types.d.ts +14 -1
- package/dist/codegen/docs-types.d.ts.map +1 -1
- package/dist/codegen/docs.d.ts +18 -1
- package/dist/codegen/docs.d.ts.map +1 -1
- package/dist/codegen/docs.js +40 -7
- package/dist/codegen/rehype-base-url.mjs +15 -9
- package/dist/components/auto-release.d.ts +6 -1
- package/dist/components/auto-release.d.ts.map +1 -1
- package/dist/components/auto-release.js +3 -0
- package/dist/components/capability.d.ts +9 -0
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/cli-support.d.ts +6 -0
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/cli-support.js +10 -9
- package/dist/components/driver.d.ts +50 -9
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +116 -54
- package/dist/components/fan-out-inputs.d.ts +69 -0
- package/dist/components/fan-out-inputs.d.ts.map +1 -0
- package/dist/components/fan-out-inputs.js +169 -0
- package/dist/components/fan-out-record.d.ts +13 -0
- package/dist/components/fan-out-record.d.ts.map +1 -1
- package/dist/components/fan-out-record.js +16 -0
- package/dist/components/fan-out-run.d.ts +7 -0
- package/dist/components/fan-out-run.d.ts.map +1 -1
- package/dist/components/fan-out-run.js +85 -26
- package/dist/components/fan-out.d.ts +4 -0
- package/dist/components/fan-out.d.ts.map +1 -1
- package/dist/components/pr-pipeline.d.ts +25 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +22 -4
- package/dist/components/pr-run.d.ts +11 -0
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +20 -1
- package/dist/components/promote-order.d.ts +38 -0
- package/dist/components/promote-order.d.ts.map +1 -0
- package/dist/components/promote-order.js +62 -0
- package/dist/components/promote.d.ts +38 -2
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +77 -2
- package/dist/components/release-compile.d.ts +142 -0
- package/dist/components/release-compile.d.ts.map +1 -0
- package/dist/components/release-compile.js +382 -0
- package/dist/components/release-gate.d.ts +135 -0
- package/dist/components/release-gate.d.ts.map +1 -0
- package/dist/components/release-gate.js +288 -0
- package/dist/components/release-promote.d.ts +96 -0
- package/dist/components/release-promote.d.ts.map +1 -0
- package/dist/components/release-promote.js +204 -0
- package/dist/components/run-progress.d.ts +7 -0
- package/dist/components/run-progress.d.ts.map +1 -1
- package/dist/components/wave-plan.d.ts +8 -1
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +11 -3
- package/dist/config.d.ts +45 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/flag-params.d.ts +54 -0
- package/dist/flag-params.d.ts.map +1 -0
- package/dist/flag-params.js +130 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/lifecycle/__fixtures__/publish-fakes.d.ts +120 -0
- package/dist/lifecycle/__fixtures__/publish-fakes.d.ts.map +1 -0
- package/dist/lifecycle/__fixtures__/publish-fakes.js +304 -0
- package/dist/lifecycle/change-set-store.d.ts +68 -0
- package/dist/lifecycle/change-set-store.d.ts.map +1 -0
- package/dist/lifecycle/change-set-store.js +97 -0
- package/dist/lifecycle/commit-sha.d.ts +13 -0
- package/dist/lifecycle/commit-sha.d.ts.map +1 -0
- package/dist/lifecycle/commit-sha.js +21 -0
- package/dist/lifecycle/delivery-metrics.d.ts +139 -0
- package/dist/lifecycle/delivery-metrics.d.ts.map +1 -0
- package/dist/lifecycle/delivery-metrics.js +145 -0
- package/dist/lifecycle/deploy-outcome.d.ts +81 -0
- package/dist/lifecycle/deploy-outcome.d.ts.map +1 -0
- package/dist/lifecycle/deploy-outcome.js +101 -0
- package/dist/lifecycle/gate-change-set.d.ts +78 -0
- package/dist/lifecycle/gate-change-set.d.ts.map +1 -0
- package/dist/lifecycle/gate-change-set.js +138 -0
- package/dist/lifecycle/gate-ledger.d.ts +51 -4
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +18 -0
- package/dist/lifecycle/git.d.ts +30 -1
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/git.js +31 -5
- package/dist/lifecycle/index.d.ts +4 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +4 -0
- package/dist/lifecycle/mixed-environment.d.ts +95 -0
- package/dist/lifecycle/mixed-environment.d.ts.map +1 -0
- package/dist/lifecycle/mixed-environment.js +154 -0
- package/dist/lifecycle/publish-attachments.d.ts +79 -0
- package/dist/lifecycle/publish-attachments.d.ts.map +1 -0
- package/dist/lifecycle/publish-attachments.js +179 -0
- package/dist/lifecycle/publish-credentials.d.ts +37 -0
- package/dist/lifecycle/publish-credentials.d.ts.map +1 -0
- package/dist/lifecycle/publish-credentials.js +69 -0
- package/dist/lifecycle/publish-declaration.d.ts +97 -0
- package/dist/lifecycle/publish-declaration.d.ts.map +1 -0
- package/dist/lifecycle/publish-declaration.js +83 -0
- package/dist/lifecycle/publish-forge.d.ts +53 -0
- package/dist/lifecycle/publish-forge.d.ts.map +1 -0
- package/dist/lifecycle/publish-forge.js +298 -0
- package/dist/lifecycle/publish-npm.d.ts +61 -0
- package/dist/lifecycle/publish-npm.d.ts.map +1 -0
- package/dist/lifecycle/publish-npm.js +242 -0
- package/dist/lifecycle/publish-oci.d.ts +64 -0
- package/dist/lifecycle/publish-oci.d.ts.map +1 -0
- package/dist/lifecycle/publish-oci.js +383 -0
- package/dist/lifecycle/publish-record.d.ts +66 -0
- package/dist/lifecycle/publish-record.d.ts.map +1 -0
- package/dist/lifecycle/publish-record.js +84 -0
- package/dist/lifecycle/publish-targets.d.ts +45 -0
- package/dist/lifecycle/publish-targets.d.ts.map +1 -0
- package/dist/lifecycle/publish-targets.js +85 -0
- package/dist/lifecycle/release-cut.d.ts +154 -0
- package/dist/lifecycle/release-cut.d.ts.map +1 -0
- package/dist/lifecycle/release-cut.js +366 -0
- package/dist/lifecycle/release-join.d.ts +95 -0
- package/dist/lifecycle/release-join.d.ts.map +1 -0
- package/dist/lifecycle/release-join.js +139 -0
- package/dist/lifecycle/release-ledger.d.ts +54 -0
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.js +53 -20
- package/dist/lifecycle/release-publish.d.ts +312 -0
- package/dist/lifecycle/release-publish.d.ts.map +1 -0
- package/dist/lifecycle/release-publish.js +335 -0
- package/dist/lifecycle/release-revocation.d.ts +80 -0
- package/dist/lifecycle/release-revocation.d.ts.map +1 -0
- package/dist/lifecycle/release-revocation.js +123 -0
- package/dist/lifecycle/release-store.d.ts +200 -0
- package/dist/lifecycle/release-store.d.ts.map +1 -0
- package/dist/lifecycle/release-store.js +320 -0
- package/dist/lifecycle/release-verify.d.ts +61 -0
- package/dist/lifecycle/release-verify.d.ts.map +1 -0
- package/dist/lifecycle/release-verify.js +92 -0
- package/dist/lifecycle/release-workstation.d.ts +91 -0
- package/dist/lifecycle/release-workstation.d.ts.map +1 -0
- package/dist/lifecycle/release-workstation.js +180 -0
- package/dist/lifecycle/retention-policy.d.ts +45 -0
- package/dist/lifecycle/retention-policy.d.ts.map +1 -0
- package/dist/lifecycle/retention-policy.js +43 -0
- package/dist/lifecycle/retention.d.ts +185 -0
- package/dist/lifecycle/retention.d.ts.map +1 -0
- package/dist/lifecycle/retention.js +400 -0
- package/dist/lifecycle/run-ledger.d.ts +4 -0
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +2 -0
- package/dist/op/activities/change-coverage.d.ts.map +1 -1
- package/dist/op/activities/change-coverage.js +4 -2
- package/dist/op/activities/source-release.d.ts.map +1 -1
- package/dist/op/activities/source-release.js +7 -3
- package/dist/op/activities/source-rollback.d.ts.map +1 -1
- package/dist/op/activities/source-rollback.js +7 -3
- package/dist/op/gate-name.d.ts +11 -2
- package/dist/op/gate-name.d.ts.map +1 -1
- package/dist/op/gate-name.js +12 -3
- package/dist/op/gate-run-locator.d.ts +22 -0
- package/dist/op/gate-run-locator.d.ts.map +1 -1
- package/dist/op/gate-run-locator.js +31 -0
- package/dist/op/gate.d.ts +27 -3
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +57 -3
- package/dist/op/local-executor.d.ts +36 -1
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +158 -52
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +4 -0
- package/dist/op/run-live.d.ts +2 -0
- package/dist/op/run-live.d.ts.map +1 -1
- package/dist/op/run-live.js +1 -1
- package/dist/op/runtime.d.ts +46 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/runtimes/local.d.ts.map +1 -1
- package/dist/op/runtimes/local.js +8 -0
- package/dist/plan-summary.d.ts.map +1 -1
- package/dist/plan-summary.js +8 -2
- package/dist/point-decision.d.ts +2 -0
- package/dist/point-decision.d.ts.map +1 -1
- package/dist/point-decision.js +9 -2
- package/dist/pr-loop.d.ts +7 -0
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +23 -4
- package/dist/pr-report-url.d.ts +82 -0
- package/dist/pr-report-url.d.ts.map +1 -0
- package/dist/pr-report-url.js +174 -0
- package/dist/provenance.d.ts +2 -2
- package/dist/provenance.d.ts.map +1 -1
- package/dist/run-event-store.d.ts +104 -0
- package/dist/run-event-store.d.ts.map +1 -0
- package/dist/run-event-store.js +251 -0
- package/dist/run-event-stream.d.ts +133 -0
- package/dist/run-event-stream.d.ts.map +1 -0
- package/dist/run-event-stream.js +242 -0
- package/dist/run-event.d.ts +285 -0
- package/dist/run-event.d.ts.map +1 -0
- package/dist/run-event.js +209 -0
- package/dist/wave-runtime.mjs +262 -226
- package/dist/workspace/__fixtures__/flag-workspace.d.ts +31 -0
- package/dist/workspace/__fixtures__/flag-workspace.d.ts.map +1 -0
- package/dist/workspace/__fixtures__/flag-workspace.js +114 -0
- package/dist/workspace/__fixtures__/run-event-check.d.ts +19 -0
- package/dist/workspace/__fixtures__/run-event-check.d.ts.map +1 -0
- package/dist/workspace/__fixtures__/run-event-check.js +59 -0
- package/dist/workspace/change-set-show.d.ts +56 -0
- package/dist/workspace/change-set-show.d.ts.map +1 -0
- package/dist/workspace/change-set-show.js +54 -0
- package/dist/workspace/change-set-show.schema.json +102 -0
- package/dist/workspace/change-set.schema.json +32 -1
- package/dist/workspace/changes-cli.d.ts.map +1 -1
- package/dist/workspace/changes-cli.js +10 -1
- package/dist/workspace/changes.d.ts +37 -0
- package/dist/workspace/changes.d.ts.map +1 -1
- package/dist/workspace/changes.js +49 -2
- package/dist/workspace/changes.schema.json +135 -0
- package/dist/workspace/check.schema.json +4 -2
- package/dist/workspace/checks/records.d.ts +9 -1
- package/dist/workspace/checks/records.d.ts.map +1 -1
- package/dist/workspace/checks/records.js +35 -1
- package/dist/workspace/checks.d.ts +1 -0
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +2 -1
- package/dist/workspace/ci-green-cli.d.ts +19 -4
- package/dist/workspace/ci-green-cli.d.ts.map +1 -1
- package/dist/workspace/ci-green-cli.js +75 -12
- package/dist/workspace/ci-green-forge.d.ts +20 -3
- package/dist/workspace/ci-green-forge.d.ts.map +1 -1
- package/dist/workspace/ci-green-forge.js +6 -4
- package/dist/workspace/ci-green-workflow.d.ts +11 -0
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +6 -0
- package/dist/workspace/ci-green.d.ts +281 -13
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +456 -38
- package/dist/workspace/ci-last-green.schema.json +32 -2
- package/dist/workspace/ci-list.schema.json +525 -0
- package/dist/workspace/commit-links.d.ts +85 -0
- package/dist/workspace/commit-links.d.ts.map +1 -0
- package/dist/workspace/commit-links.js +163 -0
- package/dist/workspace/declaration.d.ts +35 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +27 -1
- package/dist/workspace/declaration.schema.json +76 -0
- package/dist/workspace/declared-kinds.d.ts +16 -0
- package/dist/workspace/declared-kinds.d.ts.map +1 -1
- package/dist/workspace/declared-kinds.js +25 -0
- package/dist/workspace/delivery-metrics.d.ts +91 -0
- package/dist/workspace/delivery-metrics.d.ts.map +1 -0
- package/dist/workspace/delivery-metrics.js +217 -0
- package/dist/workspace/delivery-metrics.schema.json +519 -0
- package/dist/workspace/flags-read.d.ts +37 -0
- package/dist/workspace/flags-read.d.ts.map +1 -0
- package/dist/workspace/flags-read.js +103 -0
- package/dist/workspace/flags.d.ts +100 -0
- package/dist/workspace/flags.d.ts.map +1 -0
- package/dist/workspace/flags.js +98 -0
- package/dist/workspace/graph-cli.js +1 -1
- package/dist/workspace/identity-gate-rule.d.ts +37 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -1
- package/dist/workspace/identity-gate-rule.js +72 -7
- package/dist/workspace/identity.d.ts +12 -0
- package/dist/workspace/identity.d.ts.map +1 -1
- package/dist/workspace/identity.js +13 -1
- package/dist/workspace/intent-cli.d.ts +11 -2
- package/dist/workspace/intent-cli.d.ts.map +1 -1
- package/dist/workspace/intent-cli.js +54 -5
- package/dist/workspace/intent-trace.d.ts +219 -0
- package/dist/workspace/intent-trace.d.ts.map +1 -0
- package/dist/workspace/intent-trace.js +314 -0
- package/dist/workspace/intent.d.ts +36 -7
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +192 -22
- package/dist/workspace/intent.schema.json +702 -6
- package/dist/workspace/ls.d.ts +4 -0
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +2 -0
- package/dist/workspace/ls.schema.json +3 -1
- package/dist/workspace/member-pipeline.d.ts +6 -0
- package/dist/workspace/member-pipeline.d.ts.map +1 -1
- package/dist/workspace/member-pipeline.js +6 -0
- package/dist/workspace/overlap.d.ts +146 -0
- package/dist/workspace/overlap.d.ts.map +1 -0
- package/dist/workspace/overlap.js +276 -0
- package/dist/workspace/promotion-order.d.ts +41 -0
- package/dist/workspace/promotion-order.d.ts.map +1 -0
- package/dist/workspace/promotion-order.js +95 -0
- package/dist/workspace/reason-codes.d.ts +4 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +7 -1
- package/dist/workspace/records.d.ts +15 -2
- package/dist/workspace/records.d.ts.map +1 -1
- package/dist/workspace/records.js +32 -0
- package/dist/workspace/records.schema.json +21 -2
- package/dist/workspace/reference-kinds/flag/flag.kind.mjs +32 -0
- package/dist/workspace/reference-kinds/flag/flag.schema.json +53 -0
- package/dist/workspace/releases.d.ts +81 -0
- package/dist/workspace/releases.d.ts.map +1 -0
- package/dist/workspace/releases.js +103 -0
- package/dist/workspace/releases.schema.json +513 -0
- package/dist/workspace/run-event.schema.json +295 -0
- package/dist/workspace/status-gates.d.ts +34 -1
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status-gates.js +31 -2
- package/dist/workspace/status-stewards.d.ts +4 -0
- package/dist/workspace/status-stewards.d.ts.map +1 -1
- package/dist/workspace/status-stewards.js +2 -0
- package/dist/workspace/status.d.ts +117 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +218 -4
- package/dist/workspace/status.schema.json +268 -2
- package/dist/workspace/trust/ci-tag-statement.d.ts +102 -0
- package/dist/workspace/trust/ci-tag-statement.d.ts.map +1 -0
- package/dist/workspace/trust/ci-tag-statement.js +123 -0
- package/dist/workspace/trust/op-run-statement.d.ts +91 -0
- package/dist/workspace/trust/op-run-statement.d.ts.map +1 -0
- package/dist/workspace/trust/op-run-statement.js +143 -0
- package/dist/workspace/trust/rotation.d.ts +18 -2
- package/dist/workspace/trust/rotation.d.ts.map +1 -1
- package/dist/workspace/trust/rotation.js +65 -16
- package/dist/workspace/trust/seal.d.ts +11 -0
- package/dist/workspace/trust/seal.d.ts.map +1 -1
- package/dist/workspace/trust/seal.js +9 -0
- package/dist/workspace/trust/ssh-commit.d.ts.map +1 -1
- package/dist/workspace/trust/ssh-commit.js +10 -10
- package/dist/workspace/wip.d.ts.map +1 -1
- package/dist/workspace/wip.js +11 -3
- package/package.json +1 -1
- package/src/__golden__/wave-loop/fan-out-gated.json +8 -0
- package/src/__golden__/wave-loop/fan-out-no-members.json +4 -0
- package/src/__golden__/wave-loop/fan-out-only.json +6 -0
- package/src/__golden__/wave-loop/op-by-apply-hold.json +2 -0
- package/src/__golden__/wave-loop/op-cost-member.json +3 -0
- package/src/__golden__/wave-loop/op-held-on-before-apply.json +1 -0
- package/src/__golden__/wave-loop/op-held-on.json +2 -0
- package/src/__golden__/wave-loop/op-hooks-held.json +2 -0
- package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +2 -0
- package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +3 -0
- package/src/__golden__/wave-loop/op-hooks-share.json +3 -0
- package/src/__golden__/wave-loop/op-per-run.json +7 -0
- package/src/__golden__/wave-loop/op-pr-review.json +7 -0
- package/src/__golden__/wave-loop/op-sealed.json +3 -0
- package/src/__golden__/wave-loop/op-spend.json +3 -0
- package/src/__golden__/wave-loop/op-wave-commands.json +7 -0
- package/src/__golden__/wave-loop/op-wide-waiting.json +4 -0
- package/src/build-params.test.ts +46 -0
- package/src/build-params.ts +55 -1
- package/src/change-set-graph.test.ts +72 -0
- package/src/change-set-graph.ts +141 -0
- package/src/change-set.ts +87 -6
- package/src/chant-version.ts +16 -0
- package/src/cli/build-params-cli.ts +22 -9
- package/src/cli/commands/build.ts +25 -11
- package/src/cli/commands/check-lexicon-docs.test.ts +51 -0
- package/src/cli/commands/check-lexicon-docs.ts +39 -2
- package/src/cli/commands/check-lexicon.ts +14 -2
- package/src/cli/commands/init-lexicon/templates/docs.ts +7 -6
- package/src/cli/commands/init-lexicon.test.ts +25 -0
- package/src/cli/commands/init-lexicon.ts +18 -8
- package/src/cli/handlers/approve-release.test.ts +84 -0
- package/src/cli/handlers/approve-revoked.test.ts +155 -0
- package/src/cli/handlers/approve.ts +65 -2
- package/src/cli/handlers/build.test.ts +67 -0
- package/src/cli/handlers/build.ts +46 -4
- package/src/cli/handlers/change-set.ts +49 -1
- package/src/cli/handlers/fan-out.test.ts +228 -1
- package/src/cli/handlers/fan-out.ts +53 -6
- package/src/cli/handlers/intent-trace.e2e.test.ts +201 -0
- package/src/cli/handlers/lifecycle-gc.test.ts +126 -0
- package/src/cli/handlers/lifecycle-gc.ts +146 -0
- package/src/cli/handlers/operator.test.ts +37 -0
- package/src/cli/handlers/pr.test.ts +341 -0
- package/src/cli/handlers/pr.ts +292 -47
- package/src/cli/handlers/promote.test.ts +669 -7
- package/src/cli/handlers/promote.ts +464 -29
- package/src/cli/handlers/release-implicit.e2e.test.ts +161 -0
- package/src/cli/handlers/release-join.e2e.test.ts +185 -0
- package/src/cli/handlers/release-publish-targets.e2e.test.ts +295 -0
- package/src/cli/handlers/release-verify.e2e.test.ts +117 -0
- package/src/cli/handlers/release-workstation-ci.e2e.test.ts +135 -0
- package/src/cli/handlers/release.e2e.test.ts +199 -0
- package/src/cli/handlers/release.ts +593 -0
- package/src/cli/handlers/run-auto-release.test.ts +80 -0
- package/src/cli/handlers/run-events-cmd.test.ts +92 -0
- package/src/cli/handlers/run-release.test.ts +55 -0
- package/src/cli/handlers/run.test.ts +30 -0
- package/src/cli/handlers/run.ts +243 -18
- package/src/cli/main.test.ts +8 -0
- package/src/cli/main.ts +143 -17
- package/src/cli/mcp/never-over-mcp.test.ts +2 -0
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/cli/parse-args.ts +56 -5
- package/src/cli/registry.ts +43 -5
- package/src/cli/run-events.ts +57 -0
- package/src/cli/version.ts +3 -13
- package/src/codegen/docs-in-site.test.ts +166 -0
- package/src/codegen/docs-in-site.ts +182 -0
- package/src/codegen/docs-site/AgentPrompt.astro +26 -1
- package/src/codegen/docs-types.ts +14 -1
- package/src/codegen/docs.ts +60 -7
- package/src/codegen/rehype-base-url.d.mts +3 -1
- package/src/codegen/rehype-base-url.mjs +15 -9
- package/src/codegen/rehype-base-url.test.ts +34 -0
- package/src/components/auto-release.test.ts +30 -0
- package/src/components/auto-release.ts +9 -1
- package/src/components/capability.ts +9 -0
- package/src/components/cli-support.test.ts +82 -0
- package/src/components/cli-support.ts +16 -9
- package/src/components/driver.test.ts +24 -0
- package/src/components/driver.ts +165 -56
- package/src/components/fan-out-inputs.test.ts +85 -0
- package/src/components/fan-out-inputs.ts +192 -0
- package/src/components/fan-out-record.test.ts +10 -0
- package/src/components/fan-out-record.ts +19 -0
- package/src/components/fan-out-run.ts +104 -35
- package/src/components/fan-out.ts +4 -0
- package/src/components/pr-pipeline.ts +35 -4
- package/src/components/pr-run.ts +30 -1
- package/src/components/promote-order.test.ts +90 -0
- package/src/components/promote-order.ts +75 -0
- package/src/components/promote.test.ts +10 -1
- package/src/components/promote.ts +94 -3
- package/src/components/release-compile.test.ts +147 -0
- package/src/components/release-compile.ts +459 -0
- package/src/components/release-gate.test.ts +215 -0
- package/src/components/release-gate.ts +355 -0
- package/src/components/release-promote.test.ts +159 -0
- package/src/components/release-promote.ts +232 -0
- package/src/components/run-progress.ts +7 -0
- package/src/components/wave-plan.ts +16 -3
- package/src/config.ts +15 -1
- package/src/flag-params.test.ts +144 -0
- package/src/flag-params.ts +134 -0
- package/src/index.ts +2 -0
- package/src/lifecycle/__fixtures__/publish-fakes.ts +351 -0
- package/src/lifecycle/change-set-store.test.ts +217 -0
- package/src/lifecycle/change-set-store.ts +113 -0
- package/src/lifecycle/commit-sha.ts +23 -0
- package/src/lifecycle/delivery-metrics.ts +263 -0
- package/src/lifecycle/deploy-outcome.ts +147 -0
- package/src/lifecycle/gate-change-set.e2e.test.ts +122 -0
- package/src/lifecycle/gate-change-set.ts +164 -0
- package/src/lifecycle/gate-ledger.test.ts +33 -0
- package/src/lifecycle/gate-ledger.ts +68 -3
- package/src/lifecycle/git.ts +61 -8
- package/src/lifecycle/index.ts +4 -0
- package/src/lifecycle/mixed-environment.test.ts +97 -0
- package/src/lifecycle/mixed-environment.ts +204 -0
- package/src/lifecycle/publish-attachments.ts +196 -0
- package/src/lifecycle/publish-credentials.ts +84 -0
- package/src/lifecycle/publish-declaration.ts +95 -0
- package/src/lifecycle/publish-forge.ts +325 -0
- package/src/lifecycle/publish-npm.ts +259 -0
- package/src/lifecycle/publish-oci.ts +396 -0
- package/src/lifecycle/publish-record.ts +113 -0
- package/src/lifecycle/publish-resume.test.ts +168 -0
- package/src/lifecycle/publish-targets.test.ts +494 -0
- package/src/lifecycle/publish-targets.ts +100 -0
- package/src/lifecycle/release-cut-signed.test.ts +180 -0
- package/src/lifecycle/release-cut.test.ts +483 -0
- package/src/lifecycle/release-cut.ts +503 -0
- package/src/lifecycle/release-flag.test.ts +112 -0
- package/src/lifecycle/release-join.test.ts +68 -0
- package/src/lifecycle/release-join.ts +182 -0
- package/src/lifecycle/release-ledger.test.ts +14 -0
- package/src/lifecycle/release-ledger.ts +85 -17
- package/src/lifecycle/release-publish.test.ts +225 -0
- package/src/lifecycle/release-publish.ts +568 -0
- package/src/lifecycle/release-revocation.ts +147 -0
- package/src/lifecycle/release-store.ts +434 -0
- package/src/lifecycle/release-verify.test.ts +110 -0
- package/src/lifecycle/release-verify.ts +120 -0
- package/src/lifecycle/release-workstation.test.ts +204 -0
- package/src/lifecycle/release-workstation.ts +216 -0
- package/src/lifecycle/retention-growth.e2e.test.ts +279 -0
- package/src/lifecycle/retention-policy.ts +63 -0
- package/src/lifecycle/retention.test.ts +363 -0
- package/src/lifecycle/retention.ts +508 -0
- package/src/lifecycle/run-ledger.test.ts +10 -0
- package/src/lifecycle/run-ledger.ts +6 -0
- package/src/op/activities/change-coverage.ts +4 -1
- package/src/op/activities/source-release.ts +8 -3
- package/src/op/activities/source-rollback.ts +8 -4
- package/src/op/commit-run-gate-deploy-join.test.ts +117 -0
- package/src/op/gate-name.ts +13 -3
- package/src/op/gate-release.test.ts +126 -0
- package/src/op/gate-run-locator.test.ts +110 -0
- package/src/op/gate-run-locator.ts +35 -0
- package/src/op/gate.ts +88 -6
- package/src/op/local-executor.ts +207 -52
- package/src/op/op-waves-run.ts +4 -0
- package/src/op/run-events.test.ts +166 -0
- package/src/op/run-live.ts +1 -1
- package/src/op/runtime.ts +39 -0
- package/src/op/runtimes/local.test.ts +16 -0
- package/src/op/runtimes/local.ts +9 -0
- package/src/plan-summary.test.ts +20 -0
- package/src/plan-summary.ts +8 -1
- package/src/point-decision.ts +12 -2
- package/src/pr-loop.ts +25 -4
- package/src/pr-report-url.test.ts +131 -0
- package/src/pr-report-url.ts +209 -0
- package/src/provenance.ts +2 -2
- package/src/run-event-store.test.ts +144 -0
- package/src/run-event-store.ts +273 -0
- package/src/run-event-stream.test.ts +175 -0
- package/src/run-event-stream.ts +309 -0
- package/src/run-event.test.ts +277 -0
- package/src/run-event.ts +471 -0
- package/src/wave-loop-golden.test.ts +9 -0
- package/src/workspace/__fixtures__/flag-workspace.ts +132 -0
- package/src/workspace/__fixtures__/older-records/change-set-984534ea9.json +100 -0
- package/src/workspace/__fixtures__/older-records/older-records.json +326 -0
- package/src/workspace/__fixtures__/run-event-check.ts +58 -0
- package/src/workspace/ancestry-index.test.ts +93 -0
- package/src/workspace/change-set-show.schema.json +102 -0
- package/src/workspace/change-set-show.ts +72 -0
- package/src/workspace/change-set.schema.json +32 -1
- package/src/workspace/changes-cli.ts +10 -1
- package/src/workspace/changes.schema.json +135 -0
- package/src/workspace/changes.test.ts +1 -1
- package/src/workspace/changes.ts +84 -2
- package/src/workspace/check.schema.json +4 -2
- package/src/workspace/checks/records.ts +35 -1
- package/src/workspace/checks.ts +2 -1
- package/src/workspace/ci-green-cli.ts +75 -13
- package/src/workspace/ci-green-forge.ts +24 -4
- package/src/workspace/ci-green-runs.test.ts +242 -0
- package/src/workspace/ci-green-signed.test.ts +302 -0
- package/src/workspace/ci-green-workflow.test.ts +16 -0
- package/src/workspace/ci-green-workflow.ts +12 -0
- package/src/workspace/ci-green.test.ts +131 -2
- package/src/workspace/ci-green.ts +635 -42
- package/src/workspace/ci-last-green.schema.json +32 -2
- package/src/workspace/ci-list.schema.json +525 -0
- package/src/workspace/commit-links.test.ts +279 -0
- package/src/workspace/commit-links.ts +183 -0
- package/src/workspace/declaration.schema.json +76 -0
- package/src/workspace/declaration.test.ts +28 -0
- package/src/workspace/declaration.ts +60 -2
- package/src/workspace/declared-kinds.ts +40 -1
- package/src/workspace/delivery-metrics.schema.json +519 -0
- package/src/workspace/delivery-metrics.test.ts +236 -0
- package/src/workspace/delivery-metrics.ts +286 -0
- package/src/workspace/flags-read.ts +121 -0
- package/src/workspace/flags.test.ts +141 -0
- package/src/workspace/flags.ts +157 -0
- package/src/workspace/graph-cli.ts +1 -1
- package/src/workspace/identity-gate-rule.ts +91 -7
- package/src/workspace/identity.ts +14 -1
- package/src/workspace/intent-cli.ts +46 -5
- package/src/workspace/intent-trace.test.ts +173 -0
- package/src/workspace/intent-trace.ts +484 -0
- package/src/workspace/intent.schema.json +702 -6
- package/src/workspace/intent.ts +196 -26
- package/src/workspace/ls.schema.json +3 -1
- package/src/workspace/ls.ts +6 -0
- package/src/workspace/member-pipeline.test.ts +17 -0
- package/src/workspace/member-pipeline.ts +9 -0
- package/src/workspace/older-records.test.ts +412 -0
- package/src/workspace/overlap.test.ts +165 -0
- package/src/workspace/overlap.ts +340 -0
- package/src/workspace/promotion-order.ts +97 -0
- package/src/workspace/read-contract.e2e.test.ts +5 -1
- package/src/workspace/reason-codes.test.ts +7 -1
- package/src/workspace/reason-codes.ts +7 -1
- package/src/workspace/record-assets.test.ts +2 -1
- package/src/workspace/records-contract.e2e.test.ts +2 -1
- package/src/workspace/records.schema.json +21 -2
- package/src/workspace/records.ts +36 -2
- package/src/workspace/reference-kinds/flag/flag.kind.mjs +32 -0
- package/src/workspace/reference-kinds/flag/flag.schema.json +53 -0
- package/src/workspace/releases.schema.json +513 -0
- package/src/workspace/releases.test.ts +108 -0
- package/src/workspace/releases.ts +133 -0
- package/src/workspace/run-event.schema.json +295 -0
- package/src/workspace/status-contract.test.ts +81 -1
- package/src/workspace/status-gates.ts +64 -1
- package/src/workspace/status-mixed.test.ts +152 -0
- package/src/workspace/status-revoked.test.ts +153 -0
- package/src/workspace/status-stewards.ts +6 -0
- package/src/workspace/status.schema.json +268 -2
- package/src/workspace/status.ts +334 -4
- package/src/workspace/trust/ci-tag-statement.ts +151 -0
- package/src/workspace/trust/op-run-statement.ts +148 -0
- package/src/workspace/trust/rotation.ts +61 -14
- package/src/workspace/trust/seal.ts +10 -0
- package/src/workspace/trust/ssh-commit.ts +10 -9
- package/src/workspace/wip.ts +11 -2
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/astro.config.mjs +0 -14
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/package.json +0 -16
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/src/content/docs/index.mdx +0 -8
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/src/content.config.ts +0 -15
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/tsconfig.json +0 -10
|
@@ -32,7 +32,10 @@
|
|
|
32
32
|
*/
|
|
33
33
|
import type { CommandContext } from "../cli/registry.js";
|
|
34
34
|
import { type ReleaseRecord } from "../lifecycle/release-ledger.js";
|
|
35
|
+
import { type RevokedRelease } from "../lifecycle/release-revocation.js";
|
|
35
36
|
import { type ReleasePlan } from "../lifecycle/plan-ledger.js";
|
|
37
|
+
import { type DeployOutcome } from "../lifecycle/deploy-outcome.js";
|
|
38
|
+
import { type MixedEnvironment } from "../lifecycle/mixed-environment.js";
|
|
36
39
|
import { type WorkLeaseState } from "../lifecycle/work-lease.js";
|
|
37
40
|
import { type CheckoutHead } from "./records-checkout.js";
|
|
38
41
|
import { type ReplicationState } from "./wip.js";
|
|
@@ -41,6 +44,11 @@ import { type BoxIntent } from "./box-intent.js";
|
|
|
41
44
|
import { type MemberFields } from "./kinds.js";
|
|
42
45
|
import { type FactoryView, type ListingView, type Plantable } from "./box-factory.js";
|
|
43
46
|
import { type ErrorLocation } from "./declaration.js";
|
|
47
|
+
import type { FlagDecision, FlagValue } from "./flags.js";
|
|
48
|
+
import type { OverlapReport } from "./overlap.js";
|
|
49
|
+
import type { WorkLink } from "./work.js";
|
|
50
|
+
import { type PromotionStep } from "./promotion-order.js";
|
|
51
|
+
import { type ReleaseSignatureCheck } from "./identity-gate-rule.js";
|
|
44
52
|
import { type GateLedgerReader, type StatusGate, type StatusGateLedger } from "./status-gates.js";
|
|
45
53
|
import { readMemberStewards, type StatusSteward, type StewardReasonCode } from "./status-stewards.js";
|
|
46
54
|
/** The version of the `status` output this chant writes. */
|
|
@@ -78,6 +86,18 @@ export interface StatusRelease {
|
|
|
78
86
|
runId: string;
|
|
79
87
|
timestamp: string;
|
|
80
88
|
actor: string;
|
|
89
|
+
/** Who approved the change at its gate (#1035), when it had one. Null for an ungated release. */
|
|
90
|
+
approver: string | null;
|
|
91
|
+
/** The gate resolution that admitted the release (#4020): the gate and when it was resolved. Null for an ungated release and for one recorded before chant 0.124.28. */
|
|
92
|
+
admission: {
|
|
93
|
+
op: string;
|
|
94
|
+
gate: string;
|
|
95
|
+
resolvedAt: string;
|
|
96
|
+
} | null;
|
|
97
|
+
/** The release this deploy was made from (#4043): the `releaseDigest` of `_releases/<releaseDigest>.json`. Null for a deploy that named no release and for one recorded before chant 0.124.29. */
|
|
98
|
+
releaseDigest: string | null;
|
|
99
|
+
/** The label that release was cut with (#4043), or null when it has none, when no release is named, or when the cut can't be read. Chant 0.124.29 and newer write it. */
|
|
100
|
+
releaseLabel: string | null;
|
|
81
101
|
/** Read flags, such as `legacy-digest` (#2514). */
|
|
82
102
|
flags: string[];
|
|
83
103
|
/**
|
|
@@ -89,6 +109,24 @@ export interface StatusRelease {
|
|
|
89
109
|
* hasn't fetched yet.
|
|
90
110
|
*/
|
|
91
111
|
plan: ReleasePlan | null;
|
|
112
|
+
/**
|
|
113
|
+
* Set when the deploy names a release (`releaseDigest` on its record) that
|
|
114
|
+
* was cut from a revoked commit (#4033, ws-105): the revoked tag on that
|
|
115
|
+
* commit, the release and its label, and the line that rolls the component
|
|
116
|
+
* back. Absent otherwise, and from chant older than 0.124.29.
|
|
117
|
+
*/
|
|
118
|
+
revoked?: StatusRevokedRelease;
|
|
119
|
+
}
|
|
120
|
+
/** A release an environment runs that was cut from a revoked commit (#4033). */
|
|
121
|
+
export interface StatusRevokedRelease extends RevokedRelease {
|
|
122
|
+
/**
|
|
123
|
+
* The command that rolls the environment back, run in the member's
|
|
124
|
+
* directory: `chant components rollback <env> --release <label|digest>`
|
|
125
|
+
* naming the newest release the environment ran before this one that is
|
|
126
|
+
* still kept and not revoked (#4035), or `chant components rollback <env>
|
|
127
|
+
* --component <component>` when there is none.
|
|
128
|
+
*/
|
|
129
|
+
rollback: string;
|
|
92
130
|
}
|
|
93
131
|
export interface StatusLedger {
|
|
94
132
|
/** `members` for `_members/<member>/<env>/releases.jsonl`, `flat` for `<env>/releases.jsonl`. */
|
|
@@ -107,6 +145,14 @@ export interface StatusEnvironment {
|
|
|
107
145
|
code: StatusReasonCode;
|
|
108
146
|
message: string;
|
|
109
147
|
} | null;
|
|
148
|
+
/**
|
|
149
|
+
* Set when the environment runs a mix (#4035): a promote, rollback or
|
|
150
|
+
* redeploy left a component failed or gated and nothing has been recorded
|
|
151
|
+
* for it since, or its components' latest records name more than one
|
|
152
|
+
* release. Each component with what it runs, and the lines that settle it.
|
|
153
|
+
* Absent otherwise, and from chant older than 0.124.29.
|
|
154
|
+
*/
|
|
155
|
+
mixed?: MixedEnvironment;
|
|
110
156
|
}
|
|
111
157
|
export type CompareState = "same" | "differs" | "only-env" | "only-compare";
|
|
112
158
|
export interface StatusCompare {
|
|
@@ -149,6 +195,61 @@ export interface StatusMember {
|
|
|
149
195
|
code: StewardReasonCode;
|
|
150
196
|
message: string;
|
|
151
197
|
}[];
|
|
198
|
+
/**
|
|
199
|
+
* The member's promotion order (#4030): the literal entries of the
|
|
200
|
+
* `environments` array in its chant.config.ts, in order, each with whether
|
|
201
|
+
* it is marked canary. A release moves from each step to the next. `[]`
|
|
202
|
+
* when the config declares no environments, null when it could not be read.
|
|
203
|
+
* Added in contract 1 by chant 0.124.28.
|
|
204
|
+
*/
|
|
205
|
+
promotionOrder: PromotionStep[] | null;
|
|
206
|
+
/**
|
|
207
|
+
* The member's release cuts (#4026, ws-104), oldest first, each with
|
|
208
|
+
* whether its signature verifies for its actor against the signers at
|
|
209
|
+
* base and, when the declaration names a `release` gate with a class,
|
|
210
|
+
* whether the actor is in it (#4031). `[]` when none is cut, null when the
|
|
211
|
+
* cuts could not be read. Added in contract 1 by chant 0.124.28.
|
|
212
|
+
*/
|
|
213
|
+
releaseCuts: StatusReleaseCut[] | null;
|
|
214
|
+
/**
|
|
215
|
+
* The member's feature flags (#4024): each record of a declared flag kind
|
|
216
|
+
* that names this member, with its value per environment and the work item
|
|
217
|
+
* it hides. Sorted by id. `[]` when none names it, null when the flag
|
|
218
|
+
* records could not be read. Called `featureFlags` because a release
|
|
219
|
+
* record's `flags` already means something else. Added in contract 1 by
|
|
220
|
+
* chant 0.124.29.
|
|
221
|
+
*/
|
|
222
|
+
featureFlags: StatusFeatureFlag[] | null;
|
|
223
|
+
}
|
|
224
|
+
/** One feature flag of a member (#4024), as `status --json` lists it. */
|
|
225
|
+
export interface StatusFeatureFlag {
|
|
226
|
+
/** The flag's name, its record's id. */
|
|
227
|
+
id: string;
|
|
228
|
+
/** The build parameter of the member the flag sets. */
|
|
229
|
+
param: string;
|
|
230
|
+
owner: string;
|
|
231
|
+
/** The value per environment, as the record writes it. An environment it leaves out builds with the parameter's default. */
|
|
232
|
+
values: Record<string, FlagValue>;
|
|
233
|
+
/** The work item the flag hides, with its state (null when no record has it), or null when the record names none. */
|
|
234
|
+
work: WorkLink | null;
|
|
235
|
+
/** Each decision the work item implements, with its state and whether it is confirmed. */
|
|
236
|
+
implements: FlagDecision[];
|
|
237
|
+
/** True when every decision the work item implements is confirmed: the flag is due for removal (check WSP118). */
|
|
238
|
+
stale: boolean;
|
|
239
|
+
/** The kind file and the record file, from the workspace root. */
|
|
240
|
+
kind: string;
|
|
241
|
+
path: string;
|
|
242
|
+
}
|
|
243
|
+
/** One cut of a member's release (#4031), as `status --json` lists it. */
|
|
244
|
+
export interface StatusReleaseCut {
|
|
245
|
+
releaseDigest: string;
|
|
246
|
+
label: string | null;
|
|
247
|
+
/** The release's commit, or null when its release file can't be read. */
|
|
248
|
+
commit: string | null;
|
|
249
|
+
actor: string;
|
|
250
|
+
timestamp: string;
|
|
251
|
+
signature: string | null;
|
|
252
|
+
signatureCheck: ReleaseSignatureCheck;
|
|
152
253
|
}
|
|
153
254
|
/** The most paths `ship.pending.paths` lists; `files` still counts them all. */
|
|
154
255
|
export declare const SHIP_PENDING_PATHS_MAX = 200;
|
|
@@ -275,6 +376,14 @@ export type StatusDocument = {
|
|
|
275
376
|
acceptance: StatusAcceptance[];
|
|
276
377
|
/** How far each ref the box's replicate policy names is from its remote (#3172), read locally; null when no box declares one. */
|
|
277
378
|
replication: ReplicationState | null;
|
|
379
|
+
/**
|
|
380
|
+
* Overlap between in-flight work items (#4025): pairs of items whose
|
|
381
|
+
* linked commits touch the same files, or that both reach one entry of
|
|
382
|
+
* a change set a pending or approved gate binds. A report, never a
|
|
383
|
+
* lock. Null when no work kind is declared or the work records or
|
|
384
|
+
* history can't be read. Added in contract 1 by chant 0.124.29.
|
|
385
|
+
*/
|
|
386
|
+
overlap: OverlapReport | null;
|
|
278
387
|
summary: {
|
|
279
388
|
members: number;
|
|
280
389
|
released: number;
|
|
@@ -302,13 +411,21 @@ export interface StatusQuery {
|
|
|
302
411
|
compareTo?: string;
|
|
303
412
|
/** Reads one ledger; the lifecycle reader unless a test swaps it. */
|
|
304
413
|
readLedger?: LedgerReader;
|
|
414
|
+
/** Reads the deploy outcomes beside one ledger (#4035), given the ledger's path; the lifecycle reader unless a test swaps it. */
|
|
415
|
+
readOutcomes?: OutcomeReader;
|
|
305
416
|
/** Reads one member's gate ledger directory; git unless a test swaps it. */
|
|
306
417
|
readGates?: GateLedgerReader;
|
|
307
418
|
/** The instant a gate's expiry is measured against; now by default. */
|
|
308
419
|
now?: string;
|
|
309
420
|
/** Reads one member's stewards; the declaration and ledger reader unless a test swaps it. */
|
|
310
421
|
readStewards?: typeof readMemberStewards;
|
|
422
|
+
/** Reads one member's promotion order from its directory; its chant.config.ts unless a test swaps it. */
|
|
423
|
+
readPromotionOrder?: (dir: string) => Promise<PromotionStep[] | null>;
|
|
311
424
|
}
|
|
425
|
+
/** Reads the deploy outcomes (#4035) in the directory of the ledger at `path`. */
|
|
426
|
+
type OutcomeReader = (path: string, cwd: string) => Promise<DeployOutcome[]>;
|
|
427
|
+
/** The per-component rollback line, for a component an environment runs from a revoked release when no earlier release can be named (#4033). */
|
|
428
|
+
export declare function rollbackLine(env: string, component: string): string;
|
|
312
429
|
export declare function compareEnvironments(a: StatusEnvironment, b: StatusEnvironment): StatusCompare;
|
|
313
430
|
/** Find the workspace, read every member's ledger and build the document `--json` prints. */
|
|
314
431
|
export declare function workspaceStatus(query: StatusQuery): Promise<StatusDocument>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/workspace/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAyC,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACxG,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAgC,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAyC,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAqD,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AACtI,OAAO,EAA2G,KAAK,aAAa,EAAe,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/workspace/status.ts"],"names":[],"mappings":"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"}
|
package/dist/workspace/status.js
CHANGED
|
@@ -37,7 +37,10 @@ import { formatError } from "../cli/format.js";
|
|
|
37
37
|
import { GATES_DIR } from "../lifecycle/gate-ledger.js";
|
|
38
38
|
import { readPathSha } from "../lifecycle/git.js";
|
|
39
39
|
import { latestPerComponent, readReleaseLedger } from "../lifecycle/release-ledger.js";
|
|
40
|
+
import { describeRevocation, revokedCommitsAt, revokedReleaseLookup } from "../lifecycle/release-revocation.js";
|
|
40
41
|
import { readReleasePlan } from "../lifecycle/plan-ledger.js";
|
|
42
|
+
import { readDeployOutcomes } from "../lifecycle/deploy-outcome.js";
|
|
43
|
+
import { mixedEnvironment, releaseRollbackLine, rollbackTarget } from "../lifecycle/mixed-environment.js";
|
|
41
44
|
import { listWorkLeases } from "../lifecycle/work-lease.js";
|
|
42
45
|
import { readCheckoutHead, worktreeChanges } from "./records-checkout.js";
|
|
43
46
|
import { policyView, replicationState } from "./wip.js";
|
|
@@ -47,7 +50,9 @@ import { resolveBoxIntents, unresolvedIntent } from "./box-intent.js";
|
|
|
47
50
|
import { loadKindRegistry, resolveMemberFields } from "./kinds.js";
|
|
48
51
|
import { factoryView, listingView, plantability, treeBytes } from "./box-factory.js";
|
|
49
52
|
import { declaredRecordKinds, extensionsAt, readDeclaration, readerVersion, WorkspaceReadError } from "./declaration.js";
|
|
50
|
-
import {
|
|
53
|
+
import { readMemberPromotionOrder } from "./promotion-order.js";
|
|
54
|
+
import { gateAdmissionFrom, releaseRuleFrom } from "./identity.js";
|
|
55
|
+
import { checkReleaseSignature } from "./identity-gate-rule.js";
|
|
51
56
|
import { scopeSource } from "./write-scope.js";
|
|
52
57
|
import { GATE_REASON_CODES, readMemberGates } from "./status-gates.js";
|
|
53
58
|
import { STEWARD_REASON_CODES, readMemberStewards } from "./status-stewards.js";
|
|
@@ -185,7 +190,12 @@ async function shipView(member, cwd, read) {
|
|
|
185
190
|
return view;
|
|
186
191
|
}
|
|
187
192
|
const defaultReader = (path, cwd) => readReleaseLedger(path.slice(0, -"/releases.jsonl".length), { cwd });
|
|
188
|
-
|
|
193
|
+
const defaultOutcomeReader = (path, cwd) => readDeployOutcomes(path.slice(0, -"/releases.jsonl".length), { cwd }).catch(() => []);
|
|
194
|
+
/** The per-component rollback line, for a component an environment runs from a revoked release when no earlier release can be named (#4033). */
|
|
195
|
+
export function rollbackLine(env, component) {
|
|
196
|
+
return `chant components rollback ${env} --component ${component}`;
|
|
197
|
+
}
|
|
198
|
+
async function readEnvironment(member, env, cwd, read, revokedOf = async () => null, readOutcomes = defaultOutcomeReader) {
|
|
189
199
|
const ledger = await ledgerFor(member, env, cwd);
|
|
190
200
|
let records;
|
|
191
201
|
let malformed;
|
|
@@ -208,6 +218,40 @@ async function readEnvironment(member, env, cwd, read) {
|
|
|
208
218
|
// member (see plan-ledger.ts's readReleasePlan doc).
|
|
209
219
|
const planPrefix = ledger.layout === "members" ? `${MEMBERS_DIR}/${member.name}/` : "";
|
|
210
220
|
const latest = [...latestPerComponent(records).values()].sort((a, b) => (a.component < b.component ? -1 : a.component > b.component ? 1 : 0));
|
|
221
|
+
// #4043: a release item names the label of the release it was deployed from.
|
|
222
|
+
const memberDir = resolve(cwd, member.dir);
|
|
223
|
+
let labels = new Map();
|
|
224
|
+
let labelsRead = false;
|
|
225
|
+
const readLabels = async () => {
|
|
226
|
+
if (labelsRead)
|
|
227
|
+
return labels;
|
|
228
|
+
labelsRead = true;
|
|
229
|
+
try {
|
|
230
|
+
const { readCuts, labelsByDigest } = await import("../lifecycle/release-store.js");
|
|
231
|
+
labels = labelsByDigest((await readCuts({ cwd: memberDir })).cuts);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// The label is a convenience; the digest is the join key.
|
|
235
|
+
}
|
|
236
|
+
return labels;
|
|
237
|
+
};
|
|
238
|
+
if (latest.some((r) => r.releaseDigest !== undefined))
|
|
239
|
+
await readLabels();
|
|
240
|
+
// #4035: whether a release a rollback could go back to is kept and not revoked.
|
|
241
|
+
const checks = new Map();
|
|
242
|
+
const check = (digest) => {
|
|
243
|
+
let found = checks.get(digest);
|
|
244
|
+
if (!found) {
|
|
245
|
+
found = (async () => {
|
|
246
|
+
const { readRelease } = await import("../lifecycle/release-store.js");
|
|
247
|
+
const kept = (await readRelease(digest, { cwd: memberDir }).catch(() => null)) !== null;
|
|
248
|
+
return { kept, revoked: kept && (await revokedOf(digest)) !== null };
|
|
249
|
+
})();
|
|
250
|
+
checks.set(digest, found);
|
|
251
|
+
}
|
|
252
|
+
return found;
|
|
253
|
+
};
|
|
254
|
+
const back = { records, check, label: async (digest) => (await readLabels()).get(digest) };
|
|
211
255
|
const releases = await Promise.all(latest.map(async (r) => ({
|
|
212
256
|
component: r.component,
|
|
213
257
|
digest: r.digest,
|
|
@@ -216,9 +260,15 @@ async function readEnvironment(member, env, cwd, read) {
|
|
|
216
260
|
runId: r.runId,
|
|
217
261
|
timestamp: r.timestamp,
|
|
218
262
|
actor: r.actor,
|
|
263
|
+
approver: r.approver ?? null,
|
|
264
|
+
admission: r.admission ? { op: r.admission.op, gate: r.admission.gate, resolvedAt: r.admission.resolvedAt } : null,
|
|
265
|
+
releaseDigest: r.releaseDigest ?? null,
|
|
266
|
+
releaseLabel: (r.releaseDigest !== undefined ? labels.get(r.releaseDigest) : undefined) ?? null,
|
|
219
267
|
flags: [...(r.flags ?? [])],
|
|
220
268
|
plan: await readReleasePlan(r.digest, { cwd, prefix: planPrefix }),
|
|
269
|
+
...(await revokedItem(r, env, revokedOf, back)),
|
|
221
270
|
})));
|
|
271
|
+
const mixed = await mixedEnvironment({ env, records, outcomes: await readOutcomes(ledger.path, cwd), label: back.label, check });
|
|
222
272
|
return {
|
|
223
273
|
env,
|
|
224
274
|
ledger: { ...ledger, shared: false },
|
|
@@ -226,8 +276,41 @@ async function readEnvironment(member, env, cwd, read) {
|
|
|
226
276
|
reason: malformed > 0
|
|
227
277
|
? { code: "ledger-malformed", message: `${ledger.path}: ${malformed} line${malformed === 1 ? " is" : "s are"} not a release record and ${malformed === 1 ? "was" : "were"} skipped` }
|
|
228
278
|
: null,
|
|
279
|
+
...(mixed ? { mixed } : {}),
|
|
229
280
|
};
|
|
230
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* `{ revoked }` when the record names a release cut from a revoked commit
|
|
284
|
+
* (#4033), else nothing. Its rollback line names the newest release the
|
|
285
|
+
* environment ran before this one that is kept and not revoked (#4035).
|
|
286
|
+
*/
|
|
287
|
+
async function revokedItem(r, env, revokedOf, back) {
|
|
288
|
+
if (r.releaseDigest === undefined)
|
|
289
|
+
return {};
|
|
290
|
+
const revoked = await revokedOf(r.releaseDigest);
|
|
291
|
+
if (!revoked)
|
|
292
|
+
return {};
|
|
293
|
+
const target = await rollbackTarget({ records: back.records, exclude: new Set([r.releaseDigest]), before: r.timestamp, check: back.check });
|
|
294
|
+
const rollback = target ? releaseRollbackLine(env, target, await back.label(target)) : rollbackLine(env, r.component);
|
|
295
|
+
return { revoked: { ...revoked, rollback } };
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* A release gate whose release was cut from a revoked commit is superseded
|
|
299
|
+
* (#4033): `chant approve` refuses it and the promote refuses the release, so
|
|
300
|
+
* neither an approval nor a pending fact will pass it. An expired gate stays
|
|
301
|
+
* expired. The gate carries the revocation.
|
|
302
|
+
*/
|
|
303
|
+
async function supersedeRevokedGates(gates, revokedOf) {
|
|
304
|
+
return Promise.all(gates.map(async (g) => {
|
|
305
|
+
if (g.releaseDigest === undefined)
|
|
306
|
+
return g;
|
|
307
|
+
const revoked = await revokedOf(g.releaseDigest);
|
|
308
|
+
if (!revoked)
|
|
309
|
+
return g;
|
|
310
|
+
const { releaseDigest: _d, label: _l, ...revocation } = revoked;
|
|
311
|
+
return { ...g, state: g.state === "expired" ? g.state : "superseded", revoked: revocation };
|
|
312
|
+
}));
|
|
313
|
+
}
|
|
231
314
|
/** The digest two environments are compared on: the input side when there is one. */
|
|
232
315
|
const compareKey = (r) => r.inputDigest ?? r.digest;
|
|
233
316
|
export function compareEnvironments(a, b) {
|
|
@@ -271,11 +354,19 @@ export async function workspaceStatus(query) {
|
|
|
271
354
|
// #3163: the declaration's identity.gates at base, read once for every member's gates.
|
|
272
355
|
const ruleSource = scopeSource(found.dir);
|
|
273
356
|
const rules = (gate) => gateAdmissionFrom(ruleSource, gate);
|
|
357
|
+
const releaseRule = releaseRuleFrom(ruleSource).rule;
|
|
358
|
+
// #4033 (ws-105): revoked commits, read from local tags once and only when a release is met.
|
|
359
|
+
// Tags that can't be judged read as none revoked; workspace check reports the declaration.
|
|
360
|
+
let revokedCommits;
|
|
361
|
+
const revoked = () => (revokedCommits ?? (revokedCommits = revokedCommitsAt(top, ruleSource.declaration?.ci?.green ?? null).catch(() => new Map())));
|
|
362
|
+
// #4024: the flag records, read once for every member. Unreadable records list as null.
|
|
363
|
+
const flags = await readStatusFlags(declaration, found.dir);
|
|
274
364
|
const members = [];
|
|
275
365
|
for (const m of declaration.members) {
|
|
366
|
+
const revokedOf = revokedReleaseLookup(resolve(found.dir, m.dir), revoked);
|
|
276
367
|
const environments = [];
|
|
277
368
|
for (const env of envs)
|
|
278
|
-
environments.push(await readEnvironment(m, env, found.dir, read));
|
|
369
|
+
environments.push(await readEnvironment(m, env, found.dir, read, revokedOf, query.readOutcomes));
|
|
279
370
|
const own = await hasMemberLedger(m, found.dir);
|
|
280
371
|
const gates = await readMemberGates(own ? `${MEMBERS_DIR}/${m.name}/${GATES_DIR}` : GATES_DIR, own ? "members" : "flat", commit, envs, found.dir, now, query.readGates, rules);
|
|
281
372
|
const stewards = await (query.readStewards ?? readMemberStewards)(resolve(found.dir, m.dir), query.env, now, m.kind, m.box);
|
|
@@ -292,7 +383,7 @@ export async function workspaceStatus(query) {
|
|
|
292
383
|
compare: query.compareTo === undefined ? null : compareEnvironments(environments[0], environments[environments.length - 1]),
|
|
293
384
|
readable: environments.every((e) => e.reason === null),
|
|
294
385
|
gateLedger: gates.ledger,
|
|
295
|
-
gates: gates.gates,
|
|
386
|
+
gates: await supersedeRevokedGates(gates.gates, revokedOf),
|
|
296
387
|
box: m.box === null
|
|
297
388
|
? null
|
|
298
389
|
: {
|
|
@@ -318,6 +409,9 @@ export async function workspaceStatus(query) {
|
|
|
318
409
|
},
|
|
319
410
|
stewards: stewards.stewards,
|
|
320
411
|
stewardReasons: stewards.reasons,
|
|
412
|
+
promotionOrder: await (query.readPromotionOrder ?? readMemberPromotionOrder)(resolve(found.dir, m.dir)),
|
|
413
|
+
releaseCuts: await readReleaseCuts(resolve(found.dir, m.dir), releaseRule),
|
|
414
|
+
featureFlags: flags === null ? null : flags.filter((f) => f.member === m.name).map(({ member: _member, ...f }) => f),
|
|
321
415
|
...x(m.pointer),
|
|
322
416
|
});
|
|
323
417
|
}
|
|
@@ -335,6 +429,17 @@ export async function workspaceStatus(query) {
|
|
|
335
429
|
m.gateLedger.shared = m.gateLedger.layout === "flat" && flatGates > 1;
|
|
336
430
|
const leases = await readWorkspaceLeases(declaration.members, found.dir, new Date(now));
|
|
337
431
|
const acceptance = await readWorkspaceAcceptance(declaration, found.dir);
|
|
432
|
+
// #4025: the change sets still waiting to apply, the ones a pending or approved gate binds.
|
|
433
|
+
const pendingChangeSets = [];
|
|
434
|
+
for (const m of members) {
|
|
435
|
+
const own = m.gateLedger.layout === "members";
|
|
436
|
+
for (const g of m.gates) {
|
|
437
|
+
if (g.changeSet === undefined || (g.state !== "pending" && g.state !== "approved"))
|
|
438
|
+
continue;
|
|
439
|
+
pendingChangeSets.push({ digest: g.changeSet, cwd: resolve(found.dir, m.dir), ledgerMember: own ? m.name : null, gitSha: g.gitSha ?? null });
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
const overlap = await readStatusOverlap(declaration, found.dir, top, pendingChangeSets);
|
|
338
443
|
return {
|
|
339
444
|
...head,
|
|
340
445
|
env: query.env,
|
|
@@ -347,6 +452,7 @@ export async function workspaceStatus(query) {
|
|
|
347
452
|
leases,
|
|
348
453
|
acceptance,
|
|
349
454
|
replication: replicationOf(declaration, top),
|
|
455
|
+
overlap,
|
|
350
456
|
summary: {
|
|
351
457
|
members: members.length,
|
|
352
458
|
released: members.filter((m) => m.environments[0].releases.length > 0).length,
|
|
@@ -365,6 +471,36 @@ export async function workspaceStatus(query) {
|
|
|
365
471
|
throw err;
|
|
366
472
|
}
|
|
367
473
|
}
|
|
474
|
+
/**
|
|
475
|
+
* A member's release cuts with their signatures judged (#4031), read from
|
|
476
|
+
* its ledger on the local `chant/lifecycle`. Null when they can't be read.
|
|
477
|
+
*/
|
|
478
|
+
async function readReleaseCuts(memberDir, rule) {
|
|
479
|
+
try {
|
|
480
|
+
const { readCuts, readRelease } = await import("../lifecycle/release-store.js");
|
|
481
|
+
const loc = { cwd: memberDir };
|
|
482
|
+
const { cuts } = await readCuts(loc);
|
|
483
|
+
const commits = new Map();
|
|
484
|
+
const out = [];
|
|
485
|
+
for (const c of cuts) {
|
|
486
|
+
if (!commits.has(c.releaseDigest))
|
|
487
|
+
commits.set(c.releaseDigest, (await readRelease(c.releaseDigest, loc))?.commit ?? null);
|
|
488
|
+
out.push({
|
|
489
|
+
releaseDigest: c.releaseDigest,
|
|
490
|
+
label: c.label,
|
|
491
|
+
commit: commits.get(c.releaseDigest) ?? null,
|
|
492
|
+
actor: c.actor,
|
|
493
|
+
timestamp: c.timestamp,
|
|
494
|
+
signature: c.signature,
|
|
495
|
+
signatureCheck: checkReleaseSignature(rule, c),
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
return out;
|
|
499
|
+
}
|
|
500
|
+
catch {
|
|
501
|
+
return null;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
368
504
|
/**
|
|
369
505
|
* The work leases of the flat ledger and of each member's (#2732). Leases are
|
|
370
506
|
* env-independent, so the environment asked for doesn't narrow them. Never
|
|
@@ -382,6 +518,33 @@ async function readWorkspaceLeases(members, cwd, now) {
|
|
|
382
518
|
}
|
|
383
519
|
return out;
|
|
384
520
|
}
|
|
521
|
+
/** Every flag of the declared flag kinds (#4024), read in the working tree, sorted by id; null when they can't be read. */
|
|
522
|
+
async function readStatusFlags(declaration, root) {
|
|
523
|
+
if (declaredRecordKinds(declaration).length === 0)
|
|
524
|
+
return [];
|
|
525
|
+
try {
|
|
526
|
+
const { readWorkspaceFlags } = await import("./flags-read.js");
|
|
527
|
+
const { flags } = await readWorkspaceFlags(root);
|
|
528
|
+
return flags
|
|
529
|
+
.map((f) => ({ id: f.id, member: f.member, param: f.param, owner: f.owner, values: f.values, work: f.work, implements: f.implements, stale: f.stale, kind: f.kind, path: f.path }))
|
|
530
|
+
.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
return null;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
/** The overlap report (#4025); null when no work kind is declared or it can't be read. */
|
|
537
|
+
async function readStatusOverlap(declaration, root, top, changeSets) {
|
|
538
|
+
if (declaredRecordKinds(declaration).length === 0)
|
|
539
|
+
return null;
|
|
540
|
+
try {
|
|
541
|
+
const { readOverlap } = await import("./overlap.js");
|
|
542
|
+
return await readOverlap({ declaration, root, top, changeSets });
|
|
543
|
+
}
|
|
544
|
+
catch {
|
|
545
|
+
return null;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
385
548
|
/** The acceptance counts of every declared work kind with criteria (#2772), read in the working tree. */
|
|
386
549
|
async function readWorkspaceAcceptance(declaration, root) {
|
|
387
550
|
if (declaredRecordKinds(declaration).length === 0)
|
|
@@ -467,6 +630,25 @@ export function formatStatus(doc) {
|
|
|
467
630
|
memberNotes.push(` ${e.reason.code}: ${e.reason.message}`);
|
|
468
631
|
else if (e.ledger.shared && e.releases.length > 0)
|
|
469
632
|
memberNotes.push(` ${e.env} is read from the shared flat ledger ${e.ledger.path}`);
|
|
633
|
+
// #4033: a component running a release cut from a revoked commit, and the way back.
|
|
634
|
+
for (const r of e.releases) {
|
|
635
|
+
if (!r.revoked)
|
|
636
|
+
continue;
|
|
637
|
+
const name = r.revoked.label ?? r.revoked.releaseDigest;
|
|
638
|
+
memberNotes.push(` ${e.env}: ${r.component} runs release ${name}, revoked by ${r.revoked.tag} (${describeRevocation(r.revoked)}); roll back: ${r.revoked.rollback}`);
|
|
639
|
+
}
|
|
640
|
+
// #4035: an environment running a mix, what each component runs, and the lines that settle it.
|
|
641
|
+
if (e.mixed) {
|
|
642
|
+
const what = e.mixed.components.map((c) => {
|
|
643
|
+
const runs = c.releaseDigest ? `release ${c.releaseLabel ?? c.releaseDigest.slice(0, 24)}` : c.digest ? "no release" : "nothing recorded";
|
|
644
|
+
return c.state === "settled" ? `${c.component} runs ${runs}` : `${c.component} ${c.state} (${c.attempt.verb} ${c.attempt.runId}), recorded ${runs}`;
|
|
645
|
+
});
|
|
646
|
+
memberNotes.push(` ${e.env} is mixed: ${what.join("; ")}`);
|
|
647
|
+
for (const line of e.mixed.redeploy)
|
|
648
|
+
memberNotes.push(` redeploy: ${line}`);
|
|
649
|
+
if (e.mixed.rollback)
|
|
650
|
+
memberNotes.push(` roll back: ${e.mixed.rollback}`);
|
|
651
|
+
}
|
|
470
652
|
}
|
|
471
653
|
if (memberNotes.length > 0)
|
|
472
654
|
notes.set(rows.length - 1, memberNotes);
|
|
@@ -491,6 +673,38 @@ export function formatStatus(doc) {
|
|
|
491
673
|
rows.push([a.member ? `${a.member}/${a.item}` : a.item, a.state ?? "-", `${a.met}/${a.total}`]);
|
|
492
674
|
lines.push(...table(rows));
|
|
493
675
|
}
|
|
676
|
+
const cut = doc.members.filter((m) => (m.releaseCuts ?? []).length > 0);
|
|
677
|
+
if (cut.length > 0) {
|
|
678
|
+
lines.push("");
|
|
679
|
+
const rows = [["MEMBER", "RELEASE", "COMMIT", "CUT BY", "SIGNATURE"]];
|
|
680
|
+
for (const m of cut) {
|
|
681
|
+
for (const c of m.releaseCuts)
|
|
682
|
+
rows.push([m.name, c.label ?? c.releaseDigest.slice(0, 24), c.commit?.slice(0, 12) ?? "-", c.actor, c.signatureCheck.status]);
|
|
683
|
+
}
|
|
684
|
+
lines.push(...table(rows));
|
|
685
|
+
}
|
|
686
|
+
const flagged = doc.members.filter((m) => (m.featureFlags ?? []).length > 0);
|
|
687
|
+
if (flagged.length > 0) {
|
|
688
|
+
lines.push("");
|
|
689
|
+
const rows = [["FLAG", "PARAM", doc.env.toUpperCase(), "WORK ITEM", ""]];
|
|
690
|
+
for (const m of flagged) {
|
|
691
|
+
for (const f of m.featureFlags) {
|
|
692
|
+
const value = f.values[doc.env];
|
|
693
|
+
rows.push([`${m.name}/${f.id}`, f.param, value === undefined ? "default" : JSON.stringify(value), f.work ? `${f.work.id} (${f.work.state ?? "unknown"})` : "-", f.stale ? "due for removal" : ""]);
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
lines.push(...table(rows));
|
|
697
|
+
}
|
|
698
|
+
// #4025: in-flight work items that changed the same thing.
|
|
699
|
+
if (doc.overlap && doc.overlap.pairs.length > 0) {
|
|
700
|
+
lines.push("");
|
|
701
|
+
const rows = [["OVERLAP", "FILES", "ADDRESSES"]];
|
|
702
|
+
for (const p of doc.overlap.pairs) {
|
|
703
|
+
const list = (xs) => (xs.length === 0 ? "-" : xs.length <= 2 ? xs.join(", ") : `${xs.slice(0, 2).join(", ")} and ${xs.length - 2} more`);
|
|
704
|
+
rows.push([`${p.items[0]} and ${p.items[1]}`, list(p.files), list([...new Set(p.addresses.map((x) => x.node ?? x.address))])]);
|
|
705
|
+
}
|
|
706
|
+
lines.push(...table(rows));
|
|
707
|
+
}
|
|
494
708
|
const boxes = doc.members.filter((m) => m.box?.isolation);
|
|
495
709
|
if (boxes.length > 0) {
|
|
496
710
|
lines.push("");
|