@kevinrabun/judges 3.43.0 → 3.44.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/CHANGELOG.md +12 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +56 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/burndown.d.ts +27 -0
- package/dist/commands/burndown.d.ts.map +1 -0
- package/dist/commands/burndown.js +180 -0
- package/dist/commands/burndown.js.map +1 -0
- package/dist/commands/kb.d.ts +41 -0
- package/dist/commands/kb.d.ts.map +1 -0
- package/dist/commands/kb.js +231 -0
- package/dist/commands/kb.js.map +1 -0
- package/dist/commands/noise-advisor.d.ts +30 -0
- package/dist/commands/noise-advisor.d.ts.map +1 -0
- package/dist/commands/noise-advisor.js +171 -0
- package/dist/commands/noise-advisor.js.map +1 -0
- package/dist/commands/recommend.d.ts +21 -0
- package/dist/commands/recommend.d.ts.map +1 -0
- package/dist/commands/recommend.js +283 -0
- package/dist/commands/recommend.js.map +1 -0
- package/dist/commands/report-template.d.ts +17 -0
- package/dist/commands/report-template.d.ts.map +1 -0
- package/dist/commands/report-template.js +291 -0
- package/dist/commands/report-template.js.map +1 -0
- package/dist/commands/review-queue.d.ts +34 -0
- package/dist/commands/review-queue.d.ts.map +1 -0
- package/dist/commands/review-queue.js +226 -0
- package/dist/commands/review-queue.js.map +1 -0
- package/dist/commands/rule-owner.d.ts +31 -0
- package/dist/commands/rule-owner.d.ts.map +1 -0
- package/dist/commands/rule-owner.js +182 -0
- package/dist/commands/rule-owner.js.map +1 -0
- package/dist/commands/suppress.d.ts +40 -0
- package/dist/commands/suppress.d.ts.map +1 -0
- package/dist/commands/suppress.js +209 -0
- package/dist/commands/suppress.js.map +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batch false-positive suppression — suppress findings by glob, rule
|
|
3
|
+
* prefix, severity, or pattern with a full audit trail.
|
|
4
|
+
*
|
|
5
|
+
* Suppressions stored locally in .judges-suppressions.json.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
8
|
+
const SUPPRESSION_FILE = ".judges-suppressions.json";
|
|
9
|
+
// ─── Core ───────────────────────────────────────────────────────────────────
|
|
10
|
+
function loadDb(file = SUPPRESSION_FILE) {
|
|
11
|
+
if (!existsSync(file))
|
|
12
|
+
return { version: 1, rules: [] };
|
|
13
|
+
return JSON.parse(readFileSync(file, "utf-8"));
|
|
14
|
+
}
|
|
15
|
+
function saveDb(db, file = SUPPRESSION_FILE) {
|
|
16
|
+
writeFileSync(file, JSON.stringify(db, null, 2));
|
|
17
|
+
}
|
|
18
|
+
function generateId() {
|
|
19
|
+
return `sup-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
|
|
20
|
+
}
|
|
21
|
+
function matchesGlob(filePath, glob) {
|
|
22
|
+
const regex = glob
|
|
23
|
+
.replace(/\./g, "\\.")
|
|
24
|
+
.replace(/\*\*/g, "§DOUBLESTAR§")
|
|
25
|
+
.replace(/\*/g, "[^/]*")
|
|
26
|
+
.replace(/§DOUBLESTAR§/g, ".*")
|
|
27
|
+
.replace(/\?/g, ".");
|
|
28
|
+
return new RegExp(`^${regex}$`).test(filePath);
|
|
29
|
+
}
|
|
30
|
+
export function addSuppression(opts) {
|
|
31
|
+
const db = loadDb();
|
|
32
|
+
const rule = {
|
|
33
|
+
id: generateId(),
|
|
34
|
+
fileGlob: opts.fileGlob,
|
|
35
|
+
rulePrefix: opts.rulePrefix,
|
|
36
|
+
ruleIds: opts.ruleIds,
|
|
37
|
+
maxSeverity: opts.maxSeverity,
|
|
38
|
+
reason: opts.reason,
|
|
39
|
+
author: opts.author || process.env.USER || process.env.USERNAME || "unknown",
|
|
40
|
+
createdIso: new Date().toISOString(),
|
|
41
|
+
active: true,
|
|
42
|
+
};
|
|
43
|
+
if (opts.expiresIn) {
|
|
44
|
+
const exp = new Date();
|
|
45
|
+
exp.setDate(exp.getDate() + opts.expiresIn);
|
|
46
|
+
rule.expiresIso = exp.toISOString();
|
|
47
|
+
}
|
|
48
|
+
db.rules.push(rule);
|
|
49
|
+
saveDb(db);
|
|
50
|
+
return rule;
|
|
51
|
+
}
|
|
52
|
+
export function removeSuppression(id) {
|
|
53
|
+
const db = loadDb();
|
|
54
|
+
const idx = db.rules.findIndex((r) => r.id === id);
|
|
55
|
+
if (idx < 0)
|
|
56
|
+
return false;
|
|
57
|
+
db.rules[idx].active = false;
|
|
58
|
+
saveDb(db);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
export function isFindiingSuppressed(ruleId, severity, filePath) {
|
|
62
|
+
const db = loadDb();
|
|
63
|
+
const now = Date.now();
|
|
64
|
+
const severityOrder = ["critical", "high", "medium", "low", "info"];
|
|
65
|
+
for (const rule of db.rules) {
|
|
66
|
+
if (!rule.active)
|
|
67
|
+
continue;
|
|
68
|
+
if (rule.expiresIso && new Date(rule.expiresIso).getTime() < now)
|
|
69
|
+
continue;
|
|
70
|
+
// Check file glob
|
|
71
|
+
if (rule.fileGlob && filePath && !matchesGlob(filePath, rule.fileGlob))
|
|
72
|
+
continue;
|
|
73
|
+
if (rule.fileGlob && !filePath)
|
|
74
|
+
continue;
|
|
75
|
+
// Check rule prefix
|
|
76
|
+
if (rule.rulePrefix && !ruleId.startsWith(rule.rulePrefix))
|
|
77
|
+
continue;
|
|
78
|
+
// Check exact rule IDs
|
|
79
|
+
if (rule.ruleIds && rule.ruleIds.length > 0 && !rule.ruleIds.includes(ruleId))
|
|
80
|
+
continue;
|
|
81
|
+
// Check severity
|
|
82
|
+
if (rule.maxSeverity) {
|
|
83
|
+
const maxIdx = severityOrder.indexOf(rule.maxSeverity);
|
|
84
|
+
const sevIdx = severityOrder.indexOf(severity);
|
|
85
|
+
if (maxIdx >= 0 && sevIdx >= 0 && sevIdx < maxIdx)
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
// If no criteria were specified besides reason/author, it matches nothing
|
|
89
|
+
if (!rule.fileGlob && !rule.rulePrefix && (!rule.ruleIds || rule.ruleIds.length === 0) && !rule.maxSeverity)
|
|
90
|
+
continue;
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
96
|
+
export function runSuppress(argv) {
|
|
97
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
98
|
+
console.log(`
|
|
99
|
+
judges suppress — Batch false-positive suppression with audit trail
|
|
100
|
+
|
|
101
|
+
Usage:
|
|
102
|
+
judges suppress --glob "**/*.test.ts" --rule-prefix AUTH --reason "Test files"
|
|
103
|
+
judges suppress --rule SEC-001,SEC-002 --reason "Not applicable to internal APIs"
|
|
104
|
+
judges suppress --max-severity low --reason "Low severity not actionable"
|
|
105
|
+
judges suppress --list Show all suppression rules
|
|
106
|
+
judges suppress --remove <id> Deactivate a suppression rule
|
|
107
|
+
judges suppress --stats Show suppression statistics
|
|
108
|
+
|
|
109
|
+
Options:
|
|
110
|
+
--glob <pattern> File glob pattern
|
|
111
|
+
--rule-prefix <pfx> Rule ID prefix (e.g., AUTH, SEC, PERF)
|
|
112
|
+
--rule <ids> Comma-separated rule IDs
|
|
113
|
+
--max-severity <sev> Suppress this severity and below
|
|
114
|
+
--reason <text> Reason for suppression (required for new rules)
|
|
115
|
+
--author <name> Who created this suppression
|
|
116
|
+
--expires-in <days> Auto-expire after N days
|
|
117
|
+
--list List suppression rules
|
|
118
|
+
--remove <id> Deactivate a suppression rule
|
|
119
|
+
--stats Show suppression statistics
|
|
120
|
+
--help, -h Show this help
|
|
121
|
+
`);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (argv.includes("--list")) {
|
|
125
|
+
const db = loadDb();
|
|
126
|
+
const active = db.rules.filter((r) => r.active);
|
|
127
|
+
const inactive = db.rules.filter((r) => !r.active);
|
|
128
|
+
console.log(`\n Suppression Rules (${active.length} active, ${inactive.length} inactive)\n ─────────────────`);
|
|
129
|
+
for (const r of active) {
|
|
130
|
+
const parts = [];
|
|
131
|
+
if (r.fileGlob)
|
|
132
|
+
parts.push(`glob: ${r.fileGlob}`);
|
|
133
|
+
if (r.rulePrefix)
|
|
134
|
+
parts.push(`prefix: ${r.rulePrefix}`);
|
|
135
|
+
if (r.ruleIds?.length)
|
|
136
|
+
parts.push(`rules: ${r.ruleIds.join(",")}`);
|
|
137
|
+
if (r.maxSeverity)
|
|
138
|
+
parts.push(`max-sev: ${r.maxSeverity}`);
|
|
139
|
+
const exp = r.expiresIso ? ` (expires ${r.expiresIso.split("T")[0]})` : "";
|
|
140
|
+
console.log(` ${r.id} ${parts.join(" | ")}${exp}`);
|
|
141
|
+
console.log(` Reason: ${r.reason} — by ${r.author} on ${r.createdIso.split("T")[0]}`);
|
|
142
|
+
}
|
|
143
|
+
console.log("");
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const removeId = argv.find((_a, i) => argv[i - 1] === "--remove");
|
|
147
|
+
if (removeId) {
|
|
148
|
+
if (removeSuppression(removeId)) {
|
|
149
|
+
console.log(` Deactivated: ${removeId}`);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.error(` Error: not found: ${removeId}`);
|
|
153
|
+
}
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (argv.includes("--stats")) {
|
|
157
|
+
const db = loadDb();
|
|
158
|
+
const active = db.rules.filter((r) => r.active);
|
|
159
|
+
const byPrefix = {};
|
|
160
|
+
for (const r of active) {
|
|
161
|
+
const key = r.rulePrefix || r.ruleIds?.[0]?.split("-")[0] || "other";
|
|
162
|
+
byPrefix[key] = (byPrefix[key] || 0) + 1;
|
|
163
|
+
}
|
|
164
|
+
console.log(`\n Total rules: ${db.rules.length} (${active.length} active)`);
|
|
165
|
+
for (const [k, v] of Object.entries(byPrefix)) {
|
|
166
|
+
console.log(` ${k.padEnd(12)} ${v}`);
|
|
167
|
+
}
|
|
168
|
+
console.log("");
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
// Add new suppression
|
|
172
|
+
const glob = argv.find((_a, i) => argv[i - 1] === "--glob");
|
|
173
|
+
const rulePrefix = argv.find((_a, i) => argv[i - 1] === "--rule-prefix");
|
|
174
|
+
const ruleStr = argv.find((_a, i) => argv[i - 1] === "--rule");
|
|
175
|
+
const maxSeverity = argv.find((_a, i) => argv[i - 1] === "--max-severity");
|
|
176
|
+
const reason = argv.find((_a, i) => argv[i - 1] === "--reason");
|
|
177
|
+
const author = argv.find((_a, i) => argv[i - 1] === "--author");
|
|
178
|
+
const expiresStr = argv.find((_a, i) => argv[i - 1] === "--expires-in");
|
|
179
|
+
if (!reason) {
|
|
180
|
+
console.error("Error: --reason is required");
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
if (!glob && !rulePrefix && !ruleStr && !maxSeverity) {
|
|
184
|
+
console.error("Error: At least one of --glob, --rule-prefix, --rule, or --max-severity required");
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
const rule = addSuppression({
|
|
188
|
+
fileGlob: glob,
|
|
189
|
+
rulePrefix,
|
|
190
|
+
ruleIds: ruleStr ? ruleStr.split(",").map((s) => s.trim()) : undefined,
|
|
191
|
+
maxSeverity,
|
|
192
|
+
reason,
|
|
193
|
+
author,
|
|
194
|
+
expiresIn: expiresStr ? parseInt(expiresStr, 10) : undefined,
|
|
195
|
+
});
|
|
196
|
+
console.log(` ✅ Suppression created: ${rule.id}`);
|
|
197
|
+
const parts = [];
|
|
198
|
+
if (rule.fileGlob)
|
|
199
|
+
parts.push(`glob: ${rule.fileGlob}`);
|
|
200
|
+
if (rule.rulePrefix)
|
|
201
|
+
parts.push(`prefix: ${rule.rulePrefix}`);
|
|
202
|
+
if (rule.ruleIds?.length)
|
|
203
|
+
parts.push(`rules: ${rule.ruleIds.join(",")}`);
|
|
204
|
+
if (rule.maxSeverity)
|
|
205
|
+
parts.push(`max-sev: ${rule.maxSeverity}`);
|
|
206
|
+
console.log(` ${parts.join(" | ")}`);
|
|
207
|
+
console.log(` Reason: ${rule.reason}`);
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=suppress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suppress.js","sourceRoot":"","sources":["../../src/commands/suppress.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/kevinrabun/judges",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "3.
|
|
10
|
+
"version": "3.44.0",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "@kevinrabun/judges",
|
|
15
|
-
"version": "3.
|
|
15
|
+
"version": "3.44.0",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
}
|