@sdd-method/sdd-cli 1.2.0 → 1.3.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.
Files changed (40) hide show
  1. package/dist/lib/catalogue/build.d.ts.map +1 -1
  2. package/dist/lib/catalogue/build.js +14 -1
  3. package/dist/lib/catalogue/build.js.map +1 -1
  4. package/dist/lib/catalogue/builders/capability-edges.d.ts.map +1 -1
  5. package/dist/lib/catalogue/builders/capability-edges.js +10 -1
  6. package/dist/lib/catalogue/builders/capability-edges.js.map +1 -1
  7. package/dist/lib/catalogue/builders/index.d.ts +2 -0
  8. package/dist/lib/catalogue/builders/index.d.ts.map +1 -1
  9. package/dist/lib/catalogue/builders/index.js +1 -0
  10. package/dist/lib/catalogue/builders/index.js.map +1 -1
  11. package/dist/lib/catalogue/builders/quality-scores.d.ts +14 -0
  12. package/dist/lib/catalogue/builders/quality-scores.d.ts.map +1 -0
  13. package/dist/lib/catalogue/builders/quality-scores.js +390 -0
  14. package/dist/lib/catalogue/builders/quality-scores.js.map +1 -0
  15. package/dist/lib/catalogue/builders/services.d.ts.map +1 -1
  16. package/dist/lib/catalogue/builders/services.js +5 -1
  17. package/dist/lib/catalogue/builders/services.js.map +1 -1
  18. package/dist/lib/catalogue/canonical-schema.yaml +199 -1
  19. package/dist/lib/catalogue/coverage-render.d.ts +15 -0
  20. package/dist/lib/catalogue/coverage-render.d.ts.map +1 -1
  21. package/dist/lib/catalogue/coverage-render.js +85 -0
  22. package/dist/lib/catalogue/coverage-render.js.map +1 -1
  23. package/dist/lib/catalogue/coverage-run.d.ts.map +1 -1
  24. package/dist/lib/catalogue/coverage-run.js +7 -1
  25. package/dist/lib/catalogue/coverage-run.js.map +1 -1
  26. package/dist/lib/catalogue/scores-coverage.d.ts +138 -0
  27. package/dist/lib/catalogue/scores-coverage.d.ts.map +1 -0
  28. package/dist/lib/catalogue/scores-coverage.js +346 -0
  29. package/dist/lib/catalogue/scores-coverage.js.map +1 -0
  30. package/dist/lib/mcp/parse/gate-registry.d.ts +63 -4
  31. package/dist/lib/mcp/parse/gate-registry.d.ts.map +1 -1
  32. package/dist/lib/mcp/parse/gate-registry.js +127 -31
  33. package/dist/lib/mcp/parse/gate-registry.js.map +1 -1
  34. package/dist/lib/mcp/resources/gates.d.ts.map +1 -1
  35. package/dist/lib/mcp/resources/gates.js +13 -27
  36. package/dist/lib/mcp/resources/gates.js.map +1 -1
  37. package/dist/lib/mcp/tools/query-gate-status.d.ts.map +1 -1
  38. package/dist/lib/mcp/tools/query-gate-status.js +13 -27
  39. package/dist/lib/mcp/tools/query-gate-status.js.map +1 -1
  40. package/package.json +1 -1
