@sdd-method/sdd-cli 1.42.0 → 1.44.0
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/NOTICE +1 -1
- package/README.md +16 -70
- package/dist/author-bin.d.ts +3 -0
- package/dist/author-bin.d.ts.map +1 -0
- package/dist/author-bin.js +8 -0
- package/dist/author-bin.js.map +1 -0
- package/dist/author-program.d.ts +8 -0
- package/dist/author-program.d.ts.map +1 -0
- package/dist/author-program.js +99 -0
- package/dist/author-program.js.map +1 -0
- package/dist/cli.js +0 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-harness.d.ts +11 -8
- package/dist/lib/agent-harness.d.ts.map +1 -1
- package/dist/lib/agent-harness.js +17 -8
- package/dist/lib/agent-harness.js.map +1 -1
- package/dist/lib/briefing/index.d.ts +1 -1
- package/dist/lib/briefing/index.d.ts.map +1 -1
- package/dist/lib/briefing/index.js +1 -1
- package/dist/lib/briefing/index.js.map +1 -1
- package/dist/lib/briefing/render.d.ts +18 -1
- package/dist/lib/briefing/render.d.ts.map +1 -1
- package/dist/lib/briefing/render.js +17 -8
- package/dist/lib/briefing/render.js.map +1 -1
- package/dist/lib/catalogue/aggregate.js +6 -6
- package/dist/lib/catalogue/aggregate.js.map +1 -1
- package/dist/lib/catalogue/aggregation-manifest-loader.js +4 -4
- package/dist/lib/catalogue/aggregation-manifest-loader.js.map +1 -1
- package/dist/lib/catalogue/build.js +1 -1
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/c4-components.js +1 -1
- package/dist/lib/catalogue/builders/c4-components.js.map +1 -1
- package/dist/lib/catalogue/builders/c4-containers.d.ts +1 -1
- package/dist/lib/catalogue/builders/c4-containers.js +1 -1
- package/dist/lib/catalogue/builders/c4-l1-candidates.js +1 -1
- package/dist/lib/catalogue/builders/c4-l1-candidates.js.map +1 -1
- package/dist/lib/catalogue/builders/container-dependency.d.ts +1 -1
- package/dist/lib/catalogue/builders/container-dependency.js +1 -1
- package/dist/lib/catalogue/builders/data-store-mapping.js +1 -1
- package/dist/lib/catalogue/builders/data-store-mapping.js.map +1 -1
- package/dist/lib/catalogue/builders/screen-tree.d.ts +1 -1
- package/dist/lib/catalogue/builders/screen-tree.js +1 -1
- package/dist/lib/catalogue/contract-path-resolution.d.ts +2 -2
- package/dist/lib/catalogue/contract-path-resolution.js +2 -2
- package/dist/lib/catalogue/dedupe-keyed-tables.d.ts +1 -1
- package/dist/lib/catalogue/dedupe-keyed-tables.js +0 -0
- package/dist/lib/catalogue/dedupe-keyed-tables.js.map +1 -1
- package/dist/lib/catalogue/freshness.d.ts +1 -0
- package/dist/lib/catalogue/freshness.d.ts.map +1 -1
- package/dist/lib/catalogue/freshness.js +4 -3
- package/dist/lib/catalogue/freshness.js.map +1 -1
- package/dist/lib/catalogue/scores-coverage.js +1 -1
- package/dist/lib/catalogue/scores-coverage.js.map +1 -1
- package/dist/lib/catalogue/service-contract-aliases-loader.d.ts +1 -1
- package/dist/lib/catalogue/service-contract-aliases-loader.js +1 -1
- package/dist/lib/ci-binding/index.d.ts.map +1 -1
- package/dist/lib/ci-binding/index.js +44 -5
- package/dist/lib/ci-binding/index.js.map +1 -1
- package/dist/lib/ci-binding/module.d.ts +10 -0
- package/dist/lib/ci-binding/module.d.ts.map +1 -1
- package/dist/lib/ci-binding/module.js +74 -2
- package/dist/lib/ci-binding/module.js.map +1 -1
- package/dist/lib/context-pull/index.d.ts +15 -9
- package/dist/lib/context-pull/index.d.ts.map +1 -1
- package/dist/lib/context-pull/index.js +79 -39
- package/dist/lib/context-pull/index.js.map +1 -1
- package/dist/lib/context-pull/retired-mcp-setup.d.ts +7 -0
- package/dist/lib/context-pull/retired-mcp-setup.d.ts.map +1 -0
- package/dist/lib/context-pull/retired-mcp-setup.js +7 -0
- package/dist/lib/context-pull/retired-mcp-setup.js.map +1 -0
- package/dist/lib/hooks-seed/entries.d.ts +41 -2
- package/dist/lib/hooks-seed/entries.d.ts.map +1 -1
- package/dist/lib/hooks-seed/entries.js +55 -4
- package/dist/lib/hooks-seed/entries.js.map +1 -1
- package/dist/lib/hooks-seed/index.d.ts +5 -9
- package/dist/lib/hooks-seed/index.d.ts.map +1 -1
- package/dist/lib/hooks-seed/index.js +4 -7
- package/dist/lib/hooks-seed/index.js.map +1 -1
- package/dist/lib/hooks-seed/merge.d.ts +7 -0
- package/dist/lib/hooks-seed/merge.d.ts.map +1 -1
- package/dist/lib/hooks-seed/merge.js +31 -0
- package/dist/lib/hooks-seed/merge.js.map +1 -1
- package/dist/lib/init/app.d.ts +0 -1
- package/dist/lib/init/app.d.ts.map +1 -1
- package/dist/lib/init/app.js +0 -7
- package/dist/lib/init/app.js.map +1 -1
- package/dist/lib/init/ci-workflow.js +26 -2
- package/dist/lib/init/ci-workflow.js.map +1 -1
- package/dist/lib/init/integration.d.ts +0 -1
- package/dist/lib/init/integration.d.ts.map +1 -1
- package/dist/lib/init/integration.js +0 -7
- package/dist/lib/init/integration.js.map +1 -1
- package/dist/lib/init/platform.d.ts +2 -10
- package/dist/lib/init/platform.d.ts.map +1 -1
- package/dist/lib/init/platform.js +7 -13
- package/dist/lib/init/platform.js.map +1 -1
- package/dist/lib/lock-file.d.ts +7 -0
- package/dist/lib/lock-file.d.ts.map +1 -1
- package/dist/lib/lock-file.js +10 -0
- package/dist/lib/lock-file.js.map +1 -1
- package/dist/lib/pack/builder.d.ts +14 -0
- package/dist/lib/pack/builder.d.ts.map +1 -1
- package/dist/lib/pack/builder.js +56 -4
- package/dist/lib/pack/builder.js.map +1 -1
- package/dist/lib/pack/index.d.ts +3 -1
- package/dist/lib/pack/index.d.ts.map +1 -1
- package/dist/lib/pack/index.js +1 -0
- package/dist/lib/pack/index.js.map +1 -1
- package/dist/lib/pack/publish-transform.js +1 -1
- package/dist/lib/pack/publish-transform.js.map +1 -1
- package/dist/lib/plan/index.d.ts.map +1 -1
- package/dist/lib/plan/index.js +4 -4
- package/dist/lib/plan/index.js.map +1 -1
- package/dist/lib/plan/read-sdd.js +1 -1
- package/dist/lib/plan/render-template.d.ts +8 -0
- package/dist/lib/plan/render-template.d.ts.map +1 -1
- package/dist/lib/plan/render-template.js +27 -3
- package/dist/lib/plan/render-template.js.map +1 -1
- package/dist/lib/sdd-index/repo-config.d.ts +1 -1
- package/dist/lib/sdd-index/repo-config.js +1 -1
- package/dist/lib/{mcp/reader.d.ts → sdd-reader.d.ts} +3 -5
- package/dist/lib/sdd-reader.d.ts.map +1 -0
- package/dist/lib/{mcp/reader.js → sdd-reader.js} +3 -5
- package/dist/lib/sdd-reader.js.map +1 -0
- package/dist/lib/snapshot/targets.js +1 -1
- package/dist/lib/snapshot/targets.js.map +1 -1
- package/dist/lib/sync/briefing-merge.d.ts +1 -1
- package/dist/lib/sync/briefing-merge.d.ts.map +1 -1
- package/dist/lib/sync/briefing-merge.js +50 -34
- package/dist/lib/sync/briefing-merge.js.map +1 -1
- package/dist/lib/sync/diff.js +1 -1
- package/dist/lib/sync/diff.js.map +1 -1
- package/dist/lib/sync/index.d.ts +14 -6
- package/dist/lib/sync/index.d.ts.map +1 -1
- package/dist/lib/sync/index.js +46 -72
- package/dist/lib/sync/index.js.map +1 -1
- package/dist/lib/sync/settings-merge.d.ts +29 -49
- package/dist/lib/sync/settings-merge.d.ts.map +1 -1
- package/dist/lib/sync/settings-merge.js +71 -163
- package/dist/lib/sync/settings-merge.js.map +1 -1
- package/dist/lib/validate/plan.d.ts +10 -1
- package/dist/lib/validate/plan.d.ts.map +1 -1
- package/dist/lib/validate/plan.js +6 -3
- package/dist/lib/validate/plan.js.map +1 -1
- package/dist/maintain-program.d.ts.map +1 -1
- package/dist/maintain-program.js +6 -3
- package/dist/maintain-program.js.map +1 -1
- package/dist/maintain-version.json +2 -2
- package/dist/verbs/catalogue-check.d.ts +10 -0
- package/dist/verbs/catalogue-check.d.ts.map +1 -0
- package/dist/verbs/catalogue-check.js +28 -0
- package/dist/verbs/catalogue-check.js.map +1 -0
- package/dist/verbs/catalogue.d.ts.map +1 -1
- package/dist/verbs/catalogue.js +2 -0
- package/dist/verbs/catalogue.js.map +1 -1
- package/dist/verbs/context.js +1 -1
- package/dist/verbs/context.js.map +1 -1
- package/dist/verbs/pack-build.d.ts.map +1 -1
- package/dist/verbs/pack-build.js +22 -0
- package/dist/verbs/pack-build.js.map +1 -1
- package/dist/verbs/plan.js +1 -1
- package/dist/verbs/plan.js.map +1 -1
- package/dist/verbs/sync.d.ts.map +1 -1
- package/dist/verbs/sync.js +17 -0
- package/dist/verbs/sync.js.map +1 -1
- package/dist/verbs/validate.d.ts.map +1 -1
- package/dist/verbs/validate.js +6 -1
- package/dist/verbs/validate.js.map +1 -1
- package/dist/verify-program.js +2 -2
- package/dist/verify-program.js.map +1 -1
- package/dist/verify-version.json +2 -2
- package/package.json +5 -13
- package/scripts/README.md +1 -1
- package/scripts/author-acceptance.mjs +170 -0
- package/scripts/author-version.json +4 -0
- package/scripts/build-persona-package.mjs +46 -13
- package/scripts/maintain-acceptance.mjs +3 -2
- package/scripts/maintain-version.json +2 -2
- package/scripts/publish-release.mjs +117 -0
- package/scripts/release-gate.mjs +19 -8
- package/scripts/verify-version.json +2 -2
- package/scripts/vitest-tmpdir.mjs +26 -0
- package/dist/lib/catalogue/advisory-container-type.d.ts +0 -13
- package/dist/lib/catalogue/advisory-container-type.d.ts.map +0 -1
- package/dist/lib/catalogue/advisory-container-type.js +0 -56
- package/dist/lib/catalogue/advisory-container-type.js.map +0 -1
- package/dist/lib/hooks-seed/copilot.d.ts +0 -93
- package/dist/lib/hooks-seed/copilot.d.ts.map +0 -1
- package/dist/lib/hooks-seed/copilot.js +0 -167
- package/dist/lib/hooks-seed/copilot.js.map +0 -1
- package/dist/lib/hooks-seed/lifecycle-mapping.d.ts +0 -12
- package/dist/lib/hooks-seed/lifecycle-mapping.d.ts.map +0 -1
- package/dist/lib/hooks-seed/lifecycle-mapping.js +0 -28
- package/dist/lib/hooks-seed/lifecycle-mapping.js.map +0 -1
- package/dist/lib/mcp/build-info.d.ts +0 -7
- package/dist/lib/mcp/build-info.d.ts.map +0 -1
- package/dist/lib/mcp/build-info.js +0 -10
- package/dist/lib/mcp/build-info.js.map +0 -1
- package/dist/lib/mcp/errors.d.ts +0 -23
- package/dist/lib/mcp/errors.d.ts.map +0 -1
- package/dist/lib/mcp/errors.js +0 -25
- package/dist/lib/mcp/errors.js.map +0 -1
- package/dist/lib/mcp/parse/frontmatter.d.ts +0 -22
- package/dist/lib/mcp/parse/frontmatter.d.ts.map +0 -1
- package/dist/lib/mcp/parse/frontmatter.js +0 -49
- package/dist/lib/mcp/parse/frontmatter.js.map +0 -1
- package/dist/lib/mcp/parse/gate-registry.d.ts +0 -78
- package/dist/lib/mcp/parse/gate-registry.d.ts.map +0 -1
- package/dist/lib/mcp/parse/gate-registry.js +0 -164
- package/dist/lib/mcp/parse/gate-registry.js.map +0 -1
- package/dist/lib/mcp/parse/paths.d.ts +0 -21
- package/dist/lib/mcp/parse/paths.d.ts.map +0 -1
- package/dist/lib/mcp/parse/paths.js +0 -84
- package/dist/lib/mcp/parse/paths.js.map +0 -1
- package/dist/lib/mcp/pin/errors.d.ts +0 -11
- package/dist/lib/mcp/pin/errors.d.ts.map +0 -1
- package/dist/lib/mcp/pin/errors.js +0 -32
- package/dist/lib/mcp/pin/errors.js.map +0 -1
- package/dist/lib/mcp/pin/index.d.ts +0 -18
- package/dist/lib/mcp/pin/index.d.ts.map +0 -1
- package/dist/lib/mcp/pin/index.js +0 -29
- package/dist/lib/mcp/pin/index.js.map +0 -1
- package/dist/lib/mcp/pin/read.d.ts +0 -24
- package/dist/lib/mcp/pin/read.d.ts.map +0 -1
- package/dist/lib/mcp/pin/read.js +0 -64
- package/dist/lib/mcp/pin/read.js.map +0 -1
- package/dist/lib/mcp/pin/resolve.d.ts +0 -12
- package/dist/lib/mcp/pin/resolve.d.ts.map +0 -1
- package/dist/lib/mcp/pin/resolve.js +0 -33
- package/dist/lib/mcp/pin/resolve.js.map +0 -1
- package/dist/lib/mcp/prompts/evaluate-cascade.d.ts +0 -14
- package/dist/lib/mcp/prompts/evaluate-cascade.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/evaluate-cascade.js +0 -147
- package/dist/lib/mcp/prompts/evaluate-cascade.js.map +0 -1
- package/dist/lib/mcp/prompts/index.d.ts +0 -9
- package/dist/lib/mcp/prompts/index.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/index.js +0 -23
- package/dist/lib/mcp/prompts/index.js.map +0 -1
- package/dist/lib/mcp/prompts/propose-adr.d.ts +0 -12
- package/dist/lib/mcp/prompts/propose-adr.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/propose-adr.js +0 -100
- package/dist/lib/mcp/prompts/propose-adr.js.map +0 -1
- package/dist/lib/mcp/prompts/review-data-model-change.d.ts +0 -10
- package/dist/lib/mcp/prompts/review-data-model-change.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/review-data-model-change.js +0 -134
- package/dist/lib/mcp/prompts/review-data-model-change.js.map +0 -1
- package/dist/lib/mcp/prompts/template-loader.d.ts +0 -29
- package/dist/lib/mcp/prompts/template-loader.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/template-loader.js +0 -44
- package/dist/lib/mcp/prompts/template-loader.js.map +0 -1
- package/dist/lib/mcp/prompts/types.d.ts +0 -17
- package/dist/lib/mcp/prompts/types.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/types.js +0 -10
- package/dist/lib/mcp/prompts/types.js.map +0 -1
- package/dist/lib/mcp/prompts/write-capability-spec.d.ts +0 -8
- package/dist/lib/mcp/prompts/write-capability-spec.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/write-capability-spec.js +0 -85
- package/dist/lib/mcp/prompts/write-capability-spec.js.map +0 -1
- package/dist/lib/mcp/prompts/write-feature-spec.d.ts +0 -10
- package/dist/lib/mcp/prompts/write-feature-spec.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/write-feature-spec.js +0 -94
- package/dist/lib/mcp/prompts/write-feature-spec.js.map +0 -1
- package/dist/lib/mcp/prompts/write-work-order.d.ts +0 -7
- package/dist/lib/mcp/prompts/write-work-order.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/write-work-order.js +0 -69
- package/dist/lib/mcp/prompts/write-work-order.js.map +0 -1
- package/dist/lib/mcp/reader.d.ts.map +0 -1
- package/dist/lib/mcp/reader.js.map +0 -1
- package/dist/lib/mcp/resources/adrs.d.ts +0 -3
- package/dist/lib/mcp/resources/adrs.d.ts.map +0 -1
- package/dist/lib/mcp/resources/adrs.js +0 -97
- package/dist/lib/mcp/resources/adrs.js.map +0 -1
- package/dist/lib/mcp/resources/catalogue.d.ts +0 -19
- package/dist/lib/mcp/resources/catalogue.d.ts.map +0 -1
- package/dist/lib/mcp/resources/catalogue.js +0 -240
- package/dist/lib/mcp/resources/catalogue.js.map +0 -1
- package/dist/lib/mcp/resources/data-models.d.ts +0 -14
- package/dist/lib/mcp/resources/data-models.d.ts.map +0 -1
- package/dist/lib/mcp/resources/data-models.js +0 -81
- package/dist/lib/mcp/resources/data-models.js.map +0 -1
- package/dist/lib/mcp/resources/gates.d.ts +0 -9
- package/dist/lib/mcp/resources/gates.d.ts.map +0 -1
- package/dist/lib/mcp/resources/gates.js +0 -76
- package/dist/lib/mcp/resources/gates.js.map +0 -1
- package/dist/lib/mcp/resources/glossary.d.ts +0 -16
- package/dist/lib/mcp/resources/glossary.d.ts.map +0 -1
- package/dist/lib/mcp/resources/glossary.js +0 -87
- package/dist/lib/mcp/resources/glossary.js.map +0 -1
- package/dist/lib/mcp/resources/specs.d.ts +0 -23
- package/dist/lib/mcp/resources/specs.d.ts.map +0 -1
- package/dist/lib/mcp/resources/specs.js +0 -151
- package/dist/lib/mcp/resources/specs.js.map +0 -1
- package/dist/lib/mcp/resources/version.d.ts +0 -3
- package/dist/lib/mcp/resources/version.d.ts.map +0 -1
- package/dist/lib/mcp/resources/version.js +0 -45
- package/dist/lib/mcp/resources/version.js.map +0 -1
- package/dist/lib/mcp/server.d.ts +0 -29
- package/dist/lib/mcp/server.d.ts.map +0 -1
- package/dist/lib/mcp/server.js +0 -108
- package/dist/lib/mcp/server.js.map +0 -1
- package/dist/lib/mcp/tools/cascade-impact.d.ts +0 -22
- package/dist/lib/mcp/tools/cascade-impact.d.ts.map +0 -1
- package/dist/lib/mcp/tools/cascade-impact.js +0 -53
- package/dist/lib/mcp/tools/cascade-impact.js.map +0 -1
- package/dist/lib/mcp/tools/catalogue.d.ts +0 -16
- package/dist/lib/mcp/tools/catalogue.d.ts.map +0 -1
- package/dist/lib/mcp/tools/catalogue.js +0 -268
- package/dist/lib/mcp/tools/catalogue.js.map +0 -1
- package/dist/lib/mcp/tools/find-consumers-of-contract.d.ts +0 -7
- package/dist/lib/mcp/tools/find-consumers-of-contract.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-consumers-of-contract.js +0 -70
- package/dist/lib/mcp/tools/find-consumers-of-contract.js.map +0 -1
- package/dist/lib/mcp/tools/find-consumers.d.ts +0 -7
- package/dist/lib/mcp/tools/find-consumers.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-consumers.js +0 -52
- package/dist/lib/mcp/tools/find-consumers.js.map +0 -1
- package/dist/lib/mcp/tools/find-dependencies.d.ts +0 -8
- package/dist/lib/mcp/tools/find-dependencies.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-dependencies.js +0 -101
- package/dist/lib/mcp/tools/find-dependencies.js.map +0 -1
- package/dist/lib/mcp/tools/find-dependents.d.ts +0 -8
- package/dist/lib/mcp/tools/find-dependents.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-dependents.js +0 -89
- package/dist/lib/mcp/tools/find-dependents.js.map +0 -1
- package/dist/lib/mcp/tools/find-producers.d.ts +0 -8
- package/dist/lib/mcp/tools/find-producers.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-producers.js +0 -57
- package/dist/lib/mcp/tools/find-producers.js.map +0 -1
- package/dist/lib/mcp/tools/find-related-specs.d.ts +0 -9
- package/dist/lib/mcp/tools/find-related-specs.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-related-specs.js +0 -92
- package/dist/lib/mcp/tools/find-related-specs.js.map +0 -1
- package/dist/lib/mcp/tools/list-adrs.d.ts +0 -3
- package/dist/lib/mcp/tools/list-adrs.d.ts.map +0 -1
- package/dist/lib/mcp/tools/list-adrs.js +0 -73
- package/dist/lib/mcp/tools/list-adrs.js.map +0 -1
- package/dist/lib/mcp/tools/query-gate-status.d.ts +0 -3
- package/dist/lib/mcp/tools/query-gate-status.d.ts.map +0 -1
- package/dist/lib/mcp/tools/query-gate-status.js +0 -68
- package/dist/lib/mcp/tools/query-gate-status.js.map +0 -1
- package/dist/lib/mcp/tools/search-specs.d.ts +0 -12
- package/dist/lib/mcp/tools/search-specs.d.ts.map +0 -1
- package/dist/lib/mcp/tools/search-specs.js +0 -151
- package/dist/lib/mcp/tools/search-specs.js.map +0 -1
- package/dist/lib/mcp/workspace.d.ts +0 -31
- package/dist/lib/mcp/workspace.d.ts.map +0 -1
- package/dist/lib/mcp/workspace.js +0 -146
- package/dist/lib/mcp/workspace.js.map +0 -1
- package/dist/lib/mcp-seed/entries.d.ts +0 -32
- package/dist/lib/mcp-seed/entries.d.ts.map +0 -1
- package/dist/lib/mcp-seed/entries.js +0 -14
- package/dist/lib/mcp-seed/entries.js.map +0 -1
- package/dist/lib/mcp-seed/index.d.ts +0 -36
- package/dist/lib/mcp-seed/index.d.ts.map +0 -1
- package/dist/lib/mcp-seed/index.js +0 -28
- package/dist/lib/mcp-seed/index.js.map +0 -1
- package/dist/lib/mcp-seed/merge.d.ts +0 -34
- package/dist/lib/mcp-seed/merge.d.ts.map +0 -1
- package/dist/lib/mcp-seed/merge.js +0 -99
- package/dist/lib/mcp-seed/merge.js.map +0 -1
- package/dist/lib/mcp-seed/types.d.ts +0 -24
- package/dist/lib/mcp-seed/types.d.ts.map +0 -1
- package/dist/lib/mcp-seed/types.js +0 -13
- package/dist/lib/mcp-seed/types.js.map +0 -1
- package/dist/lib/sdd-index/cascade.d.ts +0 -46
- package/dist/lib/sdd-index/cascade.d.ts.map +0 -1
- package/dist/lib/sdd-index/cascade.js +0 -91
- package/dist/lib/sdd-index/cascade.js.map +0 -1
- package/dist/lib/sdd-index/contracts.d.ts +0 -29
- package/dist/lib/sdd-index/contracts.d.ts.map +0 -1
- package/dist/lib/sdd-index/contracts.js +0 -216
- package/dist/lib/sdd-index/contracts.js.map +0 -1
- package/dist/lib/sdd-index/data-model.d.ts +0 -13
- package/dist/lib/sdd-index/data-model.d.ts.map +0 -1
- package/dist/lib/sdd-index/data-model.js +0 -23
- package/dist/lib/sdd-index/data-model.js.map +0 -1
- package/dist/lib/sdd-index/execution-map.d.ts +0 -34
- package/dist/lib/sdd-index/execution-map.d.ts.map +0 -1
- package/dist/lib/sdd-index/execution-map.js +0 -105
- package/dist/lib/sdd-index/execution-map.js.map +0 -1
- package/dist/lib/sdd-index/graph.d.ts +0 -28
- package/dist/lib/sdd-index/graph.d.ts.map +0 -1
- package/dist/lib/sdd-index/graph.js +0 -122
- package/dist/lib/sdd-index/graph.js.map +0 -1
- package/dist/lib/sdd-index/index.d.ts +0 -29
- package/dist/lib/sdd-index/index.d.ts.map +0 -1
- package/dist/lib/sdd-index/index.js +0 -79
- package/dist/lib/sdd-index/index.js.map +0 -1
- package/dist/lib/sdd-index/watch.d.ts +0 -24
- package/dist/lib/sdd-index/watch.d.ts.map +0 -1
- package/dist/lib/sdd-index/watch.js +0 -112
- package/dist/lib/sdd-index/watch.js.map +0 -1
- package/dist/lib/sync/copilot-hooks-merge.d.ts +0 -36
- package/dist/lib/sync/copilot-hooks-merge.d.ts.map +0 -1
- package/dist/lib/sync/copilot-hooks-merge.js +0 -108
- package/dist/lib/sync/copilot-hooks-merge.js.map +0 -1
- package/dist/verbs/mcp.d.ts +0 -3
- package/dist/verbs/mcp.d.ts.map +0 -1
- package/dist/verbs/mcp.js +0 -22
- package/dist/verbs/mcp.js.map +0 -1
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Library-level wrapper around `validate-cascade-completeness.sh --json`.
|
|
3
|
-
* Extracted from `src/lib/mcp/tools/cascade-impact.ts` so the tool and
|
|
4
|
-
* the Phase 5 `evaluate_cascade` prompt share one implementation.
|
|
5
|
-
*
|
|
6
|
-
* Structured errors are returned via `CascadeImpactError` rather than
|
|
7
|
-
* thrown at the McpEnvelopeError layer — callers decide whether to
|
|
8
|
-
* propagate as a tool error or embed in a prompt message.
|
|
9
|
-
*/
|
|
10
|
-
import { spawnSync } from "node:child_process";
|
|
11
|
-
import { join } from "node:path";
|
|
12
|
-
import { getSddIndex } from "./index.js";
|
|
13
|
-
export const VALIDATOR_REL_PATH = "orchestration/scripts/validate-cascade-completeness.sh";
|
|
14
|
-
export class CascadeImpactError extends Error {
|
|
15
|
-
code;
|
|
16
|
-
remediation;
|
|
17
|
-
context;
|
|
18
|
-
constructor(code, message, remediation, context = {}) {
|
|
19
|
-
super(message);
|
|
20
|
-
this.name = "CascadeImpactError";
|
|
21
|
-
this.code = code;
|
|
22
|
-
this.remediation = remediation;
|
|
23
|
-
this.context = context;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
export function runCascadeImpact(reader, args) {
|
|
27
|
-
const validator = join(reader.sddRoot, VALIDATOR_REL_PATH);
|
|
28
|
-
if (!reader.isFile(VALIDATOR_REL_PATH)) {
|
|
29
|
-
throw new CascadeImpactError("CASCADE_VALIDATOR_UNAVAILABLE", `Cascade validator script not found at ${VALIDATOR_REL_PATH}.`, "The adopter SDD must ship orchestration/scripts/validate-cascade-completeness.sh (distributed by the method baseline). Run `sdd-cli sync` to refresh the orchestration tree, or hand-install the script from the canonical method repo.", { expected_path: VALIDATOR_REL_PATH, sdd_root: reader.sddRoot });
|
|
30
|
-
}
|
|
31
|
-
const mode = args.change_type === "entity"
|
|
32
|
-
? "entities"
|
|
33
|
-
: args.change_type === "capability"
|
|
34
|
-
? "capabilities"
|
|
35
|
-
: "services";
|
|
36
|
-
const result = spawnSync(validator, ["--json", mode, args.target], { cwd: reader.sddRoot, encoding: "utf8", timeout: 30_000 });
|
|
37
|
-
if (result.status !== 0) {
|
|
38
|
-
throw new CascadeImpactError("CASCADE_VALIDATOR_FAILED", `Cascade validator exited with code ${result.status ?? "(killed)"}.`, "Run the script directly to reproduce and inspect stderr. The MCP tool does not interpret non-zero exits.", {
|
|
39
|
-
exit_code: result.status,
|
|
40
|
-
stderr: result.stderr.slice(0, 2000),
|
|
41
|
-
command: [validator, "--json", mode, args.target],
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
let scriptOutput;
|
|
45
|
-
try {
|
|
46
|
-
scriptOutput = JSON.parse(result.stdout);
|
|
47
|
-
}
|
|
48
|
-
catch (err) {
|
|
49
|
-
throw new CascadeImpactError("CASCADE_VALIDATOR_OUTPUT_INVALID", `Cascade validator stdout was not valid JSON (${err.message}).`, "The script should emit a JSON object when called with --json. If the installed script does not yet support --json, upgrade the adopter orchestration tree or open an upstream PR against sdd-method.", { stdout_prefix: result.stdout.slice(0, 500) });
|
|
50
|
-
}
|
|
51
|
-
const index = getSddIndex(reader);
|
|
52
|
-
const affected = scriptOutput["affected"] ?? {};
|
|
53
|
-
const affectedServices = asStringArray(affected["services"]);
|
|
54
|
-
const servicesWithMetadata = affectedServices.map((id) => {
|
|
55
|
-
const svc = index.services.get(id);
|
|
56
|
-
return {
|
|
57
|
-
service: id,
|
|
58
|
-
domain: svc?.domain ?? null,
|
|
59
|
-
aggregates: svc ? Array.from(svc.aggregates) : [],
|
|
60
|
-
internal_dependencies: svc ? Array.from(svc.internalDependencies) : [],
|
|
61
|
-
};
|
|
62
|
-
});
|
|
63
|
-
const links = [];
|
|
64
|
-
for (const contractPath of asStringArray(affected["contracts"])) {
|
|
65
|
-
links.push(`sdd://contracts/${contractPath}`);
|
|
66
|
-
}
|
|
67
|
-
for (const id of affectedServices) {
|
|
68
|
-
const svc = index.services.get(id);
|
|
69
|
-
if (svc)
|
|
70
|
-
links.push(`sdd://repo-config/${svc.domain}/${id}`);
|
|
71
|
-
}
|
|
72
|
-
return {
|
|
73
|
-
query: { change_type: args.change_type, target: args.target },
|
|
74
|
-
affected: {
|
|
75
|
-
services: servicesWithMetadata,
|
|
76
|
-
capabilities: asStringArray(affected["capabilities"]),
|
|
77
|
-
entities: asStringArray(affected["entities"]),
|
|
78
|
-
contracts: asStringArray(affected["contracts"]),
|
|
79
|
-
},
|
|
80
|
-
missing_cascades: scriptOutput["missing_cascades"] ?? {},
|
|
81
|
-
links,
|
|
82
|
-
pin_to_commit: reader.pin,
|
|
83
|
-
sources: [`sdd://${VALIDATOR_REL_PATH}`],
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
function asStringArray(v) {
|
|
87
|
-
if (!Array.isArray(v))
|
|
88
|
-
return [];
|
|
89
|
-
return v.filter((x) => typeof x === "string");
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=cascade.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cascade.js","sourceRoot":"","sources":["../../../src/lib/sdd-index/cascade.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Extract producer metadata from contract artefacts.
|
|
3
|
-
*
|
|
4
|
-
* Each adopter uses different conventions inside the raw artefact
|
|
5
|
-
* format (OpenAPI `x-*` extensions, proto options, Avro doc fields,
|
|
6
|
-
* SpiceDB comments). We try a few best-effort patterns and fall back
|
|
7
|
-
* to marking the node as metadata-incomplete — it's better to return
|
|
8
|
-
* a partial graph than to fail hard.
|
|
9
|
-
*
|
|
10
|
-
* The shape we care about:
|
|
11
|
-
* - `producedAggregates` — aggregate names this contract describes
|
|
12
|
-
* - `producedEvents` — event names this contract publishes
|
|
13
|
-
*
|
|
14
|
-
* Producer / consumer *service* linkage is derived later in graph.ts
|
|
15
|
-
* from repo-config declarations, not from the artefact itself.
|
|
16
|
-
*/
|
|
17
|
-
import type { SddReader } from "../mcp/reader.js";
|
|
18
|
-
import type { ContractKind, ContractNode } from "./types.js";
|
|
19
|
-
export interface ContractParseResult {
|
|
20
|
-
readonly aggregates: readonly string[];
|
|
21
|
-
readonly events: readonly string[];
|
|
22
|
-
readonly metadataIncomplete: boolean;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Parse a single contract artefact and return its producer metadata.
|
|
26
|
-
* `relPath` is relative to the SDD root.
|
|
27
|
-
*/
|
|
28
|
-
export declare function readContract(reader: SddReader, relPath: string, kind: ContractKind): ContractNode;
|
|
29
|
-
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/lib/sdd-index/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,YAAY,GACjB,YAAY,CAuBd"}
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Extract producer metadata from contract artefacts.
|
|
3
|
-
*
|
|
4
|
-
* Each adopter uses different conventions inside the raw artefact
|
|
5
|
-
* format (OpenAPI `x-*` extensions, proto options, Avro doc fields,
|
|
6
|
-
* SpiceDB comments). We try a few best-effort patterns and fall back
|
|
7
|
-
* to marking the node as metadata-incomplete — it's better to return
|
|
8
|
-
* a partial graph than to fail hard.
|
|
9
|
-
*
|
|
10
|
-
* The shape we care about:
|
|
11
|
-
* - `producedAggregates` — aggregate names this contract describes
|
|
12
|
-
* - `producedEvents` — event names this contract publishes
|
|
13
|
-
*
|
|
14
|
-
* Producer / consumer *service* linkage is derived later in graph.ts
|
|
15
|
-
* from repo-config declarations, not from the artefact itself.
|
|
16
|
-
*/
|
|
17
|
-
import { parse as parseYaml } from "yaml";
|
|
18
|
-
/**
|
|
19
|
-
* Parse a single contract artefact and return its producer metadata.
|
|
20
|
-
* `relPath` is relative to the SDD root.
|
|
21
|
-
*/
|
|
22
|
-
export function readContract(reader, relPath, kind) {
|
|
23
|
-
const raw = reader.readFile(relPath);
|
|
24
|
-
if (raw === null) {
|
|
25
|
-
return {
|
|
26
|
-
path: relPath,
|
|
27
|
-
kind,
|
|
28
|
-
producedAggregates: [],
|
|
29
|
-
producedEvents: [],
|
|
30
|
-
producers: [],
|
|
31
|
-
consumers: [],
|
|
32
|
-
metadataIncomplete: true,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
const result = parseByKind(raw, kind);
|
|
36
|
-
return {
|
|
37
|
-
path: relPath,
|
|
38
|
-
kind,
|
|
39
|
-
producedAggregates: result.aggregates,
|
|
40
|
-
producedEvents: result.events,
|
|
41
|
-
producers: [],
|
|
42
|
-
consumers: [],
|
|
43
|
-
metadataIncomplete: result.metadataIncomplete,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
function parseByKind(raw, kind) {
|
|
47
|
-
switch (kind) {
|
|
48
|
-
case "openapi":
|
|
49
|
-
return parseOpenApi(raw);
|
|
50
|
-
case "avro":
|
|
51
|
-
return parseAvro(raw);
|
|
52
|
-
case "proto":
|
|
53
|
-
return parseProto(raw);
|
|
54
|
-
case "spicedb":
|
|
55
|
-
return parseSpiceDb(raw);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* OpenAPI producer metadata via `x-sdd-aggregate` / `x-sdd-events`
|
|
60
|
-
* extensions at the document root. Falls back to deriving aggregates
|
|
61
|
-
* from the `tags` field.
|
|
62
|
-
*/
|
|
63
|
-
function parseOpenApi(raw) {
|
|
64
|
-
let doc;
|
|
65
|
-
try {
|
|
66
|
-
doc = parseYaml(raw);
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
return { aggregates: [], events: [], metadataIncomplete: true };
|
|
70
|
-
}
|
|
71
|
-
if (!doc || typeof doc !== "object" || Array.isArray(doc)) {
|
|
72
|
-
return { aggregates: [], events: [], metadataIncomplete: true };
|
|
73
|
-
}
|
|
74
|
-
const record = doc;
|
|
75
|
-
const aggregates = stringArray(record["x-sdd-aggregate"])
|
|
76
|
-
.concat(stringArray(record["x-sdd-aggregates"]));
|
|
77
|
-
const events = stringArray(record["x-sdd-events"]);
|
|
78
|
-
if (aggregates.length === 0 && events.length === 0) {
|
|
79
|
-
// Fallback: extract from `tags[].name`
|
|
80
|
-
const tags = record["tags"];
|
|
81
|
-
if (Array.isArray(tags)) {
|
|
82
|
-
for (const t of tags) {
|
|
83
|
-
if (t && typeof t === "object" && !Array.isArray(t)) {
|
|
84
|
-
const name = t["name"];
|
|
85
|
-
if (typeof name === "string")
|
|
86
|
-
aggregates.push(name);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return {
|
|
92
|
-
aggregates: dedupe(aggregates),
|
|
93
|
-
events: dedupe(events),
|
|
94
|
-
metadataIncomplete: aggregates.length === 0 && events.length === 0,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Avro: treat top-level record names as events (by convention, event
|
|
99
|
-
* schemas are single-record files named after the event). Namespace is
|
|
100
|
-
* captured as the aggregate grouping.
|
|
101
|
-
*/
|
|
102
|
-
function parseAvro(raw) {
|
|
103
|
-
let doc;
|
|
104
|
-
try {
|
|
105
|
-
doc = JSON.parse(raw);
|
|
106
|
-
}
|
|
107
|
-
catch {
|
|
108
|
-
return { aggregates: [], events: [], metadataIncomplete: true };
|
|
109
|
-
}
|
|
110
|
-
const records = [];
|
|
111
|
-
if (doc && typeof doc === "object") {
|
|
112
|
-
if (Array.isArray(doc)) {
|
|
113
|
-
for (const d of doc) {
|
|
114
|
-
if (d && typeof d === "object" && !Array.isArray(d)) {
|
|
115
|
-
records.push(d);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
records.push(doc);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
const aggregates = [];
|
|
124
|
-
const events = [];
|
|
125
|
-
for (const r of records) {
|
|
126
|
-
if (r["type"] === "record") {
|
|
127
|
-
const name = r["name"];
|
|
128
|
-
if (typeof name === "string")
|
|
129
|
-
events.push(name);
|
|
130
|
-
const ns = r["namespace"];
|
|
131
|
-
if (typeof ns === "string")
|
|
132
|
-
aggregates.push(ns);
|
|
133
|
-
// x-extensions at record level
|
|
134
|
-
aggregates.push(...stringArray(r["x-sdd-aggregate"]));
|
|
135
|
-
events.push(...stringArray(r["x-sdd-events"]));
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
return {
|
|
139
|
-
aggregates: dedupe(aggregates),
|
|
140
|
-
events: dedupe(events),
|
|
141
|
-
metadataIncomplete: records.length === 0,
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Proto: extract `service` / `message` names via regex. Proper
|
|
146
|
-
* proto parsing is overkill for metadata extraction; this matches the
|
|
147
|
-
* typical convention where the aggregate name is embedded in the
|
|
148
|
-
* service name (e.g. `PartyService`).
|
|
149
|
-
*/
|
|
150
|
-
function parseProto(raw) {
|
|
151
|
-
const aggregates = [];
|
|
152
|
-
const events = [];
|
|
153
|
-
const lines = raw.split("\n");
|
|
154
|
-
const serviceRe = /^\s*service\s+(\w+)/;
|
|
155
|
-
const messageRe = /^\s*message\s+(\w+)/;
|
|
156
|
-
const aggregateCommentRe = /\/\/\s*sdd:aggregate\s+(\w+)/i;
|
|
157
|
-
const eventCommentRe = /\/\/\s*sdd:event\s+(\w+)/i;
|
|
158
|
-
let matchedAny = false;
|
|
159
|
-
for (const line of lines) {
|
|
160
|
-
const svc = line.match(serviceRe);
|
|
161
|
-
if (svc && svc[1]) {
|
|
162
|
-
aggregates.push(svc[1]);
|
|
163
|
-
matchedAny = true;
|
|
164
|
-
}
|
|
165
|
-
const msg = line.match(messageRe);
|
|
166
|
-
if (msg && msg[1]) {
|
|
167
|
-
events.push(msg[1]);
|
|
168
|
-
matchedAny = true;
|
|
169
|
-
}
|
|
170
|
-
const aggC = line.match(aggregateCommentRe);
|
|
171
|
-
if (aggC && aggC[1]) {
|
|
172
|
-
aggregates.push(aggC[1]);
|
|
173
|
-
matchedAny = true;
|
|
174
|
-
}
|
|
175
|
-
const evC = line.match(eventCommentRe);
|
|
176
|
-
if (evC && evC[1]) {
|
|
177
|
-
events.push(evC[1]);
|
|
178
|
-
matchedAny = true;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return {
|
|
182
|
-
aggregates: dedupe(aggregates),
|
|
183
|
-
events: dedupe(events),
|
|
184
|
-
metadataIncomplete: !matchedAny,
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* SpiceDB schemas declare `definition` blocks; each definition is an
|
|
189
|
-
* aggregate. This is a coarse match — enough for dependency-graph
|
|
190
|
-
* reasoning.
|
|
191
|
-
*/
|
|
192
|
-
function parseSpiceDb(raw) {
|
|
193
|
-
const aggregates = [];
|
|
194
|
-
const defRe = /^\s*definition\s+([\w/]+)/gm;
|
|
195
|
-
let m;
|
|
196
|
-
while ((m = defRe.exec(raw)) !== null) {
|
|
197
|
-
if (m[1])
|
|
198
|
-
aggregates.push(m[1]);
|
|
199
|
-
}
|
|
200
|
-
return {
|
|
201
|
-
aggregates: dedupe(aggregates),
|
|
202
|
-
events: [],
|
|
203
|
-
metadataIncomplete: aggregates.length === 0,
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
function stringArray(v) {
|
|
207
|
-
if (typeof v === "string")
|
|
208
|
-
return [v];
|
|
209
|
-
if (!Array.isArray(v))
|
|
210
|
-
return [];
|
|
211
|
-
return v.filter((x) => typeof x === "string");
|
|
212
|
-
}
|
|
213
|
-
function dedupe(xs) {
|
|
214
|
-
return Array.from(new Set(xs));
|
|
215
|
-
}
|
|
216
|
-
//# sourceMappingURL=contracts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/lib/sdd-index/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAU1C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAiB,EACjB,OAAe,EACf,IAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO;YACL,IAAI,EAAE,OAAO;YACb,IAAI;YACJ,kBAAkB,EAAE,EAAE;YACtB,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;YACb,kBAAkB,EAAE,IAAI;SACzB,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI;QACJ,kBAAkB,EAAE,MAAM,CAAC,UAAU;QACrC,cAAc,EAAE,MAAM,CAAC,MAAM;QAC7B,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,IAAkB;IAClD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAClE,CAAC;IACD,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;SACtD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IACnD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,uCAAuC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpD,MAAM,IAAI,GAAI,CAA6B,CAAC,MAAM,CAAC,CAAC;oBACpD,IAAI,OAAO,IAAI,KAAK,QAAQ;wBAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,kBAAkB,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;KACnE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAClE,CAAC;IACD,MAAM,OAAO,GAA8B,EAAE,CAAC;IAC9C,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpD,OAAO,CAAC,IAAI,CAAC,CAA4B,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YACvB,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;YAC1B,IAAI,OAAO,EAAE,KAAK,QAAQ;gBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChD,+BAA+B;YAC/B,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,kBAAkB,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;KACzC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,qBAAqB,CAAC;IACxC,MAAM,SAAS,GAAG,qBAAqB,CAAC;IACxC,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;IAC3D,MAAM,cAAc,GAAG,2BAA2B,CAAC;IACnD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACxB,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACvC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,kBAAkB,EAAE,CAAC,UAAU;KAChC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,6BAA6B,CAAC;IAC5C,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;QAC9B,MAAM,EAAE,EAAE;QACV,kBAAkB,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,CAAU;IAC7B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,MAAM,CAAC,EAAqB;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Extract entity names from a mermaid data-model file. Mirrors the
|
|
3
|
-
* awk pattern in `orchestration/scripts/validate-cascade-completeness.sh`
|
|
4
|
-
* line 313: treat any top-level `<Identifier> {` block as an entity
|
|
5
|
-
* declaration.
|
|
6
|
-
*
|
|
7
|
-
* Output is deduplicated and sorted for deterministic downstream use.
|
|
8
|
-
* Malformed or non-mermaid input returns an empty list — callers
|
|
9
|
-
* surface a warning via `metadata_incomplete` on the returned
|
|
10
|
-
* message.
|
|
11
|
-
*/
|
|
12
|
-
export declare function extractEntities(body: string): readonly string[];
|
|
13
|
-
//# sourceMappingURL=data-model.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-model.d.ts","sourceRoot":"","sources":["../../../src/lib/sdd-index/data-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAQ/D"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Extract entity names from a mermaid data-model file. Mirrors the
|
|
3
|
-
* awk pattern in `orchestration/scripts/validate-cascade-completeness.sh`
|
|
4
|
-
* line 313: treat any top-level `<Identifier> {` block as an entity
|
|
5
|
-
* declaration.
|
|
6
|
-
*
|
|
7
|
-
* Output is deduplicated and sorted for deterministic downstream use.
|
|
8
|
-
* Malformed or non-mermaid input returns an empty list — callers
|
|
9
|
-
* surface a warning via `metadata_incomplete` on the returned
|
|
10
|
-
* message.
|
|
11
|
-
*/
|
|
12
|
-
const ENTITY_RE = /^\s*([A-Za-z][A-Za-z0-9_]+)\s*\{\s*$/gm;
|
|
13
|
-
export function extractEntities(body) {
|
|
14
|
-
const seen = new Set();
|
|
15
|
-
let m;
|
|
16
|
-
ENTITY_RE.lastIndex = 0;
|
|
17
|
-
while ((m = ENTITY_RE.exec(body)) !== null) {
|
|
18
|
-
if (m[1])
|
|
19
|
-
seen.add(m[1]);
|
|
20
|
-
}
|
|
21
|
-
return Array.from(seen).sort();
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=data-model.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-model.js","sourceRoot":"","sources":["../../../src/lib/sdd-index/data-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,SAAS,GAAG,wCAAwC,CAAC;AAE3D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,CAAyB,CAAC;IAC9B,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parse docs/platform/execution-dependency-map.md if present.
|
|
3
|
-
*
|
|
4
|
-
* The map is an adopter-owned narrative artefact (ADR 0074 §4.3). The
|
|
5
|
-
* scope doc explicitly marks it as a narrative overlay — repo-config
|
|
6
|
-
* wins if they disagree. We extract any unambiguous edges we can find
|
|
7
|
-
* and ignore the rest; on parse failure we return an empty list plus
|
|
8
|
-
* a warning.
|
|
9
|
-
*
|
|
10
|
-
* Expected pattern (by convention; adopters vary):
|
|
11
|
-
*
|
|
12
|
-
* - consumer-service --build-start--> producer-service
|
|
13
|
-
* - consumer-service --go-live--> producer-service
|
|
14
|
-
* - consumer-service --migration-dependency--> producer-service
|
|
15
|
-
*
|
|
16
|
-
* Plus YAML-fenced blocks of the form:
|
|
17
|
-
*
|
|
18
|
-
* ```yaml
|
|
19
|
-
* edges:
|
|
20
|
-
* - from: consumer-service
|
|
21
|
-
* to: producer-service
|
|
22
|
-
* kind: go-live
|
|
23
|
-
* note: "..."
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
import type { SddReader } from "../mcp/reader.js";
|
|
27
|
-
import type { ExecutionEdge } from "./types.js";
|
|
28
|
-
export declare const EXECUTION_MAP_PATH = "docs/platform/execution-dependency-map.md";
|
|
29
|
-
export interface ExecutionMapResult {
|
|
30
|
-
readonly edges: readonly ExecutionEdge[];
|
|
31
|
-
readonly warnings: readonly string[];
|
|
32
|
-
}
|
|
33
|
-
export declare function readExecutionMap(reader: SddReader): ExecutionMapResult;
|
|
34
|
-
//# sourceMappingURL=execution-map.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"execution-map.d.ts","sourceRoot":"","sources":["../../../src/lib/sdd-index/execution-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,eAAO,MAAM,kBAAkB,8CACc,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAWD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,kBAAkB,CAwEtE"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parse docs/platform/execution-dependency-map.md if present.
|
|
3
|
-
*
|
|
4
|
-
* The map is an adopter-owned narrative artefact (ADR 0074 §4.3). The
|
|
5
|
-
* scope doc explicitly marks it as a narrative overlay — repo-config
|
|
6
|
-
* wins if they disagree. We extract any unambiguous edges we can find
|
|
7
|
-
* and ignore the rest; on parse failure we return an empty list plus
|
|
8
|
-
* a warning.
|
|
9
|
-
*
|
|
10
|
-
* Expected pattern (by convention; adopters vary):
|
|
11
|
-
*
|
|
12
|
-
* - consumer-service --build-start--> producer-service
|
|
13
|
-
* - consumer-service --go-live--> producer-service
|
|
14
|
-
* - consumer-service --migration-dependency--> producer-service
|
|
15
|
-
*
|
|
16
|
-
* Plus YAML-fenced blocks of the form:
|
|
17
|
-
*
|
|
18
|
-
* ```yaml
|
|
19
|
-
* edges:
|
|
20
|
-
* - from: consumer-service
|
|
21
|
-
* to: producer-service
|
|
22
|
-
* kind: go-live
|
|
23
|
-
* note: "..."
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
import { parse as parseYaml } from "yaml";
|
|
27
|
-
export const EXECUTION_MAP_PATH = "docs/platform/execution-dependency-map.md";
|
|
28
|
-
const VALID_KINDS = new Set([
|
|
29
|
-
"build-start",
|
|
30
|
-
"go-live",
|
|
31
|
-
"migration-dependency",
|
|
32
|
-
]);
|
|
33
|
-
const LINE_EDGE_RE = /^\s*-\s+([\w.-]+)\s+--(build-start|go-live|migration-dependency)-->\s+([\w.-]+)\s*(?:#\s*(.*))?$/i;
|
|
34
|
-
export function readExecutionMap(reader) {
|
|
35
|
-
const raw = reader.readFile(EXECUTION_MAP_PATH);
|
|
36
|
-
if (raw === null)
|
|
37
|
-
return { edges: [], warnings: [] };
|
|
38
|
-
const edges = [];
|
|
39
|
-
const warnings = [];
|
|
40
|
-
// 1) Line-form edges.
|
|
41
|
-
for (const line of raw.split("\n")) {
|
|
42
|
-
const m = line.match(LINE_EDGE_RE);
|
|
43
|
-
if (!m)
|
|
44
|
-
continue;
|
|
45
|
-
const [, from, kindRaw, to, note] = m;
|
|
46
|
-
if (!from || !kindRaw || !to)
|
|
47
|
-
continue;
|
|
48
|
-
const kind = kindRaw.toLowerCase();
|
|
49
|
-
if (!VALID_KINDS.has(kind))
|
|
50
|
-
continue;
|
|
51
|
-
edges.push({
|
|
52
|
-
from,
|
|
53
|
-
to,
|
|
54
|
-
kind,
|
|
55
|
-
...(note ? { note: note.trim() } : {}),
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
// 2) YAML-fenced `edges:` blocks.
|
|
59
|
-
const yamlBlockRe = /```ya?ml\s*\n([\s\S]*?)\n```/g;
|
|
60
|
-
let block;
|
|
61
|
-
while ((block = yamlBlockRe.exec(raw)) !== null) {
|
|
62
|
-
const body = block[1] ?? "";
|
|
63
|
-
if (!body.includes("edges"))
|
|
64
|
-
continue;
|
|
65
|
-
let doc;
|
|
66
|
-
try {
|
|
67
|
-
doc = parseYaml(body);
|
|
68
|
-
}
|
|
69
|
-
catch (err) {
|
|
70
|
-
warnings.push(`execution-map: fenced YAML block failed to parse (${err.message})`);
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
if (!doc || typeof doc !== "object" || Array.isArray(doc))
|
|
74
|
-
continue;
|
|
75
|
-
const edgesField = doc["edges"];
|
|
76
|
-
if (!Array.isArray(edgesField))
|
|
77
|
-
continue;
|
|
78
|
-
for (const entry of edgesField) {
|
|
79
|
-
if (!entry || typeof entry !== "object" || Array.isArray(entry))
|
|
80
|
-
continue;
|
|
81
|
-
const obj = entry;
|
|
82
|
-
const from = typeof obj["from"] === "string" ? obj["from"] : undefined;
|
|
83
|
-
const to = typeof obj["to"] === "string" ? obj["to"] : undefined;
|
|
84
|
-
const kindRaw = typeof obj["kind"] === "string" ? obj["kind"] : undefined;
|
|
85
|
-
if (!from || !to || !kindRaw) {
|
|
86
|
-
warnings.push(`execution-map: edge is missing from/to/kind (entry: ${JSON.stringify(entry)})`);
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
const kind = kindRaw;
|
|
90
|
-
if (!VALID_KINDS.has(kind)) {
|
|
91
|
-
warnings.push(`execution-map: edge has unknown kind '${kindRaw}' (valid: build-start, go-live, migration-dependency)`);
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
const note = typeof obj["note"] === "string" ? obj["note"] : undefined;
|
|
95
|
-
edges.push({
|
|
96
|
-
from,
|
|
97
|
-
to,
|
|
98
|
-
kind,
|
|
99
|
-
...(note ? { note } : {}),
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return { edges, warnings };
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=execution-map.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"execution-map.js","sourceRoot":"","sources":["../../../src/lib/sdd-index/execution-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Graph-builder pass. Consumes already-parsed ServiceNodes + ContractNodes
|
|
3
|
-
* and derives the cross-reference maps that dependency-graph tools query:
|
|
4
|
-
*
|
|
5
|
-
* - producers: aggregate/event → service ids that own it
|
|
6
|
-
* - consumers: aggregate/event → service ids that depend on it
|
|
7
|
-
* - pins: contract path → (service id → version string)
|
|
8
|
-
*
|
|
9
|
-
* Producer linkage from repo-config: a service that declares a contract
|
|
10
|
-
* and owns at least one of its produced aggregates is marked as a
|
|
11
|
-
* producer of that contract. Everyone else who declares the contract
|
|
12
|
-
* is a consumer. This is deliberately asymmetric — adopters tend not
|
|
13
|
-
* to flag producer-vs-consumer explicitly, so ownership of the
|
|
14
|
-
* aggregate is our tiebreaker. When no service owns the aggregates,
|
|
15
|
-
* all declaring services are consumers and no producer is recorded
|
|
16
|
-
* (surfaced via metadataIncomplete on the ContractNode).
|
|
17
|
-
*/
|
|
18
|
-
import type { ContractNode, ExecutionEdge, ServiceNode } from "./types.js";
|
|
19
|
-
export interface GraphBuildResult {
|
|
20
|
-
readonly services: ReadonlyMap<string, ServiceNode>;
|
|
21
|
-
readonly contracts: ReadonlyMap<string, ContractNode>;
|
|
22
|
-
readonly producers: ReadonlyMap<string, readonly string[]>;
|
|
23
|
-
readonly consumers: ReadonlyMap<string, readonly string[]>;
|
|
24
|
-
readonly pins: ReadonlyMap<string, ReadonlyMap<string, string>>;
|
|
25
|
-
readonly warnings: readonly string[];
|
|
26
|
-
}
|
|
27
|
-
export declare function buildGraph(serviceList: readonly ServiceNode[], contractList: readonly ContractNode[], _edges: readonly ExecutionEdge[]): GraphBuildResult;
|
|
28
|
-
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/lib/sdd-index/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC3D,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC3D,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,wBAAgB,UAAU,CACxB,WAAW,EAAE,SAAS,WAAW,EAAE,EACnC,YAAY,EAAE,SAAS,YAAY,EAAE,EACrC,MAAM,EAAE,SAAS,aAAa,EAAE,GAC/B,gBAAgB,CAwFlB"}
|