@sdd-method/sdd-cli 0.55.2 → 0.57.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/dist/lib/catalogue/aggregate.d.ts +13 -0
- package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
- package/dist/lib/catalogue/aggregate.js +40 -0
- package/dist/lib/catalogue/aggregate.js.map +1 -1
- package/dist/lib/catalogue/build.d.ts.map +1 -1
- package/dist/lib/catalogue/build.js +7 -2
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/contracts.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/contracts.js +69 -1
- package/dist/lib/catalogue/builders/contracts.js.map +1 -1
- package/dist/lib/catalogue/builders/domains.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/domains.js +4 -0
- package/dist/lib/catalogue/builders/domains.js.map +1 -1
- package/dist/lib/catalogue/builders/products.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/products.js +31 -0
- package/dist/lib/catalogue/builders/products.js.map +1 -1
- package/dist/lib/catalogue/canonical-schema.yaml +36 -5
- package/dist/lib/catalogue/fk-validator.d.ts +15 -3
- package/dist/lib/catalogue/fk-validator.d.ts.map +1 -1
- package/dist/lib/catalogue/fk-validator.js +14 -4
- package/dist/lib/catalogue/fk-validator.js.map +1 -1
- package/dist/lib/catalogue/manifest-loader.d.ts +7 -0
- package/dist/lib/catalogue/manifest-loader.d.ts.map +1 -1
- package/dist/lib/catalogue/manifest-loader.js +24 -0
- package/dist/lib/catalogue/manifest-loader.js.map +1 -1
- package/dist/lib/catalogue/schema-loader.d.ts +11 -0
- package/dist/lib/catalogue/schema-loader.d.ts.map +1 -1
- package/dist/lib/catalogue/schema-loader.js +1 -0
- package/dist/lib/catalogue/schema-loader.js.map +1 -1
- package/dist/lib/catalogue/validate.d.ts.map +1 -1
- package/dist/lib/catalogue/validate.js +24 -1
- package/dist/lib/catalogue/validate.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"products.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/products.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAYH;;;;GAIG;AACH,MAAM,0BAA0B,GAAgD;IAC9E,eAAe,EAAE,UAAU;IAC3B,oBAAoB,EAAE,UAAU;CACjC,CAAC;AAEF,MAAM,UAAU,aAAa,CAC3B,MAA2B;IAE3B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC1B,MAAM,SAAS,GAAG,0BAA0B,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEzD,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;QACrC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,SAAS,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YACxD,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,UAAU,EACV,wBAAwB,SAAS,4BAA4B,CAAC,CAAC,QAAQ,8BAA8B,CACtG,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,mEAAmE;QACnE,iEAAiE;QACjE,8DAA8D;QAC9D,iEAAiE;QACjE,mEAAmE;QACnE,gCAAgC;QAChC,QAAQ,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,UAAU,EACV,mDAAmD,CAAC,CAAC,QAAQ,kBAAkB,CAAC,CAAC,OAAO,+EAA+E,CACxK,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL;YACE,EAAE,EAAE,CAAC,CAAC,KAAK;YACX,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;YACxB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,QAAQ;YAChB,iBAAiB,EAAE,EAAE;YACrB,cAAc,EAAE,EAAE;YAClB,aAAa,EAAE,EAAE;YACjB,uBAAuB,EAAE,EAAE;YAC3B,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,aAAa,EAAE,EAAE;SAClB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACnE,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"products.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/products.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,9 +45,33 @@
|
|
|
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.
|
|
48
|
+
schema_version: "2.23.0"
|
|
49
49
|
schema_owner: "sdd-method"
|
|
50
50
|
schema_status: "canonical"
|
|
51
|
+
# Bump rationale (2.23.0 — additive minor, per the cross-SDD-linkage
|
|
52
|
+
# coordination item R5, 2026-06-13): adds an optional `external_for_profiles`
|
|
53
|
+
# array to FK rules and applies it to `capabilities.domain_id`. An app- or
|
|
54
|
+
# integration-product SDD legitimately names a platform-resident domain
|
|
55
|
+
# (ADR 0136: app/integration SDDs own no domains.csv rows), so the per-SDD
|
|
56
|
+
# build cannot resolve that FK locally — yet the platform SDD genuinely owns
|
|
57
|
+
# its domains and SHOULD keep the local check. `external_for_profiles:
|
|
58
|
+
# [application-product, integration-product]` makes the FK behave external
|
|
59
|
+
# (logged `[finding] external`, resolved at aggregation) ONLY for those
|
|
60
|
+
# profiles, staying internal for platform-profile. The required-empty check
|
|
61
|
+
# is unaffected — a capability must still NAME a domain regardless of profile.
|
|
62
|
+
# Backward-compatible — the field is optional and absent everywhere else;
|
|
63
|
+
# SCHEMA_COMPAT stays at "^2.0.0".
|
|
64
|
+
# Bump rationale (2.22.0 — additive minor, per the product-lifecycle
|
|
65
|
+
# coordination item, 2026-06-12): adds three nullable columns to `products`
|
|
66
|
+
# (and `applications` via the anchor): `lifecycle` (active | deprecated,
|
|
67
|
+
# default active — owner-declared product lifecycle from the SDD manifest's
|
|
68
|
+
# `lifecycle:` field, sdd-manifest-schema 1.1.0), `deprecated_date`, and
|
|
69
|
+
# `successor_sdd_id` (sdd_id vocabulary, soft reference — orphan-checked by
|
|
70
|
+
# the aggregator against contributing sdd_ids, never a hard FK; the successor
|
|
71
|
+
# may live outside the aggregation scope). `lifecycle` is deliberately a
|
|
72
|
+
# separate column from `status` (documentation maturity) — a product can be
|
|
73
|
+
# reviewed AND deprecated. Backward-compatible — older readers ignore them;
|
|
74
|
+
# SCHEMA_COMPAT stays at "^2.0.0".
|
|
51
75
|
# Bump rationale (2.20.0 — additive minor, per ADR 0175): adds a nullable,
|
|
52
76
|
# free-form `evidence_class` column to `capabilities`, `contracts`,
|
|
53
77
|
# `domain_models`, `entities`, `events` — an evidence-class marker for the
|
|
@@ -157,7 +181,7 @@ catalogues:
|
|
|
157
181
|
- { name: description, type: string, nullable: false }
|
|
158
182
|
- { name: method_profile, type: string, nullable: false, description: "platform-profile | application-product | integration-product." }
|
|
159
183
|
- { name: reference_architecture_equivalent, type: string, nullable: true }
|
|
160
|
-
- { name: status, type: string, nullable: false, description: "active | deferred | absent." }
|
|
184
|
+
- { name: status, type: string, nullable: false, description: "active | deferred | absent. The builder emits 'active' for every discovered domain directory — a domain that exists on disk is active by definition; deferred/absent rows have no authoring source yet (would come from roadmap/archetype declarations, not discovery)." }
|
|
161
185
|
- { name: repo_count, type: int, nullable: false }
|
|
162
186
|
- { name: source_sdd_id, type: string, nullable: true, description: "Originating SDD slug. Populated by the aggregator at merge time per ADR 0134; left empty by per-SDD builders." }
|
|
163
187
|
|
|
@@ -172,7 +196,10 @@ catalogues:
|
|
|
172
196
|
- { name: profile, type: string, nullable: false, description: "platform-profile | application-product | integration-product | support-repo." }
|
|
173
197
|
- { name: category, type: string, nullable: true, description: "Architectural classification per docs/method/methods/product-category-taxonomy.md. Values: platform-root | platform-subsystem | application-product | integration-provider | integration-umbrella | support-repo. Determines whether the Product gets a c4_systems row." }
|
|
174
198
|
- { name: doc_path, type: string, nullable: false, description: "Path to _product/ directory, relative to docs/." }
|
|
175
|
-
- { name: status, type: string, nullable: true, description: "scaffolded | populated | reviewed | ..." }
|
|
199
|
+
- { name: status, type: string, nullable: true, description: "scaffolded | populated | reviewed | ... Documentation maturity — distinct from lifecycle. NOTE: current builders emit 'active' (pre-2.22.0 vocabulary divergence, under triage — wire to real maturity data or re-document)." }
|
|
200
|
+
- { name: lifecycle, type: string, nullable: true, description: "active | deprecated (default active when empty). Owner-declared product lifecycle from the SDD manifest's lifecycle: field (sdd-manifest-schema 1.1.0). Distinct from status (documentation maturity) — a product can be reviewed AND deprecated. Added in 2.22.0." }
|
|
201
|
+
- { name: deprecated_date, type: date, nullable: true, description: "Date the deprecation decision took effect. Only meaningful when lifecycle=deprecated. From the manifest's deprecated_date:. Added in 2.22.0." }
|
|
202
|
+
- { name: successor_sdd_id, type: string, nullable: true, description: "For deprecated products: sdd_id of the superseding SDD. Same vocabulary as sdd_id/source_sdd_id (NOT products.id). Soft reference — the aggregator orphan-checks it against contributing sdd_ids ([finding] orphan when unresolved), never a hard FK: the successor may live outside the aggregation scope. Added in 2.22.0." }
|
|
176
203
|
- { name: synthesis_quality, type: int, nullable: true, description: "Score 0-10 from assessment block (reverse method only)." }
|
|
177
204
|
- { name: synthesis_band, type: string, nullable: true, description: "developing | working | strong." }
|
|
178
205
|
- { name: last_assessed, type: date, nullable: true }
|
|
@@ -285,7 +312,11 @@ catalogues:
|
|
|
285
312
|
capabilities:
|
|
286
313
|
primary_key: id
|
|
287
314
|
foreign_keys:
|
|
288
|
-
|
|
315
|
+
# external_for_profiles (2.23.0): app/integration capabilities name a
|
|
316
|
+
# platform-resident domain (ADR 0136) — resolve at aggregation for those
|
|
317
|
+
# profiles, keep the local check for platform-profile. Required-ness is
|
|
318
|
+
# unchanged: a capability must still name a domain (nullable: false).
|
|
319
|
+
- { column: domain_id, references: domains.id, nullable: false, external_for_profiles: [application-product, integration-product] }
|
|
289
320
|
- { column: parent_capability_id, references: capabilities.id, nullable: true }
|
|
290
321
|
columns:
|
|
291
322
|
- { name: id, type: string, nullable: false, description: "Capability slug." }
|
|
@@ -388,7 +419,7 @@ catalogues:
|
|
|
388
419
|
- { name: source_repo_id, type: string, nullable: true, description: "Repo owning the contract source. Distinct from exposing service's repo per ADR 0110 (sibling-repo pattern)." }
|
|
389
420
|
- { name: kind, type: string, nullable: false, description: "rest | graphql | rpc | event. rpc covers Proto/gRPC; event covers Avro schemas." }
|
|
390
421
|
- { name: version, type: string, nullable: true }
|
|
391
|
-
- { name: status, type: string, nullable: false, description: "active | deprecated. Default 'active'." }
|
|
422
|
+
- { name: status, type: string, nullable: false, description: "active | deprecated. Default 'active'. As of 2.22.0 the builder wires 'deprecated' from BASELINE.md deprecation-runway entries (contracts.{openapi|proto|avro}[].status, matched on path == spec_path; per ADR 0073 §4.8) when a BASELINE.md exists at the SDD root." }
|
|
392
423
|
- { name: spec_path, type: string, nullable: true }
|
|
393
424
|
- { name: visibility, type: string, nullable: true, description: "public | private | internal." }
|
|
394
425
|
- { name: context, type: string, nullable: true, description: "Bounded-context membership from OpenAPI `info.x-context` (per ADR 0170 §4.6). Free-form adopter label, orthogonal to the contract's domain folder. Not an FK. Empty when untagged. Added in schema 2.19.0." }
|
|
@@ -6,9 +6,12 @@
|
|
|
6
6
|
* - Internal FKs (external=false): every non-empty value MUST resolve
|
|
7
7
|
* to a primary-key in the referenced catalogue's emitted rows. Missing
|
|
8
8
|
* resolution is a hard failure.
|
|
9
|
-
* - External FKs (external=true
|
|
10
|
-
* `
|
|
11
|
-
*
|
|
9
|
+
* - External FKs (external=true, or external for the build's profile via
|
|
10
|
+
* `externalForProfiles` — schema 2.23.0): every non-empty value is logged
|
|
11
|
+
* as a `[finding] external` line and skipped from validation. The
|
|
12
|
+
* aggregator resolves these post-merge per ADR 0134 §4.5. A required
|
|
13
|
+
* (non-nullable) external FK still fails when EMPTY — the value must be
|
|
14
|
+
* named even if it resolves cross-SDD.
|
|
12
15
|
*
|
|
13
16
|
* Returns a structured result; the caller decides exit code + reporting.
|
|
14
17
|
*/
|
|
@@ -35,6 +38,15 @@ export interface FkValidationOptions {
|
|
|
35
38
|
* Defaults to false.
|
|
36
39
|
*/
|
|
37
40
|
readonly treatExternalAsInternal?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* The SDD profile being validated (schema 2.23.0). When set, an FK whose
|
|
43
|
+
* `externalForProfiles` includes this profile is treated as external for
|
|
44
|
+
* this build — resolved at aggregation rather than locally. Used by the
|
|
45
|
+
* per-SDD build/validate paths so e.g. an application-product's
|
|
46
|
+
* capabilities.domain_id (a platform-resident domain per ADR 0136) does
|
|
47
|
+
* not fail the local build. Ignored when treatExternalAsInternal is set.
|
|
48
|
+
*/
|
|
49
|
+
readonly profile?: string;
|
|
38
50
|
}
|
|
39
51
|
/**
|
|
40
52
|
* Build an in-memory map of every catalogue's primary-key set, then walk
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fk-validator.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/fk-validator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fk-validator.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/fk-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,SAAS,EAAE,CAAC;IAChD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAC3C;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EACvB,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,EAC7D,QAAQ,EAAE,WAAW,EACrB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CA4FpB"}
|
|
@@ -6,9 +6,12 @@
|
|
|
6
6
|
* - Internal FKs (external=false): every non-empty value MUST resolve
|
|
7
7
|
* to a primary-key in the referenced catalogue's emitted rows. Missing
|
|
8
8
|
* resolution is a hard failure.
|
|
9
|
-
* - External FKs (external=true
|
|
10
|
-
* `
|
|
11
|
-
*
|
|
9
|
+
* - External FKs (external=true, or external for the build's profile via
|
|
10
|
+
* `externalForProfiles` — schema 2.23.0): every non-empty value is logged
|
|
11
|
+
* as a `[finding] external` line and skipped from validation. The
|
|
12
|
+
* aggregator resolves these post-merge per ADR 0134 §4.5. A required
|
|
13
|
+
* (non-nullable) external FK still fails when EMPTY — the value must be
|
|
14
|
+
* named even if it resolves cross-SDD.
|
|
12
15
|
*
|
|
13
16
|
* Returns a structured result; the caller decides exit code + reporting.
|
|
14
17
|
*/
|
|
@@ -35,6 +38,13 @@ export function validateForeignKeys(schema, rowsByCatalogue, findings, options =
|
|
|
35
38
|
for (const cat of schema.catalogues) {
|
|
36
39
|
const rows = rowsByCatalogue.get(cat.name) ?? [];
|
|
37
40
|
for (const fk of cat.foreignKeys) {
|
|
41
|
+
// Effective-external (2.23.0): declared external OR external for the
|
|
42
|
+
// profile under build. Governs the resolution skip only — the
|
|
43
|
+
// required-empty check below stays keyed on the DECLARED `external` so
|
|
44
|
+
// a profile-external FK still requires a (cross-SDD) value to be named.
|
|
45
|
+
const effectiveExternal = fk.external ||
|
|
46
|
+
(options.profile !== undefined &&
|
|
47
|
+
(fk.externalForProfiles ?? []).includes(options.profile));
|
|
38
48
|
const [targetCat, targetCol] = fk.references.split(".");
|
|
39
49
|
if (!targetCat || !targetCol) {
|
|
40
50
|
throw new Error(`malformed FK reference "${fk.references}" on ${cat.name}.${fk.column}`);
|
|
@@ -60,7 +70,7 @@ export function validateForeignKeys(schema, rowsByCatalogue, findings, options =
|
|
|
60
70
|
}
|
|
61
71
|
const value = String(raw);
|
|
62
72
|
const resolved = targetPks.has(value);
|
|
63
|
-
if (
|
|
73
|
+
if (effectiveExternal && !options.treatExternalAsInternal) {
|
|
64
74
|
if (!resolved) {
|
|
65
75
|
// Per spec: optimistically resolve against own rows; only log when unresolved.
|
|
66
76
|
externalCount++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fk-validator.js","sourceRoot":"","sources":["../../../src/lib/catalogue/fk-validator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fk-validator.js","sourceRoot":"","sources":["../../../src/lib/catalogue/fk-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export declare const PROFILES: readonly ["platform-profile", "application-produc
|
|
|
10
10
|
export type Profile = (typeof PROFILES)[number];
|
|
11
11
|
export declare const CATEGORIES: readonly ["platform-root", "platform-subsystem", "application-product", "integration-provider", "integration-umbrella", "support-repo", "organisation-root"];
|
|
12
12
|
export type Category = (typeof CATEGORIES)[number];
|
|
13
|
+
export type Lifecycle = "active" | "deprecated";
|
|
13
14
|
export interface SddManifest {
|
|
14
15
|
readonly schemaVersion: string;
|
|
15
16
|
readonly sddId: string;
|
|
@@ -21,6 +22,12 @@ export interface SddManifest {
|
|
|
21
22
|
readonly description?: string;
|
|
22
23
|
/** Canonical C4 system id override; defaults to `{sddId}-system`. */
|
|
23
24
|
readonly c4SystemId?: string;
|
|
25
|
+
/** Owner-declared product lifecycle; absent means "active" (1.1.0). */
|
|
26
|
+
readonly lifecycle?: Lifecycle;
|
|
27
|
+
/** Date the deprecation took effect; meaningful only when lifecycle=deprecated. */
|
|
28
|
+
readonly deprecatedDate?: string;
|
|
29
|
+
/** sdd_id of the superseding SDD; meaningful only when lifecycle=deprecated. */
|
|
30
|
+
readonly successorSddId?: string;
|
|
24
31
|
/** Absolute path the manifest was read from (for error messages). */
|
|
25
32
|
readonly sourcePath: string;
|
|
26
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/manifest-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D,eAAO,MAAM,QAAQ,qHAMX,CAAC;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,eAAO,MAAM,UAAU,8JAQb,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/manifest-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D,eAAO,MAAM,QAAQ,qHAMX,CAAC;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,eAAO,MAAM,UAAU,8JAQb,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAqDnD,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,gFAAgF;IAChF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAmFtB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAejE"}
|
|
@@ -58,6 +58,23 @@ const ManifestSchema = z.object({
|
|
|
58
58
|
message: "c4_system_id must match /^[a-z][a-z0-9-]*$/",
|
|
59
59
|
})
|
|
60
60
|
.optional(),
|
|
61
|
+
// Owner-declared product lifecycle (sdd-manifest-schema 1.1.0). Absent
|
|
62
|
+
// means "active". Unknown values are a hard load failure, consistent with
|
|
63
|
+
// every other manifest enum — a typo'd lifecycle silently defaulting to
|
|
64
|
+
// active would recreate the exact false-active bug the field exists to fix.
|
|
65
|
+
lifecycle: z.enum(["active", "deprecated"]).optional(),
|
|
66
|
+
deprecated_date: z
|
|
67
|
+
.string()
|
|
68
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, {
|
|
69
|
+
message: "deprecated_date must be a YYYY-MM-DD date",
|
|
70
|
+
})
|
|
71
|
+
.optional(),
|
|
72
|
+
successor_sdd_id: z
|
|
73
|
+
.string()
|
|
74
|
+
.regex(/^[a-z][a-z0-9-]*$/, {
|
|
75
|
+
message: "successor_sdd_id must match /^[a-z][a-z0-9-]*$/ (sdd_id vocabulary)",
|
|
76
|
+
})
|
|
77
|
+
.optional(),
|
|
61
78
|
});
|
|
62
79
|
/**
|
|
63
80
|
* Read and validate the `.sdd/sdd-manifest.yaml` at the given SDD repo root.
|
|
@@ -130,6 +147,13 @@ export async function loadSddManifest(sddPath, options) {
|
|
|
130
147
|
? { aggregationManifestPath: parsed.data.aggregation_manifest_path }
|
|
131
148
|
: {}),
|
|
132
149
|
...(parsed.data.description !== undefined ? { description: parsed.data.description } : {}),
|
|
150
|
+
...(parsed.data.lifecycle !== undefined ? { lifecycle: parsed.data.lifecycle } : {}),
|
|
151
|
+
...(parsed.data.deprecated_date !== undefined
|
|
152
|
+
? { deprecatedDate: parsed.data.deprecated_date }
|
|
153
|
+
: {}),
|
|
154
|
+
...(parsed.data.successor_sdd_id !== undefined
|
|
155
|
+
? { successorSddId: parsed.data.successor_sdd_id }
|
|
156
|
+
: {}),
|
|
133
157
|
sourcePath,
|
|
134
158
|
};
|
|
135
159
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-loader.js","sourceRoot":"","sources":["../../../src/lib/catalogue/manifest-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEhF,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAE1D,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;IACrB,cAAc;IACd,sBAAsB;CACd,CAAC;AAGX,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,eAAe;IACf,oBAAoB;IACpB,qBAAqB;IACrB,sBAAsB;IACtB,sBAAsB;IACtB,cAAc;IACd,mBAAmB;CACX,CAAC;AAGX,MAAM,0BAA0B,GAAmD;IACjF,kBAAkB,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC;IAC3D,qBAAqB,EAAE,CAAC,qBAAqB,CAAC;IAC9C,qBAAqB,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IACvE,cAAc,EAAE,CAAC,cAAc,CAAC;IAChC,sBAAsB,EAAE,CAAC,mBAAmB,CAAC;CAC9C,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE;QAC5C,OAAO,EAAE,uCAAuC;KACjD,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IAC5B,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,KAAK,CAAC,mBAAmB,CAAC;SAC1B,QAAQ,EAAE;IACb,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,2EAA2E;IAC3E,2EAA2E;IAC3E,4EAA4E;IAC5E,sCAAsC;IACtC,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,KAAK,CAAC,mBAAmB,EAAE;QAC1B,OAAO,EAAE,6CAA6C;KACvD,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest-loader.js","sourceRoot":"","sources":["../../../src/lib/catalogue/manifest-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,17 @@ export interface ForeignKeyDef {
|
|
|
23
23
|
readonly references: string;
|
|
24
24
|
readonly nullable: boolean;
|
|
25
25
|
readonly external: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* SDD profiles for which this FK behaves as external (resolve at
|
|
28
|
+
* aggregation) even though `external` is false (schema 2.23.0). Empty when
|
|
29
|
+
* unset. Lets a single declaration be internal for the owning profile and
|
|
30
|
+
* external for cross-SDD consumers — e.g. capabilities.domain_id is internal
|
|
31
|
+
* for platform-profile but external for application/integration products
|
|
32
|
+
* that name a platform-resident domain (ADR 0136). The loader always
|
|
33
|
+
* populates it (`[]` when unset); optional in the type so hand-constructed
|
|
34
|
+
* FKs (tests, ad-hoc) need not specify it.
|
|
35
|
+
*/
|
|
36
|
+
readonly externalForProfiles?: readonly string[];
|
|
26
37
|
}
|
|
27
38
|
export interface CatalogueDef {
|
|
28
39
|
readonly name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/schema-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAA2C,CAAC;AAE7E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/schema-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAA2C,CAAC;AAE7E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;;;;;;;;OASG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,aAAa,EAAE,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,YAAY,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AA6CD,wBAAsB,mBAAmB,CACvC,UAAU,GAAE,MAA6B,GACxC,OAAO,CAAC,eAAe,CAAC,CAO1B;AAkDD,qDAAqD;AACrD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,GACX,YAAY,CAMd;AAED,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAMhF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../../../src/lib/catalogue/schema-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../../../src/lib/catalogue/schema-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/validate.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzC,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/validate.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzC,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CAyHzB"}
|
|
@@ -67,7 +67,16 @@ export async function runCatalogueValidate(inputs, write) {
|
|
|
67
67
|
}
|
|
68
68
|
rowsByCatalogue.set(cat.name, parsed.rows);
|
|
69
69
|
}
|
|
70
|
-
|
|
70
|
+
// Derive the SDD profile from products.csv so profile-external FKs (schema
|
|
71
|
+
// 2.23.0) resolve consistently with `catalogue build`. A per-SDD catalogue
|
|
72
|
+
// has one distinct profile → pass it (an app catalogue's capabilities.domain_id
|
|
73
|
+
// is then treated external, matching the build). An aggregated catalogue mixes
|
|
74
|
+
// profiles → leave undefined, so those FKs validate as internal and MUST
|
|
75
|
+
// resolve (the merged platform domains are present to satisfy them).
|
|
76
|
+
const profile = singleProfile(rowsByCatalogue.get("products") ?? []);
|
|
77
|
+
const fk = validateForeignKeys(schema, rowsByCatalogue, findings, {
|
|
78
|
+
...(profile !== undefined ? { profile } : {}),
|
|
79
|
+
});
|
|
71
80
|
// ADR 0155 advisory: WARN on non-canonical c4_containers.type in the
|
|
72
81
|
// existing catalogue (e.g. legacy Infrastructure rows not yet migrated).
|
|
73
82
|
checkContainerTypeAdvisory(schema, rowsByCatalogue, findings);
|
|
@@ -112,6 +121,20 @@ export async function runCatalogueValidate(inputs, write) {
|
|
|
112
121
|
* column order. Returns null if exactly equal (order included), or a
|
|
113
122
|
* one-line description of the drift otherwise.
|
|
114
123
|
*/
|
|
124
|
+
/**
|
|
125
|
+
* The single distinct non-empty `profile` across products rows, or undefined
|
|
126
|
+
* when there are zero or multiple (an aggregated catalogue). Drives
|
|
127
|
+
* profile-external FK handling (schema 2.23.0) — see the call site.
|
|
128
|
+
*/
|
|
129
|
+
function singleProfile(products) {
|
|
130
|
+
const profiles = new Set();
|
|
131
|
+
for (const p of products) {
|
|
132
|
+
const v = String(p["profile"] ?? "");
|
|
133
|
+
if (v !== "")
|
|
134
|
+
profiles.add(v);
|
|
135
|
+
}
|
|
136
|
+
return profiles.size === 1 ? [...profiles][0] : undefined;
|
|
137
|
+
}
|
|
115
138
|
function compareColumns(expected, actual) {
|
|
116
139
|
if (expected.length === actual.length) {
|
|
117
140
|
let equal = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/lib/catalogue/validate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/lib/catalogue/validate.ts"],"names":[],"mappings":"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"}
|