@xenos1996/usa 2.0.1 → 2.3.2

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 (81) hide show
  1. package/README.md +44 -33
  2. package/USA.md +9 -9
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +194 -7
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config.d.ts +1 -1
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +31 -0
  9. package/dist/config.js.map +1 -1
  10. package/dist/engine/audit.d.ts.map +1 -1
  11. package/dist/engine/audit.js +42 -4
  12. package/dist/engine/audit.js.map +1 -1
  13. package/dist/engine/automatability.d.ts +32 -0
  14. package/dist/engine/automatability.d.ts.map +1 -0
  15. package/dist/engine/automatability.js +81 -0
  16. package/dist/engine/automatability.js.map +1 -0
  17. package/dist/engine/catalogues.d.ts +43 -0
  18. package/dist/engine/catalogues.d.ts.map +1 -0
  19. package/dist/engine/catalogues.js +109 -0
  20. package/dist/engine/catalogues.js.map +1 -0
  21. package/dist/engine/diff.d.ts +14 -0
  22. package/dist/engine/diff.d.ts.map +1 -1
  23. package/dist/engine/diff.js +59 -36
  24. package/dist/engine/diff.js.map +1 -1
  25. package/dist/engine/evaluate.d.ts +2 -1
  26. package/dist/engine/evaluate.d.ts.map +1 -1
  27. package/dist/engine/evaluate.js +125 -3
  28. package/dist/engine/evaluate.js.map +1 -1
  29. package/dist/engine/gate.d.ts +33 -0
  30. package/dist/engine/gate.d.ts.map +1 -1
  31. package/dist/engine/gate.js +116 -0
  32. package/dist/engine/gate.js.map +1 -1
  33. package/dist/engine/loader.d.ts.map +1 -1
  34. package/dist/engine/loader.js +92 -4
  35. package/dist/engine/loader.js.map +1 -1
  36. package/dist/engine/review.d.ts +49 -0
  37. package/dist/engine/review.d.ts.map +1 -0
  38. package/dist/engine/review.js +128 -0
  39. package/dist/engine/review.js.map +1 -0
  40. package/dist/engine/suppression.d.ts +52 -0
  41. package/dist/engine/suppression.d.ts.map +1 -0
  42. package/dist/engine/suppression.js +91 -0
  43. package/dist/engine/suppression.js.map +1 -0
  44. package/dist/index.d.ts +6 -0
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +6 -0
  47. package/dist/index.js.map +1 -1
  48. package/dist/report/json.d.ts +48 -0
  49. package/dist/report/json.d.ts.map +1 -0
  50. package/dist/report/json.js +60 -0
  51. package/dist/report/json.js.map +1 -0
  52. package/dist/report/markdown.d.ts.map +1 -1
  53. package/dist/report/markdown.js +110 -17
  54. package/dist/report/markdown.js.map +1 -1
  55. package/dist/report/sarif.d.ts +84 -0
  56. package/dist/report/sarif.d.ts.map +1 -0
  57. package/dist/report/sarif.js +129 -0
  58. package/dist/report/sarif.js.map +1 -0
  59. package/dist/report/signature.d.ts +76 -0
  60. package/dist/report/signature.d.ts.map +1 -0
  61. package/dist/report/signature.js +206 -0
  62. package/dist/report/signature.js.map +1 -0
  63. package/dist/types.d.ts +115 -0
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/types.js +2 -1
  66. package/dist/types.js.map +1 -1
  67. package/dist/util/project.d.ts.map +1 -1
  68. package/dist/util/project.js +23 -1
  69. package/dist/util/project.js.map +1 -1
  70. package/dist/util/site.d.ts +13 -0
  71. package/dist/util/site.d.ts.map +1 -0
  72. package/dist/util/site.js +24 -0
  73. package/dist/util/site.js.map +1 -0
  74. package/package.json +9 -1
  75. package/rules/catalogues.yaml +109 -0
  76. package/rules/core/provenance-attestation.yaml +65 -0
  77. package/rules/core/provenance-cosign.yaml +110 -0
  78. package/rules/index.yaml +2 -0
  79. package/rules/profiles/maturity.yaml +1 -1
  80. package/templates/AGENTS.audit.md +135 -0
  81. package/templates/AUDIT_REPORT.md +155 -0
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/engine/gate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,SAAmB;IACvE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,MAAM,KAAK,MAAM;QACnB,CAAC,CAAC,MAAM,KAAK,gBAAgB;QAC7B,CAAC,CAAC,MAAM,KAAK,SAAS;QACtB,CAAC,CAAC,CAAC,gBAAgB,CACtB,CAAC;IACF,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,MAAc,EAAE,KAAc;IAC9E,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IAEhC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,EAAc,CAAC;IACnD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CACX,oCAAoC,CAAC,GAAG,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAC7F,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACrD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,2BAA2B,SAAS,GAAG,CAAC,CAAC;QACxF,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,CAAC,KAAK,CAAC,WAAW,QAAQ,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
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,EAAsB,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAErF,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,CA8CjB;AAqKD;;;;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"}
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"}
@@ -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
- function parseRule(raw, packId, index, warnings) {
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"}