@sdd-method/sdd-cli 0.14.0 → 0.14.1
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.
|
@@ -7,12 +7,22 @@
|
|
|
7
7
|
* their own builds; the aggregator merges by primary key.
|
|
8
8
|
*
|
|
9
9
|
* domain_id selection (per ADR 0136):
|
|
10
|
-
* - manifest.domainId when declared,
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* -
|
|
14
|
-
*
|
|
15
|
-
*
|
|
10
|
+
* - For platform-profile SDDs: manifest.domainId when declared, else
|
|
11
|
+
* a sensible default for platform-profile categories (where a real
|
|
12
|
+
* `platform` domain exists locally).
|
|
13
|
+
* - For application-product / integration-product / support-repo
|
|
14
|
+
* SDDs: always empty. App and integration products do not have a
|
|
15
|
+
* primary domain — they are federation nodes that consume
|
|
16
|
+
* capabilities across multiple domains via product_capability. Any
|
|
17
|
+
* domain_id declared in the manifest of a non-platform SDD is
|
|
18
|
+
* typically the umbrella name (e.g. "applications", "integrations")
|
|
19
|
+
* used as a structural-organisation convention; that umbrella is
|
|
20
|
+
* not a domain row in any SDD's domains.csv (only platform-profile
|
|
21
|
+
* SDDs emit domain rows post-v0.14.0), so propagating it would
|
|
22
|
+
* produce a dangling FK reference.
|
|
23
|
+
*
|
|
24
|
+
* When such a manifest declaration is present, we clear the field
|
|
25
|
+
* and emit an "inferred" finding so the override is traceable.
|
|
16
26
|
*/
|
|
17
27
|
import type { CatalogueRow } from "../csv-writer.js";
|
|
18
28
|
import type { FindingsLog } from "../findings.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/products.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/products.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;CAChC;AAYD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,mBAAmB,GAC1B,YAAY,EAAE,CA+ChB"}
|
|
@@ -7,12 +7,22 @@
|
|
|
7
7
|
* their own builds; the aggregator merges by primary key.
|
|
8
8
|
*
|
|
9
9
|
* domain_id selection (per ADR 0136):
|
|
10
|
-
* - manifest.domainId when declared,
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* -
|
|
14
|
-
*
|
|
15
|
-
*
|
|
10
|
+
* - For platform-profile SDDs: manifest.domainId when declared, else
|
|
11
|
+
* a sensible default for platform-profile categories (where a real
|
|
12
|
+
* `platform` domain exists locally).
|
|
13
|
+
* - For application-product / integration-product / support-repo
|
|
14
|
+
* SDDs: always empty. App and integration products do not have a
|
|
15
|
+
* primary domain — they are federation nodes that consume
|
|
16
|
+
* capabilities across multiple domains via product_capability. Any
|
|
17
|
+
* domain_id declared in the manifest of a non-platform SDD is
|
|
18
|
+
* typically the umbrella name (e.g. "applications", "integrations")
|
|
19
|
+
* used as a structural-organisation convention; that umbrella is
|
|
20
|
+
* not a domain row in any SDD's domains.csv (only platform-profile
|
|
21
|
+
* SDDs emit domain rows post-v0.14.0), so propagating it would
|
|
22
|
+
* produce a dangling FK reference.
|
|
23
|
+
*
|
|
24
|
+
* When such a manifest declaration is present, we clear the field
|
|
25
|
+
* and emit an "inferred" finding so the override is traceable.
|
|
16
26
|
*/
|
|
17
27
|
/**
|
|
18
28
|
* Default domain_id per category when the manifest doesn't declare one.
|
|
@@ -26,9 +36,25 @@ const DEFAULT_DOMAIN_BY_CATEGORY = {
|
|
|
26
36
|
export function buildProducts(inputs) {
|
|
27
37
|
const m = inputs.manifest;
|
|
28
38
|
const defaulted = DEFAULT_DOMAIN_BY_CATEGORY[m.category];
|
|
29
|
-
|
|
30
|
-
if (m.
|
|
31
|
-
|
|
39
|
+
let domainId;
|
|
40
|
+
if (m.profile === "platform-profile") {
|
|
41
|
+
domainId = m.domainId ?? defaulted ?? "";
|
|
42
|
+
if (m.domainId === undefined && defaulted !== undefined) {
|
|
43
|
+
inputs.findings.add("inferred", `products: domain_id="${defaulted}" inferred from category=${m.category} (manifest had no domain_id)`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Per ADR 0136: app/integration/support products do not have a
|
|
48
|
+
// primary domain. Even if the manifest declares one (typically the
|
|
49
|
+
// umbrella name like "applications" or "integrations"), clear it
|
|
50
|
+
// here so the products.domain_id FK reference does not dangle
|
|
51
|
+
// against domains.csv (which only platform-profile SDDs populate
|
|
52
|
+
// post-v0.14.0). Emit a finding when the manifest declared a value
|
|
53
|
+
// so the override is traceable.
|
|
54
|
+
domainId = "";
|
|
55
|
+
if (m.domainId !== undefined && m.domainId.length > 0) {
|
|
56
|
+
inputs.findings.add("inferred", `products: domain_id cleared (manifest declared "${m.domainId}") for profile=${m.profile} per ADR 0136 — app/integration/support products do not have a primary domain`);
|
|
57
|
+
}
|
|
32
58
|
}
|
|
33
59
|
return [
|
|
34
60
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"products.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/products.ts"],"names":[],"mappings":"AAAA
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sdd-method/sdd-cli",
|
|
3
|
-
"version": "0.14.
|
|
4
|
-
"description": "Method-layer CLI for SDD repository lifecycle — init, sync, validate, list, plan, generate-claude-md, mcp serve, catalogue {build,aggregate,validate,version}. v0.14.0 ships two post-v0.9.0-release fixes surfaced by the connect-cohort sync: (1) sync now enforces minimum_sdd_cli_version declared by bundle manifests — previously the orchestration check existed only in the shell sync script and was a no-op when adopters used `sdd-cli sync`, leaving the safety net for stale-CLI scenarios silently absent; (2) per ADR 0136 (App and Integration Products Do Not Belong to a Primary Domain), the domains.ts catalogue builder now skips row emission for non-platform-profile SDDs — application-product and integration-product SDDs that have a docs/domains/<umbrella>/ subdirectory as a structural-organisation convention no longer emit a member-declaration row that collides on PK at aggregation against the canonical platform-profile contribution. v0.13.2 fixed the aggregator's sibling-vendored-schema cross-check to use semver range satisfaction against SCHEMA_COMPAT.catalogue_schema (^2.0.0) instead of strict equality — siblings vendored at lower minor versions inside the same major are now accepted, unblocking aggregation across federated cohorts where the canonical schema is ahead of the bundled schema. v0.13.0 ships the feature-tree.md bullet parser per sdd-method schema 2.2.0 + plan extract-feature-tree-bullets.md: application-product builders now emit features.csv rows with source: \"feature-tree\" from per-app feature-tree.md bullets, populating the previously-empty edge catalogues (persona_feature, journey_feature) for portfolio monoliths whose feature inventory lives in the bullet form. Adds the optional runway column on features.csv with adopter-owned controlled-vocabulary validation via feature-runway-vocabulary.yaml at the SDD root. v0.12.2 dedupes equivalent unmarked adopter PreToolUse entries on settings.json upsert. v0.12.0 extends the integration profileType enum to 11 values (per sdd-method ADR 0137) and fixes the init→sync conflict. v0.11.0 shipped the canonical catalogue surface per ADR 0134 + schema 2.1.0.",
|
|
3
|
+
"version": "0.14.1",
|
|
4
|
+
"description": "Method-layer CLI for SDD repository lifecycle — init, sync, validate, list, plan, generate-claude-md, mcp serve, catalogue {build,aggregate,validate,version}. v0.14.1 patches v0.14.0's domains-builder fix: products-builder now also clears domain_id for non-platform-profile rows even when manifest.domainId is declared. v0.14.0 stopped emitting umbrella domain rows but products.domain_id (and the applications.csv filtered view) still pointed at them, dangling at FK validation. Per ADR 0136 + schema description for products.domain_id, app/integration/support products do not have a primary domain — the builder now honours that statement regardless of manifest declaration, and emits an inferred finding when a manifest-declared value is overridden. v0.14.0 ships two post-v0.9.0-release fixes surfaced by the connect-cohort sync: (1) sync now enforces minimum_sdd_cli_version declared by bundle manifests — previously the orchestration check existed only in the shell sync script and was a no-op when adopters used `sdd-cli sync`, leaving the safety net for stale-CLI scenarios silently absent; (2) per ADR 0136 (App and Integration Products Do Not Belong to a Primary Domain), the domains.ts catalogue builder now skips row emission for non-platform-profile SDDs — application-product and integration-product SDDs that have a docs/domains/<umbrella>/ subdirectory as a structural-organisation convention no longer emit a member-declaration row that collides on PK at aggregation against the canonical platform-profile contribution. v0.13.2 fixed the aggregator's sibling-vendored-schema cross-check to use semver range satisfaction against SCHEMA_COMPAT.catalogue_schema (^2.0.0) instead of strict equality — siblings vendored at lower minor versions inside the same major are now accepted, unblocking aggregation across federated cohorts where the canonical schema is ahead of the bundled schema. v0.13.0 ships the feature-tree.md bullet parser per sdd-method schema 2.2.0 + plan extract-feature-tree-bullets.md: application-product builders now emit features.csv rows with source: \"feature-tree\" from per-app feature-tree.md bullets, populating the previously-empty edge catalogues (persona_feature, journey_feature) for portfolio monoliths whose feature inventory lives in the bullet form. Adds the optional runway column on features.csv with adopter-owned controlled-vocabulary validation via feature-runway-vocabulary.yaml at the SDD root. v0.12.2 dedupes equivalent unmarked adopter PreToolUse entries on settings.json upsert. v0.12.0 extends the integration profileType enum to 11 values (per sdd-method ADR 0137) and fixes the init→sync conflict. v0.11.0 shipped the canonical catalogue surface per ADR 0134 + schema 2.1.0.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sdd-method",
|
|
7
7
|
"sdd",
|