@intentius/chant 0.124.28 → 0.124.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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 +8 -1
- package/dist/change-set-graph.d.ts.map +1 -1
- package/dist/change-set-graph.js +4 -2
- package/dist/change-set.d.ts +10 -0
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +4 -3
- 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.map +1 -1
- package/dist/cli/commands/build.js +6 -3
- package/dist/cli/handlers/approve.d.ts.map +1 -1
- package/dist/cli/handlers/approve.js +45 -0
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +18 -4
- package/dist/cli/handlers/fan-out.d.ts +9 -0
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +67 -8
- 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 +11 -3
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +134 -26
- 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 +210 -33
- package/dist/cli/handlers/release.d.ts +62 -5
- package/dist/cli/handlers/release.d.ts.map +1 -1
- package/dist/cli/handlers/release.js +414 -28
- package/dist/cli/handlers/run.d.ts +11 -1
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/handlers/run.js +67 -6
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +91 -10
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +73 -2
- package/dist/cli/registry.d.ts +32 -4
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/run-events.d.ts +3 -2
- package/dist/cli/run-events.d.ts.map +1 -1
- package/dist/cli/run-events.js +5 -3
- package/dist/components/auto-release.d.ts +2 -0
- package/dist/components/auto-release.d.ts.map +1 -1
- package/dist/components/auto-release.js +1 -0
- package/dist/components/capability.d.ts +9 -0
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/driver.d.ts +8 -0
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +35 -0
- 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.map +1 -1
- package/dist/components/fan-out-run.js +50 -0
- 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 +49 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +38 -4
- package/dist/components/pr-run.d.ts +20 -2
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +26 -13
- package/dist/components/promote.d.ts +23 -0
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +60 -2
- package/dist/components/release-compile.d.ts +9 -0
- package/dist/components/release-compile.d.ts.map +1 -1
- package/dist/components/release-compile.js +9 -3
- package/dist/components/release-gate.d.ts +11 -1
- package/dist/components/release-gate.d.ts.map +1 -1
- package/dist/components/release-gate.js +10 -4
- package/dist/components/wave-plan.d.ts +16 -0
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +36 -2
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -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/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 +2 -1
- package/dist/lifecycle/change-set-store.d.ts.map +1 -1
- package/dist/lifecycle/change-set-store.js +2 -1
- 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 +10 -1
- package/dist/lifecycle/gate-change-set.d.ts.map +1 -1
- package/dist/lifecycle/gate-change-set.js +35 -3
- package/dist/lifecycle/gate-ledger.d.ts +2 -3
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- 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 +48 -1
- package/dist/lifecycle/release-cut.d.ts.map +1 -1
- package/dist/lifecycle/release-cut.js +116 -23
- 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 +8 -3
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.js +2 -0
- 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 +12 -2
- package/dist/lifecycle/release-store.d.ts.map +1 -1
- package/dist/lifecycle/release-store.js +4 -2
- 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 +1 -1
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +9 -0
- package/dist/op/activities/activity-contracts.d.ts +1 -0
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.js +1 -0
- package/dist/op/activities/shell.d.ts +6 -0
- package/dist/op/activities/shell.d.ts.map +1 -1
- package/dist/op/activities/shell.js +1 -1
- package/dist/op/local-executor.d.ts +23 -1
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +9 -3
- package/dist/op/runtime.d.ts +27 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/runtime.js +20 -0
- package/dist/plan-summary.d.ts.map +1 -1
- package/dist/plan-summary.js +8 -2
- package/dist/pr-forge.d.ts +23 -0
- package/dist/pr-forge.d.ts.map +1 -1
- package/dist/pr-forge.js +44 -0
- package/dist/pr-loop.d.ts +17 -0
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +30 -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 +29 -2
- package/dist/run-event-store.d.ts.map +1 -1
- package/dist/run-event-store.js +50 -3
- package/dist/run-event-stream.d.ts +4 -3
- package/dist/run-event-stream.d.ts.map +1 -1
- package/dist/run-event-stream.js +7 -3
- package/dist/run-event.d.ts +34 -1
- package/dist/run-event.d.ts.map +1 -1
- package/dist/run-event.js +4 -0
- package/dist/wave-runtime.mjs +260 -229
- 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/change-set.schema.json +5 -1
- 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-forge.d.ts +2 -0
- package/dist/workspace/ci-green-forge.d.ts.map +1 -1
- package/dist/workspace/ci-green.d.ts +10 -0
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +14 -5
- package/dist/workspace/ci-run.d.ts +222 -0
- package/dist/workspace/ci-run.d.ts.map +1 -0
- package/dist/workspace/ci-run.js +464 -0
- package/dist/workspace/ci-serve.d.ts +214 -0
- package/dist/workspace/ci-serve.d.ts.map +1 -0
- package/dist/workspace/ci-serve.js +412 -0
- package/dist/workspace/declaration.d.ts +16 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +26 -0
- package/dist/workspace/declaration.schema.json +64 -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/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 +30 -6
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +141 -21
- package/dist/workspace/intent.schema.json +702 -6
- 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/pr-report.schema.json +5 -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 +3 -0
- 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 +9 -0
- package/dist/workspace/releases.d.ts.map +1 -1
- package/dist/workspace/releases.js +9 -0
- package/dist/workspace/releases.schema.json +123 -1
- package/dist/workspace/run-event.schema.json +24 -6
- package/dist/workspace/status-gates.d.ts +8 -0
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status-stewards.d.ts +2 -0
- package/dist/workspace/status-stewards.d.ts.map +1 -1
- package/dist/workspace/status-stewards.js +1 -0
- package/dist/workspace/status.d.ts +78 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +170 -3
- package/dist/workspace/status.schema.json +210 -2
- package/dist/workspace/wip.d.ts.map +1 -1
- package/dist/workspace/wip.js +11 -3
- package/package.json +1 -1
- package/src/build-params.test.ts +46 -0
- package/src/build-params.ts +55 -1
- package/src/change-set-graph.ts +10 -2
- package/src/change-set.ts +14 -3
- package/src/cli/build-params-cli.ts +22 -9
- package/src/cli/commands/build.ts +6 -3
- package/src/cli/handlers/approve-release.test.ts +5 -1
- package/src/cli/handlers/approve-revoked.test.ts +155 -0
- package/src/cli/handlers/approve.ts +47 -0
- package/src/cli/handlers/build.test.ts +30 -0
- package/src/cli/handlers/build.ts +20 -4
- package/src/cli/handlers/fan-out.test.ts +262 -1
- package/src/cli/handlers/fan-out.ts +72 -8
- 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/pr.test.ts +148 -1
- package/src/cli/handlers/pr.ts +144 -28
- package/src/cli/handlers/promote.test.ts +280 -2
- package/src/cli/handlers/promote.ts +210 -34
- package/src/cli/handlers/release-implicit.e2e.test.ts +12 -4
- 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 +146 -32
- package/src/cli/handlers/release.ts +415 -28
- package/src/cli/handlers/run-auto-release.test.ts +9 -0
- package/src/cli/handlers/run-release.test.ts +55 -0
- package/src/cli/handlers/run.ts +69 -5
- package/src/cli/main.test.ts +1 -0
- package/src/cli/main.ts +91 -10
- package/src/cli/parse-args.ts +54 -2
- package/src/cli/registry.ts +32 -4
- package/src/cli/run-events.ts +5 -2
- package/src/components/auto-release.test.ts +9 -0
- package/src/components/auto-release.ts +3 -0
- package/src/components/capability.ts +9 -0
- package/src/components/driver.test.ts +24 -0
- package/src/components/driver.ts +36 -0
- 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 +48 -0
- package/src/components/fan-out.ts +4 -0
- package/src/components/pr-pipeline.ts +67 -4
- package/src/components/pr-run.test.ts +127 -0
- package/src/components/pr-run.ts +32 -12
- package/src/components/promote.ts +68 -2
- package/src/components/release-compile.ts +17 -3
- package/src/components/release-gate.ts +18 -4
- package/src/components/wave-plan.ts +45 -2
- package/src/config.ts +8 -0
- package/src/flag-params.test.ts +144 -0
- package/src/flag-params.ts +134 -0
- package/src/lifecycle/__fixtures__/publish-fakes.ts +351 -0
- package/src/lifecycle/change-set-store.ts +2 -1
- package/src/lifecycle/delivery-metrics.ts +263 -0
- package/src/lifecycle/deploy-outcome.ts +147 -0
- package/src/lifecycle/gate-change-set.ts +37 -6
- package/src/lifecycle/gate-ledger.ts +2 -2
- 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.test.ts +74 -2
- package/src/lifecycle/release-cut.ts +158 -22
- 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.ts +9 -3
- 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 +15 -4
- 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.ts +7 -1
- package/src/op/activities/activity-contracts.ts +1 -0
- package/src/op/activities/shell.ts +7 -1
- package/src/op/local-executor.ts +27 -4
- package/src/op/runtime.ts +42 -0
- package/src/plan-summary.test.ts +20 -0
- package/src/plan-summary.ts +8 -1
- package/src/pr-forge.test.ts +25 -0
- package/src/pr-forge.ts +62 -0
- package/src/pr-loop.test.ts +13 -1
- package/src/pr-loop.ts +41 -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.ts +63 -3
- package/src/run-event-stream.ts +8 -4
- package/src/run-event.ts +38 -1
- 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/change-set.schema.json +5 -1
- 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-forge.ts +2 -0
- package/src/workspace/ci-green.ts +20 -5
- package/src/workspace/ci-run.test.ts +416 -0
- package/src/workspace/ci-run.ts +571 -0
- package/src/workspace/ci-serve.test.ts +268 -0
- package/src/workspace/ci-serve.ts +521 -0
- package/src/workspace/declaration.schema.json +64 -0
- package/src/workspace/declaration.test.ts +28 -0
- package/src/workspace/declaration.ts +38 -0
- 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/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 +148 -25
- 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/pr-report.schema.json +5 -0
- package/src/workspace/read-contract.e2e.test.ts +2 -1
- package/src/workspace/reason-codes.test.ts +5 -0
- package/src/workspace/reason-codes.ts +3 -0
- 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 +123 -1
- package/src/workspace/releases.ts +11 -0
- package/src/workspace/run-event.schema.json +24 -6
- package/src/workspace/status-contract.test.ts +29 -0
- package/src/workspace/status-gates.ts +8 -0
- package/src/workspace/status-mixed.test.ts +152 -0
- package/src/workspace/status-revoked.test.ts +153 -0
- package/src/workspace/status-stewards.ts +3 -0
- package/src/workspace/status.schema.json +210 -2
- package/src/workspace/status.ts +254 -3
- package/src/workspace/wip.ts +11 -2
package/src/cli/handlers/pr.ts
CHANGED
|
@@ -33,7 +33,15 @@
|
|
|
33
33
|
* one `run-event.schema.json` line each: the planning as a `plan` phase with
|
|
34
34
|
* a step per component, the gate's decision as a `gate` phase, and on
|
|
35
35
|
* pr-apply the apply's waves and components as `chant run --components`
|
|
36
|
-
* streams them.
|
|
36
|
+
* streams them. A component the apply does not start settles too, `blocked`
|
|
37
|
+
* behind a failed dependency or `already-applied` on a resumed apply.
|
|
38
|
+
* With or without it, pr-apply prints a line on stderr as each wave starts
|
|
39
|
+
* and as each component settles, so a job log shows the waves in order.
|
|
40
|
+
*
|
|
41
|
+
* `--report-url <s3 or file URL>` (#4007) copies `pr-<stage>.json`,
|
|
42
|
+
* `change-set.json` and, with `--events-json`, the events to
|
|
43
|
+
* `<url>/<pr>/<commit>/`, the events again as each wave and component
|
|
44
|
+
* settles (`../../pr-report-url.ts`).
|
|
37
45
|
*
|
|
38
46
|
* `--member <name>` (#3465) runs a workspace member's loop: the member's
|
|
39
47
|
* generated pipeline passes it from the member's directory. The gate is
|
|
@@ -59,11 +67,13 @@ import {
|
|
|
59
67
|
type PrPlanSet,
|
|
60
68
|
} from "../../components/pr-run";
|
|
61
69
|
import { readFanOutAttempt, writeFanOutAttempt, type FanOutAttempt, type PrApplyRecord } from "../../components/fan-out-record";
|
|
70
|
+
import { componentInputDigests, progressThatCarries } from "../../components/fan-out-inputs";
|
|
62
71
|
import { samePlanDigest } from "../../lifecycle/plan-digest";
|
|
63
72
|
import { gitGateLedgerPort, type GateCheck } from "../../op/gate";
|
|
64
73
|
import { emitGateStep, gateEventsOf, GATE_PHASE, type RunEventSink, type RunEventStream } from "../../run-event-stream";
|
|
65
|
-
import type { RunEventSettleStatus } from "../../run-event";
|
|
74
|
+
import type { RunEventBody, RunEventComponentSettle, RunEventSettleStatus } from "../../run-event";
|
|
66
75
|
import { openCliRunEvents, refusesEventsWithJson } from "../run-events";
|
|
76
|
+
import { openPrReportUpload, parseReportUrl, reportKey, type PrReportUpload, type ReportTarget } from "../../pr-report-url";
|
|
67
77
|
import {
|
|
68
78
|
describePlanChanged,
|
|
69
79
|
PR_APPLY_GATE,
|
|
@@ -102,6 +112,11 @@ interface Prepared {
|
|
|
102
112
|
head: string;
|
|
103
113
|
gate: string;
|
|
104
114
|
forge?: PrForge;
|
|
115
|
+
/**
|
|
116
|
+
* Every component in the project, not the selection (`deriveFanOut`), so
|
|
117
|
+
* the plan reads the deployed outputs of a dependency the change did not
|
|
118
|
+
* select (#4104).
|
|
119
|
+
*/
|
|
105
120
|
components: DriverComponent[];
|
|
106
121
|
plan: FanOutPlan;
|
|
107
122
|
signal: ComponentChangeSignal;
|
|
@@ -262,12 +277,18 @@ function settleOf(status: PrReport["status"]): RunEventSettleStatus {
|
|
|
262
277
|
}
|
|
263
278
|
}
|
|
264
279
|
|
|
265
|
-
/** Write the report, the change set and the note
|
|
266
|
-
function writeOutputs(ctx: CommandContext, report: PrReport, note: string): void {
|
|
280
|
+
/** Write the report, the change set and the note, and hand the first two to `--report-url`'s upload. */
|
|
281
|
+
function writeOutputs(ctx: CommandContext, report: PrReport, note: string, upload?: PrReportUpload): void {
|
|
267
282
|
const dir = resolve(ctx.args.output ?? PR_REPORT_DIR);
|
|
268
283
|
mkdirSync(dir, { recursive: true });
|
|
269
|
-
|
|
270
|
-
|
|
284
|
+
const files: Array<[string, string]> = [
|
|
285
|
+
[`pr-${report.stage}.json`, JSON.stringify(report, null, 2) + "\n"],
|
|
286
|
+
["change-set.json", JSON.stringify(report.changeSet, null, 2) + "\n"],
|
|
287
|
+
];
|
|
288
|
+
for (const [name, body] of files) {
|
|
289
|
+
writeFileSync(join(dir, name), body);
|
|
290
|
+
upload?.file(name, body);
|
|
291
|
+
}
|
|
271
292
|
writeFileSync(join(dir, "pr-note.md"), note);
|
|
272
293
|
}
|
|
273
294
|
|
|
@@ -310,21 +331,32 @@ function printMembers(report: PrReport): void {
|
|
|
310
331
|
}
|
|
311
332
|
}
|
|
312
333
|
|
|
313
|
-
async function finish(ctx: CommandContext, p: Prepared, report: PrReport): Promise<void> {
|
|
334
|
+
async function finish(ctx: CommandContext, p: Prepared, report: PrReport, upload?: PrReportUpload): Promise<void> {
|
|
314
335
|
const note = noteFor(report, p.forge);
|
|
315
|
-
writeOutputs(ctx, report, note);
|
|
336
|
+
writeOutputs(ctx, report, note, upload);
|
|
316
337
|
await publish(p.forge, report, note);
|
|
317
338
|
if (ctx.args.json) console.log(JSON.stringify(report, null, 2));
|
|
318
339
|
}
|
|
319
340
|
|
|
320
|
-
/**
|
|
341
|
+
/**
|
|
342
|
+
* A stage's stream and its `--report-url` upload, held so that a stage that
|
|
343
|
+
* returns or throws before it settles still ends the stream and uploads.
|
|
344
|
+
*/
|
|
321
345
|
interface StageEvents {
|
|
322
346
|
stream?: RunEventStream;
|
|
347
|
+
/** Where `--report-url` points, read before the stage starts. */
|
|
348
|
+
target?: ReportTarget;
|
|
349
|
+
upload?: PrReportUpload;
|
|
323
350
|
}
|
|
324
351
|
|
|
325
|
-
/** Run a stage,
|
|
326
|
-
async function withStageEvents(stage: string, run: (events: StageEvents) => Promise<number>): Promise<number> {
|
|
352
|
+
/** Run a stage, end its stream as `failed` when the stage did not settle it, and finish its upload. */
|
|
353
|
+
async function withStageEvents(stage: string, ctx: CommandContext, run: (events: StageEvents) => Promise<number>): Promise<number> {
|
|
327
354
|
const events: StageEvents = {};
|
|
355
|
+
if (ctx.args.reportUrl !== undefined) {
|
|
356
|
+
const target = parseReportUrl(ctx.args.reportUrl);
|
|
357
|
+
if ("error" in target) return fail(target.error);
|
|
358
|
+
events.target = target;
|
|
359
|
+
}
|
|
328
360
|
try {
|
|
329
361
|
return await run(events);
|
|
330
362
|
} catch (err) {
|
|
@@ -332,13 +364,32 @@ async function withStageEvents(stage: string, run: (events: StageEvents) => Prom
|
|
|
332
364
|
throw err;
|
|
333
365
|
} finally {
|
|
334
366
|
events.stream?.settle("failed", `${stage} stopped before it finished`);
|
|
367
|
+
if (events.upload) {
|
|
368
|
+
await events.upload.close();
|
|
369
|
+
console.error(formatInfo(`report : ${events.upload.where}/`));
|
|
370
|
+
}
|
|
335
371
|
}
|
|
336
372
|
}
|
|
337
373
|
|
|
338
|
-
/**
|
|
374
|
+
/**
|
|
375
|
+
* Open the stage's `--report-url` upload under its pull request and commit,
|
|
376
|
+
* when the flag was given. Its events are the lines `openCliRunEvents` writes.
|
|
377
|
+
*/
|
|
378
|
+
function openUpload(events: StageEvents, stage: "plan" | "apply", pr: number | null, p: Prepared): PrReportUpload | undefined {
|
|
379
|
+
if (!events.target) return undefined;
|
|
380
|
+
events.upload = openPrReportUpload({
|
|
381
|
+
target: events.target,
|
|
382
|
+
key: reportKey(pr, p.head, p.member),
|
|
383
|
+
stage,
|
|
384
|
+
warn: (message) => console.error(formatWarning({ message })),
|
|
385
|
+
});
|
|
386
|
+
return events.upload;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/** chant components pr-plan --base <ref> --pr <n> [--env <env>] [--gate <name>] [--forge <kind>] [--output <dir>] [--json] [--events-json] [--report-url <url>] */
|
|
339
390
|
export function runComponentsPrPlan(ctx: CommandContext): Promise<number> {
|
|
340
391
|
if (refusesEventsWithJson(ctx.args, "the stage's report")) return Promise.resolve(1);
|
|
341
|
-
return withStageEvents("pr-plan", (events) => prPlan(ctx, events));
|
|
392
|
+
return withStageEvents("pr-plan", ctx, (events) => prPlan(ctx, events));
|
|
342
393
|
}
|
|
343
394
|
|
|
344
395
|
async function prPlan(ctx: CommandContext, stage: StageEvents): Promise<number> {
|
|
@@ -348,8 +399,9 @@ async function prPlan(ctx: CommandContext, stage: StageEvents): Promise<number>
|
|
|
348
399
|
const p = await prepare(ctx, "plan");
|
|
349
400
|
if (typeof p === "number") return p;
|
|
350
401
|
const op = prOp(ctx.args.pr, p.member);
|
|
402
|
+
const upload = openUpload(stage, "plan", ctx.args.pr, p);
|
|
351
403
|
// `--events-json` (#4041): planning, then where the approval stands.
|
|
352
|
-
const events = await openCliRunEvents(ctx.args, { kind: "component", name: `pr-plan ${op}`, cwd: resolve(".") });
|
|
404
|
+
const events = await openCliRunEvents(ctx.args, { kind: "component", name: `pr-plan ${op}`, cwd: resolve(".") }, upload?.line);
|
|
353
405
|
stage.stream = events;
|
|
354
406
|
events?.emit({ type: "run-start", waves: p.plan.waves });
|
|
355
407
|
const set = await planAll(p, events?.emit);
|
|
@@ -381,7 +433,7 @@ async function prPlan(ctx: CommandContext, stage: StageEvents): Promise<number>
|
|
|
381
433
|
approval,
|
|
382
434
|
status,
|
|
383
435
|
});
|
|
384
|
-
await finish(ctx, p, report);
|
|
436
|
+
await finish(ctx, p, report, upload);
|
|
385
437
|
// The plan stage settles on its planning: an approval still to come is what it reports, not a stop.
|
|
386
438
|
events?.settle(settleOf(status), status === "plan-failed" ? "a member failed to plan" : undefined);
|
|
387
439
|
|
|
@@ -394,10 +446,10 @@ async function prPlan(ctx: CommandContext, stage: StageEvents): Promise<number>
|
|
|
394
446
|
return status === "plan-failed" ? 1 : 0;
|
|
395
447
|
}
|
|
396
448
|
|
|
397
|
-
/** chant components pr-apply --base <ref> [--pr <n>] [--env <env>] [--gate <name>] [--forge <kind>] [--require-review] [--output <dir>] [--json] [--events-json] */
|
|
449
|
+
/** chant components pr-apply --base <ref> [--pr <n>] [--env <env>] [--gate <name>] [--forge <kind>] [--require-review] [--output <dir>] [--json] [--events-json] [--report-url <url>] */
|
|
398
450
|
export function runComponentsPrApply(ctx: CommandContext): Promise<number> {
|
|
399
451
|
if (refusesEventsWithJson(ctx.args, "the stage's report")) return Promise.resolve(1);
|
|
400
|
-
return withStageEvents("pr-apply", (events) => prApply(ctx, events));
|
|
452
|
+
return withStageEvents("pr-apply", ctx, (events) => prApply(ctx, events));
|
|
401
453
|
}
|
|
402
454
|
|
|
403
455
|
async function prApply(ctx: CommandContext, stage: StageEvents): Promise<number> {
|
|
@@ -418,7 +470,8 @@ async function prApply(ctx: CommandContext, stage: StageEvents): Promise<number>
|
|
|
418
470
|
// The run id the release records carry, chosen before the run so that
|
|
419
471
|
// `--events-json` (#4041, #4007) names the run by it too.
|
|
420
472
|
const release = autoReleaseRun(`${op}-${Date.now()}`);
|
|
421
|
-
const
|
|
473
|
+
const upload = openUpload(stage, "apply", pr, p);
|
|
474
|
+
const events = await openCliRunEvents(args, { kind: "component", name: `pr-apply ${op}`, runId: release.runId, cwd: resolve(".") }, upload?.line);
|
|
422
475
|
stage.stream = events;
|
|
423
476
|
events?.emit({ type: "run-start", waves: p.plan.waves });
|
|
424
477
|
|
|
@@ -434,15 +487,28 @@ async function prApply(ctx: CommandContext, stage: StageEvents): Promise<number>
|
|
|
434
487
|
return fail(`--resume: could not read "${args.resume}": ${err instanceof Error ? err.message : String(err)}`);
|
|
435
488
|
}
|
|
436
489
|
}
|
|
437
|
-
|
|
490
|
+
// What each component would apply now (#4081): progress carries only where it is unchanged.
|
|
491
|
+
const inputsNow = resumePath ? componentInputDigests(p.components, { projectRoot: resolve("."), env: p.env }) : {};
|
|
492
|
+
const resumed = pr !== null && p.plan.order.length > 0 && attempt ? await tryResume(p, attempt, args.resume!, op, inputsNow) : undefined;
|
|
438
493
|
|
|
439
|
-
|
|
494
|
+
// The components an earlier attempt applied settle first (#4007), each in
|
|
495
|
+
// the wave the derivation gave it, which is the run-start's.
|
|
496
|
+
const log = applyLog();
|
|
497
|
+
if (resumed) {
|
|
498
|
+
const waveOf = new Map(p.plan.waves.flatMap((wave, i) => wave.map((name) => [name, i + 1] as const)));
|
|
499
|
+
for (const component of p.plan.order.filter((name) => resumed.completed.includes(name))) {
|
|
500
|
+
const body: RunEventComponentSettle = { type: "component-settle", wave: waveOf.get(component)!, component, status: "already-applied" };
|
|
501
|
+
events?.emit(body);
|
|
502
|
+
log(body);
|
|
503
|
+
}
|
|
504
|
+
emitResumedGate(events, op, p.gate, resumed.check);
|
|
505
|
+
}
|
|
440
506
|
const set = resumed?.set ?? (await planAll(p, events?.emit));
|
|
441
507
|
const base = { stage: "apply" as const, pr, env: p.env, ...(p.member ? { member: p.member } : {}), base: p.base, head: p.head, op, gate: p.gate, plan: p.plan, signal: p.signal, set };
|
|
442
508
|
|
|
443
509
|
const stop = async (report: PrReport, code: number, settle?: RunEventSettleStatus): Promise<number> => {
|
|
444
510
|
events?.settle(settle ?? settleOf(report.status), report.status === "plan-failed" || report.status === "failed" ? report.message ?? `pr-apply ${report.status}` : undefined);
|
|
445
|
-
await finish(ctx, p, report);
|
|
511
|
+
await finish(ctx, p, report, upload);
|
|
446
512
|
console.error((code === 0 ? formatInfo : (m: string) => formatWarning({ message: m }))(`pr-apply: ${report.status}${report.refusal ? ` (${report.refusal})` : ""}`));
|
|
447
513
|
if (report.message) console.error(report.message);
|
|
448
514
|
printMembers(report);
|
|
@@ -538,6 +604,9 @@ async function prApply(ctx: CommandContext, stage: StageEvents): Promise<number>
|
|
|
538
604
|
// one settles, so a run killed partway still knows what applied.
|
|
539
605
|
const prior = resumed ? { completed: resumed.completed, outputs: resumed.outputs } : { completed: [], outputs: {} };
|
|
540
606
|
const completedSoFar = new Set<string>(prior.completed);
|
|
607
|
+
const inputsSoFar: Record<string, string> = Object.fromEntries(
|
|
608
|
+
prior.completed.filter((name) => inputsNow[name] !== undefined).map((name) => [name, inputsNow[name]!]),
|
|
609
|
+
);
|
|
541
610
|
const failedSoFar: string[] = [];
|
|
542
611
|
const outputsSoFar: Record<string, Record<string, unknown>> = { ...prior.outputs };
|
|
543
612
|
const record: PrApplyRecord = {
|
|
@@ -557,6 +626,7 @@ async function prApply(ctx: CommandContext, stage: StageEvents): Promise<number>
|
|
|
557
626
|
completed: [...completedSoFar].sort(),
|
|
558
627
|
failed: [...failedSoFar].sort(),
|
|
559
628
|
outputs: outputsSoFar,
|
|
629
|
+
inputs: Object.fromEntries(Object.entries(inputsSoFar).sort(([a], [b]) => a.localeCompare(b))),
|
|
560
630
|
prApply: record,
|
|
561
631
|
});
|
|
562
632
|
};
|
|
@@ -569,13 +639,18 @@ async function prApply(ctx: CommandContext, stage: StageEvents): Promise<number>
|
|
|
569
639
|
env: p.env,
|
|
570
640
|
set,
|
|
571
641
|
...(resumed ? { resumed: prior } : {}),
|
|
572
|
-
// The apply is this run's waves, so the fan-out's own run framing is
|
|
573
|
-
|
|
642
|
+
// The apply is this run's waves, so the fan-out's own run framing is
|
|
643
|
+
// dropped. The log's lines go to stderr with or without --events-json.
|
|
644
|
+
onRunEvent: (body: RunEventBody) => {
|
|
645
|
+
events?.nested(body);
|
|
646
|
+
log(body);
|
|
647
|
+
},
|
|
574
648
|
...(resumePath
|
|
575
649
|
? {
|
|
576
650
|
onComponentSettled: (settled, outputs) => {
|
|
577
651
|
if (settled.status === "ok") {
|
|
578
652
|
completedSoFar.add(settled.component);
|
|
653
|
+
if (inputsNow[settled.component] !== undefined) inputsSoFar[settled.component] = inputsNow[settled.component]!;
|
|
579
654
|
if (outputs) outputsSoFar[settled.component] = outputs;
|
|
580
655
|
} else if (settled.status === "fail") {
|
|
581
656
|
failedSoFar.push(settled.component);
|
|
@@ -600,6 +675,37 @@ async function prApply(ctx: CommandContext, stage: StageEvents): Promise<number>
|
|
|
600
675
|
return code;
|
|
601
676
|
}
|
|
602
677
|
|
|
678
|
+
/** What a component's settle says in the job log. */
|
|
679
|
+
function settleWords(body: RunEventComponentSettle): string {
|
|
680
|
+
switch (body.status) {
|
|
681
|
+
case "ok":
|
|
682
|
+
return "applied";
|
|
683
|
+
case "failed":
|
|
684
|
+
return "failed";
|
|
685
|
+
case "gated":
|
|
686
|
+
return "stopped at its own gate";
|
|
687
|
+
case "waiting":
|
|
688
|
+
return "waiting on a decision";
|
|
689
|
+
case "blocked":
|
|
690
|
+
return `blocked by ${body.blockedBy ?? "a dependency"}, not run`;
|
|
691
|
+
case "already-applied":
|
|
692
|
+
return "already applied in an earlier attempt";
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* pr-apply's job log (#4007): a line on stderr as each wave starts and as
|
|
698
|
+
* each component settles, so the log shows the waves in order while they run.
|
|
699
|
+
*/
|
|
700
|
+
function applyLog(): (body: RunEventBody) => void {
|
|
701
|
+
let waves = 0;
|
|
702
|
+
return (body) => {
|
|
703
|
+
if (body.type === "run-start") waves = body.waves?.length ?? 0;
|
|
704
|
+
else if (body.type === "wave-start") console.error(formatInfo(`wave ${body.wave}${waves ? `/${waves}` : ""}: ${body.components.join(", ")}`));
|
|
705
|
+
else if (body.type === "component-settle") console.error(formatInfo(` ${body.component}: ${settleWords(body)}`));
|
|
706
|
+
};
|
|
707
|
+
}
|
|
708
|
+
|
|
603
709
|
/** A resumed apply's gate (#3464), decided against the approved digest, as the run's `gate` phase. */
|
|
604
710
|
function emitResumedGate(events: RunEventStream | undefined, op: string, gate: string, check: GateCheck): void {
|
|
605
711
|
if (!events) return;
|
|
@@ -658,8 +764,13 @@ interface Resumed {
|
|
|
658
764
|
* derivation; when its approval still stands; and when every member left is
|
|
659
765
|
* covered by the approved set. Otherwise it says why on stderr and the apply
|
|
660
766
|
* runs as it would with no record.
|
|
767
|
+
*
|
|
768
|
+
* Of the components it applied, only those whose input digest is the same
|
|
769
|
+
* now carry (#4081), as in `components fan-out --resume`. One that changed
|
|
770
|
+
* runs again, under the same approval when the approved set covers its new
|
|
771
|
+
* plan. A record without input digests carries nothing.
|
|
661
772
|
*/
|
|
662
|
-
async function tryResume(p: Prepared, attempt: FanOutAttempt, file: string, op: string): Promise<Resumed | undefined> {
|
|
773
|
+
async function tryResume(p: Prepared, attempt: FanOutAttempt, file: string, op: string, inputsNow: Record<string, string>): Promise<Resumed | undefined> {
|
|
663
774
|
const skip = (why: string): undefined => {
|
|
664
775
|
console.error(formatWarning({ message: `--resume: "${file}" does not carry: ${why}`, hint: "Every member is planned again, and the plan needs an approval of its own." }));
|
|
665
776
|
return undefined;
|
|
@@ -670,6 +781,11 @@ async function tryResume(p: Prepared, attempt: FanOutAttempt, file: string, op:
|
|
|
670
781
|
if (record.head !== p.head) return skip(`it records an apply of ${record.head.slice(0, 12)}, not ${p.head.slice(0, 12)}`);
|
|
671
782
|
if (!samePlanDigest(attempt.digest, p.plan.digest)) return skip("the change selects other components than it did");
|
|
672
783
|
if (attempt.completed.length === 0) return undefined;
|
|
784
|
+
const split = progressThatCarries(attempt, inputsNow);
|
|
785
|
+
if (split.unrecorded) return skip("it does not record what each component applied, since it was written before chant recorded component inputs");
|
|
786
|
+
for (const name of split.changed) console.error(formatInfo(`${name}: changed since the earlier attempt, so it runs again`));
|
|
787
|
+
if (split.carried.length === 0) return undefined;
|
|
788
|
+
const completed = split.carried;
|
|
673
789
|
|
|
674
790
|
let check;
|
|
675
791
|
try {
|
|
@@ -679,7 +795,7 @@ async function tryResume(p: Prepared, attempt: FanOutAttempt, file: string, op:
|
|
|
679
795
|
}
|
|
680
796
|
if (!check.satisfied) return skip(`no approval stands for the plan it applied (${record.digest}) any more`);
|
|
681
797
|
|
|
682
|
-
const outputs = Object.fromEntries(Object.entries(attempt.outputs).filter(([name]) =>
|
|
798
|
+
const outputs = Object.fromEntries(Object.entries(attempt.outputs).filter(([name]) => completed.includes(name)));
|
|
683
799
|
const resumed = await resumePrSet({
|
|
684
800
|
components: p.components,
|
|
685
801
|
plan: p.plan,
|
|
@@ -687,9 +803,9 @@ async function tryResume(p: Prepared, attempt: FanOutAttempt, file: string, op:
|
|
|
687
803
|
env: p.env,
|
|
688
804
|
seededOutputs: p.seededOutputs,
|
|
689
805
|
record,
|
|
690
|
-
completed
|
|
806
|
+
completed,
|
|
691
807
|
});
|
|
692
808
|
if (!resumed.ok) return skip(`what is left is not what was approved. ${resumed.reasons.join("; ")}`);
|
|
693
|
-
console.error(formatInfo(`resume : ${
|
|
694
|
-
return { plan: resumed.plan, set: resumed.set, check, approval: approvalOf(check), completed
|
|
809
|
+
console.error(formatInfo(`resume : ${completed.join(", ")} applied in an earlier attempt; applying ${resumed.plan.order.join(", ") || "nothing more"} under the approval of ${record.digest}`));
|
|
810
|
+
return { plan: resumed.plan, set: resumed.set, check, approval: approvalOf(check), completed, outputs };
|
|
695
811
|
}
|