@sdd-method/sdd-cli 1.11.0 → 1.12.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/baseline-check.d.ts +45 -0
- package/dist/lib/catalogue/baseline-check.d.ts.map +1 -0
- package/dist/lib/catalogue/baseline-check.js +109 -0
- package/dist/lib/catalogue/baseline-check.js.map +1 -0
- package/dist/lib/catalogue/builders/capabilities.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/capabilities.js +38 -0
- package/dist/lib/catalogue/builders/capabilities.js.map +1 -1
- package/dist/lib/catalogue/coverage-render.d.ts.map +1 -1
- package/dist/lib/catalogue/coverage-render.js +65 -13
- package/dist/lib/catalogue/coverage-render.js.map +1 -1
- package/dist/lib/catalogue/finding-identity.d.ts +113 -0
- package/dist/lib/catalogue/finding-identity.d.ts.map +1 -0
- package/dist/lib/catalogue/finding-identity.js +147 -0
- package/dist/lib/catalogue/finding-identity.js.map +1 -0
- package/dist/lib/catalogue/findings.d.ts +13 -1
- package/dist/lib/catalogue/findings.d.ts.map +1 -1
- package/dist/lib/catalogue/findings.js +13 -7
- package/dist/lib/catalogue/findings.js.map +1 -1
- package/dist/lib/catalogue/scores-coverage.d.ts +49 -1
- package/dist/lib/catalogue/scores-coverage.d.ts.map +1 -1
- package/dist/lib/catalogue/scores-coverage.js +84 -9
- package/dist/lib/catalogue/scores-coverage.js.map +1 -1
- package/dist/lib/catalogue/staleness-verdicts.d.ts +16 -0
- package/dist/lib/catalogue/staleness-verdicts.d.ts.map +1 -1
- package/dist/lib/catalogue/staleness-verdicts.js +178 -17
- package/dist/lib/catalogue/staleness-verdicts.js.map +1 -1
- package/dist/lib/sync/adr-transitions.d.ts.map +1 -1
- package/dist/lib/sync/adr-transitions.js +23 -4
- package/dist/lib/sync/adr-transitions.js.map +1 -1
- package/dist/lib/sync/diff.d.ts +22 -0
- package/dist/lib/sync/diff.d.ts.map +1 -1
- package/dist/lib/sync/diff.js +48 -0
- package/dist/lib/sync/diff.js.map +1 -1
- package/dist/lib/sync/index.d.ts.map +1 -1
- package/dist/lib/sync/index.js +42 -2
- package/dist/lib/sync/index.js.map +1 -1
- package/dist/verbs/catalogue.d.ts.map +1 -1
- package/dist/verbs/catalogue.js +22 -0
- package/dist/verbs/catalogue.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finding IDENTITY — the stable key a findings baseline is compared on, per
|
|
3
|
+
* M-ADR 0132 §4.3 as amended, delivering the ruling recorded at ledger §3p.
|
|
4
|
+
*
|
|
5
|
+
* THE PROBLEM THIS EXISTS FOR, measured rather than asserted. A findings
|
|
6
|
+
* baseline stores whole `[finding]` lines, so improving a message invalidates
|
|
7
|
+
* every baselined line carrying it. Wave №6 added a remedy sentence to one
|
|
8
|
+
* orphan message: 57 baselined lines went inert and 57 replacements arrived
|
|
9
|
+
* unbaselined, with ZERO genuinely new findings underneath. At the baseline, a
|
|
10
|
+
* wave that improves wording is indistinguishable from a wave that introduces
|
|
11
|
+
* 57 new problems. It recurred at wave №11 (9 lines, one estate) because the
|
|
12
|
+
* class was understood and the mechanism had not changed.
|
|
13
|
+
*
|
|
14
|
+
* WHY IDENTITY IS EMITTED AND NOT RECOVERED. The obvious cheaper fix is to let
|
|
15
|
+
* a comparator extract (category, subject) from stored lines and leave every
|
|
16
|
+
* estate file untouched. Measured across every baseline in both estates — 86
|
|
17
|
+
* files, 74 non-empty, 1,677 body lines — that works for 1,434 lines (85.5%)
|
|
18
|
+
* and fails for 243 (14.5%), which embed their subject in prose:
|
|
19
|
+
*
|
|
20
|
+
* [finding] orphan: repo integration-calamp resolves to no capability ...
|
|
21
|
+
*
|
|
22
|
+
* One renderer template, all orphan class, spread across 62 repos. Recovering
|
|
23
|
+
* identity there means teaching the comparator the renderer's message
|
|
24
|
+
* templates — which re-couples identity to message text, the exact coupling
|
|
25
|
+
* this module removes, and fails SILENTLY the next time a template changes.
|
|
26
|
+
* Identity that was never emitted cannot be reconstructed from prose after the
|
|
27
|
+
* fact; it has to be emitted where it is known.
|
|
28
|
+
*
|
|
29
|
+
* THE RENDERED FORM keeps the identity in the line a human reads, because a
|
|
30
|
+
* baseline is reviewed by people and a side-channel nobody sees is a side
|
|
31
|
+
* channel nobody maintains:
|
|
32
|
+
*
|
|
33
|
+
* [finding] orphan (repo:integration-calamp): repo integration-calamp ...
|
|
34
|
+
* [finding] divergence (docs/domains/asset/product/x.traceability.yaml): ...
|
|
35
|
+
*
|
|
36
|
+
* A finding with no declared subject renders EXACTLY as it does today. That is
|
|
37
|
+
* deliberate and load-bearing: migration is per-emission-site rather than
|
|
38
|
+
* flag-day, an unmigrated site is unchanged rather than broken, and the size of
|
|
39
|
+
* an estate's re-take is proportional to how many sites have actually moved.
|
|
40
|
+
*/
|
|
41
|
+
/**
|
|
42
|
+
* A subject is `kind:id` where the finding knows the kind (`repo:x`,
|
|
43
|
+
* `capability:y`), or a repo-relative path where the subject IS a file. Both
|
|
44
|
+
* are stable under rewording; neither is a sentence.
|
|
45
|
+
*
|
|
46
|
+
* Parentheses are the delimiter because no subject may contain one — asserted
|
|
47
|
+
* below rather than assumed, since a subject that could contain the delimiter
|
|
48
|
+
* would make the parse ambiguous exactly when it mattered.
|
|
49
|
+
*/
|
|
50
|
+
export function assertRenderableSubject(subject) {
|
|
51
|
+
if (subject.includes("(") || subject.includes(")")) {
|
|
52
|
+
throw new Error(`finding subject may not contain parentheses (they delimit the identity): ${subject}`);
|
|
53
|
+
}
|
|
54
|
+
if (subject.trim() !== subject || subject === "") {
|
|
55
|
+
throw new Error(`finding subject must be non-empty and untrimmed-clean: '${subject}'`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function renderFindingLine(f) {
|
|
59
|
+
const err = f.severity === "error" ? " [error]" : "";
|
|
60
|
+
if (f.subject === undefined || f.subject === null) {
|
|
61
|
+
return `[finding] ${f.category}${err}: ${f.summary}`;
|
|
62
|
+
}
|
|
63
|
+
assertRenderableSubject(f.subject);
|
|
64
|
+
return `[finding] ${f.category}${err} (${f.subject}): ${f.summary}`;
|
|
65
|
+
}
|
|
66
|
+
const EXPLICIT = /^\[finding\] (\w+)(?: \[error\])? \(([^)]+)\): /;
|
|
67
|
+
const LEGACY = /^\[finding\] (\w+)(?: \[error\])?: /;
|
|
68
|
+
/**
|
|
69
|
+
* Recovers the identity of a stored baseline line.
|
|
70
|
+
*
|
|
71
|
+
* Three outcomes, and the third is the one that matters: an explicit identity
|
|
72
|
+
* is read exactly; a LEGACY line is keyed on its whole summary, which
|
|
73
|
+
* reproduces today's whole-line behaviour for lines that have not moved yet;
|
|
74
|
+
* and a line that is not a finding at all returns null.
|
|
75
|
+
*
|
|
76
|
+
* Keying a legacy line on its summary is not a silent approximation of
|
|
77
|
+
* identity — it IS the old contract, kept deliberately so an unmigrated line
|
|
78
|
+
* behaves exactly as it does now rather than matching something it should not.
|
|
79
|
+
*/
|
|
80
|
+
export function parseFindingLine(line) {
|
|
81
|
+
const m = EXPLICIT.exec(line);
|
|
82
|
+
if (m) {
|
|
83
|
+
return { identity: { category: m[1], subject: m[2] }, explicit: true };
|
|
84
|
+
}
|
|
85
|
+
const l = LEGACY.exec(line);
|
|
86
|
+
if (!l)
|
|
87
|
+
return null;
|
|
88
|
+
return {
|
|
89
|
+
identity: { category: l[1], subject: null },
|
|
90
|
+
explicit: false,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The comparison key. For an explicit identity that is (category, subject); for
|
|
95
|
+
* a legacy line it falls back to the whole line, preserving current behaviour.
|
|
96
|
+
*/
|
|
97
|
+
export function findingKey(line) {
|
|
98
|
+
const parsed = parseFindingLine(line);
|
|
99
|
+
if (!parsed)
|
|
100
|
+
return `raw\u0000${line}`;
|
|
101
|
+
if (parsed.identity.subject === null)
|
|
102
|
+
return `legacy\u0000${line}`;
|
|
103
|
+
return `id\u0000${parsed.identity.category}\u0000${parsed.identity.subject}`;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Compares live findings against a baseline by identity.
|
|
107
|
+
*
|
|
108
|
+
* Only gate-acting categories belong in a baseline (M-ADR 0132 §4.3 — `orphan`
|
|
109
|
+
* and `divergence`); filtering is the caller's, because a comparator that
|
|
110
|
+
* silently dropped categories would make an empty result ambiguous between
|
|
111
|
+
* "nothing gate-acting" and "nothing at all".
|
|
112
|
+
*/
|
|
113
|
+
export function compareToBaseline(live, baseline) {
|
|
114
|
+
const baseByKey = new Map();
|
|
115
|
+
let legacyKeyed = 0;
|
|
116
|
+
for (const b of baseline) {
|
|
117
|
+
const key = findingKey(b);
|
|
118
|
+
if (key.startsWith("legacy\u0000") || key.startsWith("raw\u0000"))
|
|
119
|
+
legacyKeyed++;
|
|
120
|
+
// First occurrence wins; a baseline holding the same identity twice is a
|
|
121
|
+
// duplicate, and collapsing it here matches what a re-take does anyway.
|
|
122
|
+
if (!baseByKey.has(key))
|
|
123
|
+
baseByKey.set(key, b);
|
|
124
|
+
}
|
|
125
|
+
const unbaselined = [];
|
|
126
|
+
const reworded = [];
|
|
127
|
+
const matched = new Set();
|
|
128
|
+
let unchanged = 0;
|
|
129
|
+
for (const l of live) {
|
|
130
|
+
const key = findingKey(l);
|
|
131
|
+
const b = baseByKey.get(key);
|
|
132
|
+
if (b === undefined) {
|
|
133
|
+
unbaselined.push(l);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
matched.add(key);
|
|
137
|
+
if (b === l)
|
|
138
|
+
unchanged++;
|
|
139
|
+
else
|
|
140
|
+
reworded.push({ baseline: b, live: l });
|
|
141
|
+
}
|
|
142
|
+
const stale = [...baseByKey.entries()]
|
|
143
|
+
.filter(([k]) => !matched.has(k))
|
|
144
|
+
.map(([, v]) => v);
|
|
145
|
+
return { unbaselined, stale, reworded, unchanged, legacyKeyed };
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=finding-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-identity.js","sourceRoot":"","sources":["../../../src/lib/catalogue/finding-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,10 +21,22 @@ export interface Finding {
|
|
|
21
21
|
readonly category: FindingCategory | string;
|
|
22
22
|
readonly summary: string;
|
|
23
23
|
readonly severity: FindingSeverity;
|
|
24
|
+
/**
|
|
25
|
+
* The thing this finding is ABOUT — `kind:id` or a repo-relative path — held
|
|
26
|
+
* separately from the prose so a findings baseline can key on it while the
|
|
27
|
+
* wording stays free to improve (M-ADR 0132 §4.3 as amended; ledger §3p).
|
|
28
|
+
*
|
|
29
|
+
* Optional, and staying optional is the migration strategy: a site that has
|
|
30
|
+
* not declared one renders and keys exactly as it does today, so emission
|
|
31
|
+
* sites move one at a time and an estate's re-take is proportional to what
|
|
32
|
+
* has actually moved. See `finding-identity.ts` for why identity is emitted
|
|
33
|
+
* rather than recovered from the rendered text.
|
|
34
|
+
*/
|
|
35
|
+
readonly subject?: string;
|
|
24
36
|
}
|
|
25
37
|
export declare class FindingsLog {
|
|
26
38
|
private readonly findings;
|
|
27
|
-
add(category: FindingCategory | string, summary: string, severity?: FindingSeverity): void;
|
|
39
|
+
add(category: FindingCategory | string, summary: string, severity?: FindingSeverity, subject?: string): void;
|
|
28
40
|
/** Returns a copy of recorded findings, in insertion order. */
|
|
29
41
|
all(): readonly Finding[];
|
|
30
42
|
/** Count findings, optionally filtered to a single category. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,UAAU,CAAC;AAEf;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/C,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,GAAG,CACD,QAAQ,EAAE,eAAe,GAAG,MAAM,EAClC,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,eAAwB,EAClC,OAAO,CAAC,EAAE,MAAM,GACf,IAAI;IAaP,+DAA+D;IAC/D,GAAG,IAAI,SAAS,OAAO,EAAE;IAIzB,gEAAgE;IAChE,KAAK,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM;IAKlD,uEAAuE;IACvE,UAAU,IAAI,MAAM;IAIpB,iFAAiF;IACjF,MAAM,IAAI,MAAM;CAGjB"}
|
|
@@ -9,10 +9,20 @@
|
|
|
9
9
|
* spec. This module hardcodes the well-known ones for type safety; new
|
|
10
10
|
* categories may be passed as freeform strings if they emerge.
|
|
11
11
|
*/
|
|
12
|
+
import { renderFindingLine } from "./finding-identity.js";
|
|
12
13
|
export class FindingsLog {
|
|
13
14
|
findings = [];
|
|
14
|
-
add(category, summary, severity = "warn") {
|
|
15
|
-
|
|
15
|
+
add(category, summary, severity = "warn", subject) {
|
|
16
|
+
// Spread rather than an explicit `subject: undefined`, which
|
|
17
|
+
// exactOptionalPropertyTypes rejects — an absent subject and a subject
|
|
18
|
+
// whose value is undefined are different things here, and the type is
|
|
19
|
+
// right to insist on the distinction.
|
|
20
|
+
this.findings.push({
|
|
21
|
+
category,
|
|
22
|
+
summary,
|
|
23
|
+
severity,
|
|
24
|
+
...(subject === undefined ? {} : { subject }),
|
|
25
|
+
});
|
|
16
26
|
}
|
|
17
27
|
/** Returns a copy of recorded findings, in insertion order. */
|
|
18
28
|
all() {
|
|
@@ -30,11 +40,7 @@ export class FindingsLog {
|
|
|
30
40
|
}
|
|
31
41
|
/** Render every finding as a stdout line. Error-severity findings are marked. */
|
|
32
42
|
render() {
|
|
33
|
-
return this.findings
|
|
34
|
-
.map((f) => f.severity === "error"
|
|
35
|
-
? `[finding] ${f.category} [error]: ${f.summary}`
|
|
36
|
-
: `[finding] ${f.category}: ${f.summary}`)
|
|
37
|
-
.join("\n");
|
|
43
|
+
return this.findings.map((f) => renderFindingLine(f)).join("\n");
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
46
|
//# sourceMappingURL=findings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../../src/lib/catalogue/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../../src/lib/catalogue/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAoC1D,MAAM,OAAO,WAAW;IACL,QAAQ,GAAc,EAAE,CAAC;IAE1C,GAAG,CACD,QAAkC,EAClC,OAAe,EACf,WAA4B,MAAM,EAClC,OAAgB;QAEhB,6DAA6D;QAC7D,uEAAuE;QACvE,sEAAsE;QACtE,sCAAsC;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,+DAA+D;IAC/D,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,QAAmC;QACvC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IACrE,CAAC;IAED,uEAAuE;IACvE,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IACpE,CAAC;IAED,iFAAiF;IACjF,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;CACF"}
|
|
@@ -85,6 +85,33 @@ export interface RubricEligibility {
|
|
|
85
85
|
readonly eligibilityFilter: string | null;
|
|
86
86
|
/** Why the filter is what it is — rendered nowhere, read by whoever changes it. */
|
|
87
87
|
readonly eligibilityNote: string;
|
|
88
|
+
/**
|
|
89
|
+
* Catalogue column holding the artefact's repo-relative path, for the
|
|
90
|
+
* METHOD-MANAGED eligibility rule (§3ah's ruled locus filter).
|
|
91
|
+
*
|
|
92
|
+
* An artefact whose path is claimed by a synced bundle's `managed_paths` is
|
|
93
|
+
* not adopter-eligible: sync overwrites any remediation the adopter could
|
|
94
|
+
* make, so requiring a current score there manufactures a gap nobody at that
|
|
95
|
+
* repo is able to close. The ruling that established this (2026-08-07) was
|
|
96
|
+
* about method-owned ADRs; the mechanism is the lock rather than a path
|
|
97
|
+
* convention because the lock IS the definition — "this content is written
|
|
98
|
+
* from elsewhere and your edits do not survive".
|
|
99
|
+
*
|
|
100
|
+
* Reading the lock rather than matching `docs/method/` has three properties a
|
|
101
|
+
* prefix match does not. It degenerates correctly at the producer, which has
|
|
102
|
+
* no lock at all, so the method repo goes on scoring its own ADRs with no
|
|
103
|
+
* special case. It catches every producer, not just this one — measured, the
|
|
104
|
+
* forward estate's 120 excluded Accepted ADRs are 115 from `platform-baseline`
|
|
105
|
+
* and 5 REFERENCE-ARCHITECTURE ADRs, equally un-remediable and equally
|
|
106
|
+
* invisible to a `docs/method/` match. And it cannot drift from what sync
|
|
107
|
+
* actually manages, because it is the same record sync writes.
|
|
108
|
+
*
|
|
109
|
+
* `undefined` means NOT DECLARED for this rubric, which is not the same as
|
|
110
|
+
* "no managed targets exist" — only `adr-quality` has been measured against
|
|
111
|
+
* real estate data. The others stay undeclared rather than being given a
|
|
112
|
+
* plausible column, per this file's standing rule.
|
|
113
|
+
*/
|
|
114
|
+
readonly managedPathColumn?: string;
|
|
88
115
|
/**
|
|
89
116
|
* Registry file that ADOPTS this rubric, when it is not `<rubricId>-scores.yaml`.
|
|
90
117
|
*
|
|
@@ -107,7 +134,19 @@ export interface RubricEligibility {
|
|
|
107
134
|
*/
|
|
108
135
|
export declare const RUBRIC_ELIGIBILITY: readonly RubricEligibility[];
|
|
109
136
|
export interface ScoresCoverageFinding {
|
|
110
|
-
|
|
137
|
+
/**
|
|
138
|
+
* `out-of-scope-score` exists because the method-managed eligibility rule
|
|
139
|
+
* would otherwise be a SILENT one. Removing an artefact from the denominator
|
|
140
|
+
* also removes any score of it from `covered`, and such a score is not
|
|
141
|
+
* `orphaned-score` either — its target resolves perfectly well. Without this
|
|
142
|
+
* kind it would land in no count at all, and the filter would quietly swallow
|
|
143
|
+
* exactly the population that motivated it: the forward estate held 24 such
|
|
144
|
+
* rows before retiring them by hand.
|
|
145
|
+
*
|
|
146
|
+
* A shrinking denominator that hides rows on the way past is the failure this
|
|
147
|
+
* predicate was built to remove, not one it may introduce.
|
|
148
|
+
*/
|
|
149
|
+
readonly kind: "uncovered" | "orphaned-score" | "unresolvable-staleness" | "out-of-scope-score";
|
|
111
150
|
readonly rubricId: string;
|
|
112
151
|
readonly subject: string;
|
|
113
152
|
}
|
|
@@ -120,6 +159,15 @@ export interface RubricCoverageMetric {
|
|
|
120
159
|
/** Scores present for this rubric, however they resolve. */
|
|
121
160
|
readonly scored: number;
|
|
122
161
|
readonly orphaned: number;
|
|
162
|
+
/**
|
|
163
|
+
* Rows removed from `eligible` by the method-managed rule, and which bundle
|
|
164
|
+
* claims them. ALWAYS reported alongside the denominator it shrank, never
|
|
165
|
+
* netted into it silently: a denominator that changes without saying so is
|
|
166
|
+
* the basis error this file's every other metric line exists to prevent.
|
|
167
|
+
* Zero at the producer, and zero for any rubric with no `managedPathColumn`.
|
|
168
|
+
*/
|
|
169
|
+
readonly managedExcluded: number;
|
|
170
|
+
readonly managedExcludedByBundle: Readonly<Record<string, number>>;
|
|
123
171
|
}
|
|
124
172
|
export interface ScoresCoverageResult {
|
|
125
173
|
readonly findings: readonly ScoresCoverageFinding[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scores-coverage.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/scores-coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"scores-coverage.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/scores-coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
*/
|
|
66
66
|
import { existsSync } from "node:fs";
|
|
67
67
|
import { join } from "node:path";
|
|
68
|
+
import { readLockFile } from "../lock-file.js";
|
|
68
69
|
/**
|
|
69
70
|
* The declared mapping. Three entries are EXERCISED against real estate data
|
|
70
71
|
* (adr-quality, contract-quality, domain-architecture); the rest are declared
|
|
@@ -158,8 +159,8 @@ export const RUBRIC_ELIGIBILITY = [
|
|
|
158
159
|
joinColumn: "id",
|
|
159
160
|
// Refs are '<domain>-capability-spec-<capability>'; the capability is the tail.
|
|
160
161
|
refTransform: (r) => `regexp_replace(${r}, '^.*-capability-spec-', '')`,
|
|
161
|
-
eligibilityFilter:
|
|
162
|
-
eligibilityNote: "Measured 19/19 on the tail. The domain prefix is NOT part of capabilities.id here, so the whole ref resolves to nothing (0/19) — the transform is required, not cosmetic.",
|
|
162
|
+
eligibilityFilter: "status <> 'deprecated'",
|
|
163
|
+
eligibilityNote: "Measured 19/19 on the tail. The domain prefix is NOT part of capabilities.id here, so the whole ref resolves to nothing (0/19) — the transform is required, not cosmetic. Excludes deprecated capabilities on the same footing as feature-grounding and traceability-manifest: three rubrics judging one catalogue must agree about who is in the population, and a rubric that disagreed would reintroduce as a metric discrepancy exactly the retirement the other two just retired. Missed on the first pass because the control hardcoded two rubric names instead of deriving them; it now derives them.",
|
|
163
164
|
},
|
|
164
165
|
// ── Banded rubrics with NO catalogued eligibility population ─────────────
|
|
165
166
|
{
|
|
@@ -191,7 +192,8 @@ export const RUBRIC_ELIGIBILITY = [
|
|
|
191
192
|
// The catalogue strips the tier prefix (M-ADR 0186 §4.4); registries keep it.
|
|
192
193
|
refTransform: (r) => `regexp_replace(${r}, '^[A-Z]+-ADR-', 'ADR-')`,
|
|
193
194
|
eligibilityFilter: "status = 'Accepted'",
|
|
194
|
-
|
|
195
|
+
managedPathColumn: "doc_path",
|
|
196
|
+
eligibilityNote: "Accepted only, and adopter-owned only. A Proposed ADR is mid-decision and a Superseded one is history; requiring a current score on either would manufacture a gap nobody should close. The managed-path rule adds the second half of the same argument, ruled 2026-08-07: an adopter cannot remediate an ADR that sync overwrites, so a method-managed ADR is not in the adopter's denominator — its quality belongs to the producer's own registry, and an adopter's assessment of it is feedback to raise rather than a row to maintain. Measured at both estates 2026-08-08 (committed catalogues, member tier): forward 203 Accepted -> 83 adopter-owned (120 excluded); reverse 182 Accepted -> 62 adopter-owned (120 excluded). Zero rows under a producer path escaped the lock at either estate, so the lock and a path heuristic agree on today's data — the lock is used anyway, because agreement today is not the same as being the right rule.",
|
|
195
197
|
},
|
|
196
198
|
{
|
|
197
199
|
rubricId: "contract-quality",
|
|
@@ -226,8 +228,8 @@ export const RUBRIC_ELIGIBILITY = [
|
|
|
226
228
|
catalogue: "capabilities",
|
|
227
229
|
joinColumn: "id",
|
|
228
230
|
refTransform: null,
|
|
229
|
-
eligibilityFilter:
|
|
230
|
-
eligibilityNote: "Every capability.",
|
|
231
|
+
eligibilityFilter: "status <> 'deprecated'",
|
|
232
|
+
eligibilityNote: "Every capability. EXCLUDES DEPRECATED CAPABILITIES — the SAME PATTERN contract-quality already applies to the contracts catalogue (identical operator and value, and its note gives the same reason: they are on the way out, and scoring them is work with no consumer), and the same argument adr-quality makes for a Superseded ADR. This applies an existing pattern to a third catalogue rather than setting a new one. This is the mechanism that retires a withdrawn capability's permanently-unanswerable findings, replacing the M-ADR 0199 exemption vocabulary that was investigated and NOT built: across both estates the authored-intent evidence base was zero, and a retirement expressed in the catalogue's OWN documented vocabulary needs no annotation surface. It resolves only where the retirement is DECLARED — a capability whose traceability manifest was deleted has no authored status and falls to the builder's hardcoded default, so declaring the state is the estate-side half.",
|
|
231
233
|
},
|
|
232
234
|
{
|
|
233
235
|
rubricId: "traceability-manifest",
|
|
@@ -235,8 +237,8 @@ export const RUBRIC_ELIGIBILITY = [
|
|
|
235
237
|
catalogue: "capabilities",
|
|
236
238
|
joinColumn: "id",
|
|
237
239
|
refTransform: null,
|
|
238
|
-
eligibilityFilter:
|
|
239
|
-
eligibilityNote: "Every capability.",
|
|
240
|
+
eligibilityFilter: "status <> 'deprecated'",
|
|
241
|
+
eligibilityNote: "Every capability. Excludes deprecated capabilities per feature-grounding's note — the rubrics judging this catalogue must agree about who is in the population.",
|
|
240
242
|
},
|
|
241
243
|
{
|
|
242
244
|
rubricId: "glossary",
|
|
@@ -330,6 +332,31 @@ async function rows(session, sql) {
|
|
|
330
332
|
const reader = await session.conn.runAndReadAll(sql);
|
|
331
333
|
return reader.getRows();
|
|
332
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* Every path claimed by a synced bundle in this repo's lock, mapped to the
|
|
337
|
+
* bundle claiming it.
|
|
338
|
+
*
|
|
339
|
+
* Empty at the producer — it carries no `method-baseline.lock`, so nothing is
|
|
340
|
+
* written from elsewhere and nothing is excluded. That is the degenerate case
|
|
341
|
+
* working by construction rather than by a repo-kind check: `canonical-method`
|
|
342
|
+
* is not even a member of the CLI's `RepoKind` union, so a check on it would
|
|
343
|
+
* have been a special case resting on a marker the type system does not model.
|
|
344
|
+
*/
|
|
345
|
+
async function managedPathOwners(sddRoot) {
|
|
346
|
+
const lock = await readLockFile(sddRoot);
|
|
347
|
+
const owners = new Map();
|
|
348
|
+
if (!lock)
|
|
349
|
+
return owners;
|
|
350
|
+
for (const bundle of lock.bundles) {
|
|
351
|
+
for (const p of bundle.managedPaths) {
|
|
352
|
+
// First claim wins, matching `pathToBundleMap`: a path claimed twice is a
|
|
353
|
+
// sync-side concern, and this predicate is not the place to adjudicate it.
|
|
354
|
+
if (!owners.has(p))
|
|
355
|
+
owners.set(p, bundle.name);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return owners;
|
|
359
|
+
}
|
|
333
360
|
/**
|
|
334
361
|
* Runs the predicate. `available` names the catalogues actually present, so a
|
|
335
362
|
* rubric whose population file is absent is skipped the way every other
|
|
@@ -375,6 +402,7 @@ export async function runScoresCoverage(session, options) {
|
|
|
375
402
|
subject: `${stalenessBasis.none} score(s) carry neither corpus_ref nor a resolvable target_path — their currency is UNKNOWN, not fresh`,
|
|
376
403
|
});
|
|
377
404
|
}
|
|
405
|
+
const managedOwners = await managedPathOwners(options.sddRoot);
|
|
378
406
|
const declared = new Set(RUBRIC_ELIGIBILITY.map((r) => r.rubricId));
|
|
379
407
|
const present = await rows(session, `SELECT DISTINCT rubric_id FROM "quality_scores" ORDER BY 1;`);
|
|
380
408
|
const undeclaredRubrics = present
|
|
@@ -399,16 +427,40 @@ export async function runScoresCoverage(session, options) {
|
|
|
399
427
|
covered: scored,
|
|
400
428
|
scored,
|
|
401
429
|
orphaned: 0,
|
|
430
|
+
managedExcluded: 0,
|
|
431
|
+
managedExcludedByBundle: {},
|
|
402
432
|
});
|
|
403
433
|
}
|
|
404
434
|
continue;
|
|
405
435
|
}
|
|
406
436
|
if (!options.available.has(spec.catalogue))
|
|
407
437
|
continue;
|
|
438
|
+
// The method-managed exclusion, resolved BEFORE any count is taken so that
|
|
439
|
+
// every figure below shares one denominator. Computed here rather than
|
|
440
|
+
// inlined at each query because `eligibleWhere` reaches four call sites,
|
|
441
|
+
// and a rule applied to three of them is worse than a rule applied to none.
|
|
442
|
+
const excludedRows = spec.managedPathColumn && managedOwners.size > 0
|
|
443
|
+
? await rows(session, `SELECT "${spec.managedPathColumn}" FROM "${spec.catalogue}"
|
|
444
|
+
WHERE (${spec.eligibilityFilter ?? "TRUE"})
|
|
445
|
+
AND "${spec.managedPathColumn}" IN (${[...managedOwners.keys()].map(sqlStr).join(", ")});`)
|
|
446
|
+
: [];
|
|
447
|
+
const managedExcludedByBundle = {};
|
|
448
|
+
for (const [p] of excludedRows) {
|
|
449
|
+
const bundle = managedOwners.get(String(p)) ?? "(unknown bundle)";
|
|
450
|
+
managedExcludedByBundle[bundle] = (managedExcludedByBundle[bundle] ?? 0) + 1;
|
|
451
|
+
}
|
|
452
|
+
const managedExcluded = excludedRows.length;
|
|
453
|
+
const eligibleWhere = managedExcluded > 0
|
|
454
|
+
? `(${spec.eligibilityFilter ?? "TRUE"}) AND "${spec.managedPathColumn}" NOT IN (${[
|
|
455
|
+
...managedOwners.keys(),
|
|
456
|
+
]
|
|
457
|
+
.map(sqlStr)
|
|
458
|
+
.join(", ")})`
|
|
459
|
+
: (spec.eligibilityFilter ?? "TRUE");
|
|
408
460
|
if (scored === 0) {
|
|
409
461
|
// The population exists and nothing is scored — the loudest case, and
|
|
410
462
|
// exactly the silence M-ADR 0205 §4.5 names. Every eligible row is a gap.
|
|
411
|
-
const eligibleRows = await rows(session, `SELECT id FROM "${spec.catalogue}" WHERE (${
|
|
463
|
+
const eligibleRows = await rows(session, `SELECT id FROM "${spec.catalogue}" WHERE (${eligibleWhere}) ORDER BY id;`);
|
|
412
464
|
for (const [id] of eligibleRows) {
|
|
413
465
|
findings.push({ kind: "uncovered", rubricId: spec.rubricId, subject: String(id) });
|
|
414
466
|
}
|
|
@@ -419,6 +471,8 @@ export async function runScoresCoverage(session, options) {
|
|
|
419
471
|
covered: 0,
|
|
420
472
|
scored: 0,
|
|
421
473
|
orphaned: 0,
|
|
474
|
+
managedExcluded,
|
|
475
|
+
managedExcludedByBundle,
|
|
422
476
|
});
|
|
423
477
|
continue;
|
|
424
478
|
}
|
|
@@ -426,7 +480,6 @@ export async function runScoresCoverage(session, options) {
|
|
|
426
480
|
// Eligibility is always a conjunct, so it composes with the not-exists
|
|
427
481
|
// clause without any string surgery on an assembled WHERE — `TRUE` for the
|
|
428
482
|
// unfiltered case keeps one query shape instead of two.
|
|
429
|
-
const eligibleWhere = spec.eligibilityFilter ?? "TRUE";
|
|
430
483
|
const scoreSet = `SELECT * FROM "quality_scores" WHERE rubric_id = ${sqlStr(spec.rubricId)}`;
|
|
431
484
|
// Direction 1 — eligible targets with no score.
|
|
432
485
|
const uncovered = await rows(session, `SELECT c.id FROM "${spec.catalogue}" c
|
|
@@ -445,6 +498,26 @@ export async function runScoresCoverage(session, options) {
|
|
|
445
498
|
for (const [r] of orphaned) {
|
|
446
499
|
findings.push({ kind: "orphaned-score", rubricId: spec.rubricId, subject: String(r) });
|
|
447
500
|
}
|
|
501
|
+
// Direction 3 — scores whose target RESOLVES but sits outside this repo's
|
|
502
|
+
// scope. Only reachable where the managed rule actually excluded something.
|
|
503
|
+
if (managedExcluded > 0) {
|
|
504
|
+
const outOfScope = await rows(session, `SELECT s.target_ref FROM (${scoreSet}) s
|
|
505
|
+
WHERE EXISTS (
|
|
506
|
+
SELECT 1 FROM "${spec.catalogue}" c
|
|
507
|
+
WHERE c."${spec.joinColumn}" = ${ref}
|
|
508
|
+
AND c."${spec.managedPathColumn}" IN (${[...managedOwners.keys()]
|
|
509
|
+
.map(sqlStr)
|
|
510
|
+
.join(", ")})
|
|
511
|
+
)
|
|
512
|
+
ORDER BY s.target_ref;`);
|
|
513
|
+
for (const [r] of outOfScope) {
|
|
514
|
+
findings.push({
|
|
515
|
+
kind: "out-of-scope-score",
|
|
516
|
+
rubricId: spec.rubricId,
|
|
517
|
+
subject: String(r),
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
}
|
|
448
521
|
const eligible = Number((await rows(session, `SELECT COUNT(*) FROM "${spec.catalogue}" WHERE (${eligibleWhere});`))[0][0]);
|
|
449
522
|
metrics.push({
|
|
450
523
|
rubricId: spec.rubricId,
|
|
@@ -453,6 +526,8 @@ export async function runScoresCoverage(session, options) {
|
|
|
453
526
|
covered: eligible - uncovered.length,
|
|
454
527
|
scored,
|
|
455
528
|
orphaned: orphaned.length,
|
|
529
|
+
managedExcluded,
|
|
530
|
+
managedExcludedByBundle,
|
|
456
531
|
});
|
|
457
532
|
}
|
|
458
533
|
return { findings, metrics, undeclaredRubrics, notAdopted, stalenessBasis, totalScores, transformBridgedRefs };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scores-coverage.js","sourceRoot":"","sources":["../../../src/lib/catalogue/scores-coverage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scores-coverage.js","sourceRoot":"","sources":["../../../src/lib/catalogue/scores-coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,11 @@ export interface StaleScoreRow {
|
|
|
6
6
|
/** What moved: the newest commit touching the target after the anchor. */
|
|
7
7
|
readonly detail: string;
|
|
8
8
|
}
|
|
9
|
+
export interface TargetMissingRow {
|
|
10
|
+
readonly rubricId: string;
|
|
11
|
+
readonly targetRef: string;
|
|
12
|
+
readonly targetPath: string;
|
|
13
|
+
}
|
|
9
14
|
export interface StalenessVerdictsResult {
|
|
10
15
|
/** Rows whose basis admits a verdict attempt (corpus_ref | scored_at). */
|
|
11
16
|
readonly assessed: number;
|
|
@@ -15,6 +20,17 @@ export interface StalenessVerdictsResult {
|
|
|
15
20
|
readonly unknownAnchor: number;
|
|
16
21
|
/** corpus_ref present but no target_path — no per-target verdict possible. */
|
|
17
22
|
readonly anchorWithoutPath: number;
|
|
23
|
+
/** target_path does not exist at HEAD — cannot be re-reviewed, only withdrawn or re-pointed. */
|
|
24
|
+
readonly targetMissing: readonly TargetMissingRow[];
|
|
25
|
+
/** Path exists at HEAD but not at the anchor, and no rename explains it. */
|
|
26
|
+
readonly pathAbsentAtAnchor: number;
|
|
27
|
+
/**
|
|
28
|
+
* Verdicts whose target is a DIRECTORY, counted separately because the test
|
|
29
|
+
* means something wider there — stale iff anything beneath it changed. Buried
|
|
30
|
+
* in the stale total these are invisible; a near-unconditional verdict looks
|
|
31
|
+
* identical to a measured one.
|
|
32
|
+
*/
|
|
33
|
+
readonly directoryTargets: number;
|
|
18
34
|
/** Set when no verdicts were attempted — the reason is stated, never silent. */
|
|
19
35
|
readonly skipped?: string;
|
|
20
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staleness-verdicts.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/staleness-verdicts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"staleness-verdicts.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/staleness-verdicts.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAAC;IAC3C,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,gGAAgG;IAChG,QAAQ,CAAC,aAAa,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpD,4EAA4E;IAC5E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,gFAAgF;IAChF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAgHD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE;IACP,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,uBAAuB,CAAC,CAsJlC;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,QAAQ,GAAG,WAAW,GAC3B,MAAM,EAAE,CAgDV"}
|