@sdd-method/sdd-cli 0.19.0 → 0.22.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.
Files changed (115) hide show
  1. package/README.md +30 -10
  2. package/dist/index.js +3 -3
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/agent-harness.d.ts +20 -0
  5. package/dist/lib/agent-harness.d.ts.map +1 -0
  6. package/dist/lib/agent-harness.js +28 -0
  7. package/dist/lib/agent-harness.js.map +1 -0
  8. package/dist/lib/briefing/index.d.ts +15 -0
  9. package/dist/lib/briefing/index.d.ts.map +1 -0
  10. package/dist/lib/briefing/index.js +13 -0
  11. package/dist/lib/briefing/index.js.map +1 -0
  12. package/dist/lib/briefing/render.d.ts +57 -0
  13. package/dist/lib/briefing/render.d.ts.map +1 -0
  14. package/dist/lib/briefing/render.js +112 -0
  15. package/dist/lib/briefing/render.js.map +1 -0
  16. package/dist/lib/briefing/variables.d.ts +49 -0
  17. package/dist/lib/briefing/variables.d.ts.map +1 -0
  18. package/dist/lib/briefing/variables.js +92 -0
  19. package/dist/lib/briefing/variables.js.map +1 -0
  20. package/dist/lib/catalogue/aggregate.d.ts +19 -0
  21. package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
  22. package/dist/lib/catalogue/aggregate.js +88 -0
  23. package/dist/lib/catalogue/aggregate.js.map +1 -1
  24. package/dist/lib/catalogue/build.d.ts.map +1 -1
  25. package/dist/lib/catalogue/build.js +78 -4
  26. package/dist/lib/catalogue/build.js.map +1 -1
  27. package/dist/lib/catalogue/builders/c4-containers.d.ts.map +1 -1
  28. package/dist/lib/catalogue/builders/c4-containers.js +15 -0
  29. package/dist/lib/catalogue/builders/c4-containers.js.map +1 -1
  30. package/dist/lib/catalogue/builders/capabilities.d.ts.map +1 -1
  31. package/dist/lib/catalogue/builders/capabilities.js +18 -4
  32. package/dist/lib/catalogue/builders/capabilities.js.map +1 -1
  33. package/dist/lib/catalogue/builders/capability-spec-walker.d.ts +55 -0
  34. package/dist/lib/catalogue/builders/capability-spec-walker.d.ts.map +1 -0
  35. package/dist/lib/catalogue/builders/capability-spec-walker.js +99 -0
  36. package/dist/lib/catalogue/builders/capability-spec-walker.js.map +1 -0
  37. package/dist/lib/catalogue/builders/capability-spec.d.ts +51 -0
  38. package/dist/lib/catalogue/builders/capability-spec.d.ts.map +1 -0
  39. package/dist/lib/catalogue/builders/capability-spec.js +276 -0
  40. package/dist/lib/catalogue/builders/capability-spec.js.map +1 -0
  41. package/dist/lib/catalogue/builders/contracts.d.ts.map +1 -1
  42. package/dist/lib/catalogue/builders/contracts.js +88 -41
  43. package/dist/lib/catalogue/builders/contracts.js.map +1 -1
  44. package/dist/lib/catalogue/builders/feature-subscription-channels.d.ts +12 -0
  45. package/dist/lib/catalogue/builders/feature-subscription-channels.d.ts.map +1 -0
  46. package/dist/lib/catalogue/builders/feature-subscription-channels.js +197 -0
  47. package/dist/lib/catalogue/builders/feature-subscription-channels.js.map +1 -0
  48. package/dist/lib/catalogue/builders/index.d.ts +8 -0
  49. package/dist/lib/catalogue/builders/index.d.ts.map +1 -1
  50. package/dist/lib/catalogue/builders/index.js +4 -0
  51. package/dist/lib/catalogue/builders/index.js.map +1 -1
  52. package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts +10 -0
  53. package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts.map +1 -0
  54. package/dist/lib/catalogue/builders/product-platform-dependencies.js +155 -0
  55. package/dist/lib/catalogue/builders/product-platform-dependencies.js.map +1 -0
  56. package/dist/lib/catalogue/builders/service-contract-consumes.d.ts +24 -0
  57. package/dist/lib/catalogue/builders/service-contract-consumes.d.ts.map +1 -0
  58. package/dist/lib/catalogue/builders/service-contract-consumes.js +173 -0
  59. package/dist/lib/catalogue/builders/service-contract-consumes.js.map +1 -0
  60. package/dist/lib/catalogue/canonical-schema.yaml +100 -5
  61. package/dist/lib/catalogue/service-contract-aliases-loader.d.ts +60 -0
  62. package/dist/lib/catalogue/service-contract-aliases-loader.d.ts.map +1 -0
  63. package/dist/lib/catalogue/service-contract-aliases-loader.js +109 -0
  64. package/dist/lib/catalogue/service-contract-aliases-loader.js.map +1 -0
  65. package/dist/lib/catalogue/traceability-loader.d.ts +17 -0
  66. package/dist/lib/catalogue/traceability-loader.d.ts.map +1 -1
  67. package/dist/lib/catalogue/traceability-loader.js +6 -0
  68. package/dist/lib/catalogue/traceability-loader.js.map +1 -1
  69. package/dist/lib/generate-briefing/index.d.ts +22 -0
  70. package/dist/lib/generate-briefing/index.d.ts.map +1 -0
  71. package/dist/lib/generate-briefing/index.js +77 -0
  72. package/dist/lib/generate-briefing/index.js.map +1 -0
  73. package/dist/lib/hooks-seed/copilot.d.ts +93 -0
  74. package/dist/lib/hooks-seed/copilot.d.ts.map +1 -0
  75. package/dist/lib/hooks-seed/copilot.js +167 -0
  76. package/dist/lib/hooks-seed/copilot.js.map +1 -0
  77. package/dist/lib/hooks-seed/index.d.ts +4 -0
  78. package/dist/lib/hooks-seed/index.d.ts.map +1 -1
  79. package/dist/lib/hooks-seed/index.js +2 -0
  80. package/dist/lib/hooks-seed/index.js.map +1 -1
  81. package/dist/lib/hooks-seed/lifecycle-mapping.d.ts +12 -0
  82. package/dist/lib/hooks-seed/lifecycle-mapping.d.ts.map +1 -0
  83. package/dist/lib/hooks-seed/lifecycle-mapping.js +28 -0
  84. package/dist/lib/hooks-seed/lifecycle-mapping.js.map +1 -0
  85. package/dist/lib/init/index.d.ts +6 -4
  86. package/dist/lib/init/index.d.ts.map +1 -1
  87. package/dist/lib/init/index.js +5 -26
  88. package/dist/lib/init/index.js.map +1 -1
  89. package/dist/lib/init/platform.d.ts +9 -0
  90. package/dist/lib/init/platform.d.ts.map +1 -1
  91. package/dist/lib/init/platform.js +8 -2
  92. package/dist/lib/init/platform.js.map +1 -1
  93. package/dist/lib/sync/briefing-merge.d.ts +34 -0
  94. package/dist/lib/sync/briefing-merge.d.ts.map +1 -0
  95. package/dist/lib/sync/briefing-merge.js +82 -0
  96. package/dist/lib/sync/briefing-merge.js.map +1 -0
  97. package/dist/lib/sync/copilot-hooks-merge.d.ts +30 -0
  98. package/dist/lib/sync/copilot-hooks-merge.d.ts.map +1 -0
  99. package/dist/lib/sync/copilot-hooks-merge.js +96 -0
  100. package/dist/lib/sync/copilot-hooks-merge.js.map +1 -0
  101. package/dist/lib/sync/index.d.ts +8 -3
  102. package/dist/lib/sync/index.d.ts.map +1 -1
  103. package/dist/lib/sync/index.js +63 -23
  104. package/dist/lib/sync/index.js.map +1 -1
  105. package/dist/verbs/generate-briefing.d.ts +3 -0
  106. package/dist/verbs/generate-briefing.d.ts.map +1 -0
  107. package/dist/verbs/generate-briefing.js +28 -0
  108. package/dist/verbs/generate-briefing.js.map +1 -0
  109. package/dist/verbs/init.d.ts.map +1 -1
  110. package/dist/verbs/init.js +11 -8
  111. package/dist/verbs/init.js.map +1 -1
  112. package/dist/verbs/sync.d.ts.map +1 -1
  113. package/dist/verbs/sync.js +11 -4
  114. package/dist/verbs/sync.js.map +1 -1
  115. package/package.json +2 -2
