@intentius/chant 0.124.51 → 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 +17 -3
- 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 +224 -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/covered-round.d.ts +173 -0
- package/dist/components/covered-round.d.ts.map +1 -0
- package/dist/components/covered-round.js +200 -0
- 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 +42 -1
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +74 -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 +7 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +5 -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 +62 -7
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +354 -53
- 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/components/wave-plan.d.ts +2 -0
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +4 -1
- 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 +92 -3
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +62 -3
- 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 +76 -3
- 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 +16 -3
- 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 +238 -0
- package/src/components/cli-support.ts +70 -14
- package/src/components/covered-round.test.ts +166 -0
- package/src/components/covered-round.ts +293 -0
- 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 +101 -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 +59 -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 +728 -4
- package/src/components/pr-run.ts +395 -55
- 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/components/wave-plan.ts +5 -2
- 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 +57 -1
- package/src/pr-loop.ts +154 -6
- 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 +76 -3
- 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
package/dist/graph-ir.js
CHANGED
|
@@ -5,6 +5,7 @@ import { isLexiconOutput } from "./lexicon-output.js";
|
|
|
5
5
|
import { getProvenance } from "./provenance.js";
|
|
6
6
|
import { INTRINSIC_MARKER } from "./intrinsic.js";
|
|
7
7
|
import { subTemplateRefs } from "./graph-sub-template.js";
|
|
8
|
+
import { entityInstanceRollup, observedInstanceNodeId } from "./instance-nodes.js";
|
|
8
9
|
export { subTemplateRefs };
|
|
9
10
|
/** True when `value` has the {@link EntityReference} shape. */
|
|
10
11
|
function isEntityReference(value) {
|
|
@@ -43,6 +44,52 @@ export function entityStack(entity) {
|
|
|
43
44
|
const stack = entity.stack;
|
|
44
45
|
return typeof stack === "string" && stack.length > 0 ? stack : undefined;
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* What an ownership engine observed about an entity (#4529), or undefined.
|
|
49
|
+
* Duck-typed like {@link entityStack}: the pulumi lexicon sets `facts` on a
|
|
50
|
+
* plunge member's entity from the member's checked-in engine graph. It is
|
|
51
|
+
* defined non-enumerable there, so a chant older than this reader does not
|
|
52
|
+
* project it into `attrs`. {@link buildGraphIr} copies it onto the node, and
|
|
53
|
+
* nothing in chant decides from it (see `IRNode.facts`).
|
|
54
|
+
*/
|
|
55
|
+
export function entityFacts(entity) {
|
|
56
|
+
const facts = entity.facts;
|
|
57
|
+
return typeof facts === "object" && facts !== null && !Array.isArray(facts) ? facts : undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The instance keys an entity says its source expands to (#4454), as the
|
|
61
|
+
* engine prints them (`[0]`, `["a"]`), or an empty list. Duck-typed like
|
|
62
|
+
* {@link entityStack}: the terraform lexicon sets `instanceKeys` on a block
|
|
63
|
+
* whose `count` or `for_each` is a literal.
|
|
64
|
+
*/
|
|
65
|
+
export function entityInstanceKeys(entity) {
|
|
66
|
+
const keys = entity.instanceKeys;
|
|
67
|
+
if (!Array.isArray(keys))
|
|
68
|
+
return [];
|
|
69
|
+
return keys.filter((k) => typeof k === "string" && k.startsWith("[") && k.endsWith("]"));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The instance nodes an entity names, given its own key `name`: the
|
|
73
|
+
* duck-typed `instances` list when it carries one (full ids, which an
|
|
74
|
+
* instance under an expanded module call needs, #4486), else one per
|
|
75
|
+
* {@link entityInstanceKeys} key, id `<name><key>`.
|
|
76
|
+
*/
|
|
77
|
+
export function entityInstances(name, entity) {
|
|
78
|
+
const listed = entity.instances;
|
|
79
|
+
if (Array.isArray(listed)) {
|
|
80
|
+
const out = [];
|
|
81
|
+
for (const item of listed) {
|
|
82
|
+
if (typeof item !== "object" || item === null)
|
|
83
|
+
continue;
|
|
84
|
+
const { id, key, scope } = item;
|
|
85
|
+
if (typeof id !== "string" || id.length === 0 || id === name)
|
|
86
|
+
continue;
|
|
87
|
+
out.push({ id, ...(typeof key === "string" ? { key } : {}), ...(typeof scope === "string" ? { scope } : {}) });
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
return entityInstanceKeys(entity).map((key) => ({ id: `${name}${key}`, key }));
|
|
92
|
+
}
|
|
46
93
|
/**
|
|
47
94
|
* The version `chant graph --format ir` writes on its output (#2529, #2524 D8).
|
|
48
95
|
* The format changes only additively: a new field or edge kind never bumps
|
|
@@ -259,7 +306,8 @@ function subEnvelope(sub, seen, reverse, nodeIds) {
|
|
|
259
306
|
// entity's place in the graph, not declared configuration, and both are read
|
|
260
307
|
// directly, so projecting them into `attrs` would only restate an edge and a
|
|
261
308
|
// group key the IR already carries.
|
|
262
|
-
|
|
309
|
+
// `facts` (#4529) is an engine's observation, carried onto `IRNode.facts`, not configuration.
|
|
310
|
+
const SKIP_KEYS = new Set(["lexicon", "entityType", "kind", "attributes", "Ref", "references", "stack", "facts"]);
|
|
263
311
|
/** The config bag of a node, paired with each key. Lexicon entities keep their
|
|
264
312
|
* declared props in a (usually non-enumerable) `props` object; simpler entities
|
|
265
313
|
* carry config as enumerable own properties. We surface both, flattening `props`
|
|
@@ -310,6 +358,7 @@ function collectEdges(entity, from, nodeIds, reverse) {
|
|
|
310
358
|
kind: "ref",
|
|
311
359
|
...(ref.viaAttr ? { viaAttr: ref.viaAttr } : {}),
|
|
312
360
|
...(ref.toAttr ? { toAttr: ref.toAttr } : {}),
|
|
361
|
+
...(ref.grain === "block" || ref.grain === "instance" || ref.grain === "property" ? { grain: ref.grain } : {}),
|
|
313
362
|
});
|
|
314
363
|
}
|
|
315
364
|
const seen = new Set();
|
|
@@ -399,7 +448,8 @@ function collectEdges(entity, from, nodeIds, reverse) {
|
|
|
399
448
|
}
|
|
400
449
|
/** Stable key for deduping and sorting an edge. */
|
|
401
450
|
function edgeKey(e) {
|
|
402
|
-
|
|
451
|
+
// `grain` joins the key only when set, so an edge without one keys as before.
|
|
452
|
+
return `${e.from}\0${e.to}\0${e.viaAttr ?? ""}${e.grain ? `\0${e.grain}` : ""}`;
|
|
403
453
|
}
|
|
404
454
|
/**
|
|
405
455
|
* Build the graph IR from resolved entities (the output of `discover`). Pure and
|
|
@@ -438,6 +488,9 @@ export function buildGraphIr(entities, projectPath) {
|
|
|
438
488
|
const file = relFile(prov?.sourceFile, projectPath);
|
|
439
489
|
if (file)
|
|
440
490
|
node.sourceLoc = { file };
|
|
491
|
+
const facts = entityFacts(entity);
|
|
492
|
+
if (facts)
|
|
493
|
+
node.facts = facts;
|
|
441
494
|
nodes.push(node);
|
|
442
495
|
(byLexicon[_a = entity.lexicon] ?? (byLexicon[_a] = [])).push(name);
|
|
443
496
|
// An entity that names its own deployable unit is taken at its word
|
|
@@ -517,6 +570,81 @@ export function buildGraphIr(entities, projectPath) {
|
|
|
517
570
|
ir.imports = imports;
|
|
518
571
|
return ir;
|
|
519
572
|
}
|
|
573
|
+
/**
|
|
574
|
+
* Add an instance node (#4454) under each node whose entity names its
|
|
575
|
+
* instances ({@link entityInstances}): id `<block id><key>`, or the full id
|
|
576
|
+
* the entity lists under an expanded module call (#4486), the
|
|
577
|
+
* block's kind, lexicon and source location, `instanceOf` and `instanceKey`,
|
|
578
|
+
* no attrs and no edges. Each instance joins every group its block is in, so
|
|
579
|
+
* a renderer draws it in the block's box. A block node whose entity carries
|
|
580
|
+
* an `instanceRollup` (#4489) gets it. Pure. Returns `ir` itself when no
|
|
581
|
+
* entity has instance keys or a rollup, so a graph with none prints what it
|
|
582
|
+
* did before.
|
|
583
|
+
*
|
|
584
|
+
* Called by `chant graph` and the declared half of `--live`, not by
|
|
585
|
+
* {@link buildGraphIr}, so `chant search`, which reads the base IR, still
|
|
586
|
+
* counts blocks.
|
|
587
|
+
*/
|
|
588
|
+
export function withInstanceNodes(ir, entities) {
|
|
589
|
+
const byId = new Map(ir.nodes.map((n) => [n.id, n]));
|
|
590
|
+
const added = [];
|
|
591
|
+
const childrenOf = new Map();
|
|
592
|
+
const rolledUp = new Map();
|
|
593
|
+
for (const [name, entity] of entities) {
|
|
594
|
+
const block = byId.get(name);
|
|
595
|
+
if (!block || block.instanceOf)
|
|
596
|
+
continue;
|
|
597
|
+
const rollup = entityInstanceRollup(entity);
|
|
598
|
+
if (rollup)
|
|
599
|
+
rolledUp.set(name, rollup);
|
|
600
|
+
for (const { id, key, scope } of entityInstances(name, entity)) {
|
|
601
|
+
if (byId.has(id))
|
|
602
|
+
continue;
|
|
603
|
+
const node = {
|
|
604
|
+
id,
|
|
605
|
+
kind: block.kind,
|
|
606
|
+
lexicon: block.lexicon,
|
|
607
|
+
attrs: {},
|
|
608
|
+
instanceOf: name,
|
|
609
|
+
...(key !== undefined ? { instanceKey: key } : {}),
|
|
610
|
+
...(scope !== undefined ? { instanceScope: scope } : {}),
|
|
611
|
+
};
|
|
612
|
+
if (block.sourceLoc)
|
|
613
|
+
node.sourceLoc = { ...block.sourceLoc };
|
|
614
|
+
if (block.compositeParent)
|
|
615
|
+
node.compositeParent = block.compositeParent;
|
|
616
|
+
if (block.compositeInstance)
|
|
617
|
+
node.compositeInstance = block.compositeInstance;
|
|
618
|
+
added.push(node);
|
|
619
|
+
byId.set(id, node);
|
|
620
|
+
(childrenOf.get(name) ?? childrenOf.set(name, []).get(name)).push(id);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
if (added.length === 0 && rolledUp.size === 0)
|
|
624
|
+
return ir;
|
|
625
|
+
const own = ir.nodes.map((n) => {
|
|
626
|
+
const rollup = rolledUp.get(n.id);
|
|
627
|
+
return rollup ? { ...n, instanceRollup: rollup } : n;
|
|
628
|
+
});
|
|
629
|
+
if (added.length === 0)
|
|
630
|
+
return { ...ir, nodes: own };
|
|
631
|
+
const nodes = [...own, ...added].sort((a, b) => a.id.localeCompare(b.id));
|
|
632
|
+
const withChildren = (rec) => {
|
|
633
|
+
if (!rec)
|
|
634
|
+
return rec;
|
|
635
|
+
const out = {};
|
|
636
|
+
for (const [k, ids] of Object.entries(rec))
|
|
637
|
+
out[k] = [...ids, ...ids.flatMap((id) => childrenOf.get(id) ?? [])].sort();
|
|
638
|
+
return out;
|
|
639
|
+
};
|
|
640
|
+
const groups = { ...ir.groups };
|
|
641
|
+
for (const key of ["byLexicon", "byComposite", "byStack"]) {
|
|
642
|
+
const grown = withChildren(ir.groups[key]);
|
|
643
|
+
if (grown)
|
|
644
|
+
groups[key] = grown;
|
|
645
|
+
}
|
|
646
|
+
return { ...ir, nodes, groups };
|
|
647
|
+
}
|
|
520
648
|
/**
|
|
521
649
|
* Add what the lexicons' `graphEdges` hooks reported (#3910) to a built IR.
|
|
522
650
|
*
|
|
@@ -657,10 +785,45 @@ export function buildLiveGraphIr(observations) {
|
|
|
657
785
|
// declared owner", which is simply the absence of this field.
|
|
658
786
|
if (meta.ownerChain?.root === "declared")
|
|
659
787
|
node.runtimeOwner = meta.ownerChain.entity;
|
|
788
|
+
// An engine's facts (#4527) ride beside `physicalId`, as the engine gave them.
|
|
789
|
+
if (meta.facts)
|
|
790
|
+
node.facts = meta.facts;
|
|
660
791
|
nodes.push(node);
|
|
661
792
|
(byLexicon[lexicon] ?? (byLexicon[lexicon] = [])).push(name);
|
|
662
793
|
// A live lexicon maps to one deployable stack, same as the source IR.
|
|
663
794
|
(byStack[lexicon] ?? (byStack[lexicon] = [])).push(name);
|
|
795
|
+
// Each present instance of a `count` or `for_each` block is a node of
|
|
796
|
+
// its own under the block's (#4454), so the overlay paints it alone.
|
|
797
|
+
// The block node above is the rollup. An absent or not-observed
|
|
798
|
+
// instance is no live node: the overlay reads that off `instances`.
|
|
799
|
+
// Under an expanded module call the id follows the declared graph's
|
|
800
|
+
// rule (#4486, #4488), `estate/module.app[0]/aws_eip.pool[1]`, with
|
|
801
|
+
// `instanceScope` and no `instanceKey` when only the call is expanded.
|
|
802
|
+
for (const inst of meta.instances ?? []) {
|
|
803
|
+
if (inst.verdict !== "present")
|
|
804
|
+
continue;
|
|
805
|
+
const id = observedInstanceNodeId(name, inst);
|
|
806
|
+
if (id === undefined)
|
|
807
|
+
continue;
|
|
808
|
+
const child = {
|
|
809
|
+
id,
|
|
810
|
+
kind: meta.type,
|
|
811
|
+
lexicon,
|
|
812
|
+
attrs: { address: inst.address, ...(inst.status ? { status: inst.status } : {}) },
|
|
813
|
+
instanceOf: name,
|
|
814
|
+
...(inst.key !== undefined ? { instanceKey: inst.key } : {}),
|
|
815
|
+
...(inst.scope !== undefined ? { instanceScope: inst.scope } : {}),
|
|
816
|
+
};
|
|
817
|
+
if (inst.physicalId)
|
|
818
|
+
child.physicalId = inst.physicalId;
|
|
819
|
+
if (inst.ownership === "owned" || inst.ownership === "foreign")
|
|
820
|
+
child.ownership = inst.ownership;
|
|
821
|
+
if (inst.facts)
|
|
822
|
+
child.facts = inst.facts;
|
|
823
|
+
nodes.push(child);
|
|
824
|
+
(byLexicon[lexicon] ?? (byLexicon[lexicon] = [])).push(id);
|
|
825
|
+
(byStack[lexicon] ?? (byStack[lexicon] = [])).push(id);
|
|
826
|
+
}
|
|
664
827
|
}
|
|
665
828
|
}
|
|
666
829
|
nodes.sort((a, b) => a.id.localeCompare(b.id));
|
|
@@ -685,7 +848,9 @@ export function buildLiveGraphIr(observations) {
|
|
|
685
848
|
for (const edge of observation.edges ?? []) {
|
|
686
849
|
if (!observedIds.has(edge.from) || !observedIds.has(edge.to))
|
|
687
850
|
continue;
|
|
688
|
-
|
|
851
|
+
// `grain` is in the key (#4527): a block edge and an instance edge
|
|
852
|
+
// between the same pair stay two edges.
|
|
853
|
+
const key = `${edge.from}\u0000${edge.to}\u0000${edge.viaAttr ?? ""}\u0000${edge.toAttr ?? ""}\u0000${edge.grain ?? ""}`;
|
|
689
854
|
if (seen.has(key))
|
|
690
855
|
continue;
|
|
691
856
|
seen.add(key);
|
|
@@ -694,7 +859,8 @@ export function buildLiveGraphIr(observations) {
|
|
|
694
859
|
}
|
|
695
860
|
edges.sort((a, b) => a.from.localeCompare(b.from) ||
|
|
696
861
|
a.to.localeCompare(b.to) ||
|
|
697
|
-
(a.viaAttr ?? "").localeCompare(b.viaAttr ?? "")
|
|
862
|
+
(a.viaAttr ?? "").localeCompare(b.viaAttr ?? "") ||
|
|
863
|
+
(a.grain ?? "").localeCompare(b.grain ?? ""));
|
|
698
864
|
// Stack exports (#1279) land on the IR's `exports`, the same place the
|
|
699
865
|
// declared graph keeps what a stack publishes — not on the member nodes.
|
|
700
866
|
const exports = [];
|
|
@@ -714,16 +880,47 @@ export function collectUnobserved(observations) {
|
|
|
714
880
|
Object.assign(out, o.unobserved ?? {});
|
|
715
881
|
return out;
|
|
716
882
|
}
|
|
883
|
+
/**
|
|
884
|
+
* The overlay paint on one node. `_ownership` (#4534, behold#906 Q2) is
|
|
885
|
+
* chant's own marker verdict, {@link IRNode.ownership}, beside `_status`, so
|
|
886
|
+
* `chant search` answers ownership with no grammar of its own:
|
|
887
|
+
* `attr:_ownership=foreign`, `--show _ownership`, `--count-by attr:_ownership`.
|
|
888
|
+
* It is `owned` or `foreign`; absent means unknown (no marker channel on the
|
|
889
|
+
* read, or a node nobody observed). It never reads `facts.ownership`, the
|
|
890
|
+
* engine's verdict, which stays for display (#4520 Q1).
|
|
891
|
+
*/
|
|
717
892
|
function tagStatus(n, status, unobserved) {
|
|
718
893
|
return {
|
|
719
894
|
...n,
|
|
720
895
|
attrs: {
|
|
721
896
|
...n.attrs,
|
|
722
897
|
_status: status,
|
|
898
|
+
...(n.ownership ? { _ownership: n.ownership } : {}),
|
|
723
899
|
...(unobserved ? { _unobserved: unobserved.reason } : {}),
|
|
724
900
|
},
|
|
725
901
|
};
|
|
726
902
|
}
|
|
903
|
+
/**
|
|
904
|
+
* The paint for a declared instance node (#4454) the live graph has no node
|
|
905
|
+
* for. Its block not observed: `neutral` with the block's reason, since the
|
|
906
|
+
* rollup put the whole block there. Its block live with instances read: the
|
|
907
|
+
* instance is not among them, so `accent`, pending. Its block live with no
|
|
908
|
+
* instance read at all: `neutral`, since nothing said either way. Its block
|
|
909
|
+
* absent: `accent`, like the block.
|
|
910
|
+
*/
|
|
911
|
+
function missingInstance(n, live, read, unobserved) {
|
|
912
|
+
const block = n.instanceOf;
|
|
913
|
+
const u = unobserved[n.id] ?? unobserved[block];
|
|
914
|
+
if (u)
|
|
915
|
+
return tagStatus(n, "neutral", u);
|
|
916
|
+
if (live.has(block) && !read.has(block))
|
|
917
|
+
return tagStatus(n, "neutral");
|
|
918
|
+
return tagStatus(n, "accent");
|
|
919
|
+
}
|
|
920
|
+
/** The block ids some live instance node names (#4454): the blocks whose read reported instances. */
|
|
921
|
+
function blocksWithInstances(live) {
|
|
922
|
+
return new Set(live.nodes.map((n) => n.instanceOf).filter((b) => b !== undefined));
|
|
923
|
+
}
|
|
727
924
|
/**
|
|
728
925
|
* Overlay the declared graph on the provisioned one (#780, `chant graph --live
|
|
729
926
|
* --overlay`) and classify each resource, tagging a `_status` a renderer colours:
|
|
@@ -742,8 +939,13 @@ export function overlayGraphs(live, declared, opts) {
|
|
|
742
939
|
const declaredById = new Map(declared.nodes.map((n) => [n.id, n]));
|
|
743
940
|
const liveIds = new Set(live.nodes.map((n) => n.id));
|
|
744
941
|
const unobserved = opts?.unobserved ?? {};
|
|
942
|
+
const read = blocksWithInstances(live);
|
|
745
943
|
const nodes = live.nodes.map((n) => {
|
|
746
944
|
const d = declaredById.get(n.id);
|
|
945
|
+
// A live instance of a declared block whose expansion the source could
|
|
946
|
+
// not count (`count = var.n`) is managed, never foreign (#4454).
|
|
947
|
+
if (!d && n.instanceOf && declaredById.has(n.instanceOf))
|
|
948
|
+
return tagStatus(n, "good");
|
|
747
949
|
if (!d)
|
|
748
950
|
return tagStatus(n, n.runtimeOwner ? "runtime" : "warn");
|
|
749
951
|
// A managed node keeps the composite it was declared in, so `--detail 1`
|
|
@@ -757,6 +959,10 @@ export function overlayGraphs(live, declared, opts) {
|
|
|
757
959
|
for (const n of declared.nodes) {
|
|
758
960
|
if (liveIds.has(n.id))
|
|
759
961
|
continue;
|
|
962
|
+
if (n.instanceOf) {
|
|
963
|
+
nodes.push(missingInstance(n, liveIds, read, unobserved));
|
|
964
|
+
continue;
|
|
965
|
+
}
|
|
760
966
|
const u = unobserved[n.id];
|
|
761
967
|
nodes.push(u ? tagStatus(n, "neutral", u) : tagStatus(n, "accent"));
|
|
762
968
|
}
|
|
@@ -773,7 +979,7 @@ export function overlayGraphs(live, declared, opts) {
|
|
|
773
979
|
*
|
|
774
980
|
* Each declared node is classified against live observation and tagged `_status`:
|
|
775
981
|
* - **managed** (declared + provisioned) → `good`, carrying the observed
|
|
776
|
-
* `physicalId` / `ownership` onto the declared node
|
|
982
|
+
* `physicalId` / `ownership` / engine `facts` onto the declared node
|
|
777
983
|
* - **pending** (declared, provider confirmed absent) → `accent`
|
|
778
984
|
* - **unobserved** (declared, chant could not look — #1089) → `neutral`, with
|
|
779
985
|
* the reason on `_unobserved`. A wrong-cluster or unsupported-kind read used
|
|
@@ -788,11 +994,19 @@ export function overlayGraphs(live, declared, opts) {
|
|
|
788
994
|
*/
|
|
789
995
|
export function sourceOverlayGraphs(declared, live, opts) {
|
|
790
996
|
const liveById = new Map(live.nodes.map((n) => [n.id, n]));
|
|
997
|
+
const liveIds = new Set(liveById.keys());
|
|
791
998
|
const declaredIds = new Set(declared.nodes.map((n) => n.id));
|
|
792
|
-
|
|
999
|
+
// A live instance of a declared block (#4454) the source could not count
|
|
1000
|
+
// is managed: appended `good`, and never foreign.
|
|
1001
|
+
const managedInstances = live.nodes.filter((n) => !declaredIds.has(n.id) && n.instanceOf !== undefined && declaredIds.has(n.instanceOf));
|
|
1002
|
+
const managedInstanceIds = new Set(managedInstances.map((n) => n.id));
|
|
1003
|
+
const foreignIds = new Set(live.nodes.filter((n) => !declaredIds.has(n.id) && !managedInstanceIds.has(n.id)).map((n) => n.id));
|
|
793
1004
|
const unobserved = opts?.unobserved ?? {};
|
|
1005
|
+
const read = blocksWithInstances(live);
|
|
794
1006
|
const nodes = declared.nodes.map((n) => {
|
|
795
1007
|
const obs = liveById.get(n.id);
|
|
1008
|
+
if (!obs && n.instanceOf)
|
|
1009
|
+
return missingInstance(n, liveIds, read, unobserved);
|
|
796
1010
|
if (!obs) {
|
|
797
1011
|
const u = unobserved[n.id];
|
|
798
1012
|
// unobserved — declared, and nobody looked; not "pending"
|
|
@@ -803,6 +1017,8 @@ export function sourceOverlayGraphs(declared, live, opts) {
|
|
|
803
1017
|
merged.physicalId = obs.physicalId;
|
|
804
1018
|
if (obs.ownership)
|
|
805
1019
|
merged.ownership = obs.ownership;
|
|
1020
|
+
if (obs.facts)
|
|
1021
|
+
merged.facts = obs.facts;
|
|
806
1022
|
// ...and what was observed ABOUT it (#1279). The declared canvas holds what
|
|
807
1023
|
// the source says; the observation holds what the account says, and a fact
|
|
808
1024
|
// like `VpcId` exists only on the second. Dropping it here made every
|
|
@@ -823,6 +1039,8 @@ export function sourceOverlayGraphs(declared, live, opts) {
|
|
|
823
1039
|
continue;
|
|
824
1040
|
nodes.push(tagStatus(n, n.runtimeOwner ? "runtime" : "warn")); // runtime child or foreign
|
|
825
1041
|
}
|
|
1042
|
+
for (const n of managedInstances)
|
|
1043
|
+
nodes.push(tagStatus(n, "good"));
|
|
826
1044
|
nodes.sort((a, b) => a.id.localeCompare(b.id));
|
|
827
1045
|
// Declared edges are the canvas (the cross-substrate topology). Add only the
|
|
828
1046
|
// live edges that touch a foreign node — declared edges already cover every
|
package/dist/graph-refs.d.ts
CHANGED
|
@@ -34,8 +34,26 @@ export interface RefRule {
|
|
|
34
34
|
match?: "id" | "arn" | "name" | "any";
|
|
35
35
|
/** Constrain the target kind (disambiguates identifier collisions). */
|
|
36
36
|
targetKind?: string;
|
|
37
|
+
/**
|
|
38
|
+
* The target kind when the rule runs over indexed nodes (#4522, ruled on
|
|
39
|
+
* INTENTIUS/behold#1023 Q4), for a rule that has no {@link targetKind}
|
|
40
|
+
* because its values are logical ids (`enrichLiveAttrs`), which are unique.
|
|
41
|
+
* Over an index the same path holds a physical value, often a name, so the
|
|
42
|
+
* target kind is what keeps it from joining whatever else has that name.
|
|
43
|
+
*/
|
|
44
|
+
indexedTargetKind?: string;
|
|
37
45
|
/** `reference` → an edge; `containment` → a boundary hint (#779), not an edge. */
|
|
38
46
|
relation: "reference" | "containment";
|
|
47
|
+
/**
|
|
48
|
+
* The path holds a reference only sometimes (#4535): an env var's value, a
|
|
49
|
+
* selector's label, a binding subject that may be a user. A value that
|
|
50
|
+
* names no node of the rule's kind is then not reported as dangling, since
|
|
51
|
+
* most such values are not references at all, and a path read by several
|
|
52
|
+
* rules (one per target kind) would otherwise report every value matched by
|
|
53
|
+
* one rule as dangling under the others. A match is still a typed, scoped
|
|
54
|
+
* match, and two candidates still draw no edge.
|
|
55
|
+
*/
|
|
56
|
+
optional?: boolean;
|
|
39
57
|
/** Edge / containment label (e.g. "in VPC", "sg", "targets"). */
|
|
40
58
|
label?: string;
|
|
41
59
|
/**
|
|
@@ -58,10 +76,28 @@ export interface RefRule {
|
|
|
58
76
|
*/
|
|
59
77
|
viaAttr?: string;
|
|
60
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* A typed tag rule (#4522, ruled on INTENTIUS/behold#1023 Q5): a tag whose
|
|
81
|
+
* key names a cloud id, read off an indexed node's `tags`. Tags make edges
|
|
82
|
+
* only through these, never by matching equal tag values, because two
|
|
83
|
+
* objects can carry the same value for any reason.
|
|
84
|
+
*/
|
|
85
|
+
export interface TagRefRule {
|
|
86
|
+
/** Holder kind; absent for every kind of this lexicon. */
|
|
87
|
+
from?: string;
|
|
88
|
+
/** The exact tag key, or a key prefix ending in `/` whose remainder is the value. */
|
|
89
|
+
key: string;
|
|
90
|
+
/** `value`: the tag's value is the id. `key-suffix`: the key after {@link key} is (`kubernetes.io/cluster/<name>`). */
|
|
91
|
+
read: "value" | "key-suffix";
|
|
92
|
+
targetKind: string;
|
|
93
|
+
label?: string;
|
|
94
|
+
}
|
|
61
95
|
/** A lexicon's reference knowledge — its identity map and reference rules. */
|
|
62
96
|
export interface ReferenceCatalog {
|
|
63
97
|
identities: IdentityRule[];
|
|
64
98
|
refs: RefRule[];
|
|
99
|
+
/** Typed tag rules, used over indexed nodes only (#4522). */
|
|
100
|
+
tagRefs?: TagRefRule[];
|
|
65
101
|
}
|
|
66
102
|
/** `child` is contained by `parent` (subnet ∈ VPC). For #779's boundary boxes. */
|
|
67
103
|
export interface ContainmentPair {
|
|
@@ -129,4 +165,113 @@ export declare function reconstructEdges(nodes: IRNode[], catalog: ReferenceCata
|
|
|
129
165
|
* determinism.
|
|
130
166
|
*/
|
|
131
167
|
export declare function containmentGroups(pairs: ContainmentPair[]): Record<string, string[]>;
|
|
168
|
+
/** One lexicon's catalog, named, so a derived edge can say which rule made it. */
|
|
169
|
+
export interface NamedCatalog {
|
|
170
|
+
lexicon: string;
|
|
171
|
+
catalog: ReferenceCatalog;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Where an indexed node's identifiers are unique (INTENTIUS/behold#1023 Q2):
|
|
175
|
+
* its substrate and account, subscription, project or cluster, plus its
|
|
176
|
+
* region for a regional type. A global type (IAM, Route 53, CloudFront) has
|
|
177
|
+
* no region, and is matched by account only.
|
|
178
|
+
*/
|
|
179
|
+
export interface IndexedNodeScope {
|
|
180
|
+
/** `<substrate>/<scopeId>`. */
|
|
181
|
+
account: string;
|
|
182
|
+
/** The region or location; undefined for a global type. */
|
|
183
|
+
region?: string;
|
|
184
|
+
}
|
|
185
|
+
/** A reference whose value matched several nodes: no edge is drawn (behold#1023 Q3). */
|
|
186
|
+
export interface AmbiguousRef {
|
|
187
|
+
from: string;
|
|
188
|
+
rule: string;
|
|
189
|
+
path: string;
|
|
190
|
+
value: string;
|
|
191
|
+
/** Every node the value matched, sorted. */
|
|
192
|
+
candidates: string[];
|
|
193
|
+
}
|
|
194
|
+
/** A reference whose target is not in the index, with the rule that read it. */
|
|
195
|
+
export interface IndexedDanglingRef extends DanglingRef {
|
|
196
|
+
rule: string;
|
|
197
|
+
}
|
|
198
|
+
export interface IndexedEdges {
|
|
199
|
+
/** Reference and containment edges, each `origin: "derived"` with its `rule`. */
|
|
200
|
+
edges: IREdge[];
|
|
201
|
+
containment: ContainmentPair[];
|
|
202
|
+
dangling: IndexedDanglingRef[];
|
|
203
|
+
ambiguous: AmbiguousRef[];
|
|
204
|
+
}
|
|
205
|
+
/** `<lexicon>:<from kind>:<path>`, the id a derived edge carries. */
|
|
206
|
+
export declare function refRuleId(lexicon: string, from: string, path: string): string;
|
|
207
|
+
/**
|
|
208
|
+
* Derive edges over indexed nodes (#4522) with each lexicon's catalog, under
|
|
209
|
+
* the rules ruled on INTENTIUS/behold#1023:
|
|
210
|
+
*
|
|
211
|
+
* - the join key is the scoped value: a reference on a node in region R
|
|
212
|
+
* matches nodes of the same account in R, and global nodes of the same
|
|
213
|
+
* account; a reference on a global node matches global nodes only;
|
|
214
|
+
* - a rule's target kind is `targetKind`, else `indexedTargetKind`;
|
|
215
|
+
* - a value that matches more than one node draws no edge and is returned in
|
|
216
|
+
* `ambiguous` with every candidate, in place of {@link reconstructEdges}'
|
|
217
|
+
* first-candidate pick, so two reads of one account in another node order
|
|
218
|
+
* give the same edges;
|
|
219
|
+
* - tags make edges only through a catalog's typed `tagRefs`.
|
|
220
|
+
*
|
|
221
|
+
* A node is matched by its id, physical id, native id, cloud ids, and the
|
|
222
|
+
* catalog's identity paths. Rules apply to nodes of their own lexicon. Pure.
|
|
223
|
+
*/
|
|
224
|
+
export declare function reconstructIndexedEdges(nodes: readonly IRNode[], catalogs: readonly NamedCatalog[], scopeOf: (node: IRNode) => IndexedNodeScope): IndexedEdges;
|
|
225
|
+
/** One value that names an indexed node: its native id, or one of its cloud ids. */
|
|
226
|
+
export interface NodeIdentityValue {
|
|
227
|
+
/** `native-id`, or the cloud id's kind (`arn`, `provider-id`, ...). */
|
|
228
|
+
kind: string;
|
|
229
|
+
value: string;
|
|
230
|
+
}
|
|
231
|
+
/** The lexicon whose nodes can be identity-matched, and the values that name each one. */
|
|
232
|
+
export interface IdentityOwners {
|
|
233
|
+
lexicon: string;
|
|
234
|
+
/** The values that name a node of this lexicon. Absent: its native id and its ARN cloud ids. */
|
|
235
|
+
identities?(node: IRNode): NodeIdentityValue[];
|
|
236
|
+
}
|
|
237
|
+
/** A value that named several nodes: no identity-match edge is drawn (behold#1023 Q3). */
|
|
238
|
+
export interface AmbiguousIdentityRef {
|
|
239
|
+
from: string;
|
|
240
|
+
path: string;
|
|
241
|
+
value: string;
|
|
242
|
+
/** Every node the value named, sorted. */
|
|
243
|
+
candidates: string[];
|
|
244
|
+
}
|
|
245
|
+
export interface IdentityEdges {
|
|
246
|
+
/** Each `origin: "derived"`, `rule: "identity-match:..."`. */
|
|
247
|
+
edges: IREdge[];
|
|
248
|
+
ambiguous: AmbiguousIdentityRef[];
|
|
249
|
+
}
|
|
250
|
+
/** The label every edge of the identity pass carries, as the prefix of its `rule`. */
|
|
251
|
+
export declare const IDENTITY_MATCH_RULE = "identity-match";
|
|
252
|
+
/** `identity-match:<owner lexicon>:<owner kind>:<identity kind>`. */
|
|
253
|
+
export declare function identityMatchRuleId(lexicon: string, kind: string, identityKind: string): string;
|
|
254
|
+
/** The default identities of an indexed node: the native id, and any ARN among its cloud ids. */
|
|
255
|
+
export declare function defaultNodeIdentities(node: IRNode): NodeIdentityValue[];
|
|
256
|
+
/**
|
|
257
|
+
* The identity-match pass (#4523, ruled on INTENTIUS/behold#1023 Q1-Q3): the
|
|
258
|
+
* second pass over indexed nodes, after {@link reconstructIndexedEdges}. A
|
|
259
|
+
* string attribute on one node equal to a value that names another node (its
|
|
260
|
+
* native id, which for aws is the CloudFormation `primaryIdentifier`, or its
|
|
261
|
+
* ARN) draws an edge labelled `identity-match`:
|
|
262
|
+
*
|
|
263
|
+
* - only nodes of a lexicon in `owners` are named; holders are any node;
|
|
264
|
+
* - the join key is the scoped value, as in the catalog pass: a holder in
|
|
265
|
+
* region R reaches nodes of its account in R and global nodes of its
|
|
266
|
+
* account; a global holder reaches global nodes only;
|
|
267
|
+
* - a value naming more than one node draws no edge and is returned in
|
|
268
|
+
* `ambiguous` with every candidate;
|
|
269
|
+
* - tag subtrees are never read, values under {@link MIN_IDENTITY_VALUE}
|
|
270
|
+
* characters or with whitespace are skipped, and a value naming the holder
|
|
271
|
+
* itself is not a reference;
|
|
272
|
+
* - a pair the catalog pass already joined (`existing`) gets no second edge.
|
|
273
|
+
*
|
|
274
|
+
* Pure, and independent of node order.
|
|
275
|
+
*/
|
|
276
|
+
export declare function reconstructIdentityEdges(nodes: readonly IRNode[], owners: readonly IdentityOwners[], scopeOf: (node: IRNode) => IndexedNodeScope, existing?: readonly IREdge[]): IdentityEdges;
|
|
132
277
|
//# sourceMappingURL=graph-refs.d.ts.map
|
package/dist/graph-refs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-refs.d.ts","sourceRoot":"","sources":["../src/graph-refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEjD,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED,kFAAkF;AAClF,MAAM,WAAW,OAAO;IACtB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IACtC,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;IACtC,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,IAAI,EAAE,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"graph-refs.d.ts","sourceRoot":"","sources":["../src/graph-refs.ts"],"names":[],"mappings":"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"}
|