@sdd-method/sdd-cli 1.0.0 → 1.1.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 (70) hide show
  1. package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
  2. package/dist/lib/catalogue/aggregate.js +111 -4
  3. package/dist/lib/catalogue/aggregate.js.map +1 -1
  4. package/dist/lib/catalogue/builders/external-system-exemption.d.ts.map +1 -1
  5. package/dist/lib/catalogue/builders/external-system-exemption.js +32 -3
  6. package/dist/lib/catalogue/builders/external-system-exemption.js.map +1 -1
  7. package/dist/lib/catalogue/builders/product-edges.d.ts.map +1 -1
  8. package/dist/lib/catalogue/builders/product-edges.js +9 -0
  9. package/dist/lib/catalogue/builders/product-edges.js.map +1 -1
  10. package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts +12 -0
  11. package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts.map +1 -1
  12. package/dist/lib/catalogue/builders/product-platform-dependencies.js +99 -0
  13. package/dist/lib/catalogue/builders/product-platform-dependencies.js.map +1 -1
  14. package/dist/lib/catalogue/canonical-schema.yaml +8 -6
  15. package/dist/lib/catalogue/contract-path-resolution.d.ts +55 -0
  16. package/dist/lib/catalogue/contract-path-resolution.d.ts.map +1 -0
  17. package/dist/lib/catalogue/contract-path-resolution.js +149 -0
  18. package/dist/lib/catalogue/contract-path-resolution.js.map +1 -0
  19. package/dist/lib/init/ci-workflow.js +16 -7
  20. package/dist/lib/init/ci-workflow.js.map +1 -1
  21. package/dist/lib/sync/apply.d.ts +29 -1
  22. package/dist/lib/sync/apply.d.ts.map +1 -1
  23. package/dist/lib/sync/apply.js +77 -2
  24. package/dist/lib/sync/apply.js.map +1 -1
  25. package/dist/lib/sync/index.d.ts.map +1 -1
  26. package/dist/lib/sync/index.js +23 -1
  27. package/dist/lib/sync/index.js.map +1 -1
  28. package/dist/lib/sync/settings-merge.d.ts +29 -0
  29. package/dist/lib/sync/settings-merge.d.ts.map +1 -1
  30. package/dist/lib/sync/settings-merge.js +31 -0
  31. package/dist/lib/sync/settings-merge.js.map +1 -1
  32. package/dist/lib/validate/dispatch.d.ts.map +1 -1
  33. package/dist/lib/validate/dispatch.js +19 -17
  34. package/dist/lib/validate/dispatch.js.map +1 -1
  35. package/dist/lib/validate/index.d.ts.map +1 -1
  36. package/dist/lib/validate/index.js +23 -4
  37. package/dist/lib/validate/index.js.map +1 -1
  38. package/dist/verbs/conformance.d.ts.map +1 -1
  39. package/dist/verbs/conformance.js +3 -2
  40. package/dist/verbs/conformance.js.map +1 -1
  41. package/dist/verbs/contracts.d.ts.map +1 -1
  42. package/dist/verbs/contracts.js +3 -2
  43. package/dist/verbs/contracts.js.map +1 -1
  44. package/dist/verbs/generate-briefing.d.ts.map +1 -1
  45. package/dist/verbs/generate-briefing.js +2 -1
  46. package/dist/verbs/generate-briefing.js.map +1 -1
  47. package/dist/verbs/init.d.ts.map +1 -1
  48. package/dist/verbs/init.js +3 -2
  49. package/dist/verbs/init.js.map +1 -1
  50. package/dist/verbs/pack.d.ts.map +1 -1
  51. package/dist/verbs/pack.js +2 -1
  52. package/dist/verbs/pack.js.map +1 -1
  53. package/dist/verbs/path-option.d.ts +22 -0
  54. package/dist/verbs/path-option.d.ts.map +1 -0
  55. package/dist/verbs/path-option.js +25 -0
  56. package/dist/verbs/path-option.js.map +1 -0
  57. package/dist/verbs/plan.d.ts.map +1 -1
  58. package/dist/verbs/plan.js +2 -1
  59. package/dist/verbs/plan.js.map +1 -1
  60. package/dist/verbs/scaffold.d.ts.map +1 -1
  61. package/dist/verbs/scaffold.js +2 -1
  62. package/dist/verbs/scaffold.js.map +1 -1
  63. package/dist/verbs/sync.d.ts.map +1 -1
  64. package/dist/verbs/sync.js +2 -1
  65. package/dist/verbs/sync.js.map +1 -1
  66. package/dist/verbs/validate.d.ts.map +1 -1
  67. package/dist/verbs/validate.js +3 -2
  68. package/dist/verbs/validate.js.map +1 -1
  69. package/package.json +1 -1
  70. package/scripts/validate-app-dependencies.sh +378 -58
