@intentius/chant 0.124.45 → 0.124.48
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/capabilities/aws.paths +148 -0
- package/dist/capabilities/base-mappings.json +122 -0
- package/dist/capabilities/catalog.d.ts +89 -0
- package/dist/capabilities/catalog.d.ts.map +1 -0
- package/dist/capabilities/catalog.js +204 -0
- package/dist/capabilities/language.d.ts +103 -0
- package/dist/capabilities/language.d.ts.map +1 -0
- package/dist/capabilities/language.js +335 -0
- package/dist/capabilities/matcher.d.ts +65 -0
- package/dist/capabilities/matcher.d.ts.map +1 -0
- package/dist/capabilities/matcher.js +299 -0
- package/dist/capabilities/view.d.ts +207 -0
- package/dist/capabilities/view.d.ts.map +1 -0
- package/dist/capabilities/view.js +484 -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/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +1 -0
- 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 +21 -2
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +6 -1
- package/dist/cli/handlers/declared-graph.d.ts +44 -0
- package/dist/cli/handlers/declared-graph.d.ts.map +1 -0
- package/dist/cli/handlers/declared-graph.js +87 -0
- package/dist/cli/handlers/graph.d.ts +25 -0
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +93 -87
- 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.d.ts.map +1 -1
- package/dist/cli/handlers/pr-env.js +4 -3
- 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 +143 -39
- 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-count.d.ts +89 -0
- package/dist/cli/handlers/search-count.d.ts.map +1 -0
- package/dist/cli/handlers/search-count.js +132 -0
- package/dist/cli/handlers/search.d.ts +356 -6
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +1039 -155
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +88 -17
- package/dist/cli/mcp/server.d.ts.map +1 -1
- package/dist/cli/mcp/server.js +3 -0
- package/dist/cli/mcp/tools/capabilities.d.ts +7 -0
- package/dist/cli/mcp/tools/capabilities.d.ts.map +1 -0
- package/dist/cli/mcp/tools/capabilities.js +27 -0
- package/dist/cli/mcp/workspace-tools.d.ts +3 -1
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/mcp/workspace-tools.js +47 -2
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +100 -19
- package/dist/cli/registry.d.ts +36 -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-env-ports.d.ts +29 -0
- package/dist/components/pr-env-ports.d.ts.map +1 -0
- package/dist/components/pr-env-ports.js +77 -0
- package/dist/components/pr-env-run.d.ts +5 -21
- package/dist/components/pr-env-run.d.ts.map +1 -1
- package/dist/components/pr-env-run.js +6 -70
- package/dist/components/pr-environment.d.ts +2 -1
- package/dist/components/pr-environment.d.ts.map +1 -1
- package/dist/components/pr-environment.js +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/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 +112 -0
- package/dist/config-environments.d.ts.map +1 -0
- package/dist/config-environments.js +114 -0
- package/dist/config.d.ts +32 -84
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -96
- package/dist/gate-decision.d.ts +11 -2
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +15 -3
- package/dist/graph-detail.d.ts.map +1 -1
- package/dist/graph-detail.js +15 -3
- package/dist/graph-effective.d.ts +33 -2
- package/dist/graph-effective.d.ts.map +1 -1
- package/dist/graph-effective.js +215 -68
- package/dist/graph-ir.d.ts +48 -0
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-ir.js +130 -0
- package/dist/graph-sub-template.d.ts +11 -0
- package/dist/graph-sub-template.d.ts.map +1 -0
- package/dist/graph-sub-template.js +19 -0
- 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 +80 -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/observe.d.ts +28 -0
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/observe.js +23 -1
- 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/rule.d.ts +6 -0
- package/dist/lint/rule.d.ts.map +1 -1
- 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/live-endpoint.d.ts +1 -1
- package/dist/live-endpoint.d.ts.map +1 -1
- package/dist/live-endpoint.js +1 -1
- package/dist/observation.d.ts +48 -1
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +21 -5
- 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.d.ts +11 -5
- package/dist/op/gate-approval.d.ts.map +1 -1
- package/dist/op/gate-approval.js +11 -6
- 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 +44 -3
- 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 +38 -3
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +48 -6
- 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-post.d.ts +42 -0
- package/dist/pr-post.d.ts.map +1 -1
- package/dist/pr-post.js +67 -1
- 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 +266 -256
- package/dist/workspace/capabilities-contract.d.ts +66 -0
- package/dist/workspace/capabilities-contract.d.ts.map +1 -0
- package/dist/workspace/capabilities-contract.js +107 -0
- package/dist/workspace/capabilities.schema.json +229 -0
- package/dist/workspace/check.schema.json +11 -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/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 +11 -1
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +59 -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 +23 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/compose-graph.js +3 -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/conformance/index.d.ts +1 -1
- package/dist/workspace/conformance/index.d.ts.map +1 -1
- package/dist/workspace/conformance/index.js +39 -2
- 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 +43 -2
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +45 -11
- package/dist/workspace/declaration.schema.json +133 -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/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 +8 -0
- package/dist/workspace/graph-cache.d.ts.map +1 -1
- package/dist/workspace/graph-cache.js +27 -3
- package/dist/workspace/graph-cli.d.ts +39 -2
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +92 -32
- package/dist/workspace/graph.schema.json +182 -0
- 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 +3 -0
- package/dist/workspace/kind-readers.d.ts.map +1 -1
- package/dist/workspace/kind-readers.js +7 -1
- package/dist/workspace/kinds.d.ts +66 -2
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +98 -4
- 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/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 +10 -1
- package/dist/workspace/member-commands.d.ts.map +1 -1
- package/dist/workspace/member-commands.js +71 -6
- 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/nested-graph.d.ts +2 -0
- package/dist/workspace/nested-graph.d.ts.map +1 -1
- package/dist/workspace/nested-graph.js +32 -1
- package/dist/workspace/reason-codes.d.ts +18 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +23 -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-cli.d.ts +204 -0
- package/dist/workspace/search-cli.d.ts.map +1 -0
- package/dist/workspace/search-cli.js +466 -0
- package/dist/workspace/search-contract.d.ts +56 -0
- package/dist/workspace/search-contract.d.ts.map +1 -0
- package/dist/workspace/search-contract.js +70 -0
- package/dist/workspace/search.schema.json +822 -0
- 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 +58 -3
- 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/__snapshots__/okf.test.ts.snap +10 -0
- package/src/action-pins.test.ts +78 -0
- package/src/action-pins.ts +92 -0
- package/src/capabilities/aws.paths +148 -0
- package/src/capabilities/base-mappings.json +122 -0
- package/src/capabilities/catalog.ts +230 -0
- package/src/capabilities/language.test.ts +191 -0
- package/src/capabilities/language.ts +373 -0
- package/src/capabilities/matcher.ts +315 -0
- package/src/capabilities/view-compose.test.ts +76 -0
- package/src/capabilities/view.ts +631 -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/lint.ts +1 -0
- 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 +23 -2
- package/src/cli/handlers/build.ts +7 -1
- package/src/cli/handlers/declared-graph.ts +99 -0
- package/src/cli/handlers/graph.test.ts +94 -3
- package/src/cli/handlers/graph.ts +123 -96
- 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 +3 -4
- package/src/cli/handlers/pr.ts +138 -36
- package/src/cli/handlers/query.ts +16 -4
- package/src/cli/handlers/release.ts +6 -3
- package/src/cli/handlers/search-build-roots.test.ts +144 -0
- package/src/cli/handlers/search-count.test.ts +191 -0
- package/src/cli/handlers/search-count.ts +165 -0
- package/src/cli/handlers/search-json.test.ts +333 -0
- package/src/cli/handlers/search-live.test.ts +387 -0
- package/src/cli/handlers/search-paths.test.ts +235 -0
- package/src/cli/handlers/search.ts +1291 -166
- package/src/cli/main.test.ts +43 -3
- package/src/cli/main.ts +88 -17
- package/src/cli/mcp/server.test.ts +3 -3
- package/src/cli/mcp/server.ts +3 -0
- package/src/cli/mcp/tools/capabilities.ts +32 -0
- package/src/cli/mcp/workspace-tools.e2e.test.ts +21 -1
- package/src/cli/mcp/workspace-tools.ts +47 -2
- package/src/cli/parse-args.ts +79 -15
- package/src/cli/registry.ts +36 -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-ports.ts +89 -0
- package/src/components/pr-env-run-bundle.test.ts +54 -0
- package/src/components/pr-env-run.ts +5 -76
- package/src/components/pr-environment.ts +2 -1
- 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/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 +160 -0
- package/src/config.ts +44 -124
- package/src/gate-decision-bundle.test.ts +1 -0
- package/src/gate-decision-identity.test.ts +9 -0
- package/src/gate-decision.ts +26 -3
- package/src/graph-detail.ts +15 -3
- package/src/graph-effective.ts +226 -75
- package/src/graph-ir.test.ts +163 -0
- package/src/graph-ir.ts +174 -0
- package/src/graph-sub-template.ts +22 -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 +84 -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/observe.test.ts +27 -1
- package/src/lifecycle/observe.ts +43 -1
- 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/rule.ts +6 -0
- package/src/lint/rules/op/index.ts +2 -0
- package/src/lint/rules/op/ops019-workspace-op-target.ts +89 -0
- package/src/live-endpoint.ts +1 -1
- package/src/observation.test.ts +25 -0
- package/src/observation.ts +69 -5
- 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.test.ts +6 -1
- package/src/op/gate-approval.ts +12 -6
- 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 +67 -8
- package/src/op/index.ts +3 -2
- package/src/op/local-executor.ts +69 -9
- 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-post-open.e2e.test.ts +36 -0
- package/src/pr-post.test.ts +102 -3
- package/src/pr-post.ts +89 -1
- 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/behold-kinds.test.ts +1 -1
- package/src/workspace/capabilities-contract.test.ts +88 -0
- package/src/workspace/capabilities-contract.ts +132 -0
- package/src/workspace/capabilities.schema.json +229 -0
- package/src/workspace/check-contract.test.ts +7 -6
- package/src/workspace/check.schema.json +11 -2
- package/src/workspace/checks/ci-branch.test.ts +128 -0
- package/src/workspace/checks/ci-branch.ts +141 -0
- package/src/workspace/checks/links.ts +12 -1
- package/src/workspace/checks/org.ts +169 -0
- package/src/workspace/checks.ts +64 -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 +19 -3
- 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/conformance/conformance.e2e.test.ts +14 -1
- package/src/workspace/conformance/index.ts +31 -2
- 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 +133 -24
- package/src/workspace/declaration.ts +84 -15
- package/src/workspace/environments.ts +40 -4
- package/src/workspace/flyway-dir.ts +113 -0
- package/src/workspace/flyway-layout.ts +337 -0
- package/src/workspace/graph-cache.ts +27 -3
- package/src/workspace/graph-cli.ts +119 -32
- package/src/workspace/graph-contract.test.ts +4 -2
- package/src/workspace/graph.schema.json +182 -0
- package/src/workspace/identity.test.ts +14 -2
- package/src/workspace/intent.ts +6 -14
- package/src/workspace/kind-link-readers.ts +68 -3
- package/src/workspace/kind-readers.e2e.test.ts +28 -0
- package/src/workspace/kind-readers.test.ts +1 -1
- package/src/workspace/kind-readers.ts +7 -1
- package/src/workspace/kinds.test.ts +12 -7
- package/src/workspace/kinds.ts +132 -7
- 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/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 +82 -3
- 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/nested-graph.ts +32 -1
- package/src/workspace/org-scope.test.ts +238 -0
- package/src/workspace/reason-codes.test.ts +13 -1
- package/src/workspace/reason-codes.ts +23 -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/search-cli.e2e.test.ts +305 -0
- package/src/workspace/search-cli.ts +591 -0
- package/src/workspace/search-contract.ts +95 -0
- package/src/workspace/search.schema.json +822 -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 +58 -3
- 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
|
@@ -340,6 +340,22 @@
|
|
|
340
340
|
"wave 1 (net) applies vpc under their overrides, which are now spent"
|
|
341
341
|
],
|
|
342
342
|
"files": {
|
|
343
|
+
".chant/op-waves/tf-apply/outcomes/outcome-wave-1.json": {
|
|
344
|
+
"version": 1,
|
|
345
|
+
"wave": 1,
|
|
346
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
347
|
+
"members": {
|
|
348
|
+
"dns": {
|
|
349
|
+
"status": "applied"
|
|
350
|
+
},
|
|
351
|
+
"nat": {
|
|
352
|
+
"status": "applied"
|
|
353
|
+
},
|
|
354
|
+
"vpc": {
|
|
355
|
+
"status": "applied"
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
},
|
|
343
359
|
".chant/op-waves/tf-apply/wave-1/dns.plan.json": {
|
|
344
360
|
"planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
|
|
345
361
|
},
|
|
@@ -418,6 +418,26 @@
|
|
|
418
418
|
"Nothing in wave 2 or after it ran. Read the plans, then approve: chant approve migrations migrations-wave-2 --plan jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d (with --resume, the approval also starts this job again)"
|
|
419
419
|
],
|
|
420
420
|
"files": {
|
|
421
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-1.json": {
|
|
422
|
+
"version": 1,
|
|
423
|
+
"wave": 1,
|
|
424
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
425
|
+
"members": {
|
|
426
|
+
"dev": {
|
|
427
|
+
"status": "applied"
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
},
|
|
431
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-2.json": {
|
|
432
|
+
"version": 1,
|
|
433
|
+
"wave": 2,
|
|
434
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
435
|
+
"members": {
|
|
436
|
+
"staging": {
|
|
437
|
+
"status": "waiting"
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
},
|
|
421
441
|
".chant/op-waves/migrations/wave-1/dev.hooks.json": {
|
|
422
442
|
"version": 1,
|
|
423
443
|
"opWaves": "migrations",
|
|
@@ -402,6 +402,19 @@
|
|
|
402
402
|
"wave 1 (prod): the decision point at base cannot be asked (waves.json at bbbbbbbbbbbb: `point.name` is a decision point's name: lower case letters, digits and hyphens, starting with a letter), so nothing in it was planned or applied"
|
|
403
403
|
],
|
|
404
404
|
"files": {
|
|
405
|
+
".chant/op-waves/tf-apply/outcomes/outcome-wave-1.json": {
|
|
406
|
+
"version": 1,
|
|
407
|
+
"wave": 1,
|
|
408
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
409
|
+
"members": {
|
|
410
|
+
"db": {
|
|
411
|
+
"status": "failed"
|
|
412
|
+
},
|
|
413
|
+
"net": {
|
|
414
|
+
"status": "failed"
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
},
|
|
405
418
|
".chant/op-waves/tf-apply/wave-1/db.hooks.json": {
|
|
406
419
|
"version": 1,
|
|
407
420
|
"opWaves": "tf-apply",
|
|
@@ -330,6 +330,16 @@
|
|
|
330
330
|
"Nothing in wave 2 or after it ran. Read the plans, then approve: chant approve migrations migrations-wave-2 --plan jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d (with --resume, the approval also starts this job again)"
|
|
331
331
|
],
|
|
332
332
|
"files": {
|
|
333
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-2.json": {
|
|
334
|
+
"version": 1,
|
|
335
|
+
"wave": 2,
|
|
336
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
337
|
+
"members": {
|
|
338
|
+
"staging": {
|
|
339
|
+
"status": "waiting"
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
},
|
|
333
343
|
".chant/op-waves/migrations/wave-2/staging.hooks.json": {
|
|
334
344
|
"version": 1,
|
|
335
345
|
"opWaves": "migrations",
|
|
@@ -85,6 +85,16 @@
|
|
|
85
85
|
"Nothing in wave 2 or after it ran. Read the plans, then approve: chant approve migrations migrations-wave-2 --plan jcs1-sha256:121fce9fb501cc2872d4239f620d465480edef5fcbe86d290f3b17c017231e8d --sign (with --resume, the approval also starts this job again)"
|
|
86
86
|
],
|
|
87
87
|
"files": {
|
|
88
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-2.json": {
|
|
89
|
+
"version": 1,
|
|
90
|
+
"wave": 2,
|
|
91
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
92
|
+
"members": {
|
|
93
|
+
"staging": {
|
|
94
|
+
"status": "waiting"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
88
98
|
".chant/op-waves/migrations/wave-2/staging.plan.json": {
|
|
89
99
|
"planDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
90
100
|
"destructive": true
|
|
@@ -114,6 +114,16 @@
|
|
|
114
114
|
"wave 2 (staging) applies under the approval by alice at 2026-10-10T00:00:00Z, which is now spent"
|
|
115
115
|
],
|
|
116
116
|
"files": {
|
|
117
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-2.json": {
|
|
118
|
+
"version": 1,
|
|
119
|
+
"wave": 2,
|
|
120
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
121
|
+
"members": {
|
|
122
|
+
"staging": {
|
|
123
|
+
"status": "applied"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
117
127
|
".chant/op-waves/migrations/wave-2/staging.hooks.json": {
|
|
118
128
|
"version": 1,
|
|
119
129
|
"opWaves": "migrations",
|
|
@@ -278,6 +278,16 @@
|
|
|
278
278
|
"wave 2 (staging) could not record that it applies under the approval by alice, so nothing applied: this gate ledger cannot record an applied approval"
|
|
279
279
|
],
|
|
280
280
|
"files": {
|
|
281
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-2.json": {
|
|
282
|
+
"version": 1,
|
|
283
|
+
"wave": 2,
|
|
284
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
285
|
+
"members": {
|
|
286
|
+
"staging": {
|
|
287
|
+
"status": "failed"
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
},
|
|
281
291
|
".chant/op-waves/migrations/wave-2/staging.hooks.json": {
|
|
282
292
|
"version": 1,
|
|
283
293
|
"opWaves": "migrations",
|
|
@@ -1503,6 +1503,22 @@
|
|
|
1503
1503
|
"wave 2 (apps): gate never (read at bbbbbbbbbbbb), digest jcs1-sha256:528ae61c94cd24622aade0c3b2acbebe58dfa1789f13f71de15b9d5d7519f0d3: not-required"
|
|
1504
1504
|
],
|
|
1505
1505
|
"files": {
|
|
1506
|
+
".chant/op-waves/tf-apply/outcomes/outcome-wave-1.json": {
|
|
1507
|
+
"version": 1,
|
|
1508
|
+
"wave": 1,
|
|
1509
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
1510
|
+
"members": {
|
|
1511
|
+
"dns": {
|
|
1512
|
+
"status": "waiting"
|
|
1513
|
+
},
|
|
1514
|
+
"nat": {
|
|
1515
|
+
"status": "waiting"
|
|
1516
|
+
},
|
|
1517
|
+
"vpc": {
|
|
1518
|
+
"status": "waiting"
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
},
|
|
1506
1522
|
".chant/op-waves/tf-apply/wave-1/dns.plan.json": {
|
|
1507
1523
|
"planDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
|
|
1508
1524
|
"empty": true
|
|
@@ -1810,6 +1826,45 @@
|
|
|
1810
1826
|
"outcome": "passed"
|
|
1811
1827
|
}
|
|
1812
1828
|
]
|
|
1829
|
+
},
|
|
1830
|
+
"wide-outcomes/outcome-wave-2-share-1.json": {
|
|
1831
|
+
"version": 1,
|
|
1832
|
+
"wave": 2,
|
|
1833
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
1834
|
+
"members": {
|
|
1835
|
+
"a1": {
|
|
1836
|
+
"status": "applied"
|
|
1837
|
+
},
|
|
1838
|
+
"a2": {
|
|
1839
|
+
"status": "applied"
|
|
1840
|
+
}
|
|
1841
|
+
}
|
|
1842
|
+
},
|
|
1843
|
+
"wide-outcomes/outcome-wave-2-share-2.json": {
|
|
1844
|
+
"version": 1,
|
|
1845
|
+
"wave": 2,
|
|
1846
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
1847
|
+
"members": {
|
|
1848
|
+
"a3": {
|
|
1849
|
+
"status": "applied"
|
|
1850
|
+
}
|
|
1851
|
+
}
|
|
1852
|
+
},
|
|
1853
|
+
"wide-outcomes/outcome-wave-2.json": {
|
|
1854
|
+
"version": 1,
|
|
1855
|
+
"wave": 2,
|
|
1856
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
1857
|
+
"members": {
|
|
1858
|
+
"a1": {
|
|
1859
|
+
"status": "decided"
|
|
1860
|
+
},
|
|
1861
|
+
"a2": {
|
|
1862
|
+
"status": "decided"
|
|
1863
|
+
},
|
|
1864
|
+
"a3": {
|
|
1865
|
+
"status": "decided"
|
|
1866
|
+
}
|
|
1867
|
+
}
|
|
1813
1868
|
}
|
|
1814
1869
|
}
|
|
1815
1870
|
}
|
|
@@ -190,6 +190,32 @@
|
|
|
190
190
|
"wave 1 (apps) is refused by its policy; nothing applied."
|
|
191
191
|
],
|
|
192
192
|
"files": {
|
|
193
|
+
".chant/op-waves/tf-apply/outcomes/outcome-wave-1-share-2.json": {
|
|
194
|
+
"version": 1,
|
|
195
|
+
"wave": 1,
|
|
196
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
197
|
+
"members": {
|
|
198
|
+
"t3": {
|
|
199
|
+
"status": "refused"
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
".chant/op-waves/tf-apply/outcomes/outcome-wave-1.json": {
|
|
204
|
+
"version": 1,
|
|
205
|
+
"wave": 1,
|
|
206
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
207
|
+
"members": {
|
|
208
|
+
"t1": {
|
|
209
|
+
"status": "refused"
|
|
210
|
+
},
|
|
211
|
+
"t2": {
|
|
212
|
+
"status": "refused"
|
|
213
|
+
},
|
|
214
|
+
"t3": {
|
|
215
|
+
"status": "refused"
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
},
|
|
193
219
|
".chant/op-waves/tf-apply/wave-1/plans.json": {
|
|
194
220
|
"runs": [
|
|
195
221
|
{
|
|
@@ -178,6 +178,35 @@
|
|
|
178
178
|
"wave 3 (prod) is waiting on migrations-wave-3; nothing applied. chant approve migrations migrations-wave-3 --plan jcs1-sha256:106d25f35ee6bc02e9aa253d0b2633a764396833c82e0c5ec5a4ad83a2a85b4e"
|
|
179
179
|
],
|
|
180
180
|
"files": {
|
|
181
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-3-share-1.json": {
|
|
182
|
+
"version": 1,
|
|
183
|
+
"wave": 3,
|
|
184
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
185
|
+
"members": {
|
|
186
|
+
"t1": {
|
|
187
|
+
"status": "waiting"
|
|
188
|
+
},
|
|
189
|
+
"t2": {
|
|
190
|
+
"status": "waiting"
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-3.json": {
|
|
195
|
+
"version": 1,
|
|
196
|
+
"wave": 3,
|
|
197
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
198
|
+
"members": {
|
|
199
|
+
"t1": {
|
|
200
|
+
"status": "waiting"
|
|
201
|
+
},
|
|
202
|
+
"t2": {
|
|
203
|
+
"status": "waiting"
|
|
204
|
+
},
|
|
205
|
+
"t3": {
|
|
206
|
+
"status": "waiting"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
},
|
|
181
210
|
".chant/op-waves/migrations/wave-3/t1.plan.json": {
|
|
182
211
|
"planDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
|
|
183
212
|
},
|
|
@@ -351,6 +351,45 @@
|
|
|
351
351
|
"t2: its plan moved since wave 3 was decided, so it was not applied. decided: sha256:2222222222222222222222222222222222222222222222222222222222222222; planned now: sha256:9999999999999999999999999999999999999999999999999999999999999999"
|
|
352
352
|
],
|
|
353
353
|
"files": {
|
|
354
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-3-share-1.json": {
|
|
355
|
+
"version": 1,
|
|
356
|
+
"wave": 3,
|
|
357
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
358
|
+
"members": {
|
|
359
|
+
"t1": {
|
|
360
|
+
"status": "applied"
|
|
361
|
+
},
|
|
362
|
+
"t2": {
|
|
363
|
+
"status": "not-applied"
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-3-share-2.json": {
|
|
368
|
+
"version": 1,
|
|
369
|
+
"wave": 3,
|
|
370
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
371
|
+
"members": {
|
|
372
|
+
"t3": {
|
|
373
|
+
"status": "applied"
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
".chant/op-waves/migrations/outcomes/outcome-wave-3.json": {
|
|
378
|
+
"version": 1,
|
|
379
|
+
"wave": 3,
|
|
380
|
+
"at": "2026-10-11T00:00:00.000Z",
|
|
381
|
+
"members": {
|
|
382
|
+
"t1": {
|
|
383
|
+
"status": "decided"
|
|
384
|
+
},
|
|
385
|
+
"t2": {
|
|
386
|
+
"status": "decided"
|
|
387
|
+
},
|
|
388
|
+
"t3": {
|
|
389
|
+
"status": "decided"
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
},
|
|
354
393
|
".chant/op-waves/migrations/wave-3/t1.hooks.json": {
|
|
355
394
|
"version": 1,
|
|
356
395
|
"opWaves": "migrations",
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The GitHub Actions the workflows chant generates use, each pinned by commit
|
|
3
|
+
* SHA (#4403). A tag can move; a SHA cannot. Every generator takes its `uses:`
|
|
4
|
+
* from here, so an update is one change to this table. Each row is the commit
|
|
5
|
+
* the named major tag pointed at, with the release that commit carries;
|
|
6
|
+
* `tagComments` writes that release beside each `uses:` line.
|
|
7
|
+
*
|
|
8
|
+
* Forgejo's actions mirror (code.forgejo.org) carries the same commits. The
|
|
9
|
+
* forgejo lexicon moves `upload-artifact` and `download-artifact` to v3, whose
|
|
10
|
+
* rows are here too: v4 and later refuse to run on a Forgejo runner (#4008).
|
|
11
|
+
*
|
|
12
|
+
* Refresh a row by resolving the major tag to its commit:
|
|
13
|
+
*
|
|
14
|
+
* gh api repos/actions/checkout/commits/v6 --jq .sha
|
|
15
|
+
*/
|
|
16
|
+
export interface ActionPin {
|
|
17
|
+
/** The action, with its subpath: `actions/cache/restore`. */
|
|
18
|
+
readonly slug: string;
|
|
19
|
+
/** The major tag the row follows, such as `v4`. */
|
|
20
|
+
readonly major: string;
|
|
21
|
+
readonly sha: string;
|
|
22
|
+
/** The release at that commit, written beside the `uses:` line. */
|
|
23
|
+
readonly tag: string;
|
|
24
|
+
}
|
|
25
|
+
export declare const ACTION_PINS: {
|
|
26
|
+
readonly checkout7: ActionPin;
|
|
27
|
+
readonly checkout6: ActionPin;
|
|
28
|
+
readonly checkout4: ActionPin;
|
|
29
|
+
readonly setupNode6: ActionPin;
|
|
30
|
+
readonly setupNode4: ActionPin;
|
|
31
|
+
readonly setupNode7: ActionPin;
|
|
32
|
+
readonly cache6: ActionPin;
|
|
33
|
+
readonly uploadArtifact7: ActionPin;
|
|
34
|
+
readonly downloadArtifact8: ActionPin;
|
|
35
|
+
readonly setupGo7: ActionPin;
|
|
36
|
+
readonly setupPython7: ActionPin;
|
|
37
|
+
readonly setupBun2: ActionPin;
|
|
38
|
+
readonly golangciLint9: ActionPin;
|
|
39
|
+
readonly dockerLogin4: ActionPin;
|
|
40
|
+
readonly dockerSetupBuildx4: ActionPin;
|
|
41
|
+
readonly dockerMetadata6: ActionPin;
|
|
42
|
+
readonly dockerBuildPush7: ActionPin;
|
|
43
|
+
readonly createGithubAppToken2: ActionPin;
|
|
44
|
+
readonly cacheRestore4: ActionPin;
|
|
45
|
+
readonly cacheSave4: ActionPin;
|
|
46
|
+
readonly uploadArtifact4: ActionPin;
|
|
47
|
+
readonly uploadArtifact3: ActionPin;
|
|
48
|
+
readonly downloadArtifact4: ActionPin;
|
|
49
|
+
readonly downloadArtifact3: ActionPin;
|
|
50
|
+
};
|
|
51
|
+
/** The `uses:` value for a pin: `actions/checkout@<sha>`. */
|
|
52
|
+
export declare const usesRef: (p: ActionPin) => string;
|
|
53
|
+
/** Write each pinned `uses:` line's release beside it, as `# v4.4.0`. A line that has a comment, or a SHA not in the table, is left alone. */
|
|
54
|
+
export declare function tagComments(yaml: string): string;
|
|
55
|
+
/** Every `uses:` in a workflow that names an action by a tag or branch, not a 40-character commit SHA. Local actions and docker images are not actions on a forge. */
|
|
56
|
+
export declare function unpinnedActions(yaml: string): string[];
|
|
57
|
+
/** The row for the same action as the one `sha` pins, at `major`. The forgejo lexicon uses it to move a pinned `upload-artifact` v4 to v3. */
|
|
58
|
+
export declare function pinAtMajor(sha: string, major: string): ActionPin | undefined;
|
|
59
|
+
/** The major of the row `sha` belongs to, as a number, when it is in the table. */
|
|
60
|
+
export declare function pinMajor(sha: string): number | undefined;
|
|
61
|
+
//# sourceMappingURL=action-pins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-pins.d.ts","sourceRoot":"","sources":["../src/action-pins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAID,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;CAyBsB,CAAC;AAE/C,6DAA6D;AAC7D,eAAO,MAAM,OAAO,MAAO,SAAS,KAAG,MAA8B,CAAC;AAKtE,8IAA8I;AAC9I,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED,sKAAsK;AACtK,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAQtD;AAED,8IAA8I;AAC9I,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAI5E;AAED,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGxD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The GitHub Actions the workflows chant generates use, each pinned by commit
|
|
3
|
+
* SHA (#4403). A tag can move; a SHA cannot. Every generator takes its `uses:`
|
|
4
|
+
* from here, so an update is one change to this table. Each row is the commit
|
|
5
|
+
* the named major tag pointed at, with the release that commit carries;
|
|
6
|
+
* `tagComments` writes that release beside each `uses:` line.
|
|
7
|
+
*
|
|
8
|
+
* Forgejo's actions mirror (code.forgejo.org) carries the same commits. The
|
|
9
|
+
* forgejo lexicon moves `upload-artifact` and `download-artifact` to v3, whose
|
|
10
|
+
* rows are here too: v4 and later refuse to run on a Forgejo runner (#4008).
|
|
11
|
+
*
|
|
12
|
+
* Refresh a row by resolving the major tag to its commit:
|
|
13
|
+
*
|
|
14
|
+
* gh api repos/actions/checkout/commits/v6 --jq .sha
|
|
15
|
+
*/
|
|
16
|
+
const pin = (slug, major, sha, tag) => ({ slug, major, sha, tag });
|
|
17
|
+
export const ACTION_PINS = {
|
|
18
|
+
checkout7: pin("actions/checkout", "v7", "3d3c42e5aac5ba805825da76410c181273ba90b1", "v7.0.1"),
|
|
19
|
+
checkout6: pin("actions/checkout", "v6", "d23441a48e516b6c34aea4fa41551a30e30af803", "v6.1.0"),
|
|
20
|
+
checkout4: pin("actions/checkout", "v4", "11d5960a326750d5838078e36cf38b85af677262", "v4.4.0"),
|
|
21
|
+
setupNode6: pin("actions/setup-node", "v6", "249970729cb0ef3589644e2896645e5dc5ba9c38", "v6.5.0"),
|
|
22
|
+
setupNode4: pin("actions/setup-node", "v4", "49933ea5288caeca8642d1e84afbd3f7d6820020", "v4.4.0"),
|
|
23
|
+
setupNode7: pin("actions/setup-node", "v7", "949feb2413d6458794dcd2491c4babbbce0c15c1", "v7.1.0"),
|
|
24
|
+
cache6: pin("actions/cache", "v6", "55cc8345863c7cc4c66a329aec7e433d2d1c52a9", "v6.1.0"),
|
|
25
|
+
uploadArtifact7: pin("actions/upload-artifact", "v7", "cf430e030ddbb5b0abf93d22962f4752f3646cd9", "v7.0.2"),
|
|
26
|
+
downloadArtifact8: pin("actions/download-artifact", "v8", "9000827ccba6bdab643e8b6fd33ac0654aef8333", "v8.0.2"),
|
|
27
|
+
setupGo7: pin("actions/setup-go", "v7", "b7ad1dad31e06c5925ef5d2fc7ad053ef454303e", "v7.0.0"),
|
|
28
|
+
setupPython7: pin("actions/setup-python", "v7", "6d4fd22b20465ccc0f7354476588e8df7c9ca0e0", "v7.1.0"),
|
|
29
|
+
setupBun2: pin("oven-sh/setup-bun", "v2", "0c5077e51419868618aeaa5fe8019c62421857d6", "v2.2.0"),
|
|
30
|
+
golangciLint9: pin("golangci/golangci-lint-action", "v9", "ba0d7d2ec06a0ea1cb5fa41b2e4a3ab91d21278a", "v9.3.0"),
|
|
31
|
+
dockerLogin4: pin("docker/login-action", "v4", "81c6f93d4bc991e510b342a00b419b3bb4efc5c6", "v4.7.0"),
|
|
32
|
+
dockerSetupBuildx4: pin("docker/setup-buildx-action", "v4", "f87e5991a6d7451dcb8d9637bfbc97413f497069", "v4.4.1"),
|
|
33
|
+
dockerMetadata6: pin("docker/metadata-action", "v6", "dc802804100637a589fabce1cb79ff13a1411302", "v6.2.0"),
|
|
34
|
+
dockerBuildPush7: pin("docker/build-push-action", "v7", "c3c9e263c25d99ce0380d002d59b67737d91b0dc", "v7.4.0"),
|
|
35
|
+
createGithubAppToken2: pin("actions/create-github-app-token", "v2", "fee1f7d63c2ff003460e3d139729b119787bc349", "v2.2.2"),
|
|
36
|
+
cacheRestore4: pin("actions/cache/restore", "v4", "0057852bfaa89a56745cba8c7296529d2fc39830", "v4.3.0"),
|
|
37
|
+
cacheSave4: pin("actions/cache/save", "v4", "0057852bfaa89a56745cba8c7296529d2fc39830", "v4.3.0"),
|
|
38
|
+
uploadArtifact4: pin("actions/upload-artifact", "v4", "ea165f8d65b6e75b540449e92b4886f43607fa02", "v4.6.2"),
|
|
39
|
+
uploadArtifact3: pin("actions/upload-artifact", "v3", "ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5", "v3.2.1"),
|
|
40
|
+
downloadArtifact4: pin("actions/download-artifact", "v4", "d3f86a106a0bac45b974a628896c90dbdf5c8093", "v4.3.0"),
|
|
41
|
+
downloadArtifact3: pin("actions/download-artifact", "v3", "9bc31d5ccc31df68ecc42ccf4149144866c47d8a", "v3.0.2"),
|
|
42
|
+
};
|
|
43
|
+
/** The `uses:` value for a pin: `actions/checkout@<sha>`. */
|
|
44
|
+
export const usesRef = (p) => `${p.slug}@${p.sha}`;
|
|
45
|
+
const TAG_BY_SHA = new Map();
|
|
46
|
+
for (const p of Object.values(ACTION_PINS))
|
|
47
|
+
TAG_BY_SHA.set(p.sha, p.tag);
|
|
48
|
+
/** Write each pinned `uses:` line's release beside it, as `# v4.4.0`. A line that has a comment, or a SHA not in the table, is left alone. */
|
|
49
|
+
export function tagComments(yaml) {
|
|
50
|
+
return yaml.replace(/^(\s*(?:- )?uses: *["']?[^\s"'#]+@([0-9a-f]{40})["']?)[ \t]*$/gm, (line, head, sha) => {
|
|
51
|
+
const tag = TAG_BY_SHA.get(sha);
|
|
52
|
+
return tag ? `${head} # ${tag}` : line;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/** Every `uses:` in a workflow that names an action by a tag or branch, not a 40-character commit SHA. Local actions and docker images are not actions on a forge. */
|
|
56
|
+
export function unpinnedActions(yaml) {
|
|
57
|
+
const out = [];
|
|
58
|
+
for (const m of yaml.matchAll(/^\s*(?:- )?uses: *["']?([^\s"'#]+)["']?/gm)) {
|
|
59
|
+
const ref = m[1];
|
|
60
|
+
if (ref.startsWith("./") || ref.startsWith("../") || ref.startsWith("docker://"))
|
|
61
|
+
continue;
|
|
62
|
+
if (!/@[0-9a-f]{40}$/.test(ref))
|
|
63
|
+
out.push(ref);
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
/** The row for the same action as the one `sha` pins, at `major`. The forgejo lexicon uses it to move a pinned `upload-artifact` v4 to v3. */
|
|
68
|
+
export function pinAtMajor(sha, major) {
|
|
69
|
+
const rows = Object.values(ACTION_PINS);
|
|
70
|
+
const from = rows.find((p) => p.sha === sha);
|
|
71
|
+
return from ? rows.find((p) => p.slug === from.slug && p.major === major) : undefined;
|
|
72
|
+
}
|
|
73
|
+
/** The major of the row `sha` belongs to, as a number, when it is in the table. */
|
|
74
|
+
export function pinMajor(sha) {
|
|
75
|
+
const row = Object.values(ACTION_PINS).find((p) => p.sha === sha);
|
|
76
|
+
return row ? Number(row.major.slice(1)) : undefined;
|
|
77
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Capabilities over AWS resources (#4375, ruled on #4361).
|
|
2
|
+
#
|
|
3
|
+
# Rules read the lexicon-neutral view, not the IR. Labels (Instance, Role,
|
|
4
|
+
# SecurityGroup) and edge names (subnet, sg, statement) come from each
|
|
5
|
+
# lexicon's mapping, so this one file serves CloudFormation (the aws lexicon)
|
|
6
|
+
# and Terraform's AWS provider (the terraform lexicon) alike.
|
|
7
|
+
#
|
|
8
|
+
# name(x) is a node set, tested with [@name]. name(a, b) is an edge, followed
|
|
9
|
+
# with ->name. Parameters follow `;`. The language is in language.ts.
|
|
10
|
+
#
|
|
11
|
+
# `## key: value` lines describe the capability that follows them, for the
|
|
12
|
+
# `capabilities` document: meaning, answers (one per line), depth, search,
|
|
13
|
+
# not-evaluated, and a line per parameter (param-<name>). A rule with no
|
|
14
|
+
# `## meaning` is a helper: other rules use it, the catalog doesn't list it.
|
|
15
|
+
|
|
16
|
+
# ------------------------------------------------------------------ helpers
|
|
17
|
+
|
|
18
|
+
in-sg(x, g) := x ->{0,1}template ->sg g:SecurityGroup
|
|
19
|
+
ingress-of(x, r) := x ->in-sg ->ingress r:IngressRule
|
|
20
|
+
world-open(r) := r:IngressRule[cidrs in ("0.0.0.0/0", "::/0")]
|
|
21
|
+
allows(r, x; action?) := r:Role <-{0,1}attachedTo ->statement :Statement[doc = "permission", effect = "Allow", actions ~ $action] ->resource x
|
|
22
|
+
| r:Role <-principal :Statement[doc = "resource", effect = "Allow", actions ~ $action] ->resource x
|
|
23
|
+
denies(r, x; action?) := r:Role <-{0,1}attachedTo ->statement :Statement[doc = "permission", effect = "Deny", actions ~ $action] ->resource x
|
|
24
|
+
| r:Role <-principal :Statement[doc = "resource", effect = "Deny", actions ~ $action] ->resource x
|
|
25
|
+
pivot(a, b) := a ->(runs-as|can-assume|network) b
|
|
26
|
+
|
|
27
|
+
# ------------------------------------------------------------------ network
|
|
28
|
+
|
|
29
|
+
## meaning: its subnet routes 0.0.0.0/0 to an internet gateway
|
|
30
|
+
## answers: which instances are in a public subnet
|
|
31
|
+
## answers: what sits in a subnet that routes to the internet
|
|
32
|
+
## depth: either
|
|
33
|
+
## not-evaluated: a subnet on its VPC's main route table (no explicit association) is not followed
|
|
34
|
+
internet-facing(c) := c:Instance ->subnet :Subnet <-subnet :RouteTableAssociation ->table :RouteTable <-table :Route[dest in ("0.0.0.0/0", "::/0", null)] ->gateway :InternetGateway
|
|
35
|
+
| c:Instance[internetFacing = true]
|
|
36
|
+
|
|
37
|
+
## meaning: a security group reaching it, directly or through a launch template, admits 0.0.0.0/0 or ::/0
|
|
38
|
+
## param-port: a port the open rule must cover, such as 22
|
|
39
|
+
## param-proto: a protocol the open rule must allow, such as tcp; a rule for every protocol (-1) always does
|
|
40
|
+
## answers: what admits SSH from anywhere
|
|
41
|
+
## answers: which instances have a security group open to the world
|
|
42
|
+
## depth: declared
|
|
43
|
+
## not-evaluated: network ACLs; prefix lists
|
|
44
|
+
open-ingress(c; port?, proto?) := c:Instance|Database|Function|Service ->ingress-of r:IngressRule[@world-open, from <= $port, to >= $port, proto in ($proto, "-1")]
|
|
45
|
+
|
|
46
|
+
## meaning: internet-facing and open-ingress, or a Lambda function URL with no auth. Load balancers and API gateways come later
|
|
47
|
+
## param-port: a port the open rule must cover, such as 22
|
|
48
|
+
## answers: what in prod can be reached on SSH from the internet
|
|
49
|
+
## answers: which instances are SSH-reachable from the internet
|
|
50
|
+
## depth: either
|
|
51
|
+
## not-evaluated: load balancers; API gateways; network ACLs
|
|
52
|
+
internet-reachable(c; port?) := c[@internet-facing, @open-ingress($port)]
|
|
53
|
+
| c:Function <-function :FunctionUrl[authType = "NONE"]
|
|
54
|
+
|
|
55
|
+
## meaning: no member, attachment or route references it
|
|
56
|
+
## answers: which security groups are unused
|
|
57
|
+
## answers: which subnets have no instances or network interfaces
|
|
58
|
+
## answers: which policies are attached to nothing
|
|
59
|
+
## depth: either
|
|
60
|
+
attached-to-nothing(x) := x:SecurityGroup !<-sg
|
|
61
|
+
| x:Subnet !<-subnet
|
|
62
|
+
| x:Policy !->attachedTo
|
|
63
|
+
| x:InternetGateway !<-gateway
|
|
64
|
+
|
|
65
|
+
## meaning: in the account's default VPC
|
|
66
|
+
## answers: which instances run in the default VPC
|
|
67
|
+
## answers: which instances are not in the default VPC (negate it: !cap:in-default-vpc)
|
|
68
|
+
## depth: either
|
|
69
|
+
in-default-vpc(x) := x ->{1,2}(subnet|vpc) :Vpc[isDefault = true]
|
|
70
|
+
|
|
71
|
+
## meaning: host to host through security-group-to-group ingress
|
|
72
|
+
## answers: what can this instance reach on the network
|
|
73
|
+
## depth: declared
|
|
74
|
+
## not-evaluated: CIDR-to-CIDR reachability inside the VPC; network ACLs
|
|
75
|
+
network(a, y) := a:Instance|Database|Function|Service ->in-sg <-source :IngressRule <-ingress :SecurityGroup <-in-sg y:Instance|Database|Function|Service
|
|
76
|
+
|
|
77
|
+
# ------------------------------------------------------------------ data
|
|
78
|
+
|
|
79
|
+
## meaning: a bucket, table, database, queue, file system or secret
|
|
80
|
+
## answers: where is our data
|
|
81
|
+
## depth: declared
|
|
82
|
+
stores-data(x) := x:Bucket|Table|Database|Queue|FileSystem|Secret|Parameter
|
|
83
|
+
|
|
84
|
+
## meaning: a secret, an SSM SecureString, or a data store tagged as restricted (the tag keys are the lexicon mapping's classificationTags)
|
|
85
|
+
## answers: which stores hold secrets or restricted data
|
|
86
|
+
## depth: declared
|
|
87
|
+
holds-secret(x) := x:Secret
|
|
88
|
+
| x:Parameter[paramType = "SecureString"]
|
|
89
|
+
| x:Bucket|Table|Database|Queue|FileSystem[classification in ("restricted", "secret", "confidential")]
|
|
90
|
+
|
|
91
|
+
## meaning: encrypted at rest: a database, file system or volume whose encryption attribute is set; S3 buckets, DynamoDB tables, SQS queues and secrets always are
|
|
92
|
+
## answers: which data stores are not encrypted at rest (negate it: !cap:encrypted-at-rest)
|
|
93
|
+
## depth: declared
|
|
94
|
+
## not-evaluated: account-level EBS encryption by default; which key (AWS-owned, AWS-managed or customer-managed)
|
|
95
|
+
encrypted-at-rest(x) := x:Database|FileSystem|Volume[encrypted = true]
|
|
96
|
+
| x:Bucket|Table|Queue|Secret
|
|
97
|
+
|
|
98
|
+
## meaning: a bucket whose policy allows principal * and no public-access block stops it, or a public ACL
|
|
99
|
+
## answers: what is public
|
|
100
|
+
## answers: which buckets can anyone read
|
|
101
|
+
## depth: declared
|
|
102
|
+
## not-evaluated: IAM Condition keys; account-level public-access blocks
|
|
103
|
+
publicly-readable(x) := x:Bucket[!blockPublicPolicy = true] !<-blocks :PublicAccessBlock[blockPublicPolicy = true] <-policyOf :ResourcePolicy ->statement :Statement[doc = "resource", effect = "Allow", principals in ("*")]
|
|
104
|
+
| x:Bucket[acl in ("public-read", "public-read-write")]
|
|
105
|
+
|
|
106
|
+
# ------------------------------------------------------------------ identity
|
|
107
|
+
|
|
108
|
+
## meaning: compute to the role it runs as (instance profile, also through a launch template; Lambda role; ECS task role)
|
|
109
|
+
## answers: what identity does this instance run as
|
|
110
|
+
## depth: declared
|
|
111
|
+
runs-as(c, r) := c:Instance|Function|Service|TaskDefinition ->{0,1}template ->{0,1}(profile|task) ->role r:Role
|
|
112
|
+
|
|
113
|
+
## meaning: role to role, where both the caller's permission and the target's trust allow sts:AssumeRole
|
|
114
|
+
## answers: which roles can this role become
|
|
115
|
+
## depth: declared
|
|
116
|
+
## not-evaluated: IAM Condition keys; Resource "*"; a trust policy that names the account root
|
|
117
|
+
can-assume(a, b) := a:Role <-{0,1}attachedTo ->statement :Statement[doc = "permission", effect = "Allow", actions ~ "sts:AssumeRole"] ->resource b:Role ->statement :Statement[doc = "trust", actions ~ "sts:AssumeRole"] ->principal a
|
|
118
|
+
|
|
119
|
+
## meaning: role to resource, by an identity policy or a resource policy, with no explicit Deny on the same pair
|
|
120
|
+
## param-action: an IAM action the grant must cover, such as dynamodb:GetItem
|
|
121
|
+
## answers: what can this role touch
|
|
122
|
+
## answers: what can reach the customer database (read it in reverse: <-[cap=grants])
|
|
123
|
+
## depth: declared
|
|
124
|
+
## not-evaluated: IAM Condition keys; Resource "*"; NotAction and NotResource; permission boundaries and SCPs; AWS-managed policies, named by ARN only; resources the graph holds but can't resolve, such as an expression naming nothing declared
|
|
125
|
+
grants(r, x; action?) := r:Role ->allows($action) x !<-denies($action) r
|
|
126
|
+
|
|
127
|
+
## meaning: can-assume any number of times, then grants
|
|
128
|
+
## param-action: an IAM action the grant must cover, such as s3:GetObject
|
|
129
|
+
## answers: if this role is compromised, what data can it reach
|
|
130
|
+
## answers: what can reach the customer database (read it in reverse: <-[cap=reaches])
|
|
131
|
+
## depth: declared
|
|
132
|
+
## not-evaluated: IAM Condition keys; Resource "*"; NotAction and NotResource; permission boundaries and SCPs; AWS-managed policies, named by ARN only; resources the graph holds but can't resolve, such as an expression naming nothing declared
|
|
133
|
+
reaches(r, x; action?) := r:Role ->{0,}can-assume ->grants($action) x
|
|
134
|
+
|
|
135
|
+
# ------------------------------------------------------------------ paths
|
|
136
|
+
|
|
137
|
+
## meaning: internet-reachable compute that runs as a role that reaches a store holding a secret
|
|
138
|
+
## answers: is there an exfiltration path from the internet to our data
|
|
139
|
+
## answers: which internet-facing hosts can read restricted data
|
|
140
|
+
## depth: declared
|
|
141
|
+
## not-evaluated: IAM Condition keys; Resource "*"; load balancers and API gateways; resources the graph holds but can't resolve, such as an expression naming nothing declared
|
|
142
|
+
exfiltrates(c, x) := c[@internet-reachable] ->runs-as ->reaches x[@holds-secret]
|
|
143
|
+
|
|
144
|
+
## meaning: what a compromise of it reaches: runs-as, can-assume and network any number of times, then what each identity is granted
|
|
145
|
+
## answers: what is the blast radius if this host is compromised
|
|
146
|
+
## depth: declared
|
|
147
|
+
## not-evaluated: IAM Condition keys; Resource "*"; CIDR-to-CIDR reachability; resources the graph holds but can't resolve, such as an expression naming nothing declared
|
|
148
|
+
blast(s, x) := s ->{0,}pivot ->{0,1}grants x
|