@intentius/chant 0.124.52 → 0.124.54
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/audit/discover.d.ts.map +1 -1
- package/dist/audit/discover.js +3 -1
- package/dist/behaviour.d.ts +1 -1
- package/dist/behaviour.d.ts.map +1 -1
- package/dist/capabilities/templates.d.ts +65 -0
- package/dist/capabilities/templates.d.ts.map +1 -0
- package/dist/capabilities/templates.js +193 -0
- package/dist/capabilities/templates.json +145 -0
- package/dist/change-set-graph.d.ts +35 -3
- package/dist/change-set-graph.d.ts.map +1 -1
- package/dist/change-set-graph.js +60 -9
- package/dist/change-set.d.ts +65 -7
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +23 -12
- package/dist/ci-identity.d.ts +7 -2
- package/dist/ci-identity.d.ts.map +1 -1
- package/dist/ci-identity.js +4 -1
- package/dist/cli/commands/import-index.d.ts +52 -0
- package/dist/cli/commands/import-index.d.ts.map +1 -0
- package/dist/cli/commands/import-index.js +226 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +4 -2
- package/dist/cli/handlers/components.d.ts.map +1 -1
- package/dist/cli/handlers/components.js +11 -2
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +16 -3
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +22 -4
- package/dist/cli/handlers/index-cloud.d.ts +14 -0
- package/dist/cli/handlers/index-cloud.d.ts.map +1 -0
- package/dist/cli/handlers/index-cloud.js +22 -0
- package/dist/cli/handlers/index-diff.d.ts +18 -0
- package/dist/cli/handlers/index-diff.d.ts.map +1 -0
- package/dist/cli/handlers/index-diff.js +142 -0
- package/dist/cli/handlers/lifecycle-drift.d.ts +25 -0
- package/dist/cli/handlers/lifecycle-drift.d.ts.map +1 -0
- package/dist/cli/handlers/lifecycle-drift.js +64 -0
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.js +188 -28
- package/dist/cli/handlers/misc.d.ts +9 -0
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/misc.js +77 -0
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +15 -2
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +89 -15
- package/dist/cli/handlers/query.d.ts.map +1 -1
- package/dist/cli/handlers/query.js +28 -4
- package/dist/cli/handlers/scenario.d.ts.map +1 -1
- package/dist/cli/handlers/scenario.js +8 -7
- package/dist/cli/handlers/search.d.ts +34 -4
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +216 -36
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +55 -1
- package/dist/cli/mcp/lifecycle-tools.d.ts.map +1 -1
- package/dist/cli/mcp/lifecycle-tools.js +3 -2
- package/dist/cli/mcp/resource-handlers.d.ts.map +1 -1
- package/dist/cli/mcp/resource-handlers.js +4 -3
- package/dist/cli/mcp/workspace-tools.js +1 -1
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +55 -2
- package/dist/cli/registry.d.ts +19 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cloud-lister/aws.d.ts +35 -0
- package/dist/cloud-lister/aws.d.ts.map +1 -0
- package/dist/cloud-lister/aws.js +203 -0
- package/dist/cloud-lister/azure.d.ts +34 -0
- package/dist/cloud-lister/azure.d.ts.map +1 -0
- package/dist/cloud-lister/azure.js +129 -0
- package/dist/cloud-lister/common.d.ts +40 -0
- package/dist/cloud-lister/common.d.ts.map +1 -0
- package/dist/cloud-lister/common.js +83 -0
- package/dist/cloud-lister/credentials.d.ts +50 -0
- package/dist/cloud-lister/credentials.d.ts.map +1 -0
- package/dist/cloud-lister/credentials.js +86 -0
- package/dist/cloud-lister/fakes.d.ts +27 -0
- package/dist/cloud-lister/fakes.d.ts.map +1 -0
- package/dist/cloud-lister/fakes.js +50 -0
- package/dist/cloud-lister/gcp.d.ts +42 -0
- package/dist/cloud-lister/gcp.d.ts.map +1 -0
- package/dist/cloud-lister/gcp.js +143 -0
- package/dist/cloud-lister/guard.d.ts +49 -0
- package/dist/cloud-lister/guard.d.ts.map +1 -0
- package/dist/cloud-lister/guard.js +103 -0
- package/dist/cloud-lister/ids.d.ts +23 -0
- package/dist/cloud-lister/ids.d.ts.map +1 -0
- package/dist/cloud-lister/ids.js +42 -0
- package/dist/cloud-lister/index.d.ts +67 -0
- package/dist/cloud-lister/index.d.ts.map +1 -0
- package/dist/cloud-lister/index.js +102 -0
- package/dist/cloud-lister/kubernetes.d.ts +64 -0
- package/dist/cloud-lister/kubernetes.d.ts.map +1 -0
- package/dist/cloud-lister/kubernetes.js +276 -0
- package/dist/cloud-lister/markers.d.ts +31 -0
- package/dist/cloud-lister/markers.d.ts.map +1 -0
- package/dist/cloud-lister/markers.js +73 -0
- package/dist/cloud-lister/mask.d.ts +31 -0
- package/dist/cloud-lister/mask.d.ts.map +1 -0
- package/dist/cloud-lister/mask.js +74 -0
- package/dist/cloud-lister/sigv4.d.ts +29 -0
- package/dist/cloud-lister/sigv4.d.ts.map +1 -0
- package/dist/cloud-lister/sigv4.js +54 -0
- package/dist/cloud-lister/transport.d.ts +55 -0
- package/dist/cloud-lister/transport.d.ts.map +1 -0
- package/dist/cloud-lister/transport.js +86 -0
- package/dist/cloud-lister/types.d.ts +121 -0
- package/dist/cloud-lister/types.d.ts.map +1 -0
- package/dist/cloud-lister/types.js +24 -0
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.js +6 -0
- package/dist/components/capability-plugin.d.ts +9 -0
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/capability.d.ts +215 -0
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/cli-support.d.ts +21 -0
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/cli-support.js +58 -14
- package/dist/components/declared-reads.d.ts +38 -0
- package/dist/components/declared-reads.d.ts.map +1 -0
- package/dist/components/declared-reads.js +131 -0
- package/dist/components/deploy-units.d.ts.map +1 -1
- package/dist/components/deploy-units.js +4 -0
- package/dist/components/driver.d.ts +34 -1
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +66 -3
- package/dist/components/fan-out-run.d.ts +23 -1
- package/dist/components/fan-out-run.d.ts.map +1 -1
- package/dist/components/fan-out-run.js +82 -14
- package/dist/components/fan-out-support.d.ts +6 -0
- package/dist/components/fan-out-support.d.ts.map +1 -1
- package/dist/components/fan-out-support.js +4 -1
- package/dist/components/fan-out.d.ts +28 -0
- package/dist/components/fan-out.d.ts.map +1 -1
- package/dist/components/groups.d.ts +229 -0
- package/dist/components/groups.d.ts.map +1 -0
- package/dist/components/groups.js +760 -0
- package/dist/components/index.d.ts +6 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +4 -0
- package/dist/components/plan-shape-conformance.d.ts +48 -0
- package/dist/components/plan-shape-conformance.d.ts.map +1 -0
- package/dist/components/plan-shape-conformance.js +122 -0
- package/dist/components/pr-run.d.ts +41 -4
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +209 -39
- package/dist/components/promote-rounds.d.ts +9 -0
- package/dist/components/promote-rounds.d.ts.map +1 -1
- package/dist/components/promote-rounds.js +23 -2
- package/dist/components/promote.d.ts +17 -0
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +36 -6
- package/dist/components/release-gate.d.ts +23 -1
- package/dist/components/release-gate.d.ts.map +1 -1
- package/dist/components/release-gate.js +97 -33
- package/dist/components/run-groups.d.ts +58 -0
- package/dist/components/run-groups.d.ts.map +1 -0
- package/dist/components/run-groups.js +78 -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 +6 -1
- package/dist/components/verbs/index.d.ts +1 -0
- package/dist/components/verbs/index.d.ts.map +1 -1
- package/dist/components/verbs/index.js +1 -0
- package/dist/components/verbs/member-outputs.d.ts +187 -0
- package/dist/components/verbs/member-outputs.d.ts.map +1 -0
- package/dist/components/verbs/member-outputs.js +218 -0
- package/dist/config.d.ts +60 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +27 -0
- package/dist/deep-observation.d.ts +1 -13
- package/dist/deep-observation.d.ts.map +1 -1
- package/dist/deep-observation.js +5 -22
- package/dist/drift-record.d.ts +542 -0
- package/dist/drift-record.d.ts.map +1 -0
- package/dist/drift-record.js +886 -0
- package/dist/engine-facts.d.ts +144 -0
- package/dist/engine-facts.d.ts.map +1 -0
- package/dist/engine-facts.js +14 -0
- package/dist/graph-ir.d.ts +153 -2
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-ir.js +224 -6
- package/dist/graph-refs.d.ts +145 -0
- package/dist/graph-refs.d.ts.map +1 -1
- package/dist/graph-refs.js +305 -0
- package/dist/graph-schema/fixtures/adopt.json +15 -0
- package/dist/graph-schema/fixtures/choudoufu.engine-graph.json +169 -0
- package/dist/graph-schema/fixtures/index.json +68 -0
- package/dist/graph-schema/fixtures/plunge.engine-graph.json +158 -0
- package/dist/graph-schema/fixtures.d.ts +23 -0
- package/dist/graph-schema/fixtures.d.ts.map +1 -0
- package/dist/graph-schema/fixtures.js +246 -0
- package/dist/graph-schema/generate.d.ts +15 -0
- package/dist/graph-schema/generate.d.ts.map +1 -0
- package/dist/graph-schema/generate.js +267 -0
- package/dist/graph-schema/graph.schema.json +1387 -0
- package/dist/health.schema.json +2 -1
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/instance-nodes.d.ts +159 -0
- package/dist/instance-nodes.d.ts.map +1 -0
- package/dist/instance-nodes.js +231 -0
- package/dist/lexicon.d.ts +72 -0
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/adoption-file.d.ts +56 -0
- package/dist/lifecycle/adoption-file.d.ts.map +1 -0
- package/dist/lifecycle/adoption-file.js +123 -0
- package/dist/lifecycle/cloud-index.d.ts +186 -0
- package/dist/lifecycle/cloud-index.d.ts.map +1 -0
- package/dist/lifecycle/cloud-index.js +618 -0
- package/dist/lifecycle/derive-edges.d.ts +59 -0
- package/dist/lifecycle/derive-edges.d.ts.map +1 -0
- package/dist/lifecycle/derive-edges.js +126 -0
- package/dist/lifecycle/git.d.ts +10 -9
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/git.js +7 -1
- package/dist/lifecycle/identity-match.d.ts +133 -0
- package/dist/lifecycle/identity-match.d.ts.map +1 -0
- package/dist/lifecycle/identity-match.js +147 -0
- package/dist/lifecycle/index-diff.d.ts +224 -0
- package/dist/lifecycle/index-diff.d.ts.map +1 -0
- package/dist/lifecycle/index-diff.js +327 -0
- package/dist/lifecycle/index-document.d.ts +130 -0
- package/dist/lifecycle/index-document.d.ts.map +1 -0
- package/dist/lifecycle/index-document.js +189 -0
- package/dist/lifecycle/index-drift.d.ts +121 -0
- package/dist/lifecycle/index-drift.d.ts.map +1 -0
- package/dist/lifecycle/index-drift.js +178 -0
- package/dist/lifecycle/index-import.d.ts +168 -0
- package/dist/lifecycle/index-import.d.ts.map +1 -0
- package/dist/lifecycle/index-import.js +515 -0
- package/dist/lifecycle/index-join.d.ts +129 -0
- package/dist/lifecycle/index-join.d.ts.map +1 -0
- package/dist/lifecycle/index-join.js +248 -0
- package/dist/lifecycle/index.d.ts +4 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +4 -0
- package/dist/lifecycle/observation-baseline.d.ts +61 -21
- package/dist/lifecycle/observation-baseline.d.ts.map +1 -1
- package/dist/lifecycle/observation-baseline.js +144 -19
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/observe.js +6 -1
- package/dist/lifecycle/query.d.ts +45 -4
- package/dist/lifecycle/query.d.ts.map +1 -1
- package/dist/lifecycle/query.js +89 -7
- package/dist/lifecycle/replay.d.ts +10 -3
- package/dist/lifecycle/replay.d.ts.map +1 -1
- package/dist/lifecycle/replay.js +10 -6
- package/dist/lifecycle/scenario.d.ts +4 -3
- package/dist/lifecycle/scenario.d.ts.map +1 -1
- package/dist/lifecycle/snapshot-store-fake.d.ts +9 -0
- package/dist/lifecycle/snapshot-store-fake.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store-fake.js +21 -0
- package/dist/lifecycle/snapshot-store-s3.d.ts +102 -0
- package/dist/lifecycle/snapshot-store-s3.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store-s3.js +254 -0
- package/dist/lifecycle/snapshot-store.d.ts +170 -0
- package/dist/lifecycle/snapshot-store.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store.js +832 -0
- package/dist/lifecycle/snapshot.d.ts +11 -0
- package/dist/lifecycle/snapshot.d.ts.map +1 -1
- package/dist/lifecycle/snapshot.js +18 -5
- package/dist/lifecycle/type-listing.d.ts +148 -0
- package/dist/lifecycle/type-listing.d.ts.map +1 -0
- package/dist/lifecycle/type-listing.js +166 -0
- package/dist/lint/component-checks.d.ts +15 -1
- package/dist/lint/component-checks.d.ts.map +1 -1
- package/dist/lint/component-checks.js +1 -0
- package/dist/lint/presets/relaxed.json +2 -1
- package/dist/lint/presets/strict.json +2 -1
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.d.ts +4 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.d.ts.map +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.js +13 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.d.ts +4 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.d.ts.map +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.js +8 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.d.ts +33 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.d.ts.map +1 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.js +123 -0
- package/dist/lint/rules/comp/index.d.ts +2 -1
- package/dist/lint/rules/comp/index.d.ts.map +1 -1
- package/dist/lint/rules/comp/index.js +4 -1
- package/dist/observation.d.ts +19 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +18 -1
- package/dist/op/activities/activity-contracts.d.ts +1 -1
- package/dist/op/activities/activity-contracts.js +1 -1
- package/dist/op/activities/change-set.d.ts +6 -4
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +4 -2
- package/dist/op/activity-failure.d.ts +27 -0
- package/dist/op/activity-failure.d.ts.map +1 -1
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/index.d.ts +2 -1
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/index.js +1 -1
- package/dist/op/local-executor.d.ts +5 -1
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +22 -8
- package/dist/pr-loop.d.ts +56 -1
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +51 -1
- package/dist/pulumi-urn.d.ts +101 -0
- package/dist/pulumi-urn.d.ts.map +1 -0
- package/dist/pulumi-urn.js +131 -0
- package/dist/release-floors.d.ts +23 -0
- package/dist/release-floors.d.ts.map +1 -0
- package/dist/release-floors.js +22 -0
- package/dist/sensitive-key.d.ts +23 -0
- package/dist/sensitive-key.d.ts.map +1 -0
- package/dist/sensitive-key.js +31 -0
- package/dist/wave-runtime.mjs +234 -234
- package/dist/workspace/adoption-report.d.ts +53 -0
- package/dist/workspace/adoption-report.d.ts.map +1 -0
- package/dist/workspace/adoption-report.js +76 -0
- package/dist/workspace/capabilities-contract.d.ts +7 -0
- package/dist/workspace/capabilities-contract.d.ts.map +1 -1
- package/dist/workspace/capabilities-contract.js +2 -1
- package/dist/workspace/capabilities.schema.json +98 -0
- package/dist/workspace/change-set.schema.json +42 -3
- package/dist/workspace/ci-cloud-identity.d.ts +13 -1
- package/dist/workspace/ci-cloud-identity.d.ts.map +1 -1
- package/dist/workspace/ci-cloud-identity.js +30 -1
- package/dist/workspace/compose-graph.d.ts +10 -1
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/compose-graph.js +6 -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 +6 -1
- package/dist/workspace/drift-cli.d.ts +81 -0
- package/dist/workspace/drift-cli.d.ts.map +1 -0
- package/dist/workspace/drift-cli.js +317 -0
- package/dist/workspace/drift.schema.json +672 -0
- package/dist/workspace/graph-cli.d.ts +2 -0
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +3 -0
- package/dist/workspace/graph.schema.json +72 -0
- package/dist/workspace/init.d.ts +5 -1
- package/dist/workspace/init.d.ts.map +1 -1
- package/dist/workspace/init.js +55 -9
- package/dist/workspace/ledger.schema.json +1 -1
- package/dist/workspace/nested-graph.d.ts.map +1 -1
- package/dist/workspace/nested-graph.js +2 -0
- package/dist/workspace/pr-report.schema.json +51 -2
- package/dist/workspace/promote-waves.d.ts +112 -0
- package/dist/workspace/promote-waves.d.ts.map +1 -0
- package/dist/workspace/promote-waves.js +290 -0
- package/dist/workspace/promote.d.ts +84 -2
- package/dist/workspace/promote.d.ts.map +1 -1
- package/dist/workspace/promote.js +347 -61
- package/dist/workspace/reason-codes.d.ts +12 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +14 -0
- package/dist/workspace/search-contract.d.ts +3 -3
- package/dist/workspace/search-contract.d.ts.map +1 -1
- package/dist/workspace/search-contract.js +2 -0
- package/dist/workspace/search.schema.json +103 -5
- package/package.json +14 -1
- package/src/__fixtures__/drift-record/README.md +58 -0
- package/src/__fixtures__/drift-record/choudoufu-cone.ndjson +4 -0
- package/src/__fixtures__/drift-record/choudoufu-resource.ndjson +3 -0
- package/src/__fixtures__/drift-record/component-status-ledger.json +65 -0
- package/src/__fixtures__/drift-record/component-status.json +91 -0
- package/src/__fixtures__/drift-record/deep-diff.json +259 -0
- package/src/__fixtures__/drift-record/lifecycle-diff-live.json +825 -0
- package/src/__fixtures__/drift-record/live-diff.json +125 -0
- package/src/audit/discover.e2e.test.ts +14 -0
- package/src/audit/discover.ts +3 -1
- package/src/behaviour.ts +1 -1
- package/src/capabilities/templates.json +145 -0
- package/src/capabilities/templates.test.ts +212 -0
- package/src/capabilities/templates.ts +204 -0
- package/src/change-set-bundle.test.ts +83 -0
- package/src/change-set-graph.ts +80 -9
- package/src/change-set.test.ts +24 -0
- package/src/change-set.ts +77 -14
- package/src/ci-identity-targets.test.ts +23 -0
- package/src/ci-identity.ts +10 -4
- package/src/cli/commands/import-index.test.ts +117 -0
- package/src/cli/commands/import-index.ts +265 -0
- package/src/cli/commands/lint.ts +4 -2
- package/src/cli/handlers/components.test.ts +9 -0
- package/src/cli/handlers/components.ts +12 -2
- package/src/cli/handlers/fan-out.ts +17 -3
- package/src/cli/handlers/graph.test.ts +42 -0
- package/src/cli/handlers/graph.ts +26 -4
- package/src/cli/handlers/index-cloud.ts +32 -0
- package/src/cli/handlers/index-diff.test.ts +68 -0
- package/src/cli/handlers/index-diff.ts +146 -0
- package/src/cli/handlers/ledger-root-member.test.ts +161 -0
- package/src/cli/handlers/lifecycle-drift.ts +68 -0
- package/src/cli/handlers/lifecycle.test.ts +33 -11
- package/src/cli/handlers/lifecycle.ts +205 -30
- package/src/cli/handlers/misc.ts +73 -0
- package/src/cli/handlers/pr-waves-blocked.test.ts +37 -2
- package/src/cli/handlers/pr.ts +14 -2
- package/src/cli/handlers/promote.test.ts +64 -0
- package/src/cli/handlers/promote.ts +81 -6
- package/src/cli/handlers/query.ts +27 -4
- package/src/cli/handlers/run-declared-reads-cli.test.ts +187 -0
- package/src/cli/handlers/run-groups-cli.test.ts +229 -0
- package/src/cli/handlers/scenario.test.ts +13 -0
- package/src/cli/handlers/scenario.ts +8 -7
- package/src/cli/handlers/search-index.test.ts +255 -0
- package/src/cli/handlers/search-json.test.ts +1 -1
- package/src/cli/handlers/search-ownership.test.ts +194 -0
- package/src/cli/handlers/search.ts +271 -38
- package/src/cli/main.test.ts +7 -0
- package/src/cli/main.ts +56 -1
- package/src/cli/mcp/lifecycle-tools.ts +3 -2
- package/src/cli/mcp/resource-handlers.ts +4 -3
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/cli/parse-args.ts +40 -2
- package/src/cli/registry.ts +19 -1
- package/src/cloud-lister/aws.test.ts +202 -0
- package/src/cloud-lister/aws.ts +226 -0
- package/src/cloud-lister/azure.test.ts +132 -0
- package/src/cloud-lister/azure.ts +142 -0
- package/src/cloud-lister/common.ts +115 -0
- package/src/cloud-lister/credentials.ts +110 -0
- package/src/cloud-lister/fakes.ts +66 -0
- package/src/cloud-lister/gcp.test.ts +121 -0
- package/src/cloud-lister/gcp.ts +159 -0
- package/src/cloud-lister/guard.test.ts +198 -0
- package/src/cloud-lister/guard.ts +111 -0
- package/src/cloud-lister/ids.ts +54 -0
- package/src/cloud-lister/index.ts +134 -0
- package/src/cloud-lister/kubernetes.test.ts +160 -0
- package/src/cloud-lister/kubernetes.ts +284 -0
- package/src/cloud-lister/markers.ts +74 -0
- package/src/cloud-lister/mask.ts +77 -0
- package/src/cloud-lister/shape.test.ts +81 -0
- package/src/cloud-lister/sigv4.ts +70 -0
- package/src/cloud-lister/transport.ts +118 -0
- package/src/cloud-lister/types.ts +135 -0
- package/src/components/capability-plugin-loader.ts +4 -0
- package/src/components/capability-plugin.ts +10 -0
- package/src/components/capability.ts +229 -0
- package/src/components/cli-support.ts +70 -14
- package/src/components/declared-reads.test.ts +103 -0
- package/src/components/declared-reads.ts +134 -0
- package/src/components/deploy-units.ts +4 -0
- package/src/components/driver.ts +89 -4
- package/src/components/fan-out-run.ts +95 -15
- package/src/components/fan-out-support.ts +10 -1
- package/src/components/fan-out.ts +30 -0
- package/src/components/groups.test.ts +320 -0
- package/src/components/groups.ts +880 -0
- package/src/components/index.ts +42 -0
- package/src/components/plan-shape-conformance.ts +130 -0
- package/src/components/pr-env-run-bundle.test.ts +2 -0
- package/src/components/pr-run.test.ts +516 -3
- package/src/components/pr-run.ts +231 -41
- package/src/components/promote-rounds.ts +25 -2
- package/src/components/promote.ts +55 -5
- package/src/components/registry.test.ts +1 -1
- package/src/components/release-gate.ts +115 -30
- package/src/components/release-groups.test.ts +362 -0
- package/src/components/run-groups.ts +113 -0
- package/src/components/starter-plugin.ts +6 -0
- package/src/components/verbs/index.ts +1 -0
- package/src/components/verbs/member-outputs.test.ts +205 -0
- package/src/components/verbs/member-outputs.ts +308 -0
- package/src/config.ts +44 -0
- package/src/deep-observation.ts +5 -23
- package/src/drift-record.test.ts +596 -0
- package/src/drift-record.ts +1206 -0
- package/src/engine-facts.guard.test.ts +111 -0
- package/src/engine-facts.test.ts +178 -0
- package/src/engine-facts.ts +154 -0
- package/src/gated-waves-bundle.test.ts +2 -0
- package/src/graph-ir-live.test.ts +92 -0
- package/src/graph-ir.ts +317 -7
- package/src/graph-refs.ts +416 -0
- package/src/graph-schema/fixtures/adopt.json +15 -0
- package/src/graph-schema/fixtures/choudoufu.engine-graph.json +169 -0
- package/src/graph-schema/fixtures/index.json +68 -0
- package/src/graph-schema/fixtures/plunge.engine-graph.json +158 -0
- package/src/graph-schema/fixtures.ts +267 -0
- package/src/graph-schema/generate.ts +263 -0
- package/src/graph-schema/graph-schema.test.ts +153 -0
- package/src/graph-schema/graph.schema.json +1387 -0
- package/src/health.schema.json +2 -1
- package/src/identity.ts +2 -0
- package/src/index.ts +2 -0
- package/src/instance-nodes.ts +288 -0
- package/src/lexicon.ts +76 -0
- package/src/lifecycle/__fixtures__/index-diff/20261026T120000Z-aaaaaaaaaaaa.json +149 -0
- package/src/lifecycle/__fixtures__/index-diff/20261026T130000Z-bbbbbbbbbbbb.json +127 -0
- package/src/lifecycle/adoption-file.test.ts +100 -0
- package/src/lifecycle/adoption-file.ts +154 -0
- package/src/lifecycle/cloud-index.test.ts +517 -0
- package/src/lifecycle/cloud-index.ts +736 -0
- package/src/lifecycle/derive-edges.test.ts +193 -0
- package/src/lifecycle/derive-edges.ts +182 -0
- package/src/lifecycle/git.ts +10 -4
- package/src/lifecycle/identity-match.test.ts +308 -0
- package/src/lifecycle/identity-match.ts +257 -0
- package/src/lifecycle/index-diff.test.ts +198 -0
- package/src/lifecycle/index-diff.ts +476 -0
- package/src/lifecycle/index-document.test.ts +64 -0
- package/src/lifecycle/index-document.ts +299 -0
- package/src/lifecycle/index-drift.test.ts +191 -0
- package/src/lifecycle/index-drift.ts +304 -0
- package/src/lifecycle/index-import.test.ts +255 -0
- package/src/lifecycle/index-import.ts +634 -0
- package/src/lifecycle/index-join.test.ts +250 -0
- package/src/lifecycle/index-join.ts +304 -0
- package/src/lifecycle/index-store-load-bearing.test.ts +187 -0
- package/src/lifecycle/index.ts +4 -0
- package/src/lifecycle/member-ledger.test.ts +25 -7
- package/src/lifecycle/observation-baseline.test.ts +72 -1
- package/src/lifecycle/observation-baseline.ts +190 -27
- package/src/lifecycle/observe.ts +6 -1
- package/src/lifecycle/query.test.ts +69 -1
- package/src/lifecycle/query.ts +103 -10
- package/src/lifecycle/replay.test.ts +9 -5
- package/src/lifecycle/replay.ts +9 -5
- package/src/lifecycle/scenario.ts +4 -3
- package/src/lifecycle/snapshot-store-fake.ts +29 -0
- package/src/lifecycle/snapshot-store-s3.ts +316 -0
- package/src/lifecycle/snapshot-store.test.ts +385 -0
- package/src/lifecycle/snapshot-store.ts +981 -0
- package/src/lifecycle/snapshot.test.ts +13 -0
- package/src/lifecycle/snapshot.ts +23 -6
- package/src/lifecycle/type-listing.test.ts +166 -0
- package/src/lifecycle/type-listing.ts +309 -0
- package/src/lint/component-checks.ts +17 -1
- package/src/lint/config.test.ts +3 -0
- package/src/lint/presets/relaxed.json +2 -1
- package/src/lint/presets/strict.json +2 -1
- package/src/lint/rules/__fixtures__/comp/comp008/fail/dns.component.ts +15 -0
- package/src/lint/rules/__fixtures__/comp/comp008/pass/dns.component.ts +10 -0
- package/src/lint/rules/comp/comp.test.ts +2 -1
- package/src/lint/rules/comp/comp008-applies-signal-only-root.ts +121 -0
- package/src/lint/rules/comp/comp008.test.ts +77 -0
- package/src/lint/rules/comp/index.ts +4 -1
- package/src/observation-edges.test.ts +33 -0
- package/src/observation.ts +36 -1
- package/src/op/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +8 -5
- package/src/op/activity-failure.ts +36 -0
- package/src/op/index.ts +2 -1
- package/src/op/local-executor.test.ts +80 -0
- package/src/op/local-executor.ts +27 -9
- package/src/pr-loop-bundle.test.ts +5 -2
- package/src/pr-loop.test.ts +43 -0
- package/src/pr-loop.ts +111 -2
- package/src/pulumi-urn.ts +151 -0
- package/src/release-floors.ts +22 -0
- package/src/sensitive-key.ts +34 -0
- package/src/workspace/adoption-report.test.ts +61 -0
- package/src/workspace/adoption-report.ts +103 -0
- package/src/workspace/capabilities-contract.test.ts +4 -0
- package/src/workspace/capabilities-contract.ts +9 -1
- package/src/workspace/capabilities.schema.json +98 -0
- package/src/workspace/change-set.schema.json +42 -3
- package/src/workspace/ci-cloud-identity.ts +31 -1
- package/src/workspace/compose-graph.test.ts +12 -0
- package/src/workspace/compose-graph.ts +12 -1
- package/src/workspace/conformance/conformance.e2e.test.ts +2 -1
- package/src/workspace/conformance/index.ts +6 -1
- package/src/workspace/drift-cli.test.ts +65 -0
- package/src/workspace/drift-cli.ts +365 -0
- package/src/workspace/drift.schema.json +672 -0
- package/src/workspace/graph-cli.ts +5 -0
- package/src/workspace/graph.schema.json +72 -0
- package/src/workspace/init.test.ts +38 -1
- package/src/workspace/init.ts +50 -8
- package/src/workspace/intent-gaps.test.ts +18 -2
- package/src/workspace/ledger.schema.json +1 -1
- package/src/workspace/nested-graph.ts +1 -0
- package/src/workspace/pr-report.schema.json +51 -2
- package/src/workspace/promote-waves.test.ts +296 -0
- package/src/workspace/promote-waves.ts +340 -0
- package/src/workspace/promote.test.ts +158 -4
- package/src/workspace/promote.ts +398 -57
- package/src/workspace/reason-codes.test.ts +4 -1
- package/src/workspace/reason-codes.ts +14 -0
- package/src/workspace/search-contract.ts +2 -0
- package/src/workspace/search.schema.json +103 -5
|
@@ -41,6 +41,7 @@ import { deployContext, runComponentDeploy, } from "./driver.js";
|
|
|
41
41
|
import { downstreamWithin, remainingFanOut } from "./fan-out.js";
|
|
42
42
|
import { evaluateGate, gitGateLedgerPort } from "../op/gate.js";
|
|
43
43
|
import { emitGateStep, joinRunEventSinks, progressSinkOf } from "../run-event-stream.js";
|
|
44
|
+
import { groupsByComponent, narrowGroups, planAndRunComponentGroup, runComponentGroup } from "./groups.js";
|
|
44
45
|
import { planWaveComponent } from "./wave-plan.js";
|
|
45
46
|
import { computePlanDigest } from "../lifecycle/plan-digest.js";
|
|
46
47
|
import { decideWaveGate, runWaveLoop, waveGateName, waveSetDigest } from "../wave-engine.js";
|
|
@@ -130,13 +131,17 @@ export async function runFanOut(plan, components, registry, options) {
|
|
|
130
131
|
const componentOutputs = { ...(options.componentOutputs ?? {}) };
|
|
131
132
|
// Resume first, so the gate is decided against the work that is actually left
|
|
132
133
|
// and a re-run does not re-approve. The digest is carried, not recomputed.
|
|
133
|
-
|
|
134
|
+
// A group keeps what is left of it (#4465).
|
|
135
|
+
const active = options.progress ? narrowGroups(remainingFanOut(plan, components, options.progress), components, plan.groups) : plan;
|
|
134
136
|
if (options.gate && options.waveGate) {
|
|
135
137
|
throw new Error("a fan-out takes one gate over the set or one gate per wave, not both");
|
|
136
138
|
}
|
|
137
139
|
if (options.waveGate && options.plans) {
|
|
138
140
|
throw new Error("a gated-wave fan-out plans each wave itself, so it takes no plans made beforehand");
|
|
139
141
|
}
|
|
142
|
+
if (options.waveGate && plan.groups?.length) {
|
|
143
|
+
throw new Error("a gated-wave fan-out plans component by component, so it takes no groups");
|
|
144
|
+
}
|
|
140
145
|
if (options.waveGate) {
|
|
141
146
|
return runGatedWaves(plan, active, components, registry, options, options.waveGate, gates, componentOutputs);
|
|
142
147
|
}
|
|
@@ -173,44 +178,85 @@ export async function runFanOut(plan, components, registry, options) {
|
|
|
173
178
|
const results = [];
|
|
174
179
|
const completed = [];
|
|
175
180
|
const failed = [];
|
|
181
|
+
const notStarted = [];
|
|
182
|
+
const groupOutcomes = {};
|
|
176
183
|
const blockedBy = new Map();
|
|
177
184
|
const held = new Map();
|
|
178
185
|
let gatedFact;
|
|
179
186
|
const inPlan = new Set(active.order);
|
|
180
187
|
const waveOf = waveNumbers(active.waves);
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
|
|
188
|
+
// ws-107: a group applies as one unit, so it is held and blocked as one.
|
|
189
|
+
const groupOf = groupsByComponent(active);
|
|
190
|
+
/** Hold `root` and everything downstream of it that has not settled otherwise. With `heldBy`, `root` is held for that component's reason. */
|
|
191
|
+
const markHeld = (root, reason, heldBy) => {
|
|
192
|
+
held.set(root, { component: root, reason, ...(heldBy ? { heldBy } : {}) });
|
|
184
193
|
emit?.({ type: "component-settle", wave: waveOf.get(root), component: root, status: "waiting" });
|
|
185
194
|
for (const [component] of downstreamWithin(components, inPlan, [root])) {
|
|
186
195
|
if (held.has(component) || blockedBy.has(component) || failed.includes(component))
|
|
187
196
|
continue;
|
|
188
|
-
held.set(component, { component, reason, heldBy: root });
|
|
197
|
+
held.set(component, { component, reason, heldBy: heldBy ?? root });
|
|
189
198
|
emit?.({ type: "component-settle", wave: waveOf.get(component), component, status: "waiting" });
|
|
190
199
|
}
|
|
191
200
|
};
|
|
192
|
-
/** Skip everything downstream of `
|
|
193
|
-
const markBlocked = (
|
|
194
|
-
for (const [component, by] of downstreamWithin(components, inPlan,
|
|
195
|
-
if (blockedBy.has(component) || failed.includes(component))
|
|
201
|
+
/** Skip everything downstream of `roots`, blaming a root rather than the nearest edge. */
|
|
202
|
+
const markBlocked = (...roots) => {
|
|
203
|
+
for (const [component, by] of downstreamWithin(components, inPlan, roots)) {
|
|
204
|
+
if (blockedBy.has(component) || failed.includes(component) || completed.includes(component) || notStarted.includes(component))
|
|
196
205
|
continue;
|
|
197
206
|
blockedBy.set(component, by);
|
|
198
207
|
}
|
|
199
208
|
};
|
|
200
209
|
for (const [waveIndex, wave] of active.waves.entries()) {
|
|
201
210
|
const waveNum = waveIndex + 1;
|
|
211
|
+
// A member blocked blocks its whole group, by the same failure.
|
|
212
|
+
for (const name of wave) {
|
|
213
|
+
const by = blockedBy.get(name);
|
|
214
|
+
if (by === undefined)
|
|
215
|
+
continue;
|
|
216
|
+
for (const mate of groupOf.get(name)?.components ?? [])
|
|
217
|
+
if (!blockedBy.has(mate) && mate !== by)
|
|
218
|
+
blockedBy.set(mate, by);
|
|
219
|
+
}
|
|
202
220
|
// A component whose upstream failed in an earlier wave is not dispatched.
|
|
203
221
|
const candidates = wave.filter((name) => inPlan.has(name) && !blockedBy.has(name) && !held.has(name));
|
|
204
222
|
for (const name of candidates) {
|
|
223
|
+
if (held.has(name))
|
|
224
|
+
continue;
|
|
205
225
|
const reason = options.hold?.(name, componentOutputs);
|
|
206
|
-
if (reason
|
|
207
|
-
|
|
226
|
+
if (reason === undefined)
|
|
227
|
+
continue;
|
|
228
|
+
markHeld(name, reason);
|
|
229
|
+
for (const mate of groupOf.get(name)?.components ?? [])
|
|
230
|
+
if (!held.has(mate))
|
|
231
|
+
markHeld(mate, reason, name);
|
|
208
232
|
}
|
|
209
233
|
const runnable = candidates.filter((name) => !held.has(name));
|
|
210
234
|
if (runnable.length === 0)
|
|
211
235
|
continue;
|
|
212
236
|
emit?.({ type: "wave-start", wave: waveNum, components: runnable });
|
|
213
|
-
const
|
|
237
|
+
const groupsHere = [...new Set(runnable.map((name) => groupOf.get(name)).filter((g) => g !== undefined))];
|
|
238
|
+
// Groups and the wave's other components run side by side, as a wave's components do.
|
|
239
|
+
const groupRuns = Promise.all(groupsHere.map(async (group) => {
|
|
240
|
+
for (const name of group.components)
|
|
241
|
+
emit?.({ type: "component-start", wave: waveNum, component: name });
|
|
242
|
+
const approved = options.groupRuns?.[group.components[0]];
|
|
243
|
+
const each = {
|
|
244
|
+
group,
|
|
245
|
+
components: byName,
|
|
246
|
+
registry,
|
|
247
|
+
env: options.env,
|
|
248
|
+
...(options.vars ? { vars: options.vars } : {}),
|
|
249
|
+
ctxOf: (name) => fanOutContext(options, name),
|
|
250
|
+
componentOutputs,
|
|
251
|
+
};
|
|
252
|
+
const ran = approved === undefined && options.planGroupsAtWave ? await planAndRunComponentGroup(each) : await runComponentGroup({ ...each, run: approved });
|
|
253
|
+
for (const result of ran.results) {
|
|
254
|
+
emit?.({ type: "component-settle", wave: waveNum, component: result.component, status: result.status === "fail" ? "failed" : result.status });
|
|
255
|
+
options.onComponentSettled?.(result, componentOutputs[result.component]);
|
|
256
|
+
}
|
|
257
|
+
return ran;
|
|
258
|
+
}));
|
|
259
|
+
const waveResults = await Promise.all(runnable.filter((name) => !groupOf.has(name)).map(async (name) => {
|
|
214
260
|
emit?.({ type: "component-start", wave: waveNum, component: name });
|
|
215
261
|
const planned = options.plans?.[name];
|
|
216
262
|
const result = await runComponentDeploy(byName.get(name), { ...fanOutContext(options, name), ...(planned && Object.keys(planned).length > 0 ? { plans: planned } : {}) }, registry, componentOutputs, undefined, gates, emit);
|
|
@@ -223,6 +269,7 @@ export async function runFanOut(plan, components, registry, options) {
|
|
|
223
269
|
options.onComponentSettled?.(result, componentOutputs[name]);
|
|
224
270
|
return result;
|
|
225
271
|
}));
|
|
272
|
+
const groupResults = await groupRuns;
|
|
226
273
|
results.push(...waveResults);
|
|
227
274
|
for (const result of waveResults) {
|
|
228
275
|
if (result.status === "ok") {
|
|
@@ -240,7 +287,26 @@ export async function runFanOut(plan, components, registry, options) {
|
|
|
240
287
|
gatedFact ?? (gatedFact = result.gate);
|
|
241
288
|
markBlocked(result.component);
|
|
242
289
|
}
|
|
243
|
-
|
|
290
|
+
// A group's members settle together; what depends on a member that failed
|
|
291
|
+
// or never started, outside the group, is blocked by that member.
|
|
292
|
+
for (const ran of groupResults) {
|
|
293
|
+
results.push(...ran.results);
|
|
294
|
+
Object.assign(groupOutcomes, ran.outcomes);
|
|
295
|
+
const stopped = [];
|
|
296
|
+
for (const result of ran.results) {
|
|
297
|
+
if (result.status === "ok")
|
|
298
|
+
completed.push(result.component);
|
|
299
|
+
else if (ran.notStarted.includes(result.component))
|
|
300
|
+
notStarted.push(result.component);
|
|
301
|
+
else
|
|
302
|
+
failed.push(result.component);
|
|
303
|
+
if (result.status !== "ok")
|
|
304
|
+
stopped.push(result.component);
|
|
305
|
+
}
|
|
306
|
+
if (stopped.length > 0)
|
|
307
|
+
markBlocked(...stopped);
|
|
308
|
+
}
|
|
309
|
+
const waveFailed = waveResults.some((r) => r.status === "fail") || groupResults.some((ran) => ran.results.some((r) => r.status === "fail"));
|
|
244
310
|
emit?.({
|
|
245
311
|
type: "wave-settle",
|
|
246
312
|
wave: waveNum,
|
|
@@ -254,7 +320,7 @@ export async function runFanOut(plan, components, registry, options) {
|
|
|
254
320
|
.map(([component, by]) => ({ component, reason: "blocked", blockedBy: by }));
|
|
255
321
|
// A failure outranks a gate: something is actually broken, and reporting the
|
|
256
322
|
// run as "waiting on a human" would hide it. Same precedence the driver uses.
|
|
257
|
-
const status = failed.length > 0 ? "fail" : gatedFact ? "gated" : "ok";
|
|
323
|
+
const status = failed.length > 0 || notStarted.length > 0 ? "fail" : gatedFact ? "gated" : "ok";
|
|
258
324
|
emit?.({ type: "run-settle", status: status === "fail" ? "failed" : status, durationMs: null });
|
|
259
325
|
return {
|
|
260
326
|
plan: active,
|
|
@@ -266,6 +332,8 @@ export async function runFanOut(plan, components, registry, options) {
|
|
|
266
332
|
componentOutputs,
|
|
267
333
|
...(gatedFact ? { gate: gatedFact } : {}),
|
|
268
334
|
...(held.size > 0 ? { held: active.order.filter((name) => held.has(name)).map((name) => held.get(name)) } : {}),
|
|
335
|
+
...(notStarted.length > 0 ? { notStarted: [...notStarted].sort() } : {}),
|
|
336
|
+
...(Object.keys(groupOutcomes).length > 0 ? { groupOutcomes } : {}),
|
|
269
337
|
};
|
|
270
338
|
}
|
|
271
339
|
/**
|
|
@@ -30,6 +30,12 @@ export interface DeriveFanOutOptions {
|
|
|
30
30
|
config?: ChantConfig;
|
|
31
31
|
/** Components that form wave 1 (#3049). See `FanOutRequest.canary`. */
|
|
32
32
|
canary?: string[];
|
|
33
|
+
/**
|
|
34
|
+
* The registry whose capabilities' `declaredReads` (#4466) are written into
|
|
35
|
+
* the components before the order is derived. Absent, the project's own
|
|
36
|
+
* (`fanOutRegistry`) is built for it.
|
|
37
|
+
*/
|
|
38
|
+
registry?: CapabilityRegistry;
|
|
33
39
|
}
|
|
34
40
|
export interface DerivedFanOut {
|
|
35
41
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fan-out-support.d.ts","sourceRoot":"","sources":["../../src/components/fan-out-support.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,EAAkC,KAAK,YAAY,EAAE,KAAK,qBAAqB,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC3H,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"fan-out-support.d.ts","sourceRoot":"","sources":["../../src/components/fan-out-support.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,EAAkC,KAAK,YAAY,EAAE,KAAK,qBAAqB,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC3H,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,qGAAqG;IACrG,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8HAA8H;IAC9H,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACrC,kFAAkF;IAClF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,kFAAkF;IAClF,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAoBvF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAGpG"}
|
|
@@ -17,6 +17,7 @@ import { resolveComponentTargets } from "./cli-support.js";
|
|
|
17
17
|
import { applyConfigDefaults } from "./config-defaults.js";
|
|
18
18
|
import { buildCapabilityRegistry } from "./capability-plugin-loader.js";
|
|
19
19
|
import { componentsForUnits, planFanOut } from "./fan-out.js";
|
|
20
|
+
import { withDeclaredReads } from "./declared-reads.js";
|
|
20
21
|
import { loadChantConfig } from "../config.js";
|
|
21
22
|
const EMPTY_PLAN = { order: [], waves: [], skipped: [], seeds: [], indeterminate: [], digest: "" };
|
|
22
23
|
const EMPTY_SIGNAL = { changed: [], indeterminate: [], unclaimed: [] };
|
|
@@ -39,7 +40,9 @@ export async function deriveFanOut(options) {
|
|
|
39
40
|
return { success: false, components: [], signal: EMPTY_SIGNAL, plan: EMPTY_PLAN, error: resolved.error };
|
|
40
41
|
}
|
|
41
42
|
const { config } = options.config ? { config: options.config } : await loadChantConfig(options.path);
|
|
42
|
-
const
|
|
43
|
+
const defaulted = resolved.targets.map((component) => applyConfigDefaults(component, config));
|
|
44
|
+
// #4466: the reads a capability finds in its steps' files, such as a template's Fn::ImportValue, order and hold like declared ones.
|
|
45
|
+
const components = await withDeclaredReads(defaulted, options.registry ?? (await fanOutRegistry(options.path, config)), options.path);
|
|
43
46
|
const signal = componentsForUnits(components, options.units);
|
|
44
47
|
const plan = planFanOut({
|
|
45
48
|
components,
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
* This plans; it does not run. Executing the plan is ./driver.ts's job.
|
|
34
34
|
*/
|
|
35
35
|
import { type DriverComponent } from "./driver.js";
|
|
36
|
+
import type { ReportedGroupRead } from "./capability.js";
|
|
36
37
|
/** Thrown when `changed` or `indeterminate` names a component the project does not have. */
|
|
37
38
|
export declare class UnknownComponentError extends Error {
|
|
38
39
|
readonly field: "changed" | "indeterminate";
|
|
@@ -107,6 +108,33 @@ export interface FanOutPlan {
|
|
|
107
108
|
indeterminate: string[];
|
|
108
109
|
/** Identity of this derivation, for binding one approval to the whole fan-out (#2300's pattern). */
|
|
109
110
|
digest: string;
|
|
111
|
+
/**
|
|
112
|
+
* The groups a pull request plans and applies as one (ws-107), each in
|
|
113
|
+
* one wave, set by `groupFanOut` (./groups.ts). `waves` are then the
|
|
114
|
+
* grouped waves. `digest` stays the derivation's. Absent when none formed.
|
|
115
|
+
*/
|
|
116
|
+
groups?: FanOutGroup[];
|
|
117
|
+
/** The components that could have grouped and did not, each with why (ws-107, ruling 1). Absent when none. */
|
|
118
|
+
fallbacks?: FanOutGroupFallback[];
|
|
119
|
+
}
|
|
120
|
+
/** Components one capability plans and applies in one call (ws-107). */
|
|
121
|
+
export interface FanOutGroup {
|
|
122
|
+
/** The kind of the capability every member's one step names. */
|
|
123
|
+
capability: string;
|
|
124
|
+
/** The members, upstreams first. */
|
|
125
|
+
components: string[];
|
|
126
|
+
/**
|
|
127
|
+
* The reads between members the capability reported through `groupReads`
|
|
128
|
+
* (#4447), which no member's step input shows. Absent when none.
|
|
129
|
+
*/
|
|
130
|
+
reads?: ReportedGroupRead[];
|
|
131
|
+
}
|
|
132
|
+
/** A component that did not join a group (ws-107): its capability's `kind`, and the fallback's `kind` and `reason`. */
|
|
133
|
+
export interface FanOutGroupFallback {
|
|
134
|
+
component: string;
|
|
135
|
+
capability: string;
|
|
136
|
+
kind: string;
|
|
137
|
+
reason: string;
|
|
110
138
|
}
|
|
111
139
|
/**
|
|
112
140
|
* Derive the fan-out for a change.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fan-out.d.ts","sourceRoot":"","sources":["../../src/components/fan-out.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"fan-out.d.ts","sourceRoot":"","sources":["../../src/components/fan-out.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Groups of components a capability plans and applies as one (ws-107, #4440).
|
|
3
|
+
*
|
|
4
|
+
* A pull request's components plan and apply one by one, wave by wave
|
|
5
|
+
* (`planPrSet`, `runFanOut`). A capability that declares `planGroup` and
|
|
6
|
+
* `runGroup` (./capability.ts) can take several of them in one call instead,
|
|
7
|
+
* so a value one member creates reaches the members that read it inside the
|
|
8
|
+
* same apply, with no round in between.
|
|
9
|
+
*
|
|
10
|
+
* Core decides which components form a group, where the group sits among the
|
|
11
|
+
* waves, what its digest binds and what each member's outcome means. The
|
|
12
|
+
* capability decides how. Nothing here names a lexicon.
|
|
13
|
+
*
|
|
14
|
+
* - {@link findComponentGroups}: which components of the change group, and
|
|
15
|
+
* why each other one that could have did not (ws-107, "Which components
|
|
16
|
+
* form a group"). Called once by `pr.ts`'s prepare step.
|
|
17
|
+
* - {@link groupFanOut}: the fan-out with each group in one wave (ws-107,
|
|
18
|
+
* "Where the group sits"). The plan stage, the apply stage and every
|
|
19
|
+
* `--wave-gate` job read these waves.
|
|
20
|
+
* - {@link planComponentGroup}: plan a group in one call, and fold the group
|
|
21
|
+
* digest into each member's plan digest ({@link bindGroup}).
|
|
22
|
+
* - {@link runComponentGroup}: apply it in one call, and turn each member's
|
|
23
|
+
* outcome into a component result.
|
|
24
|
+
* - {@link formRunGroups}, {@link componentSetFanOut} and
|
|
25
|
+
* {@link planAndRunComponentGroup}: the same groups where a promote under a
|
|
26
|
+
* release, `components fan-out` and `run --components` run (#4465).
|
|
27
|
+
*/
|
|
28
|
+
import { type DriverComponent, type DriverComponentResult } from "./driver.js";
|
|
29
|
+
import { type CapabilityPlan, type CapabilityRegistry, type DeployContext, type GroupMemberStatus, type GroupRun } from "./capability.js";
|
|
30
|
+
import type { FanOutGroup, FanOutGroupFallback, FanOutPlan } from "./fan-out.js";
|
|
31
|
+
import { type WaveComponentPlan } from "./wave-plan.js";
|
|
32
|
+
export interface FindComponentGroupsOptions {
|
|
33
|
+
/** Every component in the project. */
|
|
34
|
+
components: DriverComponent[];
|
|
35
|
+
/** The fan-out the change derives (`planFanOut`). Only `order` is grouped. */
|
|
36
|
+
plan: FanOutPlan;
|
|
37
|
+
registry: CapabilityRegistry;
|
|
38
|
+
env: string;
|
|
39
|
+
vars?: Record<string, unknown>;
|
|
40
|
+
/**
|
|
41
|
+
* Only components that share one of these groups may join (#4446): a
|
|
42
|
+
* resume forms groups again over what is left of the approved ones
|
|
43
|
+
* ({@link regroupRemaining}), never new ones.
|
|
44
|
+
*/
|
|
45
|
+
within?: readonly FanOutGroup[];
|
|
46
|
+
}
|
|
47
|
+
/** What {@link findComponentGroups} found, for {@link groupFanOut}. */
|
|
48
|
+
export interface FoundComponentGroups {
|
|
49
|
+
/** In plan order of their first member, each member list upstreams first. */
|
|
50
|
+
groups: FanOutGroup[];
|
|
51
|
+
/** Sorted by component. */
|
|
52
|
+
fallbacks: FanOutGroupFallback[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The groups among the components of the change (ws-107):
|
|
56
|
+
*
|
|
57
|
+
* 1. A component is eligible when its deploy is one step, gates counted
|
|
58
|
+
* (ruling 3), whose capability declares `planGroup` and `runGroup`.
|
|
59
|
+
* 2. Eligible components of one capability joined by reads, in either
|
|
60
|
+
* direction, form a candidate set. A read is a wiring reference in a
|
|
61
|
+
* step, or one the capability reports through `groupReads` (#4447); a
|
|
62
|
+
* reported read also counts as a dependency below, orders the members
|
|
63
|
+
* and is kept on the group as its `reads`.
|
|
64
|
+
* 3. While a component outside a set lies on a `dependsOn` path between two
|
|
65
|
+
* of its members, the members downstream of it leave the set, and both
|
|
66
|
+
* parts are joined by reads again (ruling 2). Outside components are
|
|
67
|
+
* taken in plan order.
|
|
68
|
+
* 4. A set of one is no group. Each other set is offered to its
|
|
69
|
+
* capability's `groupFallback`. A fallback without `drop` dissolves it.
|
|
70
|
+
* One with `drop` leaves those members out (#4419 ruling 1): the rest
|
|
71
|
+
* are joined by reads and split by rule 3 again, a member left on its
|
|
72
|
+
* own falls back as `alone` (or `split`, when a dependency path split
|
|
73
|
+
* it off), and each set that is left is offered again.
|
|
74
|
+
* 5. A group whose placement would put it and another each before the other
|
|
75
|
+
* is dissolved (`cycle`).
|
|
76
|
+
*
|
|
77
|
+
* The fallbacks name every component whose capability declares the pair,
|
|
78
|
+
* that a read joins to another such component of its capability, and that
|
|
79
|
+
* ended in no group: `steps`, `split`, `alone`, `cycle`, or the capability's
|
|
80
|
+
* own kind.
|
|
81
|
+
*/
|
|
82
|
+
export declare function findComponentGroups(options: FindComponentGroupsOptions): Promise<FoundComponentGroups>;
|
|
83
|
+
/**
|
|
84
|
+
* `plan` with each group of `found` in one wave (ws-107). The members leave
|
|
85
|
+
* their waves for the group's, upstreams first; a component outside every
|
|
86
|
+
* group moves to a later wave when a dependency now sits in its own wave or
|
|
87
|
+
* after it. A wave left empty stays, so wave numbers and their gates keep
|
|
88
|
+
* their meaning, and waves may be added at the end. `digest` does not change.
|
|
89
|
+
*/
|
|
90
|
+
export declare function groupFanOut(plan: FanOutPlan, components: DriverComponent[], found: FoundComponentGroups): FanOutPlan;
|
|
91
|
+
/**
|
|
92
|
+
* `plan`, a narrowing of a grouped fan-out (`remainingFanOut`, a round),
|
|
93
|
+
* with what is left of `groups` placed again: each group keeps its members
|
|
94
|
+
* that are still in `plan`, and one left with fewer than two is no group.
|
|
95
|
+
* Nothing is asked of the capability again.
|
|
96
|
+
*/
|
|
97
|
+
export declare function narrowGroups(plan: FanOutPlan, components: DriverComponent[], groups: readonly FanOutGroup[] | undefined): FanOutPlan;
|
|
98
|
+
/**
|
|
99
|
+
* `plan`, what a resume left of a grouped fan-out (`remainingFanOut`), with
|
|
100
|
+
* groups formed again over it (ws-107, "Resume"; #4446). Only members left
|
|
101
|
+
* of one of `groups` group again, by the same rule and the same
|
|
102
|
+
* `groupFallback`, so what is left of a group plans as a smaller group, or
|
|
103
|
+
* one by one when fewer than two are left, when they no longer join by
|
|
104
|
+
* reads, or when the capability refuses them. A capability that drops some
|
|
105
|
+
* members leaves the rest to group again as {@link findComponentGroups}
|
|
106
|
+
* does. The fallbacks are the ones this
|
|
107
|
+
* pass found, then those of `fallbacks` for components still in `plan`.
|
|
108
|
+
*/
|
|
109
|
+
export declare function regroupRemaining(options: Omit<FindComponentGroupsOptions, "within"> & {
|
|
110
|
+
groups: readonly FanOutGroup[] | undefined;
|
|
111
|
+
fallbacks?: readonly FanOutGroupFallback[];
|
|
112
|
+
}): Promise<FanOutPlan>;
|
|
113
|
+
/** The group each component of `plan` is a member of. */
|
|
114
|
+
export declare function groupsByComponent(plan: Pick<FanOutPlan, "groups">): Map<string, FanOutGroup>;
|
|
115
|
+
/**
|
|
116
|
+
* The group digest (ws-107): over the capability's kind, each member's
|
|
117
|
+
* component, change-set member and own plan digest, sorted, and the
|
|
118
|
+
* capability's digest of the composition. One member more, or the same
|
|
119
|
+
* members composed differently, moves it.
|
|
120
|
+
*/
|
|
121
|
+
export declare function groupDigest(kind: string, members: ReadonlyArray<{
|
|
122
|
+
component: string;
|
|
123
|
+
member: string;
|
|
124
|
+
planDigest: string;
|
|
125
|
+
}>, composition: string): string;
|
|
126
|
+
/**
|
|
127
|
+
* A member's plan with its group folded in (ws-107), after `bindTargets`:
|
|
128
|
+
* its digest becomes the digest over its own and the group's, written into
|
|
129
|
+
* its change-set part too, and the part carries the group's digest and the
|
|
130
|
+
* `reads` the plan does not know. A plan with no part gets an empty one.
|
|
131
|
+
*/
|
|
132
|
+
export declare function bindGroup(planned: CapabilityPlan, digest: string, reads: readonly string[]): CapabilityPlan;
|
|
133
|
+
/** What planning a group gave (ws-107). */
|
|
134
|
+
export interface ComponentGroupPlan {
|
|
135
|
+
/**
|
|
136
|
+
* One per member, in the group's order, as `planWaveComponent` gives a
|
|
137
|
+
* component's: its member, part, planned outputs and shape, its plan under
|
|
138
|
+
* `plans`. When the group failed to plan, each is that error.
|
|
139
|
+
*/
|
|
140
|
+
plans: WaveComponentPlan[];
|
|
141
|
+
/** The group digest folded into each member's. Absent when it failed to plan. */
|
|
142
|
+
digest?: string;
|
|
143
|
+
/** What `runGroup` gets back. Absent when it failed to plan. */
|
|
144
|
+
run?: GroupRun;
|
|
145
|
+
}
|
|
146
|
+
export interface PlanComponentGroupOptions {
|
|
147
|
+
group: FanOutGroup;
|
|
148
|
+
components: ReadonlyMap<string, DriverComponent>;
|
|
149
|
+
registry: CapabilityRegistry;
|
|
150
|
+
env: string;
|
|
151
|
+
vars?: Record<string, unknown>;
|
|
152
|
+
/** Each member's context, as a single step would get it. */
|
|
153
|
+
ctxOf: (component: string) => DeployContext;
|
|
154
|
+
/** The outputs planned and read so far. The group's own members' are left out. */
|
|
155
|
+
outputs: Record<string, Record<string, unknown>>;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Plan `group` with one `planGroup` call (ws-107). Each member's plan is
|
|
159
|
+
* bound to its targets (`bindTargets`), then to the group ({@link bindGroup}).
|
|
160
|
+
* Never throws: a failure, a throwing `planGroup` included, makes every
|
|
161
|
+
* member plan-failed with its error, and nothing falls back after planning.
|
|
162
|
+
*/
|
|
163
|
+
export declare function planComponentGroup(options: PlanComponentGroupOptions): Promise<ComponentGroupPlan>;
|
|
164
|
+
export interface RunComponentGroupOptions {
|
|
165
|
+
group: FanOutGroup;
|
|
166
|
+
components: ReadonlyMap<string, DriverComponent>;
|
|
167
|
+
registry: CapabilityRegistry;
|
|
168
|
+
env: string;
|
|
169
|
+
vars?: Record<string, unknown>;
|
|
170
|
+
/** Each member's context as a single step would get it, without `plans`. */
|
|
171
|
+
ctxOf: (component: string) => DeployContext;
|
|
172
|
+
/** The approved group plan ({@link ComponentGroupPlan.run}). */
|
|
173
|
+
run: GroupRun | undefined;
|
|
174
|
+
/** The outputs standing. Each member that applied adds its own, as a run does. */
|
|
175
|
+
componentOutputs: Record<string, Record<string, unknown>>;
|
|
176
|
+
}
|
|
177
|
+
export interface ComponentGroupRunResult {
|
|
178
|
+
/** One per member, in the group's order. A `not-started` member's is `fail` with a `skipped` record. */
|
|
179
|
+
results: DriverComponentResult[];
|
|
180
|
+
/** The members whose part never began, in the group's order. */
|
|
181
|
+
notStarted: string[];
|
|
182
|
+
/**
|
|
183
|
+
* How each member's part ended, as the capability said (#4446): the
|
|
184
|
+
* report's `groupOutcome`. A throw gives every member `failed`, or
|
|
185
|
+
* `not-started` for a moved plan.
|
|
186
|
+
*/
|
|
187
|
+
outcomes: Record<string, GroupMemberStatus>;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Apply `group` with one `runGroup` call (ws-107) and map each member's
|
|
191
|
+
* outcome: `applied` and `no-changes` complete it and record its outputs;
|
|
192
|
+
* `partial` and `failed` fail it; `not-started` leaves it not started. A
|
|
193
|
+
* throw fails every member, since core cannot tell what applied, except a
|
|
194
|
+
* moved plan (`isPlanMovedError`), which leaves every member not started and
|
|
195
|
+
* marks each record `planMoved`, so the command exits 3.
|
|
196
|
+
*/
|
|
197
|
+
export declare function runComponentGroup(options: RunComponentGroupOptions): Promise<ComponentGroupRunResult>;
|
|
198
|
+
/** The fallback kind of a component that would have joined a group under `--wave-gate` (#4465, ruling 1). */
|
|
199
|
+
export declare const WAVE_GATE_FALLBACK = "wave-gate";
|
|
200
|
+
/**
|
|
201
|
+
* The fan-out over `components` and nothing else (#4465), as a promote and
|
|
202
|
+
* `run --components` run them: a dependency outside the set is already
|
|
203
|
+
* satisfied, and nothing is skipped or seeded. `digest` names the set.
|
|
204
|
+
*/
|
|
205
|
+
export declare function componentSetFanOut(components: readonly DriverComponent[]): FanOutPlan;
|
|
206
|
+
export interface FormRunGroupsOptions extends Omit<FindComponentGroupsOptions, "within"> {
|
|
207
|
+
/** `--wave-gate`: no group forms (#4465, ruling 1). */
|
|
208
|
+
waveGate?: boolean;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* `options.plan` with the groups a promote under a release, `components
|
|
212
|
+
* fan-out` and `run --components` form (#4465), by the rule the
|
|
213
|
+
* pull-request run uses ({@link findComponentGroups}, {@link groupFanOut}).
|
|
214
|
+
*
|
|
215
|
+
* Under a wave gate nothing groups (ruling 1 of #4465): a gated wave plans
|
|
216
|
+
* component by component, as `runFanOut` requires, so each member of a group
|
|
217
|
+
* that would have formed falls back with kind {@link WAVE_GATE_FALLBACK},
|
|
218
|
+
* and the plan keeps its waves.
|
|
219
|
+
*/
|
|
220
|
+
export declare function formRunGroups(options: FormRunGroupsOptions): Promise<FanOutPlan>;
|
|
221
|
+
/**
|
|
222
|
+
* Plan `group` in its wave against the outputs standing, then apply it
|
|
223
|
+
* (#4465). `components fan-out` and `run --components` run a group this way,
|
|
224
|
+
* since neither plans before it applies, as each of their components plans
|
|
225
|
+
* inside its own step. A group that fails to plan applies nothing: each
|
|
226
|
+
* member fails with the plan's error and is `not-started`.
|
|
227
|
+
*/
|
|
228
|
+
export declare function planAndRunComponentGroup(options: Omit<RunComponentGroupOptions, "run">): Promise<ComponentGroupRunResult>;
|
|
229
|
+
//# sourceMappingURL=groups.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/components/groups.ts"],"names":[],"mappings":"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"}
|