@@ -0,0 +1,173 @@
1
+ // service_contract consumes edges — emits one row per (service,
2
+ // contract, consumes) triple derived from each service's
3
+ // `repos/<service>/docs/service-architecture.md` External Interfaces
4
+ // table (Outbound rows).
5
+ //
6
+ // Resolution path:
7
+ // 1. Read the External Interfaces section of the service-architecture
8
+ // markdown. Pipe-delimited table; Direction column = "Outbound"
9
+ // (case-insensitive).
10
+ // 2. For each Outbound row, lookup the Interface column text against
11
+ // the adopter's `.sdd/service-contract-aliases.yaml` (interface_aliases
12
+ // exact match, then interface_contains substring) to get a target
13
+ // contract id.
14
+ // 3. Fall back to same_product_inference: if the interface matches a
15
+ // generic placeholder (e.g. "Private API Gateway"), substitute
16
+ // `{prefix}` with the caller's prefix (service_id minus known
17
+ // suffix). The resolved value is also a contract id.
18
+ // 4. Targets are contract IDs (not names). The schema marks both
19
+ // service_contract.{service_id,contract_id} as `external: true`
20
+ // (schema 2.8.0) — federated SDDs that lack a local services.csv +
21
+ // contracts.csv emit consumes rows whose FKs resolve at aggregation;
22
+ // connect-mono validates internally first per the fk-validator
23
+ // optimistic-resolve rule.
24
+ //
25
+ // Pattern documented in sdd-method ADR 0147.
26
+ import { readFile, readdir } from "node:fs/promises";
27
+ import { join } from "node:path";
28
+ const REPOS_DIR_REL = "repos";
29
+ const SERVICE_ARCHITECTURE_REL = join("docs", "service-architecture.md");
30
+ const KNOWN_SUFFIXES = ["-api", "-bff", "-ui", "-consumer", "-web", "-service"];
31
+ export async function buildServiceContractConsumes(inputs) {
32
+ const rows = [];
33
+ const seen = new Set();
34
+ if (inputs.aliases === null)
35
+ return rows;
36
+ const useKnownGate = inputs.knownServiceIds.size > 0;
37
+ const repoNames = await listRepoDirs(join(inputs.sddPath, REPOS_DIR_REL));
38
+ for (const serviceId of repoNames) {
39
+ if (useKnownGate && !inputs.knownServiceIds.has(serviceId))
40
+ continue;
41
+ if (inputs.aliases.skipCallers.has(serviceId))
42
+ continue;
43
+ const archPath = join(inputs.sddPath, REPOS_DIR_REL, serviceId, SERVICE_ARCHITECTURE_REL);
44
+ let text;
45
+ try {
46
+ text = await readFile(archPath, "utf-8");
47
+ }
48
+ catch (err) {
49
+ const code = err.code;
50
+ if (code === "ENOENT")
51
+ continue;
52
+ throw err;
53
+ }
54
+ const outbound = parseOutboundInterfaces(text);
55
+ for (const iface of outbound) {
56
+ const contractId = resolveContractId(serviceId, iface.interfaceText, inputs.aliases);
57
+ if (contractId === null)
58
+ continue;
59
+ const id = `${serviceId}__${contractId}__consumes`;
60
+ if (seen.has(id))
61
+ continue;
62
+ seen.add(id);
63
+ rows.push({
64
+ id,
65
+ service_id: serviceId,
66
+ contract_id: contractId,
67
+ role: "consumes",
68
+ });
69
+ }
70
+ }
71
+ return rows;
72
+ }
73
+ function resolveContractId(callerServiceId, interfaceText, aliases) {
74
+ const key = interfaceText.toLowerCase().trim();
75
+ // 1. Direct (exact) alias → contract id.
76
+ const direct = aliases.interfaceAliases.get(key);
77
+ if (direct !== undefined)
78
+ return direct;
79
+ // 2. Substring (contains) alias — longest-first.
80
+ for (const [substr, target] of aliases.interfaceContains) {
81
+ if (key.includes(substr))
82
+ return target;
83
+ }
84
+ // 3. Same-product template inference.
85
+ const template = aliases.sameProductTemplates.get(key);
86
+ if (template !== undefined) {
87
+ const prefix = derivePrefix(callerServiceId);
88
+ return template.replace(/\{prefix\}/g, prefix);
89
+ }
90
+ return null;
91
+ }
92
+ function derivePrefix(serviceId) {
93
+ for (const suffix of KNOWN_SUFFIXES) {
94
+ if (serviceId.endsWith(suffix)) {
95
+ return serviceId.slice(0, -suffix.length);
96
+ }
97
+ }
98
+ return serviceId;
99
+ }
100
+ export function parseOutboundInterfaces(markdown) {
101
+ const out = [];
102
+ const sectionRegex = /^##\s+External Interfaces\s*$/im;
103
+ const match = sectionRegex.exec(markdown);
104
+ if (match === null)
105
+ return out;
106
+ // Slice from end of heading to start of next ## heading (or EOF).
107
+ const rest = markdown.slice(match.index + match[0].length);
108
+ const nextHeading = /^##\s+/m.exec(rest);
109
+ const section = nextHeading !== null ? rest.slice(0, nextHeading.index) : rest;
110
+ const lines = section.split(/\r?\n/);
111
+ let headerSeen = false;
112
+ let dividerSeen = false;
113
+ let cols = null;
114
+ for (const raw of lines) {
115
+ const line = raw.trim();
116
+ if (line === "" || !line.startsWith("|")) {
117
+ if (headerSeen)
118
+ break;
119
+ continue;
120
+ }
121
+ const cells = splitRow(line);
122
+ if (!headerSeen) {
123
+ const interfaceIdx = cells.findIndex((c) => c.toLowerCase() === "interface");
124
+ const directionIdx = cells.findIndex((c) => c.toLowerCase() === "direction");
125
+ if (interfaceIdx === -1 || directionIdx === -1)
126
+ continue;
127
+ cols = { iface: interfaceIdx, direction: directionIdx };
128
+ headerSeen = true;
129
+ continue;
130
+ }
131
+ if (!dividerSeen) {
132
+ // Divider row: cells of dashes (e.g. "---")
133
+ if (cells.every((c) => /^:?-+:?$/.test(c.trim()))) {
134
+ dividerSeen = true;
135
+ continue;
136
+ }
137
+ // Some authors omit dividers — accept and fall through.
138
+ dividerSeen = true;
139
+ }
140
+ if (cols === null)
141
+ continue;
142
+ const direction = (cells[cols.direction] ?? "").trim().toLowerCase();
143
+ if (direction !== "outbound")
144
+ continue;
145
+ const ifaceText = (cells[cols.iface] ?? "").trim();
146
+ if (ifaceText === "")
147
+ continue;
148
+ out.push({ interfaceText: ifaceText });
149
+ }
150
+ return out;
151
+ }
152
+ function splitRow(line) {
153
+ // Drop leading + trailing | then split on internal |.
154
+ let s = line;
155
+ if (s.startsWith("|"))
156
+ s = s.slice(1);
157
+ if (s.endsWith("|"))
158
+ s = s.slice(0, -1);
159
+ return s.split("|").map((c) => c.trim());
160
+ }
161
+ async function listRepoDirs(reposRoot) {
162
+ try {
163
+ const entries = await readdir(reposRoot, { withFileTypes: true });
164
+ return entries.filter((e) => e.isDirectory()).map((e) => e.name).sort();
165
+ }
166
+ catch (err) {
167
+ const code = err.code;
168
+ if (code === "ENOENT")
169
+ return [];
170
+ throw err;
171
+ }
172
+ }
173
+ //# sourceMappingURL=service-contract-consumes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-contract-consumes.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/service-contract-consumes.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,yDAAyD;AACzD,qEAAqE;AACrE,yBAAyB;AACzB,EAAE;AACF,mBAAmB;AACnB,wEAAwE;AACxE,qEAAqE;AACrE,2BAA2B;AAC3B,uEAAuE;AACvE,6EAA6E;AAC7E,uEAAuE;AACvE,oBAAoB;AACpB,uEAAuE;AACvE,oEAAoE;AACpE,mEAAmE;AACnE,0DAA0D;AAC1D,mEAAmE;AACnE,qEAAqE;AACrE,wEAAwE;AACxE,0EAA0E;AAC1E,oEAAoE;AACpE,gCAAgC;AAChC,EAAE;AACF,6CAA6C;AAE7C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,MAAM,aAAa,GAAG,OAAO,CAAC;AAC9B,MAAM,wBAAwB,GAAG,IAAI,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACzE,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAiBhF,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAqC;IAErC,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1E,KAAK,MAAM,SAAS,IAAI,SAAS,EAAE,CAAC;QAClC,IAAI,YAAY,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QACrE,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QACxD,MAAM,QAAQ,GAAG,IAAI,CACnB,MAAM,CAAC,OAAO,EACd,aAAa,EACb,SAAS,EACT,wBAAwB,CACzB,CAAC;QACF,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;YACjD,IAAI,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAChC,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC/C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACrF,IAAI,UAAU,KAAK,IAAI;gBAAE,SAAS;YAClC,MAAM,EAAE,GAAG,GAAG,SAAS,KAAK,UAAU,YAAY,CAAC;YACnD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,IAAI,CAAC;gBACR,EAAE;gBACF,UAAU,EAAE,SAAS;gBACrB,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,UAAU;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CACxB,eAAuB,EACvB,aAAqB,EACrB,OAAqC;IAErC,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAE/C,yCAAyC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,iDAAiD;IACjD,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACzD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IAC1C,CAAC;IAED,sCAAsC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QAC7C,OAAO,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB;IACrC,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAMD,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,iCAAiC,CAAC;IACvD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAE/B,kEAAkE;IAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE/E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,IAAI,GAAgD,IAAI,CAAC;IAC7D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,UAAU;gBAAE,MAAM;YACtB,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,CAAC;YAC7E,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,CAAC;YAC7E,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,CAAC;gBAAE,SAAS;YACzD,IAAI,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;YACxD,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,4CAA4C;YAC5C,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClD,WAAW,GAAG,IAAI,CAAC;gBACnB,SAAS;YACX,CAAC;YACD,wDAAwD;YACxD,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAC5B,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrE,IAAI,SAAS,KAAK,UAAU;YAAE,SAAS;QACvC,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,SAAS,KAAK,EAAE;YAAE,SAAS;QAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,sDAAsD;IACtD,IAAI,CAAC,GAAG,IAAI,CAAC;IACb,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,SAAiB;IAC3C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -45,9 +45,22 @@
45
45
  # Builder contract: see docs/method/methods/catalogue-builder-specification.md.