@@ -0,0 +1,390 @@
1
+ // Quality-scores builder — emits the rubric-assessment catalogues (M-ADR 0205
2
+ // §4.5, schema 3.2.0):
3
+ // quality_scores, quality_score_dimensions
4
+ //
5
+ // Source: `orchestration/gate-registry/<rubric>-scores.yaml`. The authored
6
+ // surface stays YAML because a score is a judgment, authored where it asserts
7
+ // intent; these rows are DERIVED and never edited.
8
+ //
9
+ // Three shapes here are counter-intuitive enough that a builder written from
10
+ // the method's own registry TEMPLATES would get all three wrong. Each was
11
+ // measured across 15 method-side + 152 estate-side registry files (the Phase-B
12
+ // B0 survey, 2026-08-06), and each is guarded by a control:
13
+ //
14
+ // 1. TWO AUTHORED DIALECTS. All fifteen method templates specify a nested
15
+ // shape (`selection_policy` / `current` / `reviews`), but the live forward
16
+ // data is overwhelmingly FLAT — `gate` / `weighted_score` / `scored_at` /
17
+ // `scored_by` / `scores` / `flags` directly on the entry. Reading only the
18
+ // template shape would catalogue 6 entries out of 204. Both are legitimate:
19
+ // the templates were modernised, the data was not migrated.
20
+ // 2. THE CONTAINER KEY IDENTIFIES NOTHING. It drifts between template and
21
+ // estate in 4 of 10 files (`diagrams` vs `c4_diagram_scores`, `capabilities`
22
+ // vs `feature_grounding_scores`, ...) and is non-unique method-side
23
+ // (`domains` names BOTH domain-architecture and intent-quality;
24
+ // `capabilities` names BOTH feature-grounding and traceability-manifest).
25
+ // So `rubric_id` comes from the file's `registry_type` when declared, else
26
+ // the filename stem minus `-scores`. Never the key.
27
+ // 3. `corpus_ref` IS NEW AUTHORING. M-ADR 0205 §4.5 names it and the coverage
28
+ // instrument's staleness rule depends on it, but nothing authors it in
29
+ // either estate today. Rows therefore carry `staleness_basis` saying which
30
+ // anchor they can actually support, so no consumer can state a staleness
31
+ // verdict without its basis.
32
+ //
33
+ // LOUDNESS CONTRACT. Nothing here drops silently — that is the whole point of
34
+ // the class. An unparseable registry, an unknown rubric_id, an ambiguous
35
+ // container, a registry_type disagreeing with its filename, and an
36
+ // out-of-vocabulary gate value each produce a finding naming the file, the
37
+ // entry and the remedy. The one thing that is NOT a finding is a registry with
38
+ // an empty container: the method repo ships fifteen of those deliberately, and
39
+ // their emptiness is the signal the B2 coverage predicate reads, not an error
40
+ // here.
41
+ import { readdir, readFile } from "node:fs/promises";
42
+ import { basename, join } from "node:path";
43
+ import { parse as parseYaml } from "yaml";
44
+ const REGISTRY_DIR_REL = "orchestration/gate-registry";
45
+ /**
46
+ * File-level keys that are registry metadata rather than scored entries.
47
+ * Anything else at the top level is the entry container. The reverse family's
48
+ * `registry_type` / `assessed_at` / `assessed_by` are here too so that family
49
+ * parses with the same code path, even though only the weighted house form is
50
+ * emitted today (schema 3.2.0's `scoring_form` reserves the banded case).
51
+ */
52
+ const HEADER_KEYS = new Set([
53
+ "schema_version",
54
+ "description",
55
+ "pass_threshold",
56
+ "registry_type",
57
+ "assessed_at",
58
+ "assessed_by",
59
+ ]);
60
+ /**
61
+ * rubric_id -> target_kind. A CLOSED map on purpose: an unknown rubric is a
62
+ * loud finding, never a silently-dropped entry or a guessed kind. New rubrics
63
+ * ship with a row here (the R9 four-surface rule already requires the registry;
64
+ * this is the fifth touchpoint and the one that makes the rows appear).
65
+ */
66
+ const TARGET_KIND_BY_RUBRIC = new Map([
67
+ ["adr-quality", "adr"],
68
+ ["contract-quality", "contract"],
69
+ ["c4-diagram", "c4_diagram"],
70
+ ["domain-architecture", "domain"],
71
+ ["intent-quality", "domain"],
72
+ ["feature-grounding", "capability"],
73
+ ["traceability-manifest", "capability"],
74
+ ["glossary", "glossary"],
75
+ ["persona", "persona"],
76
+ ["product-definition", "product"],
77
+ ["screen-spec", "screen"],
78
+ ["strategic-doc", "strategic_doc"],
79
+ ["user-story", "user_story"],
80
+ ["work-order", "work_order"],
81
+ ["integration-sdd-quality", "integration"],
82
+ ]);
83
+ /** schema 3.2.0 `quality_gate`. Deliberately UNBOUND — see that enum's note. */
84
+ const GATE_VALUES = new Set(["pass", "conditional", "fail", "unscored"]);
85
+ const isRecord = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
86
+ const str = (v) => typeof v === "string" ? v : typeof v === "number" ? String(v) : null;
87
+ const num = (v) => {
88
+ if (typeof v === "number" && Number.isFinite(v))
89
+ return v;
90
+ if (typeof v === "string" && v.trim() !== "" && Number.isFinite(Number(v))) {
91
+ return Number(v);
92
+ }
93
+ return null;
94
+ };
95
+ /**
96
+ * Count raised flags across the two authored dialects:
97
+ * `flags: { over_scope_risk: true, ... }` -> count the true ones
98
+ * `flags_raised: [name, ...]` -> count the list
99
+ * A scalar `flags_raised: 0` also occurs in the wild (one estate authors it),
100
+ * and reads as zero rather than as a parse defect.
101
+ */
102
+ function countFlags(entry, current) {
103
+ const raised = current["flags_raised"] ?? entry["flags_raised"];
104
+ if (Array.isArray(raised))
105
+ return raised.length;
106
+ if (typeof raised === "number")
107
+ return raised;
108
+ const flags = current["flags"] ?? entry["flags"];
109
+ if (isRecord(flags))
110
+ return Object.values(flags).filter((v) => v === true).length;
111
+ return 0;
112
+ }
113
+ /**
114
+ * Hard-gate state across the two dialects:
115
+ * `hard_gates: { triggered: bool, reasons: [] }`
116
+ * `hard_gates_triggered: [reasons]` (empty list = not triggered)
117
+ */
118
+ function hardGateTriggered(entry, current) {
119
+ const list = current["hard_gates_triggered"] ?? entry["hard_gates_triggered"];
120
+ if (Array.isArray(list))
121
+ return list.length > 0;
122
+ const hg = current["hard_gates"] ?? entry["hard_gates"];
123
+ if (isRecord(hg))
124
+ return hg["triggered"] === true;
125
+ return false;
126
+ }
127
+ function requiredActionsCount(entry, current) {
128
+ const explicit = num(current["required_actions_count"] ?? entry["required_actions_count"]);
129
+ if (explicit !== null)
130
+ return explicit;
131
+ const list = current["required_actions"] ?? entry["required_actions"];
132
+ return Array.isArray(list) ? list.length : 0;
133
+ }
134
+ /**
135
+ * Scorer provenance across three dialects: the nested `scorer:` block, the flat
136
+ * `scored_by:` free-text field, and the reverse family's file-level
137
+ * `assessed_by:`. A flat-dialect row therefore lands its whole provenance in
138
+ * `scorer_model` as free text — expected, and documented in the schema, so it
139
+ * does not read as a parse defect to whoever queries it later.
140
+ */
141
+ function scorerFields(entry, current, fileAssessedBy) {
142
+ const scorer = current["scorer"] ?? entry["scorer"];
143
+ if (isRecord(scorer)) {
144
+ return {
145
+ scorer_provider: str(scorer["provider"]),
146
+ scorer_tool: str(scorer["tool"]),
147
+ scorer_model: str(scorer["model"]),
148
+ scorer_model_family: str(scorer["model_family"]),
149
+ scorer_prompt_version: str(scorer["prompt_version"]),
150
+ };
151
+ }
152
+ const flat = str(current["scored_by"] ?? entry["scored_by"]) ?? fileAssessedBy;
153
+ return {
154
+ scorer_provider: null,
155
+ scorer_tool: null,
156
+ scorer_model: flat,
157
+ scorer_model_family: null,
158
+ scorer_prompt_version: null,
159
+ };
160
+ }
161
+ /** Slug a target ref into a PK-safe token without collapsing distinct refs. */
162
+ const slugToken = (s) => s
163
+ .trim()
164
+ .replace(/[^A-Za-z0-9_.-]+/g, "-")
165
+ .replace(/^-+|-+$/g, "")
166
+ .toLowerCase();
167
+ /**
168
+ * The effective review for a nested entry, or null when there is nothing to
169
+ * select. Resolution order, deliberately explicit rather than "latest wins":
170
+ *
171
+ * 1. `selection_policy.selected_review_run_id` matched against
172
+ * `reviews[].review_run_id` — the registry SAYING which review is
173
+ * effective is authoritative, whatever the dates say.
174
+ * 2. `current.review_run_id` matched the same way — the summary naming its
175
+ * own source.
176
+ * 3. Exactly one review and no id anywhere: it is unambiguous, so use it.
177
+ *
178
+ * Several reviews with no resolvable id is NOT guessed at — the caller reports
179
+ * it. Picking the newest would silently choose a verdict the registry never
180
+ * nominated, and a scores registry's whole point is that the effective record
181
+ * is declared rather than inferred.
182
+ */
183
+ function selectReview(entry, current) {
184
+ const reviews = entry["reviews"];
185
+ if (!Array.isArray(reviews))
186
+ return null;
187
+ const records = reviews.filter(isRecord);
188
+ if (records.length === 0)
189
+ return null;
190
+ const policy = entry["selection_policy"];
191
+ const wanted = (isRecord(policy) ? str(policy["selected_review_run_id"]) : null) ??
192
+ str(current["review_run_id"]);
193
+ if (wanted !== null) {
194
+ const hit = records.find((r) => str(r["review_run_id"]) === wanted);
195
+ if (hit)
196
+ return hit;
197
+ }
198
+ return records.length === 1 ? records[0] : null;
199
+ }
200
+ /**
201
+ * Fields present on `current` win; anything absent there falls back to the
202
+ * selected review. That direction matters: `current` is the registry's own
203
+ * statement of the effective headline, so a gate or weighted_score recorded
204
+ * there overrides the review's copy if they ever disagree — while the detail
205
+ * `current` does not carry comes from the review it points at.
206
+ */
207
+ function mergePreferringCurrent(current, review) {
208
+ const out = { ...review };
209
+ for (const [k, v] of Object.entries(current)) {
210
+ if (v !== undefined && v !== null)
211
+ out[k] = v;
212
+ }
213
+ return out;
214
+ }
215
+ export async function buildQualityScores(inputs) {
216
+ const { sddPath, findings, sddId } = inputs;
217
+ const dir = join(sddPath, REGISTRY_DIR_REL);
218
+ let files;
219
+ try {
220
+ files = (await readdir(dir))
221
+ .filter((f) => f.endsWith(".yaml") || f.endsWith(".yml"))
222
+ .sort();
223
+ }
224
+ catch {
225
+ // No gate-registry directory. Headers-only, and NOT a finding: the surface
226
+ // is optional per profile, and absence of the whole surface is not an
227
+ // authoring gap in it (the repo-config predicate's n/a rule, same reasoning).
228
+ return { qualityScores: [], qualityScoreDimensions: [] };
229
+ }
230
+ const qualityScores = [];
231
+ const qualityScoreDimensions = [];
232
+ for (const file of files) {
233
+ const rel = `${REGISTRY_DIR_REL}/${file}`;
234
+ const raw = await readFile(join(dir, file), "utf8");
235
+ let doc;
236
+ try {
237
+ doc = parseYaml(raw);
238
+ }
239
+ catch (e) {
240
+ // Measured: 3 of one estate's 10 registries do not parse (two mixing
241
+ // mapping and sequence entries under one container, one with a duplicate
242
+ // key whose two blocks hold CONTRADICTORY verdicts for the same target).
243
+ // A parser that tolerates duplicate keys reports the flattering figure
244
+ // and hides it; this one refuses, and says so.
245
+ // WARN, not error, and the choice is deliberate. Score registries are
246
+ // scoring-run output, not a method-mandated authoring surface, and the
247
+ // same reasoning that leaves `quality_gate` unbound applies here: this
248
+ // class must not hard-fail an estate's whole catalogue build over data
249
+ // that predates it (measured: one estate carries three such files). The
250
+ // loudness comes from the findings baseline — a new unbaselined finding
251
+ // fails the gate — which is how this method makes things loud without
252
+ // making builds brittle.
253
+ findings.add("divergence", `${rel} is not parseable YAML (${String(e.message).split("\n")[0]}) — every score it holds is invisible to the catalogue; repair the file (a duplicate key silently discards one of two judgments, and a mapping/sequence mix is invalid in every parser)`);
254
+ continue;
255
+ }
256
+ if (!isRecord(doc))
257
+ continue;
258
+ // --- rubric_id: registry_type, else filename. Never the container key. ---
259
+ const stem = basename(file).replace(/\.(yaml|yml)$/, "");
260
+ const fromFilename = stem.replace(/-scores$/, "");
261
+ const declared = str(doc["registry_type"]);
262
+ const rubricId = declared ?? fromFilename;
263
+ if (declared !== null && declared !== fromFilename) {
264
+ findings.add("convention", `${rel} declares registry_type '${declared}' but its filename says '${fromFilename}' — rubric_id uses the declared value; rename the file or correct registry_type so the two agree`);
265
+ }
266
+ const targetKind = TARGET_KIND_BY_RUBRIC.get(rubricId);
267
+ if (targetKind === undefined) {
268
+ findings.add("coverage", `${rel} uses rubric '${rubricId}', which has no target-kind mapping — its scores are NOT catalogued; add the rubric to the quality-scores builder's TARGET_KIND_BY_RUBRIC map (a new rubric ships its registry, rubric, skill trio and seed rows; this is the fifth surface)`);
269
+ continue;
270
+ }
271
+ const fileAssessedBy = str(doc["assessed_by"]);
272
+ // --- the entry container: the single non-header mapping key ---
273
+ const containers = Object.entries(doc).filter(([k, v]) => !HEADER_KEYS.has(k) && isRecord(v));
274
+ if (containers.length === 0)
275
+ continue; // headers-only registry: deliberate, silent
276
+ if (containers.length > 1) {
277
+ findings.add("convention", `${rel} has ${containers.length} candidate entry containers (${containers.map(([k]) => k).join(", ")}) — a registry declares exactly one; no scores read from this file`);
278
+ continue;
279
+ }
280
+ const container = containers[0]?.[1];
281
+ if (!isRecord(container))
282
+ continue;
283
+ for (const [entryKey, entryVal] of Object.entries(container)) {
284
+ if (!isRecord(entryVal))
285
+ continue;
286
+ // --- dialect detection: nested (templates) vs flat (live estate data) ---
287
+ const nested = isRecord(entryVal["current"]);
288
+ const currentBlock = nested
289
+ ? entryVal["current"]
290
+ : entryVal;
291
+ // `current` is a SUMMARY, not necessarily the whole record. In the
292
+ // multi-review shape the method's own templates specify, the detail —
293
+ // scores, flags, hard_gates, required_actions — lives ONLY in the
294
+ // selected `reviews[]` entry, and `current` carries just the headline
295
+ // (run id, date, gate, weighted_score, scorer). Reading `current` alone
296
+ // therefore drops the detail SILENTLY, which is exactly what it did:
297
+ // measured on a real estate, six user-story entries lost 36 dimension
298
+ // rows and 13 required-action counts, and their flag counts read 0 only
299
+ // because those six happened to raise none — luck, not correctness.
300
+ const selected = selectReview(entryVal, currentBlock);
301
+ const current = selected
302
+ ? mergePreferringCurrent(currentBlock, selected)
303
+ : currentBlock;
304
+ if (nested && selected === null && !isRecord(currentBlock["scores"])) {
305
+ const reviews = entryVal["reviews"];
306
+ if (Array.isArray(reviews) && reviews.length > 0) {
307
+ findings.add("coverage", `${rel}: ${entryKey} has ${reviews.length} review(s) but none can be selected as effective (selection_policy.selected_review_run_id matches no review_run_id, and current.review_run_id does not either) — its dimension scores are NOT catalogued; set selected_review_run_id to one of the recorded runs`);
308
+ }
309
+ }
310
+ const targetRef = str(entryVal["unit_id"]) ?? entryKey;
311
+ const targetPath = str(entryVal["file_path"]) ?? str(current["file_path"]);
312
+ // --- gate: unbound vocabulary, convention finding + empty cell ---
313
+ const rawGate = str(current["gate"]);
314
+ let gate = null;
315
+ if (rawGate !== null && rawGate.trim() !== "") {
316
+ if (GATE_VALUES.has(rawGate)) {
317
+ gate = rawGate;
318
+ }
319
+ else {
320
+ findings.add("convention", `${rel}: ${entryKey} has gate '${rawGate}', outside the quality_gate vocabulary (${[...GATE_VALUES].join(" | ")}) — the cell is left EMPTY rather than emitting a value no consumer can interpret; use an in-vocabulary value, or raise the extension as a method decision if the concept is real`);
321
+ }
322
+ }
323
+ const corpusRef = str(current["corpus_ref"]) ?? str(entryVal["corpus_ref"]);
324
+ const stalenessBasis = corpusRef !== null ? "corpus_ref" : targetPath !== null ? "scored_at" : "none";
325
+ const selectionPolicy = entryVal["selection_policy"];
326
+ const selectionMethod = isRecord(selectionPolicy)
327
+ ? str(selectionPolicy["method"])
328
+ : null;
329
+ const id = `${rubricId}__${targetKind}__${slugToken(targetRef)}`;
330
+ qualityScores.push({
331
+ id,
332
+ rubric_id: rubricId,
333
+ scoring_form: "weighted",
334
+ target_kind: targetKind,
335
+ target_ref: targetRef,
336
+ target_path: targetPath,
337
+ gate,
338
+ weighted_score: num(current["weighted_score"]),
339
+ score_denominator: num(entryVal["score_denominator"] ?? current["score_denominator"]),
340
+ scored_at: str(current["scored_at"]) ?? str(entryVal["scored_at"]),
341
+ corpus_ref: corpusRef,
342
+ staleness_basis: stalenessBasis,
343
+ review_run_id: str(current["review_run_id"]),
344
+ selection_method: selectionMethod,
345
+ ...scorerFields(entryVal, current, fileAssessedBy),
346
+ flag_count: countFlags(entryVal, current),
347
+ hard_gate_triggered: hardGateTriggered(entryVal, current),
348
+ required_actions_count: requiredActionsCount(entryVal, current),
349
+ sdd_id: sddId,
350
+ source_sdd_id: null,
351
+ });
352
+ // --- dimensions: the rubric's own keys, verbatim ---
353
+ const scores = current["scores"];
354
+ if (isRecord(scores)) {
355
+ for (const [dimKey, dimVal] of Object.entries(scores)) {
356
+ qualityScoreDimensions.push({
357
+ id: `${id}__${slugToken(dimKey)}`,
358
+ quality_score_id: id,
359
+ rubric_id: rubricId,
360
+ target_kind: targetKind,
361
+ target_ref: targetRef,
362
+ dimension_key: dimKey,
363
+ dimension_score: num(dimVal),
364
+ dimension_weight: null,
365
+ source_sdd_id: null,
366
+ });
367
+ }
368
+ }
369
+ }
370
+ }
371
+ // Total order, per M-ADR 0205 §4.2 — the committed CSV must be byte-stable.
372
+ qualityScores.sort((a, b) => String(a["id"]).localeCompare(String(b["id"])));
373
+ qualityScoreDimensions.sort((a, b) => String(a["id"]).localeCompare(String(b["id"])));
374
+ // Duplicate ids mean two entries scored the same target under one rubric.
375
+ // BOTH rows are emitted rather than one being dropped: dropping would pick a
376
+ // winner between two possibly-contradictory verdicts, which is precisely how
377
+ // that defect stayed invisible in an estate for a month. The builder
378
+ // diagnoses; the downstream pk-duplicate check owns fatality, which is where
379
+ // PK integrity belongs.
380
+ const seen = new Set();
381
+ for (const row of qualityScores) {
382
+ const id = String(row["id"]);
383
+ if (seen.has(id)) {
384
+ findings.add("divergence", `quality_scores: duplicate id '${id}' — two registry entries score the same target under the same rubric; both rows are emitted (the pk check fails on them) rather than one being silently preferred, because the two verdicts may disagree`);
385
+ }
386
+ seen.add(id);
387
+ }
388
+ return { qualityScores, qualityScoreDimensions };
389
+ }
390
+ //# sourceMappingURL=quality-scores.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-scores.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/quality-scores.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/services.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAO7B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/C,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD;;;;;;OAMG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChE;AA8ED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClD;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAoF9B"}
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/services.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAO7B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/C,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD;;;;;;OAMG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChE;AAiFD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClD;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAoF9B"}
@@ -63,7 +63,11 @@ function parseDeclaredServices(raw, relPath, findings) {
63
63
  if (raw === undefined)
64
64
  return null;
65
65
  if (!Array.isArray(raw)) {
66
- findings.add("convention", `${relPath}: services: must be a list — block dropped, default single-service projection kept`);
66
+ findings.add("convention",
67
+ // Names the remedy, and specifically the `services: []` form: a BARE
68
+ // `services:` parses as null, which is not a list, so it lands here —
69
+ // and it is two characters away from the declaration an author meant.
70
+ `${relPath}: services: must be a list — block dropped, default single-service projection kept; write it as a list of entries (\`services:\` then \` - id: ...\`), or as \`services: []\` to declare that this repo deliberately emits no service row (M-ADR 0197). A bare \`services:\` with nothing after it is neither.`);
67
71
  return null;
68
72
  }
69
73
  const seen = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/services.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,mEAAmE;AACnE,0EAA0E;AAC1E,wEAAwE;AACxE,wEAAwE;AACxE,oEAAoE;AACpE,qEAAqE;AACrE,oEAAoE;AACpE,wEAAwE;AACxE,uEAAuE;AACvE,gCAAgC;AAChC,EAAE;AACF,oDAAoD;AACpD,mEAAmE;AACnE,oDAAoD;AACpD,uEAAuE;AACvE,oEAAoE;AACpE,mEAAmE;AACnE,uDAAuD;AACvD,EAAE;AACF,mEAAmE;AACnE,kEAAkE;AAClE,yEAAyE;AACzE,iBAAiB;AACjB,EAAE;AACF,oEAAoE;AACpE,wEAAwE;AACxE,2DAA2D;AAC3D,sCAAsC;AACtC,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAC1E,aAAa;AACb,wEAAwE;AACxE,gEAAgE;AAChE,2DAA2D;AAC3D,qEAAqE;AACrE,yEAAyE;AACzE,wEAAwE;AACxE,4DAA4D;AAC5D,EAAE;AACF,iEAAiE;AACjE,wEAAwE;AACxE,0EAA0E;AAC1E,iDAAiD;AAKjD,OAAO,EAEL,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,mCAAmC,CAAC;AAmC3C;;;;;;;;;;;;;GAaG;AACH,SAAS,qBAAqB,CAC5B,GAAY,EACZ,OAAe,EACf,QAAqB;IAErB,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,QAAQ,CAAC,GAAG,CACV,YAAY,EACZ,GAAG,OAAO,oFAAoF,CAC/F,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,QAAQ,CAAC,GAAG,CACV,QAAQ,EACR,GAAG,OAAO,cAAc,CAAC,oCAAoC,CAC9D,CAAC;YACF,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACd,QAAQ,CAAC,GAAG,CACV,QAAQ,EACR,GAAG,OAAO,cAAc,CAAC,yCAAyC,CACnE,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACjB,QAAQ,CAAC,GAAG,CACV,YAAY,EACZ,GAAG,OAAO,yBAAyB,EAAE,0CAA0C,CAChF,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,GAAG,CAAC,IAAI,CAAC;YACP,EAAE;YACF,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,KAAK,QAAQ;gBACvC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE;gBACrC,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,QAAQ;gBACtC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE;gBACnC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAaD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA2B;IAE3B,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,iBAAiB,GAAG,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,yEAAyE;IACzE,wEAAwE;IACxE,kEAAkE;IAClE,0EAA0E;IAC1E,2EAA2E;IAC3E,oEAAoE;IACpE,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,IAAI,GAAG,EAAkB,CAAC;IAC9E,MAAM,cAAc,GAAG,MAAM,CAAC,sBAAsB,IAAI,IAAI,GAAG,EAAmB,CAAC;IACnF,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,sEAAsE;IACtE,qEAAqE;IACrE,mEAAmE;IACnE,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,8BAA8B;IAC9B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,+BAA+B;IAE7E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,EAAE;YAAE,SAAS;QAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,qBAAqB,CACpC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAC1B,WAAW,IAAI,MAAM,EACrB,MAAM,CAAC,QAAQ,CAChB,CAAC;QAEF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,qEAAqE;YACrE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;gBAAE,SAAS;YAC9C,MAAM,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE;gBACjD,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,YAAY;gBACtB,aAAa,EAAE,MAAM;gBACrB,aAAa,EAAE,iBAAiB;gBAChC,kBAAkB,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;gBACtD,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,kEAAkE;QAClE,oEAAoE;QACpE,oEAAoE;QACpE,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,IAAI,iBAAiB,CAAC;YAC9D,IAAI,aAAa,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClE,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,YAAY,EACZ,GAAG,WAAW,IAAI,MAAM,wBAAwB,KAAK,CAAC,EAAE,wBAAwB,aAAa,yBAAyB,CACvH,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE;gBACjD,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,KAAK,CAAC,EAAE;gBACd,QAAQ,EAAE,KAAK,CAAC,MAAM,IAAI,YAAY;gBACtC,aAAa,EAAE,MAAM;gBACrB,aAAa;gBACb,kBAAkB,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;gBAC3C,OAAO,EAAE,KAAK,CAAC,EAAE;aAClB,CAAC,CAAC;YACH,qEAAqE;YACrE,+DAA+D;YAC/D,kEAAkE;YAClE,kEAAkE;YAClE,sEAAsE;YACtE,+DAA+D;YAC/D,sEAAsE;YACtE,gEAAgE;YAChE,cAAc;YACd,IAAI,KAAK,CAAC,EAAE,KAAK,MAAM;gBAAE,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAuB;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,CAAC;AAaD,KAAK,UAAU,OAAO,CACpB,IAAoB,EACpB,UAA+B,EAC/B,SAAsC,EACtC,MAA2B,EAC3B,IAAmB;IAEnB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;QAChE,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,YAAY,EACZ,iBAAiB,IAAI,CAAC,EAAE,uBAAuB,IAAI,CAAC,aAAa,gDAAgD,SAAS,GAAG,CAC9H,CAAC;IACJ,CAAC;IACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;IAC7E,IAAI,CAAC,IAAI,CAAC;QACR,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,MAAM,CAAC,SAAS;QAC5B,SAAS,EAAE,IAAI,CAAC,QAAQ;QACxB,eAAe,EAAE,IAAI,CAAC,aAAa;QACnC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,cAAc,EAAE,IAAI,CAAC,aAAa;QAClC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,mBAAmB,CAC9B,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,WAAW,EAChB,MAAM,CAAC,QAAQ,CAChB;QACD,aAAa,EAAE,EAAE;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAC1B,SAAiB,EACjB,OAAe,EACf,OAAe,EACf,QAAqB;IAErB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACzB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,QAAQ,CAAC,GAAG,CACV,YAAY,EACZ,cAAc,SAAS,sDAAsD;YAC3E,qEAAqE,CACxE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../../src/lib/catalogue/builders/services.ts"],"names":[],"mappings":"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"}