@@ -1 +1 @@
1
- {"version":3,"file":"product-edges.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/product-edges.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"product-edges.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/product-edges.ts"],"names":[],"mappings":"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"}
@@ -16,5 +16,17 @@ export interface ProductPlatformDependenciesBuildInputs {
16
16
  export declare const ASYNC_CONTRACT_TYPES: ReadonlySet<string>;
17
17
  /** True when `contractType` denotes an async shared-stream dependency (M-ADR 0192). */
18
18
  export declare function isAsyncContractType(contractType: string): boolean;
19
+ export declare const TARGET_LOCUS_VALUES: ReadonlySet<string>;
20
+ export type TargetLocus = "platform" | "external" | "legacy";
21
+ /**
22
+ * Resolve an entry's target_locus. Invalid values are reported and treated as
23
+ * `platform` — the SAFEST reading, because a platform row is fully validated
24
+ * (FKs, resolution, realiser join); treating an unknown locus as off-platform
25
+ * would silently exempt the row from every check, which is the failure mode
26
+ * this whole field exists to end.
27
+ */
28
+ export declare function resolveTargetLocus(raw: unknown, findings: {
29
+ add(cat: string, summary: string): void;
30
+ }, where: string): TargetLocus;
19
31
  export declare function buildProductPlatformDependencies(inputs: ProductPlatformDependenciesBuildInputs): Promise<CatalogueRow[]>;
20
32
  //# sourceMappingURL=product-platform-dependencies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"product-platform-dependencies.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/product-platform-dependencies.ts"],"names":[],"mappings":"AA4DA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAID;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAInD,CAAC;AAEH,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAEjE;AAgCD,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,sCAAsC,GAC7C,OAAO,CAAC,YAAY,EAAE,CAAC,CA6GzB"}
1
+ {"version":3,"file":"product-platform-dependencies.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/product-platform-dependencies.ts"],"names":[],"mappings":"AA4DA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAID;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAInD,CAAC;AAEH,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAEjE;AAKD,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAIlD,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE7D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE;IAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACrD,KAAK,EAAE,MAAM,GACZ,WAAW,CASb;AAsFD,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,sCAAsC,GAC7C,OAAO,CAAC,YAAY,EAAE,CAAC,CAgIzB"}
@@ -74,6 +74,72 @@ export const ASYNC_CONTRACT_TYPES = new Set([
74
74
  export function isAsyncContractType(contractType) {
75
75
  return ASYNC_CONTRACT_TYPES.has(contractType.trim().toLowerCase());
76
76
  }
77
+ // M-ADR 0204: closed three-value enum. `platform` (or absent) keeps every
78
+ // pre-0204 behaviour; external/legacy rows target something OFF-platform, carry
79
+ // empty FK columns, and name their target in target_external_system_id instead.
80
+ export const TARGET_LOCUS_VALUES = new Set([
81
+ "platform",
82
+ "external",
83
+ "legacy",
84
+ ]);
85
+ /**
86
+ * Resolve an entry's target_locus. Invalid values are reported and treated as
87
+ * `platform` — the SAFEST reading, because a platform row is fully validated
88
+ * (FKs, resolution, realiser join); treating an unknown locus as off-platform
89
+ * would silently exempt the row from every check, which is the failure mode
90
+ * this whole field exists to end.
91
+ */
92
+ export function resolveTargetLocus(raw, findings, where) {
93
+ const v = String(raw ?? "").trim().toLowerCase();
94
+ if (v === "")
95
+ return "platform";
96
+ if (TARGET_LOCUS_VALUES.has(v))
97
+ return v;
98
+ findings.add("convention", `${where}: invalid target_locus "${v}" (allowed: platform | external | legacy) — treated as platform, so the row stays fully validated`);
99
+ return "platform";
100
+ }
101
+ /**
102
+ * Emit an off-platform (M-ADR 0204 external|legacy) row. FK columns stay
103
+ * EMPTY — the target is not the platform, so nothing may join or FK-validate
104
+ * against it; the target's identity goes to target_external_system_id (the
105
+ * authored service_id slot, routed). A capability_id present on such an entry
106
+ * is reported and dropped rather than carried: §4.3, and the measured instance
107
+ * where that slot held the product's own feature slug is why.
108
+ * Returns the row id, or null (with a finding) when the entry binds to nothing.
109
+ */
110
+ function buildOffPlatformRow(inputs, locus, dep, where) {
111
+ const capabilityId = String(dep["capability_id"] ?? "").trim();
112
+ const externalId = String(dep["service_id"] ?? "").trim();
113
+ const contractPath = optString(dep["contract_path"]);
114
+ if (capabilityId !== "") {
115
+ inputs.findings.add("convention", `${where}: target_locus="${locus}" entry carries capability_id="${capabilityId}" — an off-platform target has no platform capability (M-ADR 0204 §4.3); dropped from the row, keep the intent in notes`);
116
+ }
117
+ const keyLeg = externalId !== "" ? externalId : contractPath;
118
+ if (keyLeg === "") {
119
+ inputs.findings.add("convention", `${where}: target_locus="${locus}" entry names neither an external-system id (service_id) nor a contract_path — it binds to nothing and cannot be recorded`);
120
+ return null;
121
+ }
122
+ const consumedBy = dep["consumed_by"];
123
+ const consumedByJoined = Array.isArray(consumedBy)
124
+ ? consumedBy.map((v) => String(v).trim()).filter((v) => v !== "").join(",")
125
+ : typeof consumedBy === "string"
126
+ ? consumedBy.trim()
127
+ : "";
128
+ return {
129
+ id: `${inputs.productId}__${locus}__${keyLeg}`,
130
+ product_id: inputs.productId,
131
+ target_capability_id: "",
132
+ target_locus: locus,
133
+ target_external_system_id: externalId,
134
+ target_service_id: "",
135
+ target_domain: optString(dep["domain"]),
136
+ contract_type: optString(dep["contract_type"]),
137
+ required_stability: optString(dep["required_stability"]),
138
+ contract_path: contractPath,
139
+ consumed_by_services: consumedByJoined,
140
+ source_sdd_id: "",
141
+ };
142
+ }
77
143
  function resolveKeyLeg(serviceId, contractType, contractPath) {
78
144
  if (serviceId !== "")
79
145
  return { ok: true, keyLeg: serviceId };
@@ -126,6 +192,21 @@ export async function buildProductPlatformDependencies(inputs) {
126
192
  if (!d || typeof d !== "object")
127
193
  continue;
128
194
  const dep = d;
195
+ const locus = resolveTargetLocus(dep["target_locus"], inputs.findings, relPath);
196
+ if (locus !== "platform") {
197
+ const offRow = buildOffPlatformRow(inputs, locus, dep, relPath);
198
+ if (offRow !== null) {
199
+ const claimed = seen.get(String(offRow.id));
200
+ if (claimed !== undefined) {
201
+ inputs.findings.add("divergence", `${relPath}: duplicate platform_dependencies row id="${offRow.id}"`);
202
+ }
203
+ else {
204
+ seen.set(String(offRow.id), "reverse");
205
+ rows.push(offRow);
206
+ }
207
+ }
208
+ continue;
209
+ }
129
210
  const capabilityId = String(dep["capability_id"] ?? "").trim();
130
211
  const serviceId = String(dep["service_id"] ?? "").trim();
131
212
  const contractType = optString(dep["contract_type"]);
@@ -167,6 +248,8 @@ export async function buildProductPlatformDependencies(inputs) {
167
248
  id: rowId,
168
249
  product_id: inputs.productId,
169
250
  target_capability_id: capabilityId,
251
+ target_locus: "platform",
252
+ target_external_system_id: "",
170
253
  target_service_id: serviceId,
171
254
  target_domain: optString(dep["domain"]),
172
255
  contract_type: contractType,
@@ -218,6 +301,20 @@ async function readForwardSource(inputs, rows, seen) {
218
301
  if (!d || typeof d !== "object")
219
302
  continue;
220
303
  const dep = d;
304
+ const locus = resolveTargetLocus(dep["target_locus"], inputs.findings, FORWARD_REL_PATH);
305
+ if (locus !== "platform") {
306
+ const offRow = buildOffPlatformRow(inputs, locus, dep, FORWARD_REL_PATH);
307
+ if (offRow !== null) {
308
+ if (seen.has(String(offRow.id))) {
309
+ inputs.findings.add("divergence", `${FORWARD_REL_PATH}: duplicate platform_dependencies row id="${offRow.id}"`);
310
+ }
311
+ else {
312
+ seen.set(String(offRow.id), "forward");
313
+ rows.push(offRow);
314
+ }
315
+ }
316
+ continue;
317
+ }
221
318
  const capabilityId = String(dep["capability_id"] ?? "").trim();
222
319
  const serviceId = String(dep["service_id"] ?? "").trim();
223
320
  const contractType = optString(dep["contract_type"]);
@@ -248,6 +345,8 @@ async function readForwardSource(inputs, rows, seen) {
248
345
  id: rowId,
249
346
  product_id: inputs.productId,
250
347
  target_capability_id: capabilityId,
348
+ target_locus: "platform",
349
+ target_external_system_id: "",
251
350
  target_service_id: serviceId,
252
351
  target_domain: optString(dep["domain"]),
253
352
  contract_type: contractType,
@@ -1 +1 @@
1
- {"version":3,"file":"product-platform-dependencies.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/product-platform-dependencies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"product-platform-dependencies.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/product-platform-dependencies.ts"],"names":[],"mappings":"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"}
@@ -62,7 +62,7 @@
62
62
  # Builder contract: see docs/method/methods/catalogue-builder-specification.md.
63
63
  # Category taxonomy: see docs/method/methods/product-category-taxonomy.md.
64
64
 
65
- schema_version: "3.0.0"
65
+ schema_version: "3.1.0"
66
66
  schema_owner: "sdd-method"
67
67
  schema_status: "canonical"
68
68
  # Bump rationale (3.0.0 — BREAKING major, 2026-07-29, per M-ADR 0203): the 2.x line's
@@ -1255,7 +1255,7 @@ catalogues:
1255
1255
  - { name: product_id, type: string, nullable: false }
1256
1256
  - { name: service_id, type: string, nullable: false }
1257
1257
  - { name: role, type: string, nullable: false, description: "consumes." }
1258
- - { name: required_stability, type: string, nullable: true, description: "provisional | locked." }
1258
+ - { name: required_stability, type: string, nullable: true, description: "provisional | locked | unknown. The consuming SDD's expectation of contract stability, carried verbatim from app-platform-dependencies.yaml. Not a bound enum: an out-of-vocabulary value is carried, not rejected, and is reported by validate-app-dependencies.sh." }
1259
1259
 
1260
1260
  service_contract:
1261
1261
  primary_key: id
@@ -1639,16 +1639,18 @@ catalogues:
1639
1639
  §"Cross-SDD platform-capability-edge".
1640
1640
  foreign_keys:
1641
1641
  - { column: product_id, references: products.id, nullable: false }
1642
- - { column: target_capability_id, references: capabilities.id, nullable: false, external: true }
1642
+ - { column: target_capability_id, references: capabilities.id, nullable: true, external: true }
1643
1643
  - { column: target_service_id, references: services.id, nullable: true, external: true }
1644
1644
  columns:
1645
- - { name: id, type: string, nullable: false, description: "{product_id}__{target_capability_id}__{target_service_id}, EXCEPT for async shared-stream rows (M-ADR 0192) where there is no realiser service: the third component falls back to the stream contract_path, i.e. {product_id}__{target_capability_id}__{contract_path}. This keeps the PK stable and collision-free when a product depends on the same capability via two distinct streams." }
1645
+ - { name: id, type: string, nullable: false, description: "{product_id}__{target_capability_id}__{target_service_id}, EXCEPT for async shared-stream rows (M-ADR 0192) where there is no realiser service: the third component falls back to the stream contract_path, i.e. {product_id}__{target_capability_id}__{contract_path}. For OFF-PLATFORM rows (M-ADR 0204, target_locus external|legacy) there is no platform capability either: id = {product_id}__{target_locus}__{target_external_system_id}, falling back to contract_path as the third component when no external-system id is named. This keeps the PK stable and collision-free when a product depends on the same capability via two distinct streams." }
1646
1646
  - { name: product_id, type: string, nullable: false, description: "Consuming product (this SDD's product id)." }
1647
- - { 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." }
1647
+ - { name: target_capability_id, type: string, nullable: true, description: "Capability the consuming product depends on. Resolves at aggregation against a sibling SDD's capabilities.id; external by definition. Conditionally nullable (M-ADR 0204 §4.3): EMPTY when target_locus is external|legacy — there is no platform capability to name on an off-platform row, and demanding a value is what put a product's own feature slug in this column. A platform-locus row still requires it." }
1648
+ - { name: target_locus, type: string, nullable: true, description: "platform | external | legacy (M-ADR 0204; closed enum, absent/empty = platform). A statement about the TARGET only — never about the consuming product, and never a stability, lifecycle or quality claim. platform rows behave exactly as before this column existed. external/legacy rows carry empty target_capability_id and target_service_id and name their target in target_external_system_id; they skip platform resolution and the F18 realiser-join, with every skip named." }
1649
+ - { name: target_external_system_id, type: string, nullable: true, description: "For target_locus external|legacy rows only: the M-ADR 0189 external-system entry id the dependency targets (authored in the source file's service_id slot; the builder routes it here so the FK columns stay clean). Deliberately NOT a declared FK: corroboration against c4_external_systems is WARNING-severity at aggregation (M-ADR 0204 §4.2), because the C4 surface may legitimately lag discovery, and a declared FK can only fail." }
1648
1650
  - { name: target_service_id, type: string, nullable: true, 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 for SYNCHRONOUS dependencies. Conditionally nullable (M-ADR 0192): for an async shared-stream dependency (contract_type in the async set — `event`/`event-stream`/`stream`) there is no single realiser service, so this is empty and the dependency binds to the stream contract_path + target_capability_id instead. A synchronous contract_type still requires it. Made nullable in schema 2.36.0." }
1649
1651
  - { 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." }
1650
1652
  - { name: contract_type, type: string, nullable: true, description: "rest | graphql | openapi | grpc | event | event-stream | stream | other. Optional; reflects what the consuming SDD declares. The async set (`event`/`event-stream`/`stream`) marks a shared-stream subscription that binds to a stream contract rather than a realiser service (M-ADR 0192) — such rows skip the F18 synchronous realiser-join at aggregation." }
1651
- - { name: required_stability, type: string, nullable: true, description: "locked | provisional | unknown. Optional; the consuming SDD's expectation of contract stability." }
1653
+ - { name: required_stability, type: string, nullable: true, description: "provisional | locked | unknown. Optional; the consuming SDD's expectation of contract stability — and only that: where the target lives and what lifecycle its implementation is in are separate concerns that do not belong in this field. Not a bound enum: an out-of-vocabulary value is carried, not rejected, and is reported by validate-app-dependencies.sh." }
1652
1654
  - { 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." }
1653
1655
  - { 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)." }
1654
1656
  - { name: source_sdd_id, type: string, nullable: true, description: "Originating SDD slug. Populated by the aggregator per M-ADR 0134." }
@@ -0,0 +1,55 @@
1
+ import type { FindingsLog } from "./findings.js";
2
+ import type { CatalogueRow } from "./csv-writer.js";
3
+ /** Absolute SDD repo roots by sdd_id — the ecosystem root plus every sibling. */
4
+ export type SddRoots = ReadonlyMap<string, string>;
5
+ export interface ContractPathResolutionSummary {
6
+ /** Declared, path-shaped, and found under exactly one SDD root. */
7
+ readonly resolved: number;
8
+ /** Path-shaped but found under no SDD root — a reference to a missing file. */
9
+ readonly missing: number;
10
+ /** Path-shaped and found under more than one SDD root — never guessed. */
11
+ readonly ambiguous: number;
12
+ /** Declared but not a path at all (`n/a`, prose, a bracketed note). */
13
+ readonly nonPath: number;
14
+ /** No contract_path declared. Not a defect here; check 3a owns that rule. */
15
+ readonly absent: number;
16
+ }
17
+ /**
18
+ * True when the declared value is shaped like a repo-relative path, as opposed to
19
+ * a sentinel or a prose note.
20
+ *
21
+ * The reverse template types this field `<platform-relative-path-or-unknown>`,
22
+ * which openly admits a non-path value — so `n/a` is the template being followed
23
+ * and free text is that licence stretched. Both are reported, neither is treated
24
+ * as a path, and NEITHER is silently ignored: an unresolvable declaration that
25
+ * nothing mentions is indistinguishable from a resolved one in the output.
26
+ */
27
+ export declare function isPathShaped(value: string): boolean;
28
+ /**
29
+ * Strip a leading `platform/<name>/` when `<name>` identifies a known SDD — by its
30
+ * sdd_id OR by its directory basename, and the distinction is not cosmetic: an
31
+ * author writing this prefix is reading it off the filesystem, so it is the
32
+ * DIRECTORY they write. In one measured estate every such prefix is
33
+ * `platform/sdd-experience-platform/` while that SDD's declared sdd_id is
34
+ * `experience-platform` — matching on sdd_id alone therefore split nothing and
35
+ * reported 13 existing contracts as missing. Both keys are accepted.
36
+ *
37
+ * That prefix
38
+ * is the estate-relative form authors reached for when the declared
39
+ * platform-root-relative base could not name a sibling's contract. Returns the
40
+ * owning SDD id and the path relative to ITS root, or null when the value carries
41
+ * no such prefix.
42
+ */
43
+ export declare function splitEstateRelative(value: string, roots: SddRoots): {
44
+ readonly sddId: string;
45
+ readonly relPath: string;
46
+ } | null;
47
+ /**
48
+ * Resolve every declared contract_path against the SDD roots present in this
49
+ * aggregation, emitting one finding per unresolved declaration.
50
+ *
51
+ * `exists` is injected so this is testable without a filesystem, and so the
52
+ * caller owns the stat strategy.
53
+ */
54
+ export declare function resolveContractPaths(productPlatformDeps: readonly CatalogueRow[], roots: SddRoots, aliases: SddRoots, exists: (absPath: string) => Promise<boolean>, findings: FindingsLog): Promise<ContractPathResolutionSummary>;
55
+ //# sourceMappingURL=contract-path-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-path-resolution.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/contract-path-resolution.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,iFAAiF;AACjF,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnD,MAAM,WAAW,6BAA6B;IAC5C,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAWnD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,QAAQ,GACd;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO7D;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,mBAAmB,EAAE,SAAS,YAAY,EAAE,EAC5C,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAC7C,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,6BAA6B,CAAC,CA+ExC"}
@@ -0,0 +1,149 @@
1
+ // Contract-path resolution at aggregation tier (post-3.0.0-followons.md A2 step 5).
2
+ //
3
+ // WHY THIS LIVES AT AGGREGATE TIER AND NOWHERE ELSE
4
+ // `app-platform-dependencies.yaml` declares, per dependency, the contract the
5
+ // consuming app binds to. Both distributed templates say that path is relative
6
+ // to the platform repo root — and in a federation that rule cannot express the
7
+ // truth, because one app's dependencies span several platform SDDs. Measured in
8
+ // a 67-SDD reverse estate: 21 of 152 declared paths name a contract owned by a
9
+ // DIFFERENT platform SDD than the one the app would be validated against, and
10
+ // their authors compensated by prefixing `platform/<sdd-id>/` — writing the
11
+ // truth against a rule that could not hold it.
12
+ //
13
+ // The app-tier gate therefore cannot resolve these at all: given one
14
+ // --platform-root it reports LOCKED UNMET for a contract that exists. That is a
15
+ // false failure of the instrument, and no amount of app-tier cleverness fixes it
16
+ // — the file is in a sibling the app repo cannot see. At aggregate tier every
17
+ // SDD root IS visible, so resolution becomes possible for the first time.
18
+ // Same argument as M-ADR 0198: a join that can span SDDs belongs where the SDDs
19
+ // are all present.
20
+ //
21
+ // WHAT IT DOES NOT DO
22
+ // It does not rewrite anything or pick a winner when a path is ambiguous. An
23
+ // ambiguous path is reported as a divergence and left alone, because guessing
24
+ // which sibling a contract came from is exactly the silent-wrong-answer this
25
+ // whole arc has been removing.
26
+ /**
27
+ * True when the declared value is shaped like a repo-relative path, as opposed to
28
+ * a sentinel or a prose note.
29
+ *
30
+ * The reverse template types this field `<platform-relative-path-or-unknown>`,
31
+ * which openly admits a non-path value — so `n/a` is the template being followed
32
+ * and free text is that licence stretched. Both are reported, neither is treated
33
+ * as a path, and NEITHER is silently ignored: an unresolvable declaration that
34
+ * nothing mentions is indistinguishable from a resolved one in the output.
35
+ */
36
+ export function isPathShaped(value) {
37
+ const v = value.trim();
38
+ if (v === "" || v === "null")
39
+ return false;
40
+ if (v.toLowerCase().startsWith("n/a"))
41
+ return false;
42
+ if (v.startsWith("["))
43
+ return false;
44
+ // Prose gives itself away with whitespace before the first separator
45
+ // ("Kafka (<vendor> bus): topic-a / topic-b", "Kinesis: <stream-name>").
46
+ const firstSegment = v.split("/")[0] ?? "";
47
+ if (/\s/.test(firstSegment))
48
+ return false;
49
+ // A path must actually have a directory part; a bare token is not a contract path.
50
+ return v.includes("/");
51
+ }
52
+ /**
53
+ * Strip a leading `platform/<name>/` when `<name>` identifies a known SDD — by its
54
+ * sdd_id OR by its directory basename, and the distinction is not cosmetic: an
55
+ * author writing this prefix is reading it off the filesystem, so it is the
56
+ * DIRECTORY they write. In one measured estate every such prefix is
57
+ * `platform/sdd-experience-platform/` while that SDD's declared sdd_id is
58
+ * `experience-platform` — matching on sdd_id alone therefore split nothing and
59
+ * reported 13 existing contracts as missing. Both keys are accepted.
60
+ *
61
+ * That prefix
62
+ * is the estate-relative form authors reached for when the declared
63
+ * platform-root-relative base could not name a sibling's contract. Returns the
64
+ * owning SDD id and the path relative to ITS root, or null when the value carries
65
+ * no such prefix.
66
+ */
67
+ export function splitEstateRelative(value, roots) {
68
+ const parts = value.trim().split("/");
69
+ if (parts.length < 3)
70
+ return null;
71
+ if (parts[0] !== "platform")
72
+ return null;
73
+ const sddId = parts[1] ?? "";
74
+ if (!roots.has(sddId))
75
+ return null;
76
+ return { sddId, relPath: parts.slice(2).join("/") };
77
+ }
78
+ /**
79
+ * Resolve every declared contract_path against the SDD roots present in this
80
+ * aggregation, emitting one finding per unresolved declaration.
81
+ *
82
+ * `exists` is injected so this is testable without a filesystem, and so the
83
+ * caller owns the stat strategy.
84
+ */
85
+ export async function resolveContractPaths(productPlatformDeps, roots, aliases, exists, findings) {
86
+ let resolved = 0;
87
+ let missing = 0;
88
+ let ambiguous = 0;
89
+ let nonPath = 0;
90
+ let absent = 0;
91
+ // One stat per (root, path) pair at worst. Cached because a shared platform
92
+ // contract is declared by many consumers — in the measured estate the same
93
+ // embedding contract is named by 21 dependencies.
94
+ const cache = new Map();
95
+ const existsCached = async (abs) => {
96
+ const hit = cache.get(abs);
97
+ if (hit !== undefined)
98
+ return hit;
99
+ const got = await exists(abs);
100
+ cache.set(abs, got);
101
+ return got;
102
+ };
103
+ for (const dep of productPlatformDeps) {
104
+ const declared = String(dep["contract_path"] ?? "").trim();
105
+ const who = `${String(dep["source_sdd_id"] ?? "")}/${String(dep["product_id"] ?? "")}`;
106
+ const target = String(dep["target_service_id"] ?? "") ||
107
+ String(dep["target_capability_id"] ?? "") ||
108
+ "(unnamed target)";
109
+ if (declared === "" || declared === "null") {
110
+ absent++;
111
+ continue;
112
+ }
113
+ if (!isPathShaped(declared)) {
114
+ nonPath++;
115
+ findings.add("convention", `contract_path: ${who} → ${target} declares contract_path="${declared}", which is not a path — it cannot be resolved, and the dependency has no verifiable contract`);
116
+ continue;
117
+ }
118
+ const estate = splitEstateRelative(declared, aliases);
119
+ if (estate !== null) {
120
+ const abs = `${aliases.get(estate.sddId)}/${estate.relPath}`;
121
+ if (await existsCached(abs)) {
122
+ resolved++;
123
+ }
124
+ else {
125
+ missing++;
126
+ findings.add("orphan", `contract_path: ${who} → ${target} declares contract_path="${declared}", naming SDD "${estate.sddId}", but no file exists there`);
127
+ }
128
+ continue;
129
+ }
130
+ const hits = [];
131
+ for (const [sddId, root] of roots) {
132
+ if (await existsCached(`${root}/${declared}`))
133
+ hits.push(sddId);
134
+ }
135
+ if (hits.length === 1) {
136
+ resolved++;
137
+ }
138
+ else if (hits.length === 0) {
139
+ missing++;
140
+ findings.add("orphan", `contract_path: ${who} → ${target} declares contract_path="${declared}" but it resolves under none of the ${roots.size} SDD root(s) in this aggregation`);
141
+ }
142
+ else {
143
+ ambiguous++;
144
+ findings.add("divergence", `contract_path: ${who} → ${target} declares contract_path="${declared}", which resolves under ${hits.length} SDD roots (${hits.join(", ")}) — not guessed; qualify the path or name the owning SDD`);
145
+ }
146
+ }
147
+ return { resolved, missing, ambiguous, nonPath, absent };
148
+ }
149
+ //# sourceMappingURL=contract-path-resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-path-resolution.js","sourceRoot":"","sources":["../../../src/lib/catalogue/contract-path-resolution.ts"],"names":[],"mappings":"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"}
@@ -79,18 +79,27 @@ function renderSddCliJob(jobName, stepDescription, validatorName) {
79
79
  ` node-version: "20"`,
80
80
  ` - name: Install sdd-cli`,
81
81
  // CEILING-PINNED, deliberately. Release policy: a breaking catalogue-schema
82
- // major ships as a CLI major (schema 3.0.0 ships as CLI 1.0.0), so `<1.0.0`
83
- // blocks exactly one event -- the breaking major reaching every adopter's CI
84
- // the hour it publishes, against an estate measured at 436 unpinned installs
85
- // across 112 workflow files and zero pinned -- while letting every additive
86
- // minor and patch through, so it needs no per-release maintenance.
82
+ // major ships as a CLI major, so the ceiling blocks exactly one event --
83
+ // the NEXT breaking major reaching every adopter's CI the hour it
84
+ // publishes (measured motivation: 436 unpinned installs across 112
85
+ // workflow files and zero pinned) -- while letting every additive minor
86
+ // and patch through, so it needs no per-release maintenance between
87
+ // majors.
88
+ //
89
+ // The ceiling is one major above THIS CLI, and the render is how an
90
+ // adopter's ceiling moves: syncing with the new major during their own
91
+ // migration window rewrites the workflow with the new ceiling — the
92
+ // deliberate, per-estate move the release notes describe, coupled to the
93
+ // estate's own migration act. (The 3.0.0 cut nearly shipped this line
94
+ // still reading `<1.0.0` FROM the 1.0.0 CLI — a CI pinned below the tool
95
+ // that wrote it, permanently red on the floor check.)
87
96
  //
88
97
  // The FLOOR is deliberately not pinned here: `minimum_sdd_cli_version` in the
89
98
  // baseline manifest owns it, and duplicating it would create a second source
90
- // of truth that drifts. npm resolves this to the newest 0.x.
99
+ // of truth that drifts. npm resolves this to the newest 1.x.
91
100
  //
92
101
  // Quotes are load-bearing -- an unquoted `<` is shell redirection.
93
- ` run: npm install -g "@sdd-method/sdd-cli@<1.0.0"`,
102
+ ` run: npm install -g "@sdd-method/sdd-cli@<2.0.0"`,
94
103
  ` - name: ${stepDescription}`,
95
104
  ` run: sdd-cli validate --target-repo . --validator ${validatorName}`,
96
105
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"ci-workflow.js","sourceRoot":"","sources":["../../../src/lib/init/ci-workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ci-workflow.js","sourceRoot":"","sources":["../../../src/lib/init/ci-workflow.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,31 @@
1
1
  export declare function copyManagedFiles(incomingPaths: readonly string[], payloadDir: string, targetRepo: string): Promise<void>;
2
- export declare function removeManagedFiles(paths: readonly string[], targetRepo: string): Promise<void>;
2
+ /**
3
+ * Withdraw method-managed files, then remove the directories the withdrawal
4
+ * itself emptied.
5
+ *
6
+ * Without the second half, `sync` left the skeleton of everything it had ever
7
+ * shipped behind: measured 156 empty directories across 13 reverse-estate repos
8
+ * (12 `docs/method/methods/skills/reverse-*` dirs each, from the v2.3.0 wave
9
+ * moving reverse skills out of the forward bases). Git does not track empty
10
+ * directories, so no commit ever carries them and no diff ever shows them —
11
+ * they are invisible to review and live only in working copies, which is exactly
12
+ * why they accumulated unnoticed.
13
+ *
14
+ * TWO CONDITIONS, and the second is the one that matters. A directory is pruned
15
+ * only if it is (1) empty, and (2) DERIVED FROM THE WITHDRAWAL SET — that is, it
16
+ * is an ancestor directory of a path this call actually removed. Emptiness alone
17
+ * is not sufficient: an adopter's own empty directory that happens to sit beside
18
+ * the withdrawal tree is not ours to delete, and deleting it would be an
19
+ * unrecoverable side effect of a sync that was asked only to withdraw files.
20
+ * The walk stops at the first directory failing either condition, so a parent
21
+ * that still holds adopter content survives with its remaining entries intact —
22
+ * the real-world shape being 12 emptied `reverse-*` dirs beside 3 populated
23
+ * non-reverse skills under one `skills/` parent, where the walk must stop at
24
+ * `skills/`.
25
+ *
26
+ * Returns the pruned directories, repo-relative and deepest-first, so the caller
27
+ * reports each one. A pruned directory is an action taken on an adopter's tree,
28
+ * and this codebase does not take silent actions.
29
+ */
30
+ export declare function removeManagedFiles(paths: readonly string[], targetRepo: string): Promise<readonly string[]>;
3
31
  //# sourceMappingURL=apply.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/apply.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAIf"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/apply.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAsD5B"}