46
46
  # Category taxonomy: see docs/method/methods/product-category-taxonomy.md.
47
47
 
48
- schema_version: "2.6.0"
48
+ schema_version: "2.9.0"
49
49
  schema_owner: "sdd-method"
50
50
  schema_status: "canonical"
51
+ # Bump rationale (2.9.0 — additive minor): adds the Track 2 cohort-sweep
52
+ # field set (`capabilities.data_subset`, `capabilities.slice_scope`), a new
53
+ # per-feature edge catalogue `feature_subscription_channels` for the
54
+ # AppSync / Pekko-WS / MQTT / SSE delivery layer (peer of `graphql_operations:`
55
+ # per resolved decision §1 of `content/plans/v0-9-0-cohort-sweep-derived-bundle.md`),
56
+ # a new per-SDD edge catalogue `product_platform_dependencies` capturing
57
+ # product-scoped platform consumption rows from
58
+ # `reverse-evidence/feature-grounding-evidence.yaml`, and a new federated
59
+ # edge catalogue `cross_sdd_platform_capability` that joins those rows
60
+ # against platform-side `capability_service` at aggregation time to
61
+ # surface ecosystem-wide product → platform-capability relationships.
62
+ # Backward-compatible — older readers ignore the new columns + new
63
+ # catalogues; SCHEMA_COMPAT stays at "^2.0.0".
51
64
 
