@intentius/chant 0.124.45 → 0.124.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-hold.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-pass.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-skip.json +10 -0
- package/dist/__golden__/wave-loop/op-cost-member-clash.json +6 -0
- package/dist/__golden__/wave-loop/op-cost-member.json +13 -0
- package/dist/__golden__/wave-loop/op-denied-source.json +16 -0
- package/dist/__golden__/wave-loop/op-denied.json +16 -0
- package/dist/__golden__/wave-loop/op-discover-rest-short.json +6 -0
- package/dist/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
- package/dist/__golden__/wave-loop/op-discover-rest.json +26 -0
- package/dist/__golden__/wave-loop/op-discover-wide.json +26 -0
- package/dist/__golden__/wave-loop/op-held-on-again.json +16 -0
- package/dist/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
- package/dist/__golden__/wave-loop/op-held-on.json +16 -0
- package/dist/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-held.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-pass.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-share.json +33 -0
- package/dist/__golden__/wave-loop/op-outcome-held.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
- package/dist/__golden__/wave-loop/op-overridden.json +16 -0
- package/dist/__golden__/wave-loop/op-per-run.json +20 -0
- package/dist/__golden__/wave-loop/op-point.json +13 -0
- package/dist/__golden__/wave-loop/op-pr-review.json +10 -0
- package/dist/__golden__/wave-loop/op-sealed.json +10 -0
- package/dist/__golden__/wave-loop/op-spend-change-only.json +10 -0
- package/dist/__golden__/wave-loop/op-spend.json +10 -0
- package/dist/__golden__/wave-loop/op-wave-commands.json +55 -0
- package/dist/__golden__/wave-loop/op-wide-refused.json +26 -0
- package/dist/__golden__/wave-loop/op-wide-waiting.json +29 -0
- package/dist/__golden__/wave-loop/op-wide.json +39 -0
- package/dist/action-pins.d.ts +61 -0
- package/dist/action-pins.d.ts.map +1 -0
- package/dist/action-pins.js +77 -0
- package/dist/capabilities/aws.paths +148 -0
- package/dist/capabilities/base-mappings.json +122 -0
- package/dist/capabilities/catalog.d.ts +89 -0
- package/dist/capabilities/catalog.d.ts.map +1 -0
- package/dist/capabilities/catalog.js +204 -0
- package/dist/capabilities/language.d.ts +103 -0
- package/dist/capabilities/language.d.ts.map +1 -0
- package/dist/capabilities/language.js +335 -0
- package/dist/capabilities/matcher.d.ts +65 -0
- package/dist/capabilities/matcher.d.ts.map +1 -0
- package/dist/capabilities/matcher.js +299 -0
- package/dist/capabilities/view.d.ts +207 -0
- package/dist/capabilities/view.d.ts.map +1 -0
- package/dist/capabilities/view.js +484 -0
- package/dist/cli/commands/carve.d.ts +3 -0
- package/dist/cli/commands/carve.d.ts.map +1 -1
- package/dist/cli/commands/carve.js +36 -7
- package/dist/cli/commands/import-report.d.ts +26 -0
- package/dist/cli/commands/import-report.d.ts.map +1 -0
- package/dist/cli/commands/import-report.js +65 -0
- package/dist/cli/commands/import.d.ts +11 -1
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/import.js +22 -3
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +1 -0
- package/dist/cli/commands/migrate.d.ts +13 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +134 -10
- package/dist/cli/handlers/approve.d.ts.map +1 -1
- package/dist/cli/handlers/approve.js +21 -2
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +6 -1
- package/dist/cli/handlers/declared-graph.d.ts +44 -0
- package/dist/cli/handlers/declared-graph.d.ts.map +1 -0
- package/dist/cli/handlers/declared-graph.js +87 -0
- package/dist/cli/handlers/graph.d.ts +25 -0
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +93 -87
- package/dist/cli/handlers/ledger.d.ts +3 -0
- package/dist/cli/handlers/ledger.d.ts.map +1 -0
- package/dist/cli/handlers/ledger.js +55 -0
- package/dist/cli/handlers/migrate.d.ts.map +1 -1
- package/dist/cli/handlers/migrate.js +18 -11
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/misc.js +12 -1
- package/dist/cli/handlers/pr-env.d.ts.map +1 -1
- package/dist/cli/handlers/pr-env.js +4 -3
- package/dist/cli/handlers/pr.d.ts +15 -1
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +143 -39
- package/dist/cli/handlers/query.d.ts +7 -2
- package/dist/cli/handlers/query.d.ts.map +1 -1
- package/dist/cli/handlers/query.js +16 -4
- package/dist/cli/handlers/release.d.ts.map +1 -1
- package/dist/cli/handlers/release.js +6 -3
- package/dist/cli/handlers/search-count.d.ts +89 -0
- package/dist/cli/handlers/search-count.d.ts.map +1 -0
- package/dist/cli/handlers/search-count.js +132 -0
- package/dist/cli/handlers/search.d.ts +356 -6
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +1039 -155
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +88 -17
- package/dist/cli/mcp/server.d.ts.map +1 -1
- package/dist/cli/mcp/server.js +3 -0
- package/dist/cli/mcp/tools/capabilities.d.ts +7 -0
- package/dist/cli/mcp/tools/capabilities.d.ts.map +1 -0
- package/dist/cli/mcp/tools/capabilities.js +27 -0
- package/dist/cli/mcp/workspace-tools.d.ts +3 -1
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/mcp/workspace-tools.js +47 -2
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +100 -19
- package/dist/cli/registry.d.ts +36 -4
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/components/builders.d.ts +5 -1
- package/dist/components/builders.d.ts.map +1 -1
- package/dist/components/builders.js +5 -0
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.js +16 -1
- package/dist/components/capability-plugin.d.ts +14 -0
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/pr-env-ports.d.ts +29 -0
- package/dist/components/pr-env-ports.d.ts.map +1 -0
- package/dist/components/pr-env-ports.js +77 -0
- package/dist/components/pr-env-run.d.ts +5 -21
- package/dist/components/pr-env-run.d.ts.map +1 -1
- package/dist/components/pr-env-run.js +6 -70
- package/dist/components/pr-environment.d.ts +2 -1
- package/dist/components/pr-environment.d.ts.map +1 -1
- package/dist/components/pr-environment.js +1 -1
- package/dist/components/pr-hooks.d.ts +21 -1
- package/dist/components/pr-hooks.d.ts.map +1 -1
- package/dist/components/pr-hooks.js +72 -4
- package/dist/components/pr-pipeline.d.ts +45 -10
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +47 -14
- package/dist/components/pr-policy.d.ts +36 -0
- package/dist/components/pr-policy.d.ts.map +1 -1
- package/dist/components/pr-policy.js +36 -0
- package/dist/components/starter-plugin.d.ts +1 -0
- package/dist/components/starter-plugin.d.ts.map +1 -1
- package/dist/components/starter-plugin.js +5 -1
- package/dist/components/verbs/index.d.ts +2 -0
- package/dist/components/verbs/index.d.ts.map +1 -1
- package/dist/components/verbs/index.js +2 -0
- package/dist/components/verbs/publish-artifact.d.ts +65 -0
- package/dist/components/verbs/publish-artifact.d.ts.map +1 -0
- package/dist/components/verbs/publish-artifact.js +74 -0
- package/dist/components/verbs/publish-image.d.ts +129 -0
- package/dist/components/verbs/publish-image.d.ts.map +1 -0
- package/dist/components/verbs/publish-image.js +145 -0
- package/dist/config-environments.d.ts +112 -0
- package/dist/config-environments.d.ts.map +1 -0
- package/dist/config-environments.js +114 -0
- package/dist/config.d.ts +32 -84
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -96
- package/dist/gate-decision.d.ts +11 -2
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +15 -3
- package/dist/graph-detail.d.ts.map +1 -1
- package/dist/graph-detail.js +15 -3
- package/dist/graph-effective.d.ts +33 -2
- package/dist/graph-effective.d.ts.map +1 -1
- package/dist/graph-effective.js +215 -68
- package/dist/graph-ir.d.ts +48 -0
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-ir.js +130 -0
- package/dist/graph-sub-template.d.ts +11 -0
- package/dist/graph-sub-template.d.ts.map +1 -0
- package/dist/graph-sub-template.js +19 -0
- package/dist/graph-walk.d.ts +66 -0
- package/dist/graph-walk.d.ts.map +1 -0
- package/dist/graph-walk.js +70 -0
- package/dist/import/parser.d.ts +19 -0
- package/dist/import/parser.d.ts.map +1 -1
- package/dist/lexicon.d.ts +80 -6
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts +11 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/git.d.ts +2 -5
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/ledger-read.d.ts +65 -0
- package/dist/lifecycle/ledger-read.d.ts.map +1 -0
- package/dist/lifecycle/ledger-read.js +160 -0
- package/dist/lifecycle/observe.d.ts +28 -0
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/observe.js +23 -1
- package/dist/lifecycle/release-workstation.d.ts +7 -0
- package/dist/lifecycle/release-workstation.d.ts.map +1 -1
- package/dist/lifecycle/release-workstation.js +25 -0
- package/dist/lifecycle/run-ledger.d.ts +4 -3
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +1 -0
- package/dist/lint/discover.js +3 -1
- package/dist/lint/post-synth.d.ts +127 -1
- package/dist/lint/post-synth.d.ts.map +1 -1
- package/dist/lint/post-synth.js +84 -2
- package/dist/lint/rule.d.ts +6 -0
- package/dist/lint/rule.d.ts.map +1 -1
- package/dist/lint/rules/op/index.d.ts +1 -0
- package/dist/lint/rules/op/index.d.ts.map +1 -1
- package/dist/lint/rules/op/index.js +2 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.d.ts +32 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.d.ts.map +1 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.js +63 -0
- package/dist/live-endpoint.d.ts +1 -1
- package/dist/live-endpoint.d.ts.map +1 -1
- package/dist/live-endpoint.js +1 -1
- package/dist/observation.d.ts +48 -1
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +21 -5
- package/dist/op/activities/activity-contracts.d.ts +9 -6
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.js +5 -2
- package/dist/op/activities/index.d.ts +2 -2
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/index.js +1 -1
- package/dist/op/activities/review-agent.d.ts +90 -4
- package/dist/op/activities/review-agent.d.ts.map +1 -1
- package/dist/op/activities/review-agent.js +217 -19
- package/dist/op/activities/work-evidence.d.ts +8 -1
- package/dist/op/activities/work-evidence.d.ts.map +1 -1
- package/dist/op/activities/work-evidence.js +1 -0
- package/dist/op/builders.d.ts +9 -5
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +9 -5
- package/dist/op/composites/apply-op.d.ts +29 -2
- package/dist/op/composites/apply-op.d.ts.map +1 -1
- package/dist/op/composites/apply-op.js +20 -1
- package/dist/op/gate-approval.d.ts +11 -5
- package/dist/op/gate-approval.d.ts.map +1 -1
- package/dist/op/gate-approval.js +11 -6
- package/dist/op/gate-quorum.d.ts +100 -3
- package/dist/op/gate-quorum.d.ts.map +1 -1
- package/dist/op/gate-quorum.js +108 -6
- package/dist/op/gate-review.d.ts +9 -0
- package/dist/op/gate-review.d.ts.map +1 -1
- package/dist/op/gate-review.js +13 -0
- package/dist/op/gate.d.ts +44 -3
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +25 -4
- package/dist/op/index.d.ts +3 -3
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/index.js +1 -1
- package/dist/op/local-executor.d.ts +38 -3
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +48 -6
- package/dist/op/op-waves-run.d.ts +26 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +259 -13
- package/dist/op/op-waves.d.ts +72 -5
- package/dist/op/op-waves.d.ts.map +1 -1
- package/dist/op/op-waves.js +110 -15
- package/dist/op/runtime.d.ts +11 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/schedule-overdue.d.ts +16 -0
- package/dist/op/schedule-overdue.d.ts.map +1 -1
- package/dist/op/schedule-overdue.js +36 -0
- package/dist/op/stage-hooks.d.ts +9 -2
- package/dist/op/stage-hooks.d.ts.map +1 -1
- package/dist/op/stage-hooks.js +7 -5
- package/dist/op/workspace-run-env.d.ts +22 -0
- package/dist/op/workspace-run-env.d.ts.map +1 -0
- package/dist/op/workspace-run-env.js +21 -0
- package/dist/pr-forge.d.ts +24 -0
- package/dist/pr-forge.d.ts.map +1 -1
- package/dist/pr-forge.js +47 -0
- package/dist/pr-post.d.ts +42 -0
- package/dist/pr-post.d.ts.map +1 -1
- package/dist/pr-post.js +67 -1
- package/dist/read-filter.d.ts +65 -0
- package/dist/read-filter.d.ts.map +1 -0
- package/dist/read-filter.js +179 -0
- package/dist/run-event.d.ts +1 -1
- package/dist/run-event.d.ts.map +1 -1
- package/dist/terraform/carve.d.ts +24 -3
- package/dist/terraform/carve.d.ts.map +1 -1
- package/dist/terraform/carve.js +32 -14
- package/dist/terraform/cuts.d.ts +97 -0
- package/dist/terraform/cuts.d.ts.map +1 -0
- package/dist/terraform/cuts.js +138 -0
- package/dist/terraform/folds.d.ts +26 -0
- package/dist/terraform/folds.d.ts.map +1 -0
- package/dist/terraform/folds.js +38 -0
- package/dist/terraform/graph.d.ts.map +1 -1
- package/dist/terraform/graph.js +10 -0
- package/dist/terraform/reach.d.ts +140 -0
- package/dist/terraform/reach.d.ts.map +1 -0
- package/dist/terraform/reach.js +170 -0
- package/dist/terraform/score.d.ts +14 -0
- package/dist/terraform/score.d.ts.map +1 -1
- package/dist/terraform/score.js +14 -31
- package/dist/terraform/state.d.ts.map +1 -1
- package/dist/terraform/state.js +4 -2
- package/dist/terraform/types.d.ts +8 -0
- package/dist/terraform/types.d.ts.map +1 -1
- package/dist/wave-blocked.d.ts +10 -1
- package/dist/wave-blocked.d.ts.map +1 -1
- package/dist/wave-blocked.js +31 -3
- package/dist/wave-runtime.mjs +266 -256
- package/dist/workspace/capabilities-contract.d.ts +66 -0
- package/dist/workspace/capabilities-contract.d.ts.map +1 -0
- package/dist/workspace/capabilities-contract.js +107 -0
- package/dist/workspace/capabilities.schema.json +229 -0
- package/dist/workspace/check.schema.json +11 -2
- package/dist/workspace/checks/ci-branch.d.ts +44 -0
- package/dist/workspace/checks/ci-branch.d.ts.map +1 -0
- package/dist/workspace/checks/ci-branch.js +133 -0
- package/dist/workspace/checks/links.d.ts +3 -0
- package/dist/workspace/checks/links.d.ts.map +1 -1
- package/dist/workspace/checks/links.js +12 -1
- package/dist/workspace/checks/org.d.ts +48 -0
- package/dist/workspace/checks/org.d.ts.map +1 -0
- package/dist/workspace/checks/org.js +156 -0
- package/dist/workspace/checks.d.ts +11 -1
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +59 -7
- package/dist/workspace/ci-branches.d.ts +16 -0
- package/dist/workspace/ci-branches.d.ts.map +1 -1
- package/dist/workspace/ci-branches.js +27 -0
- package/dist/workspace/ci-green-cli.js +7 -7
- package/dist/workspace/ci-green-workflow.d.ts +1 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +13 -8
- package/dist/workspace/ci-green.d.ts +14 -0
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +44 -11
- package/dist/workspace/ci-run.d.ts +9 -1
- package/dist/workspace/ci-run.d.ts.map +1 -1
- package/dist/workspace/ci-run.js +67 -6
- package/dist/workspace/ci-serve.d.ts +9 -0
- package/dist/workspace/ci-serve.d.ts.map +1 -1
- package/dist/workspace/ci-serve.js +114 -76
- package/dist/workspace/compose-graph.d.ts +23 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/compose-graph.js +3 -1
- package/dist/workspace/composites.d.ts +4 -1
- package/dist/workspace/composites.d.ts.map +1 -1
- package/dist/workspace/composites.js +5 -2
- package/dist/workspace/composites.schema.json +22 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
- package/dist/workspace/conformance/index.d.ts +1 -1
- package/dist/workspace/conformance/index.d.ts.map +1 -1
- package/dist/workspace/conformance/index.js +39 -2
- package/dist/workspace/cross-root-lint.d.ts +56 -0
- package/dist/workspace/cross-root-lint.d.ts.map +1 -0
- package/dist/workspace/cross-root-lint.js +111 -0
- package/dist/workspace/dbt-models-reader.d.ts +44 -0
- package/dist/workspace/dbt-models-reader.d.ts.map +1 -0
- package/dist/workspace/dbt-models-reader.js +356 -0
- package/dist/workspace/dbt-project-common.d.ts +40 -0
- package/dist/workspace/dbt-project-common.d.ts.map +1 -0
- package/dist/workspace/dbt-project-common.js +106 -0
- package/dist/workspace/dbt-project-reader.d.ts +4 -3
- package/dist/workspace/dbt-project-reader.d.ts.map +1 -1
- package/dist/workspace/dbt-project-reader.js +14 -108
- package/dist/workspace/decision-rank.d.ts +26 -0
- package/dist/workspace/decision-rank.d.ts.map +1 -0
- package/dist/workspace/decision-rank.js +16 -0
- package/dist/workspace/declaration.d.ts +43 -2
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +45 -11
- package/dist/workspace/declaration.schema.json +133 -24
- package/dist/workspace/environments.d.ts +26 -2
- package/dist/workspace/environments.d.ts.map +1 -1
- package/dist/workspace/environments.js +26 -2
- package/dist/workspace/flyway-dir.d.ts +39 -0
- package/dist/workspace/flyway-dir.d.ts.map +1 -0
- package/dist/workspace/flyway-dir.js +104 -0
- package/dist/workspace/flyway-layout.d.ts +96 -0
- package/dist/workspace/flyway-layout.d.ts.map +1 -0
- package/dist/workspace/flyway-layout.js +308 -0
- package/dist/workspace/graph-cache.d.ts +8 -0
- package/dist/workspace/graph-cache.d.ts.map +1 -1
- package/dist/workspace/graph-cache.js +27 -3
- package/dist/workspace/graph-cli.d.ts +39 -2
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +92 -32
- package/dist/workspace/graph.schema.json +182 -0
- package/dist/workspace/intent.d.ts +2 -3
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +5 -9
- package/dist/workspace/kind-link-readers.d.ts +59 -2
- package/dist/workspace/kind-link-readers.d.ts.map +1 -1
- package/dist/workspace/kind-link-readers.js +17 -1
- package/dist/workspace/kind-readers.d.ts +3 -0
- package/dist/workspace/kind-readers.d.ts.map +1 -1
- package/dist/workspace/kind-readers.js +7 -1
- package/dist/workspace/kinds.d.ts +66 -2
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +98 -4
- package/dist/workspace/ledger.schema.json +158 -0
- package/dist/workspace/lexicon-outputs.d.ts +20 -1
- package/dist/workspace/lexicon-outputs.d.ts.map +1 -1
- package/dist/workspace/lexicon-outputs.js +102 -10
- package/dist/workspace/lineage-check.d.ts +3 -0
- package/dist/workspace/lineage-check.d.ts.map +1 -1
- package/dist/workspace/lineage-check.js +23 -4
- package/dist/workspace/links.d.ts +8 -1
- package/dist/workspace/links.d.ts.map +1 -1
- package/dist/workspace/links.js +25 -1
- package/dist/workspace/ls.d.ts +8 -0
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +7 -1
- package/dist/workspace/ls.schema.json +7 -0
- package/dist/workspace/member-commands.d.ts +10 -1
- package/dist/workspace/member-commands.d.ts.map +1 -1
- package/dist/workspace/member-commands.js +71 -6
- package/dist/workspace/migrate-links.d.ts +45 -0
- package/dist/workspace/migrate-links.d.ts.map +1 -0
- package/dist/workspace/migrate-links.js +100 -0
- package/dist/workspace/migration-dirs.d.ts +74 -0
- package/dist/workspace/migration-dirs.d.ts.map +1 -0
- package/dist/workspace/migration-dirs.js +254 -0
- package/dist/workspace/nested-graph.d.ts +2 -0
- package/dist/workspace/nested-graph.d.ts.map +1 -1
- package/dist/workspace/nested-graph.js +32 -1
- package/dist/workspace/reason-codes.d.ts +18 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +23 -0
- package/dist/workspace/records-cli.d.ts +11 -0
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-cli.js +57 -5
- package/dist/workspace/records.schema.json +5 -0
- package/dist/workspace/release-candidates.d.ts +2 -0
- package/dist/workspace/release-candidates.d.ts.map +1 -1
- package/dist/workspace/release-candidates.js +5 -2
- package/dist/workspace/release-train.d.ts +53 -0
- package/dist/workspace/release-train.d.ts.map +1 -0
- package/dist/workspace/release-train.js +134 -0
- package/dist/workspace/release-workflow.d.ts.map +1 -1
- package/dist/workspace/release-workflow.js +4 -3
- package/dist/workspace/repo-ref.d.ts +45 -0
- package/dist/workspace/repo-ref.d.ts.map +1 -0
- package/dist/workspace/repo-ref.js +114 -0
- package/dist/workspace/run-event.schema.json +2 -2
- package/dist/workspace/runs-cli.d.ts +9 -0
- package/dist/workspace/runs-cli.d.ts.map +1 -1
- package/dist/workspace/runs-cli.js +48 -3
- package/dist/workspace/runs.schema.json +7 -0
- package/dist/workspace/search-cli.d.ts +204 -0
- package/dist/workspace/search-cli.d.ts.map +1 -0
- package/dist/workspace/search-cli.js +466 -0
- package/dist/workspace/search-contract.d.ts +56 -0
- package/dist/workspace/search-contract.d.ts.map +1 -0
- package/dist/workspace/search-contract.js +70 -0
- package/dist/workspace/search.schema.json +822 -0
- package/dist/workspace/status-decisions.d.ts +37 -0
- package/dist/workspace/status-decisions.d.ts.map +1 -0
- package/dist/workspace/status-decisions.js +147 -0
- package/dist/workspace/status-gates.d.ts +9 -0
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status.d.ts +4 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +14 -2
- package/dist/workspace/status.schema.json +6 -0
- package/dist/workspace/work-cli.d.ts.map +1 -1
- package/dist/workspace/work-cli.js +5 -3
- package/dist/workspace/work-evidence-ops.d.ts +83 -0
- package/dist/workspace/work-evidence-ops.d.ts.map +1 -0
- package/dist/workspace/work-evidence-ops.js +169 -0
- package/dist/workspace/work-evidence.d.ts +12 -2
- package/dist/workspace/work-evidence.d.ts.map +1 -1
- package/dist/workspace/work-evidence.js +21 -3
- package/dist/workspace/work-evidence.schema.json +49 -2
- package/dist/workspace/workspace-gates.d.ts +110 -0
- package/dist/workspace/workspace-gates.d.ts.map +1 -0
- package/dist/workspace/workspace-gates.js +140 -0
- package/dist/workspace/workspace-kinds.schema.json +58 -3
- package/dist/workspace/workspace-ledger.d.ts +76 -0
- package/dist/workspace/workspace-ledger.d.ts.map +1 -0
- package/dist/workspace/workspace-ledger.js +91 -0
- package/dist/workspace/workspace-run.d.ts +112 -0
- package/dist/workspace/workspace-run.d.ts.map +1 -0
- package/dist/workspace/workspace-run.js +432 -0
- package/package.json +1 -1
- package/src/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-hold.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-pass.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-skip.json +10 -0
- package/src/__golden__/wave-loop/op-cost-member-clash.json +6 -0
- package/src/__golden__/wave-loop/op-cost-member.json +13 -0
- package/src/__golden__/wave-loop/op-denied-source.json +16 -0
- package/src/__golden__/wave-loop/op-denied.json +16 -0
- package/src/__golden__/wave-loop/op-discover-rest-short.json +6 -0
- package/src/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
- package/src/__golden__/wave-loop/op-discover-rest.json +26 -0
- package/src/__golden__/wave-loop/op-discover-wide.json +26 -0
- package/src/__golden__/wave-loop/op-held-on-again.json +16 -0
- package/src/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
- package/src/__golden__/wave-loop/op-held-on.json +16 -0
- package/src/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-held.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-pass.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-share.json +33 -0
- package/src/__golden__/wave-loop/op-outcome-held.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
- package/src/__golden__/wave-loop/op-overridden.json +16 -0
- package/src/__golden__/wave-loop/op-per-run.json +20 -0
- package/src/__golden__/wave-loop/op-point.json +13 -0
- package/src/__golden__/wave-loop/op-pr-review.json +10 -0
- package/src/__golden__/wave-loop/op-sealed.json +10 -0
- package/src/__golden__/wave-loop/op-spend-change-only.json +10 -0
- package/src/__golden__/wave-loop/op-spend.json +10 -0
- package/src/__golden__/wave-loop/op-wave-commands.json +55 -0
- package/src/__golden__/wave-loop/op-wide-refused.json +26 -0
- package/src/__golden__/wave-loop/op-wide-waiting.json +29 -0
- package/src/__golden__/wave-loop/op-wide.json +39 -0
- package/src/__snapshots__/okf.test.ts.snap +10 -0
- package/src/action-pins.test.ts +78 -0
- package/src/action-pins.ts +92 -0
- package/src/capabilities/aws.paths +148 -0
- package/src/capabilities/base-mappings.json +122 -0
- package/src/capabilities/catalog.ts +230 -0
- package/src/capabilities/language.test.ts +191 -0
- package/src/capabilities/language.ts +373 -0
- package/src/capabilities/matcher.ts +315 -0
- package/src/capabilities/view-compose.test.ts +76 -0
- package/src/capabilities/view.ts +631 -0
- package/src/cli/commands/carve-score-once.test.ts +99 -0
- package/src/cli/commands/carve.ts +37 -6
- package/src/cli/commands/check-lexicon.test.ts +2 -2
- package/src/cli/commands/import-report.ts +71 -0
- package/src/cli/commands/import.ts +33 -3
- package/src/cli/commands/lint.ts +1 -0
- package/src/cli/commands/migrate-dialect.test.ts +145 -0
- package/src/cli/commands/migrate.ts +132 -11
- package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +4 -4
- package/src/cli/handlers/approve.ts +23 -2
- package/src/cli/handlers/build.ts +7 -1
- package/src/cli/handlers/declared-graph.ts +99 -0
- package/src/cli/handlers/graph.test.ts +94 -3
- package/src/cli/handlers/graph.ts +123 -96
- package/src/cli/handlers/ledger.ts +54 -0
- package/src/cli/handlers/migrate.ts +21 -12
- package/src/cli/handlers/misc.ts +10 -1
- package/src/cli/handlers/pr-env.ts +3 -4
- package/src/cli/handlers/pr.ts +138 -36
- package/src/cli/handlers/query.ts +16 -4
- package/src/cli/handlers/release.ts +6 -3
- package/src/cli/handlers/search-build-roots.test.ts +144 -0
- package/src/cli/handlers/search-count.test.ts +191 -0
- package/src/cli/handlers/search-count.ts +165 -0
- package/src/cli/handlers/search-json.test.ts +333 -0
- package/src/cli/handlers/search-live.test.ts +387 -0
- package/src/cli/handlers/search-paths.test.ts +235 -0
- package/src/cli/handlers/search.ts +1291 -166
- package/src/cli/main.test.ts +43 -3
- package/src/cli/main.ts +88 -17
- package/src/cli/mcp/server.test.ts +3 -3
- package/src/cli/mcp/server.ts +3 -0
- package/src/cli/mcp/tools/capabilities.ts +32 -0
- package/src/cli/mcp/workspace-tools.e2e.test.ts +21 -1
- package/src/cli/mcp/workspace-tools.ts +47 -2
- package/src/cli/parse-args.ts +79 -15
- package/src/cli/registry.ts +36 -4
- package/src/components/builders.ts +8 -0
- package/src/components/capability-plugin-loader.ts +13 -1
- package/src/components/capability-plugin.ts +16 -0
- package/src/components/pr-env-ports.ts +89 -0
- package/src/components/pr-env-run-bundle.test.ts +54 -0
- package/src/components/pr-env-run.ts +5 -76
- package/src/components/pr-environment.ts +2 -1
- package/src/components/pr-hooks.test.ts +73 -5
- package/src/components/pr-hooks.ts +95 -5
- package/src/components/pr-pipeline.ts +64 -16
- package/src/components/pr-policy.test.ts +64 -1
- package/src/components/pr-policy.ts +53 -0
- package/src/components/registry.test.ts +1 -1
- package/src/components/starter-plugin.ts +6 -0
- package/src/components/verbs/index.ts +2 -0
- package/src/components/verbs/publish-artifact.test.ts +60 -0
- package/src/components/verbs/publish-artifact.ts +122 -0
- package/src/components/verbs/publish-image.test.ts +101 -0
- package/src/components/verbs/publish-image.ts +265 -0
- package/src/config-environments.ts +160 -0
- package/src/config.ts +44 -124
- package/src/gate-decision-bundle.test.ts +1 -0
- package/src/gate-decision-identity.test.ts +9 -0
- package/src/gate-decision.ts +26 -3
- package/src/graph-detail.ts +15 -3
- package/src/graph-effective.ts +226 -75
- package/src/graph-ir.test.ts +163 -0
- package/src/graph-ir.ts +174 -0
- package/src/graph-sub-template.ts +22 -0
- package/src/graph-walk.test.ts +44 -0
- package/src/graph-walk.ts +102 -0
- package/src/import/parser.ts +20 -0
- package/src/lexicon.ts +84 -6
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lifecycle/git.ts +2 -2
- package/src/lifecycle/ledger-read.test.ts +107 -0
- package/src/lifecycle/ledger-read.ts +195 -0
- package/src/lifecycle/observe.test.ts +27 -1
- package/src/lifecycle/observe.ts +43 -1
- package/src/lifecycle/release-workstation.ts +24 -0
- package/src/lifecycle/run-ledger.ts +5 -2
- package/src/lint/cross-root.test.ts +122 -0
- package/src/lint/discover.ts +3 -1
- package/src/lint/post-synth.ts +212 -2
- package/src/lint/rule.ts +6 -0
- package/src/lint/rules/op/index.ts +2 -0
- package/src/lint/rules/op/ops019-workspace-op-target.ts +89 -0
- package/src/live-endpoint.ts +1 -1
- package/src/observation.test.ts +25 -0
- package/src/observation.ts +69 -5
- package/src/op/activities/activity-contracts.ts +5 -2
- package/src/op/activities/index.ts +2 -2
- package/src/op/activities/review-agent.test.ts +221 -4
- package/src/op/activities/review-agent.ts +265 -22
- package/src/op/activities/work-evidence.ts +9 -1
- package/src/op/builders.ts +9 -5
- package/src/op/composites/apply-op.test.ts +108 -0
- package/src/op/composites/apply-op.ts +37 -2
- package/src/op/gate-approval.test.ts +6 -1
- package/src/op/gate-approval.ts +12 -6
- package/src/op/gate-quorum-at-base.test.ts +211 -0
- package/src/op/gate-quorum.ts +156 -8
- package/src/op/gate-review.ts +14 -0
- package/src/op/gate.ts +67 -8
- package/src/op/index.ts +3 -2
- package/src/op/local-executor.ts +69 -9
- package/src/op/op-waves-depends-on.test.ts +81 -0
- package/src/op/op-waves-hook-targets.test.ts +4 -2
- package/src/op/op-waves-quorum-product.test.ts +158 -0
- package/src/op/op-waves-run.ts +288 -14
- package/src/op/op-waves.ts +143 -14
- package/src/op/runtime.ts +8 -0
- package/src/op/schedule-overdue.ts +33 -0
- package/src/op/stage-hooks.ts +13 -5
- package/src/op/workspace-run-env.ts +29 -0
- package/src/pr-forge-bundle.test.ts +2 -2
- package/src/pr-forge.test.ts +47 -0
- package/src/pr-forge.ts +68 -0
- package/src/pr-post-open.e2e.test.ts +36 -0
- package/src/pr-post.test.ts +102 -3
- package/src/pr-post.ts +89 -1
- package/src/read-filter.test.ts +54 -0
- package/src/read-filter.ts +193 -0
- package/src/run-event.ts +1 -1
- package/src/stage-hooks-bundle.test.ts +1 -0
- package/src/terraform/carve.ts +52 -15
- package/src/terraform/cuts.test.ts +173 -0
- package/src/terraform/cuts.ts +188 -0
- package/src/terraform/folds.ts +44 -0
- package/src/terraform/graph.ts +9 -0
- package/src/terraform/radius.test.ts +90 -0
- package/src/terraform/reach.test.ts +146 -0
- package/src/terraform/reach.ts +247 -0
- package/src/terraform/score.ts +27 -29
- package/src/terraform/state.ts +3 -1
- package/src/terraform/types.ts +8 -0
- package/src/wave-blocked.ts +28 -3
- package/src/wave-loop-golden.test.ts +4 -3
- package/src/workspace/behold-kinds.test.ts +1 -1
- package/src/workspace/capabilities-contract.test.ts +88 -0
- package/src/workspace/capabilities-contract.ts +132 -0
- package/src/workspace/capabilities.schema.json +229 -0
- package/src/workspace/check-contract.test.ts +7 -6
- package/src/workspace/check.schema.json +11 -2
- package/src/workspace/checks/ci-branch.test.ts +128 -0
- package/src/workspace/checks/ci-branch.ts +141 -0
- package/src/workspace/checks/links.ts +12 -1
- package/src/workspace/checks/org.ts +169 -0
- package/src/workspace/checks.ts +64 -7
- package/src/workspace/ci-branches.ts +31 -0
- package/src/workspace/ci-green-branches.test.ts +153 -0
- package/src/workspace/ci-green-cli.ts +7 -7
- package/src/workspace/ci-green-workflow.test.ts +4 -3
- package/src/workspace/ci-green-workflow.ts +13 -9
- package/src/workspace/ci-green.ts +49 -12
- package/src/workspace/ci-run.test.ts +72 -1
- package/src/workspace/ci-run.ts +68 -8
- package/src/workspace/ci-serve.test.ts +95 -0
- package/src/workspace/ci-serve.ts +106 -65
- package/src/workspace/component-environments.test.ts +25 -2
- package/src/workspace/compose-graph.ts +19 -3
- package/src/workspace/composites.schema.json +22 -0
- package/src/workspace/composites.test.ts +39 -8
- package/src/workspace/composites.ts +6 -2
- package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
- package/src/workspace/conformance/conformance.e2e.test.ts +14 -1
- package/src/workspace/conformance/index.ts +31 -2
- package/src/workspace/cross-root-lint.test.ts +90 -0
- package/src/workspace/cross-root-lint.ts +126 -0
- package/src/workspace/dbt-kind.test.ts +3 -2
- package/src/workspace/dbt-models-reader.ts +362 -0
- package/src/workspace/dbt-models.test.ts +248 -0
- package/src/workspace/dbt-project-common.ts +113 -0
- package/src/workspace/dbt-project-reader.ts +29 -112
- package/src/workspace/decision-rank.ts +40 -0
- package/src/workspace/declaration.schema.json +133 -24
- package/src/workspace/declaration.ts +84 -15
- package/src/workspace/environments.ts +40 -4
- package/src/workspace/flyway-dir.ts +113 -0
- package/src/workspace/flyway-layout.ts +337 -0
- package/src/workspace/graph-cache.ts +27 -3
- package/src/workspace/graph-cli.ts +119 -32
- package/src/workspace/graph-contract.test.ts +4 -2
- package/src/workspace/graph.schema.json +182 -0
- package/src/workspace/identity.test.ts +14 -2
- package/src/workspace/intent.ts +6 -14
- package/src/workspace/kind-link-readers.ts +68 -3
- package/src/workspace/kind-readers.e2e.test.ts +28 -0
- package/src/workspace/kind-readers.test.ts +1 -1
- package/src/workspace/kind-readers.ts +7 -1
- package/src/workspace/kinds.test.ts +12 -7
- package/src/workspace/kinds.ts +132 -7
- package/src/workspace/ledger.schema.json +158 -0
- package/src/workspace/lexicon-outputs.ts +132 -13
- package/src/workspace/lineage-check.ts +30 -7
- package/src/workspace/links.ts +24 -1
- package/src/workspace/ls-contract.test.ts +1 -1
- package/src/workspace/ls.schema.json +7 -0
- package/src/workspace/ls.ts +10 -1
- package/src/workspace/member-commands.ts +82 -3
- package/src/workspace/member-file-schema.test.ts +124 -0
- package/src/workspace/migrate-links.test.ts +99 -0
- package/src/workspace/migrate-links.ts +108 -0
- package/src/workspace/migration-dirs.test.ts +272 -0
- package/src/workspace/migration-dirs.ts +267 -0
- package/src/workspace/nested-graph.ts +32 -1
- package/src/workspace/org-scope.test.ts +238 -0
- package/src/workspace/reason-codes.test.ts +13 -1
- package/src/workspace/reason-codes.ts +23 -0
- package/src/workspace/records-cli.ts +58 -5
- package/src/workspace/records.schema.json +5 -0
- package/src/workspace/release-candidates.ts +7 -2
- package/src/workspace/release-train.ts +157 -0
- package/src/workspace/release-workflow.ts +4 -3
- package/src/workspace/repo-ref.ts +113 -0
- package/src/workspace/run-event.schema.json +2 -2
- package/src/workspace/runs-cli.ts +48 -4
- package/src/workspace/runs.schema.json +7 -0
- package/src/workspace/search-cli.e2e.test.ts +305 -0
- package/src/workspace/search-cli.ts +591 -0
- package/src/workspace/search-contract.ts +95 -0
- package/src/workspace/search.schema.json +822 -0
- package/src/workspace/status-contract.test.ts +46 -1
- package/src/workspace/status-decisions.test.ts +100 -0
- package/src/workspace/status-decisions.ts +151 -0
- package/src/workspace/status-gates.ts +9 -0
- package/src/workspace/status.schema.json +6 -0
- package/src/workspace/status.ts +17 -3
- package/src/workspace/where-filters.test.ts +39 -0
- package/src/workspace/work-cli.ts +5 -3
- package/src/workspace/work-evidence-ops.test.ts +176 -0
- package/src/workspace/work-evidence-ops.ts +189 -0
- package/src/workspace/work-evidence.schema.json +49 -2
- package/src/workspace/work-evidence.ts +22 -3
- package/src/workspace/workspace-gates.ts +200 -0
- package/src/workspace/workspace-kinds.schema.json +58 -3
- package/src/workspace/workspace-ledger.ts +130 -0
- package/src/workspace/workspace-run.test.ts +322 -0
- package/src/workspace/workspace-run.ts +461 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isAbsolute, relative, resolve } from "node:path";
|
|
2
2
|
import { discoverOps } from "../../op/discover";
|
|
3
3
|
import { discover } from "../../discovery/index";
|
|
4
|
-
import { partitionByLexicon, computeStackGraph, build
|
|
5
|
-
import {
|
|
4
|
+
import { partitionByLexicon, computeStackGraph, build } from "../../build";
|
|
5
|
+
import { applyLexiconOutputs, buildGraphIr, buildLiveGraphIr, collectUnobserved, overlayGraphs, sourceOverlayGraphs, GRAPH_IR_VERSION, type GraphIR, type IRPipeline, type LexiconWorkspaceOutputs, type LiveObservation } from "../../graph-ir";
|
|
6
6
|
import { behaviourOverlay } from "../../behaviour-overlay";
|
|
7
7
|
import type { SerializerResult } from "../../serializer";
|
|
8
8
|
import { applyBehaviourOverlay, behaviourRequestFromIr } from "../../behaviour-graph";
|
|
9
9
|
import { buildDeclaredPerStack } from "../../graph-declared";
|
|
10
10
|
import { mergeProjectOps } from "../../graph-ops";
|
|
11
11
|
import { reconstructEdges, mergeCatalogs, containmentGroups, type ReferenceCatalog, type ContainmentPair } from "../../graph-refs";
|
|
12
|
-
import { observeResources } from "../../lifecycle/observe";
|
|
12
|
+
import { carryAnnotations, observeResources } from "../../lifecycle/observe";
|
|
13
13
|
import { withLiveReadSession } from "../../live-read-session";
|
|
14
14
|
import { replaySnapshots, hasSnapshot } from "../../lifecycle/replay";
|
|
15
15
|
import { loadChantConfig, environmentNames, matchesDeclaredEnvironment, loadChantConfigUpward, type ChantConfig } from "../../config";
|
|
@@ -22,6 +22,12 @@ import { getLayoutEngine, toLayoutInput, type NodeSize } from "../../graph-layou
|
|
|
22
22
|
import { lintCommand, type LintResult } from "../commands/lint";
|
|
23
23
|
import { reportUninstalledDependencies } from "../dependencies";
|
|
24
24
|
import { loadPlugins, resolveProjectLexicons, collectBuildRootContributors } from "../plugins";
|
|
25
|
+
// One copy for graph and search (#4365): the build-root join and the lexicon edges.
|
|
26
|
+
import {
|
|
27
|
+
declaredBuildRootContributors as graphBuildRootContributors,
|
|
28
|
+
mergeDeclaredBuildRoots as mergeGraphBuildRoots,
|
|
29
|
+
withLexiconEdges,
|
|
30
|
+
} from "./declared-graph";
|
|
25
31
|
import { isNoLexiconDetected } from "../../detectLexicon";
|
|
26
32
|
import { readFileSync } from "node:fs";
|
|
27
33
|
import { formatError, formatWarning, formatBold } from "../format";
|
|
@@ -78,69 +84,6 @@ async function graphBuildParams(
|
|
|
78
84
|
return resolution.provenance;
|
|
79
85
|
}
|
|
80
86
|
|
|
81
|
-
/**
|
|
82
|
-
* The build-root contributors this invocation's project configures (#1626) —
|
|
83
|
-
* the same closures `chant build` and the lifecycle handlers hand to
|
|
84
|
-
* `BuildOptions.buildRoots`, bound here for the graph command's
|
|
85
|
-
* discover-based paths, which never run `build()` and so never ran the hook:
|
|
86
|
-
* a `k8s.kustomize.roots` estate graphed only its typed source while its
|
|
87
|
-
* built (and deployed) output carried the rendered manifests too.
|
|
88
|
-
*
|
|
89
|
-
* `graph` is not `requiresPlugins` (Op/source-graph modes must work without a
|
|
90
|
-
* lexicon), so plugins are loaded here when `ctx.plugins` is empty, mirroring
|
|
91
|
-
* `runGraphLive`. Rooted at the config's own directory, like
|
|
92
|
-
* `cli/commands/build.ts` — a relative kustomize root resolves against where
|
|
93
|
-
* it was declared, not against a sourceDir-scoped graph path. A project that
|
|
94
|
-
* fails to load plugins degrades to no contributors with a warning rather
|
|
95
|
-
* than failing modes that never needed plugins at all.
|
|
96
|
-
*/
|
|
97
|
-
async function graphBuildRootContributors(
|
|
98
|
-
ctx: CommandContext,
|
|
99
|
-
projectPath: string,
|
|
100
|
-
): Promise<Array<import("../../lexicon").BuildRootContributor>> {
|
|
101
|
-
const { config, configPath } = await loadChantConfigUpward(projectPath).catch(
|
|
102
|
-
() => ({ config: {} as ChantConfig, configPath: undefined }),
|
|
103
|
-
);
|
|
104
|
-
let plugins = ctx.plugins;
|
|
105
|
-
if (plugins.length === 0) {
|
|
106
|
-
try {
|
|
107
|
-
plugins = await loadPlugins(await resolveProjectLexicons(projectPath));
|
|
108
|
-
} catch (err) {
|
|
109
|
-
console.error(formatWarning({
|
|
110
|
-
message: `could not load the project's lexicons — build-root entities (kustomize roots) will be missing from the graph (${err instanceof Error ? err.message : String(err)})`,
|
|
111
|
-
}));
|
|
112
|
-
return [];
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return collectBuildRootContributors(
|
|
116
|
-
plugins,
|
|
117
|
-
config as unknown as Record<string, unknown>,
|
|
118
|
-
configPath ? dirname(configPath) : projectPath,
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Merge build-root contributions into a discovered entity set — the exact
|
|
124
|
-
* merge `build()` performs (one implementation: `mergeBuildRootEntities`,
|
|
125
|
-
* ../../build.ts), surfaced in the graph command's error style. Returns false
|
|
126
|
-
* when a contributor failed or a name collided; the caller stops, matching
|
|
127
|
-
* how the discover-based paths treat discovery errors — a graph missing the
|
|
128
|
-
* entities the build would refuse over must not be emitted as if complete.
|
|
129
|
-
*/
|
|
130
|
-
async function mergeGraphBuildRoots(
|
|
131
|
-
entities: Map<string, import("../../declarable").Declarable>,
|
|
132
|
-
contributors: Array<import("../../lexicon").BuildRootContributor>,
|
|
133
|
-
): Promise<boolean> {
|
|
134
|
-
if (contributors.length === 0) return true;
|
|
135
|
-
const merged = await mergeBuildRootEntities(entities, contributors);
|
|
136
|
-
for (const w of merged.warnings) console.error(formatWarning({ message: w }));
|
|
137
|
-
if (merged.errors.length > 0) {
|
|
138
|
-
for (const message of merged.errors) console.error(formatError({ message }));
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
return true;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
87
|
/** #1675 — join git-root ops into a discovered entity map; op-discovery
|
|
145
88
|
* errors are warnings here (the lint gate never saw those files). */
|
|
146
89
|
async function mergeGraphOps(
|
|
@@ -187,6 +130,15 @@ async function runGraphCommand(ctx: CommandContext): Promise<number> {
|
|
|
187
130
|
}));
|
|
188
131
|
return 1;
|
|
189
132
|
}
|
|
133
|
+
// The capability view (#4378) is built from the declared entity graph's IR,
|
|
134
|
+
// the read `chant workspace graph --capability-view` asks each member for.
|
|
135
|
+
if (ctx.args.capabilityView && (ctx.args.format !== "ir" || ctx.args.components || ctx.args.live || ctx.args.at)) {
|
|
136
|
+
console.error(formatError({
|
|
137
|
+
message: "--capability-view adds the capability view to the declared graph's IR, so it needs --format ir and takes no --components, --live or --at",
|
|
138
|
+
hint: "chant graph --format ir --detail 3 --capability-view",
|
|
139
|
+
}));
|
|
140
|
+
return 1;
|
|
141
|
+
}
|
|
190
142
|
// `--at` graphs a recorded observation instead of reading the estate (#1279).
|
|
191
143
|
// Two different observations with no rule for which wins, so not both.
|
|
192
144
|
if (ctx.args.at && ctx.args.live) {
|
|
@@ -325,6 +277,8 @@ async function runGraphLive(
|
|
|
325
277
|
|
|
326
278
|
let ir: GraphIR;
|
|
327
279
|
let observations: LiveObservation[];
|
|
280
|
+
// Facts about absent entities (#4372), carried onto the overlay's nodes.
|
|
281
|
+
let annotations: Record<string, Record<string, unknown>> | undefined;
|
|
328
282
|
// A replay is a graph of what was recorded, so it must not reach the provider
|
|
329
283
|
// at all — not for observation and not for enrichment. Anything that quietly
|
|
330
284
|
// called out would make `--at` a live read with an older label on it.
|
|
@@ -353,6 +307,7 @@ async function runGraphLive(
|
|
|
353
307
|
...(args.namespace ? { namespace: args.namespace } : {}),
|
|
354
308
|
});
|
|
355
309
|
observations = observeResult.observations;
|
|
310
|
+
annotations = observeResult.annotations;
|
|
356
311
|
const { errors, warnings, notes = [] } = observeResult;
|
|
357
312
|
for (const e of errors) console.error(formatWarning({ message: e }));
|
|
358
313
|
// Unobserved entities (#1089) arrive as warnings — a node missing from the
|
|
@@ -465,6 +420,10 @@ async function runGraphLive(
|
|
|
465
420
|
: sourceOverlayGraphs(declaredIr, ir, overlayOpts);
|
|
466
421
|
}
|
|
467
422
|
}
|
|
423
|
+
// What a read learned about an entity it found absent (#4372), on the
|
|
424
|
+
// declared node beside the overlay's `_status`. A planned create keeps its
|
|
425
|
+
// pending paint and carries the plan's attributes.
|
|
426
|
+
ir = { ...ir, nodes: carryAnnotations(ir.nodes, annotations) };
|
|
468
427
|
}
|
|
469
428
|
|
|
470
429
|
// Behaviour overlay (#2377, epic #2355): carry a prediction on the graph.
|
|
@@ -574,6 +533,82 @@ function refuseLintGate(lint: LintResult, projectPath: string): void {
|
|
|
574
533
|
);
|
|
575
534
|
}
|
|
576
535
|
|
|
536
|
+
/** One lint finding as `meta.lint` carries it (INTENTIUS/behold#919). */
|
|
537
|
+
export interface GraphLintFinding {
|
|
538
|
+
ruleId: string;
|
|
539
|
+
severity: string;
|
|
540
|
+
message: string;
|
|
541
|
+
/** Relative to the project when inside it, else as lint reported it. */
|
|
542
|
+
file: string;
|
|
543
|
+
line: number;
|
|
544
|
+
column: number;
|
|
545
|
+
/** The entity a post-synth check named, which is the graph node's id. Absent for a source-file rule. */
|
|
546
|
+
entity?: string;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/**
|
|
550
|
+
* What a `graph.lint: "report"` project's entity graph carries on `meta.lint`:
|
|
551
|
+
* the counts `chant lint` would print and every finding behind them, warnings
|
|
552
|
+
* included. Present on every graph such a project emits, findings or none, so
|
|
553
|
+
* a reader can tell "linted, clean" from "not looked" (no key).
|
|
554
|
+
*/
|
|
555
|
+
export interface GraphLintReport {
|
|
556
|
+
errors: number;
|
|
557
|
+
warnings: number;
|
|
558
|
+
findings: GraphLintFinding[];
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/** The project's `graph.lint`: `"report"` only when it says so (#919). */
|
|
562
|
+
async function graphLintMode(projectPath: string): Promise<"gate" | "report"> {
|
|
563
|
+
const { config } = await loadChantConfigUpward(projectPath).catch(() => ({ config: {} as ChantConfig }));
|
|
564
|
+
return config.graph?.lint === "report" ? "report" : "gate";
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
export function graphLintReport(lint: LintResult, projectPath: string): GraphLintReport {
|
|
568
|
+
const rel = (file: string) => {
|
|
569
|
+
if (!isAbsolute(file)) return file;
|
|
570
|
+
const r = relative(projectPath, file);
|
|
571
|
+
return r.startsWith("..") ? file : r;
|
|
572
|
+
};
|
|
573
|
+
const findings = (lint.diagnostics ?? []).map((d) => ({
|
|
574
|
+
ruleId: d.ruleId,
|
|
575
|
+
severity: d.severity,
|
|
576
|
+
message: d.message,
|
|
577
|
+
file: rel(d.file),
|
|
578
|
+
line: d.line,
|
|
579
|
+
column: d.column,
|
|
580
|
+
...(d.entity ? { entity: d.entity } : {}),
|
|
581
|
+
}));
|
|
582
|
+
return {
|
|
583
|
+
errors: findings.filter((f) => f.severity === "error").length,
|
|
584
|
+
warnings: findings.filter((f) => f.severity === "warning").length,
|
|
585
|
+
findings,
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/**
|
|
590
|
+
* The lint gate for the entity graph. Returns false when the graph must not be
|
|
591
|
+
* emitted, having printed why. A `graph.lint: "report"` project passes with
|
|
592
|
+
* lint errors and says so on stderr, unless an error is an uninstalled
|
|
593
|
+
* dependency: then there is no source to read, and it refuses as the gate does.
|
|
594
|
+
*/
|
|
595
|
+
function passLintGate(lint: LintResult, projectPath: string, mode: "gate" | "report"): boolean {
|
|
596
|
+
if (lint.success) return true;
|
|
597
|
+
if (mode === "gate") {
|
|
598
|
+
refuseLintGate(lint, projectPath);
|
|
599
|
+
return false;
|
|
600
|
+
}
|
|
601
|
+
const errors = (lint.diagnostics ?? []).filter((d) => d.severity === "error").map((d) => d.message);
|
|
602
|
+
if (reportUninstalledDependencies(errors, projectPath)) return false;
|
|
603
|
+
const n = errors.length;
|
|
604
|
+
console.error(
|
|
605
|
+
formatWarning({
|
|
606
|
+
message: `Emitting the graph with ${n} lint error${n === 1 ? "" : "s"}: graph.lint is "report", so every finding is on the IR's meta.lint. Run \`chant lint\` to see them.`,
|
|
607
|
+
}),
|
|
608
|
+
);
|
|
609
|
+
return true;
|
|
610
|
+
}
|
|
611
|
+
|
|
577
612
|
/**
|
|
578
613
|
* `chant graph --components --format ir|mermaid|dot|layout` — the component DAG
|
|
579
614
|
* projected into the renderable IR (nodes = components, `groups.byWave` = the
|
|
@@ -718,7 +753,9 @@ async function buildPipelineProjection(
|
|
|
718
753
|
* `--node-sizes` so spacing fits real node footprints, and defaults to the dagre
|
|
719
754
|
* engine (no native dependency); `--layout-engine graphviz` opts into `dot`.
|
|
720
755
|
* Lint-gated: the IR represents valid infra, so we refuse to emit for source that
|
|
721
|
-
* does not pass lint
|
|
756
|
+
* does not pass lint, unless the project's config sets `graph.lint: "report"`
|
|
757
|
+
* (#919): then the graph is emitted and the findings ride on `meta.lint`.
|
|
758
|
+
* Non-zero on discovery errors or a layout-engine failure.
|
|
722
759
|
*/
|
|
723
760
|
/**
|
|
724
761
|
* Add what the lexicons' `graphMeta` hooks report to `ir.meta` (#2559). A
|
|
@@ -741,26 +778,6 @@ function withGraphMeta(ir: GraphIR, plugins: LexiconPlugin[], entities: Map<stri
|
|
|
741
778
|
return Object.keys(added).length === 0 ? ir : { ...ir, meta: { ...(ir.meta ?? {}), ...added } };
|
|
742
779
|
}
|
|
743
780
|
|
|
744
|
-
/**
|
|
745
|
-
* Add the edges the lexicons' `graphEdges` hooks resolve (#3910): CI
|
|
746
|
-
* dependencies written as strings (`needs`, `uses:`, `trigger:`, `include:`,
|
|
747
|
-
* `extends`), which the AttrRef walk in `buildGraphIr` cannot see. A hook that
|
|
748
|
-
* throws costs its own edges and a warning, not the graph.
|
|
749
|
-
*/
|
|
750
|
-
function withLexiconEdges(ir: GraphIR, plugins: LexiconPlugin[], entities: Map<string, import("../../declarable").Declarable>): GraphIR {
|
|
751
|
-
const reports: LexiconGraphEdges[] = [];
|
|
752
|
-
for (const p of plugins) {
|
|
753
|
-
if (!p.graphEdges) continue;
|
|
754
|
-
try {
|
|
755
|
-
const report = p.graphEdges(entities);
|
|
756
|
-
if (report) reports.push(report);
|
|
757
|
-
} catch (err) {
|
|
758
|
-
console.error(formatWarning({ message: `the ${p.name} lexicon's graphEdges failed (${err instanceof Error ? err.message : String(err)}); its edges are left out` }));
|
|
759
|
-
}
|
|
760
|
-
}
|
|
761
|
-
return reports.length === 0 ? ir : applyLexiconGraphEdges(ir, reports);
|
|
762
|
-
}
|
|
763
|
-
|
|
764
781
|
/**
|
|
765
782
|
* Add the outputs the lexicons' `workspaceOutputs` hooks report (#3931) to
|
|
766
783
|
* the IR's `exports`: a sql table and each of its columns, which `chant
|
|
@@ -876,17 +893,16 @@ async function runGraphView(
|
|
|
876
893
|
const buildParams = await graphBuildParams(ctx, projectPath);
|
|
877
894
|
if (!buildParams) return 1;
|
|
878
895
|
|
|
879
|
-
// Gate: only emit for lint-clean source
|
|
896
|
+
// Gate: only emit for lint-clean source, unless the project reads source it
|
|
897
|
+
// did not author and asks for the findings instead (`graph.lint`, #919).
|
|
880
898
|
const lint = await lintCommand({
|
|
881
899
|
path: ctx.args.path,
|
|
882
900
|
format: "stylish",
|
|
883
901
|
sandbox: ctx.args.sandbox,
|
|
884
902
|
buildParams,
|
|
885
903
|
});
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
return 1;
|
|
889
|
-
}
|
|
904
|
+
const lintMode = await graphLintMode(projectPath);
|
|
905
|
+
if (!passLintGate(lint, projectPath, lintMode)) return 1;
|
|
890
906
|
|
|
891
907
|
const result = await discover(projectPath, { buildParams });
|
|
892
908
|
if (result.errors.length > 0) {
|
|
@@ -913,10 +929,10 @@ async function runGraphView(
|
|
|
913
929
|
// The declared half of the epic's delta (#2355): this path predicts the
|
|
914
930
|
// file, the live path predicts the account. Same helper, so the two shapes
|
|
915
931
|
// reach the engine by one route and stay comparable.
|
|
932
|
+
const plugins = ctx.plugins.length > 0
|
|
933
|
+
? ctx.plugins
|
|
934
|
+
: await loadPlugins(await projectLexiconsOrNone(projectPath));
|
|
916
935
|
{
|
|
917
|
-
const plugins = ctx.plugins.length > 0
|
|
918
|
-
? ctx.plugins
|
|
919
|
-
: await loadPlugins(await projectLexiconsOrNone(projectPath));
|
|
920
936
|
ir = withLexiconEdges(ir, plugins as LexiconPlugin[], result.entities);
|
|
921
937
|
ir = withLexiconOutputs(ir, plugins as LexiconPlugin[], result.entities);
|
|
922
938
|
const predicted = await predictOntoIr(ir, plugins as LexiconPlugin[], ctx.args, {
|
|
@@ -951,6 +967,17 @@ async function runGraphView(
|
|
|
951
967
|
if (notice) console.error(formatWarning({ message: notice }));
|
|
952
968
|
}
|
|
953
969
|
}
|
|
970
|
+
// Last, so no lens or detail pass can drop it: the findings are about the
|
|
971
|
+
// whole source read, not about the nodes this view kept.
|
|
972
|
+
if (lintMode === "report") ir = { ...ir, meta: { ...ir.meta, lint: graphLintReport(lint, projectPath) } };
|
|
973
|
+
// The view capability rules read (#4378), mapped by this project's own
|
|
974
|
+
// lexicons, so a workspace's rules read each member as its chant maps it.
|
|
975
|
+
if (ctx.args.capabilityView) {
|
|
976
|
+
const { buildView, serializeView } = await import("../../capabilities/view");
|
|
977
|
+
const { resolvePacks } = await import("../../capabilities/catalog");
|
|
978
|
+
const packs = (plugins as LexiconPlugin[]).map((p) => p.capabilityPack).filter((p): p is NonNullable<typeof p> => !!p);
|
|
979
|
+
ir = { ...ir, capabilityView: serializeView(buildView(ir, resolvePacks(packs))) };
|
|
980
|
+
}
|
|
954
981
|
return emitIr(ir, ctx, format);
|
|
955
982
|
}
|
|
956
983
|
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant ledger <table> [dir] [--member <name>] [--where <field><op><value>]...
|
|
3
|
+
* [--since <time>] [--at <rev>] [--json]` (#4363): one ledger's rows from the
|
|
4
|
+
* local `chant/lifecycle` branch, filtered with typed filters. The read and
|
|
5
|
+
* its contract live in `../../lifecycle/ledger-read.ts`; the ledgers are read
|
|
6
|
+
* as `chant query` reads them (`./query.ts` {@link queryLedgers}).
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync } from "node:fs";
|
|
9
|
+
import { resolve } from "node:path";
|
|
10
|
+
import { formatError, formatWarning } from "../format";
|
|
11
|
+
import type { CommandContext } from "../registry";
|
|
12
|
+
import { queryLedgers } from "./query";
|
|
13
|
+
|
|
14
|
+
const USAGE = "chant ledger <resources|snapshots|runs|gates|deploys|releases|cuts> [dir] [--member <name>] [--where <field><op><value>]... [--since <time>] [--at <rev>] [--json]";
|
|
15
|
+
|
|
16
|
+
const cell = (v: unknown): string => (v === null || v === undefined ? "" : typeof v === "object" ? JSON.stringify(v) : String(v));
|
|
17
|
+
|
|
18
|
+
export async function runLedgerCommand(ctx: CommandContext): Promise<number> {
|
|
19
|
+
const { args } = ctx;
|
|
20
|
+
const table = args.positionals?.[0];
|
|
21
|
+
if (table === undefined || table.trim() === "") {
|
|
22
|
+
console.error(formatError({ message: "chant ledger needs a table", hint: USAGE }));
|
|
23
|
+
return 1;
|
|
24
|
+
}
|
|
25
|
+
const cwd = resolve(args.positionals?.[1] ?? ".");
|
|
26
|
+
if (!existsSync(cwd)) {
|
|
27
|
+
console.error(formatError({ message: `${cwd} does not exist`, hint: USAGE }));
|
|
28
|
+
return 1;
|
|
29
|
+
}
|
|
30
|
+
const { readLedgerTable, ledgerReadFailure, LedgerRevisionError } = await import("../../lifecycle/ledger-read");
|
|
31
|
+
const { QueryError } = await import("../../lifecycle/query");
|
|
32
|
+
let doc;
|
|
33
|
+
try {
|
|
34
|
+
doc = await readLedgerTable(table, () => queryLedgers(cwd, args.members, args.at), { where: args.where, since: args.since, at: args.at ?? null });
|
|
35
|
+
} catch (err) {
|
|
36
|
+
if (err instanceof LedgerRevisionError) doc = ledgerReadFailure("revision-unknown", err.message);
|
|
37
|
+
else if (err instanceof QueryError) doc = ledgerReadFailure("ledger-unreadable", err.message);
|
|
38
|
+
else throw err;
|
|
39
|
+
}
|
|
40
|
+
if (args.json) {
|
|
41
|
+
console.log(JSON.stringify(doc, null, 2));
|
|
42
|
+
return "error" in doc ? 1 : 0;
|
|
43
|
+
}
|
|
44
|
+
if ("error" in doc) {
|
|
45
|
+
console.error(formatError({ message: `${doc.error.code}: ${doc.error.message}`, hint: USAGE }));
|
|
46
|
+
return 1;
|
|
47
|
+
}
|
|
48
|
+
const widths = doc.columns.map((c) => Math.max(c.length, ...doc.rows.map((r) => cell(r[c]).length)));
|
|
49
|
+
const line = (vals: string[]): string => vals.map((v, i) => v.padEnd(widths[i])).join(" ").trimEnd();
|
|
50
|
+
console.log([line(doc.columns), line(widths.map((w) => "-".repeat(w))), ...doc.rows.map((r) => line(doc.columns.map((c) => cell(r[c]))))].join("\n"));
|
|
51
|
+
console.log(`(${doc.rows.length} of ${doc.total} ${doc.total === 1 ? "row" : "rows"})`);
|
|
52
|
+
if (doc.malformed > 0) console.error(formatWarning({ message: `left out ${doc.malformed} in ${doc.table} that could not be read` }));
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { migrateCommand, printMigrateResult } from "../commands/migrate";
|
|
1
|
+
import { lexiconOfSide, migrateCommand, printMigrateResult } from "../commands/migrate";
|
|
2
2
|
import { formatError } from "../format";
|
|
3
3
|
import { loadPlugins } from "../plugins";
|
|
4
4
|
import type { CommandContext } from "../registry";
|
|
@@ -16,30 +16,39 @@ export async function runMigrate(ctx: CommandContext): Promise<number> {
|
|
|
16
16
|
return 1;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
// A side is a lexicon, or a lexicon and a dialect: `sql/clickhouse` (#4399).
|
|
20
|
+
const toName = args.migrateTo ?? "gitlab";
|
|
21
|
+
const fromName = args.migrateFrom ?? "github";
|
|
22
|
+
|
|
23
|
+
// The sql pair writes declarations, so ts is its default; yaml is the gitlab pair's.
|
|
24
|
+
const emit = (args.emit as "yaml" | "ts" | "sql" | undefined) ?? (lexiconOfSide(toName) === "sql" ? "ts" : "yaml");
|
|
25
|
+
if (emit !== "yaml" && emit !== "ts" && emit !== "sql") {
|
|
26
|
+
console.error(formatError({ message: `Invalid --emit value: ${emit}. Expected 'yaml', 'ts' or 'sql'.` }));
|
|
27
|
+
return 1;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (emit === "sql" && lexiconOfSide(toName) !== "sql") {
|
|
31
|
+
console.error(formatError({ message: `--emit sql writes DDL, and ${toName} is not a sql target`, hint: "use --emit yaml or --emit ts" }));
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
|
|
19
35
|
// migrate does not require a chant project context. Load the target
|
|
20
36
|
// lexicon directly by name.
|
|
21
|
-
const toName = args.migrateTo ?? "gitlab";
|
|
22
37
|
let plugins;
|
|
23
38
|
try {
|
|
24
|
-
plugins = await loadPlugins([toName]);
|
|
39
|
+
plugins = await loadPlugins([lexiconOfSide(toName)]);
|
|
25
40
|
} catch (err) {
|
|
26
41
|
console.error(formatError({
|
|
27
42
|
message: `Cannot load target lexicon "${toName}": ${err instanceof Error ? err.message : String(err)}`,
|
|
28
|
-
hint: `Install @intentius/chant-lexicon-${toName} or pass --to <other-lexicon>`,
|
|
43
|
+
hint: `Install @intentius/chant-lexicon-${lexiconOfSide(toName)} or pass --to <other-lexicon>`,
|
|
29
44
|
}));
|
|
30
45
|
return 1;
|
|
31
46
|
}
|
|
32
47
|
|
|
33
|
-
const emit = (args.emit as "yaml" | "ts" | undefined) ?? "yaml";
|
|
34
|
-
if (emit !== "yaml" && emit !== "ts") {
|
|
35
|
-
console.error(formatError({ message: `Invalid --emit value: ${emit}. Expected 'yaml' or 'ts'.` }));
|
|
36
|
-
return 1;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
48
|
const result = await migrateCommand({
|
|
40
49
|
sourceFile: args.path,
|
|
41
|
-
from:
|
|
42
|
-
to:
|
|
50
|
+
from: fromName,
|
|
51
|
+
to: toName,
|
|
43
52
|
emit,
|
|
44
53
|
strict: args.strict ?? false,
|
|
45
54
|
validate: args.validate ?? false,
|
package/src/cli/handlers/misc.ts
CHANGED
|
@@ -384,10 +384,19 @@ export async function runImport(ctx: CommandContext): Promise<number> {
|
|
|
384
384
|
force: ctx.args.force,
|
|
385
385
|
lexicon: ctx.args.lexicon,
|
|
386
386
|
parserOptions: ctx.args.parserOption,
|
|
387
|
+
validate: ctx.args.validate,
|
|
387
388
|
});
|
|
388
389
|
|
|
389
390
|
printImportResult(result);
|
|
390
|
-
|
|
391
|
+
if (!result.success) return 1;
|
|
392
|
+
// The review report and `--strict` (#4398): the parser's diagnostics, as `chant migrate` reports its own.
|
|
393
|
+
if (ctx.args.reportFile) {
|
|
394
|
+
const { writeImportReport } = await import("../commands/import-report");
|
|
395
|
+
const failed = writeImportReport(ctx.args.reportFile, resolve(ctx.args.path), result.diagnostics ?? [], CHANT_VERSION);
|
|
396
|
+
if (failed) console.error(formatWarning({ message: failed }));
|
|
397
|
+
}
|
|
398
|
+
const { importExitCode } = await import("../commands/import-report");
|
|
399
|
+
return importExitCode(result.diagnostics, ctx.args.strict === true);
|
|
391
400
|
}
|
|
392
401
|
|
|
393
402
|
export async function runUpdate(ctx: CommandContext): Promise<number> {
|
|
@@ -61,8 +61,6 @@ import {
|
|
|
61
61
|
} from "../../components/pr-environment";
|
|
62
62
|
import {
|
|
63
63
|
commandTeardownAdapter,
|
|
64
|
-
forgePrEnvPublisher,
|
|
65
|
-
lifecyclePrEnvPorts,
|
|
66
64
|
prEnvDown as prEnvDownRun,
|
|
67
65
|
prEnvOp,
|
|
68
66
|
prEnvSweep as prEnvSweepRun,
|
|
@@ -71,6 +69,7 @@ import {
|
|
|
71
69
|
type PrEnvPorts,
|
|
72
70
|
type PrEnvTarget,
|
|
73
71
|
} from "../../components/pr-env-run";
|
|
72
|
+
import { forgePrEnvPublisher, lifecyclePrEnvPorts } from "../../components/pr-env-ports";
|
|
74
73
|
import { applyPrSet, type PrPlanSet } from "../../components/pr-run";
|
|
75
74
|
import { prOp } from "../../pr-loop";
|
|
76
75
|
import { FORGE_KINDS, forgeFromEnv, forgePrincipalOf, type ForgeKind, type PrForge } from "../../pr-forge";
|
|
@@ -242,10 +241,10 @@ function componentsPrEnvAdapter(p: Prepared, run: { planAll: typeof import("./pr
|
|
|
242
241
|
},
|
|
243
242
|
async apply(target) {
|
|
244
243
|
const planned = set!;
|
|
245
|
-
const hookStop = run.runStageHook(p, "before-apply", p.plan.order, planned);
|
|
244
|
+
const hookStop = await run.runStageHook(p, "before-apply", p.plan.order, planned);
|
|
246
245
|
if (hookStop) return { status: "stopped", rows: rows(target, () => "planned"), message: hookStop };
|
|
247
246
|
const applied = await applyPrSet({ components: p.components, plan: p.plan, registry: p.registry, env: target.env, set: planned, gate: PR_ENV_GATE });
|
|
248
|
-
const afterHook = run.runStageHook(p, "after-apply", p.plan.order, planned, "the environment stands as applied");
|
|
247
|
+
const afterHook = await run.runStageHook(p, "after-apply", p.plan.order, planned, "the environment stands as applied");
|
|
249
248
|
const status = (component: string) => applied.members.find((m) => m.component === component)?.status ?? "planned";
|
|
250
249
|
return {
|
|
251
250
|
status: applied.status === "applied" ? "applied" : applied.status === "waiting" ? "waiting" : "failed",
|