@xenos1996/usa 2.0.1 → 2.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.
- package/README.md +44 -33
- package/USA.md +9 -9
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +194 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -1
- package/dist/engine/audit.d.ts.map +1 -1
- package/dist/engine/audit.js +42 -4
- package/dist/engine/audit.js.map +1 -1
- package/dist/engine/automatability.d.ts +32 -0
- package/dist/engine/automatability.d.ts.map +1 -0
- package/dist/engine/automatability.js +81 -0
- package/dist/engine/automatability.js.map +1 -0
- package/dist/engine/catalogues.d.ts +43 -0
- package/dist/engine/catalogues.d.ts.map +1 -0
- package/dist/engine/catalogues.js +109 -0
- package/dist/engine/catalogues.js.map +1 -0
- package/dist/engine/diff.d.ts +14 -0
- package/dist/engine/diff.d.ts.map +1 -1
- package/dist/engine/diff.js +59 -36
- package/dist/engine/diff.js.map +1 -1
- package/dist/engine/evaluate.d.ts +2 -1
- package/dist/engine/evaluate.d.ts.map +1 -1
- package/dist/engine/evaluate.js +125 -3
- package/dist/engine/evaluate.js.map +1 -1
- package/dist/engine/gate.d.ts +33 -0
- package/dist/engine/gate.d.ts.map +1 -1
- package/dist/engine/gate.js +116 -0
- package/dist/engine/gate.js.map +1 -1
- package/dist/engine/loader.d.ts.map +1 -1
- package/dist/engine/loader.js +92 -4
- package/dist/engine/loader.js.map +1 -1
- package/dist/engine/review.d.ts +49 -0
- package/dist/engine/review.d.ts.map +1 -0
- package/dist/engine/review.js +128 -0
- package/dist/engine/review.js.map +1 -0
- package/dist/engine/suppression.d.ts +52 -0
- package/dist/engine/suppression.d.ts.map +1 -0
- package/dist/engine/suppression.js +91 -0
- package/dist/engine/suppression.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/report/json.d.ts +48 -0
- package/dist/report/json.d.ts.map +1 -0
- package/dist/report/json.js +60 -0
- package/dist/report/json.js.map +1 -0
- package/dist/report/markdown.d.ts.map +1 -1
- package/dist/report/markdown.js +110 -17
- package/dist/report/markdown.js.map +1 -1
- package/dist/report/sarif.d.ts +84 -0
- package/dist/report/sarif.d.ts.map +1 -0
- package/dist/report/sarif.js +129 -0
- package/dist/report/sarif.js.map +1 -0
- package/dist/report/signature.d.ts +76 -0
- package/dist/report/signature.d.ts.map +1 -0
- package/dist/report/signature.js +206 -0
- package/dist/report/signature.js.map +1 -0
- package/dist/types.d.ts +115 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/dist/util/project.d.ts.map +1 -1
- package/dist/util/project.js +23 -1
- package/dist/util/project.js.map +1 -1
- package/dist/util/site.d.ts +13 -0
- package/dist/util/site.d.ts.map +1 -0
- package/dist/util/site.js +24 -0
- package/dist/util/site.js.map +1 -0
- package/package.json +9 -1
- package/rules/catalogues.yaml +109 -0
- package/rules/core/provenance-attestation.yaml +65 -0
- package/rules/core/provenance-cosign.yaml +110 -0
- package/rules/index.yaml +2 -0
- package/rules/profiles/maturity.yaml +1 -1
- package/templates/AGENTS.audit.md +135 -0
- package/templates/AUDIT_REPORT.md +155 -0
package/dist/engine/gate.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { parse as parseYaml } from 'yaml';
|
|
2
|
+
import { isOpenStatus, ruleMovement } from './diff.js';
|
|
1
3
|
import { SEVERITY_LADDER } from './loader.js';
|
|
2
4
|
/**
|
|
3
5
|
* Findings that should block a build: anything at or above `threshold` that is
|
|
@@ -44,4 +46,118 @@ export function evaluateGate(report, failOn, quiet) {
|
|
|
44
46
|
}
|
|
45
47
|
return 1;
|
|
46
48
|
}
|
|
49
|
+
/* ------------------------------------------ new-code gate (--baseline) -- */
|
|
50
|
+
/**
|
|
51
|
+
* Fail-closed parse of a baseline report trailer.
|
|
52
|
+
*
|
|
53
|
+
* The baseline is the judge's memory of what was already known: an empty
|
|
54
|
+
* file, a report without a trailer, non-YAML, or a YAML document without a
|
|
55
|
+
* well-formed `rules:` mapping all throw. A malformed baseline must error
|
|
56
|
+
* loudly (CLI exit 2) — never silently pass a gate that compared against
|
|
57
|
+
* nothing. Pure: takes the trailer YAML string, returns structured data.
|
|
58
|
+
*/
|
|
59
|
+
export function parseBaselineTrailer(trailerYaml) {
|
|
60
|
+
let parsed;
|
|
61
|
+
try {
|
|
62
|
+
parsed = parseYaml(trailerYaml);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
throw new Error(`--baseline trailer is not valid YAML: ${err.message}`, {
|
|
66
|
+
cause: err,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
70
|
+
throw new Error('--baseline trailer is malformed: expected a YAML mapping.');
|
|
71
|
+
}
|
|
72
|
+
const rules = parsed.rules;
|
|
73
|
+
if (!rules || typeof rules !== 'object' || Array.isArray(rules)) {
|
|
74
|
+
throw new Error('--baseline trailer is malformed: missing or invalid `rules:` section.');
|
|
75
|
+
}
|
|
76
|
+
for (const [id, r] of Object.entries(rules))
|
|
77
|
+
assertTrailerRule(id, r);
|
|
78
|
+
return parsed;
|
|
79
|
+
}
|
|
80
|
+
/** One baseline rule entry is a mapping with string status and severity. */
|
|
81
|
+
function assertTrailerRule(id, r) {
|
|
82
|
+
const entry = r;
|
|
83
|
+
if (!entry || typeof entry !== 'object') {
|
|
84
|
+
throw new Error(`--baseline trailer is malformed: rule ${id} is not a mapping.`);
|
|
85
|
+
}
|
|
86
|
+
if (typeof entry.status !== 'string' || typeof entry.severity !== 'string') {
|
|
87
|
+
throw new Error(`--baseline trailer is malformed: rule ${id} needs string status and severity.`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Findings that should block a new-code gate: only what this change
|
|
92
|
+
* introduced or made worse, so adopting USA on a legacy codebase does not
|
|
93
|
+
* fail CI on pre-existing debt.
|
|
94
|
+
*
|
|
95
|
+
* A rule blocks when its diff movement (shared with `usa diff`, so text and
|
|
96
|
+
* verdict agree) is:
|
|
97
|
+
* - newly-applicable AND currently open at or above `threshold`
|
|
98
|
+
* (pre-existing open findings of any severity pass through), or
|
|
99
|
+
* - regressed — decided before, open or back in the judgement queue now.
|
|
100
|
+
* Regressions block at any severity: breaking what passed is new debt no
|
|
101
|
+
* matter the rung. Suppressed findings never block, same as `--fail-on`.
|
|
102
|
+
*/
|
|
103
|
+
export function newCodeBlocking(report, baseline, threshold) {
|
|
104
|
+
// One finding per rule: first occurrence wins, so duplicate rule ids in a
|
|
105
|
+
// hand-built report cannot smuggle extra blockers past the gate.
|
|
106
|
+
const current = new Map();
|
|
107
|
+
for (const f of report.findings) {
|
|
108
|
+
if (f.suppressedReason)
|
|
109
|
+
continue;
|
|
110
|
+
if (!current.has(f.ruleId))
|
|
111
|
+
current.set(f.ruleId, f);
|
|
112
|
+
}
|
|
113
|
+
const min = SEVERITY_LADDER.indexOf(threshold);
|
|
114
|
+
const atOrAbove = (severity) => SEVERITY_LADDER.indexOf(severity) >= min;
|
|
115
|
+
const baselineRules = baseline.rules ?? {};
|
|
116
|
+
const blocking = [];
|
|
117
|
+
for (const [id, f] of [...current.entries()].sort(([a], [b]) => a.localeCompare(b))) {
|
|
118
|
+
if (isNewCodeBlocker(f, baselineRules[id]?.status, atOrAbove))
|
|
119
|
+
blocking.push(f);
|
|
120
|
+
}
|
|
121
|
+
return blocking;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Whether one current finding blocks the new-code gate: newly-applicable and
|
|
125
|
+
* open at/above threshold, or regressed at any severity. Pure predicate so
|
|
126
|
+
* the per-rule decision stays testable without building a whole report.
|
|
127
|
+
*/
|
|
128
|
+
function isNewCodeBlocker(f, beforeStatus, atOrAbove) {
|
|
129
|
+
const movement = ruleMovement(beforeStatus, f.status);
|
|
130
|
+
if (movement === 'regressed')
|
|
131
|
+
return true;
|
|
132
|
+
return movement === 'newly-applicable' && isOpenStatus(f.status) && atOrAbove(f.severity);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* `--baseline` gate. Returns a process exit code.
|
|
136
|
+
*
|
|
137
|
+
* Threshold handling mirrors `evaluateGate` (including `none` disables and
|
|
138
|
+
* exit 2 on an unrecognised threshold) so the two gates compose: the CLI
|
|
139
|
+
* passes `--fail-on` through when set, defaulting to HIGH under `--baseline`.
|
|
140
|
+
*/
|
|
141
|
+
export function evaluateNewCodeGate(report, baseline, failOn, quiet) {
|
|
142
|
+
if (failOn === 'none')
|
|
143
|
+
return 0;
|
|
144
|
+
const threshold = failOn.toUpperCase();
|
|
145
|
+
if (!SEVERITY_LADDER.includes(threshold)) {
|
|
146
|
+
console.error(`--fail-on must be none or one of ${[...SEVERITY_LADDER].reverse().join('|').toLowerCase()}`);
|
|
147
|
+
return 2;
|
|
148
|
+
}
|
|
149
|
+
const blocking = newCodeBlocking(report, baseline, threshold);
|
|
150
|
+
if (blocking.length === 0)
|
|
151
|
+
return 0;
|
|
152
|
+
if (!quiet) {
|
|
153
|
+
console.error(`\nNew-code gate failed: ${blocking.length} newly-introduced or regressed finding(s) at or above ${threshold}.`);
|
|
154
|
+
for (const f of blocking.slice(0, 10)) {
|
|
155
|
+
const where = f.locations[0] ? ` (${f.locations[0].file}:${f.locations[0].line})` : '';
|
|
156
|
+
console.error(` ${f.severity.padEnd(8)} ${f.ruleId} ${f.title}${where}`);
|
|
157
|
+
}
|
|
158
|
+
if (blocking.length > 10)
|
|
159
|
+
console.error(` … and ${blocking.length - 10} more`);
|
|
160
|
+
}
|
|
161
|
+
return 1;
|
|
162
|
+
}
|
|
47
163
|
//# sourceMappingURL=gate.js.map
|
package/dist/engine/gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/engine/gate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/engine/gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/engine/loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/engine/loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAOV,SAAS,EACT,QAAQ,EACR,QAAQ,EACT,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,eAAe,EAAE,QAAQ,EAAoD,CAAC;AAC3F,eAAO,MAAM,YAAY,EAAE,SAAS,EAUnC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAMnD,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAKxF;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CA2B5D;AA4CD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa,EAC5C,QAAQ,GAAE,MAAM,EAAO,GACtB,QAAQ,GAAG,IAAI,CAkDjB;AAgRD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAWrF;AAgFD,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EAAE,EACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAClE,IAAI,CASN"}
|
package/dist/engine/loader.js
CHANGED
|
@@ -2,6 +2,7 @@ import { parse as parseYaml } from 'yaml';
|
|
|
2
2
|
import { asMap, isMap, list, num, scalar, str, strList } from '../util/yaml.js';
|
|
3
3
|
import fs from 'node:fs';
|
|
4
4
|
import path from 'node:path';
|
|
5
|
+
import { validateAutomatability, validateCatalogue } from './automatability.js';
|
|
5
6
|
export const SEVERITY_LADDER = ['FUTURE', 'LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
|
|
6
7
|
export const RULE_CLASSES = [
|
|
7
8
|
'security',
|
|
@@ -112,8 +113,10 @@ export function parsePackText(text, sourceName, seenRuleIds = new Map(), warning
|
|
|
112
113
|
}
|
|
113
114
|
const id = str(raw.id) ?? path.basename(sourceName, path.extname(sourceName));
|
|
114
115
|
const rules = [];
|
|
116
|
+
// Pack-level catalogue is the default for its rules; validate the pin once.
|
|
117
|
+
const packCtx = { catalogue: validPackCatalogue(raw, id, warnings) };
|
|
115
118
|
(list(raw.rules) ?? []).forEach((r, i) => {
|
|
116
|
-
const parsed = parseRule(r, id, i, warnings);
|
|
119
|
+
const parsed = parseRule(r, id, i, warnings, packCtx);
|
|
117
120
|
if (!parsed)
|
|
118
121
|
return;
|
|
119
122
|
const firstSeen = seenRuleIds.get(parsed.id);
|
|
@@ -136,10 +139,23 @@ export function parsePackText(text, sourceName, seenRuleIds = new Map(), warning
|
|
|
136
139
|
sectionTitle: str(raw.section_title),
|
|
137
140
|
skipWhen: isMap(raw.skip_when) ? raw.skip_when : undefined,
|
|
138
141
|
provides: strList(raw.provides),
|
|
142
|
+
catalogue: packCtx.catalogue,
|
|
139
143
|
rules,
|
|
140
144
|
};
|
|
141
145
|
}
|
|
142
|
-
|
|
146
|
+
/** The pack's `catalogue:` pin if it is valid, else undefined (with a warning). */
|
|
147
|
+
function validPackCatalogue(raw, id, warnings) {
|
|
148
|
+
const value = str(raw.catalogue);
|
|
149
|
+
if (value === undefined)
|
|
150
|
+
return undefined;
|
|
151
|
+
const problem = validateCatalogue(value);
|
|
152
|
+
if (problem) {
|
|
153
|
+
warnings.push(`pack ${id}: ${problem} — catalogue ignored`);
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
return value;
|
|
157
|
+
}
|
|
158
|
+
function parseRule(raw, packId, index, warnings, pack) {
|
|
143
159
|
const where = `${packId}[${index}]`;
|
|
144
160
|
const head = readRuleHead(raw, where, warnings);
|
|
145
161
|
if (!head)
|
|
@@ -150,9 +166,9 @@ function parseRule(raw, packId, index, warnings) {
|
|
|
150
166
|
if (!check)
|
|
151
167
|
return null;
|
|
152
168
|
validatePredicate(r.applies_when, `${where} ${id}`, warnings);
|
|
153
|
-
return assembleRule(r, id, severity, ruleClass, check);
|
|
169
|
+
return assembleRule(r, id, severity, ruleClass, check, pack, warnings);
|
|
154
170
|
}
|
|
155
|
-
function assembleRule(r, id, severity, ruleClass, check) {
|
|
171
|
+
function assembleRule(r, id, severity, ruleClass, check, pack, warnings) {
|
|
156
172
|
const depths = Array.isArray(r.depths) ? r.depths.filter(isDepth) : undefined;
|
|
157
173
|
return {
|
|
158
174
|
id,
|
|
@@ -170,8 +186,32 @@ function assembleRule(r, id, severity, ruleClass, check) {
|
|
|
170
186
|
remediation: optText(r.remediation),
|
|
171
187
|
references: optStrArray(r.references),
|
|
172
188
|
tags: optStrArray(r.tags),
|
|
189
|
+
automatability: resolveAutomatability(r, id, check, warnings),
|
|
190
|
+
catalogue: resolveRuleCatalogue(r, id, pack, warnings),
|
|
173
191
|
};
|
|
174
192
|
}
|
|
193
|
+
function resolveAutomatability(r, id, check, warnings) {
|
|
194
|
+
const claimed = optText(r.automatability);
|
|
195
|
+
if (claimed === undefined)
|
|
196
|
+
return undefined; // derived by ruleAutomatability()
|
|
197
|
+
const problem = validateAutomatability(claimed, check);
|
|
198
|
+
if (problem) {
|
|
199
|
+
warnings.push(`rule ${id}: ${problem} — using derived value`);
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
return claimed;
|
|
203
|
+
}
|
|
204
|
+
function resolveRuleCatalogue(r, id, pack, warnings) {
|
|
205
|
+
const own = optText(r.catalogue);
|
|
206
|
+
if (own === undefined)
|
|
207
|
+
return pack.catalogue;
|
|
208
|
+
const problem = validateCatalogue(own);
|
|
209
|
+
if (problem) {
|
|
210
|
+
warnings.push(`rule ${id}: ${problem} — catalogue ignored`);
|
|
211
|
+
return pack.catalogue;
|
|
212
|
+
}
|
|
213
|
+
return own;
|
|
214
|
+
}
|
|
175
215
|
function optText(v) {
|
|
176
216
|
return v ? String(v) : undefined;
|
|
177
217
|
}
|
|
@@ -247,6 +287,18 @@ const CHECK_BUILDERS = {
|
|
|
247
287
|
run: str(c.run) ?? '',
|
|
248
288
|
expect_exit: num(c.expect_exit) ?? 0,
|
|
249
289
|
}),
|
|
290
|
+
oracle: (c) => ({
|
|
291
|
+
kind: 'oracle',
|
|
292
|
+
source: (str(c.source) ?? 'sarif'),
|
|
293
|
+
file: str(c.file) ?? '',
|
|
294
|
+
path: str(c.path),
|
|
295
|
+
levels: (strList(c.levels) ?? []).filter(isOracleLevel),
|
|
296
|
+
rules: strList(c.rules) ?? [],
|
|
297
|
+
op: (str(c.op) ?? 'at_most'),
|
|
298
|
+
// A missing or non-numeric bound becomes NaN so validation rejects the
|
|
299
|
+
// rule; defaulting to 0 would silently turn a typo into "at most 0".
|
|
300
|
+
value: num(c.value) ?? NaN,
|
|
301
|
+
}),
|
|
250
302
|
};
|
|
251
303
|
function parseCheck(raw, where, warnings) {
|
|
252
304
|
const c = asMap(raw);
|
|
@@ -268,8 +320,44 @@ function parseCheck(raw, where, warnings) {
|
|
|
268
320
|
warnings.push(`${where}: ${built.kind} has an empty pattern (matches every line) — rule ignored`);
|
|
269
321
|
return null;
|
|
270
322
|
}
|
|
323
|
+
if (built.kind === 'oracle') {
|
|
324
|
+
const problem = oracleProblem(built);
|
|
325
|
+
if (problem) {
|
|
326
|
+
warnings.push(`${where}: ${problem} — rule ignored`);
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
271
330
|
return built;
|
|
272
331
|
}
|
|
332
|
+
/**
|
|
333
|
+
* Validates an `oracle` check's shape. An assertion with no file, an unknown
|
|
334
|
+
* source/op, a missing JSON path, or a non-finite bound could compare
|
|
335
|
+
* `undefined` and silently pass — so any of those returns a message and the
|
|
336
|
+
* rule is dropped (ADR-0009).
|
|
337
|
+
*/
|
|
338
|
+
function oracleProblem(check) {
|
|
339
|
+
if (check.file === '')
|
|
340
|
+
return 'oracle check missing "file"';
|
|
341
|
+
if (!isOracleSource(check.source))
|
|
342
|
+
return 'oracle source must be "sarif" or "json"';
|
|
343
|
+
if (!isOracleOp(check.op))
|
|
344
|
+
return 'oracle op must be at_most|at_least|equals';
|
|
345
|
+
if (!Number.isFinite(check.value))
|
|
346
|
+
return 'oracle check needs a finite "value"';
|
|
347
|
+
if (check.source === 'json' && (check.path === undefined || check.path === '')) {
|
|
348
|
+
return 'oracle json source needs "path"';
|
|
349
|
+
}
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
function isOracleSource(v) {
|
|
353
|
+
return v === 'sarif' || v === 'json';
|
|
354
|
+
}
|
|
355
|
+
function isOracleOp(v) {
|
|
356
|
+
return v === 'at_most' || v === 'at_least' || v === 'equals';
|
|
357
|
+
}
|
|
358
|
+
function isOracleLevel(v) {
|
|
359
|
+
return v === 'error' || v === 'warning' || v === 'note';
|
|
360
|
+
}
|
|
273
361
|
/** Predicate operators the evaluator understands. Anything else fails closed. */
|
|
274
362
|
const PREDICATE_OPS = new Set([
|
|
275
363
|
'exists',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/engine/loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/engine/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Finding, FindingReview, Review } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Recorded human reviews (ADR-0023).
|
|
4
|
+
*
|
|
5
|
+
* A review is provenance, not a verdict: it attaches a date (and an optional
|
|
6
|
+
* re-review deadline) to an open finding without changing the engine's status.
|
|
7
|
+
* A review is "used" when it matched a finding; one that matched nothing is
|
|
8
|
+
* reported, so the ledger decays instead of accumulating — the ESLint
|
|
9
|
+
* unused-directive model, applied to attention rather than excusal.
|
|
10
|
+
*/
|
|
11
|
+
export interface ReviewEntry {
|
|
12
|
+
readonly review: Review;
|
|
13
|
+
readonly matcher: RegExp | null;
|
|
14
|
+
used: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** Active reviews, grouped by rule id. */
|
|
17
|
+
export type ReviewIndex = Map<string, ReviewEntry[]>;
|
|
18
|
+
/** Build the index from validated reviews (see `resolveActiveReviews`). */
|
|
19
|
+
export declare function buildReviewIndex(reviews: Review[] | undefined): ReviewIndex;
|
|
20
|
+
/**
|
|
21
|
+
* Attach the first matching review to each open finding and mark the entry used.
|
|
22
|
+
*
|
|
23
|
+
* A rule-wide review (no `file`) vouches for the finding whatever its locations;
|
|
24
|
+
* a site-scoped one matches only when a location falls inside the site, so it can
|
|
25
|
+
* never vouch for the whole rule. PASS, SKIPPED, and already-suppressed findings
|
|
26
|
+
* are not reviewed — a suppression already recorded the decision (ADR-0007).
|
|
27
|
+
*/
|
|
28
|
+
export declare function attachReviews(index: ReviewIndex, findings: Finding[]): void;
|
|
29
|
+
/**
|
|
30
|
+
* Validate and keep the reviews the audit can honour. A review with no rule, or
|
|
31
|
+
* with a `reviewed`/`until` date that cannot be parsed, is dropped with a warning
|
|
32
|
+
* rather than trusted: a deadline we cannot read must not look like freshness
|
|
33
|
+
* (fail closed, ADR-0009). Mirrors suppression expiry (ADR-0007).
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolveActiveReviews(reviews: Review[] | undefined, warnings: string[]): Review[];
|
|
36
|
+
/** Every entry across the index that matched no finding this run. */
|
|
37
|
+
export declare function unusedReviews(index: ReviewIndex): Review[];
|
|
38
|
+
/** Whole days since the review — the age shown next to an open item. */
|
|
39
|
+
export declare function reviewAgeDays(review: FindingReview, atMs: number): number | null;
|
|
40
|
+
/** Whole days a review's deadline is in the past, or null when it is not due. */
|
|
41
|
+
export declare function reviewOverdueDays(review: FindingReview, atMs: number): number | null;
|
|
42
|
+
/** True when a review carries a deadline that has passed. */
|
|
43
|
+
export declare function isReviewStale(review: FindingReview, atMs: number): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* A stable, human-readable label for a review: `RULE` for a rule-wide review,
|
|
46
|
+
* `RULE (file[:line])` for a site-scoped one. Used in warnings.
|
|
47
|
+
*/
|
|
48
|
+
export declare function describeReview(r: Review): string;
|
|
49
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/engine/review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAY,MAAM,EAAE,MAAM,aAAa,CAAC;AAK5E;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;CACf;AAED,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AAErD,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,WAAW,CAU3E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAU3E;AAqBD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAsBhG;AAMD,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAM1D;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIhF;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKpF;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhD"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { matchesSite, siteMatcher } from '../util/site.js';
|
|
2
|
+
const DAY_MS = 86_400_000;
|
|
3
|
+
/** Build the index from validated reviews (see `resolveActiveReviews`). */
|
|
4
|
+
export function buildReviewIndex(reviews) {
|
|
5
|
+
const index = new Map();
|
|
6
|
+
for (const r of reviews ?? []) {
|
|
7
|
+
if (!r.rule)
|
|
8
|
+
continue;
|
|
9
|
+
const entry = { review: r, matcher: siteMatcher(r.file), used: false };
|
|
10
|
+
const list = index.get(r.rule);
|
|
11
|
+
if (list)
|
|
12
|
+
list.push(entry);
|
|
13
|
+
else
|
|
14
|
+
index.set(r.rule, [entry]);
|
|
15
|
+
}
|
|
16
|
+
return index;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Attach the first matching review to each open finding and mark the entry used.
|
|
20
|
+
*
|
|
21
|
+
* A rule-wide review (no `file`) vouches for the finding whatever its locations;
|
|
22
|
+
* a site-scoped one matches only when a location falls inside the site, so it can
|
|
23
|
+
* never vouch for the whole rule. PASS, SKIPPED, and already-suppressed findings
|
|
24
|
+
* are not reviewed — a suppression already recorded the decision (ADR-0007).
|
|
25
|
+
*/
|
|
26
|
+
export function attachReviews(index, findings) {
|
|
27
|
+
for (const finding of findings) {
|
|
28
|
+
if (!isReviewable(finding))
|
|
29
|
+
continue;
|
|
30
|
+
const entries = index.get(finding.ruleId);
|
|
31
|
+
if (!entries || entries.length === 0)
|
|
32
|
+
continue;
|
|
33
|
+
const entry = entries.find((e) => entryMatches(e, finding.locations));
|
|
34
|
+
if (!entry)
|
|
35
|
+
continue;
|
|
36
|
+
entry.used = true;
|
|
37
|
+
finding.review = toFindingReview(entry.review);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function isReviewable(f) {
|
|
41
|
+
if (f.suppressedReason)
|
|
42
|
+
return false;
|
|
43
|
+
return f.status !== 'PASS' && f.status !== 'NOT_APPLICABLE';
|
|
44
|
+
}
|
|
45
|
+
function entryMatches(entry, locations) {
|
|
46
|
+
const r = entry.review;
|
|
47
|
+
if (!r.file)
|
|
48
|
+
return true;
|
|
49
|
+
return locations.some((loc) => matchesSite(entry.matcher, r.line, loc));
|
|
50
|
+
}
|
|
51
|
+
function toFindingReview(r) {
|
|
52
|
+
const out = { reviewed: r.reviewed };
|
|
53
|
+
if (r.until !== undefined)
|
|
54
|
+
out.until = r.until;
|
|
55
|
+
if (r.by !== undefined)
|
|
56
|
+
out.by = r.by;
|
|
57
|
+
if (r.note !== undefined)
|
|
58
|
+
out.note = r.note;
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Validate and keep the reviews the audit can honour. A review with no rule, or
|
|
63
|
+
* with a `reviewed`/`until` date that cannot be parsed, is dropped with a warning
|
|
64
|
+
* rather than trusted: a deadline we cannot read must not look like freshness
|
|
65
|
+
* (fail closed, ADR-0009). Mirrors suppression expiry (ADR-0007).
|
|
66
|
+
*/
|
|
67
|
+
export function resolveActiveReviews(reviews, warnings) {
|
|
68
|
+
const active = [];
|
|
69
|
+
for (const r of reviews ?? []) {
|
|
70
|
+
if (!r.rule) {
|
|
71
|
+
warnings.push('review entry is missing "rule" — ignored');
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (!isValidDate(r.reviewed)) {
|
|
75
|
+
warnings.push(`review for ${describeReview(r)} has an unparseable "reviewed" date ("${r.reviewed}") — review ignored`);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (r.until !== undefined && !isValidDate(r.until)) {
|
|
79
|
+
warnings.push(`review for ${describeReview(r)} has an unparseable "until" date ("${r.until}") — review ignored`);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
active.push(r);
|
|
83
|
+
}
|
|
84
|
+
return active;
|
|
85
|
+
}
|
|
86
|
+
function isValidDate(value) {
|
|
87
|
+
return typeof value === 'string' && value.trim() !== '' && !Number.isNaN(Date.parse(value));
|
|
88
|
+
}
|
|
89
|
+
/** Every entry across the index that matched no finding this run. */
|
|
90
|
+
export function unusedReviews(index) {
|
|
91
|
+
const out = [];
|
|
92
|
+
for (const entries of index.values()) {
|
|
93
|
+
for (const e of entries)
|
|
94
|
+
if (!e.used)
|
|
95
|
+
out.push(e.review);
|
|
96
|
+
}
|
|
97
|
+
return out;
|
|
98
|
+
}
|
|
99
|
+
/** Whole days since the review — the age shown next to an open item. */
|
|
100
|
+
export function reviewAgeDays(review, atMs) {
|
|
101
|
+
const t = Date.parse(review.reviewed);
|
|
102
|
+
if (Number.isNaN(t))
|
|
103
|
+
return null;
|
|
104
|
+
return Math.max(0, Math.floor((atMs - t) / DAY_MS));
|
|
105
|
+
}
|
|
106
|
+
/** Whole days a review's deadline is in the past, or null when it is not due. */
|
|
107
|
+
export function reviewOverdueDays(review, atMs) {
|
|
108
|
+
if (!review.until)
|
|
109
|
+
return null;
|
|
110
|
+
const t = Date.parse(review.until);
|
|
111
|
+
if (Number.isNaN(t) || atMs <= t)
|
|
112
|
+
return null;
|
|
113
|
+
return Math.floor((atMs - t) / DAY_MS);
|
|
114
|
+
}
|
|
115
|
+
/** True when a review carries a deadline that has passed. */
|
|
116
|
+
export function isReviewStale(review, atMs) {
|
|
117
|
+
return reviewOverdueDays(review, atMs) !== null;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* A stable, human-readable label for a review: `RULE` for a rule-wide review,
|
|
121
|
+
* `RULE (file[:line])` for a site-scoped one. Used in warnings.
|
|
122
|
+
*/
|
|
123
|
+
export function describeReview(r) {
|
|
124
|
+
if (!r.file)
|
|
125
|
+
return r.rule;
|
|
126
|
+
return r.line === undefined ? `${r.rule} (${r.file})` : `${r.rule} (${r.file}:${r.line})`;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/engine/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Finding, Location, Suppression } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Site-level suppressions (ADR-0022).
|
|
4
|
+
*
|
|
5
|
+
* A rule-wide waiver (`suppressions: [{rule}]`) hides every finding for that
|
|
6
|
+
* rule. A site-level waiver adds a `file` glob (and optional `line`) and hides
|
|
7
|
+
* only the matching locations. This is the ESLint model: an exception is fine,
|
|
8
|
+
* but it must point at the place it excuses — and an exception that no longer
|
|
9
|
+
* matches anything is reported, so waivers decay instead of accumulating.
|
|
10
|
+
*
|
|
11
|
+
* An entry is "used" when it actually suppressed at least one location. The
|
|
12
|
+
* index records that, and the audit reports unused entries as warnings.
|
|
13
|
+
*/
|
|
14
|
+
export interface SuppressionEntry {
|
|
15
|
+
readonly suppression: Suppression;
|
|
16
|
+
readonly matcher: RegExp | null;
|
|
17
|
+
used: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Active (non-expired) suppressions, grouped by rule id. */
|
|
20
|
+
export type SuppressionIndex = Map<string, SuppressionEntry[]>;
|
|
21
|
+
/** Build the index from validated, non-expired suppressions. */
|
|
22
|
+
export declare function buildSuppressionIndex(suppressions: Suppression[] | undefined): SuppressionIndex;
|
|
23
|
+
export interface SuppressionOutcome {
|
|
24
|
+
/** Locations that survive (are not excused). */
|
|
25
|
+
kept: Location[];
|
|
26
|
+
/** Reasons of the entries that suppressed at least one location, in order. */
|
|
27
|
+
reasons: string[];
|
|
28
|
+
/** True when at least one location was excused. */
|
|
29
|
+
suppressedAny: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Split a finding's locations into those a waiver excuses and those it does
|
|
33
|
+
* not. Entries are matched in order; a location is removed by the first entry
|
|
34
|
+
* that matches it, and every entry that fires is marked used.
|
|
35
|
+
*
|
|
36
|
+
* A rule-wide entry (no `file`) excuses the finding as a whole, including a
|
|
37
|
+
* finding that carries no locations at all (a repo-level MISSING). A
|
|
38
|
+
* site-level entry can only excuse locations, so a location-less finding is
|
|
39
|
+
* left untouched by it — a waiver naming one file must not hide a repo-wide
|
|
40
|
+
* failure.
|
|
41
|
+
*/
|
|
42
|
+
export declare function applySuppressions(index: SuppressionIndex, ruleId: string, locations: Location[]): SuppressionOutcome;
|
|
43
|
+
/** Every entry across the index that suppressed nothing this run. */
|
|
44
|
+
export declare function unusedSuppressions(index: SuppressionIndex): Suppression[];
|
|
45
|
+
/**
|
|
46
|
+
* A stable, human-readable label for a suppression: `RULE` for a rule-wide
|
|
47
|
+
* waiver, `RULE (file[:line])` for a site-level one. Used in warnings.
|
|
48
|
+
*/
|
|
49
|
+
export declare function describeSuppression(s: Suppression): string;
|
|
50
|
+
/** Findings that carry a suppression reason (for report rendering/tests). */
|
|
51
|
+
export declare function isSuppressed(finding: Finding): boolean;
|
|
52
|
+
//# sourceMappingURL=suppression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suppression.d.ts","sourceRoot":"","sources":["../../src/engine/suppression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGlE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;CACf;AAED,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAE/D,gEAAgE;AAChE,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,GAAG,gBAAgB,CAc/F;AAMD,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mDAAmD;IACnD,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,QAAQ,EAAE,GACpB,kBAAkB,CA6BpB;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,EAAE,CAQzE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAG1D;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEtD"}
|