52
65
  # ─── Canonical enums ────────────────────────────────────────────────────────
53
66
  #
@@ -231,6 +244,8 @@ catalogues:
231
244
  - { name: spec_path, type: string, nullable: true, description: "Path to capability spec file when one exists." }
232
245
  - { name: source, type: string, nullable: false, description: "capability-tree | product-map | capability-spec." }
233
246
  - { name: runway_classification, type: string, nullable: true, description: "Business | Enabler-Runway | Hybrid (forward declares; reverse nullable until backfilled)." }
247
+ - { name: data_subset, type: string, nullable: true, description: "Keying-axis marker for foundational-tier / synthesis-tier capabilities whose evidence is keyed by ownership boundary or data subset rather than app group. Populated from `capability.data_subset` in the traceability manifest. Empty for implementing-tier capabilities (those use app_group on per-evidence rows). See `docs/method/methods/reverse/rubrics/reverse-platform-evidence-quality.md` §`app_group:` → `data_subset:` rename. Added in schema 2.9.0." }
248
+ - { name: slice_scope, type: string, nullable: true, description: "Per-slice marker when one capability legitimately covers multiple app groups or data subsets (e.g. a compliance capability spanning several regulated-fleet sub-groups). Same capability_id may appear across multiple rows when sliced; row identity is then `(id, slice_scope)`. Empty when the capability is not sliced. Per-slice AC numbering convention: AC1-ACN unsuffixed for the first slice; subsequent slices use AC numbering suffixed by slice. See `docs/method/methods/reverse/rubrics/reverse-platform-evidence-quality.md` §`slice_scope:` and `docs/method/methods/capability-spec-template.md` Guideline 9. Added in schema 2.9.0." }
234
249
  - { name: source_sdd_id, type: string, nullable: true, description: "Originating SDD slug. Populated by the aggregator per ADR 0134." }
235
250
 
236
251
  feature_groups:
@@ -275,7 +290,7 @@ catalogues:
275
290
  - { name: description, type: string, nullable: true }
276
291
  - { name: maturity, type: string, nullable: true, description: "Standard: working | provisional | unknown | absent. Ecosystem-specific values may be added with parser awareness." }
277
292
  - { name: status, type: string, nullable: false, description: "Default 'active'." }
