@sdd-method/sdd-cli 1.37.0 → 1.39.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 +2 -2
- package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
- package/dist/lib/catalogue/aggregate.js +13 -1
- package/dist/lib/catalogue/aggregate.js.map +1 -1
- package/dist/lib/catalogue/build.d.ts +3 -0
- package/dist/lib/catalogue/build.d.ts.map +1 -1
- package/dist/lib/catalogue/build.js +84 -1
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/data-items.d.ts +37 -0
- package/dist/lib/catalogue/builders/data-items.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/data-items.js +326 -0
- package/dist/lib/catalogue/builders/data-items.js.map +1 -0
- package/dist/lib/catalogue/builders/events.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/events.js +27 -2
- package/dist/lib/catalogue/builders/events.js.map +1 -1
- package/dist/lib/catalogue/builders/evidence-target-repo.d.ts +4 -0
- package/dist/lib/catalogue/builders/evidence-target-repo.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/evidence-target-repo.js +67 -0
- package/dist/lib/catalogue/builders/evidence-target-repo.js.map +1 -0
- package/dist/lib/catalogue/builders/feature-tree-walker.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/feature-tree-walker.js +38 -1
- package/dist/lib/catalogue/builders/feature-tree-walker.js.map +1 -1
- package/dist/lib/catalogue/builders/quality-scores.d.ts +13 -0
- package/dist/lib/catalogue/builders/quality-scores.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/quality-scores.js +39 -0
- package/dist/lib/catalogue/builders/quality-scores.js.map +1 -1
- package/dist/lib/catalogue/canonical-schema.yaml +257 -1
- package/dist/lib/catalogue/data-item-coverage.d.ts +13 -0
- package/dist/lib/catalogue/data-item-coverage.d.ts.map +1 -0
- package/dist/lib/catalogue/data-item-coverage.js +142 -0
- package/dist/lib/catalogue/data-item-coverage.js.map +1 -0
- package/dist/lib/catalogue/graph-projection.d.ts.map +1 -1
- package/dist/lib/catalogue/graph-projection.js +3 -0
- package/dist/lib/catalogue/graph-projection.js.map +1 -1
- package/dist/lib/catalogue/platform-scope.d.ts +2 -0
- package/dist/lib/catalogue/platform-scope.d.ts.map +1 -0
- package/dist/lib/catalogue/platform-scope.js +7 -0
- package/dist/lib/catalogue/platform-scope.js.map +1 -0
- package/dist/lib/catalogue/rubric-coverage-map.yaml +50 -0
- package/dist/lib/catalogue/validate.d.ts.map +1 -1
- package/dist/lib/catalogue/validate.js +29 -5
- package/dist/lib/catalogue/validate.js.map +1 -1
- package/dist/lib/conformance/index.d.ts +6 -0
- package/dist/lib/conformance/index.d.ts.map +1 -1
- package/dist/lib/conformance/index.js +28 -2
- package/dist/lib/conformance/index.js.map +1 -1
- package/dist/lib/mcp/workspace.d.ts +7 -1
- package/dist/lib/mcp/workspace.d.ts.map +1 -1
- package/dist/lib/mcp/workspace.js +19 -2
- package/dist/lib/mcp/workspace.js.map +1 -1
- package/dist/lib/metamodel/rule-ids.d.ts.map +1 -1
- package/dist/lib/metamodel/rule-ids.js +3 -0
- package/dist/lib/metamodel/rule-ids.js.map +1 -1
- package/dist/lib/sync/settings-merge.d.ts.map +1 -1
- package/dist/lib/sync/settings-merge.js +19 -29
- package/dist/lib/sync/settings-merge.js.map +1 -1
- package/package.json +4 -3
- package/scripts/build-verify-package.mjs +13 -2
- package/scripts/copy-yaml-assets.mjs +1 -1
- package/scripts/verify-version.json +4 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
// Data items, supply and demand (M-ADR 0216).
|
|
2
|
+
//
|
|
3
|
+
// data_items ← docs/platform/reference/data-items.yaml (platform-owned, like events)
|
|
4
|
+
// integration_data_item ← the integration's feature-grounding.md:
|
|
5
|
+
// every table with a "Data Item" column anywhere in the
|
|
6
|
+
// "Provider-to-Canonical Field Mapping" section (sub-headings
|
|
7
|
+
// included, up to the next `##`) → supported, or partial when
|
|
8
|
+
// its Notes begin with `partial`; and the "Data Items Not
|
|
9
|
+
// Supplied" section → the verdict it states.
|
|
10
|
+
// feature_data_requirement ← a "Data Requirements" table in a feature spec (the spec's own
|
|
11
|
+
// feature) or in the feature tree (a Feature column, by id or
|
|
12
|
+
// bullet slug — tree features have no spec file).
|
|
13
|
+
//
|
|
14
|
+
// `unknown` is never written: it is the reading of no row. A placeholder or an empty cell
|
|
15
|
+
// declares nothing — a row is evidence only when it names an item.
|
|
16
|
+
import { readFile } from "node:fs/promises";
|
|
17
|
+
import { join, relative } from "node:path";
|
|
18
|
+
import { parse as parseYaml } from "yaml";
|
|
19
|
+
import { findIntegrationGroundingFile } from "./feature-grounding-walker.js";
|
|
20
|
+
import { findFeatureTreeFile } from "./feature-tree-walker.js";
|
|
21
|
+
export const DATA_ITEMS_FILE_REL = join("docs", "platform", "reference", "data-items.yaml");
|
|
22
|
+
const SUPPLY_VERDICTS = new Set(["supported", "partial", "source-absent", "gateway-gap", "not-applicable"]);
|
|
23
|
+
const NOT_SUPPLIED_VERDICTS = new Set(["partial", "source-absent", "gateway-gap", "not-applicable"]);
|
|
24
|
+
const POSITIVE = new Set(["supported", "partial"]);
|
|
25
|
+
const BASES = new Set(["code", "grounded", "declared", "inferred"]);
|
|
26
|
+
const NECESSITIES = new Set(["required", "enhances"]);
|
|
27
|
+
// ------------------------------------------------------------------ entity
|
|
28
|
+
export async function buildDataItems(sddPath, findings) {
|
|
29
|
+
let raw;
|
|
30
|
+
try {
|
|
31
|
+
raw = await readFile(join(sddPath, DATA_ITEMS_FILE_REL), "utf-8");
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
let doc;
|
|
37
|
+
try {
|
|
38
|
+
doc = parseYaml(raw);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
findings.add("convention", `${DATA_ITEMS_FILE_REL}: failed to parse YAML — ${err.message}`, "error");
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
const items = doc?.data_items;
|
|
45
|
+
if (!Array.isArray(items)) {
|
|
46
|
+
findings.add("convention", `${DATA_ITEMS_FILE_REL}: expected a top-level \`data_items:\` list — no data items read`);
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
const rows = [];
|
|
50
|
+
const seen = new Set();
|
|
51
|
+
for (const it of items) {
|
|
52
|
+
const o = (it ?? {});
|
|
53
|
+
const id = String(o["id"] ?? "").trim();
|
|
54
|
+
const name = String(o["name"] ?? "").trim();
|
|
55
|
+
const category = String(o["category"] ?? "").trim();
|
|
56
|
+
if (id === "" || name === "" || category === "") {
|
|
57
|
+
findings.add("convention", `${DATA_ITEMS_FILE_REL}: a data item lacks id, name or category — skipped`);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (seen.has(id)) {
|
|
61
|
+
findings.add("divergence", `${DATA_ITEMS_FILE_REL}: data item ${id} declared twice — first kept`);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
seen.add(id);
|
|
65
|
+
rows.push({
|
|
66
|
+
id,
|
|
67
|
+
name,
|
|
68
|
+
category,
|
|
69
|
+
canonical_field: String(o["canonical_field"] ?? "").trim(),
|
|
70
|
+
description: String(o["description"] ?? "").trim(),
|
|
71
|
+
source_sdd_id: "",
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return rows;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The tables in the `##` section whose heading matches `section`, sub-headings included, up
|
|
78
|
+
* to the next heading of level ≤ 2. Each table carries the governing `Checked:` line: the
|
|
79
|
+
* nearest one set at its own heading level or above, cleared by the next heading of the same
|
|
80
|
+
* or higher level.
|
|
81
|
+
*/
|
|
82
|
+
export function tablesInSection(text, section) {
|
|
83
|
+
const lines = text.split(/\r?\n/);
|
|
84
|
+
const out = [];
|
|
85
|
+
let inSection = false;
|
|
86
|
+
let inFence = false;
|
|
87
|
+
let level = 0; // level of the most recent heading inside the section
|
|
88
|
+
const checkedAtLevel = new Map();
|
|
89
|
+
let i = 0;
|
|
90
|
+
while (i < lines.length) {
|
|
91
|
+
const line = lines[i];
|
|
92
|
+
const t = line.trim();
|
|
93
|
+
if (t.startsWith("```")) {
|
|
94
|
+
inFence = !inFence;
|
|
95
|
+
i++;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (inFence) {
|
|
99
|
+
i++;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const h = /^(#{1,6})\s+(.*)$/.exec(t);
|
|
103
|
+
if (h) {
|
|
104
|
+
const lv = h[1].length;
|
|
105
|
+
if (lv <= 2) {
|
|
106
|
+
inSection = lv === 2 && section.test(h[2].trim());
|
|
107
|
+
checkedAtLevel.clear();
|
|
108
|
+
}
|
|
109
|
+
for (const k of [...checkedAtLevel.keys()])
|
|
110
|
+
if (k >= lv)
|
|
111
|
+
checkedAtLevel.delete(k);
|
|
112
|
+
level = lv;
|
|
113
|
+
i++;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (!inSection) {
|
|
117
|
+
i++;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (/^Checked:/i.test(t)) {
|
|
121
|
+
checkedAtLevel.set(level, t.replace(/^Checked:\s*/i, "").trim());
|
|
122
|
+
i++;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (t.startsWith("|") && i + 1 < lines.length && /^\|?\s*:?-{2,}/.test(lines[i + 1].trim())) {
|
|
126
|
+
const headers = splitRow(t).map((c) => c.toLowerCase());
|
|
127
|
+
const rows = [];
|
|
128
|
+
let j = i + 2;
|
|
129
|
+
while (j < lines.length && lines[j].trim().startsWith("|")) {
|
|
130
|
+
rows.push({ cells: splitRow(lines[j].trim()), line: j + 1 });
|
|
131
|
+
j++;
|
|
132
|
+
}
|
|
133
|
+
let checkedAt = "";
|
|
134
|
+
for (let lv = level; lv >= 1; lv--) {
|
|
135
|
+
const c = checkedAtLevel.get(lv);
|
|
136
|
+
if (c !== undefined) {
|
|
137
|
+
checkedAt = c;
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
out.push({ headers, rows, checkedAt });
|
|
142
|
+
i = j;
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
i++;
|
|
146
|
+
}
|
|
147
|
+
return out;
|
|
148
|
+
}
|
|
149
|
+
function splitRow(row) {
|
|
150
|
+
const inner = row.replace(/^\|/, "").replace(/\|\s*$/, "");
|
|
151
|
+
return inner.split("|").map((c) => c.trim());
|
|
152
|
+
}
|
|
153
|
+
/** A cell that names something: not empty, not a dash, not a `{placeholder}`. Backticks dropped. */
|
|
154
|
+
function named(cell) {
|
|
155
|
+
const v = (cell ?? "").replace(/`/g, "").trim();
|
|
156
|
+
if (v === "" || /^[-—–]+$/.test(v) || v.includes("{"))
|
|
157
|
+
return "";
|
|
158
|
+
return v;
|
|
159
|
+
}
|
|
160
|
+
function col(headers, name) {
|
|
161
|
+
return headers.indexOf(name);
|
|
162
|
+
}
|
|
163
|
+
export async function buildIntegrationSupply(inputs) {
|
|
164
|
+
if (inputs.integrationId === "")
|
|
165
|
+
return [];
|
|
166
|
+
const path = await findIntegrationGroundingFile(inputs.sddPath);
|
|
167
|
+
if (!path)
|
|
168
|
+
return [];
|
|
169
|
+
const rel = relative(inputs.sddPath, path);
|
|
170
|
+
const text = await readFile(path, "utf-8");
|
|
171
|
+
const rows = [];
|
|
172
|
+
const add = (item, verdict, basis, evidence, checkedAt) => {
|
|
173
|
+
rows.push({
|
|
174
|
+
id: `${inputs.integrationId}::${item}::${evidence}`,
|
|
175
|
+
integration_id: inputs.integrationId,
|
|
176
|
+
data_item_id: item,
|
|
177
|
+
verdict,
|
|
178
|
+
basis,
|
|
179
|
+
evidence_ref: evidence,
|
|
180
|
+
checked_at: checkedAt,
|
|
181
|
+
source_sdd_id: "",
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
for (const tbl of tablesInSection(text, /^Provider-to-Canonical Field Mapping\b/i)) {
|
|
185
|
+
const di = col(tbl.headers, "data item");
|
|
186
|
+
if (di < 0)
|
|
187
|
+
continue;
|
|
188
|
+
const notes = col(tbl.headers, "notes");
|
|
189
|
+
const basisCol = col(tbl.headers, "basis");
|
|
190
|
+
for (const r of tbl.rows) {
|
|
191
|
+
const item = named(r.cells[di]);
|
|
192
|
+
if (item === "")
|
|
193
|
+
continue;
|
|
194
|
+
const verdict = notes >= 0 && /^partial\b/i.test(r.cells[notes] ?? "") ? "partial" : "supported";
|
|
195
|
+
add(item, verdict, basisOf(r.cells[basisCol], rel, r.line, inputs.findings), `${rel}:${r.line}`, tbl.checkedAt);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
for (const tbl of tablesInSection(text, /^Data Items Not Supplied\b/i)) {
|
|
199
|
+
const di = col(tbl.headers, "data item");
|
|
200
|
+
const vc = col(tbl.headers, "verdict");
|
|
201
|
+
if (di < 0 || vc < 0) {
|
|
202
|
+
inputs.findings.add("convention", `${rel}: a "Data Items Not Supplied" table needs Data Item and Verdict columns — table skipped`);
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
const basisCol = col(tbl.headers, "basis");
|
|
206
|
+
const evCol = col(tbl.headers, "evidence");
|
|
207
|
+
for (const r of tbl.rows) {
|
|
208
|
+
const item = named(r.cells[di]);
|
|
209
|
+
if (item === "")
|
|
210
|
+
continue;
|
|
211
|
+
const verdict = named(r.cells[vc]).toLowerCase();
|
|
212
|
+
if (!NOT_SUPPLIED_VERDICTS.has(verdict)) {
|
|
213
|
+
inputs.findings.add("convention", `${rel}:${r.line}: data item ${item} — verdict "${verdict}" is not one of ${[...NOT_SUPPLIED_VERDICTS].join(", ")} (a supplied item belongs in the mapping table; unknown is never written) — row skipped`);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const ev = named(r.cells[evCol]) || `${rel}:${r.line}`;
|
|
217
|
+
add(item, verdict, basisOf(r.cells[basisCol], rel, r.line, inputs.findings), ev, tbl.checkedAt);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// @rule gate-supply-contradiction
|
|
221
|
+
// Several rows per item are normal; a positive and a negative row for one item contradict.
|
|
222
|
+
const byItem = new Map();
|
|
223
|
+
for (const r of rows)
|
|
224
|
+
byItem.set(String(r["data_item_id"]), [...(byItem.get(String(r["data_item_id"])) ?? []), r]);
|
|
225
|
+
for (const [item, rs] of byItem) {
|
|
226
|
+
const pos = rs.filter((r) => POSITIVE.has(String(r["verdict"])));
|
|
227
|
+
const neg = rs.filter((r) => !POSITIVE.has(String(r["verdict"])));
|
|
228
|
+
if (pos.length && neg.length) {
|
|
229
|
+
inputs.findings.add("divergence", `${rel}: data item ${item} is stated both supplied (${pos.map((r) => `${r["verdict"]} @ ${r["evidence_ref"]}`).join("; ")}) and not supplied (${neg.map((r) => `${r["verdict"]} @ ${r["evidence_ref"]}`).join("; ")}) — resolve one; coverage never picks a winner between them (M-ADR 0216 §4.2)`, "error", `data_item:${item}`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return dedupe(rows);
|
|
233
|
+
}
|
|
234
|
+
function basisOf(cell, rel, line, findings) {
|
|
235
|
+
const b = named(cell).toLowerCase();
|
|
236
|
+
if (b === "")
|
|
237
|
+
return "";
|
|
238
|
+
if (!BASES.has(b)) {
|
|
239
|
+
findings.add("convention", `${rel}:${line}: basis "${b}" is not one of ${[...BASES].join(", ")} — left empty`);
|
|
240
|
+
return "";
|
|
241
|
+
}
|
|
242
|
+
return b;
|
|
243
|
+
}
|
|
244
|
+
function dedupe(rows) {
|
|
245
|
+
const seen = new Set();
|
|
246
|
+
return rows.filter((r) => {
|
|
247
|
+
const k = String(r["id"]);
|
|
248
|
+
if (seen.has(k))
|
|
249
|
+
return false;
|
|
250
|
+
seen.add(k);
|
|
251
|
+
return true;
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
export async function buildFeatureDemand(inputs) {
|
|
255
|
+
const rows = [];
|
|
256
|
+
const section = /^Data Requirements\b/i;
|
|
257
|
+
const read = async (rel, ownFeature) => {
|
|
258
|
+
let text;
|
|
259
|
+
try {
|
|
260
|
+
text = await readFile(join(inputs.sddPath, rel), "utf-8");
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
for (const tbl of tablesInSection(text, section)) {
|
|
266
|
+
const di = col(tbl.headers, "data item");
|
|
267
|
+
const nc = col(tbl.headers, "necessity");
|
|
268
|
+
const fc = col(tbl.headers, "feature");
|
|
269
|
+
if (di < 0 || nc < 0) {
|
|
270
|
+
inputs.findings.add("convention", `${rel}: a "Data Requirements" table needs Data Item and Necessity columns — table skipped`);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
const gc = col(tbl.headers, "alternative group");
|
|
274
|
+
const bc = col(tbl.headers, "basis");
|
|
275
|
+
for (const r of tbl.rows) {
|
|
276
|
+
const item = named(r.cells[di]);
|
|
277
|
+
if (item === "")
|
|
278
|
+
continue;
|
|
279
|
+
let feature = ownFeature;
|
|
280
|
+
if (fc >= 0) {
|
|
281
|
+
const f = named(r.cells[fc]);
|
|
282
|
+
if (f !== "")
|
|
283
|
+
feature = inputs.knownFeatureIds.has(f) ? f : (inputs.idBySlug.get(f) ?? "");
|
|
284
|
+
if (feature === "") {
|
|
285
|
+
inputs.findings.add("orphan", `${rel}:${r.line}: Data Requirements feature "${f}" is neither a feature id nor a feature slug of this SDD — row skipped`);
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (feature === "") {
|
|
290
|
+
inputs.findings.add("convention", `${rel}:${r.line}: a Data Requirements row outside a feature spec needs a Feature column — row skipped`);
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
const necessity = named(r.cells[nc]).toLowerCase();
|
|
294
|
+
if (!NECESSITIES.has(necessity)) {
|
|
295
|
+
inputs.findings.add("convention", `${rel}:${r.line}: necessity "${necessity}" is not required or enhances — row skipped`);
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
rows.push({
|
|
299
|
+
id: `${feature}::${item}`,
|
|
300
|
+
feature_id: feature,
|
|
301
|
+
data_item_id: item,
|
|
302
|
+
necessity,
|
|
303
|
+
alternative_group: named(r.cells[gc]),
|
|
304
|
+
basis_ref: named(r.cells[bc]) || `${rel}:${r.line}`,
|
|
305
|
+
source_sdd_id: "",
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
for (const [rel, id] of [...inputs.idByPath].sort(([a], [b]) => a.localeCompare(b)))
|
|
311
|
+
await read(rel, id);
|
|
312
|
+
const tree = await findFeatureTreeFile(inputs.sddPath);
|
|
313
|
+
if (tree)
|
|
314
|
+
await read(relative(inputs.sddPath, tree), "");
|
|
315
|
+
const seen = new Map();
|
|
316
|
+
for (const r of rows) {
|
|
317
|
+
const k = String(r["id"]);
|
|
318
|
+
if (seen.has(k)) {
|
|
319
|
+
inputs.findings.add("divergence", `feature ${r["feature_id"]} states its need for ${r["data_item_id"]} twice (${seen.get(k)["basis_ref"]}, ${r["basis_ref"]}) — first kept`);
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
seen.set(k, r);
|
|
323
|
+
}
|
|
324
|
+
return [...seen.values()];
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=data-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-items.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/data-items.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/events.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,6CAA6C;IAC7C,QAAQ,CAAC,aAAa,EAAE,SAAS,YAAY,EAAE,CAAC;IAChD,uFAAuF;IACvF,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,mGAAmG;IACnG,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,+DAA+D;IAC/D,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,4FAA4F;IAC5F,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC3D;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/events.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,6CAA6C;IAC7C,QAAQ,CAAC,aAAa,EAAE,SAAS,YAAY,EAAE,CAAC;IAChD,uFAAuF;IACvF,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,mGAAmG;IACnG,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,+DAA+D;IAC/D,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,4FAA4F;IAC5F,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC3D;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CA6H5B"}
|
|
@@ -77,8 +77,30 @@ export async function buildEvents(inputs) {
|
|
|
77
77
|
}
|
|
78
78
|
// 4. Merge YAML + avsc. YAML rows win on overlapping fields.
|
|
79
79
|
const merged = new Map();
|
|
80
|
+
// An event declared in the catalogue YAML and present as an .avsc is ONE event, whatever
|
|
81
|
+
// the two sources call it. Matching by id alone missed every pair whose ids differ (the
|
|
82
|
+
// avsc-derived id carries the domain prefix and an `-event` suffix), so one schema
|
|
83
|
+
// yielded two event rows — inflating an estate's count by 12. The schema path is the
|
|
84
|
+
// stronger key: the YAML's id wins and the avsc row it describes is consumed.
|
|
85
|
+
const avscIdBySchema = new Map();
|
|
86
|
+
for (const [aid, row] of avscRows) {
|
|
87
|
+
const sp = normaliseSchemaPath(String(row["schema_path"] ?? ""));
|
|
88
|
+
if (sp !== "")
|
|
89
|
+
avscIdBySchema.set(sp, aid);
|
|
90
|
+
}
|
|
91
|
+
const consumedAvsc = new Set();
|
|
80
92
|
for (const [id, yaml] of yamlResult.byId) {
|
|
81
|
-
|
|
93
|
+
let avsc = avscRows.get(id);
|
|
94
|
+
if (avsc !== undefined) {
|
|
95
|
+
consumedAvsc.add(id);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const aid = avscIdBySchema.get(normaliseSchemaPath(yaml.schemaPath));
|
|
99
|
+
if (aid !== undefined && !yamlResult.byId.has(aid)) {
|
|
100
|
+
avsc = avscRows.get(aid);
|
|
101
|
+
consumedAvsc.add(aid);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
82
104
|
const baseRow = mergeYamlAndAvsc(yaml, avsc);
|
|
83
105
|
// Resolve domain_id against known domains; empty if unknown.
|
|
84
106
|
let domainId = String(baseRow["domain_id"] ?? "");
|
|
@@ -100,7 +122,7 @@ export async function buildEvents(inputs) {
|
|
|
100
122
|
}
|
|
101
123
|
// Avsc-only events (no YAML row): keep the existing avsc-derived row as-is.
|
|
102
124
|
for (const [id, row] of avscRows) {
|
|
103
|
-
if (!merged.has(id)) {
|
|
125
|
+
if (!merged.has(id) && !consumedAvsc.has(id)) {
|
|
104
126
|
merged.set(id, row);
|
|
105
127
|
}
|
|
106
128
|
}
|
|
@@ -112,6 +134,9 @@ export async function buildEvents(inputs) {
|
|
|
112
134
|
yamlEvents: yamlResult.byId,
|
|
113
135
|
};
|
|
114
136
|
}
|
|
137
|
+
function normaliseSchemaPath(p) {
|
|
138
|
+
return p.trim().replace(/\\/g, "/").replace(/^\.\//, "");
|
|
139
|
+
}
|
|
115
140
|
function inferDomainFromAvroPath(relPath) {
|
|
116
141
|
// Layout: contracts/avro/<domain>/<file>.avsc
|
|
117
142
|
const parts = relPath.split(sep);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/events.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CatalogueRow } from "../csv-writer.js";
|
|
2
|
+
import type { FindingsLog } from "../findings.js";
|
|
3
|
+
export declare function buildEvidenceTargetRepos(sddPath: string, ownRepoIds: ReadonlySet<string>, findings: FindingsLog): Promise<CatalogueRow[]>;
|
|
4
|
+
//# sourceMappingURL=evidence-target-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-target-repo.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/evidence-target-repo.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAuBlD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,YAAY,EAAE,CAAC,CA+BzB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// evidence_target_repo (M-ADR 0214 §4.10): a reverse evidence YAML names, through a top-level
|
|
2
|
+
// `target_repo` (one id or a list), repositories ANOTHER SDD owns. A reference, never a claim — the
|
|
3
|
+
// repository is described by exactly one SDD, elsewhere — so the FK is external at build and must
|
|
4
|
+
// resolve at aggregation. Naming a repository this SDD itself describes is reported: that is the
|
|
5
|
+
// SDD's own, and its reverse-metadata already says so.
|
|
6
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
7
|
+
import { join, relative, sep } from "node:path";
|
|
8
|
+
import { parse as parseYaml } from "yaml";
|
|
9
|
+
const SKIP = new Set(["node_modules", ".git", "source", "catalogues", "catalogues-aggregated", "dist", "bundle-cache"]);
|
|
10
|
+
async function evidenceFiles(root, current, inEvidence, out) {
|
|
11
|
+
let entries;
|
|
12
|
+
try {
|
|
13
|
+
entries = await readdir(current, { withFileTypes: true });
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
for (const e of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
19
|
+
if (SKIP.has(e.name))
|
|
20
|
+
continue;
|
|
21
|
+
const abs = join(current, e.name);
|
|
22
|
+
if (e.isDirectory()) {
|
|
23
|
+
if (relative(root, abs).split(sep).length > 10)
|
|
24
|
+
continue;
|
|
25
|
+
await evidenceFiles(root, abs, inEvidence || e.name === "reverse-evidence", out);
|
|
26
|
+
}
|
|
27
|
+
else if (inEvidence && e.isFile() && /\.ya?ml$/.test(e.name)) {
|
|
28
|
+
out.push(abs);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export async function buildEvidenceTargetRepos(sddPath, ownRepoIds, findings) {
|
|
33
|
+
const files = [];
|
|
34
|
+
await evidenceFiles(sddPath, sddPath, false, files);
|
|
35
|
+
const rows = new Map();
|
|
36
|
+
for (const abs of files) {
|
|
37
|
+
const rel = relative(sddPath, abs);
|
|
38
|
+
let doc;
|
|
39
|
+
try {
|
|
40
|
+
doc = parseYaml(await readFile(abs, "utf-8"));
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
continue; // an unparseable file is the yaml-parse validator's finding, not this one's
|
|
44
|
+
}
|
|
45
|
+
if (!doc || typeof doc !== "object" || Array.isArray(doc))
|
|
46
|
+
continue;
|
|
47
|
+
const raw = doc["target_repo"];
|
|
48
|
+
if (raw === undefined)
|
|
49
|
+
continue;
|
|
50
|
+
const ids = Array.isArray(raw) ? raw : [raw];
|
|
51
|
+
for (const v of ids) {
|
|
52
|
+
if (typeof v !== "string" || v.trim() === "") {
|
|
53
|
+
findings.add("convention", `${rel}: target_repo must be a repository id or a list of them — ${JSON.stringify(v)} skipped`);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const repoId = v.trim();
|
|
57
|
+
if (ownRepoIds.has(repoId)) {
|
|
58
|
+
findings.add("convention", `${rel}: target_repo ${repoId} is a repository this SDD describes — it is yours, not a reference to another SDD's (M-ADR 0214 §4.10); drop it`);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const id = `${rel}::${repoId}`;
|
|
62
|
+
rows.set(id, { id, evidence_path: rel, repo_id: repoId, source_sdd_id: "" });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return [...rows.values()];
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=evidence-target-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-target-repo.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/evidence-target-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-tree-walker.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/feature-tree-walker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,8EAA8E;AAC9E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAaxB;AAED,0EAA0E;AAC1E,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM5C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAGR;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,WAAW,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"feature-tree-walker.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/feature-tree-walker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,8EAA8E;AAC9E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAaxB;AAED,0EAA0E;AAC1E,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM5C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAGR;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,WAAW,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAyDhE;AAED,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAWD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA8C5E"}
|
|
@@ -91,7 +91,11 @@ export function walkFeatureTree(text) {
|
|
|
91
91
|
let inFence = false;
|
|
92
92
|
let currentH2Slug = "";
|
|
93
93
|
let currentH3Slug = "";
|
|
94
|
-
|
|
94
|
+
// A bullet's description may wrap onto indented continuation lines. Reading one line per
|
|
95
|
+
// bullet cut it at the first break (a KPI list lost mid-sentence), so wrapped lines are
|
|
96
|
+
// joined into the bullet before it is parsed.
|
|
97
|
+
const lines = joinContinuations(text.split(/\r?\n/));
|
|
98
|
+
for (const rawLine of lines) {
|
|
95
99
|
const line = rawLine.trimEnd();
|
|
96
100
|
if (line.startsWith("```")) {
|
|
97
101
|
inFence = !inFence;
|
|
@@ -231,6 +235,39 @@ const FOOTNOTE_MARKER_RE = /\s*\[\^[^\]]+\]/g;
|
|
|
231
235
|
function stripFootnoteMarkers(line) {
|
|
232
236
|
return line.replace(FOOTNOTE_MARKER_RE, "");
|
|
233
237
|
}
|
|
238
|
+
/**
|
|
239
|
+
* Join a bullet's wrapped continuation lines onto it: an indented, non-blank line that is not
|
|
240
|
+
* itself a list item, heading, table row or fence, directly following a bullet (or another
|
|
241
|
+
* continuation). Fenced blocks are passed through untouched.
|
|
242
|
+
*/
|
|
243
|
+
function joinContinuations(lines) {
|
|
244
|
+
const out = [];
|
|
245
|
+
let inFence = false;
|
|
246
|
+
let joinable = false;
|
|
247
|
+
for (const raw of lines) {
|
|
248
|
+
const t = raw.trim();
|
|
249
|
+
if (t.startsWith("```")) {
|
|
250
|
+
inFence = !inFence;
|
|
251
|
+
joinable = false;
|
|
252
|
+
out.push(raw);
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (inFence) {
|
|
256
|
+
out.push(raw);
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
const isContinuation = joinable &&
|
|
260
|
+
/^\s+\S/.test(raw) &&
|
|
261
|
+
!/^([-*+]\s|\d+[.)]\s|#|\||>)/.test(t);
|
|
262
|
+
if (isContinuation) {
|
|
263
|
+
out[out.length - 1] = `${out[out.length - 1].trimEnd()} ${t}`;
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
joinable = /^\s*[-*+]\s/.test(raw);
|
|
267
|
+
out.push(raw);
|
|
268
|
+
}
|
|
269
|
+
return out;
|
|
270
|
+
}
|
|
234
271
|
function matchBullet(line) {
|
|
235
272
|
const stripped = stripFootnoteMarkers(line);
|
|
236
273
|
const m = BULLET_RE.exec(stripped);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-tree-walker.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/feature-tree-walker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,mBAAmB,GAAG;IAC1B,iBAAiB;IACjB,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC;CAC5C,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAe;IAEf,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;YACjD,IAAI,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAChC,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,MAAc,EACd,MAAe;IAEf,MAAM,IAAI,GAAG,GAAG,SAAS,UAAU,MAAM,EAAE,CAAC;IAC5C,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AA+BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,GAAG,GAAuB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,aAAa,GAAG,EAAE,CAAC;IAEvB,
|
|
1
|
+
{"version":3,"file":"feature-tree-walker.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/feature-tree-walker.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,4 +20,17 @@ export interface QualityScoresBuildResult {
|
|
|
20
20
|
readonly qualityScoreDimensions: CatalogueRow[];
|
|
21
21
|
}
|
|
22
22
|
export declare function buildQualityScores(inputs: QualityScoresBuildInputs): Promise<QualityScoresBuildResult>;
|
|
23
|
+
/**
|
|
24
|
+
* `na_rationale` (scoring-registry guide, ruled 2026-10-01): an N/A dimension is ABSENT from
|
|
25
|
+
* `scores` and explained in a `na_rationale` mapping beside it, keyed by the same dimension key.
|
|
26
|
+
* Checked on the effective record (the selected review merged with `current`), report-only:
|
|
27
|
+
* - na_rationale must be a mapping (a single string cannot say WHICH dimension it explains);
|
|
28
|
+
* - a dimension cannot be both scored and N/A.
|
|
29
|
+
* NOT checked here: that every N/A dimension HAS a reason. That needs the rubric's own dimension
|
|
30
|
+
* list. Deriving it from the registry being checked (the union of keys its entries score) was tried
|
|
31
|
+
* and measured wrong twice on one estate: a registry mixing two spellings of one rubric's keys, and
|
|
32
|
+
* entries scored before the rubric gained a dimension. Both are artefacts of a self-supplied
|
|
33
|
+
* denominator, not missing reasons.
|
|
34
|
+
*/
|
|
35
|
+
export declare function checkNaRationale(rel: string, container: Record<string, unknown>, findings: FindingsLog): void;
|
|
23
36
|
//# sourceMappingURL=quality-scores.d.ts.map
|