@intentius/chant 0.124.27 → 0.124.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/__golden__/wave-loop/fan-out-gated.json +8 -0
- package/dist/__golden__/wave-loop/fan-out-no-members.json +4 -0
- package/dist/__golden__/wave-loop/fan-out-only.json +6 -0
- package/dist/__golden__/wave-loop/op-by-apply-hold.json +2 -0
- package/dist/__golden__/wave-loop/op-cost-member.json +3 -0
- package/dist/__golden__/wave-loop/op-held-on-before-apply.json +1 -0
- package/dist/__golden__/wave-loop/op-held-on.json +2 -0
- package/dist/__golden__/wave-loop/op-hooks-held.json +2 -0
- package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +2 -0
- package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +3 -0
- package/dist/__golden__/wave-loop/op-hooks-share.json +3 -0
- package/dist/__golden__/wave-loop/op-per-run.json +7 -0
- package/dist/__golden__/wave-loop/op-pr-review.json +7 -0
- package/dist/__golden__/wave-loop/op-sealed.json +3 -0
- package/dist/__golden__/wave-loop/op-spend.json +3 -0
- package/dist/__golden__/wave-loop/op-wave-commands.json +7 -0
- package/dist/__golden__/wave-loop/op-wide-waiting.json +4 -0
- package/dist/build-params.d.ts +34 -1
- package/dist/build-params.d.ts.map +1 -1
- package/dist/build-params.js +31 -1
- package/dist/change-set-graph.d.ts +63 -0
- package/dist/change-set-graph.d.ts.map +1 -0
- package/dist/change-set-graph.js +130 -0
- package/dist/change-set.d.ts +62 -3
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +36 -4
- package/dist/chant-version.d.ts +9 -0
- package/dist/chant-version.d.ts.map +1 -0
- package/dist/chant-version.js +16 -0
- package/dist/cli/build-params-cli.d.ts +7 -1
- package/dist/cli/build-params-cli.d.ts.map +1 -1
- package/dist/cli/build-params-cli.js +17 -8
- package/dist/cli/commands/build.d.ts +8 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +15 -11
- package/dist/cli/commands/check-lexicon-docs.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-docs.js +30 -2
- package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon.js +13 -2
- package/dist/cli/commands/init-lexicon/templates/docs.d.ts +4 -1
- package/dist/cli/commands/init-lexicon/templates/docs.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon/templates/docs.js +6 -6
- package/dist/cli/commands/init-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon.js +17 -8
- package/dist/cli/handlers/approve.d.ts.map +1 -1
- package/dist/cli/handlers/approve.js +64 -4
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +43 -4
- package/dist/cli/handlers/change-set.d.ts +10 -0
- package/dist/cli/handlers/change-set.d.ts.map +1 -1
- package/dist/cli/handlers/change-set.js +51 -1
- package/dist/cli/handlers/fan-out.d.ts +10 -1
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +54 -6
- package/dist/cli/handlers/lifecycle-gc.d.ts +19 -0
- package/dist/cli/handlers/lifecycle-gc.d.ts.map +1 -0
- package/dist/cli/handlers/lifecycle-gc.js +143 -0
- package/dist/cli/handlers/pr.d.ts +16 -2
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +269 -37
- package/dist/cli/handlers/promote.d.ts +7 -0
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +440 -28
- package/dist/cli/handlers/release.d.ts +91 -0
- package/dist/cli/handlers/release.d.ts.map +1 -0
- package/dist/cli/handlers/release.js +589 -0
- package/dist/cli/handlers/run.d.ts +38 -2
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/handlers/run.js +234 -16
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +143 -17
- package/dist/cli/mcp/workspace-tools.js +1 -1
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +73 -5
- package/dist/cli/registry.d.ts +43 -5
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/run-events.d.ts +30 -0
- package/dist/cli/run-events.d.ts.map +1 -0
- package/dist/cli/run-events.js +49 -0
- package/dist/cli/version.d.ts +3 -5
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +3 -13
- package/dist/codegen/docs-in-site.d.ts +71 -0
- package/dist/codegen/docs-in-site.d.ts.map +1 -0
- package/dist/codegen/docs-in-site.js +177 -0
- package/dist/codegen/docs-types.d.ts +14 -1
- package/dist/codegen/docs-types.d.ts.map +1 -1
- package/dist/codegen/docs.d.ts +18 -1
- package/dist/codegen/docs.d.ts.map +1 -1
- package/dist/codegen/docs.js +40 -7
- package/dist/codegen/rehype-base-url.mjs +15 -9
- package/dist/components/auto-release.d.ts +6 -1
- package/dist/components/auto-release.d.ts.map +1 -1
- package/dist/components/auto-release.js +3 -0
- package/dist/components/capability.d.ts +9 -0
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/cli-support.d.ts +6 -0
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/cli-support.js +10 -9
- package/dist/components/driver.d.ts +50 -9
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +116 -54
- package/dist/components/fan-out-inputs.d.ts +69 -0
- package/dist/components/fan-out-inputs.d.ts.map +1 -0
- package/dist/components/fan-out-inputs.js +169 -0
- package/dist/components/fan-out-record.d.ts +13 -0
- package/dist/components/fan-out-record.d.ts.map +1 -1
- package/dist/components/fan-out-record.js +16 -0
- package/dist/components/fan-out-run.d.ts +7 -0
- package/dist/components/fan-out-run.d.ts.map +1 -1
- package/dist/components/fan-out-run.js +85 -26
- package/dist/components/fan-out.d.ts +4 -0
- package/dist/components/fan-out.d.ts.map +1 -1
- package/dist/components/pr-pipeline.d.ts +25 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +22 -4
- package/dist/components/pr-run.d.ts +11 -0
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +20 -1
- package/dist/components/promote-order.d.ts +38 -0
- package/dist/components/promote-order.d.ts.map +1 -0
- package/dist/components/promote-order.js +62 -0
- package/dist/components/promote.d.ts +38 -2
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +77 -2
- package/dist/components/release-compile.d.ts +142 -0
- package/dist/components/release-compile.d.ts.map +1 -0
- package/dist/components/release-compile.js +382 -0
- package/dist/components/release-gate.d.ts +135 -0
- package/dist/components/release-gate.d.ts.map +1 -0
- package/dist/components/release-gate.js +288 -0
- package/dist/components/release-promote.d.ts +96 -0
- package/dist/components/release-promote.d.ts.map +1 -0
- package/dist/components/release-promote.js +204 -0
- package/dist/components/run-progress.d.ts +7 -0
- package/dist/components/run-progress.d.ts.map +1 -1
- package/dist/components/wave-plan.d.ts +8 -1
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +11 -3
- package/dist/config.d.ts +45 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/flag-params.d.ts +54 -0
- package/dist/flag-params.d.ts.map +1 -0
- package/dist/flag-params.js +130 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/lifecycle/__fixtures__/publish-fakes.d.ts +120 -0
- package/dist/lifecycle/__fixtures__/publish-fakes.d.ts.map +1 -0
- package/dist/lifecycle/__fixtures__/publish-fakes.js +304 -0
- package/dist/lifecycle/change-set-store.d.ts +68 -0
- package/dist/lifecycle/change-set-store.d.ts.map +1 -0
- package/dist/lifecycle/change-set-store.js +97 -0
- package/dist/lifecycle/commit-sha.d.ts +13 -0
- package/dist/lifecycle/commit-sha.d.ts.map +1 -0
- package/dist/lifecycle/commit-sha.js +21 -0
- package/dist/lifecycle/delivery-metrics.d.ts +139 -0
- package/dist/lifecycle/delivery-metrics.d.ts.map +1 -0
- package/dist/lifecycle/delivery-metrics.js +145 -0
- package/dist/lifecycle/deploy-outcome.d.ts +81 -0
- package/dist/lifecycle/deploy-outcome.d.ts.map +1 -0
- package/dist/lifecycle/deploy-outcome.js +101 -0
- package/dist/lifecycle/gate-change-set.d.ts +78 -0
- package/dist/lifecycle/gate-change-set.d.ts.map +1 -0
- package/dist/lifecycle/gate-change-set.js +138 -0
- package/dist/lifecycle/gate-ledger.d.ts +51 -4
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +18 -0
- package/dist/lifecycle/git.d.ts +30 -1
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/git.js +31 -5
- package/dist/lifecycle/index.d.ts +4 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +4 -0
- package/dist/lifecycle/mixed-environment.d.ts +95 -0
- package/dist/lifecycle/mixed-environment.d.ts.map +1 -0
- package/dist/lifecycle/mixed-environment.js +154 -0
- package/dist/lifecycle/publish-attachments.d.ts +79 -0
- package/dist/lifecycle/publish-attachments.d.ts.map +1 -0
- package/dist/lifecycle/publish-attachments.js +179 -0
- package/dist/lifecycle/publish-credentials.d.ts +37 -0
- package/dist/lifecycle/publish-credentials.d.ts.map +1 -0
- package/dist/lifecycle/publish-credentials.js +69 -0
- package/dist/lifecycle/publish-declaration.d.ts +97 -0
- package/dist/lifecycle/publish-declaration.d.ts.map +1 -0
- package/dist/lifecycle/publish-declaration.js +83 -0
- package/dist/lifecycle/publish-forge.d.ts +53 -0
- package/dist/lifecycle/publish-forge.d.ts.map +1 -0
- package/dist/lifecycle/publish-forge.js +298 -0
- package/dist/lifecycle/publish-npm.d.ts +61 -0
- package/dist/lifecycle/publish-npm.d.ts.map +1 -0
- package/dist/lifecycle/publish-npm.js +242 -0
- package/dist/lifecycle/publish-oci.d.ts +64 -0
- package/dist/lifecycle/publish-oci.d.ts.map +1 -0
- package/dist/lifecycle/publish-oci.js +383 -0
- package/dist/lifecycle/publish-record.d.ts +66 -0
- package/dist/lifecycle/publish-record.d.ts.map +1 -0
- package/dist/lifecycle/publish-record.js +84 -0
- package/dist/lifecycle/publish-targets.d.ts +45 -0
- package/dist/lifecycle/publish-targets.d.ts.map +1 -0
- package/dist/lifecycle/publish-targets.js +85 -0
- package/dist/lifecycle/release-cut.d.ts +154 -0
- package/dist/lifecycle/release-cut.d.ts.map +1 -0
- package/dist/lifecycle/release-cut.js +366 -0
- package/dist/lifecycle/release-join.d.ts +95 -0
- package/dist/lifecycle/release-join.d.ts.map +1 -0
- package/dist/lifecycle/release-join.js +139 -0
- package/dist/lifecycle/release-ledger.d.ts +54 -0
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.js +53 -20
- package/dist/lifecycle/release-publish.d.ts +312 -0
- package/dist/lifecycle/release-publish.d.ts.map +1 -0
- package/dist/lifecycle/release-publish.js +335 -0
- package/dist/lifecycle/release-revocation.d.ts +80 -0
- package/dist/lifecycle/release-revocation.d.ts.map +1 -0
- package/dist/lifecycle/release-revocation.js +123 -0
- package/dist/lifecycle/release-store.d.ts +200 -0
- package/dist/lifecycle/release-store.d.ts.map +1 -0
- package/dist/lifecycle/release-store.js +320 -0
- package/dist/lifecycle/release-verify.d.ts +61 -0
- package/dist/lifecycle/release-verify.d.ts.map +1 -0
- package/dist/lifecycle/release-verify.js +92 -0
- package/dist/lifecycle/release-workstation.d.ts +91 -0
- package/dist/lifecycle/release-workstation.d.ts.map +1 -0
- package/dist/lifecycle/release-workstation.js +180 -0
- package/dist/lifecycle/retention-policy.d.ts +45 -0
- package/dist/lifecycle/retention-policy.d.ts.map +1 -0
- package/dist/lifecycle/retention-policy.js +43 -0
- package/dist/lifecycle/retention.d.ts +185 -0
- package/dist/lifecycle/retention.d.ts.map +1 -0
- package/dist/lifecycle/retention.js +400 -0
- package/dist/lifecycle/run-ledger.d.ts +4 -0
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +2 -0
- package/dist/op/activities/change-coverage.d.ts.map +1 -1
- package/dist/op/activities/change-coverage.js +4 -2
- package/dist/op/activities/source-release.d.ts.map +1 -1
- package/dist/op/activities/source-release.js +7 -3
- package/dist/op/activities/source-rollback.d.ts.map +1 -1
- package/dist/op/activities/source-rollback.js +7 -3
- package/dist/op/gate-name.d.ts +11 -2
- package/dist/op/gate-name.d.ts.map +1 -1
- package/dist/op/gate-name.js +12 -3
- package/dist/op/gate-run-locator.d.ts +22 -0
- package/dist/op/gate-run-locator.d.ts.map +1 -1
- package/dist/op/gate-run-locator.js +31 -0
- package/dist/op/gate.d.ts +27 -3
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +57 -3
- package/dist/op/local-executor.d.ts +36 -1
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +158 -52
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +4 -0
- package/dist/op/run-live.d.ts +2 -0
- package/dist/op/run-live.d.ts.map +1 -1
- package/dist/op/run-live.js +1 -1
- package/dist/op/runtime.d.ts +46 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/runtimes/local.d.ts.map +1 -1
- package/dist/op/runtimes/local.js +8 -0
- package/dist/plan-summary.d.ts.map +1 -1
- package/dist/plan-summary.js +8 -2
- package/dist/point-decision.d.ts +2 -0
- package/dist/point-decision.d.ts.map +1 -1
- package/dist/point-decision.js +9 -2
- package/dist/pr-loop.d.ts +7 -0
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +23 -4
- package/dist/pr-report-url.d.ts +82 -0
- package/dist/pr-report-url.d.ts.map +1 -0
- package/dist/pr-report-url.js +174 -0
- package/dist/provenance.d.ts +2 -2
- package/dist/provenance.d.ts.map +1 -1
- package/dist/run-event-store.d.ts +104 -0
- package/dist/run-event-store.d.ts.map +1 -0
- package/dist/run-event-store.js +251 -0
- package/dist/run-event-stream.d.ts +133 -0
- package/dist/run-event-stream.d.ts.map +1 -0
- package/dist/run-event-stream.js +242 -0
- package/dist/run-event.d.ts +285 -0
- package/dist/run-event.d.ts.map +1 -0
- package/dist/run-event.js +209 -0
- package/dist/wave-runtime.mjs +262 -226
- package/dist/workspace/__fixtures__/flag-workspace.d.ts +31 -0
- package/dist/workspace/__fixtures__/flag-workspace.d.ts.map +1 -0
- package/dist/workspace/__fixtures__/flag-workspace.js +114 -0
- package/dist/workspace/__fixtures__/run-event-check.d.ts +19 -0
- package/dist/workspace/__fixtures__/run-event-check.d.ts.map +1 -0
- package/dist/workspace/__fixtures__/run-event-check.js +59 -0
- package/dist/workspace/change-set-show.d.ts +56 -0
- package/dist/workspace/change-set-show.d.ts.map +1 -0
- package/dist/workspace/change-set-show.js +54 -0
- package/dist/workspace/change-set-show.schema.json +102 -0
- package/dist/workspace/change-set.schema.json +32 -1
- package/dist/workspace/changes-cli.d.ts.map +1 -1
- package/dist/workspace/changes-cli.js +10 -1
- package/dist/workspace/changes.d.ts +37 -0
- package/dist/workspace/changes.d.ts.map +1 -1
- package/dist/workspace/changes.js +49 -2
- package/dist/workspace/changes.schema.json +135 -0
- package/dist/workspace/check.schema.json +4 -2
- package/dist/workspace/checks/records.d.ts +9 -1
- package/dist/workspace/checks/records.d.ts.map +1 -1
- package/dist/workspace/checks/records.js +35 -1
- package/dist/workspace/checks.d.ts +1 -0
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +2 -1
- package/dist/workspace/ci-green-cli.d.ts +19 -4
- package/dist/workspace/ci-green-cli.d.ts.map +1 -1
- package/dist/workspace/ci-green-cli.js +75 -12
- package/dist/workspace/ci-green-forge.d.ts +20 -3
- package/dist/workspace/ci-green-forge.d.ts.map +1 -1
- package/dist/workspace/ci-green-forge.js +6 -4
- package/dist/workspace/ci-green-workflow.d.ts +11 -0
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +6 -0
- package/dist/workspace/ci-green.d.ts +281 -13
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +456 -38
- package/dist/workspace/ci-last-green.schema.json +32 -2
- package/dist/workspace/ci-list.schema.json +525 -0
- package/dist/workspace/commit-links.d.ts +85 -0
- package/dist/workspace/commit-links.d.ts.map +1 -0
- package/dist/workspace/commit-links.js +163 -0
- package/dist/workspace/declaration.d.ts +35 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +27 -1
- package/dist/workspace/declaration.schema.json +76 -0
- package/dist/workspace/declared-kinds.d.ts +16 -0
- package/dist/workspace/declared-kinds.d.ts.map +1 -1
- package/dist/workspace/declared-kinds.js +25 -0
- package/dist/workspace/delivery-metrics.d.ts +91 -0
- package/dist/workspace/delivery-metrics.d.ts.map +1 -0
- package/dist/workspace/delivery-metrics.js +217 -0
- package/dist/workspace/delivery-metrics.schema.json +519 -0
- package/dist/workspace/flags-read.d.ts +37 -0
- package/dist/workspace/flags-read.d.ts.map +1 -0
- package/dist/workspace/flags-read.js +103 -0
- package/dist/workspace/flags.d.ts +100 -0
- package/dist/workspace/flags.d.ts.map +1 -0
- package/dist/workspace/flags.js +98 -0
- package/dist/workspace/graph-cli.js +1 -1
- package/dist/workspace/identity-gate-rule.d.ts +37 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -1
- package/dist/workspace/identity-gate-rule.js +72 -7
- package/dist/workspace/identity.d.ts +12 -0
- package/dist/workspace/identity.d.ts.map +1 -1
- package/dist/workspace/identity.js +13 -1
- package/dist/workspace/intent-cli.d.ts +11 -2
- package/dist/workspace/intent-cli.d.ts.map +1 -1
- package/dist/workspace/intent-cli.js +54 -5
- package/dist/workspace/intent-trace.d.ts +219 -0
- package/dist/workspace/intent-trace.d.ts.map +1 -0
- package/dist/workspace/intent-trace.js +314 -0
- package/dist/workspace/intent.d.ts +36 -7
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +192 -22
- package/dist/workspace/intent.schema.json +702 -6
- package/dist/workspace/ls.d.ts +4 -0
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +2 -0
- package/dist/workspace/ls.schema.json +3 -1
- package/dist/workspace/member-pipeline.d.ts +6 -0
- package/dist/workspace/member-pipeline.d.ts.map +1 -1
- package/dist/workspace/member-pipeline.js +6 -0
- package/dist/workspace/overlap.d.ts +146 -0
- package/dist/workspace/overlap.d.ts.map +1 -0
- package/dist/workspace/overlap.js +276 -0
- package/dist/workspace/promotion-order.d.ts +41 -0
- package/dist/workspace/promotion-order.d.ts.map +1 -0
- package/dist/workspace/promotion-order.js +95 -0
- package/dist/workspace/reason-codes.d.ts +4 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +7 -1
- package/dist/workspace/records.d.ts +15 -2
- package/dist/workspace/records.d.ts.map +1 -1
- package/dist/workspace/records.js +32 -0
- package/dist/workspace/records.schema.json +21 -2
- package/dist/workspace/reference-kinds/flag/flag.kind.mjs +32 -0
- package/dist/workspace/reference-kinds/flag/flag.schema.json +53 -0
- package/dist/workspace/releases.d.ts +81 -0
- package/dist/workspace/releases.d.ts.map +1 -0
- package/dist/workspace/releases.js +103 -0
- package/dist/workspace/releases.schema.json +513 -0
- package/dist/workspace/run-event.schema.json +295 -0
- package/dist/workspace/status-gates.d.ts +34 -1
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status-gates.js +31 -2
- package/dist/workspace/status-stewards.d.ts +4 -0
- package/dist/workspace/status-stewards.d.ts.map +1 -1
- package/dist/workspace/status-stewards.js +2 -0
- package/dist/workspace/status.d.ts +117 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +218 -4
- package/dist/workspace/status.schema.json +268 -2
- package/dist/workspace/trust/ci-tag-statement.d.ts +102 -0
- package/dist/workspace/trust/ci-tag-statement.d.ts.map +1 -0
- package/dist/workspace/trust/ci-tag-statement.js +123 -0
- package/dist/workspace/trust/op-run-statement.d.ts +91 -0
- package/dist/workspace/trust/op-run-statement.d.ts.map +1 -0
- package/dist/workspace/trust/op-run-statement.js +143 -0
- package/dist/workspace/trust/rotation.d.ts +18 -2
- package/dist/workspace/trust/rotation.d.ts.map +1 -1
- package/dist/workspace/trust/rotation.js +65 -16
- package/dist/workspace/trust/seal.d.ts +11 -0
- package/dist/workspace/trust/seal.d.ts.map +1 -1
- package/dist/workspace/trust/seal.js +9 -0
- package/dist/workspace/trust/ssh-commit.d.ts.map +1 -1
- package/dist/workspace/trust/ssh-commit.js +10 -10
- package/dist/workspace/wip.d.ts.map +1 -1
- package/dist/workspace/wip.js +11 -3
- package/package.json +1 -1
- package/src/__golden__/wave-loop/fan-out-gated.json +8 -0
- package/src/__golden__/wave-loop/fan-out-no-members.json +4 -0
- package/src/__golden__/wave-loop/fan-out-only.json +6 -0
- package/src/__golden__/wave-loop/op-by-apply-hold.json +2 -0
- package/src/__golden__/wave-loop/op-cost-member.json +3 -0
- package/src/__golden__/wave-loop/op-held-on-before-apply.json +1 -0
- package/src/__golden__/wave-loop/op-held-on.json +2 -0
- package/src/__golden__/wave-loop/op-hooks-held.json +2 -0
- package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +2 -0
- package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +3 -0
- package/src/__golden__/wave-loop/op-hooks-share.json +3 -0
- package/src/__golden__/wave-loop/op-per-run.json +7 -0
- package/src/__golden__/wave-loop/op-pr-review.json +7 -0
- package/src/__golden__/wave-loop/op-sealed.json +3 -0
- package/src/__golden__/wave-loop/op-spend.json +3 -0
- package/src/__golden__/wave-loop/op-wave-commands.json +7 -0
- package/src/__golden__/wave-loop/op-wide-waiting.json +4 -0
- package/src/build-params.test.ts +46 -0
- package/src/build-params.ts +55 -1
- package/src/change-set-graph.test.ts +72 -0
- package/src/change-set-graph.ts +141 -0
- package/src/change-set.ts +87 -6
- package/src/chant-version.ts +16 -0
- package/src/cli/build-params-cli.ts +22 -9
- package/src/cli/commands/build.ts +25 -11
- package/src/cli/commands/check-lexicon-docs.test.ts +51 -0
- package/src/cli/commands/check-lexicon-docs.ts +39 -2
- package/src/cli/commands/check-lexicon.ts +14 -2
- package/src/cli/commands/init-lexicon/templates/docs.ts +7 -6
- package/src/cli/commands/init-lexicon.test.ts +25 -0
- package/src/cli/commands/init-lexicon.ts +18 -8
- package/src/cli/handlers/approve-release.test.ts +84 -0
- package/src/cli/handlers/approve-revoked.test.ts +155 -0
- package/src/cli/handlers/approve.ts +65 -2
- package/src/cli/handlers/build.test.ts +67 -0
- package/src/cli/handlers/build.ts +46 -4
- package/src/cli/handlers/change-set.ts +49 -1
- package/src/cli/handlers/fan-out.test.ts +228 -1
- package/src/cli/handlers/fan-out.ts +53 -6
- package/src/cli/handlers/intent-trace.e2e.test.ts +201 -0
- package/src/cli/handlers/lifecycle-gc.test.ts +126 -0
- package/src/cli/handlers/lifecycle-gc.ts +146 -0
- package/src/cli/handlers/operator.test.ts +37 -0
- package/src/cli/handlers/pr.test.ts +341 -0
- package/src/cli/handlers/pr.ts +292 -47
- package/src/cli/handlers/promote.test.ts +669 -7
- package/src/cli/handlers/promote.ts +464 -29
- package/src/cli/handlers/release-implicit.e2e.test.ts +161 -0
- package/src/cli/handlers/release-join.e2e.test.ts +185 -0
- package/src/cli/handlers/release-publish-targets.e2e.test.ts +295 -0
- package/src/cli/handlers/release-verify.e2e.test.ts +117 -0
- package/src/cli/handlers/release-workstation-ci.e2e.test.ts +135 -0
- package/src/cli/handlers/release.e2e.test.ts +199 -0
- package/src/cli/handlers/release.ts +593 -0
- package/src/cli/handlers/run-auto-release.test.ts +80 -0
- package/src/cli/handlers/run-events-cmd.test.ts +92 -0
- package/src/cli/handlers/run-release.test.ts +55 -0
- package/src/cli/handlers/run.test.ts +30 -0
- package/src/cli/handlers/run.ts +243 -18
- package/src/cli/main.test.ts +8 -0
- package/src/cli/main.ts +143 -17
- package/src/cli/mcp/never-over-mcp.test.ts +2 -0
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/cli/parse-args.ts +56 -5
- package/src/cli/registry.ts +43 -5
- package/src/cli/run-events.ts +57 -0
- package/src/cli/version.ts +3 -13
- package/src/codegen/docs-in-site.test.ts +166 -0
- package/src/codegen/docs-in-site.ts +182 -0
- package/src/codegen/docs-site/AgentPrompt.astro +26 -1
- package/src/codegen/docs-types.ts +14 -1
- package/src/codegen/docs.ts +60 -7
- package/src/codegen/rehype-base-url.d.mts +3 -1
- package/src/codegen/rehype-base-url.mjs +15 -9
- package/src/codegen/rehype-base-url.test.ts +34 -0
- package/src/components/auto-release.test.ts +30 -0
- package/src/components/auto-release.ts +9 -1
- package/src/components/capability.ts +9 -0
- package/src/components/cli-support.test.ts +82 -0
- package/src/components/cli-support.ts +16 -9
- package/src/components/driver.test.ts +24 -0
- package/src/components/driver.ts +165 -56
- package/src/components/fan-out-inputs.test.ts +85 -0
- package/src/components/fan-out-inputs.ts +192 -0
- package/src/components/fan-out-record.test.ts +10 -0
- package/src/components/fan-out-record.ts +19 -0
- package/src/components/fan-out-run.ts +104 -35
- package/src/components/fan-out.ts +4 -0
- package/src/components/pr-pipeline.ts +35 -4
- package/src/components/pr-run.ts +30 -1
- package/src/components/promote-order.test.ts +90 -0
- package/src/components/promote-order.ts +75 -0
- package/src/components/promote.test.ts +10 -1
- package/src/components/promote.ts +94 -3
- package/src/components/release-compile.test.ts +147 -0
- package/src/components/release-compile.ts +459 -0
- package/src/components/release-gate.test.ts +215 -0
- package/src/components/release-gate.ts +355 -0
- package/src/components/release-promote.test.ts +159 -0
- package/src/components/release-promote.ts +232 -0
- package/src/components/run-progress.ts +7 -0
- package/src/components/wave-plan.ts +16 -3
- package/src/config.ts +15 -1
- package/src/flag-params.test.ts +144 -0
- package/src/flag-params.ts +134 -0
- package/src/index.ts +2 -0
- package/src/lifecycle/__fixtures__/publish-fakes.ts +351 -0
- package/src/lifecycle/change-set-store.test.ts +217 -0
- package/src/lifecycle/change-set-store.ts +113 -0
- package/src/lifecycle/commit-sha.ts +23 -0
- package/src/lifecycle/delivery-metrics.ts +263 -0
- package/src/lifecycle/deploy-outcome.ts +147 -0
- package/src/lifecycle/gate-change-set.e2e.test.ts +122 -0
- package/src/lifecycle/gate-change-set.ts +164 -0
- package/src/lifecycle/gate-ledger.test.ts +33 -0
- package/src/lifecycle/gate-ledger.ts +68 -3
- package/src/lifecycle/git.ts +61 -8
- package/src/lifecycle/index.ts +4 -0
- package/src/lifecycle/mixed-environment.test.ts +97 -0
- package/src/lifecycle/mixed-environment.ts +204 -0
- package/src/lifecycle/publish-attachments.ts +196 -0
- package/src/lifecycle/publish-credentials.ts +84 -0
- package/src/lifecycle/publish-declaration.ts +95 -0
- package/src/lifecycle/publish-forge.ts +325 -0
- package/src/lifecycle/publish-npm.ts +259 -0
- package/src/lifecycle/publish-oci.ts +396 -0
- package/src/lifecycle/publish-record.ts +113 -0
- package/src/lifecycle/publish-resume.test.ts +168 -0
- package/src/lifecycle/publish-targets.test.ts +494 -0
- package/src/lifecycle/publish-targets.ts +100 -0
- package/src/lifecycle/release-cut-signed.test.ts +180 -0
- package/src/lifecycle/release-cut.test.ts +483 -0
- package/src/lifecycle/release-cut.ts +503 -0
- package/src/lifecycle/release-flag.test.ts +112 -0
- package/src/lifecycle/release-join.test.ts +68 -0
- package/src/lifecycle/release-join.ts +182 -0
- package/src/lifecycle/release-ledger.test.ts +14 -0
- package/src/lifecycle/release-ledger.ts +85 -17
- package/src/lifecycle/release-publish.test.ts +225 -0
- package/src/lifecycle/release-publish.ts +568 -0
- package/src/lifecycle/release-revocation.ts +147 -0
- package/src/lifecycle/release-store.ts +434 -0
- package/src/lifecycle/release-verify.test.ts +110 -0
- package/src/lifecycle/release-verify.ts +120 -0
- package/src/lifecycle/release-workstation.test.ts +204 -0
- package/src/lifecycle/release-workstation.ts +216 -0
- package/src/lifecycle/retention-growth.e2e.test.ts +279 -0
- package/src/lifecycle/retention-policy.ts +63 -0
- package/src/lifecycle/retention.test.ts +363 -0
- package/src/lifecycle/retention.ts +508 -0
- package/src/lifecycle/run-ledger.test.ts +10 -0
- package/src/lifecycle/run-ledger.ts +6 -0
- package/src/op/activities/change-coverage.ts +4 -1
- package/src/op/activities/source-release.ts +8 -3
- package/src/op/activities/source-rollback.ts +8 -4
- package/src/op/commit-run-gate-deploy-join.test.ts +117 -0
- package/src/op/gate-name.ts +13 -3
- package/src/op/gate-release.test.ts +126 -0
- package/src/op/gate-run-locator.test.ts +110 -0
- package/src/op/gate-run-locator.ts +35 -0
- package/src/op/gate.ts +88 -6
- package/src/op/local-executor.ts +207 -52
- package/src/op/op-waves-run.ts +4 -0
- package/src/op/run-events.test.ts +166 -0
- package/src/op/run-live.ts +1 -1
- package/src/op/runtime.ts +39 -0
- package/src/op/runtimes/local.test.ts +16 -0
- package/src/op/runtimes/local.ts +9 -0
- package/src/plan-summary.test.ts +20 -0
- package/src/plan-summary.ts +8 -1
- package/src/point-decision.ts +12 -2
- package/src/pr-loop.ts +25 -4
- package/src/pr-report-url.test.ts +131 -0
- package/src/pr-report-url.ts +209 -0
- package/src/provenance.ts +2 -2
- package/src/run-event-store.test.ts +144 -0
- package/src/run-event-store.ts +273 -0
- package/src/run-event-stream.test.ts +175 -0
- package/src/run-event-stream.ts +309 -0
- package/src/run-event.test.ts +277 -0
- package/src/run-event.ts +471 -0
- package/src/wave-loop-golden.test.ts +9 -0
- package/src/workspace/__fixtures__/flag-workspace.ts +132 -0
- package/src/workspace/__fixtures__/older-records/change-set-984534ea9.json +100 -0
- package/src/workspace/__fixtures__/older-records/older-records.json +326 -0
- package/src/workspace/__fixtures__/run-event-check.ts +58 -0
- package/src/workspace/ancestry-index.test.ts +93 -0
- package/src/workspace/change-set-show.schema.json +102 -0
- package/src/workspace/change-set-show.ts +72 -0
- package/src/workspace/change-set.schema.json +32 -1
- package/src/workspace/changes-cli.ts +10 -1
- package/src/workspace/changes.schema.json +135 -0
- package/src/workspace/changes.test.ts +1 -1
- package/src/workspace/changes.ts +84 -2
- package/src/workspace/check.schema.json +4 -2
- package/src/workspace/checks/records.ts +35 -1
- package/src/workspace/checks.ts +2 -1
- package/src/workspace/ci-green-cli.ts +75 -13
- package/src/workspace/ci-green-forge.ts +24 -4
- package/src/workspace/ci-green-runs.test.ts +242 -0
- package/src/workspace/ci-green-signed.test.ts +302 -0
- package/src/workspace/ci-green-workflow.test.ts +16 -0
- package/src/workspace/ci-green-workflow.ts +12 -0
- package/src/workspace/ci-green.test.ts +131 -2
- package/src/workspace/ci-green.ts +635 -42
- package/src/workspace/ci-last-green.schema.json +32 -2
- package/src/workspace/ci-list.schema.json +525 -0
- package/src/workspace/commit-links.test.ts +279 -0
- package/src/workspace/commit-links.ts +183 -0
- package/src/workspace/declaration.schema.json +76 -0
- package/src/workspace/declaration.test.ts +28 -0
- package/src/workspace/declaration.ts +60 -2
- package/src/workspace/declared-kinds.ts +40 -1
- package/src/workspace/delivery-metrics.schema.json +519 -0
- package/src/workspace/delivery-metrics.test.ts +236 -0
- package/src/workspace/delivery-metrics.ts +286 -0
- package/src/workspace/flags-read.ts +121 -0
- package/src/workspace/flags.test.ts +141 -0
- package/src/workspace/flags.ts +157 -0
- package/src/workspace/graph-cli.ts +1 -1
- package/src/workspace/identity-gate-rule.ts +91 -7
- package/src/workspace/identity.ts +14 -1
- package/src/workspace/intent-cli.ts +46 -5
- package/src/workspace/intent-trace.test.ts +173 -0
- package/src/workspace/intent-trace.ts +484 -0
- package/src/workspace/intent.schema.json +702 -6
- package/src/workspace/intent.ts +196 -26
- package/src/workspace/ls.schema.json +3 -1
- package/src/workspace/ls.ts +6 -0
- package/src/workspace/member-pipeline.test.ts +17 -0
- package/src/workspace/member-pipeline.ts +9 -0
- package/src/workspace/older-records.test.ts +412 -0
- package/src/workspace/overlap.test.ts +165 -0
- package/src/workspace/overlap.ts +340 -0
- package/src/workspace/promotion-order.ts +97 -0
- package/src/workspace/read-contract.e2e.test.ts +5 -1
- package/src/workspace/reason-codes.test.ts +7 -1
- package/src/workspace/reason-codes.ts +7 -1
- package/src/workspace/record-assets.test.ts +2 -1
- package/src/workspace/records-contract.e2e.test.ts +2 -1
- package/src/workspace/records.schema.json +21 -2
- package/src/workspace/records.ts +36 -2
- package/src/workspace/reference-kinds/flag/flag.kind.mjs +32 -0
- package/src/workspace/reference-kinds/flag/flag.schema.json +53 -0
- package/src/workspace/releases.schema.json +513 -0
- package/src/workspace/releases.test.ts +108 -0
- package/src/workspace/releases.ts +133 -0
- package/src/workspace/run-event.schema.json +295 -0
- package/src/workspace/status-contract.test.ts +81 -1
- package/src/workspace/status-gates.ts +64 -1
- package/src/workspace/status-mixed.test.ts +152 -0
- package/src/workspace/status-revoked.test.ts +153 -0
- package/src/workspace/status-stewards.ts +6 -0
- package/src/workspace/status.schema.json +268 -2
- package/src/workspace/status.ts +334 -4
- package/src/workspace/trust/ci-tag-statement.ts +151 -0
- package/src/workspace/trust/op-run-statement.ts +148 -0
- package/src/workspace/trust/rotation.ts +61 -14
- package/src/workspace/trust/seal.ts +10 -0
- package/src/workspace/trust/ssh-commit.ts +10 -9
- package/src/workspace/wip.ts +11 -2
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/astro.config.mjs +0 -14
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/package.json +0 -16
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/src/content/docs/index.mdx +0 -8
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/src/content.config.ts +0 -15
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/tsconfig.json +0 -10
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The run-event contract (#4019, behold #678): one stream of events for Op
|
|
3
|
+
* runs, component runs and pipeline runs, so anything that shows a run reads
|
|
4
|
+
* the same fields wherever the run happened.
|
|
5
|
+
*
|
|
6
|
+
* `workspace/run-event.schema.json` is the contract. These types
|
|
7
|
+
* mirror it, and {@link createRunEventWriter} and {@link writeRunEvent} are
|
|
8
|
+
* the one writer: every emitter hands a writer the type-specific body and
|
|
9
|
+
* the writer stamps the run's identity, the sequence number, the time and the
|
|
10
|
+
* contract fields on it, then writes one JSON line. The emitters themselves
|
|
11
|
+
* are in `./run-event-stream.ts` and the runtimes (#4041); the files
|
|
12
|
+
* they are kept in, replay and `--follow` are `./run-event-store.ts` (#4042).
|
|
13
|
+
*
|
|
14
|
+
* Two older streams predate this one and keep their shape behind
|
|
15
|
+
* `--progress-json`, while `--events-json` prints this one (#4041):
|
|
16
|
+
* `RunProgressEvent` (`./components/run-progress.ts`, from `chant run
|
|
17
|
+
* --components --progress-json`) and the Op path's `StepRecord` lines
|
|
18
|
+
* (`./op/local-executor.ts`, from `chant run <op> --progress-json`).
|
|
19
|
+
* {@link runEventOfProgress} and {@link runEventsOfStepRecord} say how each
|
|
20
|
+
* maps onto this contract.
|
|
21
|
+
*
|
|
22
|
+
* This module imports no runtime code beyond the chant version (`./chant-version.ts`), so a consumer
|
|
23
|
+
* can import the types and the writer without loading the rest of chant. It
|
|
24
|
+
* lives outside `workspace/` so that a level-0 import of `@intentius/chant`
|
|
25
|
+
* loads no workspace module (#2526).
|
|
26
|
+
*/
|
|
27
|
+
import type { RunProgressEvent } from "./components/run-progress.js";
|
|
28
|
+
import type { RunOrigin } from "./lifecycle/release-ledger.js";
|
|
29
|
+
import type { StepRecord } from "./op/local-executor.js";
|
|
30
|
+
/** The schema's `$id`, which every event carries as `$schema`. */
|
|
31
|
+
export declare const RUN_EVENT_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/run-event/v1/run-event.schema.json";
|
|
32
|
+
/** The contract version every event carries as `contract`. */
|
|
33
|
+
export declare const RUN_EVENT_CONTRACT_VERSION = 1;
|
|
34
|
+
/** The first chant that writes contract version 1 of the run-event stream. */
|
|
35
|
+
export declare const RUN_EVENT_FLOOR = "0.124.28";
|
|
36
|
+
/** What ran: an Op, a component selection (`chant run --components`), or a CI pipeline. */
|
|
37
|
+
export type RunEventKind = "op" | "component" | "pipeline";
|
|
38
|
+
/** Where the run happened: in the process that started it, on a steward, or in a forge's CI. */
|
|
39
|
+
export type RunEventRuntime = "local" | "steward" | "ci";
|
|
40
|
+
/** How a run, wave, component or phase settled. `gated` and `waiting` wait on a person and are not failures. */
|
|
41
|
+
export type RunEventSettleStatus = "ok" | "failed" | "gated" | "waiting";
|
|
42
|
+
/**
|
|
43
|
+
* How a step settled. `skipped` says why in {@link RunEventStepSettle.skip};
|
|
44
|
+
* `cached` is for a cache hit standing in for the step (#4015).
|
|
45
|
+
*/
|
|
46
|
+
export type RunEventStepStatus = "ok" | "failed" | "skipped" | "cached" | "gated" | "waiting";
|
|
47
|
+
/** Why a step was skipped. */
|
|
48
|
+
export type RunEventSkipReason = "receipt" | "resumed" | "refused" | "not-run";
|
|
49
|
+
/** How a gate's approval passed, when it was more than one person's approval of that gate. */
|
|
50
|
+
export type RunEventGateVia = "quorum" | "policy" | "point" | "alias" | "empty";
|
|
51
|
+
/** The run every event of a stream names: the same on every line. */
|
|
52
|
+
export interface RunEventRun {
|
|
53
|
+
/**
|
|
54
|
+
* The run's own id: an Op run's id, a component run's id (the id its
|
|
55
|
+
* release records carry), or the CI run id for a pipeline run.
|
|
56
|
+
*/
|
|
57
|
+
runId: string;
|
|
58
|
+
kind: RunEventKind;
|
|
59
|
+
/** The Op's name, the component selection as given, or the pipeline's name. */
|
|
60
|
+
name: string;
|
|
61
|
+
/** The commit the run built from, or null when it did not start in a git checkout. */
|
|
62
|
+
gitSha: string | null;
|
|
63
|
+
runtime: RunEventRuntime;
|
|
64
|
+
/**
|
|
65
|
+
* Where the run ran and how to reach it, the shape a release record's
|
|
66
|
+
* `runOrigin` has. For an Op run in CI it locates the CI run, as the run
|
|
67
|
+
* record does (#4020), while `runId` stays the Op run's own id.
|
|
68
|
+
*/
|
|
69
|
+
runOrigin: RunOrigin;
|
|
70
|
+
}
|
|
71
|
+
/** What every event carries besides its body. */
|
|
72
|
+
export interface RunEventEnvelope extends RunEventRun {
|
|
73
|
+
$schema: typeof RUN_EVENT_SCHEMA_ID;
|
|
74
|
+
contract: typeof RUN_EVENT_CONTRACT_VERSION;
|
|
75
|
+
/** The version of the chant that wrote the event. */
|
|
76
|
+
chant: string;
|
|
77
|
+
/** The event's place in its run's stream, from 0 at `run-start`. */
|
|
78
|
+
seq: number;
|
|
79
|
+
/** When it happened, ISO-8601. */
|
|
80
|
+
at: string;
|
|
81
|
+
}
|
|
82
|
+
export interface RunEventRunStart {
|
|
83
|
+
type: "run-start";
|
|
84
|
+
/** In a component run, the waves the run will attempt, in order. Null in an Op or pipeline run. */
|
|
85
|
+
waves: string[][] | null;
|
|
86
|
+
}
|
|
87
|
+
/** The last event of a stream. Its `status` is the run's verdict. */
|
|
88
|
+
export interface RunEventRunSettle {
|
|
89
|
+
type: "run-settle";
|
|
90
|
+
status: RunEventSettleStatus;
|
|
91
|
+
durationMs: number | null;
|
|
92
|
+
error?: string;
|
|
93
|
+
}
|
|
94
|
+
export interface RunEventWaveStart {
|
|
95
|
+
type: "wave-start";
|
|
96
|
+
/** 1-based, into `run-start`'s `waves`. */
|
|
97
|
+
wave: number;
|
|
98
|
+
components: string[];
|
|
99
|
+
}
|
|
100
|
+
export interface RunEventWaveSettle {
|
|
101
|
+
type: "wave-settle";
|
|
102
|
+
wave: number;
|
|
103
|
+
status: RunEventSettleStatus;
|
|
104
|
+
}
|
|
105
|
+
export interface RunEventComponentStart {
|
|
106
|
+
type: "component-start";
|
|
107
|
+
wave: number;
|
|
108
|
+
component: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* How a component settled: a {@link RunEventSettleStatus}, or one of two
|
|
112
|
+
* statuses for a component the run did not start (#4007), added within
|
|
113
|
+
* contract 1 by chant 0.124.29. `blocked`: a dependency failed or stopped at
|
|
114
|
+
* a gate, so it never ran. `already-applied`: an earlier attempt that this
|
|
115
|
+
* run resumed applied it. Neither has a `component-start` before it. A reader
|
|
116
|
+
* that knows only the four settle statuses reads either as a component that
|
|
117
|
+
* did not run in this run.
|
|
118
|
+
*/
|
|
119
|
+
export type RunEventComponentSettleStatus = RunEventSettleStatus | "blocked" | "already-applied";
|
|
120
|
+
/** The first chant that writes `blocked`, `already-applied` and `blockedBy` on `component-settle` (#4007). */
|
|
121
|
+
export declare const RUN_EVENT_COMPONENT_SKIP_FLOOR = "0.124.29";
|
|
122
|
+
export interface RunEventComponentSettle {
|
|
123
|
+
type: "component-settle";
|
|
124
|
+
/**
|
|
125
|
+
* 1-based, into `run-start`'s `waves`. On an `already-applied` settle it is
|
|
126
|
+
* the wave the component had in the derivation the earlier attempt ran.
|
|
127
|
+
*/
|
|
128
|
+
wave: number;
|
|
129
|
+
component: string;
|
|
130
|
+
status: RunEventComponentSettleStatus;
|
|
131
|
+
/** With `blocked`: the failed or gated component the run reached this one from. */
|
|
132
|
+
blockedBy?: string;
|
|
133
|
+
}
|
|
134
|
+
/** An Op's phase, a component composition's phase, or a pipeline's stage. `component` is null outside a component run. */
|
|
135
|
+
export interface RunEventPhaseStart {
|
|
136
|
+
type: "phase-start";
|
|
137
|
+
component: string | null;
|
|
138
|
+
phase: string;
|
|
139
|
+
}
|
|
140
|
+
export interface RunEventPhaseSettle {
|
|
141
|
+
type: "phase-settle";
|
|
142
|
+
component: string | null;
|
|
143
|
+
phase: string;
|
|
144
|
+
status: RunEventSettleStatus;
|
|
145
|
+
}
|
|
146
|
+
/** An Op or composition step, or a pipeline's job. */
|
|
147
|
+
export interface RunEventStepStart {
|
|
148
|
+
type: "step-start";
|
|
149
|
+
component: string | null;
|
|
150
|
+
phase: string;
|
|
151
|
+
/** The activity, `gate:<name>`, `effect:<name>`, or the job's name. */
|
|
152
|
+
step: string;
|
|
153
|
+
/**
|
|
154
|
+
* The step's place in its phase as authored, from 0, so two steps of one
|
|
155
|
+
* phase that share a name stay apart. Optional: added within contract 1 by
|
|
156
|
+
* chant 0.124.28 (#4041), and left out where the writer has no authored
|
|
157
|
+
* position, such as a step the executor adds itself.
|
|
158
|
+
*/
|
|
159
|
+
index?: number;
|
|
160
|
+
}
|
|
161
|
+
export interface RunEventStepSettle {
|
|
162
|
+
type: "step-settle";
|
|
163
|
+
component: string | null;
|
|
164
|
+
phase: string;
|
|
165
|
+
step: string;
|
|
166
|
+
/** As on {@link RunEventStepStart.index}. */
|
|
167
|
+
index?: number;
|
|
168
|
+
status: RunEventStepStatus;
|
|
169
|
+
/** With `skipped`: why, or null when the writer does not know. */
|
|
170
|
+
skip?: RunEventSkipReason | null;
|
|
171
|
+
durationMs: number | null;
|
|
172
|
+
/** With `failed`: what failed. */
|
|
173
|
+
error?: string;
|
|
174
|
+
/** Why the step skipped, gated or waited, for a person. */
|
|
175
|
+
message?: string;
|
|
176
|
+
}
|
|
177
|
+
/** The run stopped at a gate nobody has approved, or a decision point nobody has answered. */
|
|
178
|
+
export interface RunEventGateWaiting {
|
|
179
|
+
type: "gate-waiting";
|
|
180
|
+
component: string | null;
|
|
181
|
+
phase: string;
|
|
182
|
+
step: string;
|
|
183
|
+
/** As on {@link RunEventStepStart.index}. */
|
|
184
|
+
index?: number;
|
|
185
|
+
/** The op the gate is recorded under, which `chant approve` takes. */
|
|
186
|
+
op: string;
|
|
187
|
+
/** The gate's name, or null when the step waits on a decision point alone. */
|
|
188
|
+
gate: string | null;
|
|
189
|
+
/** The open question's answer record id, or null. */
|
|
190
|
+
point: string | null;
|
|
191
|
+
message?: string;
|
|
192
|
+
}
|
|
193
|
+
export interface RunEventGateResolved {
|
|
194
|
+
type: "gate-resolved";
|
|
195
|
+
component: string | null;
|
|
196
|
+
phase: string;
|
|
197
|
+
step: string;
|
|
198
|
+
/** As on {@link RunEventStepStart.index}. */
|
|
199
|
+
index?: number;
|
|
200
|
+
op: string;
|
|
201
|
+
gate: string;
|
|
202
|
+
resolvedBy: string;
|
|
203
|
+
resolvedAt: string;
|
|
204
|
+
via: RunEventGateVia | null;
|
|
205
|
+
url?: string;
|
|
206
|
+
}
|
|
207
|
+
/** The type-specific part of an event: what an emitter hands the writer. */
|
|
208
|
+
export type RunEventBody = RunEventRunStart | RunEventRunSettle | RunEventWaveStart | RunEventWaveSettle | RunEventComponentStart | RunEventComponentSettle | RunEventPhaseStart | RunEventPhaseSettle | RunEventStepStart | RunEventStepSettle | RunEventGateWaiting | RunEventGateResolved;
|
|
209
|
+
export type RunEventType = RunEventBody["type"];
|
|
210
|
+
/** Every event type, in the order a reader meets them. Closed: part of the contract. */
|
|
211
|
+
export declare const RUN_EVENT_TYPES: readonly ["run-start", "wave-start", "component-start", "phase-start", "step-start", "gate-waiting", "gate-resolved", "step-settle", "phase-settle", "component-settle", "wave-settle", "run-settle"];
|
|
212
|
+
/** One line of a run's stream. */
|
|
213
|
+
export type RunEvent = RunEventBody extends infer B ? (B extends RunEventBody ? RunEventEnvelope & B : never) : never;
|
|
214
|
+
/** One event as its line: JSON with the envelope first, then the body, and a newline. */
|
|
215
|
+
export declare function serializeRunEvent(event: RunEvent): string;
|
|
216
|
+
/** What {@link writeRunEvent} and {@link createRunEventWriter} need besides the body. */
|
|
217
|
+
export interface RunEventStamp {
|
|
218
|
+
run: RunEventRun;
|
|
219
|
+
seq: number;
|
|
220
|
+
/** When it happened. Defaults to now. */
|
|
221
|
+
at?: Date | string;
|
|
222
|
+
/** Defaults to this chant's version. */
|
|
223
|
+
chant?: string;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Build one event from its body and the run it belongs to. The envelope's
|
|
227
|
+
* fields come first, so every line reads the same way. No body names an
|
|
228
|
+
* envelope field, so neither overrides the other.
|
|
229
|
+
*/
|
|
230
|
+
export declare function buildRunEvent(body: RunEventBody, stamp: RunEventStamp): RunEvent;
|
|
231
|
+
/** Build one event and hand its line to `write`. Returns the event written. */
|
|
232
|
+
export declare function writeRunEvent(body: RunEventBody, stamp: RunEventStamp, write: (line: string) => void): RunEvent;
|
|
233
|
+
/** A run's writer: it keeps the run and the sequence, so an emitter hands it bodies only. */
|
|
234
|
+
export interface RunEventWriter {
|
|
235
|
+
/** Write the next event of the run and return it. */
|
|
236
|
+
emit(body: RunEventBody): RunEvent;
|
|
237
|
+
/** The `seq` the next event gets. */
|
|
238
|
+
readonly next: number;
|
|
239
|
+
}
|
|
240
|
+
export interface RunEventWriterOptions {
|
|
241
|
+
run: RunEventRun;
|
|
242
|
+
/** Where each line goes. Defaults to standard output. */
|
|
243
|
+
write?: (line: string) => void;
|
|
244
|
+
/** The clock. Defaults to `new Date()`. */
|
|
245
|
+
now?: () => Date;
|
|
246
|
+
/** The `seq` of the first event, for a writer that carries on a stream. Defaults to 0. */
|
|
247
|
+
seq?: number;
|
|
248
|
+
/** Defaults to this chant's version. */
|
|
249
|
+
chant?: string;
|
|
250
|
+
}
|
|
251
|
+
/** The one writer of a run's stream (#4019). Each `emit` writes one line and moves the sequence on. */
|
|
252
|
+
export declare function createRunEventWriter(opts: RunEventWriterOptions): RunEventWriter;
|
|
253
|
+
/**
|
|
254
|
+
* A `RunProgressEvent` (`chant run --components --progress-json`) as a
|
|
255
|
+
* run-event body. The older stream has no step timings, so `durationMs` is
|
|
256
|
+
* null on the settles it maps to.
|
|
257
|
+
*/
|
|
258
|
+
export declare function runEventOfProgress(event: RunProgressEvent): RunEventBody;
|
|
259
|
+
/**
|
|
260
|
+
* A settled `StepRecord` (`chant run <op> --progress-json`) as run-event
|
|
261
|
+
* bodies: a gate's `gate-resolved` or `gate-waiting` when the record carries
|
|
262
|
+
* one, then the `step-settle`. `op` is the run's Op, which a gate is recorded
|
|
263
|
+
* under unless the record names another.
|
|
264
|
+
*
|
|
265
|
+
* A record skipped with nothing to say why maps to `skip: null`. The local
|
|
266
|
+
* executor writes the same record for a gate nobody has approved, for a step
|
|
267
|
+
* of an effect whose receipt matched and for a step an earlier failure
|
|
268
|
+
* stopped, so only an emitter that knows which can say `gated`, `receipt` or
|
|
269
|
+
* `not-run`. The run's own status still says `gated`. The local executor
|
|
270
|
+
* (#4041) knows, and passes `skip` for a bare skipped record and `gate` for
|
|
271
|
+
* a gate step nobody has approved; it passes `index`, the step's place in
|
|
272
|
+
* its phase, too.
|
|
273
|
+
*/
|
|
274
|
+
export declare function runEventsOfStepRecord(record: StepRecord, ctx: {
|
|
275
|
+
op: string;
|
|
276
|
+
component?: string | null;
|
|
277
|
+
skip?: RunEventSkipReason;
|
|
278
|
+
index?: number;
|
|
279
|
+
/** The gate a skipped gate step stopped at, when the emitter knows it. */
|
|
280
|
+
gate?: {
|
|
281
|
+
op: string;
|
|
282
|
+
gate: string;
|
|
283
|
+
};
|
|
284
|
+
}): RunEventBody[];
|
|
285
|
+
//# sourceMappingURL=run-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-event.d.ts","sourceRoot":"","sources":["../src/run-event.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The run-event contract (#4019, behold #678): one stream of events for Op
|
|
3
|
+
* runs, component runs and pipeline runs, so anything that shows a run reads
|
|
4
|
+
* the same fields wherever the run happened.
|
|
5
|
+
*
|
|
6
|
+
* `workspace/run-event.schema.json` is the contract. These types
|
|
7
|
+
* mirror it, and {@link createRunEventWriter} and {@link writeRunEvent} are
|
|
8
|
+
* the one writer: every emitter hands a writer the type-specific body and
|
|
9
|
+
* the writer stamps the run's identity, the sequence number, the time and the
|
|
10
|
+
* contract fields on it, then writes one JSON line. The emitters themselves
|
|
11
|
+
* are in `./run-event-stream.ts` and the runtimes (#4041); the files
|
|
12
|
+
* they are kept in, replay and `--follow` are `./run-event-store.ts` (#4042).
|
|
13
|
+
*
|
|
14
|
+
* Two older streams predate this one and keep their shape behind
|
|
15
|
+
* `--progress-json`, while `--events-json` prints this one (#4041):
|
|
16
|
+
* `RunProgressEvent` (`./components/run-progress.ts`, from `chant run
|
|
17
|
+
* --components --progress-json`) and the Op path's `StepRecord` lines
|
|
18
|
+
* (`./op/local-executor.ts`, from `chant run <op> --progress-json`).
|
|
19
|
+
* {@link runEventOfProgress} and {@link runEventsOfStepRecord} say how each
|
|
20
|
+
* maps onto this contract.
|
|
21
|
+
*
|
|
22
|
+
* This module imports no runtime code beyond the chant version (`./chant-version.ts`), so a consumer
|
|
23
|
+
* can import the types and the writer without loading the rest of chant. It
|
|
24
|
+
* lives outside `workspace/` so that a level-0 import of `@intentius/chant`
|
|
25
|
+
* loads no workspace module (#2526).
|
|
26
|
+
*/
|
|
27
|
+
import { CHANT_VERSION } from "./chant-version.js";
|
|
28
|
+
/** The schema's `$id`, which every event carries as `$schema`. */
|
|
29
|
+
export const RUN_EVENT_SCHEMA_ID = "https://intentius.io/chant/schemas/workspace/run-event/v1/run-event.schema.json";
|
|
30
|
+
/** The contract version every event carries as `contract`. */
|
|
31
|
+
export const RUN_EVENT_CONTRACT_VERSION = 1;
|
|
32
|
+
/** The first chant that writes contract version 1 of the run-event stream. */
|
|
33
|
+
export const RUN_EVENT_FLOOR = "0.124.28";
|
|
34
|
+
/** The first chant that writes `blocked`, `already-applied` and `blockedBy` on `component-settle` (#4007). */
|
|
35
|
+
export const RUN_EVENT_COMPONENT_SKIP_FLOOR = "0.124.29";
|
|
36
|
+
/** Every event type, in the order a reader meets them. Closed: part of the contract. */
|
|
37
|
+
export const RUN_EVENT_TYPES = [
|
|
38
|
+
"run-start",
|
|
39
|
+
"wave-start",
|
|
40
|
+
"component-start",
|
|
41
|
+
"phase-start",
|
|
42
|
+
"step-start",
|
|
43
|
+
"gate-waiting",
|
|
44
|
+
"gate-resolved",
|
|
45
|
+
"step-settle",
|
|
46
|
+
"phase-settle",
|
|
47
|
+
"component-settle",
|
|
48
|
+
"wave-settle",
|
|
49
|
+
"run-settle",
|
|
50
|
+
];
|
|
51
|
+
/** One event as its line: JSON with the envelope first, then the body, and a newline. */
|
|
52
|
+
export function serializeRunEvent(event) {
|
|
53
|
+
return JSON.stringify(event) + "\n";
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Build one event from its body and the run it belongs to. The envelope's
|
|
57
|
+
* fields come first, so every line reads the same way. No body names an
|
|
58
|
+
* envelope field, so neither overrides the other.
|
|
59
|
+
*/
|
|
60
|
+
export function buildRunEvent(body, stamp) {
|
|
61
|
+
const at = stamp.at === undefined ? new Date().toISOString() : typeof stamp.at === "string" ? stamp.at : stamp.at.toISOString();
|
|
62
|
+
const { runId, kind, name, gitSha, runtime, runOrigin } = stamp.run;
|
|
63
|
+
const envelope = {
|
|
64
|
+
$schema: RUN_EVENT_SCHEMA_ID,
|
|
65
|
+
contract: RUN_EVENT_CONTRACT_VERSION,
|
|
66
|
+
chant: stamp.chant ?? CHANT_VERSION,
|
|
67
|
+
seq: stamp.seq,
|
|
68
|
+
at,
|
|
69
|
+
runId,
|
|
70
|
+
kind,
|
|
71
|
+
name,
|
|
72
|
+
gitSha,
|
|
73
|
+
runtime,
|
|
74
|
+
runOrigin,
|
|
75
|
+
};
|
|
76
|
+
return { ...envelope, ...body };
|
|
77
|
+
}
|
|
78
|
+
/** Build one event and hand its line to `write`. Returns the event written. */
|
|
79
|
+
export function writeRunEvent(body, stamp, write) {
|
|
80
|
+
const event = buildRunEvent(body, stamp);
|
|
81
|
+
write(serializeRunEvent(event));
|
|
82
|
+
return event;
|
|
83
|
+
}
|
|
84
|
+
/** The one writer of a run's stream (#4019). Each `emit` writes one line and moves the sequence on. */
|
|
85
|
+
export function createRunEventWriter(opts) {
|
|
86
|
+
const write = opts.write ?? ((line) => void process.stdout.write(line));
|
|
87
|
+
const now = opts.now ?? (() => new Date());
|
|
88
|
+
let seq = opts.seq ?? 0;
|
|
89
|
+
return {
|
|
90
|
+
emit(body) {
|
|
91
|
+
return writeRunEvent(body, { run: opts.run, seq: seq++, at: now(), chant: opts.chant }, write);
|
|
92
|
+
},
|
|
93
|
+
get next() {
|
|
94
|
+
return seq;
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// ── The older streams, in terms of this one ─────────────────────────────────
|
|
99
|
+
/**
|
|
100
|
+
* A `RunProgressEvent` (`chant run --components --progress-json`) as a
|
|
101
|
+
* run-event body. The older stream has no step timings, so `durationMs` is
|
|
102
|
+
* null on the settles it maps to.
|
|
103
|
+
*/
|
|
104
|
+
export function runEventOfProgress(event) {
|
|
105
|
+
switch (event.type) {
|
|
106
|
+
case "run-start":
|
|
107
|
+
return { type: "run-start", waves: event.waves };
|
|
108
|
+
case "wave-start":
|
|
109
|
+
return { type: "wave-start", wave: event.wave, components: event.components };
|
|
110
|
+
case "component-start":
|
|
111
|
+
return { type: "component-start", wave: event.wave, component: event.component };
|
|
112
|
+
case "phase-start":
|
|
113
|
+
return { type: "phase-start", component: event.component, phase: event.phase };
|
|
114
|
+
case "step":
|
|
115
|
+
if (event.status === "running")
|
|
116
|
+
return { type: "step-start", component: event.component, phase: event.phase, step: event.step };
|
|
117
|
+
return {
|
|
118
|
+
type: "step-settle",
|
|
119
|
+
component: event.component,
|
|
120
|
+
phase: event.phase,
|
|
121
|
+
step: event.step,
|
|
122
|
+
status: event.status,
|
|
123
|
+
durationMs: null,
|
|
124
|
+
...(event.error !== undefined ? { error: event.error } : {}),
|
|
125
|
+
};
|
|
126
|
+
case "phase-done":
|
|
127
|
+
return { type: "phase-settle", component: event.component, phase: event.phase, status: event.status };
|
|
128
|
+
case "component-done":
|
|
129
|
+
return { type: "component-settle", wave: event.wave, component: event.component, status: event.status };
|
|
130
|
+
case "wave-done":
|
|
131
|
+
return { type: "wave-settle", wave: event.wave, status: event.status };
|
|
132
|
+
case "run-done":
|
|
133
|
+
return { type: "run-settle", status: event.status, durationMs: null };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const GATE_PREFIX = "gate:";
|
|
137
|
+
/**
|
|
138
|
+
* A settled `StepRecord` (`chant run <op> --progress-json`) as run-event
|
|
139
|
+
* bodies: a gate's `gate-resolved` or `gate-waiting` when the record carries
|
|
140
|
+
* one, then the `step-settle`. `op` is the run's Op, which a gate is recorded
|
|
141
|
+
* under unless the record names another.
|
|
142
|
+
*
|
|
143
|
+
* A record skipped with nothing to say why maps to `skip: null`. The local
|
|
144
|
+
* executor writes the same record for a gate nobody has approved, for a step
|
|
145
|
+
* of an effect whose receipt matched and for a step an earlier failure
|
|
146
|
+
* stopped, so only an emitter that knows which can say `gated`, `receipt` or
|
|
147
|
+
* `not-run`. The run's own status still says `gated`. The local executor
|
|
148
|
+
* (#4041) knows, and passes `skip` for a bare skipped record and `gate` for
|
|
149
|
+
* a gate step nobody has approved; it passes `index`, the step's place in
|
|
150
|
+
* its phase, too.
|
|
151
|
+
*/
|
|
152
|
+
export function runEventsOfStepRecord(record, ctx) {
|
|
153
|
+
const component = ctx.component ?? null;
|
|
154
|
+
const at = { component, phase: record.phase, step: record.fn, ...(ctx.index !== undefined ? { index: ctx.index } : {}) };
|
|
155
|
+
const out = [];
|
|
156
|
+
const settle = (status, extra = {}) => ({
|
|
157
|
+
type: "step-settle",
|
|
158
|
+
...at,
|
|
159
|
+
status,
|
|
160
|
+
durationMs: record.durationMs,
|
|
161
|
+
...extra,
|
|
162
|
+
});
|
|
163
|
+
const gateOfFn = record.fn.startsWith(GATE_PREFIX) ? record.fn.slice(GATE_PREFIX.length) : null;
|
|
164
|
+
if (record.approval) {
|
|
165
|
+
const a = record.approval;
|
|
166
|
+
out.push({
|
|
167
|
+
type: "gate-resolved",
|
|
168
|
+
...at,
|
|
169
|
+
op: ctx.op,
|
|
170
|
+
gate: a.gate,
|
|
171
|
+
resolvedBy: a.resolvedBy,
|
|
172
|
+
resolvedAt: a.timestamp,
|
|
173
|
+
via: a.via ?? null,
|
|
174
|
+
...(a.url !== undefined ? { url: a.url } : {}),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (record.status === "ok") {
|
|
178
|
+
out.push(settle("ok"));
|
|
179
|
+
return out;
|
|
180
|
+
}
|
|
181
|
+
if (record.status === "fail") {
|
|
182
|
+
out.push(settle("failed", record.error !== undefined ? { error: record.error } : {}));
|
|
183
|
+
return out;
|
|
184
|
+
}
|
|
185
|
+
const message = record.refusal !== undefined ? { message: record.refusal } : {};
|
|
186
|
+
const stoppedAt = record.gate ?? ctx.gate;
|
|
187
|
+
if (record.point) {
|
|
188
|
+
out.push({ type: "gate-waiting", ...at, op: ctx.op, gate: gateOfFn, point: record.point.id, ...message });
|
|
189
|
+
out.push(settle("waiting", message));
|
|
190
|
+
}
|
|
191
|
+
else if (stoppedAt) {
|
|
192
|
+
out.push({ type: "gate-waiting", ...at, op: stoppedAt.op, gate: stoppedAt.gate, point: null, ...message });
|
|
193
|
+
out.push(settle("gated", message));
|
|
194
|
+
}
|
|
195
|
+
else if (gateOfFn !== null && record.refusal !== undefined) {
|
|
196
|
+
out.push({ type: "gate-waiting", ...at, op: ctx.op, gate: gateOfFn, point: null, ...message });
|
|
197
|
+
out.push(settle("gated", message));
|
|
198
|
+
}
|
|
199
|
+
else if (record.resumed) {
|
|
200
|
+
out.push(settle("skipped", { skip: "resumed", message: `resumed at gate ${record.resumed.gate} from run ${record.resumed.run}` }));
|
|
201
|
+
}
|
|
202
|
+
else if (record.refusal !== undefined) {
|
|
203
|
+
out.push(settle("skipped", { skip: "refused", ...message }));
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
out.push(settle("skipped", { skip: ctx.skip ?? null }));
|
|
207
|
+
}
|
|
208
|
+
return out;
|
|
209
|
+
}
|