278
- - { name: source, type: string, nullable: false, description: "feature-tree | feature-set | capability-spec | feature-spec | feature-grounding. NOTE: feature-tree-group source removed in 1.3.0 — groups are now first-class in feature_groups.csv. As of schema 2.2.0, source: feature-tree is emitted by the canonical builder for rows derived from feature-tree.md bullets. As of schema 2.5.0, source: feature-grounding is emitted for rows derived from `docs/domains/<dom>/design/<capability>/feature-grounding.md` markdown tables (per ADR 0143). Feature-grounding rows are capability-owned: product_id is empty; capability_id resolves from the file path." }
293
+ - { name: source, type: string, nullable: false, description: "feature-tree | feature-set | capability-spec | feature-spec | feature-grounding. NOTE: feature-tree-group source removed in 1.3.0 — groups are now first-class in feature_groups.csv. As of schema 2.2.0, source: feature-tree is emitted by the canonical builder for rows derived from feature-tree.md bullets. As of schema 2.5.0, source: feature-grounding is emitted for rows derived from `docs/domains/<dom>/design/<capability>/feature-grounding.md` markdown tables (per ADR 0143). As of schema 2.7.0, source: capability-spec is emitted by the canonical builder for rows derived from `## Feature Grounding (code-path trace)` tables in `docs/domains/<dom>/product/<capability>.md` capability spec markdown (per ADR 0145). Feature-grounding and capability-spec rows are both capability-owned: product_id is empty; capability_id resolves from the file path." }
279
294
  - { name: runway, type: string, nullable: true, description: "Optional adopter-owned lifecycle / migration marker. Free string at method level — the schema declares no enum and ships no controlled vocabulary. Adopters MAY declare a per-SDD `feature-runway-vocabulary.yaml` at their SDD root; when present, the canonical builder validates captured values against it and emits a `convention` finding for unknown values. Empty when the adopter does not track migration state. Comparability across SDDs requires ecosystem-level vocabulary alignment as an explicit pre-step. Added in schema 2.2.0." }
280
295
  - { name: source_sdd_id, type: string, nullable: true, description: "Originating SDD slug. Populated by the aggregator per ADR 0134." }
281
296
 
@@ -489,10 +504,10 @@ catalogues:
489
504
 
490
505
  service_contract:
491
506
  primary_key: id
492
- description: "Edge: service exposes or consumes contract."
507
+ description: "Edge: service exposes or consumes contract. Both FKs are external (per ADR 0147): federated SDDs that walk per-repo service-architecture tables emit consumes rows where service_id resolves to the platform-root catalogue's services.csv (post-aggregation) and contract_id resolves to the platform-root contracts.csv. Internal builds (e.g. connect-mono) still optimistically validate locally. Schema 2.8.0."
493
508
  foreign_keys:
494
- - { column: service_id, references: services.id, nullable: false }
495
- - { column: contract_id, references: contracts.id, nullable: false }
509
+ - { column: service_id, references: services.id, nullable: false, external: true }
510
+ - { column: contract_id, references: contracts.id, nullable: false, external: true }
496
511
  columns:
497
512
  - { name: id, type: string, nullable: false, description: "{service_id}__{contract_id}__{role}." }
498
513
  - { name: service_id, type: string, nullable: false }
@@ -614,6 +629,20 @@ catalogues:
614
629
  - { name: contract_id, type: string, nullable: false }
615
630
  - { name: derivation_path, type: string, nullable: true, description: "cap-feature-cap-contract | feature-service-service-contract. Diagnostic only — records which join path produced the row." }
616
631
 
632
+ feature_subscription_channels:
633
+ primary_key: id
634
+ description: "Edge: feature delivers async push via a named channel/topic. Peer of `graphql_operations:` in the per-feature evidence shape — `graphql_operations:` carries the GraphQL operation names declared in the schema (Queries / Mutations / Subscriptions); `feature_subscription_channels` rows carry the channel/topic layer that physically delivers the push events (AppSync WebSocket endpoints, Pekko WS channels, MQTT topics, server-sent-event streams). Per resolved decision §1 of `content/plans/v0-9-0-cohort-sweep-derived-bundle.md`: a single GraphQL Subscription operation may listen on multiple channels; one channel may be consumed by multiple operations — modelling as a separate edge catalogue (not as a feature column) accommodates the many-to-many. Built per-SDD from `reverse-evidence/feature-grounding-evidence.yaml` `subscription_channels:` entries on each feature. Added in schema 2.9.0."
635
+ foreign_keys:
636
+ - { column: feature_id, references: features.id, nullable: false }
637
+ columns:
638
+ - { name: id, type: string, nullable: false, description: "{feature_id}__{channel_name}." }
639
+ - { name: feature_id, type: string, nullable: false }
640
+ - { name: channel_name, type: string, nullable: false, description: "Channel identifier (kebab-case slug, namespaced as the source evidence carries it — e.g. `customer.<customerId>.tracking-points` for AppSync subscription channels)." }
641
+ - { name: transport, type: string, nullable: false, description: "Delivery protocol: `appsync-websocket | pekko-ws | mqtt | sse | webhook-push | other`. The `other` value is escape-valve; adopters using it SHOULD record the actual transport in evidence." }
642
+ - { name: evidence, type: string, nullable: true, description: "Evidence-file citation (`<sub-repo>/<path>:<line>`) anchoring the channel declaration. Mirrors the citation pattern used elsewhere in evidence yamls." }
643
+ - { name: payload_ref, type: string, nullable: true, description: "Optional reference to a payload-contract event (`{event-name}` in the `events` catalogue) when the channel carries a contract-shaped payload. Empty when the payload is channel-private." }
644
+ - { name: source_sdd_id, type: string, nullable: true, description: "Originating SDD slug. Populated by the aggregator per ADR 0134." }
645
+
617
646
  capability_domain_model:
618
647
  primary_key: id
619
648
  description: "Edge: capability references a domain model. Forward: declared in `traceability.domain_model` field of the capability traceability manifest. Reverse: inferred via capability → domain → domain_model. Platform-profile only. Added in schema 2.4.0; see ADR 0142."
@@ -672,3 +701,69 @@ catalogues:
672
701
  - { name: id, type: string, nullable: false }
673
702
  - { name: superseding_adr_id, type: string, nullable: false }
