slopbrick 0.18.7 → 0.18.9
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/engine/worker.cjs +2406 -809
- package/dist/engine/worker.js +2397 -809
- package/dist/index.cjs +2558 -983
- package/dist/index.d.cts +86 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.js +2558 -983
- package/package.json +4 -2
package/dist/engine/worker.cjs
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
const __importMetaUrl = require("url").pathToFileURL(__filename).href;
|
|
2
2
|
"use strict";
|
|
3
|
+
var __create = Object.create;
|
|
3
4
|
var __defProp = Object.defineProperty;
|
|
4
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __esm = (fn, res) => function __init() {
|
|
10
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
11
|
+
};
|
|
7
12
|
var __export = (target, all) => {
|
|
8
13
|
for (var name in all)
|
|
9
14
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -16,8 +21,418 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
21
|
}
|
|
17
22
|
return to;
|
|
18
23
|
};
|
|
24
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
25
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
26
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
27
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
28
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
29
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
30
|
+
mod
|
|
31
|
+
));
|
|
19
32
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
33
|
|
|
34
|
+
// src/engine/parser-rust.ts
|
|
35
|
+
function getRustParser() {
|
|
36
|
+
if (cachedParser) return { ok: true, parser: cachedParser };
|
|
37
|
+
if (loadError) return { ok: false, error: loadError };
|
|
38
|
+
try {
|
|
39
|
+
rustLanguage = import_tree_sitter_rust.default;
|
|
40
|
+
if (!rustLanguage || typeof rustLanguage !== "object") {
|
|
41
|
+
throw new Error("tree-sitter-rust: language export is missing or malformed");
|
|
42
|
+
}
|
|
43
|
+
const parser = new import_tree_sitter.default();
|
|
44
|
+
parser.setLanguage(rustLanguage);
|
|
45
|
+
cachedParser = parser;
|
|
46
|
+
return { ok: true, parser };
|
|
47
|
+
} catch (err) {
|
|
48
|
+
loadError = err instanceof Error ? err : new Error(String(err));
|
|
49
|
+
return { ok: false, error: loadError };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function effectiveParser() {
|
|
53
|
+
if (forcedFailure) return { ok: false, error: forcedFailure };
|
|
54
|
+
return getRustParser();
|
|
55
|
+
}
|
|
56
|
+
function parseRust(source) {
|
|
57
|
+
const result = effectiveParser();
|
|
58
|
+
if (!result.ok) return null;
|
|
59
|
+
if (!source || source.trim() === "") return null;
|
|
60
|
+
try {
|
|
61
|
+
const rawTree = result.parser.parse(source);
|
|
62
|
+
if (!rawTree) return null;
|
|
63
|
+
const tree = rawTree;
|
|
64
|
+
if (!tree || !tree.rootNode) return null;
|
|
65
|
+
if (tree.rootNode.type === "ERROR" && tree.rootNode.childCount === 0) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return tree;
|
|
69
|
+
} catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function isRustParserAvailable() {
|
|
74
|
+
const result = getRustParser();
|
|
75
|
+
return result.ok;
|
|
76
|
+
}
|
|
77
|
+
var import_tree_sitter, import_tree_sitter_rust, cachedParser, rustLanguage, loadError, forcedFailure;
|
|
78
|
+
var init_parser_rust = __esm({
|
|
79
|
+
"src/engine/parser-rust.ts"() {
|
|
80
|
+
"use strict";
|
|
81
|
+
import_tree_sitter = __toESM(require("tree-sitter"), 1);
|
|
82
|
+
import_tree_sitter_rust = __toESM(require("tree-sitter-rust"), 1);
|
|
83
|
+
cachedParser = null;
|
|
84
|
+
rustLanguage = null;
|
|
85
|
+
loadError = null;
|
|
86
|
+
forcedFailure = null;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// src/engine/visitors/rust.ts
|
|
91
|
+
function parseRustFile(filePath, source, options = {}) {
|
|
92
|
+
const empty = {
|
|
93
|
+
imports: [],
|
|
94
|
+
functions: [],
|
|
95
|
+
structs: [],
|
|
96
|
+
traits: [],
|
|
97
|
+
impls: []
|
|
98
|
+
};
|
|
99
|
+
if (!isRustParserAvailable() || options.forceFallback) {
|
|
100
|
+
return empty;
|
|
101
|
+
}
|
|
102
|
+
const tree = parseRust(source);
|
|
103
|
+
if (!tree) return empty;
|
|
104
|
+
return walkRustTree(tree);
|
|
105
|
+
}
|
|
106
|
+
function walkRustTree(tree) {
|
|
107
|
+
const ctx = { inTestConfig: false };
|
|
108
|
+
const out = {
|
|
109
|
+
imports: [],
|
|
110
|
+
functions: [],
|
|
111
|
+
structs: [],
|
|
112
|
+
traits: [],
|
|
113
|
+
impls: []
|
|
114
|
+
};
|
|
115
|
+
walkChildren(tree.rootNode, ctx, out);
|
|
116
|
+
return out;
|
|
117
|
+
}
|
|
118
|
+
function walkChildren(node, ctx, out) {
|
|
119
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
120
|
+
const child = node.namedChild(i);
|
|
121
|
+
if (!child) continue;
|
|
122
|
+
visitNode(child, ctx, out);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function visitNode(node, ctx, out) {
|
|
126
|
+
const innerCtx = { ...ctx };
|
|
127
|
+
const attrState = readPrecedingAttributes(node);
|
|
128
|
+
switch (node.type) {
|
|
129
|
+
case "use_declaration": {
|
|
130
|
+
out.imports.push(extractUse(node));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
case "function_item": {
|
|
134
|
+
const isMethod = isInImplBlock(node);
|
|
135
|
+
out.functions.push(extractFunction(node, attrState, innerCtx.inTestConfig, isMethod));
|
|
136
|
+
walkChildren(getField(node, "body") ?? node, innerCtx, out);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
case "struct_item": {
|
|
140
|
+
out.structs.push(extractStruct(node, attrState));
|
|
141
|
+
const body = getField(node, "body");
|
|
142
|
+
if (body) walkChildren(body, innerCtx, out);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
case "trait_item": {
|
|
146
|
+
out.traits.push(extractTrait(node, attrState));
|
|
147
|
+
const body = getField(node, "body");
|
|
148
|
+
if (body) walkChildren(body, innerCtx, out);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
case "impl_item": {
|
|
152
|
+
const implEntry = extractImpl(node, attrState, innerCtx);
|
|
153
|
+
out.impls.push(implEntry.entry);
|
|
154
|
+
const body = getField(node, "body");
|
|
155
|
+
if (body) walkChildren(body, innerCtx, out);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
case "mod_item": {
|
|
159
|
+
const modIsTest = innerCtx.inTestConfig || attrState.isTestCfg;
|
|
160
|
+
const modCtx = { ...innerCtx, inTestConfig: modIsTest };
|
|
161
|
+
const body = getField(node, "body");
|
|
162
|
+
if (body) walkChildren(body, modCtx, out);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
default: {
|
|
166
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
167
|
+
const child = node.namedChild(i);
|
|
168
|
+
if (child) visitNode(child, innerCtx, out);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function readPrecedingAttributes(node) {
|
|
174
|
+
const state = {
|
|
175
|
+
isTestCfg: false,
|
|
176
|
+
isTest: false,
|
|
177
|
+
isPub: false,
|
|
178
|
+
derives: []
|
|
179
|
+
};
|
|
180
|
+
const parent = node.parent;
|
|
181
|
+
if (!parent) return state;
|
|
182
|
+
for (let i = 0; i < parent.namedChildCount; i++) {
|
|
183
|
+
const sibling = parent.namedChild(i);
|
|
184
|
+
if (!sibling || sibling === node) continue;
|
|
185
|
+
if (sibling.endIndex > node.startIndex) continue;
|
|
186
|
+
if (sibling.type !== "attribute_item") continue;
|
|
187
|
+
decodeAttribute(sibling, state);
|
|
188
|
+
}
|
|
189
|
+
return state;
|
|
190
|
+
}
|
|
191
|
+
function decodeAttribute(attr, state) {
|
|
192
|
+
for (let i = 0; i < attr.namedChildCount; i++) {
|
|
193
|
+
const child = attr.namedChild(i);
|
|
194
|
+
if (!child || child.type !== "attribute") continue;
|
|
195
|
+
const name = firstIdentifier(child);
|
|
196
|
+
if (!name) continue;
|
|
197
|
+
if (name === "cfg") {
|
|
198
|
+
const cfgText = child.text;
|
|
199
|
+
if (/\btest\b/.test(cfgText) && !/\bnot\(test\)/.test(cfgText)) {
|
|
200
|
+
state.isTestCfg = true;
|
|
201
|
+
}
|
|
202
|
+
} else if (name === "test") {
|
|
203
|
+
state.isTest = true;
|
|
204
|
+
} else if (name === "derive") {
|
|
205
|
+
for (let j = 0; j < child.namedChildCount; j++) {
|
|
206
|
+
const inner = child.namedChild(j);
|
|
207
|
+
if (inner) {
|
|
208
|
+
const matches = inner.text.matchAll(/\b([A-Z][A-Za-z0-9_]*)\b/g);
|
|
209
|
+
for (const m of matches) state.derives.push(m[1]);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function firstIdentifier(node) {
|
|
216
|
+
const text = node.text;
|
|
217
|
+
const idMatch = text.match(/^([a-zA-Z_][a-zA-Z0-9_]*)/);
|
|
218
|
+
return idMatch ? idMatch[1] : null;
|
|
219
|
+
}
|
|
220
|
+
function extractUse(node) {
|
|
221
|
+
const text = node.text;
|
|
222
|
+
const argument = node.namedChild(0);
|
|
223
|
+
const argField = node.childForFieldName("argument");
|
|
224
|
+
const path = argField?.text ?? argument?.text ?? "";
|
|
225
|
+
const names = [];
|
|
226
|
+
let isGlob = false;
|
|
227
|
+
const useListNode = findUseListNode(argument);
|
|
228
|
+
if (useListNode) {
|
|
229
|
+
for (let i = 0; i < useListNode.namedChildCount; i++) {
|
|
230
|
+
const item = useListNode.namedChild(i);
|
|
231
|
+
if (item.type === "use_wildcard") {
|
|
232
|
+
isGlob = true;
|
|
233
|
+
} else if (item.type === "identifier") {
|
|
234
|
+
names.push({ name: item.text });
|
|
235
|
+
} else if (item.type === "use_as_clause") {
|
|
236
|
+
const alias = item.childForFieldName("alias");
|
|
237
|
+
const binding = item.childForFieldName("path");
|
|
238
|
+
if (binding) {
|
|
239
|
+
names.push({ name: binding.text, alias: alias?.text });
|
|
240
|
+
} else {
|
|
241
|
+
names.push({ name: item.text });
|
|
242
|
+
}
|
|
243
|
+
} else if (item.type === "scoped_identifier") {
|
|
244
|
+
const idents = collectIdentifiers(item);
|
|
245
|
+
names.push({ name: idents[idents.length - 1] ?? item.text });
|
|
246
|
+
} else if (item.text.includes(" as ")) {
|
|
247
|
+
const [head, alias] = item.text.split(/\s+as\s+/);
|
|
248
|
+
names.push({ name: (head ?? "").trim(), alias: alias?.trim() });
|
|
249
|
+
} else {
|
|
250
|
+
names.push({ name: item.text });
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
} else if (argument?.type === "use_wildcard") {
|
|
254
|
+
isGlob = true;
|
|
255
|
+
} else if (argument) {
|
|
256
|
+
const idents = collectIdentifiers(argument);
|
|
257
|
+
const last = idents[idents.length - 1] ?? argument.text;
|
|
258
|
+
names.push({ name: last });
|
|
259
|
+
const asMatch = text.match(/\s+as\s+(\w+)\s*;?\s*$/);
|
|
260
|
+
if (asMatch) names[0].alias = asMatch[1];
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
path: path.trim(),
|
|
264
|
+
names,
|
|
265
|
+
isGlob,
|
|
266
|
+
line: node.startPosition.row + 1,
|
|
267
|
+
column: node.startPosition.column
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
function extractFunction(node, attrs, inheritedTestConfig, isMethod) {
|
|
271
|
+
const nameNode = node.childForFieldName("name");
|
|
272
|
+
const name = nameNode?.text ?? "<anon>";
|
|
273
|
+
const params = node.childForFieldName("parameters");
|
|
274
|
+
const body = node.childForFieldName("body");
|
|
275
|
+
const visibilityMod = node.namedChild(0);
|
|
276
|
+
const isPublic = visibilityMod?.type === "visibility_modifier";
|
|
277
|
+
let receiver;
|
|
278
|
+
if (isMethod && params) {
|
|
279
|
+
const selfParam = findSelfParameter(params);
|
|
280
|
+
if (selfParam) receiver = selfParam.text;
|
|
281
|
+
}
|
|
282
|
+
const bodyLines = body ? body.endPosition.row - body.startPosition.row + 1 : 0;
|
|
283
|
+
const inTestConfig = inheritedTestConfig || attrs.isTest || attrs.isTestCfg || isFunctionAttrTest(node);
|
|
284
|
+
return {
|
|
285
|
+
name,
|
|
286
|
+
line: node.startPosition.row + 1,
|
|
287
|
+
column: node.startPosition.column,
|
|
288
|
+
isPublic,
|
|
289
|
+
isMethod,
|
|
290
|
+
receiver,
|
|
291
|
+
bodyLines,
|
|
292
|
+
inTestConfig
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
function extractStruct(node, attrs) {
|
|
296
|
+
const nameNode = node.childForFieldName("name");
|
|
297
|
+
return {
|
|
298
|
+
name: nameNode?.text ?? "<anon>",
|
|
299
|
+
line: node.startPosition.row + 1,
|
|
300
|
+
column: node.startPosition.column,
|
|
301
|
+
isPublic: hasVisibility(node),
|
|
302
|
+
isDerive: attrs.derives.length > 0,
|
|
303
|
+
derives: [...attrs.derives]
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
function extractTrait(node, _attrs) {
|
|
307
|
+
const nameNode = node.childForFieldName("name");
|
|
308
|
+
return {
|
|
309
|
+
name: nameNode?.text ?? "<anon>",
|
|
310
|
+
line: node.startPosition.row + 1,
|
|
311
|
+
column: node.startPosition.column,
|
|
312
|
+
isPublic: hasVisibility(node)
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
function extractImpl(node, _attrs, _ctx) {
|
|
316
|
+
const traitNode = node.childForFieldName("trait");
|
|
317
|
+
const typeNode = node.childForFieldName("type");
|
|
318
|
+
const typeText = typeNode?.text ?? "<anon>";
|
|
319
|
+
const traitText = traitNode?.text;
|
|
320
|
+
const body = node.childForFieldName("body");
|
|
321
|
+
const methods = [];
|
|
322
|
+
if (body) {
|
|
323
|
+
for (let i = 0; i < body.namedChildCount; i++) {
|
|
324
|
+
const child = body.namedChild(i);
|
|
325
|
+
if (child?.type === "function_item") {
|
|
326
|
+
const m = child.childForFieldName("name");
|
|
327
|
+
if (m) methods.push(m.text);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
entry: {
|
|
333
|
+
type: typeText,
|
|
334
|
+
trait: traitText ?? void 0,
|
|
335
|
+
methods,
|
|
336
|
+
line: node.startPosition.row + 1,
|
|
337
|
+
column: node.startPosition.column
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
function findUseListNode(argument) {
|
|
342
|
+
if (!argument) return null;
|
|
343
|
+
if (argument.type === "use_list") return argument;
|
|
344
|
+
if (argument.type === "scoped_use_list") {
|
|
345
|
+
for (let i = 0; i < argument.namedChildCount; i++) {
|
|
346
|
+
const c = argument.namedChild(i);
|
|
347
|
+
if (c?.type === "use_list") return c;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
function getField(node, fieldName) {
|
|
353
|
+
return node.childForFieldName(fieldName);
|
|
354
|
+
}
|
|
355
|
+
function collectIdentifiers(node) {
|
|
356
|
+
const out = [];
|
|
357
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
358
|
+
const child = node.namedChild(i);
|
|
359
|
+
if (!child) continue;
|
|
360
|
+
if (child.type === "identifier" || child.type === "type_identifier") {
|
|
361
|
+
out.push(child.text);
|
|
362
|
+
} else if (child.type === "scoped_identifier" || child.type === "nested_identifier") {
|
|
363
|
+
out.push(...collectIdentifiers(child));
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return out;
|
|
367
|
+
}
|
|
368
|
+
function hasVisibility(node) {
|
|
369
|
+
return node.namedChild(0)?.type === "visibility_modifier";
|
|
370
|
+
}
|
|
371
|
+
function isInImplBlock(node) {
|
|
372
|
+
for (let p = node.parent; p; p = p.parent) {
|
|
373
|
+
if (p.type === "impl_item") return true;
|
|
374
|
+
if (p.type === "function_item" || p.type === "source_file") return false;
|
|
375
|
+
}
|
|
376
|
+
return false;
|
|
377
|
+
}
|
|
378
|
+
function findSelfParameter(params) {
|
|
379
|
+
for (let i = 0; i < params.namedChildCount; i++) {
|
|
380
|
+
const child = params.namedChild(i);
|
|
381
|
+
if (child?.type === "self_parameter") return child;
|
|
382
|
+
}
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
385
|
+
function isFunctionAttrTest(node) {
|
|
386
|
+
void node;
|
|
387
|
+
return false;
|
|
388
|
+
}
|
|
389
|
+
var SERVICE_SUFFIXES, SERVICE_SUFFIX_GROUP, RUST_SERVICE_STRUCT_RE, RUST_SERVICE_IMPL_RE;
|
|
390
|
+
var init_rust = __esm({
|
|
391
|
+
"src/engine/visitors/rust.ts"() {
|
|
392
|
+
"use strict";
|
|
393
|
+
init_parser_rust();
|
|
394
|
+
SERVICE_SUFFIXES = [
|
|
395
|
+
"Service",
|
|
396
|
+
"Manager",
|
|
397
|
+
"Handler",
|
|
398
|
+
"Repository",
|
|
399
|
+
"Controller",
|
|
400
|
+
"Helper",
|
|
401
|
+
"Factory",
|
|
402
|
+
"Provider",
|
|
403
|
+
"Store",
|
|
404
|
+
"API",
|
|
405
|
+
"Client",
|
|
406
|
+
"Adapter",
|
|
407
|
+
"Resolver",
|
|
408
|
+
"Mapper",
|
|
409
|
+
"Transformer",
|
|
410
|
+
"Serializer",
|
|
411
|
+
"Validator",
|
|
412
|
+
"Strategy",
|
|
413
|
+
"Facade",
|
|
414
|
+
"Decorator",
|
|
415
|
+
"Observer",
|
|
416
|
+
"Builder",
|
|
417
|
+
"Command",
|
|
418
|
+
"Processor",
|
|
419
|
+
"Worker",
|
|
420
|
+
"Job",
|
|
421
|
+
"Actor",
|
|
422
|
+
"Executor"
|
|
423
|
+
];
|
|
424
|
+
SERVICE_SUFFIX_GROUP = `(?:${SERVICE_SUFFIXES.join("|")})`;
|
|
425
|
+
RUST_SERVICE_STRUCT_RE = new RegExp(
|
|
426
|
+
`^(?:pub(?:\\(crate\\)|\\(super\\))?\\s+)?struct\\s+(\\w+?)${SERVICE_SUFFIX_GROUP}?\\b`,
|
|
427
|
+
"gm"
|
|
428
|
+
);
|
|
429
|
+
RUST_SERVICE_IMPL_RE = new RegExp(
|
|
430
|
+
`^impl(?:<[^>]+>)?\\s+(?:${SERVICE_SUFFIX_GROUP}\\s+for\\s+)?(\\w+?)${SERVICE_SUFFIX_GROUP}?\\b`,
|
|
431
|
+
"gm"
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
});
|
|
435
|
+
|
|
21
436
|
// src/engine/worker.ts
|
|
22
437
|
var worker_exports = {};
|
|
23
438
|
__export(worker_exports, {
|
|
@@ -4258,7 +4673,7 @@ function parseBlankModule(source) {
|
|
|
4258
4673
|
tsx: false,
|
|
4259
4674
|
target: "es2022"
|
|
4260
4675
|
});
|
|
4261
|
-
return { ast, source
|
|
4676
|
+
return { ast, source };
|
|
4262
4677
|
}
|
|
4263
4678
|
function parseScriptContent(content, isTypeScript) {
|
|
4264
4679
|
if (isTypeScript) {
|
|
@@ -4344,8 +4759,16 @@ function parseSource(source, filePath) {
|
|
|
4344
4759
|
// but no SWC support. Return a blank-padded empty module so
|
|
4345
4760
|
// regex-only rules can still fire (markdown-leakage, comment-
|
|
4346
4761
|
// ratio, etc.) without burning the parseError path.
|
|
4762
|
+
// v0.18.9: `.rs` is in the same bucket. The visitor layer
|
|
4763
|
+
// (`engine/visitors/rust.ts`) carries the tree-sitter-backed
|
|
4764
|
+
// parse + extractFacts attaches the result to `facts.v2.rustFile`.
|
|
4765
|
+
// The rule layer (`rules/rust/*.ts`) reads that field. parseBlankModule
|
|
4766
|
+
// lets the worker continue past the parser — without this, parseWithSwc
|
|
4767
|
+
// would throw on every .rs file, the worker would count it as a
|
|
4768
|
+
// parseError, and the v2-build's buildRustFileRecord would never run.
|
|
4347
4769
|
case "py":
|
|
4348
4770
|
case "go":
|
|
4771
|
+
case "rs":
|
|
4349
4772
|
return parseBlankModule(source);
|
|
4350
4773
|
default:
|
|
4351
4774
|
return parseWithSwc(source, filePath);
|
|
@@ -6910,6 +7333,7 @@ function dispatchNode(node, parent, path, vctx) {
|
|
|
6910
7333
|
}
|
|
6911
7334
|
|
|
6912
7335
|
// src/engine/visitors/v2-build.ts
|
|
7336
|
+
init_rust();
|
|
6913
7337
|
var TAILWIND_COLOR_RE = /^(?:bg|text|border|ring|from|to|via|fill|stroke)-([a-z]+-\d+|white|black|transparent|current|\[.+?\])$/;
|
|
6914
7338
|
var TAILWIND_SPACING_RE = /^(?:[pm][xytrbl]?|gap|space-[xy])-(\d+(?:\.\d+)?)$/;
|
|
6915
7339
|
var TAILWIND_RADIUS_RE = /^(?:rounded(?:-[a-z]+)?)-(.+)$/;
|
|
@@ -7090,9 +7514,60 @@ function buildV2Facts(facts, source, ext, framework, config, templateClassNames
|
|
|
7090
7514
|
})),
|
|
7091
7515
|
disabledRules: extractDisabledRules(source),
|
|
7092
7516
|
templateClassNames,
|
|
7517
|
+
// v0.18.9 — populate the Rust AST record when the file is `.rs`.
|
|
7518
|
+
// Calling `parseRustFile` here keeps the dead-code detector's
|
|
7519
|
+
// import-binding pass a pure function over the same source the
|
|
7520
|
+
// walker saw. The native-binding guard lives inside
|
|
7521
|
+
// `parseRustFile` (returns an empty record when tree-sitter is
|
|
7522
|
+
// unavailable).
|
|
7523
|
+
rustFile: buildRustFileRecord(facts.filePath, source),
|
|
7093
7524
|
_source: source
|
|
7094
7525
|
};
|
|
7095
7526
|
}
|
|
7527
|
+
function buildRustFileRecord(filePath, source) {
|
|
7528
|
+
if (!filePath.toLowerCase().endsWith(".rs")) return void 0;
|
|
7529
|
+
const structure = parseRustFile(filePath, source);
|
|
7530
|
+
return {
|
|
7531
|
+
imports: structure.imports.map((i) => ({
|
|
7532
|
+
path: i.path,
|
|
7533
|
+
names: i.names.map((n) => ({ name: n.name, ...n.alias ? { alias: n.alias } : {} })),
|
|
7534
|
+
isGlob: i.isGlob,
|
|
7535
|
+
line: i.line,
|
|
7536
|
+
column: i.column
|
|
7537
|
+
})),
|
|
7538
|
+
functions: structure.functions.map((f) => ({
|
|
7539
|
+
name: f.name,
|
|
7540
|
+
line: f.line,
|
|
7541
|
+
column: f.column,
|
|
7542
|
+
isPublic: f.isPublic,
|
|
7543
|
+
isMethod: f.isMethod,
|
|
7544
|
+
...f.receiver ? { receiver: f.receiver } : {},
|
|
7545
|
+
bodyLines: f.bodyLines,
|
|
7546
|
+
inTestConfig: f.inTestConfig
|
|
7547
|
+
})),
|
|
7548
|
+
structs: structure.structs.map((s) => ({
|
|
7549
|
+
name: s.name,
|
|
7550
|
+
line: s.line,
|
|
7551
|
+
column: s.column,
|
|
7552
|
+
isPublic: s.isPublic,
|
|
7553
|
+
isDerive: s.isDerive,
|
|
7554
|
+
derives: [...s.derives]
|
|
7555
|
+
})),
|
|
7556
|
+
traits: structure.traits.map((t) => ({
|
|
7557
|
+
name: t.name,
|
|
7558
|
+
line: t.line,
|
|
7559
|
+
column: t.column,
|
|
7560
|
+
isPublic: t.isPublic
|
|
7561
|
+
})),
|
|
7562
|
+
impls: structure.impls.map((ip) => ({
|
|
7563
|
+
...ip.trait ? { trait: ip.trait } : {},
|
|
7564
|
+
type: ip.type,
|
|
7565
|
+
methods: [...ip.methods],
|
|
7566
|
+
line: ip.line,
|
|
7567
|
+
column: ip.column
|
|
7568
|
+
}))
|
|
7569
|
+
};
|
|
7570
|
+
}
|
|
7096
7571
|
function splitFilePath(filePath) {
|
|
7097
7572
|
const baseName = filePath.split("/").pop() ?? filePath;
|
|
7098
7573
|
const dotIdx = baseName.lastIndexOf(".");
|
|
@@ -34594,9 +35069,43 @@ var unusedImportRule = createRule({
|
|
|
34594
35069
|
advice: `Remove the import or use '${binding.name}' somewhere in the file. This is the most common AI-iteration rot \u2014 the model added the import when it introduced a feature, then rewrote the function without cleaning up.`
|
|
34595
35070
|
});
|
|
34596
35071
|
}
|
|
35072
|
+
if (facts.v2.rustFile) {
|
|
35073
|
+
const strippedSource = stripUseDeclarations(facts.v2._source ?? "");
|
|
35074
|
+
const referenced = collectRustReferencedNames(strippedSource);
|
|
35075
|
+
for (const imp of facts.v2.rustFile.imports) {
|
|
35076
|
+
for (const nameEntry of imp.names) {
|
|
35077
|
+
if (referenced.has(nameEntry.name)) continue;
|
|
35078
|
+
const source = ` from '${imp.path}'`;
|
|
35079
|
+
issues.push({
|
|
35080
|
+
ruleId: "dead/unused-import",
|
|
35081
|
+
category: "logic",
|
|
35082
|
+
severity: "low",
|
|
35083
|
+
aiSpecific: true,
|
|
35084
|
+
message: `Unused import: '${nameEntry.name}'${source}`,
|
|
35085
|
+
line: imp.line,
|
|
35086
|
+
column: imp.column,
|
|
35087
|
+
advice: `Remove the '${imp.path}' import or use '${nameEntry.name}' somewhere in the file. Rust's compiler only flags unused imports per module \u2014 the tree-sitter-backed walker here surfaces them for slopbrick's dead-code rules regardless of #[allow(unused_imports)].`
|
|
35088
|
+
});
|
|
35089
|
+
}
|
|
35090
|
+
}
|
|
35091
|
+
}
|
|
34597
35092
|
return issues;
|
|
34598
35093
|
}
|
|
34599
35094
|
});
|
|
35095
|
+
function collectRustReferencedNames(source) {
|
|
35096
|
+
const out = /* @__PURE__ */ new Set();
|
|
35097
|
+
for (const m of source.matchAll(/\b([A-Za-z_][A-Za-z0-9_]*)\b/g)) {
|
|
35098
|
+
out.add(m[1]);
|
|
35099
|
+
}
|
|
35100
|
+
return out;
|
|
35101
|
+
}
|
|
35102
|
+
function stripUseDeclarations(source) {
|
|
35103
|
+
let out = source;
|
|
35104
|
+
out = out.replace(/^\s*use\s+[\s\S]*?;\s*$/gm, "");
|
|
35105
|
+
out = out.replace(/\/\/[^\n]*/g, "");
|
|
35106
|
+
out = out.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
35107
|
+
return out;
|
|
35108
|
+
}
|
|
34600
35109
|
|
|
34601
35110
|
// src/rules/dead/unused-local.ts
|
|
34602
35111
|
var SKIP_NAMES = /* @__PURE__ */ new Set(["React", "_"]);
|
|
@@ -37509,6 +38018,326 @@ var uxPatternFragmentationRule = createRule({
|
|
|
37509
38018
|
}
|
|
37510
38019
|
});
|
|
37511
38020
|
|
|
38021
|
+
// src/rules/rust/stringly-typed.ts
|
|
38022
|
+
var SUSPECT_PARAM_NAMES = /* @__PURE__ */ new Set([
|
|
38023
|
+
"kind",
|
|
38024
|
+
"type",
|
|
38025
|
+
"mode",
|
|
38026
|
+
"event",
|
|
38027
|
+
"status",
|
|
38028
|
+
"category",
|
|
38029
|
+
"action",
|
|
38030
|
+
"state",
|
|
38031
|
+
"level",
|
|
38032
|
+
"role",
|
|
38033
|
+
"tier",
|
|
38034
|
+
"phase",
|
|
38035
|
+
"tag",
|
|
38036
|
+
"format",
|
|
38037
|
+
"shape",
|
|
38038
|
+
"direction",
|
|
38039
|
+
"side",
|
|
38040
|
+
"method"
|
|
38041
|
+
]);
|
|
38042
|
+
var MAX_VARIANT_COUNT = 32;
|
|
38043
|
+
var rustStringlyTypedRule = createRule({
|
|
38044
|
+
id: "rust/stringly-typed",
|
|
38045
|
+
category: "logic",
|
|
38046
|
+
severity: "medium",
|
|
38047
|
+
aiSpecific: true,
|
|
38048
|
+
description: "String / &str parameter where a typed enum exists in the same file",
|
|
38049
|
+
create(_context) {
|
|
38050
|
+
return {};
|
|
38051
|
+
},
|
|
38052
|
+
analyze(_context, facts) {
|
|
38053
|
+
const issues = [];
|
|
38054
|
+
if (!facts.v2?.rustFile) return issues;
|
|
38055
|
+
const source = facts.v2._source ?? "";
|
|
38056
|
+
if (!source) return issues;
|
|
38057
|
+
const lineOffsets = buildLineOffsets2(source);
|
|
38058
|
+
const enumCandidates = collectEnumCandidates(source);
|
|
38059
|
+
if (enumCandidates.length === 0) return issues;
|
|
38060
|
+
for (const fn of facts.v2.rustFile.functions) {
|
|
38061
|
+
const paramText = extractParameterText(source, lineOffsets, fn);
|
|
38062
|
+
if (!paramText) continue;
|
|
38063
|
+
const matches = scanForStringlyParams(paramText);
|
|
38064
|
+
if (matches.length === 0) continue;
|
|
38065
|
+
issues.push({
|
|
38066
|
+
ruleId: "rust/stringly-typed",
|
|
38067
|
+
category: "logic",
|
|
38068
|
+
severity: "medium",
|
|
38069
|
+
aiSpecific: true,
|
|
38070
|
+
message: matches.length === 1 ? `Parameter '${matches[0].name}' typed as '${matches[0].type}', but enum ${enumCandidates[0].name} exists in the file` : `Function has ${matches.length} stringly-typed parameters; enum ${enumCandidates[0].name} exists in the file`,
|
|
38071
|
+
line: fn.line,
|
|
38072
|
+
column: fn.column,
|
|
38073
|
+
advice: `Replace the String/&str parameter with the typed enum. Stringly-typed APIs lose type information at the boundary; a typo ('Click' vs 'click') only fails at runtime. AI agents introduce these during exploratory scaffolding, then never replace them with the existing enum.`
|
|
38074
|
+
});
|
|
38075
|
+
}
|
|
38076
|
+
return issues;
|
|
38077
|
+
}
|
|
38078
|
+
});
|
|
38079
|
+
function collectEnumCandidates(source) {
|
|
38080
|
+
const out = [];
|
|
38081
|
+
const enumRe = /^(?:pub(?:\([^)]+\))?\s+)?enum\s+(\w+)\s*\{([^}]*)\}/gm;
|
|
38082
|
+
for (const m of source.matchAll(enumRe)) {
|
|
38083
|
+
const body = m[2] ?? "";
|
|
38084
|
+
const variants = body.split(/,(?![^()]*\))/).map((s) => s.trim()).filter((s) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(s.split(/\s+/)[0] ?? ""));
|
|
38085
|
+
if (variants.length > MAX_VARIANT_COUNT) continue;
|
|
38086
|
+
if (variants.length < 2) continue;
|
|
38087
|
+
out.push({ name: m[1], variantCount: variants.length, line: lineOfMatch(source, m.index ?? 0) });
|
|
38088
|
+
}
|
|
38089
|
+
return out;
|
|
38090
|
+
}
|
|
38091
|
+
function lineOfMatch(source, index) {
|
|
38092
|
+
let line = 1;
|
|
38093
|
+
for (let i = 0; i < index && i < source.length; i++) {
|
|
38094
|
+
if (source[i] === "\n") line++;
|
|
38095
|
+
}
|
|
38096
|
+
return line;
|
|
38097
|
+
}
|
|
38098
|
+
function buildLineOffsets2(source) {
|
|
38099
|
+
const out = [0];
|
|
38100
|
+
for (let i = 0; i < source.length; i++) {
|
|
38101
|
+
if (source[i] === "\n") out.push(i + 1);
|
|
38102
|
+
}
|
|
38103
|
+
return out;
|
|
38104
|
+
}
|
|
38105
|
+
function extractParameterText(source, lineOffsets, fn) {
|
|
38106
|
+
const start = lineOffsets[Math.max(0, fn.line - 1)] ?? 0;
|
|
38107
|
+
const head = source.slice(start, start + 400);
|
|
38108
|
+
const openIdx = head.indexOf("(");
|
|
38109
|
+
if (openIdx < 0) return "";
|
|
38110
|
+
let closeIdx = -1;
|
|
38111
|
+
let depth = 0;
|
|
38112
|
+
for (let i = openIdx; i < head.length; i++) {
|
|
38113
|
+
if (head[i] === "(") depth++;
|
|
38114
|
+
else if (head[i] === ")") {
|
|
38115
|
+
depth--;
|
|
38116
|
+
if (depth === 0) {
|
|
38117
|
+
closeIdx = i;
|
|
38118
|
+
break;
|
|
38119
|
+
}
|
|
38120
|
+
}
|
|
38121
|
+
}
|
|
38122
|
+
if (closeIdx < 0) return "";
|
|
38123
|
+
return head.slice(openIdx + 1, closeIdx);
|
|
38124
|
+
}
|
|
38125
|
+
function scanForStringlyParams(paramText) {
|
|
38126
|
+
const out = [];
|
|
38127
|
+
for (const m of paramText.matchAll(
|
|
38128
|
+
/\b([a-z_][a-zA-Z0-9_]*)\s*:\s*(&\s*(?:mut\s+)?(?:str|String)\b)/g
|
|
38129
|
+
)) {
|
|
38130
|
+
const name = m[1];
|
|
38131
|
+
const type = m[2];
|
|
38132
|
+
if (!SUSPECT_PARAM_NAMES.has(name)) continue;
|
|
38133
|
+
out.push({ name, type });
|
|
38134
|
+
}
|
|
38135
|
+
return out;
|
|
38136
|
+
}
|
|
38137
|
+
|
|
38138
|
+
// src/rules/rust/todo-macro.ts
|
|
38139
|
+
init_parser_rust();
|
|
38140
|
+
var TODO_MACROS = /* @__PURE__ */ new Set(["todo", "unimplemented", "todo_unimplemented"]);
|
|
38141
|
+
var rustTodoMacroRule = createRule({
|
|
38142
|
+
id: "rust/todo-macro",
|
|
38143
|
+
category: "logic",
|
|
38144
|
+
severity: "medium",
|
|
38145
|
+
aiSpecific: true,
|
|
38146
|
+
description: "todo!() / unimplemented!() macro invocation in production code",
|
|
38147
|
+
create(_context) {
|
|
38148
|
+
return {};
|
|
38149
|
+
},
|
|
38150
|
+
analyze(_context, facts) {
|
|
38151
|
+
const issues = [];
|
|
38152
|
+
if (!facts.v2?.rustFile) return issues;
|
|
38153
|
+
const source = facts.v2._source ?? "";
|
|
38154
|
+
if (!source) return issues;
|
|
38155
|
+
const tree = parseRust(source);
|
|
38156
|
+
if (!tree) return issues;
|
|
38157
|
+
const testScopes = /* @__PURE__ */ new Set();
|
|
38158
|
+
for (const fn of facts.v2.rustFile.functions) {
|
|
38159
|
+
if (fn.inTestConfig && fn.name) testScopes.add(fn.name);
|
|
38160
|
+
}
|
|
38161
|
+
collectMacroIssues(tree.rootNode, testScopes, issues);
|
|
38162
|
+
return issues;
|
|
38163
|
+
}
|
|
38164
|
+
});
|
|
38165
|
+
function collectMacroIssues(node, testScopes, issues) {
|
|
38166
|
+
if (node.type === "macro_invocation") {
|
|
38167
|
+
const text = node.text;
|
|
38168
|
+
const m = text.match(/^([A-Za-z_][A-Za-z0-9_]*)/);
|
|
38169
|
+
const macroName = m?.[1] ?? "";
|
|
38170
|
+
if (TODO_MACROS.has(macroName)) {
|
|
38171
|
+
if (!isInsideMacroDefinition(node) && !isInsideTestFunction(node, testScopes)) {
|
|
38172
|
+
issues.push({
|
|
38173
|
+
ruleId: "rust/todo-macro",
|
|
38174
|
+
category: "logic",
|
|
38175
|
+
severity: "medium",
|
|
38176
|
+
aiSpecific: true,
|
|
38177
|
+
message: `'${macroName}!()' in production code \u2014 both expand to panic!()`,
|
|
38178
|
+
line: node.startPosition.row + 1,
|
|
38179
|
+
column: node.startPosition.column,
|
|
38180
|
+
advice: `Implement the function body or remove the stub. '${macroName}!()' is fine in test scaffolding (#[cfg(test)]); here it is a panic risk. AI agents commonly leave these behind after iterative refactors when the placeholder branch is never filled in.`
|
|
38181
|
+
});
|
|
38182
|
+
}
|
|
38183
|
+
}
|
|
38184
|
+
}
|
|
38185
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
38186
|
+
const child = node.namedChild(i);
|
|
38187
|
+
if (child) collectMacroIssues(child, testScopes, issues);
|
|
38188
|
+
}
|
|
38189
|
+
}
|
|
38190
|
+
function isInsideMacroDefinition(node) {
|
|
38191
|
+
for (let p = node.parent; p; p = p.parent) {
|
|
38192
|
+
if (p.type === "macro_definition") return true;
|
|
38193
|
+
if (p.type === "source_file") return false;
|
|
38194
|
+
}
|
|
38195
|
+
return false;
|
|
38196
|
+
}
|
|
38197
|
+
function isInsideTestFunction(node, testScopes) {
|
|
38198
|
+
for (let p = node.parent; p; p = p.parent) {
|
|
38199
|
+
if (p.type === "function_item") {
|
|
38200
|
+
const nameField = p.childForFieldName("name");
|
|
38201
|
+
const name = nameField?.text;
|
|
38202
|
+
if (name && testScopes.has(name)) return true;
|
|
38203
|
+
if (p.text.startsWith("#[test]") || p.text.startsWith("#[cfg(test)]")) return true;
|
|
38204
|
+
return false;
|
|
38205
|
+
}
|
|
38206
|
+
if (p.type === "source_file") return false;
|
|
38207
|
+
}
|
|
38208
|
+
return false;
|
|
38209
|
+
}
|
|
38210
|
+
|
|
38211
|
+
// src/rules/rust/unused-pub-fn.ts
|
|
38212
|
+
var API_CONVENTION_NAMES = /* @__PURE__ */ new Set([
|
|
38213
|
+
"new",
|
|
38214
|
+
"default",
|
|
38215
|
+
"from",
|
|
38216
|
+
"from_str",
|
|
38217
|
+
"from_iter",
|
|
38218
|
+
"try_from",
|
|
38219
|
+
"into",
|
|
38220
|
+
"into_iter",
|
|
38221
|
+
"try_into",
|
|
38222
|
+
"as_ref",
|
|
38223
|
+
"as_mut",
|
|
38224
|
+
"clone",
|
|
38225
|
+
"fmt",
|
|
38226
|
+
"eq",
|
|
38227
|
+
"hash",
|
|
38228
|
+
"partial_cmp",
|
|
38229
|
+
"cmp",
|
|
38230
|
+
"ord",
|
|
38231
|
+
"partial_eq"
|
|
38232
|
+
]);
|
|
38233
|
+
var rustUnusedPubFnRule = createRule({
|
|
38234
|
+
id: "rust/unused-pub-fn",
|
|
38235
|
+
category: "logic",
|
|
38236
|
+
severity: "low",
|
|
38237
|
+
aiSpecific: true,
|
|
38238
|
+
description: "Public function in a Rust file that has no in-file references",
|
|
38239
|
+
create(_context) {
|
|
38240
|
+
return {};
|
|
38241
|
+
},
|
|
38242
|
+
analyze(_context, facts) {
|
|
38243
|
+
const issues = [];
|
|
38244
|
+
if (!facts.v2?.rustFile) return issues;
|
|
38245
|
+
const rust = facts.v2.rustFile;
|
|
38246
|
+
const referenced = collectReferencedNames(facts.v2._source ?? "");
|
|
38247
|
+
for (const fn of rust.functions) {
|
|
38248
|
+
if (!fn.isPublic) continue;
|
|
38249
|
+
if (API_CONVENTION_NAMES.has(fn.name)) continue;
|
|
38250
|
+
if (fn.inTestConfig) continue;
|
|
38251
|
+
if (referenced.has(fn.name)) continue;
|
|
38252
|
+
issues.push({
|
|
38253
|
+
ruleId: "rust/unused-pub-fn",
|
|
38254
|
+
category: "logic",
|
|
38255
|
+
severity: "low",
|
|
38256
|
+
aiSpecific: true,
|
|
38257
|
+
message: `Public function '${fn.name}' is not referenced anywhere in the file`,
|
|
38258
|
+
line: fn.line,
|
|
38259
|
+
column: fn.column,
|
|
38260
|
+
advice: `Remove the function or call it somewhere. Rust's compiler doesn't warn on pub fns missing consumers unless \`#![warn(dead_code)]\` is set at the crate root. AI agents that iterate on a file often leave these behind \u2014 the most common AI-rotation signature for Rust after unused-imports.`
|
|
38261
|
+
});
|
|
38262
|
+
}
|
|
38263
|
+
return issues;
|
|
38264
|
+
}
|
|
38265
|
+
});
|
|
38266
|
+
function collectReferencedNames(source) {
|
|
38267
|
+
const out = /* @__PURE__ */ new Set();
|
|
38268
|
+
for (const m of source.matchAll(/\b([A-Za-z_][A-Za-z0-9_]*)\b/g)) {
|
|
38269
|
+
out.add(m[1]);
|
|
38270
|
+
}
|
|
38271
|
+
return out;
|
|
38272
|
+
}
|
|
38273
|
+
|
|
38274
|
+
// src/rules/rust/unwrap-in-production.ts
|
|
38275
|
+
init_parser_rust();
|
|
38276
|
+
var UNWRAP_METHODS = /* @__PURE__ */ new Set(["unwrap", "expect", "unwrap_or_else"]);
|
|
38277
|
+
var rustUnwrapInProductionRule = createRule({
|
|
38278
|
+
id: "rust/unwrap-in-production",
|
|
38279
|
+
category: "logic",
|
|
38280
|
+
severity: "medium",
|
|
38281
|
+
aiSpecific: true,
|
|
38282
|
+
description: ".unwrap() / .expect() called outside of #[cfg(test)] / #[test] scope",
|
|
38283
|
+
create(_context) {
|
|
38284
|
+
return {};
|
|
38285
|
+
},
|
|
38286
|
+
analyze(_context, facts) {
|
|
38287
|
+
const issues = [];
|
|
38288
|
+
if (!facts.v2?.rustFile) return issues;
|
|
38289
|
+
const source = facts.v2._source ?? "";
|
|
38290
|
+
if (!source) return issues;
|
|
38291
|
+
const tree = parseRust(source);
|
|
38292
|
+
if (!tree) return issues;
|
|
38293
|
+
const testScopes = /* @__PURE__ */ new Set();
|
|
38294
|
+
for (const fn of facts.v2.rustFile.functions) {
|
|
38295
|
+
if (fn.inTestConfig && fn.name) testScopes.add(fn.name);
|
|
38296
|
+
}
|
|
38297
|
+
collectUnwrapIssues(tree.rootNode, testScopes, issues);
|
|
38298
|
+
return issues;
|
|
38299
|
+
}
|
|
38300
|
+
});
|
|
38301
|
+
function collectUnwrapIssues(node, testScopes, issues) {
|
|
38302
|
+
if (node.type === "call_expression") {
|
|
38303
|
+
const fn = node.childForFieldName("function");
|
|
38304
|
+
if (fn && fn.type === "field_expression") {
|
|
38305
|
+
const field = fn.childForFieldName("field");
|
|
38306
|
+
if (field && field.type === "field_identifier" && UNWRAP_METHODS.has(field.text)) {
|
|
38307
|
+
if (!isInsideTestFunction2(node, testScopes)) {
|
|
38308
|
+
issues.push({
|
|
38309
|
+
ruleId: "rust/unwrap-in-production",
|
|
38310
|
+
category: "logic",
|
|
38311
|
+
severity: "medium",
|
|
38312
|
+
aiSpecific: true,
|
|
38313
|
+
message: `'.${field.text}()' called in production code \u2014 panic risk on Err/None`,
|
|
38314
|
+
line: node.startPosition.row + 1,
|
|
38315
|
+
column: node.startPosition.column,
|
|
38316
|
+
advice: `Replace with '?' (early-return on Err), '.map_err(...)' for conversion, or an explicit 'match'. '.${field.text}()' is fine in tests \u2014 wrap with '#[cfg(test)]' or move into a '#[cfg(test)] mod tests' block to suppress.`
|
|
38317
|
+
});
|
|
38318
|
+
}
|
|
38319
|
+
}
|
|
38320
|
+
}
|
|
38321
|
+
}
|
|
38322
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
38323
|
+
const child = node.namedChild(i);
|
|
38324
|
+
if (child) collectUnwrapIssues(child, testScopes, issues);
|
|
38325
|
+
}
|
|
38326
|
+
}
|
|
38327
|
+
function isInsideTestFunction2(node, testScopes) {
|
|
38328
|
+
for (let p = node.parent; p; p = p.parent) {
|
|
38329
|
+
if (p.type === "function_item") {
|
|
38330
|
+
const nameField = p.childForFieldName("name");
|
|
38331
|
+
const name = nameField?.text;
|
|
38332
|
+
if (name && testScopes.has(name)) return true;
|
|
38333
|
+
if (p.text.startsWith("#[test]") || p.text.startsWith("#[cfg(test)]")) return true;
|
|
38334
|
+
return false;
|
|
38335
|
+
}
|
|
38336
|
+
if (p.type === "source_file") return false;
|
|
38337
|
+
}
|
|
38338
|
+
return false;
|
|
38339
|
+
}
|
|
38340
|
+
|
|
37512
38341
|
// src/rules/security/dangerous-cors.ts
|
|
37513
38342
|
var HEADER_LITERAL_RE = /['"]Access-Control-Allow-Origin['"]\s*[,:=]\s*['"]\*['"]/g;
|
|
37514
38343
|
var CORS_BLOCK_RE = /\bcors\s*\(\s*\{([^}]*)\}\s*\)/g;
|
|
@@ -40540,6 +41369,10 @@ var builtinRules = [
|
|
|
40540
41369
|
halsteadAnomalyRule,
|
|
40541
41370
|
terminologyDriftRule,
|
|
40542
41371
|
uxPatternFragmentationRule,
|
|
41372
|
+
rustStringlyTypedRule,
|
|
41373
|
+
rustTodoMacroRule,
|
|
41374
|
+
rustUnusedPubFnRule,
|
|
41375
|
+
rustUnwrapInProductionRule,
|
|
40543
41376
|
dangerousCorsRule,
|
|
40544
41377
|
evalRule,
|
|
40545
41378
|
exposedEnvVarRule,
|
|
@@ -40614,6 +41447,22 @@ var RuleRegistry = class {
|
|
|
40614
41447
|
if (!filter) return list;
|
|
40615
41448
|
return list.filter((r) => filter.kind === "ai" ? r.aiSpecific : !r.aiSpecific);
|
|
40616
41449
|
}
|
|
41450
|
+
/** v0.18.8: remove every rule where `predicate(rule)` returns true.
|
|
41451
|
+
* Used by focused calibration scripts to scan a single category
|
|
41452
|
+
* without instantiating all 99 rules. */
|
|
41453
|
+
removeWhere(predicate) {
|
|
41454
|
+
let removed = 0;
|
|
41455
|
+
for (const [id, rule] of this.rules) {
|
|
41456
|
+
if (predicate(rule)) {
|
|
41457
|
+
this.rules.delete(id);
|
|
41458
|
+
removed++;
|
|
41459
|
+
}
|
|
41460
|
+
}
|
|
41461
|
+
return removed;
|
|
41462
|
+
}
|
|
41463
|
+
all() {
|
|
41464
|
+
return Array.from(this.rules.values());
|
|
41465
|
+
}
|
|
40617
41466
|
createContexts(config, filePath, cwd, hotspotIssues = []) {
|
|
40618
41467
|
const context = {
|
|
40619
41468
|
config,
|
|
@@ -40634,1044 +41483,1793 @@ var RuleRegistry = class {
|
|
|
40634
41483
|
|
|
40635
41484
|
// src/rules/signal-strength.json
|
|
40636
41485
|
var signal_strength_default = {
|
|
40637
|
-
"
|
|
40638
|
-
recall:
|
|
40639
|
-
fpRate:
|
|
40640
|
-
ratio:
|
|
40641
|
-
precision: 0.
|
|
40642
|
-
lastCalibratedAt: "2026-
|
|
41486
|
+
"ai/any-density": {
|
|
41487
|
+
recall: 6e-3,
|
|
41488
|
+
fpRate: 37e-4,
|
|
41489
|
+
ratio: 175.31,
|
|
41490
|
+
precision: 0.6523,
|
|
41491
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40643
41492
|
verdict: "USEFUL",
|
|
40644
|
-
_calibrationNote: "
|
|
40645
|
-
aiSpecific: true
|
|
41493
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=1760, FP=938, P=65.2%, FPR=0.37%, lift=175.31. v7 was USEFUL (TP=1313, FP=758, lift=153.41). v8 was USEFUL (TP=447, FP=180).",
|
|
41494
|
+
aiSpecific: true,
|
|
41495
|
+
_v7Verdict: "USEFUL",
|
|
41496
|
+
_v7Lift: 153.41,
|
|
41497
|
+
_v7Recall: 55e-4,
|
|
41498
|
+
_v7FpRate: 41e-4,
|
|
41499
|
+
_v7Precision: 0.634,
|
|
41500
|
+
_v8Verdict: "USEFUL",
|
|
41501
|
+
_v8Lift: 271.97
|
|
40646
41502
|
},
|
|
40647
|
-
"
|
|
40648
|
-
recall:
|
|
40649
|
-
fpRate:
|
|
40650
|
-
ratio:
|
|
40651
|
-
precision: 0.
|
|
40652
|
-
lastCalibratedAt: "2026-
|
|
40653
|
-
verdict: "
|
|
40654
|
-
_calibrationNote: "
|
|
40655
|
-
|
|
40656
|
-
|
|
41503
|
+
"ai/comment-ratio": {
|
|
41504
|
+
recall: 0.2771,
|
|
41505
|
+
fpRate: 0.1578,
|
|
41506
|
+
ratio: 4.26,
|
|
41507
|
+
precision: 0.6721,
|
|
41508
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41509
|
+
verdict: "USEFUL",
|
|
41510
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=81513, FP=39766, P=67.2%, FPR=15.78%, lift=4.26. v7 was USEFUL (TP=60308, FP=29876, lift=4.11). v8 was USEFUL (TP=21205, FP=9890).",
|
|
41511
|
+
aiSpecific: true,
|
|
41512
|
+
_v7Verdict: "USEFUL",
|
|
41513
|
+
_v7Lift: 4.11,
|
|
41514
|
+
_v7Recall: 0.2545,
|
|
41515
|
+
_v7FpRate: 0.1629,
|
|
41516
|
+
_v7Precision: 0.6687,
|
|
41517
|
+
_v8Verdict: "USEFUL",
|
|
41518
|
+
_v8Lift: 4.73
|
|
40657
41519
|
},
|
|
40658
|
-
"
|
|
40659
|
-
recall: 0.
|
|
40660
|
-
fpRate: 0.
|
|
40661
|
-
ratio:
|
|
40662
|
-
precision: 0.
|
|
40663
|
-
lastCalibratedAt: "2026-
|
|
40664
|
-
verdict: "
|
|
40665
|
-
_calibrationNote: "
|
|
40666
|
-
aiSpecific:
|
|
41520
|
+
"ai/compression-profile": {
|
|
41521
|
+
recall: 0.3478,
|
|
41522
|
+
fpRate: 0.1488,
|
|
41523
|
+
ratio: 4.92,
|
|
41524
|
+
precision: 0.7318,
|
|
41525
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41526
|
+
verdict: "USEFUL",
|
|
41527
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=102328, FP=37511, P=73.2%, FPR=14.88%, lift=4.92. v7 was USEFUL (TP=75031, FP=27473, lift=4.89). v8 was USEFUL (TP=27297, FP=10038).",
|
|
41528
|
+
aiSpecific: true,
|
|
41529
|
+
_v7Verdict: "USEFUL",
|
|
41530
|
+
_v7Lift: 4.89,
|
|
41531
|
+
_v7Recall: 0.3166,
|
|
41532
|
+
_v7FpRate: 0.1498,
|
|
41533
|
+
_v7Precision: 0.732,
|
|
41534
|
+
_v8Verdict: "USEFUL",
|
|
41535
|
+
_v8Lift: 5
|
|
40667
41536
|
},
|
|
40668
|
-
"
|
|
40669
|
-
recall:
|
|
41537
|
+
"ai/console-debug-storm": {
|
|
41538
|
+
recall: 73e-4,
|
|
40670
41539
|
fpRate: 9e-4,
|
|
40671
|
-
ratio:
|
|
40672
|
-
precision: 0.
|
|
40673
|
-
lastCalibratedAt: "2026-
|
|
41540
|
+
ratio: 949.21,
|
|
41541
|
+
precision: 0.9,
|
|
41542
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40674
41543
|
verdict: "USEFUL",
|
|
40675
|
-
_calibrationNote: "
|
|
40676
|
-
aiSpecific: true
|
|
41544
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=2150, FP=239, P=90.0%, FPR=0.09%, lift=949.21. v7 was USEFUL (TP=1912, FP=175, lift=960.19). v8 was USEFUL (TP=238, FP=64).",
|
|
41545
|
+
aiSpecific: true,
|
|
41546
|
+
_v7Verdict: "USEFUL",
|
|
41547
|
+
_v7Lift: 960.19,
|
|
41548
|
+
_v7Recall: 81e-4,
|
|
41549
|
+
_v7FpRate: 1e-3,
|
|
41550
|
+
_v7Precision: 0.9161,
|
|
41551
|
+
_v8Verdict: "USEFUL",
|
|
41552
|
+
_v8Lift: 845.55
|
|
40677
41553
|
},
|
|
40678
|
-
"
|
|
40679
|
-
recall:
|
|
40680
|
-
fpRate:
|
|
40681
|
-
ratio:
|
|
40682
|
-
precision: 0.
|
|
40683
|
-
lastCalibratedAt: "2026-
|
|
41554
|
+
"ai/default-react-stack": {
|
|
41555
|
+
recall: 1e-3,
|
|
41556
|
+
fpRate: 0,
|
|
41557
|
+
ratio: 251225.49,
|
|
41558
|
+
precision: 0.9966,
|
|
41559
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40684
41560
|
verdict: "USEFUL",
|
|
40685
|
-
_calibrationNote: "
|
|
40686
|
-
aiSpecific: true
|
|
41561
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=294, FP=1, P=99.7%, FPR=0.00%, lift=251225.49. v7 was USEFUL (TP=231, FP=1, lift=182622.43). v8 was USEFUL (TP=63, FP=0).",
|
|
41562
|
+
aiSpecific: true,
|
|
41563
|
+
_v7Verdict: "USEFUL",
|
|
41564
|
+
_v7Lift: 182622.43,
|
|
41565
|
+
_v7Recall: 1e-3,
|
|
41566
|
+
_v7FpRate: 0,
|
|
41567
|
+
_v7Precision: 0.9957,
|
|
41568
|
+
_v8Verdict: "USEFUL",
|
|
41569
|
+
_v8Lift: 99999
|
|
40687
41570
|
},
|
|
40688
|
-
"
|
|
40689
|
-
recall:
|
|
40690
|
-
fpRate: 0,
|
|
40691
|
-
ratio:
|
|
40692
|
-
precision: 0.
|
|
40693
|
-
lastCalibratedAt: "2026-
|
|
41571
|
+
"ai/errors-near-eof": {
|
|
41572
|
+
recall: 0.0948,
|
|
41573
|
+
fpRate: 0.052,
|
|
41574
|
+
ratio: 13.09,
|
|
41575
|
+
precision: 0.6803,
|
|
41576
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40694
41577
|
verdict: "USEFUL",
|
|
40695
|
-
_calibrationNote: "
|
|
40696
|
-
aiSpecific: true
|
|
41578
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=27874, FP=13097, P=68.0%, FPR=5.20%, lift=13.09. v7 was USEFUL (TP=16673, FP=10112, lift=11.29). v8 was USEFUL (TP=11201, FP=2985).",
|
|
41579
|
+
aiSpecific: true,
|
|
41580
|
+
_v7Verdict: "USEFUL",
|
|
41581
|
+
_v7Lift: 11.29,
|
|
41582
|
+
_v7Recall: 0.0704,
|
|
41583
|
+
_v7FpRate: 0.0551,
|
|
41584
|
+
_v7Precision: 0.6225,
|
|
41585
|
+
_v8Verdict: "USEFUL",
|
|
41586
|
+
_v8Lift: 18.16
|
|
40697
41587
|
},
|
|
40698
|
-
"
|
|
40699
|
-
recall:
|
|
41588
|
+
"ai/fetch-default-overuse": {
|
|
41589
|
+
recall: 27e-4,
|
|
40700
41590
|
fpRate: 3e-4,
|
|
40701
|
-
ratio:
|
|
40702
|
-
precision: 0.
|
|
40703
|
-
lastCalibratedAt: "2026-
|
|
41591
|
+
ratio: 2679.84,
|
|
41592
|
+
precision: 0.9036,
|
|
41593
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40704
41594
|
verdict: "USEFUL",
|
|
40705
|
-
_calibrationNote: "
|
|
40706
|
-
aiSpecific: true
|
|
41595
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=797, FP=85, P=90.4%, FPR=0.03%, lift=2679.84. v7 was USEFUL (TP=666, FP=76, lift=2166.14). v8 was USEFUL (TP=131, FP=9).",
|
|
41596
|
+
aiSpecific: true,
|
|
41597
|
+
_v7Verdict: "USEFUL",
|
|
41598
|
+
_v7Lift: 2166.14,
|
|
41599
|
+
_v7Recall: 28e-4,
|
|
41600
|
+
_v7FpRate: 4e-4,
|
|
41601
|
+
_v7Precision: 0.8976,
|
|
41602
|
+
_v8Verdict: "USEFUL",
|
|
41603
|
+
_v8Lift: 7139.19
|
|
40707
41604
|
},
|
|
40708
|
-
"
|
|
40709
|
-
recall:
|
|
41605
|
+
"ai/library-reinvention": {
|
|
41606
|
+
recall: 3e-4,
|
|
40710
41607
|
fpRate: 0,
|
|
40711
|
-
ratio:
|
|
40712
|
-
precision: 0.
|
|
40713
|
-
lastCalibratedAt: "2026-
|
|
41608
|
+
ratio: 47415.05,
|
|
41609
|
+
precision: 0.9405,
|
|
41610
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40714
41611
|
verdict: "USEFUL",
|
|
40715
|
-
_calibrationNote: "
|
|
40716
|
-
aiSpecific: true
|
|
41612
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=79, FP=5, P=94.0%, FPR=0.00%, lift=47415.05. v7 was USEFUL (TP=64, FP=5, lift=34024.44). v8 was USEFUL (TP=15, FP=0).",
|
|
41613
|
+
aiSpecific: true,
|
|
41614
|
+
_v7Verdict: "USEFUL",
|
|
41615
|
+
_v7Lift: 34024.44,
|
|
41616
|
+
_v7Recall: 3e-4,
|
|
41617
|
+
_v7FpRate: 0,
|
|
41618
|
+
_v7Precision: 0.9275,
|
|
41619
|
+
_v8Verdict: "USEFUL",
|
|
41620
|
+
_v8Lift: 99999
|
|
40717
41621
|
},
|
|
40718
|
-
"
|
|
40719
|
-
recall: 13e-4,
|
|
40720
|
-
fpRate: 4e-4,
|
|
40721
|
-
ratio: 3.4,
|
|
40722
|
-
precision: 0.8151,
|
|
40723
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
40724
|
-
verdict: "USEFUL",
|
|
40725
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=313, FP=71, P=81.5%, FPR=0.04%, lift=3.4. aiSpecific=True.",
|
|
40726
|
-
aiSpecific: true
|
|
40727
|
-
},
|
|
40728
|
-
"visual/math-gradient-hue-rotation": {
|
|
41622
|
+
"ai/log-rank-histogram": {
|
|
40729
41623
|
recall: 0,
|
|
40730
41624
|
fpRate: 0,
|
|
40731
41625
|
ratio: 0,
|
|
40732
41626
|
precision: 0,
|
|
40733
|
-
lastCalibratedAt: "2026-
|
|
41627
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40734
41628
|
verdict: "DORMANT",
|
|
40735
|
-
|
|
40736
|
-
|
|
40737
|
-
|
|
41629
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=OK, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
41630
|
+
aiSpecific: true,
|
|
41631
|
+
_v7Verdict: "OK",
|
|
41632
|
+
_v7Lift: 0,
|
|
41633
|
+
_v7Recall: 0,
|
|
41634
|
+
_v7FpRate: 0,
|
|
41635
|
+
_v7Precision: 0,
|
|
41636
|
+
_v8Verdict: "DORMANT",
|
|
41637
|
+
_v8Lift: 1,
|
|
41638
|
+
defaultOff: true
|
|
40738
41639
|
},
|
|
40739
|
-
"
|
|
40740
|
-
recall:
|
|
40741
|
-
fpRate:
|
|
40742
|
-
ratio:
|
|
40743
|
-
precision: 0.
|
|
40744
|
-
lastCalibratedAt: "2026-
|
|
40745
|
-
verdict: "
|
|
40746
|
-
_calibrationNote: "
|
|
40747
|
-
aiSpecific: true
|
|
40748
|
-
|
|
40749
|
-
|
|
40750
|
-
|
|
40751
|
-
|
|
40752
|
-
|
|
40753
|
-
|
|
40754
|
-
|
|
40755
|
-
verdict: "USEFUL",
|
|
40756
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=1067, FP=248, P=81.1%, FPR=0.13%, lift=3.3. aiSpecific=True.",
|
|
40757
|
-
aiSpecific: true
|
|
40758
|
-
},
|
|
40759
|
-
"visual/math-spacing-entropy": {
|
|
40760
|
-
recall: 18e-4,
|
|
40761
|
-
fpRate: 6e-4,
|
|
40762
|
-
ratio: 3.01,
|
|
40763
|
-
precision: 0.7959,
|
|
40764
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
40765
|
-
verdict: "USEFUL",
|
|
40766
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=425, FP=109, P=79.6%, FPR=0.06%, lift=3.0. aiSpecific=True.",
|
|
40767
|
-
aiSpecific: true
|
|
41640
|
+
"ai/markdown-leakage": {
|
|
41641
|
+
recall: 0,
|
|
41642
|
+
fpRate: 0,
|
|
41643
|
+
ratio: 10003.17,
|
|
41644
|
+
precision: 0.3571,
|
|
41645
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41646
|
+
verdict: "OK",
|
|
41647
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=5, FP=9, P=35.7%, FPR=0.00%, lift=10003.17. v7 was USEFUL (TP=5, FP=2, lift=65504.64). v8 was INVERTED (TP=0, FP=7).",
|
|
41648
|
+
aiSpecific: true,
|
|
41649
|
+
_v7Verdict: "USEFUL",
|
|
41650
|
+
_v7Lift: 65504.64,
|
|
41651
|
+
_v7Recall: 0,
|
|
41652
|
+
_v7FpRate: 0,
|
|
41653
|
+
_v7Precision: 0.7143,
|
|
41654
|
+
_v8Verdict: "INVERTED",
|
|
41655
|
+
_v8Lift: 0
|
|
40768
41656
|
},
|
|
40769
|
-
"
|
|
41657
|
+
"ai/renyi-profile": {
|
|
40770
41658
|
recall: 0,
|
|
40771
41659
|
fpRate: 0,
|
|
40772
|
-
ratio:
|
|
40773
|
-
precision: 0,
|
|
40774
|
-
lastCalibratedAt: "2026-
|
|
40775
|
-
verdict: "
|
|
40776
|
-
|
|
40777
|
-
|
|
40778
|
-
|
|
41660
|
+
ratio: 5251.67,
|
|
41661
|
+
precision: 0.25,
|
|
41662
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41663
|
+
verdict: "OK",
|
|
41664
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=4, FP=12, P=25.0%, FPR=0.00%, lift=5251.67. v7 was OK (TP=3, FP=9, lift=5094.81). v8 was OK (TP=1, FP=3).",
|
|
41665
|
+
aiSpecific: true,
|
|
41666
|
+
_v7Verdict: "OK",
|
|
41667
|
+
_v7Lift: 5094.81,
|
|
41668
|
+
_v7Recall: 0,
|
|
41669
|
+
_v7FpRate: 0,
|
|
41670
|
+
_v7Precision: 0.25,
|
|
41671
|
+
_v8Verdict: "OK",
|
|
41672
|
+
_v8Lift: 5722.25
|
|
40779
41673
|
},
|
|
40780
|
-
"
|
|
40781
|
-
recall: 0.
|
|
40782
|
-
fpRate:
|
|
40783
|
-
ratio:
|
|
40784
|
-
precision: 0.
|
|
40785
|
-
lastCalibratedAt: "2026-
|
|
41674
|
+
"ai/segment-surprisal-cv": {
|
|
41675
|
+
recall: 0.2019,
|
|
41676
|
+
fpRate: 0.0787,
|
|
41677
|
+
ratio: 9.52,
|
|
41678
|
+
precision: 0.7495,
|
|
41679
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40786
41680
|
verdict: "USEFUL",
|
|
40787
|
-
_calibrationNote: "
|
|
40788
|
-
aiSpecific: true
|
|
41681
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=59390, FP=19849, P=75.0%, FPR=7.87%, lift=9.52. v7 was USEFUL (TP=43498, FP=14983, lift=9.11). v8 was USEFUL (TP=15892, FP=4866).",
|
|
41682
|
+
aiSpecific: true,
|
|
41683
|
+
_v7Verdict: "USEFUL",
|
|
41684
|
+
_v7Lift: 9.11,
|
|
41685
|
+
_v7Recall: 0.1836,
|
|
41686
|
+
_v7FpRate: 0.0817,
|
|
41687
|
+
_v7Precision: 0.7438,
|
|
41688
|
+
_v8Verdict: "USEFUL",
|
|
41689
|
+
_v8Lift: 10.8
|
|
40789
41690
|
},
|
|
40790
|
-
"
|
|
40791
|
-
recall:
|
|
40792
|
-
fpRate:
|
|
40793
|
-
ratio:
|
|
40794
|
-
precision: 0.
|
|
40795
|
-
lastCalibratedAt: "2026-
|
|
41691
|
+
"ai/state-default-overuse": {
|
|
41692
|
+
recall: 3e-3,
|
|
41693
|
+
fpRate: 6e-4,
|
|
41694
|
+
ratio: 1315.06,
|
|
41695
|
+
precision: 0.8451,
|
|
41696
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40796
41697
|
verdict: "USEFUL",
|
|
40797
|
-
_calibrationNote: "
|
|
40798
|
-
aiSpecific: true
|
|
40799
|
-
|
|
40800
|
-
|
|
40801
|
-
|
|
40802
|
-
|
|
40803
|
-
|
|
40804
|
-
|
|
40805
|
-
|
|
40806
|
-
verdict: "OK",
|
|
40807
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. OK \u2014 TP=67, FP=30, P=69.1%, FPR=0.02%, lift=1.7. aiSpecific=True.",
|
|
40808
|
-
aiSpecific: true
|
|
41698
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=884, FP=162, P=84.5%, FPR=0.06%, lift=1315.06. v7 was USEFUL (TP=701, FP=158, lift=947.32). v8 was USEFUL (TP=183, FP=4).",
|
|
41699
|
+
aiSpecific: true,
|
|
41700
|
+
_v7Verdict: "USEFUL",
|
|
41701
|
+
_v7Lift: 947.32,
|
|
41702
|
+
_v7Recall: 3e-3,
|
|
41703
|
+
_v7FpRate: 9e-4,
|
|
41704
|
+
_v7Precision: 0.8161,
|
|
41705
|
+
_v8Verdict: "USEFUL",
|
|
41706
|
+
_v8Lift: 16799.55
|
|
40809
41707
|
},
|
|
40810
|
-
"
|
|
40811
|
-
recall:
|
|
40812
|
-
fpRate:
|
|
40813
|
-
ratio:
|
|
40814
|
-
precision: 0.
|
|
40815
|
-
lastCalibratedAt: "2026-
|
|
41708
|
+
"ai/tailwind-color-overuse": {
|
|
41709
|
+
recall: 0.0264,
|
|
41710
|
+
fpRate: 38e-4,
|
|
41711
|
+
ratio: 230.97,
|
|
41712
|
+
precision: 0.8888,
|
|
41713
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40816
41714
|
verdict: "USEFUL",
|
|
40817
|
-
_calibrationNote: "
|
|
40818
|
-
aiSpecific: true
|
|
41715
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=7752, FP=970, P=88.9%, FPR=0.38%, lift=230.97. v7 was USEFUL (TP=5169, FP=958, lift=161.52). v8 was USEFUL (TP=2583, FP=12).",
|
|
41716
|
+
aiSpecific: true,
|
|
41717
|
+
_v7Verdict: "USEFUL",
|
|
41718
|
+
_v7Lift: 161.52,
|
|
41719
|
+
_v7Recall: 0.0218,
|
|
41720
|
+
_v7FpRate: 52e-4,
|
|
41721
|
+
_v7Precision: 0.8436,
|
|
41722
|
+
_v8Verdict: "USEFUL",
|
|
41723
|
+
_v8Lift: 5695.79
|
|
40819
41724
|
},
|
|
40820
|
-
"
|
|
40821
|
-
recall:
|
|
40822
|
-
fpRate:
|
|
40823
|
-
ratio:
|
|
40824
|
-
precision: 0.
|
|
40825
|
-
lastCalibratedAt: "2026-
|
|
40826
|
-
verdict: "
|
|
40827
|
-
_calibrationNote: "
|
|
40828
|
-
aiSpecific:
|
|
40829
|
-
|
|
40830
|
-
|
|
40831
|
-
|
|
40832
|
-
|
|
40833
|
-
|
|
40834
|
-
|
|
40835
|
-
|
|
40836
|
-
verdict: "HYGIENE",
|
|
40837
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=2790, FP=591, P=82.5%, FPR=0.32%, lift=3.6. aiSpecific=False.",
|
|
40838
|
-
aiSpecific: false
|
|
41725
|
+
"ai/text-like-ratio": {
|
|
41726
|
+
recall: 0,
|
|
41727
|
+
fpRate: 0,
|
|
41728
|
+
ratio: 201664,
|
|
41729
|
+
precision: 0.8,
|
|
41730
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41731
|
+
verdict: "USEFUL",
|
|
41732
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=4, FP=1, P=80.0%, FPR=0.00%, lift=201664.00. v7 was USEFUL (TP=3, FP=1, lift=137559.75). v8 was USEFUL (TP=1, FP=0).",
|
|
41733
|
+
aiSpecific: true,
|
|
41734
|
+
_v7Verdict: "USEFUL",
|
|
41735
|
+
_v7Lift: 137559.75,
|
|
41736
|
+
_v7Recall: 0,
|
|
41737
|
+
_v7FpRate: 0,
|
|
41738
|
+
_v7Precision: 0.75,
|
|
41739
|
+
_v8Verdict: "USEFUL",
|
|
41740
|
+
_v8Lift: 99999
|
|
40839
41741
|
},
|
|
40840
|
-
"
|
|
40841
|
-
recall:
|
|
40842
|
-
fpRate:
|
|
40843
|
-
ratio:
|
|
40844
|
-
precision: 0.
|
|
40845
|
-
lastCalibratedAt: "2026-
|
|
40846
|
-
verdict: "
|
|
40847
|
-
_calibrationNote: "
|
|
40848
|
-
aiSpecific:
|
|
41742
|
+
"ai/whitespace-regularity": {
|
|
41743
|
+
recall: 0.0733,
|
|
41744
|
+
fpRate: 0.0677,
|
|
41745
|
+
ratio: 8.25,
|
|
41746
|
+
precision: 0.5583,
|
|
41747
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41748
|
+
verdict: "USEFUL",
|
|
41749
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=21567, FP=17061, P=55.8%, FPR=6.77%, lift=8.25. v7 was USEFUL (TP=17466, FP=13438, lift=7.71). v8 was USEFUL (TP=4101, FP=3623).",
|
|
41750
|
+
aiSpecific: true,
|
|
41751
|
+
_v7Verdict: "USEFUL",
|
|
41752
|
+
_v7Lift: 7.71,
|
|
41753
|
+
_v7Recall: 0.0737,
|
|
41754
|
+
_v7FpRate: 0.0733,
|
|
41755
|
+
_v7Precision: 0.5652,
|
|
41756
|
+
_v8Verdict: "USEFUL",
|
|
41757
|
+
_v8Lift: 10.06
|
|
40849
41758
|
},
|
|
40850
|
-
"
|
|
41759
|
+
"arch/astro-island-leak": {
|
|
40851
41760
|
recall: 0,
|
|
40852
41761
|
fpRate: 0,
|
|
40853
41762
|
ratio: 0,
|
|
40854
41763
|
precision: 0,
|
|
40855
|
-
lastCalibratedAt: "2026-
|
|
41764
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40856
41765
|
verdict: "DORMANT",
|
|
40857
|
-
|
|
40858
|
-
|
|
40859
|
-
|
|
40860
|
-
|
|
40861
|
-
|
|
40862
|
-
|
|
40863
|
-
|
|
40864
|
-
|
|
40865
|
-
|
|
40866
|
-
|
|
40867
|
-
verdict: "HYGIENE",
|
|
40868
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=16288, FP=9589, P=62.9%, FPR=5.20%, lift=1.3. aiSpecific=False.",
|
|
40869
|
-
aiSpecific: false
|
|
41766
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
41767
|
+
aiSpecific: true,
|
|
41768
|
+
_v7Verdict: "DORMANT",
|
|
41769
|
+
_v7Lift: 0,
|
|
41770
|
+
_v7Recall: 0,
|
|
41771
|
+
_v7FpRate: 0,
|
|
41772
|
+
_v7Precision: 0,
|
|
41773
|
+
_v8Verdict: "DORMANT",
|
|
41774
|
+
_v8Lift: 1,
|
|
41775
|
+
defaultOff: true
|
|
40870
41776
|
},
|
|
40871
|
-
"
|
|
40872
|
-
recall: 0.
|
|
40873
|
-
fpRate:
|
|
40874
|
-
ratio:
|
|
40875
|
-
precision: 0.
|
|
40876
|
-
lastCalibratedAt: "2026-
|
|
40877
|
-
verdict: "
|
|
40878
|
-
_calibrationNote: "
|
|
40879
|
-
aiSpecific:
|
|
41777
|
+
"component/giant-component": {
|
|
41778
|
+
recall: 0.0181,
|
|
41779
|
+
fpRate: 59e-4,
|
|
41780
|
+
ratio: 132.31,
|
|
41781
|
+
precision: 0.7815,
|
|
41782
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41783
|
+
verdict: "USEFUL",
|
|
41784
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=5326, FP=1489, P=78.2%, FPR=0.59%, lift=132.31. v7 was USEFUL (TP=4205, FP=1413, lift=97.16). v8 was USEFUL (TP=1121, FP=76).",
|
|
41785
|
+
aiSpecific: true,
|
|
41786
|
+
_v7Verdict: "USEFUL",
|
|
41787
|
+
_v7Lift: 97.16,
|
|
41788
|
+
_v7Recall: 0.0177,
|
|
41789
|
+
_v7FpRate: 77e-4,
|
|
41790
|
+
_v7Precision: 0.7485,
|
|
41791
|
+
_v8Verdict: "USEFUL",
|
|
41792
|
+
_v8Lift: 846.15
|
|
40880
41793
|
},
|
|
40881
|
-
"
|
|
40882
|
-
recall:
|
|
40883
|
-
fpRate:
|
|
40884
|
-
ratio:
|
|
40885
|
-
precision: 0.
|
|
40886
|
-
lastCalibratedAt: "2026-
|
|
40887
|
-
verdict: "
|
|
40888
|
-
_calibrationNote: "
|
|
40889
|
-
aiSpecific: false
|
|
41794
|
+
"component/multiple-components-per-file": {
|
|
41795
|
+
recall: 0.0751,
|
|
41796
|
+
fpRate: 0.0423,
|
|
41797
|
+
ratio: 15.96,
|
|
41798
|
+
precision: 0.6747,
|
|
41799
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41800
|
+
verdict: "USEFUL",
|
|
41801
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=22103, FP=10655, P=67.5%, FPR=4.23%, lift=15.96. v7 was USEFUL (TP=16288, FP=9589, lift=12.04). v8 was USEFUL (TP=5815, FP=1066).",
|
|
41802
|
+
aiSpecific: false,
|
|
41803
|
+
_v7Verdict: "USEFUL",
|
|
41804
|
+
_v7Lift: 12.04,
|
|
41805
|
+
_v7Recall: 0.0687,
|
|
41806
|
+
_v7FpRate: 0.0523,
|
|
41807
|
+
_v7Precision: 0.6294,
|
|
41808
|
+
_v8Verdict: "USEFUL",
|
|
41809
|
+
_v8Lift: 54.44
|
|
40890
41810
|
},
|
|
40891
|
-
"
|
|
40892
|
-
recall:
|
|
41811
|
+
"component/shadcn-prop-mismatch": {
|
|
41812
|
+
recall: 16e-4,
|
|
40893
41813
|
fpRate: 1e-4,
|
|
40894
|
-
ratio:
|
|
40895
|
-
precision: 0.
|
|
40896
|
-
lastCalibratedAt: "2026-
|
|
40897
|
-
verdict: "HYGIENE",
|
|
40898
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=36, FP=26, P=58.1%, FPR=0.01%, lift=1.1. aiSpecific=False.",
|
|
40899
|
-
aiSpecific: false
|
|
40900
|
-
},
|
|
40901
|
-
"security/public-admin-route": {
|
|
40902
|
-
recall: 28e-4,
|
|
40903
|
-
fpRate: 78e-4,
|
|
40904
|
-
ratio: 0.4,
|
|
40905
|
-
precision: 0.2251,
|
|
40906
|
-
lastCalibratedAt: "2026-06-26T22:30:00Z",
|
|
40907
|
-
verdict: "HYGIENE",
|
|
40908
|
-
_calibrationNote: "v4 corpus (2026-06-25): 95,599 neg + 76,550 pos (frontend, TS/TSX/JS/JSX). INVERTED \u2014 TP=217, FP=747, P=22.5%, FPR=0.78%, lift=0.4. [v0.12.2: reclassified to HYGIENE because rule is aiSpecific: false]",
|
|
40909
|
-
defaultOff: true,
|
|
40910
|
-
aiSpecific: false
|
|
40911
|
-
},
|
|
40912
|
-
"security/unsafe-html-render": {
|
|
40913
|
-
recall: 13e-4,
|
|
40914
|
-
fpRate: 9e-4,
|
|
40915
|
-
ratio: 1.5,
|
|
40916
|
-
precision: 0.661,
|
|
40917
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
40918
|
-
verdict: "HYGIENE",
|
|
40919
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=312, FP=160, P=66.1%, FPR=0.09%, lift=1.5. aiSpecific=False.",
|
|
40920
|
-
aiSpecific: false
|
|
40921
|
-
},
|
|
40922
|
-
"visual/naturalness-anomaly": {
|
|
40923
|
-
recall: 0.1645,
|
|
40924
|
-
fpRate: 0.0617,
|
|
40925
|
-
ratio: 2.67,
|
|
40926
|
-
precision: 0.7755,
|
|
40927
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
41814
|
+
ratio: 9990.98,
|
|
41815
|
+
precision: 0.9512,
|
|
41816
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40928
41817
|
verdict: "USEFUL",
|
|
40929
|
-
_calibrationNote: "
|
|
40930
|
-
aiSpecific: true
|
|
41818
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=468, FP=24, P=95.1%, FPR=0.01%, lift=9990.98. v7 was USEFUL (TP=314, FP=24, lift=7099.57). v8 was USEFUL (TP=154, FP=0).",
|
|
41819
|
+
aiSpecific: true,
|
|
41820
|
+
_v7Verdict: "USEFUL",
|
|
41821
|
+
_v7Lift: 7099.57,
|
|
41822
|
+
_v7Recall: 13e-4,
|
|
41823
|
+
_v7FpRate: 1e-4,
|
|
41824
|
+
_v7Precision: 0.929,
|
|
41825
|
+
_v8Verdict: "USEFUL",
|
|
41826
|
+
_v8Lift: 99999
|
|
40931
41827
|
},
|
|
40932
|
-
"
|
|
40933
|
-
recall: 0,
|
|
40934
|
-
fpRate: 0,
|
|
40935
|
-
ratio:
|
|
40936
|
-
precision: 0.
|
|
40937
|
-
lastCalibratedAt: "2026-
|
|
41828
|
+
"context/import-path-mismatch": {
|
|
41829
|
+
recall: 0.0681,
|
|
41830
|
+
fpRate: 0.0167,
|
|
41831
|
+
ratio: 49.48,
|
|
41832
|
+
precision: 0.8263,
|
|
41833
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40938
41834
|
verdict: "USEFUL",
|
|
40939
|
-
_calibrationNote: "
|
|
40940
|
-
aiSpecific:
|
|
41835
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=20032, FP=4210, P=82.6%, FPR=1.67%, lift=49.48. v7 was USEFUL (TP=17672, FP=4202, lift=35.26). v8 was USEFUL (TP=2360, FP=8).",
|
|
41836
|
+
aiSpecific: false,
|
|
41837
|
+
_v7Verdict: "USEFUL",
|
|
41838
|
+
_v7Lift: 35.26,
|
|
41839
|
+
_v7Recall: 0.0746,
|
|
41840
|
+
_v7FpRate: 0.0229,
|
|
41841
|
+
_v7Precision: 0.8079,
|
|
41842
|
+
_v8Verdict: "USEFUL",
|
|
41843
|
+
_v8Lift: 8554.38
|
|
40941
41844
|
},
|
|
40942
|
-
"
|
|
41845
|
+
"db/duplicate-index": {
|
|
40943
41846
|
recall: 0,
|
|
40944
41847
|
fpRate: 0,
|
|
40945
41848
|
ratio: 0,
|
|
40946
41849
|
precision: 0,
|
|
40947
|
-
lastCalibratedAt: "2026-
|
|
41850
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40948
41851
|
verdict: "DORMANT",
|
|
40949
|
-
|
|
40950
|
-
|
|
40951
|
-
|
|
41852
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
41853
|
+
aiSpecific: false,
|
|
41854
|
+
_v7Verdict: "DORMANT",
|
|
41855
|
+
_v7Lift: 0,
|
|
41856
|
+
_v7Recall: 0,
|
|
41857
|
+
_v7FpRate: 0,
|
|
41858
|
+
_v7Precision: 0,
|
|
41859
|
+
_v8Verdict: "DORMANT",
|
|
41860
|
+
_v8Lift: 1,
|
|
41861
|
+
defaultOff: true
|
|
40952
41862
|
},
|
|
40953
|
-
"
|
|
41863
|
+
"db/enum-sprawl": {
|
|
40954
41864
|
recall: 0,
|
|
40955
41865
|
fpRate: 0,
|
|
40956
41866
|
ratio: 0,
|
|
40957
41867
|
precision: 0,
|
|
40958
|
-
lastCalibratedAt: "2026-
|
|
41868
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40959
41869
|
verdict: "DORMANT",
|
|
40960
|
-
|
|
40961
|
-
|
|
40962
|
-
|
|
41870
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
41871
|
+
aiSpecific: false,
|
|
41872
|
+
_v7Verdict: "DORMANT",
|
|
41873
|
+
_v7Lift: 0,
|
|
41874
|
+
_v7Recall: 0,
|
|
41875
|
+
_v7FpRate: 0,
|
|
41876
|
+
_v7Precision: 0,
|
|
41877
|
+
_v8Verdict: "DORMANT",
|
|
41878
|
+
_v8Lift: 1,
|
|
41879
|
+
defaultOff: true
|
|
40963
41880
|
},
|
|
40964
|
-
"
|
|
41881
|
+
"db/missing-fk-index": {
|
|
40965
41882
|
recall: 0,
|
|
40966
41883
|
fpRate: 0,
|
|
40967
41884
|
ratio: 0,
|
|
40968
41885
|
precision: 0,
|
|
40969
|
-
lastCalibratedAt: "2026-
|
|
41886
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40970
41887
|
verdict: "DORMANT",
|
|
40971
|
-
|
|
40972
|
-
|
|
40973
|
-
|
|
41888
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
41889
|
+
aiSpecific: false,
|
|
41890
|
+
_v7Verdict: "DORMANT",
|
|
41891
|
+
_v7Lift: 0,
|
|
41892
|
+
_v7Recall: 0,
|
|
41893
|
+
_v7FpRate: 0,
|
|
41894
|
+
_v7Precision: 0,
|
|
41895
|
+
_v8Verdict: "DORMANT",
|
|
41896
|
+
_v8Lift: 1,
|
|
41897
|
+
defaultOff: true
|
|
40974
41898
|
},
|
|
40975
|
-
"
|
|
41899
|
+
"db/missing-not-null": {
|
|
40976
41900
|
recall: 0,
|
|
40977
41901
|
fpRate: 0,
|
|
40978
41902
|
ratio: 0,
|
|
40979
41903
|
precision: 0,
|
|
40980
|
-
lastCalibratedAt: "2026-
|
|
41904
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40981
41905
|
verdict: "DORMANT",
|
|
40982
|
-
|
|
40983
|
-
|
|
40984
|
-
|
|
41906
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
41907
|
+
aiSpecific: false,
|
|
41908
|
+
_v7Verdict: "DORMANT",
|
|
41909
|
+
_v7Lift: 0,
|
|
41910
|
+
_v7Recall: 0,
|
|
41911
|
+
_v7FpRate: 0,
|
|
41912
|
+
_v7Precision: 0,
|
|
41913
|
+
_v8Verdict: "DORMANT",
|
|
41914
|
+
_v8Lift: 1,
|
|
41915
|
+
defaultOff: true
|
|
40985
41916
|
},
|
|
40986
|
-
"
|
|
41917
|
+
"db/naming-inconsistency": {
|
|
40987
41918
|
recall: 0,
|
|
40988
41919
|
fpRate: 0,
|
|
40989
41920
|
ratio: 0,
|
|
40990
41921
|
precision: 0,
|
|
40991
|
-
lastCalibratedAt: "2026-
|
|
41922
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
40992
41923
|
verdict: "DORMANT",
|
|
40993
|
-
|
|
40994
|
-
|
|
40995
|
-
|
|
41924
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
41925
|
+
aiSpecific: false,
|
|
41926
|
+
_v7Verdict: "DORMANT",
|
|
41927
|
+
_v7Lift: 0,
|
|
41928
|
+
_v7Recall: 0,
|
|
41929
|
+
_v7FpRate: 0,
|
|
41930
|
+
_v7Precision: 0,
|
|
41931
|
+
_v8Verdict: "DORMANT",
|
|
41932
|
+
_v8Lift: 1,
|
|
41933
|
+
defaultOff: true
|
|
40996
41934
|
},
|
|
40997
|
-
"
|
|
41935
|
+
"db/sql-concat": {
|
|
41936
|
+
recall: 5e-4,
|
|
41937
|
+
fpRate: 1e-4,
|
|
41938
|
+
ratio: 7511.26,
|
|
41939
|
+
precision: 0.8343,
|
|
41940
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41941
|
+
verdict: "USEFUL",
|
|
41942
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=141, FP=28, P=83.4%, FPR=0.01%, lift=7511.26. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was USEFUL (TP=141, FP=28).",
|
|
41943
|
+
aiSpecific: true,
|
|
41944
|
+
_v7Verdict: "DORMANT",
|
|
41945
|
+
_v7Lift: 1,
|
|
41946
|
+
_v7Recall: 0,
|
|
41947
|
+
_v7FpRate: 0,
|
|
41948
|
+
_v7Precision: 0,
|
|
41949
|
+
_v8Verdict: "USEFUL",
|
|
41950
|
+
_v8Lift: 2046.08
|
|
41951
|
+
},
|
|
41952
|
+
"dead/dead-branch": {
|
|
41953
|
+
recall: 2e-4,
|
|
41954
|
+
fpRate: 4e-4,
|
|
41955
|
+
ratio: 1080.68,
|
|
41956
|
+
precision: 0.4244,
|
|
41957
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41958
|
+
verdict: "OK",
|
|
41959
|
+
_calibrationNote: "v8.5 (v0.18.9): v85 verdict=OK, v7 was DORMANT, v8 was OK. v0.18.8 v8a first measurement (1000 files): see docs/research/v0.18.8-dead-rules-measurement.md.",
|
|
41960
|
+
aiSpecific: true,
|
|
41961
|
+
_v7Verdict: "DORMANT",
|
|
41962
|
+
_v7Lift: 1,
|
|
41963
|
+
_v7Recall: 0,
|
|
41964
|
+
_v7FpRate: 0,
|
|
41965
|
+
_v7Precision: 0,
|
|
41966
|
+
_v8Verdict: "OK",
|
|
41967
|
+
_v8Lift: 294.38
|
|
41968
|
+
},
|
|
41969
|
+
"dead/unreachable": {
|
|
41970
|
+
recall: 1e-4,
|
|
41971
|
+
fpRate: 6e-4,
|
|
41972
|
+
ratio: 153.14,
|
|
41973
|
+
precision: 0.0966,
|
|
41974
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41975
|
+
verdict: "OK",
|
|
41976
|
+
_calibrationNote: "v8.5 (v0.18.9): v85 verdict=OK, v7 was DORMANT, v8 was OK. v0.18.8 v8a first measurement (1000 files): see docs/research/v0.18.8-dead-rules-measurement.md.",
|
|
41977
|
+
aiSpecific: true,
|
|
41978
|
+
_v7Verdict: "DORMANT",
|
|
41979
|
+
_v7Lift: 1,
|
|
41980
|
+
_v7Recall: 0,
|
|
41981
|
+
_v7FpRate: 0,
|
|
41982
|
+
_v7Precision: 0,
|
|
41983
|
+
_v8Verdict: "OK",
|
|
41984
|
+
_v8Lift: 41.71
|
|
41985
|
+
},
|
|
41986
|
+
"dead/unused-import": {
|
|
41987
|
+
recall: 0.0379,
|
|
41988
|
+
fpRate: 0.0222,
|
|
41989
|
+
ratio: 30.06,
|
|
41990
|
+
precision: 0.6662,
|
|
41991
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41992
|
+
verdict: "USEFUL",
|
|
41993
|
+
_calibrationNote: "v8.5 (v0.18.9): v85 verdict=USEFUL, v7 was DORMANT, v8 was USEFUL. v0.18.8 v8a first measurement (1000 files): see docs/research/v0.18.8-dead-rules-measurement.md.",
|
|
41994
|
+
aiSpecific: true,
|
|
41995
|
+
_v7Verdict: "DORMANT",
|
|
41996
|
+
_v7Lift: 1,
|
|
41997
|
+
_v7Recall: 0,
|
|
41998
|
+
_v7FpRate: 0,
|
|
41999
|
+
_v7Precision: 0,
|
|
42000
|
+
_v8Verdict: "USEFUL",
|
|
42001
|
+
_v8Lift: 8.19
|
|
42002
|
+
},
|
|
42003
|
+
"dead/unused-local": {
|
|
42004
|
+
recall: 0.0477,
|
|
42005
|
+
fpRate: 74e-4,
|
|
42006
|
+
ratio: 120.18,
|
|
42007
|
+
precision: 0.8834,
|
|
42008
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42009
|
+
verdict: "USEFUL",
|
|
42010
|
+
_calibrationNote: "v8.5 (v0.18.9): v85 verdict=USEFUL, v7 was DORMANT, v8 was USEFUL. v0.18.8 v8a first measurement (1000 files): see docs/research/v0.18.8-dead-rules-measurement.md.",
|
|
42011
|
+
aiSpecific: true,
|
|
42012
|
+
_v7Verdict: "DORMANT",
|
|
42013
|
+
_v7Lift: 1,
|
|
42014
|
+
_v7Recall: 0,
|
|
42015
|
+
_v7FpRate: 0,
|
|
42016
|
+
_v7Precision: 0,
|
|
42017
|
+
_v8Verdict: "USEFUL",
|
|
42018
|
+
_v8Lift: 32.74
|
|
42019
|
+
},
|
|
42020
|
+
"dead/unused-parameter": {
|
|
42021
|
+
recall: 8e-4,
|
|
42022
|
+
fpRate: 27e-4,
|
|
42023
|
+
ratio: 98,
|
|
42024
|
+
precision: 0.2628,
|
|
42025
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42026
|
+
verdict: "OK",
|
|
42027
|
+
_calibrationNote: "v8.5 (v0.18.9): v85 verdict=OK, v7 was DORMANT, v8 was OK. v0.18.8 v8a first measurement (1000 files): see docs/research/v0.18.8-dead-rules-measurement.md.",
|
|
42028
|
+
aiSpecific: true,
|
|
42029
|
+
_v7Verdict: "DORMANT",
|
|
42030
|
+
_v7Lift: 1,
|
|
42031
|
+
_v7Recall: 0,
|
|
42032
|
+
_v7FpRate: 0,
|
|
42033
|
+
_v7Precision: 0,
|
|
42034
|
+
_v8Verdict: "OK",
|
|
42035
|
+
_v8Lift: 26.7
|
|
42036
|
+
},
|
|
42037
|
+
"docs/broken-link": {
|
|
42038
|
+
recall: 14e-4,
|
|
42039
|
+
fpRate: 23e-4,
|
|
42040
|
+
ratio: 178.13,
|
|
42041
|
+
precision: 0.4155,
|
|
42042
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42043
|
+
verdict: "OK",
|
|
42044
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=418, FP=588, P=41.6%, FPR=0.23%, lift=178.13. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was OK (TP=418, FP=588).",
|
|
42045
|
+
aiSpecific: false,
|
|
42046
|
+
_v7Verdict: "DORMANT",
|
|
42047
|
+
_v7Lift: 1,
|
|
42048
|
+
_v7Recall: 0,
|
|
42049
|
+
_v7FpRate: 0,
|
|
42050
|
+
_v7Precision: 0,
|
|
42051
|
+
_v8Verdict: "OK",
|
|
42052
|
+
_v8Lift: 48.52
|
|
42053
|
+
},
|
|
42054
|
+
"docs/expired-code-example": {
|
|
40998
42055
|
recall: 0,
|
|
40999
42056
|
fpRate: 0,
|
|
41000
42057
|
ratio: 0,
|
|
41001
42058
|
precision: 0,
|
|
41002
|
-
lastCalibratedAt: "2026-
|
|
41003
|
-
verdict: "
|
|
41004
|
-
|
|
41005
|
-
|
|
41006
|
-
|
|
42059
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42060
|
+
verdict: "INVERTED",
|
|
42061
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=0, FP=3, P=0.0%, FPR=0.00%, lift=0.00. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was INVERTED (TP=0, FP=3).",
|
|
42062
|
+
aiSpecific: false,
|
|
42063
|
+
_v7Verdict: "DORMANT",
|
|
42064
|
+
_v7Lift: 1,
|
|
42065
|
+
_v7Recall: 0,
|
|
42066
|
+
_v7FpRate: 0,
|
|
42067
|
+
_v7Precision: 0,
|
|
42068
|
+
_v8Verdict: "INVERTED",
|
|
42069
|
+
_v8Lift: 0,
|
|
42070
|
+
defaultOff: true
|
|
42071
|
+
},
|
|
42072
|
+
"docs/stale-function-reference": {
|
|
42073
|
+
recall: 26e-4,
|
|
42074
|
+
fpRate: 5e-4,
|
|
42075
|
+
ratio: 1638.47,
|
|
42076
|
+
precision: 0.8515,
|
|
42077
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42078
|
+
verdict: "USEFUL",
|
|
42079
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=751, FP=131, P=85.1%, FPR=0.05%, lift=1638.47. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was USEFUL (TP=751, FP=131).",
|
|
42080
|
+
aiSpecific: false,
|
|
42081
|
+
_v7Verdict: "DORMANT",
|
|
42082
|
+
_v7Lift: 1,
|
|
42083
|
+
_v7Recall: 0,
|
|
42084
|
+
_v7FpRate: 0,
|
|
42085
|
+
_v7Precision: 0,
|
|
42086
|
+
_v8Verdict: "USEFUL",
|
|
42087
|
+
_v8Lift: 446.32
|
|
42088
|
+
},
|
|
42089
|
+
"docs/stale-package-reference": {
|
|
42090
|
+
recall: 2e-4,
|
|
42091
|
+
fpRate: 4e-4,
|
|
42092
|
+
ratio: 939.43,
|
|
42093
|
+
precision: 0.3429,
|
|
42094
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42095
|
+
verdict: "OK",
|
|
42096
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=48, FP=92, P=34.3%, FPR=0.04%, lift=939.43. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was OK (TP=48, FP=92).",
|
|
42097
|
+
aiSpecific: false,
|
|
42098
|
+
_v7Verdict: "DORMANT",
|
|
42099
|
+
_v7Lift: 1,
|
|
42100
|
+
_v7Recall: 0,
|
|
42101
|
+
_v7FpRate: 0,
|
|
42102
|
+
_v7Precision: 0,
|
|
42103
|
+
_v8Verdict: "OK",
|
|
42104
|
+
_v8Lift: 255.9
|
|
41007
42105
|
},
|
|
41008
42106
|
"layout/forced-layout": {
|
|
41009
42107
|
recall: 0,
|
|
41010
42108
|
fpRate: 0,
|
|
41011
42109
|
ratio: 0,
|
|
41012
42110
|
precision: 0,
|
|
41013
|
-
lastCalibratedAt: "2026-
|
|
42111
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41014
42112
|
verdict: "DORMANT",
|
|
41015
|
-
|
|
41016
|
-
|
|
41017
|
-
|
|
42113
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
42114
|
+
aiSpecific: true,
|
|
42115
|
+
_v7Verdict: "DORMANT",
|
|
42116
|
+
_v7Lift: 0,
|
|
42117
|
+
_v7Recall: 0,
|
|
42118
|
+
_v7FpRate: 0,
|
|
42119
|
+
_v7Precision: 0,
|
|
42120
|
+
_v8Verdict: "DORMANT",
|
|
42121
|
+
_v8Lift: 1,
|
|
42122
|
+
defaultOff: true
|
|
41018
42123
|
},
|
|
41019
|
-
"
|
|
42124
|
+
"layout/gap-monopoly": {
|
|
42125
|
+
recall: 3e-4,
|
|
42126
|
+
fpRate: 1e-4,
|
|
42127
|
+
ratio: 8859.33,
|
|
42128
|
+
precision: 0.8083,
|
|
42129
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42130
|
+
verdict: "USEFUL",
|
|
42131
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=97, FP=23, P=80.8%, FPR=0.01%, lift=8859.33. v7 was USEFUL (TP=88, FP=23, lift=6322.11). v8 was USEFUL (TP=9, FP=0).",
|
|
42132
|
+
aiSpecific: false,
|
|
42133
|
+
_v7Verdict: "USEFUL",
|
|
42134
|
+
_v7Lift: 6322.11,
|
|
42135
|
+
_v7Recall: 4e-4,
|
|
42136
|
+
_v7FpRate: 1e-4,
|
|
42137
|
+
_v7Precision: 0.7928,
|
|
42138
|
+
_v8Verdict: "USEFUL",
|
|
42139
|
+
_v8Lift: 99999
|
|
42140
|
+
},
|
|
42141
|
+
"layout/math-element-uniformity": {
|
|
42142
|
+
recall: 29e-4,
|
|
42143
|
+
fpRate: 1e-3,
|
|
42144
|
+
ratio: 770.74,
|
|
42145
|
+
precision: 0.7705,
|
|
42146
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42147
|
+
verdict: "USEFUL",
|
|
42148
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=846, FP=252, P=77.0%, FPR=0.10%, lift=770.74. v7 was USEFUL (TP=666, FP=225, lift=609.32). v8 was USEFUL (TP=180, FP=27).",
|
|
42149
|
+
aiSpecific: true,
|
|
42150
|
+
_v7Verdict: "USEFUL",
|
|
42151
|
+
_v7Lift: 609.32,
|
|
42152
|
+
_v7Recall: 28e-4,
|
|
42153
|
+
_v7FpRate: 12e-4,
|
|
42154
|
+
_v7Precision: 0.7475,
|
|
42155
|
+
_v8Verdict: "USEFUL",
|
|
42156
|
+
_v8Lift: 2211.5
|
|
42157
|
+
},
|
|
42158
|
+
"layout/math-grid-uniformity": {
|
|
42159
|
+
recall: 3e-4,
|
|
42160
|
+
fpRate: 1e-4,
|
|
42161
|
+
ratio: 5839.98,
|
|
42162
|
+
precision: 0.7182,
|
|
42163
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42164
|
+
verdict: "USEFUL",
|
|
42165
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=79, FP=31, P=71.8%, FPR=0.01%, lift=5839.98. v7 was USEFUL (TP=67, FP=30, lift=4222.91). v8 was USEFUL (TP=12, FP=1).",
|
|
42166
|
+
aiSpecific: true,
|
|
42167
|
+
_v7Verdict: "USEFUL",
|
|
42168
|
+
_v7Lift: 4222.91,
|
|
42169
|
+
_v7Recall: 3e-4,
|
|
42170
|
+
_v7FpRate: 2e-4,
|
|
42171
|
+
_v7Precision: 0.6907,
|
|
42172
|
+
_v8Verdict: "USEFUL",
|
|
42173
|
+
_v8Lift: 63384.92
|
|
42174
|
+
},
|
|
42175
|
+
"layout/spacing-grid": {
|
|
42176
|
+
recall: 2e-4,
|
|
42177
|
+
fpRate: 2e-4,
|
|
42178
|
+
ratio: 4051.29,
|
|
42179
|
+
precision: 0.6429,
|
|
42180
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42181
|
+
verdict: "USEFUL",
|
|
42182
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=72, FP=40, P=64.3%, FPR=0.02%, lift=4051.29. v7 was USEFUL (TP=39, FP=15, lift=8831.00). v8 was USEFUL (TP=33, FP=25).",
|
|
42183
|
+
aiSpecific: false,
|
|
42184
|
+
_v7Verdict: "USEFUL",
|
|
42185
|
+
_v7Lift: 8831,
|
|
42186
|
+
_v7Recall: 2e-4,
|
|
42187
|
+
_v7FpRate: 1e-4,
|
|
42188
|
+
_v7Precision: 0.7222,
|
|
42189
|
+
_v8Verdict: "USEFUL",
|
|
42190
|
+
_v8Lift: 1562.77
|
|
42191
|
+
},
|
|
42192
|
+
"logic/bayesian-conditional": {
|
|
41020
42193
|
recall: 0,
|
|
41021
42194
|
fpRate: 0,
|
|
41022
42195
|
ratio: 0,
|
|
41023
42196
|
precision: 0,
|
|
41024
|
-
lastCalibratedAt: "2026-
|
|
42197
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41025
42198
|
verdict: "DORMANT",
|
|
41026
|
-
|
|
41027
|
-
|
|
41028
|
-
|
|
42199
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
42200
|
+
aiSpecific: true,
|
|
42201
|
+
_v7Verdict: "DORMANT",
|
|
42202
|
+
_v7Lift: 0,
|
|
42203
|
+
_v7Recall: 0,
|
|
42204
|
+
_v7FpRate: 0,
|
|
42205
|
+
_v7Precision: 0,
|
|
42206
|
+
_v8Verdict: "DORMANT",
|
|
42207
|
+
_v8Lift: 1,
|
|
42208
|
+
defaultOff: true
|
|
41029
42209
|
},
|
|
41030
|
-
"
|
|
41031
|
-
recall:
|
|
41032
|
-
fpRate:
|
|
41033
|
-
ratio:
|
|
41034
|
-
precision: 0.
|
|
41035
|
-
lastCalibratedAt: "2026-
|
|
41036
|
-
verdict: "
|
|
41037
|
-
_calibrationNote: "
|
|
41038
|
-
aiSpecific: false
|
|
42210
|
+
"logic/boundary-violation": {
|
|
42211
|
+
recall: 0.0274,
|
|
42212
|
+
fpRate: 0.0137,
|
|
42213
|
+
ratio: 51.32,
|
|
42214
|
+
precision: 0.7006,
|
|
42215
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42216
|
+
verdict: "USEFUL",
|
|
42217
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=8051, FP=3441, P=70.1%, FPR=1.37%, lift=51.32. v7 was USEFUL (TP=6282, FP=3235, lift=37.42). v8 was USEFUL (TP=1769, FP=206).",
|
|
42218
|
+
aiSpecific: false,
|
|
42219
|
+
_v7Verdict: "USEFUL",
|
|
42220
|
+
_v7Lift: 37.42,
|
|
42221
|
+
_v7Recall: 0.0265,
|
|
42222
|
+
_v7FpRate: 0.0176,
|
|
42223
|
+
_v7Precision: 0.6601,
|
|
42224
|
+
_v8Verdict: "USEFUL",
|
|
42225
|
+
_v8Lift: 298.57
|
|
41039
42226
|
},
|
|
41040
|
-
"
|
|
42227
|
+
"logic/ghost-defensive": {
|
|
41041
42228
|
recall: 1e-4,
|
|
41042
42229
|
fpRate: 0,
|
|
41043
|
-
ratio:
|
|
41044
|
-
precision: 0.
|
|
41045
|
-
lastCalibratedAt: "2026-
|
|
42230
|
+
ratio: 112035.56,
|
|
42231
|
+
precision: 0.8889,
|
|
42232
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41046
42233
|
verdict: "USEFUL",
|
|
41047
|
-
_calibrationNote: "
|
|
41048
|
-
aiSpecific: true
|
|
42234
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=16, FP=2, P=88.9%, FPR=0.00%, lift=112035.56. v7 was USEFUL (TP=15, FP=2, lift=80917.50). v8 was USEFUL (TP=1, FP=0).",
|
|
42235
|
+
aiSpecific: true,
|
|
42236
|
+
_v7Verdict: "USEFUL",
|
|
42237
|
+
_v7Lift: 80917.5,
|
|
42238
|
+
_v7Recall: 1e-4,
|
|
42239
|
+
_v7FpRate: 0,
|
|
42240
|
+
_v7Precision: 0.8824,
|
|
42241
|
+
_v8Verdict: "USEFUL",
|
|
42242
|
+
_v8Lift: 99999
|
|
41049
42243
|
},
|
|
41050
|
-
"
|
|
41051
|
-
recall:
|
|
41052
|
-
fpRate:
|
|
41053
|
-
ratio:
|
|
41054
|
-
precision: 0.
|
|
41055
|
-
lastCalibratedAt: "2026-
|
|
42244
|
+
"logic/heaps-deviation": {
|
|
42245
|
+
recall: 0.0126,
|
|
42246
|
+
fpRate: 0.0178,
|
|
42247
|
+
ratio: 25.54,
|
|
42248
|
+
precision: 0.4536,
|
|
42249
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41056
42250
|
verdict: "OK",
|
|
41057
|
-
_calibrationNote: "
|
|
41058
|
-
aiSpecific:
|
|
42251
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=3716, FP=4477, P=45.4%, FPR=1.78%, lift=25.54. v7 was USEFUL (TP=2924, FP=2430, lift=41.22). v8 was OK (TP=792, FP=2047).",
|
|
42252
|
+
aiSpecific: false,
|
|
42253
|
+
_v7Verdict: "USEFUL",
|
|
42254
|
+
_v7Lift: 41.22,
|
|
42255
|
+
_v7Recall: 0.0123,
|
|
42256
|
+
_v7FpRate: 0.0132,
|
|
42257
|
+
_v7Precision: 0.5461,
|
|
42258
|
+
_v8Verdict: "OK",
|
|
42259
|
+
_v8Lift: 9.36
|
|
41059
42260
|
},
|
|
41060
|
-
"
|
|
41061
|
-
recall:
|
|
41062
|
-
fpRate:
|
|
41063
|
-
ratio:
|
|
41064
|
-
precision: 0.
|
|
41065
|
-
lastCalibratedAt: "2026-
|
|
42261
|
+
"logic/key-prop-missing": {
|
|
42262
|
+
recall: 16e-4,
|
|
42263
|
+
fpRate: 11e-4,
|
|
42264
|
+
ratio: 574.52,
|
|
42265
|
+
precision: 0.629,
|
|
42266
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41066
42267
|
verdict: "USEFUL",
|
|
41067
|
-
_calibrationNote: "
|
|
41068
|
-
aiSpecific: false
|
|
42268
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=468, FP=276, P=62.9%, FPR=0.11%, lift=574.52. v7 was USEFUL (TP=416, FP=250, lift=458.26). v8 was USEFUL (TP=52, FP=26).",
|
|
42269
|
+
aiSpecific: false,
|
|
42270
|
+
_v7Verdict: "USEFUL",
|
|
42271
|
+
_v7Lift: 458.26,
|
|
42272
|
+
_v7Recall: 18e-4,
|
|
42273
|
+
_v7FpRate: 14e-4,
|
|
42274
|
+
_v7Precision: 0.6246,
|
|
42275
|
+
_v8Verdict: "USEFUL",
|
|
42276
|
+
_v8Lift: 1760.69
|
|
41069
42277
|
},
|
|
41070
|
-
"
|
|
41071
|
-
recall:
|
|
41072
|
-
fpRate:
|
|
41073
|
-
ratio: 1.
|
|
41074
|
-
precision: 0.
|
|
41075
|
-
lastCalibratedAt: "2026-
|
|
42278
|
+
"logic/ks-distribution-shift": {
|
|
42279
|
+
recall: 0.6889,
|
|
42280
|
+
fpRate: 0.4411,
|
|
42281
|
+
ratio: 1.46,
|
|
42282
|
+
precision: 0.6457,
|
|
42283
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41076
42284
|
verdict: "NOISY",
|
|
41077
|
-
_calibrationNote: "
|
|
41078
|
-
|
|
41079
|
-
|
|
41080
|
-
|
|
41081
|
-
|
|
41082
|
-
|
|
41083
|
-
|
|
41084
|
-
|
|
41085
|
-
|
|
41086
|
-
|
|
41087
|
-
verdict: "USEFUL",
|
|
41088
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=14, FP=3, P=82.4%, FPR=0.00%, lift=3.6. aiSpecific=True.",
|
|
41089
|
-
aiSpecific: true
|
|
41090
|
-
},
|
|
41091
|
-
"logic/ghost-defensive": {
|
|
41092
|
-
recall: 1e-4,
|
|
41093
|
-
fpRate: 0,
|
|
41094
|
-
ratio: 5.79,
|
|
41095
|
-
precision: 0.8824,
|
|
41096
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
41097
|
-
verdict: "USEFUL",
|
|
41098
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=15, FP=2, P=88.2%, FPR=0.00%, lift=5.8. aiSpecific=True.",
|
|
41099
|
-
aiSpecific: true
|
|
41100
|
-
},
|
|
41101
|
-
"typo/calc-raw-px": {
|
|
41102
|
-
recall: 0,
|
|
41103
|
-
fpRate: 0,
|
|
41104
|
-
ratio: 2.32,
|
|
41105
|
-
precision: 0.75,
|
|
41106
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
41107
|
-
verdict: "HYGIENE",
|
|
41108
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=3, FP=1, P=75.0%, FPR=0.00%, lift=2.3. aiSpecific=False.",
|
|
41109
|
-
aiSpecific: false
|
|
42285
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=202658, FP=111193, P=64.6%, FPR=44.11%, lift=1.46. v7 was USEFUL (TP=152391, FP=62358, lift=2.09). v8 was INVERTED (TP=50267, FP=48835).",
|
|
42286
|
+
aiSpecific: false,
|
|
42287
|
+
_v7Verdict: "USEFUL",
|
|
42288
|
+
_v7Lift: 2.09,
|
|
42289
|
+
_v7Recall: 0.6431,
|
|
42290
|
+
_v7FpRate: 0.34,
|
|
42291
|
+
_v7Precision: 0.7096,
|
|
42292
|
+
_v8Verdict: "INVERTED",
|
|
42293
|
+
_v8Lift: 0.71,
|
|
42294
|
+
defaultOff: true
|
|
41110
42295
|
},
|
|
41111
|
-
"
|
|
41112
|
-
recall:
|
|
41113
|
-
fpRate:
|
|
41114
|
-
ratio:
|
|
41115
|
-
precision:
|
|
41116
|
-
lastCalibratedAt: "2026-
|
|
42296
|
+
"logic/math-any-density": {
|
|
42297
|
+
recall: 17e-4,
|
|
42298
|
+
fpRate: 13e-4,
|
|
42299
|
+
ratio: 464.59,
|
|
42300
|
+
precision: 0.6027,
|
|
42301
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41117
42302
|
verdict: "USEFUL",
|
|
41118
|
-
_calibrationNote: "
|
|
41119
|
-
aiSpecific: true
|
|
42303
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=496, FP=327, P=60.3%, FPR=0.13%, lift=464.59. v7 was USEFUL (TP=376, FP=247, lift=448.16). v8 was USEFUL (TP=120, FP=80).",
|
|
42304
|
+
aiSpecific: true,
|
|
42305
|
+
_v7Verdict: "USEFUL",
|
|
42306
|
+
_v7Lift: 448.16,
|
|
42307
|
+
_v7Recall: 16e-4,
|
|
42308
|
+
_v7FpRate: 13e-4,
|
|
42309
|
+
_v7Precision: 0.6035,
|
|
42310
|
+
_v8Verdict: "USEFUL",
|
|
42311
|
+
_v8Lift: 515
|
|
41120
42312
|
},
|
|
41121
|
-
"
|
|
41122
|
-
recall:
|
|
41123
|
-
fpRate:
|
|
41124
|
-
ratio:
|
|
41125
|
-
precision: 0.
|
|
41126
|
-
lastCalibratedAt: "2026-
|
|
41127
|
-
verdict: "HYGIENE",
|
|
41128
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=797, FP=175, P=82.0%, FPR=0.09%, lift=3.5. aiSpecific=False.",
|
|
41129
|
-
aiSpecific: false
|
|
41130
|
-
},
|
|
41131
|
-
"visual/arbitrary-escape": {
|
|
41132
|
-
recall: 25e-4,
|
|
41133
|
-
fpRate: 9e-4,
|
|
41134
|
-
ratio: 2.74,
|
|
41135
|
-
precision: 0.7802,
|
|
41136
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
42313
|
+
"logic/math-console-log-storm": {
|
|
42314
|
+
recall: 65e-4,
|
|
42315
|
+
fpRate: 11e-4,
|
|
42316
|
+
ratio: 794.4,
|
|
42317
|
+
precision: 0.8729,
|
|
42318
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41137
42319
|
verdict: "USEFUL",
|
|
41138
|
-
_calibrationNote: "
|
|
41139
|
-
aiSpecific: true
|
|
42320
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=1903, FP=277, P=87.3%, FPR=0.11%, lift=794.40. v7 was USEFUL (TP=1678, FP=193, lift=852.30). v8 was USEFUL (TP=225, FP=84).",
|
|
42321
|
+
aiSpecific: true,
|
|
42322
|
+
_v7Verdict: "USEFUL",
|
|
42323
|
+
_v7Lift: 852.3,
|
|
42324
|
+
_v7Recall: 71e-4,
|
|
42325
|
+
_v7FpRate: 11e-4,
|
|
42326
|
+
_v7Precision: 0.8968,
|
|
42327
|
+
_v8Verdict: "USEFUL",
|
|
42328
|
+
_v8Lift: 595.24
|
|
41140
42329
|
},
|
|
41141
|
-
"
|
|
42330
|
+
"logic/math-gini-class-usage": {
|
|
41142
42331
|
recall: 13e-4,
|
|
41143
|
-
fpRate:
|
|
41144
|
-
ratio:
|
|
41145
|
-
precision: 0.
|
|
41146
|
-
lastCalibratedAt: "2026-
|
|
41147
|
-
verdict: "OK",
|
|
41148
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. OK \u2014 TP=307, FP=138, P=69.0%, FPR=0.07%, lift=1.7. aiSpecific=True.",
|
|
41149
|
-
aiSpecific: true
|
|
41150
|
-
},
|
|
41151
|
-
"visual/radius-scale-violation": {
|
|
41152
|
-
recall: 4e-4,
|
|
41153
|
-
fpRate: 0,
|
|
41154
|
-
ratio: 24.7,
|
|
41155
|
-
precision: 0.9697,
|
|
41156
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
41157
|
-
verdict: "HYGIENE",
|
|
41158
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=96, FP=3, P=97.0%, FPR=0.00%, lift=24.7. aiSpecific=False.",
|
|
41159
|
-
aiSpecific: false
|
|
41160
|
-
},
|
|
41161
|
-
"test/fake-placeholder": {
|
|
41162
|
-
recall: 53e-4,
|
|
41163
|
-
fpRate: 19e-4,
|
|
41164
|
-
ratio: 2.82,
|
|
41165
|
-
precision: 0.7854,
|
|
41166
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
42332
|
+
fpRate: 2e-4,
|
|
42333
|
+
ratio: 4648.6,
|
|
42334
|
+
precision: 0.8852,
|
|
42335
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41167
42336
|
verdict: "USEFUL",
|
|
41168
|
-
_calibrationNote: "
|
|
41169
|
-
aiSpecific: true
|
|
41170
|
-
|
|
41171
|
-
|
|
41172
|
-
|
|
41173
|
-
|
|
41174
|
-
|
|
41175
|
-
|
|
41176
|
-
|
|
41177
|
-
verdict: "HYGIENE",
|
|
41178
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=146, FP=125, P=53.9%, FPR=0.07%, lift=0.9. aiSpecific=False.",
|
|
41179
|
-
aiSpecific: false
|
|
41180
|
-
},
|
|
41181
|
-
"perf/cls-image": {
|
|
41182
|
-
recall: 2e-4,
|
|
41183
|
-
fpRate: 3e-4,
|
|
41184
|
-
ratio: 0.8,
|
|
41185
|
-
precision: 0.5104,
|
|
41186
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
41187
|
-
verdict: "HYGIENE",
|
|
41188
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=49, FP=47, P=51.0%, FPR=0.03%, lift=0.8. aiSpecific=False.",
|
|
41189
|
-
aiSpecific: false
|
|
41190
|
-
},
|
|
41191
|
-
"layout/gap-monopoly": {
|
|
41192
|
-
recall: 4e-4,
|
|
41193
|
-
fpRate: 1e-4,
|
|
41194
|
-
ratio: 2.95,
|
|
41195
|
-
precision: 0.7928,
|
|
41196
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
41197
|
-
verdict: "HYGIENE",
|
|
41198
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=88, FP=23, P=79.3%, FPR=0.01%, lift=3.0. aiSpecific=False.",
|
|
41199
|
-
aiSpecific: false
|
|
42337
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=370, FP=48, P=88.5%, FPR=0.02%, lift=4648.60. v7 was USEFUL (TP=310, FP=47, lift=3388.64). v8 was USEFUL (TP=60, FP=1).",
|
|
42338
|
+
aiSpecific: true,
|
|
42339
|
+
_v7Verdict: "USEFUL",
|
|
42340
|
+
_v7Lift: 3388.64,
|
|
42341
|
+
_v7Recall: 13e-4,
|
|
42342
|
+
_v7FpRate: 3e-4,
|
|
42343
|
+
_v7Precision: 0.8683,
|
|
42344
|
+
_v8Verdict: "USEFUL",
|
|
42345
|
+
_v8Lift: 67541.31
|
|
41200
42346
|
},
|
|
41201
|
-
"
|
|
41202
|
-
recall: 83e-4,
|
|
41203
|
-
fpRate: 39e-4,
|
|
41204
|
-
ratio: 2.13,
|
|
41205
|
-
precision: 0.7342,
|
|
41206
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
41207
|
-
verdict: "HYGIENE",
|
|
41208
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=1981, FP=717, P=73.4%, FPR=0.39%, lift=2.1. aiSpecific=False.",
|
|
41209
|
-
aiSpecific: false
|
|
41210
|
-
},
|
|
41211
|
-
"visual/inline-style-dominance": {
|
|
41212
|
-
recall: 96e-4,
|
|
41213
|
-
fpRate: 66e-4,
|
|
41214
|
-
ratio: 1.46,
|
|
41215
|
-
precision: 0.6535,
|
|
41216
|
-
lastCalibratedAt: "2026-06-27T12:00:00Z",
|
|
41217
|
-
verdict: "HYGIENE",
|
|
41218
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=2303, FP=1221, P=65.4%, FPR=0.66%, lift=1.5. aiSpecific=False.",
|
|
41219
|
-
aiSpecific: false
|
|
41220
|
-
},
|
|
41221
|
-
"layout/spacing-grid": {
|
|
42347
|
+
"logic/math-variable-name-entropy": {
|
|
41222
42348
|
recall: 2e-4,
|
|
41223
42349
|
fpRate: 1e-4,
|
|
41224
|
-
ratio:
|
|
41225
|
-
precision: 0.
|
|
41226
|
-
lastCalibratedAt: "2026-
|
|
41227
|
-
verdict: "
|
|
41228
|
-
_calibrationNote: "
|
|
41229
|
-
aiSpecific: false
|
|
41230
|
-
|
|
41231
|
-
|
|
41232
|
-
|
|
41233
|
-
|
|
41234
|
-
|
|
41235
|
-
|
|
41236
|
-
|
|
41237
|
-
verdict: "HYGIENE",
|
|
41238
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=2, FP=3, P=40.0%, FPR=0.00%, lift=0.5. aiSpecific=False.",
|
|
41239
|
-
aiSpecific: false
|
|
42350
|
+
ratio: 4548.81,
|
|
42351
|
+
precision: 0.6316,
|
|
42352
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42353
|
+
verdict: "USEFUL",
|
|
42354
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=60, FP=35, P=63.2%, FPR=0.01%, lift=4548.81. v7 was USEFUL (TP=36, FP=26, lift=4096.07). v8 was USEFUL (TP=24, FP=9).",
|
|
42355
|
+
aiSpecific: false,
|
|
42356
|
+
_v7Verdict: "USEFUL",
|
|
42357
|
+
_v7Lift: 4096.07,
|
|
42358
|
+
_v7Recall: 2e-4,
|
|
42359
|
+
_v7FpRate: 1e-4,
|
|
42360
|
+
_v7Precision: 0.5806,
|
|
42361
|
+
_v8Verdict: "USEFUL",
|
|
42362
|
+
_v8Lift: 5548.85
|
|
41240
42363
|
},
|
|
41241
|
-
"
|
|
41242
|
-
recall:
|
|
41243
|
-
fpRate:
|
|
41244
|
-
ratio:
|
|
41245
|
-
precision: 0.
|
|
41246
|
-
lastCalibratedAt: "2026-
|
|
42364
|
+
"logic/optimistic-no-rollback": {
|
|
42365
|
+
recall: 12e-4,
|
|
42366
|
+
fpRate: 2e-4,
|
|
42367
|
+
ratio: 3523.57,
|
|
42368
|
+
precision: 0.8527,
|
|
42369
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41247
42370
|
verdict: "USEFUL",
|
|
41248
|
-
_calibrationNote: "
|
|
41249
|
-
aiSpecific: true
|
|
42371
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=353, FP=61, P=85.3%, FPR=0.02%, lift=3523.57. v7 was USEFUL (TP=281, FP=60, lift=2519.02). v8 was USEFUL (TP=72, FP=1).",
|
|
42372
|
+
aiSpecific: true,
|
|
42373
|
+
_v7Verdict: "USEFUL",
|
|
42374
|
+
_v7Lift: 2519.02,
|
|
42375
|
+
_v7Recall: 12e-4,
|
|
42376
|
+
_v7FpRate: 3e-4,
|
|
42377
|
+
_v7Precision: 0.824,
|
|
42378
|
+
_v8Verdict: "USEFUL",
|
|
42379
|
+
_v8Lift: 67726.36
|
|
41250
42380
|
},
|
|
41251
|
-
"logic/
|
|
42381
|
+
"logic/qwik-hook-leak": {
|
|
41252
42382
|
recall: 0,
|
|
41253
42383
|
fpRate: 0,
|
|
41254
42384
|
ratio: 0,
|
|
41255
42385
|
precision: 0,
|
|
41256
|
-
lastCalibratedAt: "2026-
|
|
42386
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41257
42387
|
verdict: "DORMANT",
|
|
41258
|
-
|
|
41259
|
-
|
|
41260
|
-
|
|
41261
|
-
|
|
41262
|
-
|
|
41263
|
-
|
|
41264
|
-
|
|
41265
|
-
|
|
41266
|
-
|
|
41267
|
-
|
|
41268
|
-
verdict: "HYGIENE",
|
|
41269
|
-
_calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=2924, FP=2430, P=54.6%, FPR=1.32%, lift=0.9. aiSpecific=False.",
|
|
41270
|
-
aiSpecific: false
|
|
42388
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
42389
|
+
aiSpecific: true,
|
|
42390
|
+
_v7Verdict: "DORMANT",
|
|
42391
|
+
_v7Lift: 0,
|
|
42392
|
+
_v7Recall: 0,
|
|
42393
|
+
_v7FpRate: 0,
|
|
42394
|
+
_v7Precision: 0,
|
|
42395
|
+
_v8Verdict: "DORMANT",
|
|
42396
|
+
_v8Lift: 1,
|
|
42397
|
+
defaultOff: true
|
|
41271
42398
|
},
|
|
41272
|
-
"logic/
|
|
41273
|
-
recall:
|
|
41274
|
-
fpRate:
|
|
41275
|
-
ratio:
|
|
41276
|
-
precision: 0.
|
|
41277
|
-
lastCalibratedAt: "2026-
|
|
41278
|
-
verdict: "
|
|
41279
|
-
_calibrationNote: "
|
|
41280
|
-
aiSpecific:
|
|
42399
|
+
"logic/reactive-hook-soup": {
|
|
42400
|
+
recall: 41e-4,
|
|
42401
|
+
fpRate: 6e-4,
|
|
42402
|
+
ratio: 1370.15,
|
|
42403
|
+
precision: 0.8805,
|
|
42404
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42405
|
+
verdict: "USEFUL",
|
|
42406
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=1194, FP=162, P=88.1%, FPR=0.06%, lift=1370.15. v7 was USEFUL (TP=901, FP=162, lift=959.64). v8 was USEFUL (TP=293, FP=0).",
|
|
42407
|
+
aiSpecific: true,
|
|
42408
|
+
_v7Verdict: "USEFUL",
|
|
42409
|
+
_v7Lift: 959.64,
|
|
42410
|
+
_v7Recall: 38e-4,
|
|
42411
|
+
_v7FpRate: 9e-4,
|
|
42412
|
+
_v7Precision: 0.8476,
|
|
42413
|
+
_v8Verdict: "USEFUL",
|
|
42414
|
+
_v8Lift: 99999
|
|
41281
42415
|
},
|
|
41282
42416
|
"logic/zipf-slope-anomaly": {
|
|
41283
|
-
recall: 0.
|
|
41284
|
-
fpRate:
|
|
41285
|
-
ratio:
|
|
41286
|
-
precision: 0.
|
|
41287
|
-
lastCalibratedAt: "2026-
|
|
41288
|
-
verdict: "
|
|
41289
|
-
_calibrationNote: "
|
|
41290
|
-
aiSpecific: false
|
|
42417
|
+
recall: 0.0168,
|
|
42418
|
+
fpRate: 0.0111,
|
|
42419
|
+
ratio: 57.13,
|
|
42420
|
+
precision: 0.6369,
|
|
42421
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42422
|
+
verdict: "USEFUL",
|
|
42423
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=4928, FP=2810, P=63.7%, FPR=1.11%, lift=57.13. v7 was USEFUL (TP=3718, FP=1606, lift=79.75). v8 was USEFUL (TP=1210, FP=1204).",
|
|
42424
|
+
aiSpecific: false,
|
|
42425
|
+
_v7Verdict: "USEFUL",
|
|
42426
|
+
_v7Lift: 79.75,
|
|
42427
|
+
_v7Recall: 0.0157,
|
|
42428
|
+
_v7FpRate: 88e-4,
|
|
42429
|
+
_v7Precision: 0.6983,
|
|
42430
|
+
_v8Verdict: "USEFUL",
|
|
42431
|
+
_v8Lift: 28.59
|
|
41291
42432
|
},
|
|
41292
|
-
"
|
|
41293
|
-
recall:
|
|
42433
|
+
"logic/zombie-state": {
|
|
42434
|
+
recall: 1e-4,
|
|
41294
42435
|
fpRate: 0,
|
|
41295
|
-
ratio:
|
|
41296
|
-
precision: 0.
|
|
41297
|
-
lastCalibratedAt: "2026-
|
|
41298
|
-
verdict: "
|
|
41299
|
-
_calibrationNote: "
|
|
41300
|
-
aiSpecific: true
|
|
42436
|
+
ratio: 119891.71,
|
|
42437
|
+
precision: 0.9512,
|
|
42438
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42439
|
+
verdict: "USEFUL",
|
|
42440
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=39, FP=2, P=95.1%, FPR=0.00%, lift=119891.71. v7 was USEFUL (TP=24, FP=2, lift=84652.15). v8 was USEFUL (TP=15, FP=0).",
|
|
42441
|
+
aiSpecific: true,
|
|
42442
|
+
_v7Verdict: "USEFUL",
|
|
42443
|
+
_v7Lift: 84652.15,
|
|
42444
|
+
_v7Recall: 1e-4,
|
|
42445
|
+
_v7FpRate: 0,
|
|
42446
|
+
_v7Precision: 0.9231,
|
|
42447
|
+
_v8Verdict: "USEFUL",
|
|
42448
|
+
_v8Lift: 99999
|
|
41301
42449
|
},
|
|
41302
|
-
"
|
|
41303
|
-
recall:
|
|
41304
|
-
fpRate:
|
|
41305
|
-
ratio:
|
|
41306
|
-
precision: 0.
|
|
41307
|
-
lastCalibratedAt: "2026-
|
|
41308
|
-
verdict: "
|
|
41309
|
-
_calibrationNote: "
|
|
41310
|
-
aiSpecific:
|
|
42450
|
+
"perf/cls-image": {
|
|
42451
|
+
recall: 2e-4,
|
|
42452
|
+
fpRate: 2e-4,
|
|
42453
|
+
ratio: 2895.78,
|
|
42454
|
+
precision: 0.5514,
|
|
42455
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42456
|
+
verdict: "USEFUL",
|
|
42457
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=59, FP=48, P=55.1%, FPR=0.02%, lift=2895.78. v7 was USEFUL (TP=49, FP=47, lift=1991.85). v8 was USEFUL (TP=10, FP=1).",
|
|
42458
|
+
aiSpecific: false,
|
|
42459
|
+
_v7Verdict: "USEFUL",
|
|
42460
|
+
_v7Lift: 1991.85,
|
|
42461
|
+
_v7Recall: 2e-4,
|
|
42462
|
+
_v7FpRate: 3e-4,
|
|
42463
|
+
_v7Precision: 0.5104,
|
|
42464
|
+
_v8Verdict: "USEFUL",
|
|
42465
|
+
_v8Lift: 62424.55
|
|
41311
42466
|
},
|
|
41312
|
-
"
|
|
41313
|
-
recall: 0.
|
|
41314
|
-
fpRate:
|
|
41315
|
-
ratio:
|
|
41316
|
-
precision: 0.
|
|
41317
|
-
lastCalibratedAt: "2026-
|
|
41318
|
-
verdict: "
|
|
41319
|
-
_calibrationNote: "
|
|
41320
|
-
|
|
41321
|
-
|
|
42467
|
+
"perf/css-bloat": {
|
|
42468
|
+
recall: 0.0126,
|
|
42469
|
+
fpRate: 24e-4,
|
|
42470
|
+
ratio: 365.63,
|
|
42471
|
+
precision: 0.8616,
|
|
42472
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42473
|
+
verdict: "USEFUL",
|
|
42474
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=3697, FP=594, P=86.2%, FPR=0.24%, lift=365.63. v7 was USEFUL (TP=2790, FP=591, lift=256.10). v8 was USEFUL (TP=907, FP=3).",
|
|
42475
|
+
aiSpecific: false,
|
|
42476
|
+
_v7Verdict: "USEFUL",
|
|
42477
|
+
_v7Lift: 256.1,
|
|
42478
|
+
_v7Recall: 0.0118,
|
|
42479
|
+
_v7FpRate: 32e-4,
|
|
42480
|
+
_v7Precision: 0.8252,
|
|
42481
|
+
_v8Verdict: "USEFUL",
|
|
42482
|
+
_v8Lift: 22813.54
|
|
41322
42483
|
},
|
|
41323
|
-
"
|
|
42484
|
+
"perf/halstead-anomaly": {
|
|
41324
42485
|
recall: 0,
|
|
41325
42486
|
fpRate: 0,
|
|
41326
|
-
ratio:
|
|
41327
|
-
precision: 0.
|
|
41328
|
-
lastCalibratedAt: "2026-
|
|
42487
|
+
ratio: 75624,
|
|
42488
|
+
precision: 0.6,
|
|
42489
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41329
42490
|
verdict: "USEFUL",
|
|
41330
|
-
_calibrationNote: "
|
|
41331
|
-
aiSpecific: true
|
|
42491
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=3, FP=2, P=60.0%, FPR=0.00%, lift=75624.00. v7 was USEFUL (TP=3, FP=1, lift=137559.75). v8 was INVERTED (TP=0, FP=1).",
|
|
42492
|
+
aiSpecific: true,
|
|
42493
|
+
_v7Verdict: "USEFUL",
|
|
42494
|
+
_v7Lift: 137559.75,
|
|
42495
|
+
_v7Recall: 0,
|
|
42496
|
+
_v7FpRate: 0,
|
|
42497
|
+
_v7Precision: 0.75,
|
|
42498
|
+
_v8Verdict: "INVERTED",
|
|
42499
|
+
_v8Lift: 0
|
|
41332
42500
|
},
|
|
41333
|
-
"
|
|
41334
|
-
recall:
|
|
41335
|
-
fpRate:
|
|
41336
|
-
ratio:
|
|
41337
|
-
precision: 0.
|
|
41338
|
-
lastCalibratedAt: "2026-
|
|
41339
|
-
verdict: "
|
|
41340
|
-
_calibrationNote: "
|
|
41341
|
-
|
|
41342
|
-
|
|
42501
|
+
"product/terminology-drift": {
|
|
42502
|
+
recall: 91e-4,
|
|
42503
|
+
fpRate: 21e-4,
|
|
42504
|
+
ratio: 397.75,
|
|
42505
|
+
precision: 0.8347,
|
|
42506
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42507
|
+
verdict: "USEFUL",
|
|
42508
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=2671, FP=529, P=83.5%, FPR=0.21%, lift=397.75. v7 was USEFUL (TP=2028, FP=521, lift=280.09). v8 was USEFUL (TP=643, FP=8).",
|
|
42509
|
+
aiSpecific: false,
|
|
42510
|
+
_v7Verdict: "USEFUL",
|
|
42511
|
+
_v7Lift: 280.09,
|
|
42512
|
+
_v7Recall: 86e-4,
|
|
42513
|
+
_v7FpRate: 28e-4,
|
|
42514
|
+
_v7Precision: 0.7956,
|
|
42515
|
+
_v8Verdict: "USEFUL",
|
|
42516
|
+
_v8Lift: 8477.9
|
|
41343
42517
|
},
|
|
41344
|
-
"
|
|
41345
|
-
recall:
|
|
41346
|
-
fpRate:
|
|
41347
|
-
ratio:
|
|
41348
|
-
precision: 0.
|
|
41349
|
-
lastCalibratedAt: "2026-
|
|
41350
|
-
verdict: "
|
|
41351
|
-
_calibrationNote: "
|
|
41352
|
-
|
|
41353
|
-
|
|
42518
|
+
"product/ux-pattern-fragmentation": {
|
|
42519
|
+
recall: 1e-4,
|
|
42520
|
+
fpRate: 0,
|
|
42521
|
+
ratio: 22864.4,
|
|
42522
|
+
precision: 0.8163,
|
|
42523
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42524
|
+
verdict: "USEFUL",
|
|
42525
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=40, FP=9, P=81.6%, FPR=0.00%, lift=22864.40. v7 was USEFUL (TP=32, FP=8, lift=18341.30). v8 was USEFUL (TP=8, FP=1).",
|
|
42526
|
+
aiSpecific: true,
|
|
42527
|
+
_v7Verdict: "USEFUL",
|
|
42528
|
+
_v7Lift: 18341.3,
|
|
42529
|
+
_v7Recall: 1e-4,
|
|
42530
|
+
_v7FpRate: 0,
|
|
42531
|
+
_v7Precision: 0.8,
|
|
42532
|
+
_v8Verdict: "USEFUL",
|
|
42533
|
+
_v8Lift: 61037.33
|
|
41354
42534
|
},
|
|
41355
|
-
"
|
|
41356
|
-
recall:
|
|
42535
|
+
"rust/stringly-typed": {
|
|
42536
|
+
recall: 2e-4,
|
|
41357
42537
|
fpRate: 0,
|
|
41358
|
-
ratio:
|
|
41359
|
-
precision: 0.
|
|
41360
|
-
lastCalibratedAt: "2026-
|
|
41361
|
-
verdict: "
|
|
41362
|
-
_calibrationNote: "
|
|
41363
|
-
|
|
41364
|
-
|
|
42538
|
+
ratio: 24735.12,
|
|
42539
|
+
precision: 0.8831,
|
|
42540
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42541
|
+
verdict: "USEFUL",
|
|
42542
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=68, FP=9, P=88.3%, FPR=0.00%, lift=24735.12. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was USEFUL (TP=68, FP=9).",
|
|
42543
|
+
aiSpecific: true,
|
|
42544
|
+
_v7Verdict: "DORMANT",
|
|
42545
|
+
_v7Lift: 1,
|
|
42546
|
+
_v7Recall: 0,
|
|
42547
|
+
_v7FpRate: 0,
|
|
42548
|
+
_v7Precision: 0,
|
|
42549
|
+
_v8Verdict: "USEFUL",
|
|
42550
|
+
_v8Lift: 6737.89
|
|
41365
42551
|
},
|
|
41366
|
-
"
|
|
42552
|
+
"rust/todo-macro": {
|
|
42553
|
+
recall: 1e-4,
|
|
42554
|
+
fpRate: 7e-4,
|
|
42555
|
+
ratio: 210.08,
|
|
42556
|
+
precision: 0.1392,
|
|
42557
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42558
|
+
verdict: "OK",
|
|
42559
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=27, FP=167, P=13.9%, FPR=0.07%, lift=210.08. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was OK (TP=27, FP=167).",
|
|
42560
|
+
aiSpecific: true,
|
|
42561
|
+
_v7Verdict: "DORMANT",
|
|
42562
|
+
_v7Lift: 1,
|
|
42563
|
+
_v7Recall: 0,
|
|
42564
|
+
_v7FpRate: 0,
|
|
42565
|
+
_v7Precision: 0,
|
|
42566
|
+
_v8Verdict: "OK",
|
|
42567
|
+
_v8Lift: 57.23
|
|
42568
|
+
},
|
|
42569
|
+
"rust/unused-pub-fn": {
|
|
41367
42570
|
recall: 0,
|
|
41368
42571
|
fpRate: 0,
|
|
41369
|
-
ratio:
|
|
41370
|
-
precision: 0,
|
|
41371
|
-
lastCalibratedAt: "2026-
|
|
42572
|
+
ratio: 10803.43,
|
|
42573
|
+
precision: 0.3,
|
|
42574
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41372
42575
|
verdict: "OK",
|
|
41373
|
-
_calibrationNote: "v0.
|
|
41374
|
-
aiSpecific: true
|
|
42576
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=3, FP=7, P=30.0%, FPR=0.00%, lift=10803.43. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was OK (TP=3, FP=7).",
|
|
42577
|
+
aiSpecific: true,
|
|
42578
|
+
_v7Verdict: "DORMANT",
|
|
42579
|
+
_v7Lift: 1,
|
|
42580
|
+
_v7Recall: 0,
|
|
42581
|
+
_v7FpRate: 0,
|
|
42582
|
+
_v7Precision: 0,
|
|
42583
|
+
_v8Verdict: "OK",
|
|
42584
|
+
_v8Lift: 2942.87
|
|
41375
42585
|
},
|
|
41376
|
-
"
|
|
41377
|
-
recall:
|
|
41378
|
-
fpRate:
|
|
41379
|
-
ratio:
|
|
41380
|
-
precision: 0.
|
|
41381
|
-
lastCalibratedAt: "2026-
|
|
42586
|
+
"rust/unwrap-in-production": {
|
|
42587
|
+
recall: 8e-3,
|
|
42588
|
+
fpRate: 77e-4,
|
|
42589
|
+
ratio: 70.81,
|
|
42590
|
+
precision: 0.5475,
|
|
42591
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41382
42592
|
verdict: "USEFUL",
|
|
41383
|
-
_calibrationNote: "
|
|
41384
|
-
aiSpecific: true
|
|
42593
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=2358, FP=1949, P=54.7%, FPR=0.77%, lift=70.81. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was USEFUL (TP=2358, FP=1949).",
|
|
42594
|
+
aiSpecific: true,
|
|
42595
|
+
_v7Verdict: "DORMANT",
|
|
42596
|
+
_v7Lift: 1,
|
|
42597
|
+
_v7Recall: 0,
|
|
42598
|
+
_v7FpRate: 0,
|
|
42599
|
+
_v7Precision: 0,
|
|
42600
|
+
_v8Verdict: "USEFUL",
|
|
42601
|
+
_v8Lift: 19.29
|
|
41385
42602
|
},
|
|
41386
|
-
"
|
|
41387
|
-
recall:
|
|
41388
|
-
fpRate:
|
|
41389
|
-
ratio:
|
|
41390
|
-
precision: 0.
|
|
41391
|
-
lastCalibratedAt: "2026-
|
|
42603
|
+
"security/dangerous-cors": {
|
|
42604
|
+
recall: 5e-4,
|
|
42605
|
+
fpRate: 4e-4,
|
|
42606
|
+
ratio: 1721.87,
|
|
42607
|
+
precision: 0.6079,
|
|
42608
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41392
42609
|
verdict: "USEFUL",
|
|
41393
|
-
_calibrationNote: "
|
|
41394
|
-
aiSpecific: true
|
|
42610
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=138, FP=89, P=60.8%, FPR=0.04%, lift=1721.87. v7 was USEFUL (TP=114, FP=84, lift=1257.16). v8 was USEFUL (TP=24, FP=5).",
|
|
42611
|
+
aiSpecific: true,
|
|
42612
|
+
_v7Verdict: "USEFUL",
|
|
42613
|
+
_v7Lift: 1257.16,
|
|
42614
|
+
_v7Recall: 5e-4,
|
|
42615
|
+
_v7FpRate: 5e-4,
|
|
42616
|
+
_v7Precision: 0.5758,
|
|
42617
|
+
_v8Verdict: "USEFUL",
|
|
42618
|
+
_v8Lift: 11365.57
|
|
41395
42619
|
},
|
|
41396
|
-
"
|
|
41397
|
-
recall:
|
|
41398
|
-
fpRate:
|
|
41399
|
-
ratio:
|
|
41400
|
-
precision: 0.
|
|
41401
|
-
lastCalibratedAt: "2026-
|
|
42620
|
+
"security/eval": {
|
|
42621
|
+
recall: 1e-4,
|
|
42622
|
+
fpRate: 2e-4,
|
|
42623
|
+
ratio: 1929.18,
|
|
42624
|
+
precision: 0.4286,
|
|
42625
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42626
|
+
verdict: "OK",
|
|
42627
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=42, FP=56, P=42.9%, FPR=0.02%, lift=1929.18. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was OK (TP=42, FP=56).",
|
|
42628
|
+
aiSpecific: false,
|
|
42629
|
+
_v7Verdict: "DORMANT",
|
|
42630
|
+
_v7Lift: 1,
|
|
42631
|
+
_v7Recall: 0,
|
|
42632
|
+
_v7FpRate: 0,
|
|
42633
|
+
_v7Precision: 0,
|
|
42634
|
+
_v8Verdict: "OK",
|
|
42635
|
+
_v8Lift: 525.51
|
|
42636
|
+
},
|
|
42637
|
+
"security/exposed-env-var": {
|
|
42638
|
+
recall: 6e-4,
|
|
42639
|
+
fpRate: 5e-4,
|
|
42640
|
+
ratio: 1055.81,
|
|
42641
|
+
precision: 0.5696,
|
|
42642
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41402
42643
|
verdict: "USEFUL",
|
|
41403
|
-
_calibrationNote: "
|
|
41404
|
-
aiSpecific:
|
|
42644
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=180, FP=136, P=57.0%, FPR=0.05%, lift=1055.81. v7 was USEFUL (TP=146, FP=125, lift=790.50). v8 was USEFUL (TP=34, FP=11).",
|
|
42645
|
+
aiSpecific: false,
|
|
42646
|
+
_v7Verdict: "USEFUL",
|
|
42647
|
+
_v7Lift: 790.5,
|
|
42648
|
+
_v7Recall: 6e-4,
|
|
42649
|
+
_v7FpRate: 7e-4,
|
|
42650
|
+
_v7Precision: 0.5387,
|
|
42651
|
+
_v8Verdict: "USEFUL",
|
|
42652
|
+
_v8Lift: 4716.52
|
|
41405
42653
|
},
|
|
41406
|
-
"
|
|
41407
|
-
recall:
|
|
42654
|
+
"security/fail-open-auth": {
|
|
42655
|
+
recall: 0,
|
|
41408
42656
|
fpRate: 0,
|
|
41409
|
-
ratio:
|
|
41410
|
-
precision:
|
|
41411
|
-
lastCalibratedAt: "2026-
|
|
42657
|
+
ratio: 99999,
|
|
42658
|
+
precision: 1,
|
|
42659
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41412
42660
|
verdict: "USEFUL",
|
|
41413
|
-
_calibrationNote: "
|
|
41414
|
-
aiSpecific: true
|
|
42661
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=1, FP=0, P=100.0%, FPR=0.00%, lift=inf. v7 was USEFUL (TP=1, FP=0, lift=inf). v8 was DORMANT (TP=0, FP=0).",
|
|
42662
|
+
aiSpecific: true,
|
|
42663
|
+
_v7Verdict: "USEFUL",
|
|
42664
|
+
_v7Lift: 99999,
|
|
42665
|
+
_v7Recall: 0,
|
|
42666
|
+
_v7FpRate: 0,
|
|
42667
|
+
_v7Precision: 1,
|
|
42668
|
+
_v8Verdict: "DORMANT",
|
|
42669
|
+
_v8Lift: 1
|
|
41415
42670
|
},
|
|
41416
|
-
"
|
|
41417
|
-
recall:
|
|
42671
|
+
"security/hardcoded-secret": {
|
|
42672
|
+
recall: 14e-4,
|
|
42673
|
+
fpRate: 6e-4,
|
|
42674
|
+
ratio: 1269.08,
|
|
42675
|
+
precision: 0.735,
|
|
42676
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42677
|
+
verdict: "USEFUL",
|
|
42678
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=405, FP=146, P=73.5%, FPR=0.06%, lift=1269.08. v7 was USEFUL (TP=307, FP=138, lift=916.92). v8 was USEFUL (TP=98, FP=8).",
|
|
42679
|
+
aiSpecific: true,
|
|
42680
|
+
_v7Verdict: "USEFUL",
|
|
42681
|
+
_v7Lift: 916.92,
|
|
42682
|
+
_v7Recall: 13e-4,
|
|
42683
|
+
_v7FpRate: 8e-4,
|
|
42684
|
+
_v7Precision: 0.6899,
|
|
42685
|
+
_v8Verdict: "USEFUL",
|
|
42686
|
+
_v8Lift: 7935.57
|
|
42687
|
+
},
|
|
42688
|
+
"security/localstorage-token": {
|
|
42689
|
+
recall: 1e-4,
|
|
41418
42690
|
fpRate: 0,
|
|
41419
|
-
ratio:
|
|
41420
|
-
precision:
|
|
41421
|
-
lastCalibratedAt: "2026-
|
|
42691
|
+
ratio: 99999,
|
|
42692
|
+
precision: 1,
|
|
42693
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41422
42694
|
verdict: "USEFUL",
|
|
41423
|
-
_calibrationNote: "
|
|
41424
|
-
aiSpecific:
|
|
42695
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=17, FP=0, P=100.0%, FPR=0.00%, lift=inf. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was USEFUL (TP=17, FP=0).",
|
|
42696
|
+
aiSpecific: false,
|
|
42697
|
+
_v7Verdict: "DORMANT",
|
|
42698
|
+
_v7Lift: 1,
|
|
42699
|
+
_v7Recall: 0,
|
|
42700
|
+
_v7FpRate: 0,
|
|
42701
|
+
_v7Precision: 0,
|
|
42702
|
+
_v8Verdict: "USEFUL",
|
|
42703
|
+
_v8Lift: 99999
|
|
41425
42704
|
},
|
|
41426
|
-
"
|
|
41427
|
-
recall:
|
|
41428
|
-
fpRate:
|
|
41429
|
-
ratio:
|
|
41430
|
-
precision:
|
|
41431
|
-
lastCalibratedAt: "2026-
|
|
42705
|
+
"security/missing-auth-check": {
|
|
42706
|
+
recall: 5e-4,
|
|
42707
|
+
fpRate: 0,
|
|
42708
|
+
ratio: 99999,
|
|
42709
|
+
precision: 1,
|
|
42710
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41432
42711
|
verdict: "USEFUL",
|
|
41433
|
-
_calibrationNote: "
|
|
41434
|
-
aiSpecific:
|
|
42712
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=157, FP=0, P=100.0%, FPR=0.00%, lift=inf. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was USEFUL (TP=157, FP=0).",
|
|
42713
|
+
aiSpecific: false,
|
|
42714
|
+
_v7Verdict: "DORMANT",
|
|
42715
|
+
_v7Lift: 1,
|
|
42716
|
+
_v7Recall: 0,
|
|
42717
|
+
_v7FpRate: 0,
|
|
42718
|
+
_v7Precision: 0,
|
|
42719
|
+
_v8Verdict: "USEFUL",
|
|
42720
|
+
_v8Lift: 99999
|
|
41435
42721
|
},
|
|
41436
|
-
"
|
|
41437
|
-
recall:
|
|
41438
|
-
fpRate:
|
|
41439
|
-
ratio:
|
|
41440
|
-
precision: 0.
|
|
41441
|
-
lastCalibratedAt: "2026-
|
|
42722
|
+
"security/public-admin-route": {
|
|
42723
|
+
recall: 38e-4,
|
|
42724
|
+
fpRate: 38e-4,
|
|
42725
|
+
ratio: 142.2,
|
|
42726
|
+
precision: 0.5376,
|
|
42727
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41442
42728
|
verdict: "USEFUL",
|
|
41443
|
-
_calibrationNote: "
|
|
41444
|
-
aiSpecific:
|
|
42729
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=1108, FP=953, P=53.8%, FPR=0.38%, lift=142.20. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was USEFUL (TP=1108, FP=953).",
|
|
42730
|
+
aiSpecific: false,
|
|
42731
|
+
_v7Verdict: "DORMANT",
|
|
42732
|
+
_v7Lift: 1,
|
|
42733
|
+
_v7Recall: 0,
|
|
42734
|
+
_v7FpRate: 0,
|
|
42735
|
+
_v7Precision: 0,
|
|
42736
|
+
_v8Verdict: "USEFUL",
|
|
42737
|
+
_v8Lift: 38.74
|
|
41445
42738
|
},
|
|
41446
|
-
"
|
|
41447
|
-
recall:
|
|
41448
|
-
fpRate:
|
|
41449
|
-
ratio:
|
|
41450
|
-
precision: 0.
|
|
41451
|
-
lastCalibratedAt: "2026-
|
|
42739
|
+
"security/sql-construction": {
|
|
42740
|
+
recall: 32e-4,
|
|
42741
|
+
fpRate: 15e-4,
|
|
42742
|
+
ratio: 485.42,
|
|
42743
|
+
precision: 0.7183,
|
|
42744
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41452
42745
|
verdict: "USEFUL",
|
|
41453
|
-
_calibrationNote: "
|
|
41454
|
-
aiSpecific: true
|
|
42746
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=951, FP=373, P=71.8%, FPR=0.15%, lift=485.42. v7 was USEFUL (TP=710, FP=336, lift=370.52). v8 was USEFUL (TP=241, FP=37).",
|
|
42747
|
+
aiSpecific: true,
|
|
42748
|
+
_v7Verdict: "USEFUL",
|
|
42749
|
+
_v7Lift: 370.52,
|
|
42750
|
+
_v7Recall: 3e-3,
|
|
42751
|
+
_v7FpRate: 18e-4,
|
|
42752
|
+
_v7Precision: 0.6788,
|
|
42753
|
+
_v8Verdict: "USEFUL",
|
|
42754
|
+
_v8Lift: 1608.86
|
|
41455
42755
|
},
|
|
41456
|
-
"
|
|
41457
|
-
recall:
|
|
42756
|
+
"security/target-blank-no-noopener": {
|
|
42757
|
+
recall: 4e-4,
|
|
41458
42758
|
fpRate: 0,
|
|
41459
|
-
ratio:
|
|
41460
|
-
precision: 0,
|
|
41461
|
-
lastCalibratedAt: "2026-
|
|
41462
|
-
verdict: "
|
|
41463
|
-
|
|
41464
|
-
|
|
41465
|
-
|
|
42759
|
+
ratio: 26141.63,
|
|
42760
|
+
precision: 0.9333,
|
|
42761
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42762
|
+
verdict: "USEFUL",
|
|
42763
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=126, FP=9, P=93.3%, FPR=0.00%, lift=26141.63. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was USEFUL (TP=126, FP=9).",
|
|
42764
|
+
aiSpecific: false,
|
|
42765
|
+
_v7Verdict: "DORMANT",
|
|
42766
|
+
_v7Lift: 1,
|
|
42767
|
+
_v7Recall: 0,
|
|
42768
|
+
_v7FpRate: 0,
|
|
42769
|
+
_v7Precision: 0,
|
|
42770
|
+
_v8Verdict: "USEFUL",
|
|
42771
|
+
_v8Lift: 7121.02
|
|
41466
42772
|
},
|
|
41467
|
-
"
|
|
41468
|
-
recall:
|
|
41469
|
-
fpRate:
|
|
41470
|
-
ratio:
|
|
41471
|
-
precision: 0,
|
|
41472
|
-
lastCalibratedAt: "2026-
|
|
41473
|
-
verdict: "
|
|
41474
|
-
|
|
41475
|
-
|
|
41476
|
-
|
|
42773
|
+
"security/unsafe-html-render": {
|
|
42774
|
+
recall: 13e-4,
|
|
42775
|
+
fpRate: 11e-4,
|
|
42776
|
+
ratio: 513.12,
|
|
42777
|
+
precision: 0.574,
|
|
42778
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42779
|
+
verdict: "USEFUL",
|
|
42780
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=380, FP=282, P=57.4%, FPR=0.11%, lift=513.12. v7 was USEFUL (TP=312, FP=160, lift=757.74). v8 was OK (TP=68, FP=122).",
|
|
42781
|
+
aiSpecific: false,
|
|
42782
|
+
_v7Verdict: "USEFUL",
|
|
42783
|
+
_v7Lift: 757.74,
|
|
42784
|
+
_v7Recall: 13e-4,
|
|
42785
|
+
_v7FpRate: 9e-4,
|
|
42786
|
+
_v7Precision: 0.661,
|
|
42787
|
+
_v8Verdict: "OK",
|
|
42788
|
+
_v8Lift: 201.44
|
|
41477
42789
|
},
|
|
41478
|
-
"
|
|
41479
|
-
recall:
|
|
42790
|
+
"test/duplicate-setup": {
|
|
42791
|
+
recall: 1e-4,
|
|
41480
42792
|
fpRate: 0,
|
|
41481
|
-
ratio:
|
|
41482
|
-
precision: 0,
|
|
41483
|
-
lastCalibratedAt: "2026-
|
|
41484
|
-
verdict: "
|
|
41485
|
-
|
|
41486
|
-
|
|
41487
|
-
|
|
42793
|
+
ratio: 51016.19,
|
|
42794
|
+
precision: 0.8095,
|
|
42795
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42796
|
+
verdict: "USEFUL",
|
|
42797
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=17, FP=4, P=81.0%, FPR=0.00%, lift=51016.19. v7 was USEFUL (TP=14, FP=3, lift=50348.67). v8 was USEFUL (TP=3, FP=1).",
|
|
42798
|
+
aiSpecific: true,
|
|
42799
|
+
_v7Verdict: "USEFUL",
|
|
42800
|
+
_v7Lift: 50348.67,
|
|
42801
|
+
_v7Recall: 1e-4,
|
|
42802
|
+
_v7FpRate: 0,
|
|
42803
|
+
_v7Precision: 0.8235,
|
|
42804
|
+
_v8Verdict: "USEFUL",
|
|
42805
|
+
_v8Lift: 51500.25
|
|
41488
42806
|
},
|
|
41489
|
-
"
|
|
41490
|
-
recall:
|
|
41491
|
-
fpRate:
|
|
41492
|
-
ratio:
|
|
41493
|
-
precision: 0,
|
|
41494
|
-
lastCalibratedAt: "2026-
|
|
41495
|
-
verdict: "
|
|
41496
|
-
|
|
41497
|
-
|
|
41498
|
-
|
|
42807
|
+
"test/fake-placeholder": {
|
|
42808
|
+
recall: 51e-4,
|
|
42809
|
+
fpRate: 15e-4,
|
|
42810
|
+
ratio: 547.47,
|
|
42811
|
+
precision: 0.8014,
|
|
42812
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42813
|
+
verdict: "USEFUL",
|
|
42814
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=1489, FP=369, P=80.1%, FPR=0.15%, lift=547.47. v7 was USEFUL (TP=1259, FP=344, lift=418.76). v8 was USEFUL (TP=230, FP=25).",
|
|
42815
|
+
aiSpecific: true,
|
|
42816
|
+
_v7Verdict: "USEFUL",
|
|
42817
|
+
_v7Lift: 418.76,
|
|
42818
|
+
_v7Recall: 53e-4,
|
|
42819
|
+
_v7FpRate: 19e-4,
|
|
42820
|
+
_v7Precision: 0.7854,
|
|
42821
|
+
_v8Verdict: "USEFUL",
|
|
42822
|
+
_v8Lift: 2477.4
|
|
41499
42823
|
},
|
|
41500
|
-
"
|
|
42824
|
+
"test/missing-edge-case": {
|
|
41501
42825
|
recall: 0,
|
|
41502
42826
|
fpRate: 0,
|
|
41503
42827
|
ratio: 0,
|
|
41504
42828
|
precision: 0,
|
|
41505
|
-
lastCalibratedAt: "2026-
|
|
42829
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41506
42830
|
verdict: "DORMANT",
|
|
41507
|
-
|
|
41508
|
-
|
|
41509
|
-
|
|
42831
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
42832
|
+
aiSpecific: true,
|
|
42833
|
+
_v7Verdict: "DORMANT",
|
|
42834
|
+
_v7Lift: 0,
|
|
42835
|
+
_v7Recall: 0,
|
|
42836
|
+
_v7FpRate: 0,
|
|
42837
|
+
_v7Precision: 0,
|
|
42838
|
+
_v8Verdict: "DORMANT",
|
|
42839
|
+
_v8Lift: 1,
|
|
42840
|
+
defaultOff: true
|
|
41510
42841
|
},
|
|
41511
|
-
"
|
|
41512
|
-
recall: 0,
|
|
41513
|
-
fpRate:
|
|
41514
|
-
ratio:
|
|
41515
|
-
precision: 0,
|
|
41516
|
-
lastCalibratedAt: "2026-
|
|
41517
|
-
verdict: "
|
|
41518
|
-
|
|
41519
|
-
|
|
41520
|
-
|
|
42842
|
+
"test/weak-assertion": {
|
|
42843
|
+
recall: 0.0417,
|
|
42844
|
+
fpRate: 67e-4,
|
|
42845
|
+
ratio: 131.62,
|
|
42846
|
+
precision: 0.8793,
|
|
42847
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42848
|
+
verdict: "USEFUL",
|
|
42849
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=12263, FP=1684, P=87.9%, FPR=0.67%, lift=131.62. v7 was USEFUL (TP=9906, FP=1583, lift=99.90). v8 was USEFUL (TP=2357, FP=101).",
|
|
42850
|
+
aiSpecific: true,
|
|
42851
|
+
_v7Verdict: "USEFUL",
|
|
42852
|
+
_v7Lift: 99.9,
|
|
42853
|
+
_v7Recall: 0.0418,
|
|
42854
|
+
_v7FpRate: 86e-4,
|
|
42855
|
+
_v7Precision: 0.8622,
|
|
42856
|
+
_v8Verdict: "USEFUL",
|
|
42857
|
+
_v8Lift: 651.94
|
|
41521
42858
|
},
|
|
41522
|
-
"
|
|
42859
|
+
"typo/calc-fontsize": {
|
|
41523
42860
|
recall: 0,
|
|
41524
42861
|
fpRate: 0,
|
|
41525
42862
|
ratio: 0,
|
|
41526
42863
|
precision: 0,
|
|
41527
|
-
lastCalibratedAt: "2026-
|
|
42864
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41528
42865
|
verdict: "DORMANT",
|
|
41529
|
-
|
|
41530
|
-
|
|
41531
|
-
|
|
42866
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
42867
|
+
aiSpecific: false,
|
|
42868
|
+
_v7Verdict: "DORMANT",
|
|
42869
|
+
_v7Lift: 0,
|
|
42870
|
+
_v7Recall: 0,
|
|
42871
|
+
_v7FpRate: 0,
|
|
42872
|
+
_v7Precision: 0,
|
|
42873
|
+
_v8Verdict: "DORMANT",
|
|
42874
|
+
_v8Lift: 1,
|
|
42875
|
+
defaultOff: true
|
|
41532
42876
|
},
|
|
41533
|
-
"
|
|
42877
|
+
"typo/calc-raw-px": {
|
|
41534
42878
|
recall: 0,
|
|
41535
42879
|
fpRate: 0,
|
|
41536
|
-
ratio:
|
|
41537
|
-
precision: 0,
|
|
41538
|
-
lastCalibratedAt: "2026-
|
|
41539
|
-
verdict: "
|
|
41540
|
-
|
|
41541
|
-
|
|
41542
|
-
|
|
42880
|
+
ratio: 210066.67,
|
|
42881
|
+
precision: 0.8333,
|
|
42882
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42883
|
+
verdict: "USEFUL",
|
|
42884
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=5, FP=1, P=83.3%, FPR=0.00%, lift=210066.67. v7 was USEFUL (TP=3, FP=1, lift=137559.75). v8 was USEFUL (TP=2, FP=0).",
|
|
42885
|
+
aiSpecific: false,
|
|
42886
|
+
_v7Verdict: "USEFUL",
|
|
42887
|
+
_v7Lift: 137559.75,
|
|
42888
|
+
_v7Recall: 0,
|
|
42889
|
+
_v7FpRate: 0,
|
|
42890
|
+
_v7Precision: 0.75,
|
|
42891
|
+
_v8Verdict: "USEFUL",
|
|
42892
|
+
_v8Lift: 99999
|
|
41543
42893
|
},
|
|
41544
|
-
"
|
|
42894
|
+
"typo/clamp-offscale": {
|
|
41545
42895
|
recall: 0,
|
|
41546
42896
|
fpRate: 0,
|
|
41547
42897
|
ratio: 0,
|
|
41548
42898
|
precision: 0,
|
|
41549
|
-
lastCalibratedAt: "2026-
|
|
42899
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41550
42900
|
verdict: "DORMANT",
|
|
41551
|
-
|
|
41552
|
-
|
|
41553
|
-
|
|
42901
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
42902
|
+
aiSpecific: false,
|
|
42903
|
+
_v7Verdict: "DORMANT",
|
|
42904
|
+
_v7Lift: 0,
|
|
42905
|
+
_v7Recall: 0,
|
|
42906
|
+
_v7FpRate: 0,
|
|
42907
|
+
_v7Precision: 0,
|
|
42908
|
+
_v8Verdict: "DORMANT",
|
|
42909
|
+
_v8Lift: 1,
|
|
42910
|
+
defaultOff: true
|
|
41554
42911
|
},
|
|
41555
|
-
"
|
|
41556
|
-
recall:
|
|
41557
|
-
fpRate:
|
|
41558
|
-
ratio:
|
|
41559
|
-
precision: 0,
|
|
41560
|
-
lastCalibratedAt: "2026-
|
|
41561
|
-
verdict: "
|
|
41562
|
-
|
|
41563
|
-
|
|
41564
|
-
|
|
42912
|
+
"typo/math-button-label-uniformity": {
|
|
42913
|
+
recall: 1e-4,
|
|
42914
|
+
fpRate: 1e-4,
|
|
42915
|
+
ratio: 6894.19,
|
|
42916
|
+
precision: 0.629,
|
|
42917
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42918
|
+
verdict: "USEFUL",
|
|
42919
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=39, FP=23, P=62.9%, FPR=0.01%, lift=6894.19. v7 was USEFUL (TP=37, FP=21, lift=5571.66). v8 was USEFUL (TP=2, FP=2).",
|
|
42920
|
+
aiSpecific: false,
|
|
42921
|
+
_v7Verdict: "USEFUL",
|
|
42922
|
+
_v7Lift: 5571.66,
|
|
42923
|
+
_v7Recall: 2e-4,
|
|
42924
|
+
_v7FpRate: 1e-4,
|
|
42925
|
+
_v7Precision: 0.6379,
|
|
42926
|
+
_v8Verdict: "USEFUL",
|
|
42927
|
+
_v8Lift: 17166.75
|
|
41565
42928
|
},
|
|
41566
|
-
"
|
|
42929
|
+
"typo/math-cta-vocabulary": {
|
|
41567
42930
|
recall: 0,
|
|
41568
42931
|
fpRate: 0,
|
|
41569
42932
|
ratio: 0,
|
|
41570
42933
|
precision: 0,
|
|
41571
|
-
lastCalibratedAt: "2026-
|
|
42934
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41572
42935
|
verdict: "DORMANT",
|
|
41573
|
-
|
|
41574
|
-
|
|
41575
|
-
|
|
42936
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
42937
|
+
aiSpecific: true,
|
|
42938
|
+
_v7Verdict: "DORMANT",
|
|
42939
|
+
_v7Lift: 0,
|
|
42940
|
+
_v7Recall: 0,
|
|
42941
|
+
_v7FpRate: 0,
|
|
42942
|
+
_v7Precision: 0,
|
|
42943
|
+
_v8Verdict: "DORMANT",
|
|
42944
|
+
_v8Lift: 1,
|
|
42945
|
+
defaultOff: true
|
|
41576
42946
|
},
|
|
41577
|
-
"
|
|
41578
|
-
recall:
|
|
42947
|
+
"typo/placeholder-text": {
|
|
42948
|
+
recall: 1e-4,
|
|
41579
42949
|
fpRate: 0,
|
|
41580
|
-
ratio:
|
|
41581
|
-
precision: 0,
|
|
41582
|
-
lastCalibratedAt: "2026-
|
|
41583
|
-
verdict: "
|
|
41584
|
-
|
|
41585
|
-
|
|
41586
|
-
|
|
42950
|
+
ratio: 17330.5,
|
|
42951
|
+
precision: 0.6875,
|
|
42952
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42953
|
+
verdict: "USEFUL",
|
|
42954
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=22, FP=10, P=68.8%, FPR=0.00%, lift=17330.50. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was USEFUL (TP=22, FP=10).",
|
|
42955
|
+
aiSpecific: false,
|
|
42956
|
+
_v7Verdict: "DORMANT",
|
|
42957
|
+
_v7Lift: 1,
|
|
42958
|
+
_v7Recall: 0,
|
|
42959
|
+
_v7FpRate: 0,
|
|
42960
|
+
_v7Precision: 0,
|
|
42961
|
+
_v8Verdict: "USEFUL",
|
|
42962
|
+
_v8Lift: 4720.86
|
|
41587
42963
|
},
|
|
41588
|
-
"
|
|
42964
|
+
"visual/arbitrary-escape": {
|
|
42965
|
+
recall: 26e-4,
|
|
42966
|
+
fpRate: 7e-4,
|
|
42967
|
+
ratio: 1219.67,
|
|
42968
|
+
precision: 0.8177,
|
|
42969
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
42970
|
+
verdict: "USEFUL",
|
|
42971
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=758, FP=169, P=81.8%, FPR=0.07%, lift=1219.67. v7 was USEFUL (TP=600, FP=169, lift=846.78). v8 was USEFUL (TP=158, FP=0).",
|
|
42972
|
+
aiSpecific: true,
|
|
42973
|
+
_v7Verdict: "USEFUL",
|
|
42974
|
+
_v7Lift: 846.78,
|
|
42975
|
+
_v7Recall: 25e-4,
|
|
42976
|
+
_v7FpRate: 9e-4,
|
|
42977
|
+
_v7Precision: 0.7802,
|
|
42978
|
+
_v8Verdict: "USEFUL",
|
|
42979
|
+
_v8Lift: 99999
|
|
42980
|
+
},
|
|
42981
|
+
"visual/clamp-soup": {
|
|
41589
42982
|
recall: 0,
|
|
41590
42983
|
fpRate: 0,
|
|
41591
42984
|
ratio: 0,
|
|
41592
42985
|
precision: 0,
|
|
41593
|
-
lastCalibratedAt: "2026-
|
|
42986
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41594
42987
|
verdict: "DORMANT",
|
|
41595
|
-
|
|
41596
|
-
|
|
41597
|
-
|
|
42988
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
42989
|
+
aiSpecific: true,
|
|
42990
|
+
_v7Verdict: "DORMANT",
|
|
42991
|
+
_v7Lift: 0,
|
|
42992
|
+
_v7Recall: 0,
|
|
42993
|
+
_v7FpRate: 0,
|
|
42994
|
+
_v7Precision: 0,
|
|
42995
|
+
_v8Verdict: "DORMANT",
|
|
42996
|
+
_v8Lift: 1,
|
|
42997
|
+
defaultOff: true
|
|
41598
42998
|
},
|
|
41599
|
-
"
|
|
42999
|
+
"visual/generic-centering": {
|
|
41600
43000
|
recall: 0,
|
|
41601
43001
|
fpRate: 0,
|
|
41602
43002
|
ratio: 0,
|
|
41603
43003
|
precision: 0,
|
|
41604
|
-
lastCalibratedAt: "2026-
|
|
43004
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41605
43005
|
verdict: "DORMANT",
|
|
41606
|
-
|
|
41607
|
-
|
|
41608
|
-
|
|
43006
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
43007
|
+
aiSpecific: true,
|
|
43008
|
+
_v7Verdict: "DORMANT",
|
|
43009
|
+
_v7Lift: 0,
|
|
43010
|
+
_v7Recall: 0,
|
|
43011
|
+
_v7FpRate: 0,
|
|
43012
|
+
_v7Precision: 0,
|
|
43013
|
+
_v8Verdict: "DORMANT",
|
|
43014
|
+
_v8Lift: 1,
|
|
43015
|
+
defaultOff: true
|
|
41609
43016
|
},
|
|
41610
|
-
"
|
|
41611
|
-
recall: 0,
|
|
43017
|
+
"visual/inline-style-dominance": {
|
|
43018
|
+
recall: 0.0103,
|
|
43019
|
+
fpRate: 52e-4,
|
|
43020
|
+
ratio: 134.59,
|
|
43021
|
+
precision: 0.6983,
|
|
43022
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43023
|
+
verdict: "USEFUL",
|
|
43024
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=3028, FP=1308, P=69.8%, FPR=0.52%, lift=134.59. v7 was USEFUL (TP=2303, FP=1221, lift=98.17). v8 was USEFUL (TP=725, FP=87).",
|
|
43025
|
+
aiSpecific: false,
|
|
43026
|
+
_v7Verdict: "USEFUL",
|
|
43027
|
+
_v7Lift: 98.17,
|
|
43028
|
+
_v7Recall: 97e-4,
|
|
43029
|
+
_v7FpRate: 67e-4,
|
|
43030
|
+
_v7Precision: 0.6535,
|
|
43031
|
+
_v8Verdict: "USEFUL",
|
|
43032
|
+
_v8Lift: 704.71
|
|
43033
|
+
},
|
|
43034
|
+
"visual/math-color-cluster": {
|
|
43035
|
+
recall: 2e-4,
|
|
41612
43036
|
fpRate: 0,
|
|
41613
|
-
ratio:
|
|
41614
|
-
precision: 0,
|
|
41615
|
-
lastCalibratedAt: "2026-
|
|
41616
|
-
verdict: "
|
|
41617
|
-
|
|
41618
|
-
|
|
41619
|
-
|
|
43037
|
+
ratio: 46814.86,
|
|
43038
|
+
precision: 0.9286,
|
|
43039
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43040
|
+
verdict: "USEFUL",
|
|
43041
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=65, FP=5, P=92.9%, FPR=0.00%, lift=46814.86. v7 was USEFUL (TP=58, FP=5, lift=33771.28). v8 was USEFUL (TP=7, FP=0).",
|
|
43042
|
+
aiSpecific: true,
|
|
43043
|
+
_v7Verdict: "USEFUL",
|
|
43044
|
+
_v7Lift: 33771.28,
|
|
43045
|
+
_v7Recall: 2e-4,
|
|
43046
|
+
_v7FpRate: 0,
|
|
43047
|
+
_v7Precision: 0.9206,
|
|
43048
|
+
_v8Verdict: "USEFUL",
|
|
43049
|
+
_v8Lift: 99999
|
|
41620
43050
|
},
|
|
41621
|
-
"
|
|
43051
|
+
"visual/math-default-font": {
|
|
43052
|
+
recall: 16e-4,
|
|
43053
|
+
fpRate: 3e-4,
|
|
43054
|
+
ratio: 3035.16,
|
|
43055
|
+
precision: 0.8669,
|
|
43056
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43057
|
+
verdict: "USEFUL",
|
|
43058
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=469, FP=72, P=86.7%, FPR=0.03%, lift=3035.16. v7 was USEFUL (TP=313, FP=71, lift=2105.64). v8 was USEFUL (TP=156, FP=1).",
|
|
43059
|
+
aiSpecific: true,
|
|
43060
|
+
_v7Verdict: "USEFUL",
|
|
43061
|
+
_v7Lift: 2105.64,
|
|
43062
|
+
_v7Recall: 13e-4,
|
|
43063
|
+
_v7FpRate: 4e-4,
|
|
43064
|
+
_v7Precision: 0.8151,
|
|
43065
|
+
_v8Verdict: "USEFUL",
|
|
43066
|
+
_v8Lift: 68229.63
|
|
43067
|
+
},
|
|
43068
|
+
"visual/math-font-entropy": {
|
|
43069
|
+
recall: 52e-4,
|
|
43070
|
+
fpRate: 1e-3,
|
|
43071
|
+
ratio: 869.95,
|
|
43072
|
+
precision: 0.8593,
|
|
43073
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43074
|
+
verdict: "USEFUL",
|
|
43075
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=1521, FP=249, P=85.9%, FPR=0.10%, lift=869.95. v7 was USEFUL (TP=1067, FP=248, lift=600.09). v8 was USEFUL (TP=454, FP=1).",
|
|
43076
|
+
aiSpecific: true,
|
|
43077
|
+
_v7Verdict: "USEFUL",
|
|
43078
|
+
_v7Lift: 600.09,
|
|
43079
|
+
_v7Recall: 45e-4,
|
|
43080
|
+
_v7FpRate: 14e-4,
|
|
43081
|
+
_v7Precision: 0.8114,
|
|
43082
|
+
_v8Verdict: "USEFUL",
|
|
43083
|
+
_v8Lift: 68516.08
|
|
43084
|
+
},
|
|
43085
|
+
"visual/math-gradient-hue-rotation": {
|
|
41622
43086
|
recall: 0,
|
|
41623
43087
|
fpRate: 0,
|
|
41624
43088
|
ratio: 0,
|
|
41625
43089
|
precision: 0,
|
|
41626
|
-
lastCalibratedAt: "2026-
|
|
43090
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41627
43091
|
verdict: "DORMANT",
|
|
41628
|
-
|
|
41629
|
-
|
|
41630
|
-
|
|
43092
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
43093
|
+
aiSpecific: true,
|
|
43094
|
+
_v7Verdict: "DORMANT",
|
|
43095
|
+
_v7Lift: 0,
|
|
43096
|
+
_v7Recall: 0,
|
|
43097
|
+
_v7FpRate: 0,
|
|
43098
|
+
_v7Precision: 0,
|
|
43099
|
+
_v8Verdict: "DORMANT",
|
|
43100
|
+
_v8Lift: 1,
|
|
43101
|
+
defaultOff: true
|
|
41631
43102
|
},
|
|
41632
|
-
"
|
|
41633
|
-
recall:
|
|
43103
|
+
"visual/math-rounded-entropy": {
|
|
43104
|
+
recall: 38e-4,
|
|
43105
|
+
fpRate: 2e-4,
|
|
43106
|
+
ratio: 3785.45,
|
|
43107
|
+
precision: 0.9461,
|
|
43108
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43109
|
+
verdict: "USEFUL",
|
|
43110
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=1105, FP=63, P=94.6%, FPR=0.02%, lift=3785.45. v7 was USEFUL (TP=876, FP=62, lift=2762.74). v8 was USEFUL (TP=229, FP=1).",
|
|
43111
|
+
aiSpecific: true,
|
|
43112
|
+
_v7Verdict: "USEFUL",
|
|
43113
|
+
_v7Lift: 2762.74,
|
|
43114
|
+
_v7Recall: 37e-4,
|
|
43115
|
+
_v7FpRate: 3e-4,
|
|
43116
|
+
_v7Precision: 0.9339,
|
|
43117
|
+
_v8Verdict: "USEFUL",
|
|
43118
|
+
_v8Lift: 68368.45
|
|
43119
|
+
},
|
|
43120
|
+
"visual/math-spacing-entropy": {
|
|
43121
|
+
recall: 18e-4,
|
|
43122
|
+
fpRate: 4e-4,
|
|
43123
|
+
ratio: 1898.99,
|
|
43124
|
+
precision: 0.8287,
|
|
43125
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43126
|
+
verdict: "USEFUL",
|
|
43127
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=532, FP=110, P=82.9%, FPR=0.04%, lift=1898.99. v7 was USEFUL (TP=425, FP=109, lift=1339.22). v8 was USEFUL (TP=107, FP=1).",
|
|
43128
|
+
aiSpecific: true,
|
|
43129
|
+
_v7Verdict: "USEFUL",
|
|
43130
|
+
_v7Lift: 1339.22,
|
|
43131
|
+
_v7Recall: 18e-4,
|
|
43132
|
+
_v7FpRate: 6e-4,
|
|
43133
|
+
_v7Precision: 0.7959,
|
|
43134
|
+
_v8Verdict: "USEFUL",
|
|
43135
|
+
_v8Lift: 68031.19
|
|
43136
|
+
},
|
|
43137
|
+
"visual/naturalness-anomaly": {
|
|
43138
|
+
recall: 0.1729,
|
|
43139
|
+
fpRate: 0.0687,
|
|
43140
|
+
ratio: 10.86,
|
|
43141
|
+
precision: 0.746,
|
|
43142
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43143
|
+
verdict: "USEFUL",
|
|
43144
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=50852, FP=17316, P=74.6%, FPR=6.87%, lift=10.86. v7 was USEFUL (TP=39319, FP=11382, lift=12.50). v8 was USEFUL (TP=11533, FP=5934).",
|
|
43145
|
+
aiSpecific: true,
|
|
43146
|
+
_v7Verdict: "USEFUL",
|
|
43147
|
+
_v7Lift: 12.5,
|
|
43148
|
+
_v7Recall: 0.1659,
|
|
43149
|
+
_v7FpRate: 0.0621,
|
|
43150
|
+
_v7Precision: 0.7755,
|
|
43151
|
+
_v8Verdict: "USEFUL",
|
|
43152
|
+
_v8Lift: 7.64
|
|
43153
|
+
},
|
|
43154
|
+
"visual/radius-scale-violation": {
|
|
43155
|
+
recall: 4e-4,
|
|
41634
43156
|
fpRate: 0,
|
|
41635
|
-
ratio:
|
|
41636
|
-
precision: 0,
|
|
41637
|
-
lastCalibratedAt: "2026-
|
|
41638
|
-
verdict: "
|
|
41639
|
-
|
|
41640
|
-
|
|
41641
|
-
|
|
43157
|
+
ratio: 82131.33,
|
|
43158
|
+
precision: 0.9774,
|
|
43159
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43160
|
+
verdict: "USEFUL",
|
|
43161
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=130, FP=3, P=97.7%, FPR=0.00%, lift=82131.33. v7 was USEFUL (TP=96, FP=3, lift=59285.01). v8 was USEFUL (TP=34, FP=0).",
|
|
43162
|
+
aiSpecific: false,
|
|
43163
|
+
_v7Verdict: "USEFUL",
|
|
43164
|
+
_v7Lift: 59285.01,
|
|
43165
|
+
_v7Recall: 4e-4,
|
|
43166
|
+
_v7FpRate: 0,
|
|
43167
|
+
_v7Precision: 0.9697,
|
|
43168
|
+
_v8Verdict: "USEFUL",
|
|
43169
|
+
_v8Lift: 99999
|
|
41642
43170
|
},
|
|
41643
|
-
"
|
|
43171
|
+
"visual/spacing-scale-violation": {
|
|
43172
|
+
recall: 86e-4,
|
|
43173
|
+
fpRate: 28e-4,
|
|
43174
|
+
ratio: 273.97,
|
|
43175
|
+
precision: 0.7792,
|
|
43176
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43177
|
+
verdict: "USEFUL",
|
|
43178
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=2531, FP=717, P=77.9%, FPR=0.28%, lift=273.97. v7 was USEFUL (TP=1981, FP=717, lift=187.83). v8 was USEFUL (TP=550, FP=0).",
|
|
43179
|
+
aiSpecific: false,
|
|
43180
|
+
_v7Verdict: "USEFUL",
|
|
43181
|
+
_v7Lift: 187.83,
|
|
43182
|
+
_v7Recall: 84e-4,
|
|
43183
|
+
_v7FpRate: 39e-4,
|
|
43184
|
+
_v7Precision: 0.7342,
|
|
43185
|
+
_v8Verdict: "USEFUL",
|
|
43186
|
+
_v8Lift: 99999
|
|
43187
|
+
},
|
|
43188
|
+
"wcag/dragging-movements": {
|
|
41644
43189
|
recall: 0,
|
|
41645
43190
|
fpRate: 0,
|
|
41646
|
-
ratio:
|
|
41647
|
-
precision: 0,
|
|
41648
|
-
lastCalibratedAt: "2026-
|
|
41649
|
-
verdict: "
|
|
41650
|
-
|
|
41651
|
-
|
|
41652
|
-
|
|
43191
|
+
ratio: 33610.67,
|
|
43192
|
+
precision: 0.4,
|
|
43193
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43194
|
+
verdict: "OK",
|
|
43195
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=2, FP=3, P=40.0%, FPR=0.00%, lift=33610.67. v7 was OK (TP=2, FP=3, lift=24455.07). v8 was DORMANT (TP=0, FP=0).",
|
|
43196
|
+
aiSpecific: false,
|
|
43197
|
+
_v7Verdict: "OK",
|
|
43198
|
+
_v7Lift: 24455.07,
|
|
43199
|
+
_v7Recall: 0,
|
|
43200
|
+
_v7FpRate: 0,
|
|
43201
|
+
_v7Precision: 0.4,
|
|
43202
|
+
_v8Verdict: "DORMANT",
|
|
43203
|
+
_v8Lift: 1
|
|
43204
|
+
},
|
|
43205
|
+
"wcag/focus-appearance": {
|
|
43206
|
+
recall: 28e-4,
|
|
43207
|
+
fpRate: 1e-4,
|
|
43208
|
+
ratio: 8397.24,
|
|
43209
|
+
precision: 0.966,
|
|
43210
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43211
|
+
verdict: "USEFUL",
|
|
43212
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=825, FP=29, P=96.6%, FPR=0.01%, lift=8397.24. v7 was USEFUL (TP=612, FP=24, lift=7353.82). v8 was USEFUL (TP=213, FP=5).",
|
|
43213
|
+
aiSpecific: false,
|
|
43214
|
+
_v7Verdict: "USEFUL",
|
|
43215
|
+
_v7Lift: 7353.82,
|
|
43216
|
+
_v7Recall: 26e-4,
|
|
43217
|
+
_v7FpRate: 1e-4,
|
|
43218
|
+
_v7Precision: 0.9623,
|
|
43219
|
+
_v8Verdict: "USEFUL",
|
|
43220
|
+
_v8Lift: 13418.41
|
|
43221
|
+
},
|
|
43222
|
+
"wcag/focus-obscured": {
|
|
43223
|
+
recall: 33e-4,
|
|
43224
|
+
fpRate: 7e-4,
|
|
43225
|
+
ratio: 1214.21,
|
|
43226
|
+
precision: 0.8478,
|
|
43227
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43228
|
+
verdict: "USEFUL",
|
|
43229
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=980, FP=176, P=84.8%, FPR=0.07%, lift=1214.21. v7 was USEFUL (TP=797, FP=175, lift=859.38). v8 was USEFUL (TP=183, FP=1).",
|
|
43230
|
+
aiSpecific: false,
|
|
43231
|
+
_v7Verdict: "USEFUL",
|
|
43232
|
+
_v7Lift: 859.38,
|
|
43233
|
+
_v7Recall: 34e-4,
|
|
43234
|
+
_v7FpRate: 1e-3,
|
|
43235
|
+
_v7Precision: 0.82,
|
|
43236
|
+
_v8Verdict: "USEFUL",
|
|
43237
|
+
_v8Lift: 68293.81
|
|
41653
43238
|
},
|
|
41654
43239
|
"wcag/missing-alt": {
|
|
41655
|
-
recall:
|
|
41656
|
-
fpRate:
|
|
41657
|
-
ratio:
|
|
41658
|
-
precision: 0,
|
|
41659
|
-
lastCalibratedAt: "2026-
|
|
41660
|
-
verdict: "
|
|
41661
|
-
|
|
41662
|
-
|
|
41663
|
-
|
|
43240
|
+
recall: 11e-4,
|
|
43241
|
+
fpRate: 7e-4,
|
|
43242
|
+
ratio: 935.33,
|
|
43243
|
+
precision: 0.6456,
|
|
43244
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
43245
|
+
verdict: "USEFUL",
|
|
43246
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): v7+v8 combined corpus (252080 neg + 294178 pos). v8.5 TP=317, FP=174, P=64.6%, FPR=0.07%, lift=935.33. v7 was DORMANT (TP=0, FP=0, lift=1.00). v8 was USEFUL (TP=317, FP=174).",
|
|
43247
|
+
aiSpecific: false,
|
|
43248
|
+
_v7Verdict: "DORMANT",
|
|
43249
|
+
_v7Lift: 1,
|
|
43250
|
+
_v7Recall: 0,
|
|
43251
|
+
_v7FpRate: 0,
|
|
43252
|
+
_v7Precision: 0,
|
|
43253
|
+
_v8Verdict: "USEFUL",
|
|
43254
|
+
_v8Lift: 254.79
|
|
41664
43255
|
},
|
|
41665
|
-
"
|
|
43256
|
+
"wcag/target-size": {
|
|
41666
43257
|
recall: 0,
|
|
41667
43258
|
fpRate: 0,
|
|
41668
43259
|
ratio: 0,
|
|
41669
43260
|
precision: 0,
|
|
41670
|
-
lastCalibratedAt: "2026-
|
|
43261
|
+
lastCalibratedAt: "2026-07-01T00:00:00Z",
|
|
41671
43262
|
verdict: "DORMANT",
|
|
41672
|
-
|
|
41673
|
-
|
|
41674
|
-
|
|
43263
|
+
_calibrationNote: "v8.5 calibration (v0.18.9, 2026-07-01): rule did not fire on v8.5 corpus (252080 neg + 294178 pos = 546258 files). Preserved v7 data. v7 verdict=DORMANT, v7 lift=0, v7 recall=0, v7 FPR=0, v7 precision=0.",
|
|
43264
|
+
aiSpecific: false,
|
|
43265
|
+
_v7Verdict: "DORMANT",
|
|
43266
|
+
_v7Lift: 0,
|
|
43267
|
+
_v7Recall: 0,
|
|
43268
|
+
_v7FpRate: 0,
|
|
43269
|
+
_v7Precision: 0,
|
|
43270
|
+
_v8Verdict: "DORMANT",
|
|
43271
|
+
_v8Lift: 1,
|
|
43272
|
+
defaultOff: true
|
|
41675
43273
|
}
|
|
41676
43274
|
};
|
|
41677
43275
|
|
|
@@ -41710,7 +43308,6 @@ async function scanFile(filePath, config, registry, cwd = process.cwd()) {
|
|
|
41710
43308
|
".kt",
|
|
41711
43309
|
".kts",
|
|
41712
43310
|
".dart",
|
|
41713
|
-
".rs",
|
|
41714
43311
|
".cpp",
|
|
41715
43312
|
".cc",
|
|
41716
43313
|
".cxx",
|