@intentius/chant 0.124.27 → 0.124.28
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/change-set-graph.d.ts +56 -0
- package/dist/change-set-graph.d.ts.map +1 -0
- package/dist/change-set-graph.js +128 -0
- package/dist/change-set.d.ts +52 -3
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +35 -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/commands/build.d.ts +8 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +9 -8
- 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 +19 -4
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +28 -0
- 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 +1 -1
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +14 -3
- package/dist/cli/handlers/pr.d.ts +8 -2
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +148 -24
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +256 -21
- package/dist/cli/handlers/release.d.ts +34 -0
- package/dist/cli/handlers/release.d.ts.map +1 -0
- package/dist/cli/handlers/release.js +203 -0
- package/dist/cli/handlers/run.d.ts +28 -2
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/handlers/run.js +170 -13
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +88 -13
- 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 +49 -3
- package/dist/cli/registry.d.ts +29 -3
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/run-events.d.ts +29 -0
- package/dist/cli/run-events.d.ts.map +1 -0
- package/dist/cli/run-events.js +47 -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 +4 -1
- package/dist/components/auto-release.d.ts.map +1 -1
- package/dist/components/auto-release.js +2 -0
- 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 +42 -9
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +81 -54
- 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 +35 -26
- 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 +15 -2
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +17 -0
- package/dist/components/release-compile.d.ts +133 -0
- package/dist/components/release-compile.d.ts.map +1 -0
- package/dist/components/release-compile.js +376 -0
- package/dist/components/release-gate.d.ts +125 -0
- package/dist/components/release-gate.d.ts.map +1 -0
- package/dist/components/release-gate.js +282 -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 +3 -1
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -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/change-set-store.d.ts +67 -0
- package/dist/lifecycle/change-set-store.d.ts.map +1 -0
- package/dist/lifecycle/change-set-store.js +96 -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/gate-change-set.d.ts +69 -0
- package/dist/lifecycle/gate-change-set.d.ts.map +1 -0
- package/dist/lifecycle/gate-change-set.js +106 -0
- package/dist/lifecycle/gate-ledger.d.ts +49 -1
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +18 -0
- package/dist/lifecycle/release-cut.d.ts +107 -0
- package/dist/lifecycle/release-cut.d.ts.map +1 -0
- package/dist/lifecycle/release-cut.js +273 -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-store.d.ts +190 -0
- package/dist/lifecycle/release-store.d.ts.map +1 -0
- package/dist/lifecycle/release-store.js +318 -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/point-decision.d.ts +2 -0
- package/dist/point-decision.d.ts.map +1 -1
- package/dist/point-decision.js +9 -2
- package/dist/run-event-store.d.ts +77 -0
- package/dist/run-event-store.d.ts.map +1 -0
- package/dist/run-event-store.js +204 -0
- package/dist/run-event-stream.d.ts +132 -0
- package/dist/run-event-stream.d.ts.map +1 -0
- package/dist/run-event-stream.js +238 -0
- package/dist/run-event.d.ts +267 -0
- package/dist/run-event.d.ts.map +1 -0
- package/dist/run-event.js +207 -0
- package/dist/wave-runtime.mjs +204 -199
- 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 +28 -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/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 +273 -13
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +449 -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 +19 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +1 -1
- package/dist/workspace/declaration.schema.json +12 -0
- 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.d.ts +6 -1
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +51 -1
- 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/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 +2 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +4 -1
- package/dist/workspace/releases.d.ts +72 -0
- package/dist/workspace/releases.d.ts.map +1 -0
- package/dist/workspace/releases.js +94 -0
- package/dist/workspace/releases.schema.json +391 -0
- package/dist/workspace/run-event.schema.json +288 -0
- package/dist/workspace/status-gates.d.ts +26 -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 +39 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +48 -1
- package/dist/workspace/status.schema.json +70 -1
- 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/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/change-set-graph.test.ts +72 -0
- package/src/change-set-graph.ts +133 -0
- package/src/change-set.ts +76 -6
- package/src/chant-version.ts +16 -0
- package/src/cli/commands/build.ts +19 -8
- 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 +80 -0
- package/src/cli/handlers/approve.ts +18 -2
- package/src/cli/handlers/build.test.ts +52 -0
- package/src/cli/handlers/build.ts +29 -0
- package/src/cli/handlers/change-set.ts +49 -1
- package/src/cli/handlers/fan-out.test.ts +48 -0
- package/src/cli/handlers/fan-out.ts +15 -3
- package/src/cli/handlers/operator.test.ts +37 -0
- package/src/cli/handlers/pr.test.ts +194 -0
- package/src/cli/handlers/pr.ts +168 -34
- package/src/cli/handlers/promote.test.ts +389 -5
- package/src/cli/handlers/promote.ts +279 -20
- package/src/cli/handlers/release-implicit.e2e.test.ts +153 -0
- package/src/cli/handlers/release.e2e.test.ts +85 -0
- package/src/cli/handlers/release.ts +206 -0
- package/src/cli/handlers/run-auto-release.test.ts +71 -0
- package/src/cli/handlers/run-events-cmd.test.ts +92 -0
- package/src/cli/handlers/run.test.ts +30 -0
- package/src/cli/handlers/run.ts +176 -15
- package/src/cli/main.test.ts +7 -0
- package/src/cli/main.ts +88 -13
- 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 +37 -3
- package/src/cli/registry.ts +29 -3
- package/src/cli/run-events.ts +54 -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 +21 -0
- package/src/components/auto-release.ts +6 -1
- package/src/components/cli-support.test.ts +82 -0
- package/src/components/cli-support.ts +16 -9
- package/src/components/driver.ts +129 -56
- package/src/components/fan-out-run.ts +56 -35
- 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 +26 -1
- package/src/components/release-compile.test.ts +147 -0
- package/src/components/release-compile.ts +445 -0
- package/src/components/release-gate.test.ts +215 -0
- package/src/components/release-gate.ts +341 -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 +1 -1
- package/src/config.ts +7 -1
- package/src/index.ts +2 -0
- package/src/lifecycle/change-set-store.test.ts +217 -0
- package/src/lifecycle/change-set-store.ts +112 -0
- package/src/lifecycle/commit-sha.ts +23 -0
- package/src/lifecycle/gate-change-set.e2e.test.ts +122 -0
- package/src/lifecycle/gate-change-set.ts +133 -0
- package/src/lifecycle/gate-ledger.test.ts +33 -0
- package/src/lifecycle/gate-ledger.ts +66 -1
- package/src/lifecycle/release-cut-signed.test.ts +180 -0
- package/src/lifecycle/release-cut.test.ts +411 -0
- package/src/lifecycle/release-cut.ts +367 -0
- package/src/lifecycle/release-ledger.test.ts +14 -0
- package/src/lifecycle/release-ledger.ts +85 -17
- package/src/lifecycle/release-store.ts +423 -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/point-decision.ts +12 -2
- package/src/run-event-store.test.ts +144 -0
- package/src/run-event-store.ts +213 -0
- package/src/run-event-stream.test.ts +175 -0
- package/src/run-event-stream.ts +306 -0
- package/src/run-event.test.ts +277 -0
- package/src/run-event.ts +451 -0
- package/src/wave-loop-golden.test.ts +9 -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 +28 -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/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 +624 -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 +12 -0
- package/src/workspace/declaration.ts +22 -2
- package/src/workspace/identity-gate-rule.ts +91 -7
- package/src/workspace/identity.ts +14 -1
- package/src/workspace/intent.ts +48 -1
- 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/promotion-order.ts +97 -0
- package/src/workspace/read-contract.e2e.test.ts +4 -1
- package/src/workspace/reason-codes.test.ts +2 -1
- package/src/workspace/reason-codes.ts +4 -1
- package/src/workspace/releases.schema.json +391 -0
- package/src/workspace/releases.test.ts +108 -0
- package/src/workspace/releases.ts +122 -0
- package/src/workspace/run-event.schema.json +288 -0
- package/src/workspace/status-contract.test.ts +52 -1
- package/src/workspace/status-gates.ts +56 -1
- package/src/workspace/status-stewards.ts +6 -0
- package/src/workspace/status.schema.json +70 -1
- package/src/workspace/status.ts +80 -1
- 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/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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/approve.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EACuE,KAAK,UAAU,EAC5F,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAEuC,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAChG,MAAM,wBAAwB,CAAC;AAQhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAkDlD,wBAAsB,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/approve.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EACuE,KAAK,UAAU,EAC5F,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAEuC,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAChG,MAAM,wBAAwB,CAAC;AAQhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAkDlD,wBAAsB,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA6GrE;AAED,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,oGAAoG;IACpG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC3D;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAElB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CA4W9B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,oBAAoB,EAAE,EAC7B,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,OAAO,GAAE,SAAS,iBAAiB,EAA+B,GACjE,MAAM,EAAE,CA8BV"}
|
|
@@ -11,7 +11,7 @@ import { appendGateResolution, appendPendingGate, readGateLedger, latestPendingG
|
|
|
11
11
|
import { isPlanDigest, samePlanDigest } from "../../lifecycle/plan-digest.js";
|
|
12
12
|
import { gateContextDigest, gatePolicyRequest, loadGatePolicyEvaluator, } from "../../op/gate-approval.js";
|
|
13
13
|
import { approverOf, humanQuorumSince, tallyGateApprovals } from "../../op/gate.js";
|
|
14
|
-
import { FAN_OUT_GATE_OP, OVERRIDE_GATE_OP, WORKSPACE_UPGRADE_GATE_OP } from "../../op/gate-name.js";
|
|
14
|
+
import { FAN_OUT_GATE_OP, OVERRIDE_GATE_OP, RELEASE_GATE_OP, WORKSPACE_UPGRADE_GATE_OP } from "../../op/gate-name.js";
|
|
15
15
|
import { PR_GATE_OP } from "../../pr-loop.js";
|
|
16
16
|
import { pushLifecycleReport, requireLifecycleLedger } from "../../lifecycle/git.js";
|
|
17
17
|
import { LIFECYCLE_LOCAL_NOTE, isLifecycleLocalNote } from "../../lifecycle/local-note.js";
|
|
@@ -99,6 +99,8 @@ export async function runApprove(ctx) {
|
|
|
99
99
|
timestamp: now,
|
|
100
100
|
expiresAt: now,
|
|
101
101
|
...(standing.description ? { description: standing.description } : {}),
|
|
102
|
+
...(standing.runId ? { runId: standing.runId } : {}),
|
|
103
|
+
...(standing.gitSha ? { gitSha: standing.gitSha } : {}),
|
|
102
104
|
});
|
|
103
105
|
const push = await reportedPush(`The expiry is recorded locally on ${LIFECYCLE_BRANCH}. Until it reaches the remote, ` +
|
|
104
106
|
`a run in another checkout still sees the old pending fact.`);
|
|
@@ -109,7 +111,9 @@ export async function runApprove(ctx) {
|
|
|
109
111
|
? `The next \`chant components pr-apply\` decides this gate from scratch and records a fresh pending fact.`
|
|
110
112
|
: opName === WORKSPACE_UPGRADE_GATE_OP
|
|
111
113
|
? `The next \`chant workspace upgrade ${gate}\` decides this gate from scratch and records a fresh pending fact.`
|
|
112
|
-
:
|
|
114
|
+
: opName === RELEASE_GATE_OP
|
|
115
|
+
? `The next \`chant components promote --release\` decides this gate from scratch and records a fresh pending fact.`
|
|
116
|
+
: `The next \`chant run ${opName}\` decides this gate from scratch and records a fresh pending fact.`));
|
|
113
117
|
return 0;
|
|
114
118
|
}
|
|
115
119
|
// #3760: an override of a denied plan names its rules and gives a reason.
|
|
@@ -154,7 +158,9 @@ export async function runApprove(ctx) {
|
|
|
154
158
|
? `The pull request's apply (\`chant components pr-apply\`) walks through gate "${gate}" when it plans this same digest.`
|
|
155
159
|
: opName === WORKSPACE_UPGRADE_GATE_OP
|
|
156
160
|
? `Repeat \`chant workspace upgrade ${gate}\` with the same target, and it applies the patch this approval names.`
|
|
157
|
-
:
|
|
161
|
+
: opName === RELEASE_GATE_OP
|
|
162
|
+
? `Repeat the same \`chant components promote --release\`, and it walks through gate "${gate}" when it plans this same change set for this release.`
|
|
163
|
+
: `Run \`chant run ${opName}\` and it walks through gate "${gate}".`)));
|
|
158
164
|
return 0;
|
|
159
165
|
}
|
|
160
166
|
/**
|
|
@@ -187,7 +193,7 @@ export async function recordGateApproval(opName, gate, opts) {
|
|
|
187
193
|
// so there is no `*.op.ts` to find and nothing is wrong when none is there.
|
|
188
194
|
// #3949: a gate that lists this one as an alias, after an Op was restructured.
|
|
189
195
|
const successor = aliasingGate([...ops.values()].map((o) => o.config), opName, gate);
|
|
190
|
-
if (!successor && !ops.has(opName) && opName !== FAN_OUT_GATE_OP && opName !== WORKSPACE_UPGRADE_GATE_OP && opName !== OVERRIDE_GATE_OP) {
|
|
196
|
+
if (!successor && !ops.has(opName) && opName !== FAN_OUT_GATE_OP && opName !== WORKSPACE_UPGRADE_GATE_OP && opName !== OVERRIDE_GATE_OP && opName !== RELEASE_GATE_OP) {
|
|
191
197
|
console.error(formatWarning({
|
|
192
198
|
message: `Op "${opName}" was not found among discovered *.op.ts declarations — recording the resolution anyway`,
|
|
193
199
|
}));
|
|
@@ -284,6 +290,10 @@ export async function recordGateApproval(opName, gate, opts) {
|
|
|
284
290
|
const checkpointDigest = standing?.checkpointDigest !== undefined && samePlanDigest(planDigest, standing.planDigest)
|
|
285
291
|
? standing.checkpointDigest
|
|
286
292
|
: undefined;
|
|
293
|
+
// #4045: a release gate's fact names the release its change set was
|
|
294
|
+
// planned for. An approval of that fact's plan is for that release too; an
|
|
295
|
+
// approval of another plan names none, and no release gate counts it.
|
|
296
|
+
const releaseDigest = standing?.releaseDigest !== undefined && samePlanDigest(planDigest, standing.planDigest) ? standing.releaseDigest : undefined;
|
|
287
297
|
// chant#2384 — the gate's whole value is that its two halves have different
|
|
288
298
|
// authors. At a shell they do: a person runs, reads the plan, and approves.
|
|
289
299
|
// On MCP and ACP the person's only act was launching the server, and every
|
|
@@ -476,6 +486,10 @@ export async function recordGateApproval(opName, gate, opts) {
|
|
|
476
486
|
...(planDigest !== undefined ? { planDigest } : {}),
|
|
477
487
|
...(checkpointDigest !== undefined ? { checkpointDigest } : {}),
|
|
478
488
|
...(environment !== undefined ? { environment } : {}),
|
|
489
|
+
...(releaseDigest !== undefined ? { releaseDigest } : {}),
|
|
490
|
+
// #4020: the commit and run the gate waited on, off the fact this approves.
|
|
491
|
+
...(standing?.gitSha ? { gitSha: standing.gitSha } : {}),
|
|
492
|
+
...(standing?.runId ? { runId: standing.runId } : {}),
|
|
479
493
|
origin,
|
|
480
494
|
...(refusal && opts.allowSameOrigin ? { sameOriginOverride: true } : {}),
|
|
481
495
|
});
|
|
@@ -490,6 +504,7 @@ export async function recordGateApproval(opName, gate, opts) {
|
|
|
490
504
|
if (record.planDigest) {
|
|
491
505
|
console.error(formatInfo(`This approves the plan ${record.planDigest}` +
|
|
492
506
|
(record.environment !== undefined ? ` in environment "${record.environment}"` : "") +
|
|
507
|
+
(record.releaseDigest !== undefined ? ` for release ${record.releaseDigest}` : "") +
|
|
493
508
|
", and only that plan. A run whose fresh plan differs refuses rather than applying it."));
|
|
494
509
|
}
|
|
495
510
|
if (record.checkpointDigest) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/build.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/build.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA4KlD,wBAAsB,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAkJnE"}
|
|
@@ -6,6 +6,7 @@ import { generateComponentsPipeline } from "../../components/cli-support.js";
|
|
|
6
6
|
import { loadChantConfigUpward } from "../../config.js";
|
|
7
7
|
import { resolveCliBuildParams, parseParamFlags } from "../build-params-cli.js";
|
|
8
8
|
import { findWorkspaceRoot } from "../../project-root.js";
|
|
9
|
+
import { resolvePromotionSource } from "../../components/promote-order.js";
|
|
9
10
|
/**
|
|
10
11
|
* `chant build --components --generate <lexicon>` — generate mode (#563,
|
|
11
12
|
* epic #551 Phase 3). Discovers `Component` declarations under `args.path`
|
|
@@ -42,6 +43,23 @@ async function runGenerateComponents(ctx) {
|
|
|
42
43
|
console.error(message);
|
|
43
44
|
return 1;
|
|
44
45
|
}
|
|
46
|
+
// #4030: the generated promote job runs `promote --from <env> --to <promote-to>`,
|
|
47
|
+
// which the member's declared promotion order refuses when it skips a step.
|
|
48
|
+
// Refuse here, with the same code, rather than write a job that fails.
|
|
49
|
+
if (args.promoteTo) {
|
|
50
|
+
// Loaded here, not at the top: a build without --promote-to loads no workspace module (#2526).
|
|
51
|
+
const { promotionOrder } = await import("../../workspace/promotion-order.js");
|
|
52
|
+
const resolved = resolvePromotionSource({
|
|
53
|
+
order: promotionOrder(config.environments),
|
|
54
|
+
to: args.promoteTo,
|
|
55
|
+
from: args.env ?? "production",
|
|
56
|
+
...(args.allowSkip ? { allowSkip: true } : {}),
|
|
57
|
+
});
|
|
58
|
+
if ("error" in resolved) {
|
|
59
|
+
console.error(formatError({ message: `${resolved.error.message} [${resolved.error.code}]`, hint: resolved.error.fix }));
|
|
60
|
+
return 1;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
45
63
|
// A project inside a workspace member gets that member's pipeline (#2542):
|
|
46
64
|
// path-filtered, run in the member's directory, written to a file named
|
|
47
65
|
// after the member and recorded as the member's generated file. The
|
|
@@ -59,11 +77,14 @@ async function runGenerateComponents(ctx) {
|
|
|
59
77
|
lexicon,
|
|
60
78
|
env: args.env,
|
|
61
79
|
promoteTo: args.promoteTo,
|
|
80
|
+
...(args.allowSkip ? { allowSkip: true } : {}),
|
|
62
81
|
output: args.output,
|
|
63
82
|
params: args.param,
|
|
64
83
|
paramsFile: args.paramsFile,
|
|
65
84
|
...(args.waveGate ? { waveGate: { gate: args.waveGate, ...(args.canary?.length ? { canary: args.canary } : {}), ...(args.base ? { base: args.base } : {}) } } : {}),
|
|
66
85
|
...(args.prLoop ? { prLoop: { ...(args.gate ? { gate: args.gate } : {}), ...(args.branch ? { branch: args.branch } : {}) } } : {}),
|
|
86
|
+
...(args.image ? { image: args.image } : {}),
|
|
87
|
+
...(args.beforeScript?.length ? { beforeScript: args.beforeScript } : {}),
|
|
67
88
|
});
|
|
68
89
|
}
|
|
69
90
|
catch (err) {
|
|
@@ -78,6 +99,10 @@ async function runGenerateComponents(ctx) {
|
|
|
78
99
|
const result = await generateComponentsPipeline(args.path, lexicon, {
|
|
79
100
|
env: args.env,
|
|
80
101
|
...(args.promoteTo ? { promoteTo: args.promoteTo } : {}),
|
|
102
|
+
// #4030: the job passes --allow-skip through, so it is not refused again at deploy time.
|
|
103
|
+
...(args.promoteTo && args.allowSkip
|
|
104
|
+
? { promoteCommand: ["chant", "components", "promote", "--from", args.env ?? "production", "--to", args.promoteTo, "--allow-skip"] }
|
|
105
|
+
: {}),
|
|
81
106
|
...(plan ? { member: plan.member } : {}),
|
|
82
107
|
// #3049: one job per wave of a gated-wave fan-out instead of one per component.
|
|
83
108
|
...(args.waveGate
|
|
@@ -87,6 +112,9 @@ async function runGenerateComponents(ctx) {
|
|
|
87
112
|
...(args.prLoop
|
|
88
113
|
? { prLoop: { ...(args.gate ? { gate: args.gate } : {}), ...(args.branch ? { branch: args.branch } : {}) } }
|
|
89
114
|
: {}),
|
|
115
|
+
// #4002: the job image and the lines that install what it lacks, chant itself included.
|
|
116
|
+
...(args.image ? { image: args.image } : {}),
|
|
117
|
+
...(args.beforeScript?.length ? { beforeScript: args.beforeScript } : {}),
|
|
90
118
|
}, args.sandbox, paramsResolution.provenance);
|
|
91
119
|
if (!result.success) {
|
|
92
120
|
console.error(formatError({ message: result.error ?? "Failed to generate CI pipeline from components" }));
|
|
@@ -8,4 +8,14 @@ import type { CommandContext } from "../registry.js";
|
|
|
8
8
|
* file; no project, no plugins, no network.
|
|
9
9
|
*/
|
|
10
10
|
export declare function runChangeSetSummary(ctx: CommandContext): Promise<number>;
|
|
11
|
+
/**
|
|
12
|
+
* `chant change-set show <digest>` (#4022): the change-set document a gate
|
|
13
|
+
* bound, stored on `chant/lifecycle` under its digest, with each entry's
|
|
14
|
+
* graph node. `--json` prints the read contract's `change-set-show`
|
|
15
|
+
* document (`../../workspace/change-set-show.ts`); without it, the grouped
|
|
16
|
+
* summary and each entry with its node. `--member` reads a workspace
|
|
17
|
+
* member's ledger from anywhere in the checkout. Exit 1 when nothing is
|
|
18
|
+
* stored under the digest.
|
|
19
|
+
*/
|
|
20
|
+
export declare function runChangeSetShow(ctx: CommandContext): Promise<number>;
|
|
11
21
|
//# sourceMappingURL=change-set.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/change-set.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/change-set.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA2B9E;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC3E"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
2
3
|
import { CHANGE_SET_CONTRACT, CHANGE_SET_SCHEMA_ID } from "../../change-set.js";
|
|
3
4
|
import { GITHUB_COMMENT_LIMIT, groupChangeSet, renderPlanSummaryMarkdown, renderPlanSummaryText } from "../../plan-summary.js";
|
|
4
|
-
import { formatError } from "../format.js";
|
|
5
|
+
import { formatError, formatWarning } from "../format.js";
|
|
5
6
|
const USAGE = "chant change-set summary <change-set.json> [--format text|json|markdown] [--limit <chars>]";
|
|
7
|
+
const SHOW_USAGE = "chant change-set show <digest> [--member <name>] [--json]";
|
|
6
8
|
/**
|
|
7
9
|
* `chant change-set summary <file>` (#3188): the grouped plan summary of a
|
|
8
10
|
* change-set document (`../../change-set.ts`), such as the `document` a
|
|
@@ -44,3 +46,51 @@ export async function runChangeSetSummary(ctx) {
|
|
|
44
46
|
process.stdout.write(renderPlanSummaryText(summary));
|
|
45
47
|
return 0;
|
|
46
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* `chant change-set show <digest>` (#4022): the change-set document a gate
|
|
51
|
+
* bound, stored on `chant/lifecycle` under its digest, with each entry's
|
|
52
|
+
* graph node. `--json` prints the read contract's `change-set-show`
|
|
53
|
+
* document (`../../workspace/change-set-show.ts`); without it, the grouped
|
|
54
|
+
* summary and each entry with its node. `--member` reads a workspace
|
|
55
|
+
* member's ledger from anywhere in the checkout. Exit 1 when nothing is
|
|
56
|
+
* stored under the digest.
|
|
57
|
+
*/
|
|
58
|
+
export async function runChangeSetShow(ctx) {
|
|
59
|
+
const { args } = ctx;
|
|
60
|
+
const digest = args.extraPositional;
|
|
61
|
+
const { changeSetShowDocument, CHANGE_SET_DIGEST_PATTERN } = await import("../../workspace/change-set-show.js");
|
|
62
|
+
if (!digest || !CHANGE_SET_DIGEST_PATTERN.test(digest)) {
|
|
63
|
+
console.error(formatError({ message: digest ? `${digest} is not a change-set digest` : "change-set show needs the digest a gate binds", hint: SHOW_USAGE }));
|
|
64
|
+
return 1;
|
|
65
|
+
}
|
|
66
|
+
if ((args.members?.length ?? 0) > 1) {
|
|
67
|
+
console.error(formatError({ message: `change-set show reads one member, not ${args.members.join(", ")}`, hint: SHOW_USAGE }));
|
|
68
|
+
return 1;
|
|
69
|
+
}
|
|
70
|
+
const member = args.members?.[0]?.split("/").filter(Boolean);
|
|
71
|
+
const doc = await changeSetShowDocument({ cwd: resolve("."), digest, ...(member ? { member } : {}) });
|
|
72
|
+
if (args.json) {
|
|
73
|
+
console.log(JSON.stringify(doc, null, 2));
|
|
74
|
+
return "error" in doc || doc.changeSet === null ? 1 : 0;
|
|
75
|
+
}
|
|
76
|
+
if ("error" in doc) {
|
|
77
|
+
console.error(formatError({ message: doc.error.message, hint: SHOW_USAGE }));
|
|
78
|
+
return 1;
|
|
79
|
+
}
|
|
80
|
+
if (doc.reason)
|
|
81
|
+
console.error(formatWarning({ message: doc.reason.message }));
|
|
82
|
+
if (doc.changeSet === null) {
|
|
83
|
+
if (!doc.reason)
|
|
84
|
+
console.error(formatError({ message: `no change set is stored under ${digest}${doc.member ? ` for member ${doc.member}` : ""}`, hint: "A pull-request or release gate stores the change set it binds; a component gate binds a lifecycle plan and stores none." }));
|
|
85
|
+
return 1;
|
|
86
|
+
}
|
|
87
|
+
process.stdout.write(renderPlanSummaryText(groupChangeSet(doc.changeSet)));
|
|
88
|
+
const graph = doc.changeSet.graph;
|
|
89
|
+
console.log(graph ? `\nNodes from the graph of ${graph.member ?? "this project"}${graph.at ? ` at ${graph.at.slice(0, 12)}` : ""}:` : "\nNo graph was read, so no entry has a node.");
|
|
90
|
+
for (const e of doc.changeSet.entries) {
|
|
91
|
+
if (e.action === "no-op" || e.action === "read")
|
|
92
|
+
continue;
|
|
93
|
+
console.log(` ${e.action.padEnd(8)} ${e.member} ${e.address}${e.deposed ? ` (deposed ${e.deposed})` : ""} ${e.node ?? "(no node)"}`);
|
|
94
|
+
}
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
@@ -72,7 +72,7 @@ export declare function resolveChangedUnits(ctx: CommandContext, config: ChantCo
|
|
|
72
72
|
* chant components fan-out --base <ref> | --from-affected <file>
|
|
73
73
|
* [--head <ref>] [--include-dependents] [--env <env>] [--gate <name>]
|
|
74
74
|
* [--dry-run] [--json] [--resume <file>] [--seed-outputs <file>]
|
|
75
|
-
* [--dump-outputs <file>] [--progress-json]
|
|
75
|
+
* [--dump-outputs <file>] [--progress-json | --events-json]
|
|
76
76
|
*/
|
|
77
77
|
export declare function runComponentsFanOut(ctx: CommandContext): Promise<number>;
|
|
78
78
|
//# sourceMappingURL=fan-out.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fan-out.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/fan-out.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAIH,OAAO,EAA+C,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"fan-out.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/fan-out.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAIH,OAAO,EAA+C,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAc7F,OAAO,EAAmB,KAAK,YAAY,EAAuB,MAAM,0BAA0B,CAAC;AAMnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE;IACJ,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,GACL,OAAO,CAAC;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+ErE;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA+R9E"}
|
|
@@ -51,6 +51,7 @@ import { readFanOutAttempt, writeFanOutAttempt } from "../../components/fan-out-
|
|
|
51
51
|
import { describeChangedWave, withWaveRecord } from "../../gated-waves.js";
|
|
52
52
|
import { renderFanOutHuman, renderFanOutJson, renderFanOutPlan } from "../../components/fan-out-output.js";
|
|
53
53
|
import { ndjsonProgressSink } from "../../components/run-progress.js";
|
|
54
|
+
import { openCliRunEvents, refusesBothStreams } from "../run-events.js";
|
|
54
55
|
import { summaryLedgerPrefix, writeGatedRunSummary } from "../../op/gate-summary.js";
|
|
55
56
|
import { approveCommand, gateIsSealed } from "../../op/gate.js";
|
|
56
57
|
import { getHeadCommit } from "../../lifecycle/git.js";
|
|
@@ -59,7 +60,7 @@ import { resolveCliBuildParams, parseParamFlags } from "../build-params-cli.js";
|
|
|
59
60
|
import { formatError, formatInfo, formatWarning } from "../format.js";
|
|
60
61
|
import { FAN_OUT_GATE_OP } from "../../op/gate-name.js";
|
|
61
62
|
import { resolveBuildRoot } from "./lifecycle.js";
|
|
62
|
-
import { GATED_EXIT_CODE, recordAutoReleasesForRun } from "./run.js";
|
|
63
|
+
import { GATED_EXIT_CODE, autoReleaseRun, recordAutoReleasesForRun } from "./run.js";
|
|
63
64
|
/**
|
|
64
65
|
* The stack-level change signal, from whichever end the invocation supplied.
|
|
65
66
|
*
|
|
@@ -156,10 +157,12 @@ export async function resolveChangedUnits(ctx, config, opts = {}) {
|
|
|
156
157
|
* chant components fan-out --base <ref> | --from-affected <file>
|
|
157
158
|
* [--head <ref>] [--include-dependents] [--env <env>] [--gate <name>]
|
|
158
159
|
* [--dry-run] [--json] [--resume <file>] [--seed-outputs <file>]
|
|
159
|
-
* [--dump-outputs <file>] [--progress-json]
|
|
160
|
+
* [--dump-outputs <file>] [--progress-json | --events-json]
|
|
160
161
|
*/
|
|
161
162
|
export async function runComponentsFanOut(ctx) {
|
|
162
163
|
const { args } = ctx;
|
|
164
|
+
if (refusesBothStreams(args))
|
|
165
|
+
return 1;
|
|
163
166
|
const projectPath = resolve(".");
|
|
164
167
|
const { config } = await loadChantConfig(projectPath).catch(() => ({ config: {} }));
|
|
165
168
|
const paramsResolution = resolveCliBuildParams(config.buildParams, {
|
|
@@ -312,6 +315,10 @@ export async function runComponentsFanOut(ctx) {
|
|
|
312
315
|
};
|
|
313
316
|
writeFanOutAttempt(resumePath, attempt);
|
|
314
317
|
};
|
|
318
|
+
// The run id the release records carry, chosen before the run so that
|
|
319
|
+
// `--events-json` (#4041) names the run by it too.
|
|
320
|
+
const release = autoReleaseRun(`fan-out-${Date.now()}`);
|
|
321
|
+
const events = await openCliRunEvents(args, { kind: "component", name: `fan-out ${derived.plan.order.join(",")}`, runId: release.runId, cwd: projectPath });
|
|
315
322
|
let result;
|
|
316
323
|
try {
|
|
317
324
|
result = await runFanOut(derived.plan, derived.components, registry, {
|
|
@@ -342,6 +349,7 @@ export async function runComponentsFanOut(ctx) {
|
|
|
342
349
|
}
|
|
343
350
|
: {}),
|
|
344
351
|
...(args.progressJson ? { onProgress: ndjsonProgressSink() } : {}),
|
|
352
|
+
...(events ? { onRunEvent: events.emit } : {}),
|
|
345
353
|
...(resumePath
|
|
346
354
|
? {
|
|
347
355
|
onComponentSettled: (settled, outputs) => {
|
|
@@ -360,6 +368,7 @@ export async function runComponentsFanOut(ctx) {
|
|
|
360
368
|
});
|
|
361
369
|
}
|
|
362
370
|
catch (err) {
|
|
371
|
+
events?.settle("failed", err instanceof Error ? err.message : String(err));
|
|
363
372
|
// `--wave <n>` reached before an earlier wave applied: nothing ran.
|
|
364
373
|
if (err instanceof EarlierWaveNotAppliedError) {
|
|
365
374
|
console.error(formatError({ message: err.message }));
|
|
@@ -367,6 +376,8 @@ export async function runComponentsFanOut(ctx) {
|
|
|
367
376
|
}
|
|
368
377
|
throw err;
|
|
369
378
|
}
|
|
379
|
+
// The fan-out settles the stream; this only ends one it left open.
|
|
380
|
+
events?.settle(result.status === "fail" ? "failed" : result.status);
|
|
370
381
|
if (args.dumpOutputs) {
|
|
371
382
|
const dumpPath = resolve(args.dumpOutputs);
|
|
372
383
|
mkdirSync(dirname(dumpPath), { recursive: true });
|
|
@@ -395,7 +406,7 @@ export async function runComponentsFanOut(ctx) {
|
|
|
395
406
|
// A gated-wave run can stop at a later wave's gate after earlier waves
|
|
396
407
|
// applied, and those applies are recorded like any other.
|
|
397
408
|
if (result.status !== "gated" || result.completed.length > 0) {
|
|
398
|
-
await recordAutoReleasesForRun(result.results, args.env ?? "local",
|
|
409
|
+
await recordAutoReleasesForRun(result.results, args.env ?? "local", release.runId, resolveAutoReleaseDisabled(config, args.noReleaseRecord), release.runOrigin);
|
|
399
410
|
}
|
|
400
411
|
// A failed root outranks a gate in the status, but a gated-wave run that
|
|
401
412
|
// stopped at a wave's gate still prints how to approve it.
|
|
@@ -29,6 +29,12 @@
|
|
|
29
29
|
*
|
|
30
30
|
* Every run writes `pr-plan.json` or `pr-apply.json` (`pr-report.schema.json`),
|
|
31
31
|
* `change-set.json` and `pr-note.md` under `--output` (default `.chant/pr`). *
|
|
32
|
+
* `--events-json` (#4041, #4007) streams the stage's run events to stdout,
|
|
33
|
+
* one `run-event.schema.json` line each: the planning as a `plan` phase with
|
|
34
|
+
* a step per component, the gate's decision as a `gate` phase, and on
|
|
35
|
+
* pr-apply the apply's waves and components as `chant run --components`
|
|
36
|
+
* streams them.
|
|
37
|
+
*
|
|
32
38
|
* `--member <name>` (#3465) runs a workspace member's loop: the member's
|
|
33
39
|
* generated pipeline passes it from the member's directory. The gate is
|
|
34
40
|
* recorded under `pr-<n>-<member>`, and the note and the statuses carry the
|
|
@@ -38,8 +44,8 @@
|
|
|
38
44
|
import type { CommandContext } from "../registry.js";
|
|
39
45
|
/** Where the reports land unless `--output` says. */
|
|
40
46
|
export declare const PR_REPORT_DIR = ".chant/pr";
|
|
41
|
-
/** chant components pr-plan --base <ref> --pr <n> [--env <env>] [--gate <name>] [--forge <kind>] [--output <dir>] [--json] */
|
|
47
|
+
/** chant components pr-plan --base <ref> --pr <n> [--env <env>] [--gate <name>] [--forge <kind>] [--output <dir>] [--json] [--events-json] */
|
|
42
48
|
export declare function runComponentsPrPlan(ctx: CommandContext): Promise<number>;
|
|
43
|
-
/** chant components pr-apply --base <ref> [--pr <n>] [--env <env>] [--gate <name>] [--forge <kind>] [--require-review] [--output <dir>] [--json] */
|
|
49
|
+
/** chant components pr-apply --base <ref> [--pr <n>] [--env <env>] [--gate <name>] [--forge <kind>] [--require-review] [--output <dir>] [--json] [--events-json] */
|
|
44
50
|
export declare function runComponentsPrApply(ctx: CommandContext): Promise<number>;
|
|
45
51
|
//# sourceMappingURL=pr.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/pr.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/pr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AA4CH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,qDAAqD;AACrD,eAAO,MAAM,aAAa,cAAc,CAAC;AAoPzC,8IAA8I;AAC9I,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxE;AAuDD,oKAAoK;AACpK,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzE"}
|