674
703
  - { name: superseded_adr_id, type: string, nullable: false }
704
+
705
+ product_platform_dependencies:
706
+ primary_key: id
707
+ description: >
708
+ Per-SDD edge: an application-side or integration-side SDD declares
709
+ that its product depends on a platform-side capability + service
710
+ pair. Built from `reverse-evidence/feature-grounding-evidence.yaml`
711
+ `platform_dependencies:` block (product-level — the cohort source
712
+ shape carries product-scoped dependency rows with a `consumed_by:`
713
+ list naming which services within the consuming product depend on
714
+ the target). Each row records one (consuming product, target
715
+ capability, target service) triple. The aggregator then joins
716
+ these rows against platform-side `capability_service` to emit
717
+ `cross_sdd_platform_capability` edges at aggregation time. Cross-
718
+ SDD references (target_capability_id, target_service_id) are
719
+ external — they're not expected to resolve in the per-SDD build,
720
+ only at aggregation. Added in schema 2.9.0; see
721
+ `content/plans/v0-9-0-cohort-sweep-derived-bundle.md`
722
+ §"Cross-SDD platform-capability-edge".
723
+ foreign_keys:
724
+ - { column: product_id, references: products.id, nullable: false }
725
+ - { column: target_capability_id, references: capabilities.id, nullable: false, external: true }
726
+ - { column: target_service_id, references: services.id, nullable: false, external: true }
727
+ columns:
728
+ - { name: id, type: string, nullable: false, description: "{product_id}__{target_capability_id}__{target_service_id}." }
729
+ - { name: product_id, type: string, nullable: false, description: "Consuming product (this SDD's product id)." }
730
+ - { name: target_capability_id, type: string, nullable: false, description: "Capability the consuming product depends on. Resolves at aggregation against a sibling SDD's capabilities.id; external by definition." }
731
+ - { name: target_service_id, type: string, nullable: false, description: "Service identifier the consuming product depends on. Resolves at aggregation against a sibling SDD's services.id; external by definition. The join key the aggregator uses to derive cross_sdd_platform_capability." }
732
+ - { name: target_domain, type: string, nullable: true, description: "Domain hint as declared in the consuming SDD's evidence (free-form; reviewer-facing annotation). May be a comma-separated list when the target spans multiple domains." }
733
+ - { name: contract_type, type: string, nullable: true, description: "rest | graphql | openapi | grpc | event | other. Optional; reflects what the consuming SDD declares." }
734
+ - { name: required_stability, type: string, nullable: true, description: "locked | provisional | unknown. Optional; the consuming SDD's expectation of contract stability." }
735
+ - { name: contract_path, type: string, nullable: true, description: "Path to the contract file the dependency is against, as declared in the consuming SDD's evidence. External — resolution happens at aggregation if it happens at all." }
736
+ - { name: consumed_by_services, type: string, nullable: true, description: "Comma-separated list of service names within the consuming product that consume the dependency. Free-text; not FK-validated (services are within-product and resolution is owner-side concern)." }
737
+ - { name: source_sdd_id, type: string, nullable: true, description: "Originating SDD slug. Populated by the aggregator per ADR 0134." }
738
+
739
+ cross_sdd_platform_capability:
740
+ primary_key: id
741
+ description: >
742
+ Federated edge: an application-side or integration-side SDD's
743
+ `product_platform_dependencies` reference resolves against a
744
+ platform-side SDD's capability spec via the platform capability's
745
+ `capability_service` roster. Surfaces ecosystem-wide platform-
746
+ consumer relationships at product → capability granularity.
747
+ Built **only at aggregation time** — `sdd-cli catalogue aggregate`
748
+ joins each consuming SDD's `product_platform_dependencies` rows
749
+ against every other SDD's `capability_service` rows on
750
+ `target_service_id == service_id`, emitting one row per resolved
751
+ (consuming-product, platform-capability) pair. Per-SDD builders
752
+ emit nothing for this catalogue; the aggregator owns it entirely.
753
+ A platform-dependency whose target_service_id doesn't resolve to
754
+ any platform-side capability_service row is logged as an `orphan`
755
+ finding and produces no row. Cross-SDD references are external
756
+ by definition. Added in schema 2.9.0; see
757
+ `content/plans/v0-9-0-cohort-sweep-derived-bundle.md`
758
+ §"Cross-SDD platform-capability-edge" and ADR 0134.
759
+ foreign_keys:
760
+ - { column: consuming_product_id, references: products.id, nullable: false, external: true }
761
+ - { column: platform_capability_id, references: capabilities.id, nullable: false, external: true }
762
+ - { column: service_id, references: services.id, nullable: false, external: true }
763
+ columns:
764
+ - { name: id, type: string, nullable: false, description: "{consuming_sdd_id}__{consuming_product_id}__{platform_sdd_id}__{platform_capability_id}__{service_id}. Composite encoding so the same (consuming product, platform capability) pair can appear once per resolving service when a product depends on multiple services owned by the same capability." }
765
+ - { name: consuming_sdd_id, type: string, nullable: false, description: "SDD slug of the consuming side (application-product or integration-product SDD)." }
766
+ - { name: consuming_product_id, type: string, nullable: false, description: "Product in the consuming SDD that declares the platform_dependencies entry." }
767
+ - { name: platform_sdd_id, type: string, nullable: false, description: "SDD slug of the platform side that owns the resolved capability." }
768
+ - { name: platform_capability_id, type: string, nullable: false, description: "Capability in the platform SDD whose capability_service includes the resolved service." }
769
+ - { name: service_id, type: string, nullable: false, description: "Service identifier the consuming SDD references and the platform SDD owns. The join key." }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Loader for the optional `.sdd/service-contract-aliases.yaml` config.
3
+ *
4
+ * Adopters use this map to translate outbound interface display text
5
+ * (as it appears in service-architecture.md External Interfaces tables)
6
+ * into canonical contract names that resolve against contracts.csv.
7
+ *
8
+ * File shape:
9
+ *
10
+ * interface_aliases:
11
+ * # Case-insensitive exact match on the Interface column text.
12
+ * Masternauth service: masternauth-oauth-api
13
+ * CWS: cws-paddington-api
14
+ * Paddington: cws-paddington-api
15
+ *
16
+ * interface_contains:
17
+ * # Case-insensitive substring match. The longest key wins on
18
+ * # ties; ordering in the file otherwise matters only when keys
19
+ * # overlap. Use when adopter interface text has many qualified
20
+ * # variants ("Masternauth API", "Masternauth `/token`", etc.).
21
+ * Masternauth: masternauth-oauth-api
22
+ * Paddington: cws-paddington-api
23
+ *
24
+ * skip_callers:
25
+ * # Repo names to skip entirely (postman collections, smoke tests,
26
+ * # legacy folders inside a federated SDD that aren't runtime
27
+ * # services). Use when the federated SDD lacks a services.csv to
28
+ * # gate emission and consumes rows would otherwise dangle at the
29
+ * # aggregator with unresolved service_id.
30
+ * - postman-tacho
31
+ * - smoke-tests
32
+ *
33
+ * same_product_inference:
34
+ * # Maps generic interface text (case-insensitive exact) to a
35
+ * # contract-name template. `{prefix}` is substituted with the
36
+ * # caller's service_id minus a known suffix (-api, -bff, -ui,
37
+ * # -consumer, -web). The builder then looks up the resolved name
38
+ * # in contracts.csv.
39
+ * Private API: "{prefix}-private-api"
40
+ * Private API Gateway: "{prefix}-private-api"
41
+ *
42
+ * Either block is optional. Empty / missing file = no aliases.
43
+ */
44
+ export interface LoadedServiceContractAliases {
45
+ /** Lowercased interface display text → canonical contract name. */
46
+ readonly interfaceAliases: ReadonlyMap<string, string>;
47
+ /**
48
+ * Lowercased substring → canonical contract name. Sorted longest-first
49
+ * by the loader so resolution picks the most specific match.
50
+ */
51
+ readonly interfaceContains: ReadonlyArray<readonly [string, string]>;
52
+ /** Lowercased interface display text → contract-name template (uses {prefix}). */
53
+ readonly sameProductTemplates: ReadonlyMap<string, string>;
54
+ /** Set of caller (repo) directory names to skip entirely. */
55
+ readonly skipCallers: ReadonlySet<string>;
56
+ /** Path the aliases were loaded from (relative to SDD root). */
57
+ readonly relPath: string;
58
+ }
59
+ export declare function loadServiceContractAliases(sddPath: string): Promise<LoadedServiceContractAliases | null>;
60
+ //# sourceMappingURL=service-contract-aliases-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-contract-aliases-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/service-contract-aliases-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAQH,MAAM,WAAW,4BAA4B;IAC3C,mEAAmE;IACnE,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrE,kFAAkF;IAClF,QAAQ,CAAC,oBAAoB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3D,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AASD,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAyB9C"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Loader for the optional `.sdd/service-contract-aliases.yaml` config.
3
+ *
4
+ * Adopters use this map to translate outbound interface display text
5
+ * (as it appears in service-architecture.md External Interfaces tables)
6
+ * into canonical contract names that resolve against contracts.csv.
7
+ *
8
+ * File shape:
9
+ *
10
+ * interface_aliases:
11
+ * # Case-insensitive exact match on the Interface column text.
12
+ * Masternauth service: masternauth-oauth-api
13
+ * CWS: cws-paddington-api
14
+ * Paddington: cws-paddington-api
15
+ *
16
+ * interface_contains:
17
+ * # Case-insensitive substring match. The longest key wins on
18
+ * # ties; ordering in the file otherwise matters only when keys
19
+ * # overlap. Use when adopter interface text has many qualified
20
+ * # variants ("Masternauth API", "Masternauth `/token`", etc.).
21
+ * Masternauth: masternauth-oauth-api
22
+ * Paddington: cws-paddington-api
23
+ *
24
+ * skip_callers:
25
+ * # Repo names to skip entirely (postman collections, smoke tests,
26
+ * # legacy folders inside a federated SDD that aren't runtime
27
+ * # services). Use when the federated SDD lacks a services.csv to
28
+ * # gate emission and consumes rows would otherwise dangle at the
29
+ * # aggregator with unresolved service_id.
30
+ * - postman-tacho
31
+ * - smoke-tests
32
+ *
33
+ * same_product_inference:
34
+ * # Maps generic interface text (case-insensitive exact) to a
35
+ * # contract-name template. `{prefix}` is substituted with the
36
+ * # caller's service_id minus a known suffix (-api, -bff, -ui,
37
+ * # -consumer, -web). The builder then looks up the resolved name
38
+ * # in contracts.csv.
39
+ * Private API: "{prefix}-private-api"
40
+ * Private API Gateway: "{prefix}-private-api"
41
+ *
42
+ * Either block is optional. Empty / missing file = no aliases.
43
+ */
44
+ import { readFile } from "node:fs/promises";
45
+ import { join } from "node:path";
46
+ import { parse as parseYaml } from "yaml";
47
+ const ALIASES_FILENAME = join(".sdd", "service-contract-aliases.yaml");
48
+ export async function loadServiceContractAliases(sddPath) {
49
+ const full = join(sddPath, ALIASES_FILENAME);
50
+ let text;
51
+ try {
52
+ text = await readFile(full, "utf-8");
53
+ }
54
+ catch (err) {
55
+ const code = err.code;
56
+ if (code === "ENOENT")
57
+ return null;
58
+ throw err;
59
+ }
60
+ const raw = parseYaml(text);
61
+ if (raw === null || typeof raw !== "object") {
62
+ throw new Error(`${ALIASES_FILENAME}: expected a mapping at the document root`);
63
+ }
64
+ return {
65
+ interfaceAliases: toLowerKeyMap(raw.interface_aliases),
66
+ interfaceContains: toContainsList(raw.interface_contains),
67
+ sameProductTemplates: toLowerKeyMap(raw.same_product_inference),
68
+ skipCallers: toStringSet(raw.skip_callers),
69
+ relPath: ALIASES_FILENAME,
70
+ };
71
+ }
72
+ function toStringSet(raw) {
73
+ const out = new Set();
74
+ if (Array.isArray(raw)) {
75
+ for (const item of raw) {
76
+ if (typeof item === "string" && item !== "")
77
+ out.add(item);
78
+ }
79
+ }
80
+ return out;
81
+ }
82
+ function toContainsList(raw) {
83
+ const out = [];
84
+ if (raw === null || raw === undefined)
85
+ return out;
86
+ if (typeof raw !== "object" || Array.isArray(raw))
87
+ return out;
88
+ for (const [k, v] of Object.entries(raw)) {
89
+ if (typeof v === "string" && v !== "") {
90
+ out.push([k.toLowerCase().trim(), v]);
91
+ }
92
+ }
93
+ // Sort longest-key-first so the most specific substring wins.
94
+ out.sort((a, b) => b[0].length - a[0].length);
95
+ return out;
96
+ }
97
+ function toLowerKeyMap(raw) {
98
+ const out = new Map();
99
+ if (raw === null || raw === undefined)
100
+ return out;
101
+ if (typeof raw !== "object" || Array.isArray(raw))
102
+ return out;
103
+ for (const [k, v] of Object.entries(raw)) {
104
+ if (typeof v === "string" && v !== "")
105
+ out.set(k.toLowerCase().trim(), v);
106
+ }
107
+ return out;
108
+ }
109
+ //# sourceMappingURL=service-contract-aliases-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-contract-aliases-loader.js","sourceRoot":"","sources":["../../../src/lib/catalogue/service-contract-aliases-loader.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,23 @@ export interface TraceabilityCapabilityBlock {
5
5
  readonly capability_spec?: string;
