@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.
- package/README.md +30 -10
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-harness.d.ts +20 -0
- package/dist/lib/agent-harness.d.ts.map +1 -0
- package/dist/lib/agent-harness.js +28 -0
- package/dist/lib/agent-harness.js.map +1 -0
- package/dist/lib/briefing/index.d.ts +15 -0
- package/dist/lib/briefing/index.d.ts.map +1 -0
- package/dist/lib/briefing/index.js +13 -0
- package/dist/lib/briefing/index.js.map +1 -0
- package/dist/lib/briefing/render.d.ts +57 -0
- package/dist/lib/briefing/render.d.ts.map +1 -0
- package/dist/lib/briefing/render.js +112 -0
- package/dist/lib/briefing/render.js.map +1 -0
- package/dist/lib/briefing/variables.d.ts +49 -0
- package/dist/lib/briefing/variables.d.ts.map +1 -0
- package/dist/lib/briefing/variables.js +92 -0
- package/dist/lib/briefing/variables.js.map +1 -0
- package/dist/lib/catalogue/aggregate.d.ts +19 -0
- package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
- package/dist/lib/catalogue/aggregate.js +88 -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 +78 -4
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/c4-containers.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/c4-containers.js +15 -0
- package/dist/lib/catalogue/builders/c4-containers.js.map +1 -1
- package/dist/lib/catalogue/builders/capabilities.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/capabilities.js +18 -4
- package/dist/lib/catalogue/builders/capabilities.js.map +1 -1
- package/dist/lib/catalogue/builders/capability-spec-walker.d.ts +55 -0
- package/dist/lib/catalogue/builders/capability-spec-walker.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/capability-spec-walker.js +99 -0
- package/dist/lib/catalogue/builders/capability-spec-walker.js.map +1 -0
- package/dist/lib/catalogue/builders/capability-spec.d.ts +51 -0
- package/dist/lib/catalogue/builders/capability-spec.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/capability-spec.js +276 -0
- package/dist/lib/catalogue/builders/capability-spec.js.map +1 -0
- package/dist/lib/catalogue/builders/contracts.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/contracts.js +88 -41
- package/dist/lib/catalogue/builders/contracts.js.map +1 -1
- package/dist/lib/catalogue/builders/feature-subscription-channels.d.ts +12 -0
- package/dist/lib/catalogue/builders/feature-subscription-channels.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/feature-subscription-channels.js +197 -0
- package/dist/lib/catalogue/builders/feature-subscription-channels.js.map +1 -0
- package/dist/lib/catalogue/builders/index.d.ts +8 -0
- package/dist/lib/catalogue/builders/index.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/index.js +4 -0
- package/dist/lib/catalogue/builders/index.js.map +1 -1
- package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts +10 -0
- package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/product-platform-dependencies.js +155 -0
- package/dist/lib/catalogue/builders/product-platform-dependencies.js.map +1 -0
- package/dist/lib/catalogue/builders/service-contract-consumes.d.ts +24 -0
- package/dist/lib/catalogue/builders/service-contract-consumes.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/service-contract-consumes.js +173 -0
- package/dist/lib/catalogue/builders/service-contract-consumes.js.map +1 -0
- package/dist/lib/catalogue/canonical-schema.yaml +100 -5
- package/dist/lib/catalogue/service-contract-aliases-loader.d.ts +60 -0
- package/dist/lib/catalogue/service-contract-aliases-loader.d.ts.map +1 -0
- package/dist/lib/catalogue/service-contract-aliases-loader.js +109 -0
- package/dist/lib/catalogue/service-contract-aliases-loader.js.map +1 -0
- package/dist/lib/catalogue/traceability-loader.d.ts +17 -0
- package/dist/lib/catalogue/traceability-loader.d.ts.map +1 -1
- package/dist/lib/catalogue/traceability-loader.js +6 -0
- package/dist/lib/catalogue/traceability-loader.js.map +1 -1
- package/dist/lib/generate-briefing/index.d.ts +22 -0
- package/dist/lib/generate-briefing/index.d.ts.map +1 -0
- package/dist/lib/generate-briefing/index.js +77 -0
- package/dist/lib/generate-briefing/index.js.map +1 -0
- package/dist/lib/hooks-seed/copilot.d.ts +93 -0
- package/dist/lib/hooks-seed/copilot.d.ts.map +1 -0
- package/dist/lib/hooks-seed/copilot.js +167 -0
- package/dist/lib/hooks-seed/copilot.js.map +1 -0
- package/dist/lib/hooks-seed/index.d.ts +4 -0
- package/dist/lib/hooks-seed/index.d.ts.map +1 -1
- package/dist/lib/hooks-seed/index.js +2 -0
- package/dist/lib/hooks-seed/index.js.map +1 -1
- package/dist/lib/hooks-seed/lifecycle-mapping.d.ts +12 -0
- package/dist/lib/hooks-seed/lifecycle-mapping.d.ts.map +1 -0
- package/dist/lib/hooks-seed/lifecycle-mapping.js +28 -0
- package/dist/lib/hooks-seed/lifecycle-mapping.js.map +1 -0
- package/dist/lib/init/index.d.ts +6 -4
- package/dist/lib/init/index.d.ts.map +1 -1
- package/dist/lib/init/index.js +5 -26
- package/dist/lib/init/index.js.map +1 -1
- package/dist/lib/init/platform.d.ts +9 -0
- package/dist/lib/init/platform.d.ts.map +1 -1
- package/dist/lib/init/platform.js +8 -2
- package/dist/lib/init/platform.js.map +1 -1
- package/dist/lib/sync/briefing-merge.d.ts +34 -0
- package/dist/lib/sync/briefing-merge.d.ts.map +1 -0
- package/dist/lib/sync/briefing-merge.js +82 -0
- package/dist/lib/sync/briefing-merge.js.map +1 -0
- package/dist/lib/sync/copilot-hooks-merge.d.ts +30 -0
- package/dist/lib/sync/copilot-hooks-merge.d.ts.map +1 -0
- package/dist/lib/sync/copilot-hooks-merge.js +96 -0
- package/dist/lib/sync/copilot-hooks-merge.js.map +1 -0
- package/dist/lib/sync/index.d.ts +8 -3
- package/dist/lib/sync/index.d.ts.map +1 -1
- package/dist/lib/sync/index.js +63 -23
- package/dist/lib/sync/index.js.map +1 -1
- package/dist/verbs/generate-briefing.d.ts +3 -0
- package/dist/verbs/generate-briefing.d.ts.map +1 -0
- package/dist/verbs/generate-briefing.js +28 -0
- package/dist/verbs/generate-briefing.js.map +1 -0
- package/dist/verbs/init.d.ts.map +1 -1
- package/dist/verbs/init.js +11 -8
- package/dist/verbs/init.js.map +1 -1
- package/dist/verbs/sync.d.ts.map +1 -1
- package/dist/verbs/sync.js +11 -4
- package/dist/verbs/sync.js.map +1 -1
- 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":"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"}
|
|
@@ -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.
|
|
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;
|
|
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":"AAAA,8EAA8E;AAC9E,mCAAmC;AACnC,EAAE;AACF,wEAAwE;AACxE,qEAAqE;AACrE,+DAA+D;AAC/D,uEAAuE;AACvE,kEAAkE;AAClE,EAAE;AACF,uFAAuF;AACvF,8DAA8D;AAE9D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAG1C,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;
|
|
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
|