@intentius/chant 0.124.46 → 0.124.49
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/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-hold.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-pass.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-skip.json +10 -0
- package/dist/__golden__/wave-loop/op-cost-member-clash.json +6 -0
- package/dist/__golden__/wave-loop/op-cost-member.json +13 -0
- package/dist/__golden__/wave-loop/op-denied-source.json +16 -0
- package/dist/__golden__/wave-loop/op-denied.json +16 -0
- package/dist/__golden__/wave-loop/op-discover-rest-short.json +6 -0
- package/dist/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
- package/dist/__golden__/wave-loop/op-discover-rest.json +26 -0
- package/dist/__golden__/wave-loop/op-discover-wide.json +26 -0
- package/dist/__golden__/wave-loop/op-held-on-again.json +16 -0
- package/dist/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
- package/dist/__golden__/wave-loop/op-held-on.json +16 -0
- package/dist/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-held.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-pass.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-share.json +33 -0
- package/dist/__golden__/wave-loop/op-outcome-held.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
- package/dist/__golden__/wave-loop/op-overridden.json +16 -0
- package/dist/__golden__/wave-loop/op-per-run.json +20 -0
- package/dist/__golden__/wave-loop/op-point.json +13 -0
- package/dist/__golden__/wave-loop/op-pr-review.json +10 -0
- package/dist/__golden__/wave-loop/op-sealed.json +10 -0
- package/dist/__golden__/wave-loop/op-spend-change-only.json +10 -0
- package/dist/__golden__/wave-loop/op-spend.json +10 -0
- package/dist/__golden__/wave-loop/op-wave-commands.json +55 -0
- package/dist/__golden__/wave-loop/op-wide-refused.json +26 -0
- package/dist/__golden__/wave-loop/op-wide-waiting.json +29 -0
- package/dist/__golden__/wave-loop/op-wide.json +39 -0
- package/dist/action-pins.d.ts +61 -0
- package/dist/action-pins.d.ts.map +1 -0
- package/dist/action-pins.js +77 -0
- package/dist/cli/commands/carve.d.ts +3 -0
- package/dist/cli/commands/carve.d.ts.map +1 -1
- package/dist/cli/commands/carve.js +36 -7
- package/dist/cli/commands/import-report.d.ts +26 -0
- package/dist/cli/commands/import-report.d.ts.map +1 -0
- package/dist/cli/commands/import-report.js +65 -0
- package/dist/cli/commands/import.d.ts +11 -1
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/import.js +22 -3
- package/dist/cli/commands/migrate.d.ts +13 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +134 -10
- package/dist/cli/handlers/approve.d.ts.map +1 -1
- package/dist/cli/handlers/approve.js +41 -14
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +6 -1
- package/dist/cli/handlers/graph-reader.d.ts +26 -0
- package/dist/cli/handlers/graph-reader.d.ts.map +1 -0
- package/dist/cli/handlers/graph-reader.js +41 -0
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +14 -0
- package/dist/cli/handlers/ledger.d.ts +3 -0
- package/dist/cli/handlers/ledger.d.ts.map +1 -0
- package/dist/cli/handlers/ledger.js +55 -0
- package/dist/cli/handlers/migrate.d.ts.map +1 -1
- package/dist/cli/handlers/migrate.js +18 -11
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/misc.js +12 -1
- package/dist/cli/handlers/pr-env.js +2 -2
- package/dist/cli/handlers/pr.d.ts +15 -1
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +183 -40
- package/dist/cli/handlers/query.d.ts +7 -2
- package/dist/cli/handlers/query.d.ts.map +1 -1
- package/dist/cli/handlers/query.js +16 -4
- package/dist/cli/handlers/release.d.ts.map +1 -1
- package/dist/cli/handlers/release.js +6 -3
- package/dist/cli/handlers/search.d.ts +2 -4
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +13 -39
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +87 -14
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +47 -2
- package/dist/cli/registry.d.ts +22 -4
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/components/builders.d.ts +5 -1
- package/dist/components/builders.d.ts.map +1 -1
- package/dist/components/builders.js +5 -0
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.js +16 -1
- package/dist/components/capability-plugin.d.ts +14 -0
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/pr-hooks.d.ts +21 -1
- package/dist/components/pr-hooks.d.ts.map +1 -1
- package/dist/components/pr-hooks.js +72 -4
- package/dist/components/pr-pipeline.d.ts +45 -10
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +47 -14
- package/dist/components/pr-policy.d.ts +36 -0
- package/dist/components/pr-policy.d.ts.map +1 -1
- package/dist/components/pr-policy.js +36 -0
- package/dist/components/pr-run.d.ts +3 -0
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +1 -0
- package/dist/components/starter-plugin.d.ts +1 -0
- package/dist/components/starter-plugin.d.ts.map +1 -1
- package/dist/components/starter-plugin.js +5 -1
- package/dist/components/verbs/index.d.ts +2 -0
- package/dist/components/verbs/index.d.ts.map +1 -1
- package/dist/components/verbs/index.js +2 -0
- package/dist/components/verbs/publish-artifact.d.ts +65 -0
- package/dist/components/verbs/publish-artifact.d.ts.map +1 -0
- package/dist/components/verbs/publish-artifact.js +74 -0
- package/dist/components/verbs/publish-image.d.ts +129 -0
- package/dist/components/verbs/publish-image.d.ts.map +1 -0
- package/dist/components/verbs/publish-image.js +145 -0
- package/dist/config-environments.d.ts +20 -0
- package/dist/config-environments.d.ts.map +1 -1
- package/dist/config-environments.js +12 -0
- package/dist/config.d.ts +25 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -2
- package/dist/gate-decision.d.ts +20 -2
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +30 -3
- package/dist/graph-ir.d.ts +25 -0
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-walk.d.ts +66 -0
- package/dist/graph-walk.d.ts.map +1 -0
- package/dist/graph-walk.js +70 -0
- package/dist/import/parser.d.ts +19 -0
- package/dist/import/parser.d.ts.map +1 -1
- package/dist/lexicon.d.ts +94 -6
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts +11 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/git.d.ts +2 -5
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/ledger-read.d.ts +65 -0
- package/dist/lifecycle/ledger-read.d.ts.map +1 -0
- package/dist/lifecycle/ledger-read.js +160 -0
- package/dist/lifecycle/release-workstation.d.ts +7 -0
- package/dist/lifecycle/release-workstation.d.ts.map +1 -1
- package/dist/lifecycle/release-workstation.js +25 -0
- package/dist/lifecycle/run-ledger.d.ts +4 -3
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +1 -0
- package/dist/lint/discover.js +3 -1
- package/dist/lint/post-synth.d.ts +127 -1
- package/dist/lint/post-synth.d.ts.map +1 -1
- package/dist/lint/post-synth.js +84 -2
- package/dist/lint/rules/op/index.d.ts +1 -0
- package/dist/lint/rules/op/index.d.ts.map +1 -1
- package/dist/lint/rules/op/index.js +2 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.d.ts +32 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.d.ts.map +1 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.js +63 -0
- package/dist/op/activities/activity-contracts.d.ts +9 -6
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.js +5 -2
- package/dist/op/activities/index.d.ts +2 -2
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/index.js +1 -1
- package/dist/op/activities/review-agent.d.ts +90 -4
- package/dist/op/activities/review-agent.d.ts.map +1 -1
- package/dist/op/activities/review-agent.js +217 -19
- package/dist/op/activities/work-evidence.d.ts +8 -1
- package/dist/op/activities/work-evidence.d.ts.map +1 -1
- package/dist/op/activities/work-evidence.js +1 -0
- package/dist/op/builders.d.ts +9 -5
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +9 -5
- package/dist/op/composites/apply-op.d.ts +29 -2
- package/dist/op/composites/apply-op.d.ts.map +1 -1
- package/dist/op/composites/apply-op.js +20 -1
- package/dist/op/gate-approval-base.d.ts +25 -0
- package/dist/op/gate-approval-base.d.ts.map +1 -0
- package/dist/op/gate-approval-base.js +71 -0
- package/dist/op/gate-approval.d.ts +18 -9
- package/dist/op/gate-approval.d.ts.map +1 -1
- package/dist/op/gate-approval.js +13 -31
- package/dist/op/gate-name.d.ts +13 -0
- package/dist/op/gate-name.d.ts.map +1 -1
- package/dist/op/gate-name.js +14 -1
- package/dist/op/gate-quorum.d.ts +100 -3
- package/dist/op/gate-quorum.d.ts.map +1 -1
- package/dist/op/gate-quorum.js +108 -6
- package/dist/op/gate-review.d.ts +9 -0
- package/dist/op/gate-review.d.ts.map +1 -1
- package/dist/op/gate-review.js +13 -0
- package/dist/op/gate.d.ts +47 -5
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +25 -4
- package/dist/op/index.d.ts +3 -3
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/index.js +1 -1
- package/dist/op/local-executor.d.ts +45 -3
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +68 -7
- package/dist/op/op-waves-run.d.ts +26 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +259 -13
- package/dist/op/op-waves.d.ts +72 -5
- package/dist/op/op-waves.d.ts.map +1 -1
- package/dist/op/op-waves.js +110 -15
- package/dist/op/runtime.d.ts +11 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/schedule-overdue.d.ts +16 -0
- package/dist/op/schedule-overdue.d.ts.map +1 -1
- package/dist/op/schedule-overdue.js +36 -0
- package/dist/op/stage-hooks.d.ts +9 -2
- package/dist/op/stage-hooks.d.ts.map +1 -1
- package/dist/op/stage-hooks.js +7 -5
- package/dist/op/workspace-run-env.d.ts +22 -0
- package/dist/op/workspace-run-env.d.ts.map +1 -0
- package/dist/op/workspace-run-env.js +21 -0
- package/dist/pr-forge.d.ts +24 -0
- package/dist/pr-forge.d.ts.map +1 -1
- package/dist/pr-forge.js +47 -0
- package/dist/pr-loop.d.ts +10 -0
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +4 -0
- package/dist/pr-migrations.d.ts +62 -0
- package/dist/pr-migrations.d.ts.map +1 -0
- package/dist/pr-migrations.js +50 -0
- package/dist/pr-post.d.ts +42 -0
- package/dist/pr-post.d.ts.map +1 -1
- package/dist/pr-post.js +68 -2
- package/dist/read-filter.d.ts +65 -0
- package/dist/read-filter.d.ts.map +1 -0
- package/dist/read-filter.js +179 -0
- package/dist/run-event.d.ts +1 -1
- package/dist/run-event.d.ts.map +1 -1
- package/dist/terraform/carve.d.ts +24 -3
- package/dist/terraform/carve.d.ts.map +1 -1
- package/dist/terraform/carve.js +32 -14
- package/dist/terraform/cuts.d.ts +97 -0
- package/dist/terraform/cuts.d.ts.map +1 -0
- package/dist/terraform/cuts.js +138 -0
- package/dist/terraform/folds.d.ts +26 -0
- package/dist/terraform/folds.d.ts.map +1 -0
- package/dist/terraform/folds.js +38 -0
- package/dist/terraform/graph.d.ts.map +1 -1
- package/dist/terraform/graph.js +10 -0
- package/dist/terraform/reach.d.ts +140 -0
- package/dist/terraform/reach.d.ts.map +1 -0
- package/dist/terraform/reach.js +170 -0
- package/dist/terraform/score.d.ts +14 -0
- package/dist/terraform/score.d.ts.map +1 -1
- package/dist/terraform/score.js +14 -31
- package/dist/terraform/state.d.ts.map +1 -1
- package/dist/terraform/state.js +4 -2
- package/dist/terraform/types.d.ts +8 -0
- package/dist/terraform/types.d.ts.map +1 -1
- package/dist/wave-blocked.d.ts +10 -1
- package/dist/wave-blocked.d.ts.map +1 -1
- package/dist/wave-blocked.js +31 -3
- package/dist/wave-runtime.mjs +264 -254
- package/dist/workspace/check.schema.json +13 -2
- package/dist/workspace/checks/ci-branch.d.ts +44 -0
- package/dist/workspace/checks/ci-branch.d.ts.map +1 -0
- package/dist/workspace/checks/ci-branch.js +133 -0
- package/dist/workspace/checks/gate-approval.d.ts +58 -0
- package/dist/workspace/checks/gate-approval.d.ts.map +1 -0
- package/dist/workspace/checks/gate-approval.js +103 -0
- package/dist/workspace/checks/links.d.ts +3 -0
- package/dist/workspace/checks/links.d.ts.map +1 -1
- package/dist/workspace/checks/links.js +12 -1
- package/dist/workspace/checks/org.d.ts +48 -0
- package/dist/workspace/checks/org.d.ts.map +1 -0
- package/dist/workspace/checks/org.js +156 -0
- package/dist/workspace/checks.d.ts +12 -1
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +63 -7
- package/dist/workspace/ci-branches.d.ts +16 -0
- package/dist/workspace/ci-branches.d.ts.map +1 -1
- package/dist/workspace/ci-branches.js +27 -0
- package/dist/workspace/ci-green-cli.js +7 -7
- package/dist/workspace/ci-green-workflow.d.ts +1 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +13 -8
- package/dist/workspace/ci-green.d.ts +14 -0
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +44 -11
- package/dist/workspace/ci-run.d.ts +9 -1
- package/dist/workspace/ci-run.d.ts.map +1 -1
- package/dist/workspace/ci-run.js +67 -6
- package/dist/workspace/ci-serve.d.ts +9 -0
- package/dist/workspace/ci-serve.d.ts.map +1 -1
- package/dist/workspace/ci-serve.js +114 -76
- package/dist/workspace/compose-graph.d.ts +14 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/composites.d.ts +4 -1
- package/dist/workspace/composites.d.ts.map +1 -1
- package/dist/workspace/composites.js +5 -2
- package/dist/workspace/composites.schema.json +22 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
- package/dist/workspace/cross-root-lint.d.ts +56 -0
- package/dist/workspace/cross-root-lint.d.ts.map +1 -0
- package/dist/workspace/cross-root-lint.js +111 -0
- package/dist/workspace/dbt-models-reader.d.ts +44 -0
- package/dist/workspace/dbt-models-reader.d.ts.map +1 -0
- package/dist/workspace/dbt-models-reader.js +356 -0
- package/dist/workspace/dbt-project-common.d.ts +40 -0
- package/dist/workspace/dbt-project-common.d.ts.map +1 -0
- package/dist/workspace/dbt-project-common.js +106 -0
- package/dist/workspace/dbt-project-reader.d.ts +4 -3
- package/dist/workspace/dbt-project-reader.d.ts.map +1 -1
- package/dist/workspace/dbt-project-reader.js +14 -108
- package/dist/workspace/decision-rank.d.ts +26 -0
- package/dist/workspace/decision-rank.d.ts.map +1 -0
- package/dist/workspace/decision-rank.js +16 -0
- package/dist/workspace/declaration.d.ts +50 -2
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +57 -11
- package/dist/workspace/declaration.schema.json +166 -24
- package/dist/workspace/environments.d.ts +26 -2
- package/dist/workspace/environments.d.ts.map +1 -1
- package/dist/workspace/environments.js +26 -2
- package/dist/workspace/exit-cli.d.ts +44 -0
- package/dist/workspace/exit-cli.d.ts.map +1 -0
- package/dist/workspace/exit-cli.js +198 -0
- package/dist/workspace/exit.d.ts +159 -0
- package/dist/workspace/exit.d.ts.map +1 -0
- package/dist/workspace/exit.js +480 -0
- package/dist/workspace/exit.schema.json +257 -0
- package/dist/workspace/flyway-dir.d.ts +39 -0
- package/dist/workspace/flyway-dir.d.ts.map +1 -0
- package/dist/workspace/flyway-dir.js +104 -0
- package/dist/workspace/flyway-layout.d.ts +96 -0
- package/dist/workspace/flyway-layout.d.ts.map +1 -0
- package/dist/workspace/flyway-layout.js +308 -0
- package/dist/workspace/graph-cache.d.ts +3 -1
- package/dist/workspace/graph-cache.d.ts.map +1 -1
- package/dist/workspace/graph-cache.js +12 -1
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +26 -8
- package/dist/workspace/graph.schema.json +34 -0
- package/dist/workspace/import-fetch.d.ts +38 -0
- package/dist/workspace/import-fetch.d.ts.map +1 -0
- package/dist/workspace/import-fetch.js +99 -0
- package/dist/workspace/import-init.d.ts +26 -0
- package/dist/workspace/import-init.d.ts.map +1 -0
- package/dist/workspace/import-init.js +130 -0
- package/dist/workspace/import-source.d.ts +147 -0
- package/dist/workspace/import-source.d.ts.map +1 -0
- package/dist/workspace/import-source.js +370 -0
- package/dist/workspace/init.d.ts +4 -0
- package/dist/workspace/init.d.ts.map +1 -1
- package/dist/workspace/init.js +70 -3
- package/dist/workspace/intent.d.ts +2 -3
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +5 -9
- package/dist/workspace/kind-link-readers.d.ts +59 -2
- package/dist/workspace/kind-link-readers.d.ts.map +1 -1
- package/dist/workspace/kind-link-readers.js +17 -1
- package/dist/workspace/kind-readers.d.ts +6 -0
- package/dist/workspace/kind-readers.d.ts.map +1 -1
- package/dist/workspace/kind-readers.js +18 -0
- package/dist/workspace/kinds.d.ts +90 -3
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +161 -7
- package/dist/workspace/ledger.schema.json +158 -0
- package/dist/workspace/lexicon-outputs.d.ts +20 -1
- package/dist/workspace/lexicon-outputs.d.ts.map +1 -1
- package/dist/workspace/lexicon-outputs.js +102 -10
- package/dist/workspace/lineage-check.d.ts +3 -0
- package/dist/workspace/lineage-check.d.ts.map +1 -1
- package/dist/workspace/lineage-check.js +23 -4
- package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
- package/dist/workspace/lineage-upgrade.js +13 -4
- package/dist/workspace/links.d.ts +8 -1
- package/dist/workspace/links.d.ts.map +1 -1
- package/dist/workspace/links.js +25 -1
- package/dist/workspace/ls.d.ts +8 -0
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +7 -1
- package/dist/workspace/ls.schema.json +7 -0
- package/dist/workspace/member-commands.d.ts.map +1 -1
- package/dist/workspace/member-commands.js +54 -5
- package/dist/workspace/migrate-links.d.ts +45 -0
- package/dist/workspace/migrate-links.d.ts.map +1 -0
- package/dist/workspace/migrate-links.js +100 -0
- package/dist/workspace/migration-dirs.d.ts +74 -0
- package/dist/workspace/migration-dirs.d.ts.map +1 -0
- package/dist/workspace/migration-dirs.js +254 -0
- package/dist/workspace/new-migrations.d.ts +47 -0
- package/dist/workspace/new-migrations.d.ts.map +1 -0
- package/dist/workspace/new-migrations.js +91 -0
- package/dist/workspace/pr-report.schema.json +46 -0
- package/dist/workspace/promote.d.ts +96 -0
- package/dist/workspace/promote.d.ts.map +1 -0
- package/dist/workspace/promote.js +263 -0
- package/dist/workspace/reason-codes.d.ts +21 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +25 -0
- package/dist/workspace/records-cli.d.ts +11 -0
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-cli.js +57 -5
- package/dist/workspace/records.schema.json +5 -0
- package/dist/workspace/release-candidates.d.ts +2 -0
- package/dist/workspace/release-candidates.d.ts.map +1 -1
- package/dist/workspace/release-candidates.js +5 -2
- package/dist/workspace/release-train.d.ts +53 -0
- package/dist/workspace/release-train.d.ts.map +1 -0
- package/dist/workspace/release-train.js +134 -0
- package/dist/workspace/release-workflow.d.ts.map +1 -1
- package/dist/workspace/release-workflow.js +4 -3
- package/dist/workspace/repo-ref.d.ts +45 -0
- package/dist/workspace/repo-ref.d.ts.map +1 -0
- package/dist/workspace/repo-ref.js +114 -0
- package/dist/workspace/run-event.schema.json +2 -2
- package/dist/workspace/runs-cli.d.ts +9 -0
- package/dist/workspace/runs-cli.d.ts.map +1 -1
- package/dist/workspace/runs-cli.js +48 -3
- package/dist/workspace/runs.schema.json +7 -0
- package/dist/workspace/search-contract.d.ts +1 -1
- package/dist/workspace/search-contract.d.ts.map +1 -1
- package/dist/workspace/status-decisions.d.ts +37 -0
- package/dist/workspace/status-decisions.d.ts.map +1 -0
- package/dist/workspace/status-decisions.js +147 -0
- package/dist/workspace/status-gates.d.ts +9 -0
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status.d.ts +4 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +14 -2
- package/dist/workspace/status.schema.json +6 -0
- package/dist/workspace/work-cli.d.ts.map +1 -1
- package/dist/workspace/work-cli.js +5 -3
- package/dist/workspace/work-evidence-ops.d.ts +83 -0
- package/dist/workspace/work-evidence-ops.d.ts.map +1 -0
- package/dist/workspace/work-evidence-ops.js +169 -0
- package/dist/workspace/work-evidence.d.ts +12 -2
- package/dist/workspace/work-evidence.d.ts.map +1 -1
- package/dist/workspace/work-evidence.js +21 -3
- package/dist/workspace/work-evidence.schema.json +49 -2
- package/dist/workspace/workspace-gates.d.ts +110 -0
- package/dist/workspace/workspace-gates.d.ts.map +1 -0
- package/dist/workspace/workspace-gates.js +140 -0
- package/dist/workspace/workspace-kinds.schema.json +108 -10
- package/dist/workspace/workspace-ledger.d.ts +76 -0
- package/dist/workspace/workspace-ledger.d.ts.map +1 -0
- package/dist/workspace/workspace-ledger.js +91 -0
- package/dist/workspace/workspace-run.d.ts +112 -0
- package/dist/workspace/workspace-run.d.ts.map +1 -0
- package/dist/workspace/workspace-run.js +432 -0
- package/package.json +1 -1
- package/src/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-hold.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-pass.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-skip.json +10 -0
- package/src/__golden__/wave-loop/op-cost-member-clash.json +6 -0
- package/src/__golden__/wave-loop/op-cost-member.json +13 -0
- package/src/__golden__/wave-loop/op-denied-source.json +16 -0
- package/src/__golden__/wave-loop/op-denied.json +16 -0
- package/src/__golden__/wave-loop/op-discover-rest-short.json +6 -0
- package/src/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
- package/src/__golden__/wave-loop/op-discover-rest.json +26 -0
- package/src/__golden__/wave-loop/op-discover-wide.json +26 -0
- package/src/__golden__/wave-loop/op-held-on-again.json +16 -0
- package/src/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
- package/src/__golden__/wave-loop/op-held-on.json +16 -0
- package/src/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-held.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-pass.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-share.json +33 -0
- package/src/__golden__/wave-loop/op-outcome-held.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
- package/src/__golden__/wave-loop/op-overridden.json +16 -0
- package/src/__golden__/wave-loop/op-per-run.json +20 -0
- package/src/__golden__/wave-loop/op-point.json +13 -0
- package/src/__golden__/wave-loop/op-pr-review.json +10 -0
- package/src/__golden__/wave-loop/op-sealed.json +10 -0
- package/src/__golden__/wave-loop/op-spend-change-only.json +10 -0
- package/src/__golden__/wave-loop/op-spend.json +10 -0
- package/src/__golden__/wave-loop/op-wave-commands.json +55 -0
- package/src/__golden__/wave-loop/op-wide-refused.json +26 -0
- package/src/__golden__/wave-loop/op-wide-waiting.json +29 -0
- package/src/__golden__/wave-loop/op-wide.json +39 -0
- package/src/action-pins.test.ts +78 -0
- package/src/action-pins.ts +92 -0
- package/src/cli/commands/carve-score-once.test.ts +99 -0
- package/src/cli/commands/carve.ts +37 -6
- package/src/cli/commands/check-lexicon.test.ts +2 -2
- package/src/cli/commands/import-report.ts +71 -0
- package/src/cli/commands/import.ts +33 -3
- package/src/cli/commands/migrate-dialect.test.ts +145 -0
- package/src/cli/commands/migrate.ts +132 -11
- package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +4 -4
- package/src/cli/handlers/approve.ts +33 -4
- package/src/cli/handlers/build.ts +7 -1
- package/src/cli/handlers/graph-reader.test.ts +31 -0
- package/src/cli/handlers/graph-reader.ts +51 -0
- package/src/cli/handlers/graph.ts +14 -0
- package/src/cli/handlers/ledger.ts +54 -0
- package/src/cli/handlers/migrate.ts +21 -12
- package/src/cli/handlers/misc.ts +10 -1
- package/src/cli/handlers/pr-env.ts +2 -2
- package/src/cli/handlers/pr.ts +176 -37
- package/src/cli/handlers/query.ts +16 -4
- package/src/cli/handlers/release.ts +6 -3
- package/src/cli/handlers/search.ts +13 -34
- package/src/cli/main.test.ts +17 -0
- package/src/cli/main.ts +87 -14
- package/src/cli/parse-args.ts +35 -2
- package/src/cli/registry.ts +22 -4
- package/src/components/builders.ts +8 -0
- package/src/components/capability-plugin-loader.ts +13 -1
- package/src/components/capability-plugin.ts +16 -0
- package/src/components/pr-env-run-bundle.test.ts +1 -0
- package/src/components/pr-hooks.test.ts +73 -5
- package/src/components/pr-hooks.ts +95 -5
- package/src/components/pr-pipeline.ts +64 -16
- package/src/components/pr-policy.test.ts +64 -1
- package/src/components/pr-policy.ts +53 -0
- package/src/components/pr-run.ts +4 -0
- package/src/components/registry.test.ts +1 -1
- package/src/components/starter-plugin.ts +6 -0
- package/src/components/verbs/index.ts +2 -0
- package/src/components/verbs/publish-artifact.test.ts +60 -0
- package/src/components/verbs/publish-artifact.ts +122 -0
- package/src/components/verbs/publish-image.test.ts +101 -0
- package/src/components/verbs/publish-image.ts +265 -0
- package/src/config-environments.ts +28 -1
- package/src/config.ts +24 -1
- package/src/gate-decision-bundle.test.ts +5 -2
- package/src/gate-decision-identity.test.ts +20 -0
- package/src/gate-decision.ts +46 -3
- package/src/graph-ir.ts +27 -0
- package/src/graph-walk.test.ts +44 -0
- package/src/graph-walk.ts +102 -0
- package/src/import/parser.ts +20 -0
- package/src/lexicon.ts +98 -6
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lifecycle/git.ts +2 -2
- package/src/lifecycle/ledger-read.test.ts +107 -0
- package/src/lifecycle/ledger-read.ts +195 -0
- package/src/lifecycle/release-workstation.ts +24 -0
- package/src/lifecycle/run-ledger.ts +5 -2
- package/src/lint/cross-root.test.ts +122 -0
- package/src/lint/discover.ts +3 -1
- package/src/lint/post-synth.ts +212 -2
- package/src/lint/rules/op/index.ts +2 -0
- package/src/lint/rules/op/ops019-workspace-op-target.ts +89 -0
- package/src/op/activities/activity-contracts.ts +5 -2
- package/src/op/activities/index.ts +2 -2
- package/src/op/activities/review-agent.test.ts +221 -4
- package/src/op/activities/review-agent.ts +265 -22
- package/src/op/activities/work-evidence.ts +9 -1
- package/src/op/builders.ts +9 -5
- package/src/op/composites/apply-op.test.ts +108 -0
- package/src/op/composites/apply-op.ts +37 -2
- package/src/op/gate-approval-at-base.test.ts +97 -0
- package/src/op/gate-approval-base.ts +72 -0
- package/src/op/gate-approval.test.ts +6 -1
- package/src/op/gate-approval.ts +22 -27
- package/src/op/gate-name.ts +16 -1
- package/src/op/gate-quorum-at-base.test.ts +211 -0
- package/src/op/gate-quorum.ts +156 -8
- package/src/op/gate-review.ts +14 -0
- package/src/op/gate.ts +69 -9
- package/src/op/index.ts +3 -2
- package/src/op/local-executor.ts +91 -11
- package/src/op/op-waves-depends-on.test.ts +81 -0
- package/src/op/op-waves-hook-targets.test.ts +4 -2
- package/src/op/op-waves-quorum-product.test.ts +158 -0
- package/src/op/op-waves-run.ts +288 -14
- package/src/op/op-waves.ts +143 -14
- package/src/op/runtime.ts +8 -0
- package/src/op/schedule-overdue.ts +33 -0
- package/src/op/stage-hooks.ts +13 -5
- package/src/op/workspace-run-env.ts +29 -0
- package/src/pr-forge-bundle.test.ts +2 -2
- package/src/pr-forge.test.ts +47 -0
- package/src/pr-forge.ts +68 -0
- package/src/pr-loop-bundle.test.ts +3 -2
- package/src/pr-loop.test.ts +52 -0
- package/src/pr-loop.ts +12 -0
- package/src/pr-migrations.ts +97 -0
- package/src/pr-post-open.e2e.test.ts +36 -0
- package/src/pr-post.test.ts +102 -3
- package/src/pr-post.ts +90 -2
- package/src/read-filter.test.ts +54 -0
- package/src/read-filter.ts +193 -0
- package/src/run-event.ts +1 -1
- package/src/stage-hooks-bundle.test.ts +1 -0
- package/src/terraform/carve.ts +52 -15
- package/src/terraform/cuts.test.ts +173 -0
- package/src/terraform/cuts.ts +188 -0
- package/src/terraform/folds.ts +44 -0
- package/src/terraform/graph.ts +9 -0
- package/src/terraform/radius.test.ts +90 -0
- package/src/terraform/reach.test.ts +146 -0
- package/src/terraform/reach.ts +247 -0
- package/src/terraform/score.ts +27 -29
- package/src/terraform/state.ts +3 -1
- package/src/terraform/types.ts +8 -0
- package/src/wave-blocked.ts +28 -3
- package/src/wave-loop-golden.test.ts +4 -3
- package/src/workspace/__fixtures__/import/spacelift.json +9 -0
- package/src/workspace/__fixtures__/import/tfc.json +13 -0
- package/src/workspace/behold-kinds.test.ts +2 -1
- package/src/workspace/check-contract.test.ts +8 -6
- package/src/workspace/check.schema.json +13 -2
- package/src/workspace/checks/ci-branch.test.ts +128 -0
- package/src/workspace/checks/ci-branch.ts +141 -0
- package/src/workspace/checks/gate-approval.test.ts +77 -0
- package/src/workspace/checks/gate-approval.ts +121 -0
- package/src/workspace/checks/links.ts +12 -1
- package/src/workspace/checks/org.ts +169 -0
- package/src/workspace/checks.ts +68 -7
- package/src/workspace/ci-branches.ts +31 -0
- package/src/workspace/ci-green-branches.test.ts +153 -0
- package/src/workspace/ci-green-cli.ts +7 -7
- package/src/workspace/ci-green-workflow.test.ts +4 -3
- package/src/workspace/ci-green-workflow.ts +13 -9
- package/src/workspace/ci-green.ts +49 -12
- package/src/workspace/ci-run.test.ts +72 -1
- package/src/workspace/ci-run.ts +68 -8
- package/src/workspace/ci-serve.test.ts +95 -0
- package/src/workspace/ci-serve.ts +106 -65
- package/src/workspace/component-environments.test.ts +25 -2
- package/src/workspace/compose-graph.ts +9 -2
- package/src/workspace/composites.schema.json +22 -0
- package/src/workspace/composites.test.ts +39 -8
- package/src/workspace/composites.ts +6 -2
- package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
- package/src/workspace/cross-root-lint.test.ts +90 -0
- package/src/workspace/cross-root-lint.ts +126 -0
- package/src/workspace/dbt-kind.test.ts +3 -2
- package/src/workspace/dbt-models-reader.ts +362 -0
- package/src/workspace/dbt-models.test.ts +248 -0
- package/src/workspace/dbt-project-common.ts +113 -0
- package/src/workspace/dbt-project-reader.ts +29 -112
- package/src/workspace/decision-rank.ts +40 -0
- package/src/workspace/declaration.schema.json +166 -24
- package/src/workspace/declaration.ts +101 -15
- package/src/workspace/environments.ts +40 -4
- package/src/workspace/exit-cli.ts +219 -0
- package/src/workspace/exit.schema.json +257 -0
- package/src/workspace/exit.test.ts +185 -0
- package/src/workspace/exit.ts +560 -0
- package/src/workspace/flyway-dir.ts +113 -0
- package/src/workspace/flyway-layout.ts +337 -0
- package/src/workspace/graph-cache.ts +12 -2
- package/src/workspace/graph-cli.ts +25 -10
- package/src/workspace/graph-contract.test.ts +4 -2
- package/src/workspace/graph.schema.json +34 -0
- package/src/workspace/identity.test.ts +29 -2
- package/src/workspace/import-fetch.ts +151 -0
- package/src/workspace/import-init.ts +147 -0
- package/src/workspace/import-source.test.ts +183 -0
- package/src/workspace/import-source.ts +462 -0
- package/src/workspace/init.test.ts +55 -1
- package/src/workspace/init.ts +66 -4
- package/src/workspace/intent.ts +6 -14
- package/src/workspace/kind-link-readers.ts +68 -3
- package/src/workspace/kind-readers.test.ts +36 -0
- package/src/workspace/kind-readers.ts +18 -1
- package/src/workspace/kinds.test.ts +35 -7
- package/src/workspace/kinds.ts +212 -11
- package/src/workspace/ledger.schema.json +158 -0
- package/src/workspace/lexicon-outputs.ts +132 -13
- package/src/workspace/lineage-check.ts +30 -7
- package/src/workspace/lineage-upgrade.test.ts +20 -0
- package/src/workspace/lineage-upgrade.ts +16 -7
- package/src/workspace/links.ts +24 -1
- package/src/workspace/ls-contract.test.ts +1 -1
- package/src/workspace/ls.schema.json +7 -0
- package/src/workspace/ls.ts +10 -1
- package/src/workspace/member-commands.ts +60 -2
- package/src/workspace/member-file-schema.test.ts +124 -0
- package/src/workspace/migrate-links.test.ts +99 -0
- package/src/workspace/migrate-links.ts +108 -0
- package/src/workspace/migration-dirs.test.ts +272 -0
- package/src/workspace/migration-dirs.ts +267 -0
- package/src/workspace/new-migrations.test.ts +98 -0
- package/src/workspace/new-migrations.ts +109 -0
- package/src/workspace/org-scope.test.ts +238 -0
- package/src/workspace/pr-report.schema.json +46 -0
- package/src/workspace/promote.test.ts +114 -0
- package/src/workspace/promote.ts +302 -0
- package/src/workspace/reason-codes.test.ts +10 -1
- package/src/workspace/reason-codes.ts +25 -0
- package/src/workspace/records-cli.ts +58 -5
- package/src/workspace/records.schema.json +5 -0
- package/src/workspace/release-candidates.ts +7 -2
- package/src/workspace/release-train.ts +157 -0
- package/src/workspace/release-workflow.ts +4 -3
- package/src/workspace/repo-ref.ts +113 -0
- package/src/workspace/run-event.schema.json +2 -2
- package/src/workspace/runs-cli.ts +48 -4
- package/src/workspace/runs.schema.json +7 -0
- package/src/workspace/status-contract.test.ts +46 -1
- package/src/workspace/status-decisions.test.ts +100 -0
- package/src/workspace/status-decisions.ts +151 -0
- package/src/workspace/status-gates.ts +9 -0
- package/src/workspace/status.schema.json +6 -0
- package/src/workspace/status.ts +17 -3
- package/src/workspace/where-filters.test.ts +39 -0
- package/src/workspace/work-cli.ts +5 -3
- package/src/workspace/work-evidence-ops.test.ts +176 -0
- package/src/workspace/work-evidence-ops.ts +189 -0
- package/src/workspace/work-evidence.schema.json +49 -2
- package/src/workspace/work-evidence.ts +22 -3
- package/src/workspace/workspace-gates.ts +200 -0
- package/src/workspace/workspace-kinds.schema.json +108 -10
- package/src/workspace/workspace-ledger.ts +130 -0
- package/src/workspace/workspace-run.test.ts +322 -0
- package/src/workspace/workspace-run.ts +461 -0
package/dist/op/builders.js
CHANGED
|
@@ -348,9 +348,11 @@ export const composeChangeSet = (args) => {
|
|
|
348
348
|
return activity("composeChangeSet", rest, { profile: profile ?? "fastIdempotent", ...(id ? { id } : {}) });
|
|
349
349
|
};
|
|
350
350
|
/**
|
|
351
|
-
* A model reviews the pull request's title and description against
|
|
352
|
-
* set and posts one sticky note (#4299): `reviewAgent({ op:
|
|
353
|
-
* changeSet: changeSet.out.document })`. It never approves and
|
|
351
|
+
* A model reviews the pull request's title and description against its diff
|
|
352
|
+
* and a change set and posts one sticky note (#4299): `reviewAgent({ op:
|
|
353
|
+
* "pr-review", changeSet: changeSet.out.document })`. It never approves and
|
|
354
|
+
* never gates. `mode: "handoff"` (#4326) writes the review for a separate job
|
|
355
|
+
* to post, so the model's job holds no forge write token.
|
|
354
356
|
* Defaults to the `longInfra` profile, since the model command may take
|
|
355
357
|
* minutes.
|
|
356
358
|
*/
|
|
@@ -810,8 +812,10 @@ export const policyGate = (opts) => {
|
|
|
810
812
|
* Attach evidence to an acceptance criterion of the work item the run holds
|
|
811
813
|
* the lease on (#2772), for an Op that declares `workLease`. The run's lease
|
|
812
814
|
* is passed for it, so the write happens only while the lease is still the
|
|
813
|
-
* run's. `opts` takes the `result` (pass or fail), a `title`, and a `url
|
|
814
|
-
* workspace `path` to pin by hash
|
|
815
|
+
* run's. `opts` takes the `result` (pass or fail), a `title`, and a `url`, a
|
|
816
|
+
* workspace `path` to pin by hash, or an `ops` result to cite (#3171): a run,
|
|
817
|
+
* deploy, gate answer or release plan on `chant/lifecycle`, verified against
|
|
818
|
+
* its ledger. A `manual` criterion is refused: the run
|
|
815
819
|
* is the item's implementer. The `atMostOnce` profile: each attempt appends.
|
|
816
820
|
*/
|
|
817
821
|
export const workEvidence = (criterion, opts) => {
|
|
@@ -5,7 +5,11 @@
|
|
|
5
5
|
* stays with the platform (the CloudFormation stack, the Kubernetes API
|
|
6
6
|
* server, the ARM resource group) — chant never hosts a state file.
|
|
7
7
|
*
|
|
8
|
-
* Phases: build → plan → [approve] → apply
|
|
8
|
+
* Phases: build → plan → [preflight] → [approve] → apply → [verify] (#3370).
|
|
9
|
+
* `preflight` steps run after the plan and before the approval, and a failing
|
|
10
|
+
* one stops the run before anything is approved or applied. `verify` steps
|
|
11
|
+
* run after the apply, and a failing one fails the run, which runs `onFailure`
|
|
12
|
+
* (the Rollback phase, when there is one). Deletes ride the native
|
|
9
13
|
* prune path, whose bound is per target: the ownership marker on `kubectl`,
|
|
10
14
|
* the ownership tag on `arm` (chant #1448 — previously `--mode Complete`, which
|
|
11
15
|
* removed resources chant never applied), the ownership label on `gcp`
|
|
@@ -51,12 +55,21 @@
|
|
|
51
55
|
* target: "kubectl",
|
|
52
56
|
* gate: { gate: "approve-apply", point: "prod-apply" },
|
|
53
57
|
* });
|
|
58
|
+
*
|
|
59
|
+
* // validate before, check after (#3370), for any target
|
|
60
|
+
* export const { op } = ApplyOp({
|
|
61
|
+
* name: "collector-rollout",
|
|
62
|
+
* env: "prod",
|
|
63
|
+
* target: "kubectl",
|
|
64
|
+
* preflight: [shell("otelcol-contrib validate --config dist/collector.yaml")],
|
|
65
|
+
* verify: [activity("rulesLoadedObserve", { env: "prod" })],
|
|
66
|
+
* });
|
|
54
67
|
* ```
|
|
55
68
|
*
|
|
56
69
|
* @see #112 — stateless-authoritative state model + live import
|
|
57
70
|
*/
|
|
58
71
|
import type { OpResource } from "../resource.js";
|
|
59
|
-
import type { GateStep } from "../types.js";
|
|
72
|
+
import type { GateStep, StepDefinition } from "../types.js";
|
|
60
73
|
import { type ApplyTarget, type DeleteMode } from "../activities/apply.js";
|
|
61
74
|
export interface ApplyOpConfig {
|
|
62
75
|
/** Op name (kebab-case). */
|
|
@@ -140,6 +153,20 @@ export interface ApplyOpConfig {
|
|
|
140
153
|
* created is the usual case).
|
|
141
154
|
*/
|
|
142
155
|
forceConflicts?: boolean;
|
|
156
|
+
/**
|
|
157
|
+
* Steps run after the Plan phase and before the approval gate (#3370), as a
|
|
158
|
+
* `Preflight` phase: a config validation, a dry run, a policy check. A
|
|
159
|
+
* failing step stops the run there, so nothing is approved or applied.
|
|
160
|
+
* Omitted or empty, the Op has no Preflight phase.
|
|
161
|
+
*/
|
|
162
|
+
preflight?: StepDefinition[];
|
|
163
|
+
/**
|
|
164
|
+
* Steps run after the apply (#3370), as a `Verify` phase: a readiness
|
|
165
|
+
* check, an observation that the new config loaded. A failing step fails
|
|
166
|
+
* the run, so `onFailure` runs (the Rollback phase, when the Op has one).
|
|
167
|
+
* Omitted or empty, the Op has no Verify phase.
|
|
168
|
+
*/
|
|
169
|
+
verify?: StepDefinition[];
|
|
143
170
|
}
|
|
144
171
|
export interface ApplyOpResources {
|
|
145
172
|
/** Op resource — the build→plan→[approve]→apply Op. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-op.d.ts","sourceRoot":"","sources":["../../../src/op/composites/apply-op.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"apply-op.d.ts","sourceRoot":"","sources":["../../../src/op/composites/apply-op.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAoC,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE1G,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb;;;gBAGY;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;uBAImB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,0FAA0F;QAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB;;;;;WAKG;QACH,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC3B,CAAC;IACF;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,EAAE,EAAE,YAAY,CAAC,OAAO,UAAU,CAAC,CAAC;CACrC;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,CAoH/D"}
|
|
@@ -5,7 +5,11 @@
|
|
|
5
5
|
* stays with the platform (the CloudFormation stack, the Kubernetes API
|
|
6
6
|
* server, the ARM resource group) — chant never hosts a state file.
|
|
7
7
|
*
|
|
8
|
-
* Phases: build → plan → [approve] → apply
|
|
8
|
+
* Phases: build → plan → [preflight] → [approve] → apply → [verify] (#3370).
|
|
9
|
+
* `preflight` steps run after the plan and before the approval, and a failing
|
|
10
|
+
* one stops the run before anything is approved or applied. `verify` steps
|
|
11
|
+
* run after the apply, and a failing one fails the run, which runs `onFailure`
|
|
12
|
+
* (the Rollback phase, when there is one). Deletes ride the native
|
|
9
13
|
* prune path, whose bound is per target: the ownership marker on `kubectl`,
|
|
10
14
|
* the ownership tag on `arm` (chant #1448 — previously `--mode Complete`, which
|
|
11
15
|
* removed resources chant never applied), the ownership label on `gcp`
|
|
@@ -51,6 +55,15 @@
|
|
|
51
55
|
* target: "kubectl",
|
|
52
56
|
* gate: { gate: "approve-apply", point: "prod-apply" },
|
|
53
57
|
* });
|
|
58
|
+
*
|
|
59
|
+
* // validate before, check after (#3370), for any target
|
|
60
|
+
* export const { op } = ApplyOp({
|
|
61
|
+
* name: "collector-rollout",
|
|
62
|
+
* env: "prod",
|
|
63
|
+
* target: "kubectl",
|
|
64
|
+
* preflight: [shell("otelcol-contrib validate --config dist/collector.yaml")],
|
|
65
|
+
* verify: [activity("rulesLoadedObserve", { env: "prod" })],
|
|
66
|
+
* });
|
|
54
67
|
* ```
|
|
55
68
|
*
|
|
56
69
|
* @see #112 — stateless-authoritative state model + live import
|
|
@@ -79,6 +92,9 @@ export function ApplyOp(config) {
|
|
|
79
92
|
},
|
|
80
93
|
]),
|
|
81
94
|
];
|
|
95
|
+
if (config.preflight !== undefined && config.preflight.length > 0) {
|
|
96
|
+
phases.push(phase("Preflight", config.preflight));
|
|
97
|
+
}
|
|
82
98
|
if (gated) {
|
|
83
99
|
phases.push(phase("Approve", [
|
|
84
100
|
gate(gateName(config.gate ?? {}) || `approve-${config.name}`, {
|
|
@@ -106,6 +122,9 @@ export function ApplyOp(config) {
|
|
|
106
122
|
...(config.forceConflicts !== undefined ? { forceConflicts: config.forceConflicts } : {}),
|
|
107
123
|
}, "longInfra"),
|
|
108
124
|
]));
|
|
125
|
+
if (config.verify !== undefined && config.verify.length > 0) {
|
|
126
|
+
phases.push(phase("Verify", config.verify));
|
|
127
|
+
}
|
|
109
128
|
// Compensation is total or refused (#1449). A rollback path is either the
|
|
110
129
|
// target's mapped native rollback (cloudformation's rollbackStack) or an
|
|
111
130
|
// explicit command; without one there is nothing a Rollback phase could run,
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The parts of an Op gate's approval that an `identity.gates.<gate>` entry
|
|
3
|
+
* also carries (#4404): the modes, the policy check and the entry check. Its
|
|
4
|
+
* only runtime import is `node:crypto`, so `gate-decision.ts` (which checks an
|
|
5
|
+
* entry) bundles without the Op runtime or zod (gate-decision-bundle.test.ts).
|
|
6
|
+
* `gate-approval.ts` re-exports everything here.
|
|
7
|
+
*/
|
|
8
|
+
import type { GateApprovalMode, GatePolicyRef } from "./gate-approval.js";
|
|
9
|
+
export declare const GATE_APPROVAL_MODES: readonly GateApprovalMode[];
|
|
10
|
+
/** The version of a gate policy: `sha256:` and the hex digest of its text. A lexicon's helper stamps it, and OPS015 checks it still matches. */
|
|
11
|
+
export declare function gatePolicyVersion(text: string): string;
|
|
12
|
+
export declare function isGatePolicyRef(value: unknown): value is GatePolicyRef;
|
|
13
|
+
/**
|
|
14
|
+
* What is wrong with the `policy`, `mode` and `context` of an
|
|
15
|
+
* `identity.gates.<gate>` entry (#4404), one line each, named by `at`. Each
|
|
16
|
+
* field stands alone: base `mode: "enforce"` with no base `policy` is fine, as
|
|
17
|
+
* the Op's own policy then applies. `chant workspace check` (WSP153) says so.
|
|
18
|
+
*/
|
|
19
|
+
export declare function gateBaseApprovalProblems(entry: {
|
|
20
|
+
policy?: unknown;
|
|
21
|
+
mode?: unknown;
|
|
22
|
+
context?: unknown;
|
|
23
|
+
}, at: string): string[];
|
|
24
|
+
export declare function isContextValue(value: unknown): boolean;
|
|
25
|
+
//# sourceMappingURL=gate-approval-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-approval-base.d.ts","sourceRoot":"","sources":["../../src/op/gate-approval-base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEvE,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAA4B,CAAC;AAUxF,gJAAgJ;AAChJ,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAUtE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB7H;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKtD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The parts of an Op gate's approval that an `identity.gates.<gate>` entry
|
|
3
|
+
* also carries (#4404): the modes, the policy check and the entry check. Its
|
|
4
|
+
* only runtime import is `node:crypto`, so `gate-decision.ts` (which checks an
|
|
5
|
+
* entry) bundles without the Op runtime or zod (gate-decision-bundle.test.ts).
|
|
6
|
+
* `gate-approval.ts` re-exports everything here.
|
|
7
|
+
*/
|
|
8
|
+
import { createHash } from "node:crypto";
|
|
9
|
+
import { GATE_PLAN_CONTEXT_KEY } from "./gate-plan-context.js";
|
|
10
|
+
export const GATE_APPROVAL_MODES = ["log-only", "enforce"];
|
|
11
|
+
// The brand `stepOutput()` stamps (`step-output-ref.ts`), as a global symbol so
|
|
12
|
+
// this module need not import that file and its zod schemas; the same copy
|
|
13
|
+
// `activity-contract.ts` keeps for the same reason.
|
|
14
|
+
const STEP_OUTPUT_REF_BRAND = Symbol.for("chant.op.stepOutputRef");
|
|
15
|
+
function isStepOutputRef(value) {
|
|
16
|
+
return typeof value === "object" && value !== null && value[STEP_OUTPUT_REF_BRAND] === true;
|
|
17
|
+
}
|
|
18
|
+
/** The version of a gate policy: `sha256:` and the hex digest of its text. A lexicon's helper stamps it, and OPS015 checks it still matches. */
|
|
19
|
+
export function gatePolicyVersion(text) {
|
|
20
|
+
return `sha256:${createHash("sha256").update(text).digest("hex")}`;
|
|
21
|
+
}
|
|
22
|
+
export function isGatePolicyRef(value) {
|
|
23
|
+
if (typeof value !== "object" || value === null)
|
|
24
|
+
return false;
|
|
25
|
+
const v = value;
|
|
26
|
+
return (v.kind === "gate-policy" &&
|
|
27
|
+
typeof v.lexicon === "string" && v.lexicon !== "" &&
|
|
28
|
+
typeof v.name === "string" && v.name !== "" &&
|
|
29
|
+
typeof v.version === "string" && v.version !== "" &&
|
|
30
|
+
typeof v.text === "string" && v.text.trim() !== "");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* What is wrong with the `policy`, `mode` and `context` of an
|
|
34
|
+
* `identity.gates.<gate>` entry (#4404), one line each, named by `at`. Each
|
|
35
|
+
* field stands alone: base `mode: "enforce"` with no base `policy` is fine, as
|
|
36
|
+
* the Op's own policy then applies. `chant workspace check` (WSP153) says so.
|
|
37
|
+
*/
|
|
38
|
+
export function gateBaseApprovalProblems(entry, at) {
|
|
39
|
+
const problems = [];
|
|
40
|
+
if (entry.policy !== undefined) {
|
|
41
|
+
if (!isGatePolicyRef(entry.policy))
|
|
42
|
+
problems.push(`\`${at}.policy\` does not resolve to a gate policy set: it needs kind "gate-policy", lexicon, name, version and text`);
|
|
43
|
+
else if (entry.policy.version !== gatePolicyVersion(entry.policy.text))
|
|
44
|
+
problems.push(`\`${at}.policy\` "${entry.policy.name}" has a version that is not the digest of its text`);
|
|
45
|
+
}
|
|
46
|
+
if (entry.mode !== undefined && !GATE_APPROVAL_MODES.includes(entry.mode)) {
|
|
47
|
+
problems.push(`\`${at}.mode\` must be one of ${GATE_APPROVAL_MODES.map((m) => `"${m}"`).join(", ")}`);
|
|
48
|
+
}
|
|
49
|
+
if (entry.context !== undefined) {
|
|
50
|
+
if (typeof entry.context !== "object" || entry.context === null || Array.isArray(entry.context))
|
|
51
|
+
problems.push(`\`${at}.context\` must be an object of plan attributes`);
|
|
52
|
+
else {
|
|
53
|
+
for (const [key, value] of Object.entries(entry.context)) {
|
|
54
|
+
if (key === GATE_PLAN_CONTEXT_KEY)
|
|
55
|
+
problems.push(`\`${at}.context.${key}\` is reserved: the run fills it with the plan's change-set summary (#3182)`);
|
|
56
|
+
else if (isStepOutputRef(value) || !isContextValue(value))
|
|
57
|
+
problems.push(`\`${at}.context.${key}\` must be a string, number, boolean or list of strings`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return problems;
|
|
62
|
+
}
|
|
63
|
+
export function isContextValue(value) {
|
|
64
|
+
if (typeof value === "string" || typeof value === "boolean")
|
|
65
|
+
return true;
|
|
66
|
+
if (typeof value === "number")
|
|
67
|
+
return Number.isFinite(value);
|
|
68
|
+
if (Array.isArray(value))
|
|
69
|
+
return value.every((v) => typeof v === "string");
|
|
70
|
+
return isStepOutputRef(value);
|
|
71
|
+
}
|
|
@@ -33,17 +33,17 @@
|
|
|
33
33
|
* permit counts only while the run resolves that same context (#3774).
|
|
34
34
|
*
|
|
35
35
|
* A resolution is a local fact, not a signed one (`../lifecycle/gate-ledger.ts`).
|
|
36
|
-
* Roles on it are what the approver claimed, and
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
36
|
+
* Roles on it are what the approver claimed, and nothing trusts them: since
|
|
37
|
+
* #4290 the quorum counts a role only when `.chant/trust.json` at base grants
|
|
38
|
+
* it and a seal proves the approver (`./gate-quorum.ts`), and since #4324 a
|
|
39
|
+
* policy's request carries those same roles, never the claimed ones.
|
|
40
40
|
*/
|
|
41
41
|
import { type StepOutputRef } from "./step-output-ref.js";
|
|
42
|
+
export { GATE_APPROVAL_MODES, gateBaseApprovalProblems, gatePolicyVersion, isGatePolicyRef } from "./gate-approval-base.js";
|
|
42
43
|
import { type GateQuorumRule, type GateQuorumSpec } from "./gate-quorum.js";
|
|
43
44
|
export type { GateQuorumRule, GateQuorumSpec } from "./gate-quorum.js";
|
|
44
45
|
/** What a policy's decision does to the gate. */
|
|
45
46
|
export type GateApprovalMode = "log-only" | "enforce";
|
|
46
|
-
export declare const GATE_APPROVAL_MODES: readonly GateApprovalMode[];
|
|
47
47
|
/**
|
|
48
48
|
* A policy set a lexicon rendered for a gate — plain data, so it lands in the
|
|
49
49
|
* Op's build output unchanged. Build one with the owning lexicon's helper
|
|
@@ -148,29 +148,38 @@ export interface GatePolicyDecision extends GatePolicyAnswer {
|
|
|
148
148
|
export interface GatePolicyEvaluator {
|
|
149
149
|
evaluateGatePolicy(policy: GatePolicyRef, request: GatePolicyRequest): Promise<GatePolicyAnswer> | GatePolicyAnswer;
|
|
150
150
|
}
|
|
151
|
-
/** The version of a gate policy: `sha256:` and the hex digest of its text. A lexicon's helper stamps it, and OPS015 checks it still matches. */
|
|
152
|
-
export declare function gatePolicyVersion(text: string): string;
|
|
153
151
|
/**
|
|
154
152
|
* The digest of a gate's resolved approval context (#3774): `sha256:` and the
|
|
155
153
|
* hex digest of its JSON with keys sorted at every level. No context and an
|
|
156
154
|
* empty one digest the same.
|
|
157
155
|
*/
|
|
158
156
|
export declare function gateContextDigest(context: Record<string, unknown> | undefined): string;
|
|
159
|
-
export declare function isGatePolicyRef(value: unknown): value is GatePolicyRef;
|
|
160
157
|
/**
|
|
161
158
|
* Everything wrong with an `approval` block, one line each. The `gate()`
|
|
162
159
|
* builder throws on the first; OPS015 reports all of them over the build
|
|
163
160
|
* output, where a block could have been written without the builder.
|
|
164
161
|
*/
|
|
165
162
|
export declare function gateApprovalProblems(approval: unknown): string[];
|
|
163
|
+
/** A gate's `policy`, `mode` and `context` as `identity.gates.<gate>` declares them at base (#4404). A step output reference is not data a declaration can hold, so a context value is a plain one. */
|
|
164
|
+
export interface GateBaseApproval {
|
|
165
|
+
policy?: GatePolicyRef | null;
|
|
166
|
+
mode?: GateApprovalMode | null;
|
|
167
|
+
context?: Record<string, string | number | boolean | string[]> | null;
|
|
168
|
+
}
|
|
166
169
|
/** Import `lexicon`'s evaluator. Throws a message that names the package when it is not installed or exports none. */
|
|
167
170
|
export declare function loadGatePolicyEvaluator(lexicon: string): Promise<GatePolicyEvaluator>;
|
|
168
|
-
/**
|
|
171
|
+
/**
|
|
172
|
+
* The request a policy is asked about one approval. `roles` are the ones
|
|
173
|
+
* `.chant/trust.json` at base gives a proven approver (#4324), as a quorum
|
|
174
|
+
* judge reads them (`trustQuorumJudge` in `./gate-quorum.ts`). The roles the
|
|
175
|
+
* approver claims on `approver` are never read. Absent, the principal has none.
|
|
176
|
+
*/
|
|
169
177
|
export declare function gatePolicyRequest(input: {
|
|
170
178
|
op: string;
|
|
171
179
|
gate: string;
|
|
172
180
|
resolvedBy: string;
|
|
173
181
|
approver: GateApprover;
|
|
182
|
+
roles?: readonly string[];
|
|
174
183
|
planDigest?: string;
|
|
175
184
|
context?: Record<string, unknown>;
|
|
176
185
|
}): GatePolicyRequest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-approval.d.ts","sourceRoot":"","sources":["../../src/op/gate-approval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAIH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"gate-approval.d.ts","sourceRoot":"","sources":["../../src/op/gate-approval.ts"],"names":[],"mappings":"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"}
|
package/dist/op/gate-approval.js
CHANGED
|
@@ -33,21 +33,17 @@
|
|
|
33
33
|
* permit counts only while the run resolves that same context (#3774).
|
|
34
34
|
*
|
|
35
35
|
* A resolution is a local fact, not a signed one (`../lifecycle/gate-ledger.ts`).
|
|
36
|
-
* Roles on it are what the approver claimed, and
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
36
|
+
* Roles on it are what the approver claimed, and nothing trusts them: since
|
|
37
|
+
* #4290 the quorum counts a role only when `.chant/trust.json` at base grants
|
|
38
|
+
* it and a seal proves the approver (`./gate-quorum.ts`), and since #4324 a
|
|
39
|
+
* policy's request carries those same roles, never the claimed ones.
|
|
40
40
|
*/
|
|
41
41
|
import { createHash } from "node:crypto";
|
|
42
42
|
import { lexiconModulePath, importLexiconPackage } from "../lexicon-module.js";
|
|
43
|
-
import { isStepOutputRef } from "./step-output-ref.js";
|
|
44
43
|
import { GATE_PLAN_CONTEXT_KEY } from "./gate-plan-context.js";
|
|
44
|
+
import { GATE_APPROVAL_MODES, gatePolicyVersion, isContextValue, isGatePolicyRef } from "./gate-approval-base.js";
|
|
45
|
+
export { GATE_APPROVAL_MODES, gateBaseApprovalProblems, gatePolicyVersion, isGatePolicyRef } from "./gate-approval-base.js";
|
|
45
46
|
import { quorumProblems } from "./gate-quorum.js";
|
|
46
|
-
export const GATE_APPROVAL_MODES = ["log-only", "enforce"];
|
|
47
|
-
/** The version of a gate policy: `sha256:` and the hex digest of its text. A lexicon's helper stamps it, and OPS015 checks it still matches. */
|
|
48
|
-
export function gatePolicyVersion(text) {
|
|
49
|
-
return `sha256:${createHash("sha256").update(text).digest("hex")}`;
|
|
50
|
-
}
|
|
51
47
|
/**
|
|
52
48
|
* The digest of a gate's resolved approval context (#3774): `sha256:` and the
|
|
53
49
|
* hex digest of its JSON with keys sorted at every level. No context and an
|
|
@@ -62,16 +58,6 @@ function sortedKeys(_key, value) {
|
|
|
62
58
|
}
|
|
63
59
|
return value;
|
|
64
60
|
}
|
|
65
|
-
export function isGatePolicyRef(value) {
|
|
66
|
-
if (typeof value !== "object" || value === null)
|
|
67
|
-
return false;
|
|
68
|
-
const v = value;
|
|
69
|
-
return (v.kind === "gate-policy" &&
|
|
70
|
-
typeof v.lexicon === "string" && v.lexicon !== "" &&
|
|
71
|
-
typeof v.name === "string" && v.name !== "" &&
|
|
72
|
-
typeof v.version === "string" && v.version !== "" &&
|
|
73
|
-
typeof v.text === "string" && v.text.trim() !== "");
|
|
74
|
-
}
|
|
75
61
|
/**
|
|
76
62
|
* Everything wrong with an `approval` block, one line each. The `gate()`
|
|
77
63
|
* builder throws on the first; OPS015 reports all of them over the build
|
|
@@ -127,15 +113,6 @@ export function gateApprovalProblems(approval) {
|
|
|
127
113
|
}
|
|
128
114
|
return problems;
|
|
129
115
|
}
|
|
130
|
-
function isContextValue(value) {
|
|
131
|
-
if (typeof value === "string" || typeof value === "boolean")
|
|
132
|
-
return true;
|
|
133
|
-
if (typeof value === "number")
|
|
134
|
-
return Number.isFinite(value);
|
|
135
|
-
if (Array.isArray(value))
|
|
136
|
-
return value.every((v) => typeof v === "string");
|
|
137
|
-
return isStepOutputRef(value);
|
|
138
|
-
}
|
|
139
116
|
/** Import `lexicon`'s evaluator. Throws a message that names the package when it is not installed or exports none. */
|
|
140
117
|
export async function loadGatePolicyEvaluator(lexicon) {
|
|
141
118
|
// chant #2520 — a lexicon declared by module path exports its evaluator from that module.
|
|
@@ -153,10 +130,15 @@ export async function loadGatePolicyEvaluator(lexicon) {
|
|
|
153
130
|
}
|
|
154
131
|
return mod;
|
|
155
132
|
}
|
|
156
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* The request a policy is asked about one approval. `roles` are the ones
|
|
135
|
+
* `.chant/trust.json` at base gives a proven approver (#4324), as a quorum
|
|
136
|
+
* judge reads them (`trustQuorumJudge` in `./gate-quorum.ts`). The roles the
|
|
137
|
+
* approver claims on `approver` are never read. Absent, the principal has none.
|
|
138
|
+
*/
|
|
157
139
|
export function gatePolicyRequest(input) {
|
|
158
140
|
return {
|
|
159
|
-
principal: { kind: input.approver.kind, name: input.resolvedBy, roles: input.
|
|
141
|
+
principal: { kind: input.approver.kind, name: input.resolvedBy, roles: [...(input.roles ?? [])] },
|
|
160
142
|
action: "PassGate",
|
|
161
143
|
resource: { op: input.op, gate: input.gate },
|
|
162
144
|
context: {
|
package/dist/op/gate-name.d.ts
CHANGED
|
@@ -33,6 +33,19 @@ export declare const FAN_OUT_GATE_OP = "fan-out";
|
|
|
33
33
|
* behind it, so `chant approve` must not warn that it found none.
|
|
34
34
|
*/
|
|
35
35
|
export declare const WORKSPACE_UPGRADE_GATE_OP = "workspace-upgrade";
|
|
36
|
+
/**
|
|
37
|
+
* The op name a `chant workspace exit` gate is recorded under (#3177). The gate
|
|
38
|
+
* is the exit's scope (`workspace`, or the member names joined with `+`), and
|
|
39
|
+
* it binds the digest of the exit's patch. Like an upgrade it is a command
|
|
40
|
+
* with no `*.op.ts` behind it, and leaving is a person's decision.
|
|
41
|
+
*/
|
|
42
|
+
export declare const WORKSPACE_EXIT_GATE_OP = "workspace-exit";
|
|
43
|
+
/**
|
|
44
|
+
* The op name a `chant workspace promote` gate is recorded under (#3178). The
|
|
45
|
+
* gate is the member, and it binds the digest of the promotion's patch. A
|
|
46
|
+
* command with no `*.op.ts` behind it, like the upgrade.
|
|
47
|
+
*/
|
|
48
|
+
export declare const WORKSPACE_PROMOTE_GATE_OP = "workspace-promote";
|
|
36
49
|
/**
|
|
37
50
|
* The op name the override gate records denials and overrides under (#3760):
|
|
38
51
|
* `_gates/policy-override.jsonl`, gate the subject a policy denied. Like a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-name.d.ts","sourceRoot":"","sources":["../../src/op/gate-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAmC,MAAM,SAAS,CAAC;AAEzE;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AASzC;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,8FAA8F;AAC9F,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEhD;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAE9D;AAED,kFAAkF;AAClF,eAAO,MAAM,2BAA2B,QAE0B,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CASjE"}
|
|
1
|
+
{"version":3,"file":"gate-name.d.ts","sourceRoot":"","sources":["../../src/op/gate-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAmC,MAAM,SAAS,CAAC;AAEzE;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,mBAAmB,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AASzC;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,8FAA8F;AAC9F,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEhD;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAE9D;AAED,kFAAkF;AAClF,eAAO,MAAM,2BAA2B,QAE0B,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CASjE"}
|
package/dist/op/gate-name.js
CHANGED
|
@@ -32,6 +32,19 @@ export const FAN_OUT_GATE_OP = "fan-out";
|
|
|
32
32
|
* behind it, so `chant approve` must not warn that it found none.
|
|
33
33
|
*/
|
|
34
34
|
export const WORKSPACE_UPGRADE_GATE_OP = "workspace-upgrade";
|
|
35
|
+
/**
|
|
36
|
+
* The op name a `chant workspace exit` gate is recorded under (#3177). The gate
|
|
37
|
+
* is the exit's scope (`workspace`, or the member names joined with `+`), and
|
|
38
|
+
* it binds the digest of the exit's patch. Like an upgrade it is a command
|
|
39
|
+
* with no `*.op.ts` behind it, and leaving is a person's decision.
|
|
40
|
+
*/
|
|
41
|
+
export const WORKSPACE_EXIT_GATE_OP = "workspace-exit";
|
|
42
|
+
/**
|
|
43
|
+
* The op name a `chant workspace promote` gate is recorded under (#3178). The
|
|
44
|
+
* gate is the member, and it binds the digest of the promotion's patch. A
|
|
45
|
+
* command with no `*.op.ts` behind it, like the upgrade.
|
|
46
|
+
*/
|
|
47
|
+
export const WORKSPACE_PROMOTE_GATE_OP = "workspace-promote";
|
|
35
48
|
/**
|
|
36
49
|
* The op name the override gate records denials and overrides under (#3760):
|
|
37
50
|
* `_gates/policy-override.jsonl`, gate the subject a policy denied. Like a
|
|
@@ -61,7 +74,7 @@ const PR_GATE_OP = /^pr-\d+(?:-[a-z0-9][a-z0-9-]*)?$/;
|
|
|
61
74
|
* no Op config to read `neverOverMcp` from, the pending record carries it.
|
|
62
75
|
*/
|
|
63
76
|
export function isNeverOverMcpGateOp(op) {
|
|
64
|
-
return op === FAN_OUT_GATE_OP || op === WORKSPACE_UPGRADE_GATE_OP || op === OVERRIDE_GATE_OP || op === RELEASE_GATE_OP || PR_GATE_OP.test(op);
|
|
77
|
+
return op === FAN_OUT_GATE_OP || op === WORKSPACE_UPGRADE_GATE_OP || op === WORKSPACE_EXIT_GATE_OP || op === OVERRIDE_GATE_OP || op === RELEASE_GATE_OP || PR_GATE_OP.test(op);
|
|
65
78
|
}
|
|
66
79
|
/**
|
|
67
80
|
* The gate's name, from whichever key carries it. One place reads the old key,
|
package/dist/op/gate-quorum.d.ts
CHANGED
|
@@ -18,10 +18,16 @@
|
|
|
18
18
|
* approver counts toward `roles`, and as someone who is not the author, only
|
|
19
19
|
* when the approval proves who they are: a seal that verifies against the
|
|
20
20
|
* signers file at base, or under `pr-review` the forge review of the merged
|
|
21
|
-
* pull request
|
|
21
|
+
* pull request, or a review a product recorded on a ledger the spec at base
|
|
22
|
+
* names (#4333). The judge of a gate decides that ({@link GateQuorumJudge});
|
|
22
23
|
* with none, no approval proves anything, so a rule naming roles or
|
|
23
24
|
* `notAuthor` is never met.
|
|
24
25
|
*
|
|
26
|
+
* `notAuthor` reads who was involved in the change (#4333): the pull
|
|
27
|
+
* request's author, each login a `Requested-by:` trailer on its commits
|
|
28
|
+
* names, and the accounts an agent acts as. With `excludeInvolved`, an
|
|
29
|
+
* approval by any of them does not count at all.
|
|
30
|
+
*
|
|
25
31
|
* This module is pure: no git, no file reads, no package, so
|
|
26
32
|
* `@intentius/chant/gate-decision` bundles it. The judge is built by the
|
|
27
33
|
* caller from the trust policy it read at base ({@link trustQuorumJudge}).
|
|
@@ -47,8 +53,14 @@ export interface QuorumJudgement {
|
|
|
47
53
|
proven: boolean;
|
|
48
54
|
/** The roles `.chant/trust.json` at base gives the approver. Empty unless `proven`. */
|
|
49
55
|
roles: string[];
|
|
50
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Whether the approver was involved in the change: its author, or anyone
|
|
58
|
+
* else {@link TrustQuorumInput.involved} names. Undefined when nobody knows
|
|
59
|
+
* who the author is and the approver is not named as involved otherwise.
|
|
60
|
+
*/
|
|
51
61
|
author?: boolean;
|
|
62
|
+
/** Why the approval does not count at all (#4333): the approver was involved and the judge excludes everyone involved. */
|
|
63
|
+
excluded?: string;
|
|
52
64
|
}
|
|
53
65
|
/** Judges one approval for the rules. */
|
|
54
66
|
export type GateQuorumJudge = (approval: GateResolutionRecord) => QuorumJudgement;
|
|
@@ -108,6 +120,68 @@ export declare function quorumRuleLine(p: GateQuorumRuleProgress): string;
|
|
|
108
120
|
export declare function quorumWaiting(progress: readonly GateQuorumRuleProgress[]): string;
|
|
109
121
|
/** Whether a rule needs a proven approver: it names roles, or `notAuthor`. */
|
|
110
122
|
export declare const ruleNeedsProof: (rule: GateQuorumRule) => boolean;
|
|
123
|
+
/** Someone involved in a change (#4333), and why: `github:bob asked for abc1234`. */
|
|
124
|
+
export interface QuorumInvolvement {
|
|
125
|
+
who: string;
|
|
126
|
+
why: string;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The logins `Requested-by:` trailers on a commit message name, each once.
|
|
130
|
+
* Any line of the message counts, since a squash merge keeps the trailers of
|
|
131
|
+
* the commits it squashed in its body.
|
|
132
|
+
*/
|
|
133
|
+
export declare function requestedByTrailers(message: string): string[];
|
|
134
|
+
/**
|
|
135
|
+
* The names a principal goes by: itself, and for a forge principal
|
|
136
|
+
* (`github:alice`, `gitlab@gitlab.acme.com:bob`) the login after the colon,
|
|
137
|
+
* so a trailer's bare login and an approval's principal name one person.
|
|
138
|
+
*/
|
|
139
|
+
export declare function principalNames(who: string): string[];
|
|
140
|
+
/** Why `who` was involved in the change, or undefined when `involved` does not name them. */
|
|
141
|
+
export declare function involvedWhy(involved: readonly QuorumInvolvement[], who: string): string | undefined;
|
|
142
|
+
/**
|
|
143
|
+
* Everyone involved in a change (#4333): the pull request's `author`, each
|
|
144
|
+
* login a `Requested-by:` trailer on `commits` names, and the `agents`'
|
|
145
|
+
* accounts. `principal` turns a trailer's login into the principal the
|
|
146
|
+
* forge's approvals name (`github:<login>`); absent, the login stands.
|
|
147
|
+
*/
|
|
148
|
+
export declare function changeInvolvement(o: {
|
|
149
|
+
author?: string;
|
|
150
|
+
commits?: readonly {
|
|
151
|
+
sha: string;
|
|
152
|
+
message: string;
|
|
153
|
+
}[];
|
|
154
|
+
agents?: readonly string[];
|
|
155
|
+
principal?: (login: string) => string;
|
|
156
|
+
}): QuorumInvolvement[];
|
|
157
|
+
/**
|
|
158
|
+
* A review a product recorded on its own ledger (#4333), as terragucci does
|
|
159
|
+
* under `pr-review`: a resolution with `via: "pr-review"`, the reviewed
|
|
160
|
+
* `head`, and the `reviewers` who approved it, by forge login. One line
|
|
161
|
+
* names every reviewer, so `resolvedBy` is not one person.
|
|
162
|
+
*/
|
|
163
|
+
export interface RecordedReview {
|
|
164
|
+
pr?: number;
|
|
165
|
+
head: string;
|
|
166
|
+
reviewers: string[];
|
|
167
|
+
}
|
|
168
|
+
/** The review a ledger line records, when it is a product's review line; null otherwise. */
|
|
169
|
+
export declare function recordedReviewOf(r: GateResolutionRecord): RecordedReview | null;
|
|
170
|
+
/**
|
|
171
|
+
* The approvals a product's review lines stand for (#4333): each line
|
|
172
|
+
* {@link recordedReviewOf} reads becomes one approval per reviewer, named by
|
|
173
|
+
* `principal(login)` (the login itself when absent), a human's, with the
|
|
174
|
+
* review on it. A seal on the line is dropped: it signs the line, not any
|
|
175
|
+
* one reviewer. Every other line is kept as it is. `reviews` lists the
|
|
176
|
+
* reviews read, for {@link TrustQuorumInput.recorded}.
|
|
177
|
+
*/
|
|
178
|
+
export declare function recordedReviewApprovals(records: readonly GateResolutionRecord[], principal?: (login: string) => string): {
|
|
179
|
+
records: GateResolutionRecord[];
|
|
180
|
+
reviews: {
|
|
181
|
+
head: string;
|
|
182
|
+
approvers: string[];
|
|
183
|
+
}[];
|
|
184
|
+
};
|
|
111
185
|
/** What {@link trustQuorumJudge} judges by. */
|
|
112
186
|
export interface TrustQuorumInput {
|
|
113
187
|
/** The signers at base: an approval whose seal verifies for its approver against them is proven. */
|
|
@@ -116,6 +190,25 @@ export interface TrustQuorumInput {
|
|
|
116
190
|
roles: Readonly<Record<string, readonly string[]>>;
|
|
117
191
|
/** The change's authors, as principals. Absent, nobody knows who they are. */
|
|
118
192
|
authors?: readonly string[];
|
|
193
|
+
/**
|
|
194
|
+
* Everyone else involved in the change (#4333), from {@link
|
|
195
|
+
* changeInvolvement}: an approver named here is judged as an author, for
|
|
196
|
+
* `notAuthor`, whether or not `authors` is known.
|
|
197
|
+
*/
|
|
198
|
+
involved?: readonly QuorumInvolvement[];
|
|
199
|
+
/** An approval by an author or anyone `involved` names does not count at all (#4333), toward any rule. */
|
|
200
|
+
excludeInvolved?: boolean;
|
|
201
|
+
/**
|
|
202
|
+
* Reviews a product recorded on the ledger the spec at base names (#4333),
|
|
203
|
+
* from {@link recordedReviewApprovals}: a resolution that names one's head
|
|
204
|
+
* and one of its approvers as `resolvedBy` is proven, as for `review`. Pass
|
|
205
|
+
* them only under `pr-review`, as the product proves its reviewers only
|
|
206
|
+
* then.
|
|
207
|
+
*/
|
|
208
|
+
recorded?: readonly {
|
|
209
|
+
head: string;
|
|
210
|
+
approvers: readonly string[];
|
|
211
|
+
}[];
|
|
119
212
|
/**
|
|
120
213
|
* Under `pr-review`, the merged pull request's review, read from the forge
|
|
121
214
|
* in this run: a resolution that names this review's head and one of its
|
|
@@ -126,6 +219,10 @@ export interface TrustQuorumInput {
|
|
|
126
219
|
approvers: readonly string[];
|
|
127
220
|
};
|
|
128
221
|
}
|
|
129
|
-
/**
|
|
222
|
+
/**
|
|
223
|
+
* The judge a gate's rules are met by: proof from a seal, the live review or
|
|
224
|
+
* a review a product recorded, roles from trust.json at base, and the
|
|
225
|
+
* change's authors and everyone else involved in it left out.
|
|
226
|
+
*/
|
|
130
227
|
export declare function trustQuorumJudge(input: TrustQuorumInput): GateQuorumJudge;
|
|
131
228
|
//# sourceMappingURL=gate-quorum.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-quorum.d.ts","sourceRoot":"","sources":["../../src/op/gate-quorum.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"gate-quorum.d.ts","sourceRoot":"","sources":["../../src/op/gate-quorum.ts"],"names":[],"mappings":"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"}
|