6
6
  readonly feature_directory?: string;
7
7
  readonly status?: string;
8
+ /**
9
+ * Keying-axis marker for foundational-tier / synthesis-tier capabilities
10
+ * whose evidence is keyed by ownership boundary or data subset rather
11
+ * than app group. Added in schema 2.9.0. See
12
+ * `docs/method/methods/reverse/rubrics/reverse-platform-evidence-quality.md`
13
+ * §`app_group:` → `data_subset:` rename.
14
+ */
15
+ readonly data_subset?: string;
16
+ /**
17
+ * Per-slice marker when one capability legitimately covers multiple
18
+ * app groups or data subsets. Same capability_id may appear across
19
+ * multiple manifests with distinct `slice_scope` values; the
20
+ * capabilities builder emits one row per slice, identity composed of
21
+ * `(id, slice_scope)`. Empty when the capability is not sliced.
22
+ * Added in schema 2.9.0.
23
+ */
24
+ readonly slice_scope?: string;
8
25
  }
9
26
  export interface TraceabilityRunwayBlock {
10
27
  readonly classification?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"traceability-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/traceability-loader.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIjD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,4BAA4B;IAC3C,0GAA0G;IAC1G,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,0BAA0B,CAAC;IAChD,2GAA2G;IAC3G,QAAQ,CAAC,YAAY,CAAC,EAAE,4BAA4B,CAAC;CACtD;AAED,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;IACjD,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;CAChC;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA4EjC;AAyID,oFAAoF;AACpF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAazE"}
1
+ {"version":3,"file":"traceability-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/traceability-loader.ts"],"names":[],"mappings":"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"}
@@ -65,6 +65,12 @@ export async function loadTraceabilityManifests(opts) {
65
65
  ? { feature_directory: cap["feature_directory"] }
66
66
  : {}),
67
67
  ...(typeof cap["status"] === "string" ? { status: cap["status"] } : {}),
68
+ ...(typeof cap["data_subset"] === "string"
69
+ ? { data_subset: cap["data_subset"] }
70
+ : {}),
71
+ ...(typeof cap["slice_scope"] === "string"
72
+ ? { slice_scope: cap["slice_scope"] }
73
+ : {}),
68
74
  };
69
75
  manifests.push({
70
76
  path,
@@ -1 +1 @@
1
- {"version":3,"file":"traceability-loader.js","sourceRoot":"","sources":["../../../src/lib/catalogue/traceability-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"traceability-loader.js","sourceRoot":"","sources":["../../../src/lib/catalogue/traceability-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `sdd-cli generate-briefing` — regenerate `agent-instructions.md` +
3
+ * the harness wrapper for an existing SDD repo without pulling a
4
+ * bundle. Reuses the briefing-merge sync helpers so behaviour matches
5
+ * what `sdd-cli sync` writes (the templates already on disk are the
6
+ * source of truth).
7
+ *
8
+ * Replaces the v0.3.0 `generate-claude-md` verb whose rich-content
9
+ * output diverges from the ADR 0148 thin-pointer shape.
10
+ */
11
+ import { resolveAgentHarness, type AgentHarness } from "../agent-harness.js";
12
+ export interface GenerateBriefingOptions {
13
+ readonly targetDir: string;
14
+ readonly agentHarness?: AgentHarness;
15
+ readonly allowOverwrite: boolean;
16
+ }
17
+ export interface GenerateBriefingResult {
18
+ readonly exitCode: number;
19
+ }
20
+ export declare function runGenerateBriefing(opts: GenerateBriefingOptions, stdout?: (line: string) => void): Promise<GenerateBriefingResult>;
21
+ export { resolveAgentHarness };
22
+ //# sourceMappingURL=index.d.ts.map