slopbrick 0.18.1 → 0.18.3

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.
@@ -7,6 +7,7 @@ var __export = (target, all) => {
7
7
  // src/engine/worker.ts
8
8
  import { isMainThread, parentPort, workerData } from "worker_threads";
9
9
  import { extname as extname6 } from "path";
10
+ import { join as join12 } from "path";
10
11
 
11
12
  // ../engine/dist/index.js
12
13
  import { readFile, writeFile, mkdir, access } from "fs/promises";
@@ -4271,10 +4272,10 @@ function parseSvelte(source) {
4271
4272
  const ast = parseScriptContent(script.content, isTypeScriptScript(script.openTag));
4272
4273
  return { ast, source };
4273
4274
  }
4274
- function cacheEnabled() {
4275
+ function legacyCacheEnabled() {
4275
4276
  return process.env.SLOP_AUDIT_CACHE === "1" || process.env.SLOP_AUDIT_CACHE === "true";
4276
4277
  }
4277
- function cacheRoot() {
4278
+ function legacyCacheRoot() {
4278
4279
  const override = process.env.SLOP_AUDIT_CACHE_ROOT;
4279
4280
  if (override) return override;
4280
4281
  return join(process.cwd(), ".slopbrick", "cache", "ast");
@@ -4282,11 +4283,11 @@ function cacheRoot() {
4282
4283
  function hashContent(content) {
4283
4284
  return createHash("md5").update(content, "utf-8").digest("hex");
4284
4285
  }
4285
- function cachePath(content) {
4286
- return join(cacheRoot(), `${hashContent(content)}.json`);
4286
+ function cachePathWithRoot(content, root) {
4287
+ return join(root, `${hashContent(content)}.json`);
4287
4288
  }
4288
- async function readCache(filePath, content) {
4289
- const path = cachePath(content);
4289
+ async function readCacheWithRoot(filePath, content, root) {
4290
+ const path = cachePathWithRoot(content, root);
4290
4291
  try {
4291
4292
  await access(path);
4292
4293
  const raw = await readFile(path, "utf8");
@@ -4299,8 +4300,8 @@ async function readCache(filePath, content) {
4299
4300
  }
4300
4301
  return void 0;
4301
4302
  }
4302
- async function writeCache(content, result) {
4303
- const path = cachePath(content);
4303
+ async function writeCacheWithRoot(content, result, root) {
4304
+ const path = cachePathWithRoot(content, root);
4304
4305
  await mkdir(dirname(path), { recursive: true });
4305
4306
  await writeFile(path, JSON.stringify(result), "utf8");
4306
4307
  }
@@ -4331,15 +4332,17 @@ function parseSource(source, filePath) {
4331
4332
  return parseWithSwc(source, filePath);
4332
4333
  }
4333
4334
  }
4334
- async function parseFile(filePath) {
4335
+ async function parseFile(filePath, opts) {
4335
4336
  const source = await readFile(filePath, "utf-8");
4336
- if (cacheEnabled()) {
4337
- const cached = await readCache(filePath, source);
4337
+ const useCache = opts?.cache?.enabled ?? legacyCacheEnabled();
4338
+ const cacheDir = opts?.cache?.root ?? legacyCacheRoot();
4339
+ if (useCache) {
4340
+ const cached = await readCacheWithRoot(filePath, source, cacheDir);
4338
4341
  if (cached) return cached;
4339
4342
  }
4340
4343
  const result = parseSource(source, filePath);
4341
- if (cacheEnabled()) {
4342
- await writeCache(source, result);
4344
+ if (useCache) {
4345
+ await writeCacheWithRoot(source, result, cacheDir);
4343
4346
  }
4344
4347
  return result;
4345
4348
  }
@@ -39705,7 +39708,8 @@ var signal_strength_default = {
39705
39708
  precision: 0.8968,
39706
39709
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39707
39710
  verdict: "USEFUL",
39708
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=1678, FP=193, P=89.7%, FPR=0.10%, lift=6.7. aiSpecific=True."
39711
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=1678, FP=193, P=89.7%, FPR=0.10%, lift=6.7. aiSpecific=True.",
39712
+ aiSpecific: true
39709
39713
  },
39710
39714
  "logic/math-any-density": {
39711
39715
  recall: 16e-4,
@@ -39715,7 +39719,8 @@ var signal_strength_default = {
39715
39719
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39716
39720
  verdict: "NOISY",
39717
39721
  _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. NOISY \u2014 TP=376, FP=247, P=60.4%, FPR=0.13%, lift=1.2. aiSpecific=True.",
39718
- defaultOff: true
39722
+ defaultOff: true,
39723
+ aiSpecific: true
39719
39724
  },
39720
39725
  "logic/boundary-violation": {
39721
39726
  recall: 0.0263,
@@ -39724,7 +39729,8 @@ var signal_strength_default = {
39724
39729
  precision: 0.6601,
39725
39730
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39726
39731
  verdict: "HYGIENE",
39727
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=6282, FP=3235, P=66.0%, FPR=1.75%, lift=1.5. aiSpecific=False."
39732
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=6282, FP=3235, P=66.0%, FPR=1.75%, lift=1.5. aiSpecific=False.",
39733
+ aiSpecific: false
39728
39734
  },
39729
39735
  "logic/reactive-hook-soup": {
39730
39736
  recall: 38e-4,
@@ -39733,7 +39739,8 @@ var signal_strength_default = {
39733
39739
  precision: 0.8476,
39734
39740
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39735
39741
  verdict: "USEFUL",
39736
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=901, FP=162, P=84.8%, FPR=0.09%, lift=4.3. aiSpecific=True."
39742
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=901, FP=162, P=84.8%, FPR=0.09%, lift=4.3. aiSpecific=True.",
39743
+ aiSpecific: true
39737
39744
  },
39738
39745
  "logic/optimistic-no-rollback": {
39739
39746
  recall: 12e-4,
@@ -39742,7 +39749,8 @@ var signal_strength_default = {
39742
39749
  precision: 0.824,
39743
39750
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39744
39751
  verdict: "USEFUL",
39745
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=281, FP=60, P=82.4%, FPR=0.03%, lift=3.6. aiSpecific=True."
39752
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=281, FP=60, P=82.4%, FPR=0.03%, lift=3.6. aiSpecific=True.",
39753
+ aiSpecific: true
39746
39754
  },
39747
39755
  "logic/zombie-state": {
39748
39756
  recall: 1e-4,
@@ -39751,7 +39759,8 @@ var signal_strength_default = {
39751
39759
  precision: 0.9231,
39752
39760
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39753
39761
  verdict: "USEFUL",
39754
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=24, FP=2, P=92.3%, FPR=0.00%, lift=9.3. aiSpecific=True."
39762
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=24, FP=2, P=92.3%, FPR=0.00%, lift=9.3. aiSpecific=True.",
39763
+ aiSpecific: true
39755
39764
  },
39756
39765
  "logic/math-gini-class-usage": {
39757
39766
  recall: 13e-4,
@@ -39760,7 +39769,8 @@ var signal_strength_default = {
39760
39769
  precision: 0.8683,
39761
39770
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39762
39771
  verdict: "USEFUL",
39763
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=310, FP=47, P=86.8%, FPR=0.03%, lift=5.1. aiSpecific=True."
39772
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=310, FP=47, P=86.8%, FPR=0.03%, lift=5.1. aiSpecific=True.",
39773
+ aiSpecific: true
39764
39774
  },
39765
39775
  "visual/math-color-cluster": {
39766
39776
  recall: 2e-4,
@@ -39769,7 +39779,8 @@ var signal_strength_default = {
39769
39779
  precision: 0.9206,
39770
39780
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39771
39781
  verdict: "USEFUL",
39772
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=58, FP=5, P=92.1%, FPR=0.00%, lift=9.0. aiSpecific=True."
39782
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=58, FP=5, P=92.1%, FPR=0.00%, lift=9.0. aiSpecific=True.",
39783
+ aiSpecific: true
39773
39784
  },
39774
39785
  "visual/math-default-font": {
39775
39786
  recall: 13e-4,
@@ -39778,7 +39789,8 @@ var signal_strength_default = {
39778
39789
  precision: 0.8151,
39779
39790
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39780
39791
  verdict: "USEFUL",
39781
- _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."
39792
+ _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.",
39793
+ aiSpecific: true
39782
39794
  },
39783
39795
  "visual/math-gradient-hue-rotation": {
39784
39796
  recall: 0,
@@ -39788,7 +39800,8 @@ var signal_strength_default = {
39788
39800
  lastCalibratedAt: "2026-06-25T00:00:00Z",
39789
39801
  verdict: "DORMANT",
39790
39802
  defaultOff: true,
39791
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Munsell, A. H. (1905), *A Color Notation*, Munsell Color Company; Itten, J. (1961), *The Art of Color*, Van Nostrand Reinhold. (Munsell color space + Itten color wheel \u2014 hue rotation analysis.)"
39803
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Munsell, A. H. (1905), *A Color Notation*, Munsell Color Company; Itten, J. (1961), *The Art of Color*, Van Nostrand Reinhold. (Munsell color space + Itten color wheel \u2014 hue rotation analysis.)",
39804
+ aiSpecific: true
39792
39805
  },
39793
39806
  "visual/math-rounded-entropy": {
39794
39807
  recall: 37e-4,
@@ -39797,7 +39810,8 @@ var signal_strength_default = {
39797
39810
  precision: 0.9339,
39798
39811
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39799
39812
  verdict: "USEFUL",
39800
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=876, FP=62, P=93.4%, FPR=0.03%, lift=10.9. aiSpecific=True."
39813
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=876, FP=62, P=93.4%, FPR=0.03%, lift=10.9. aiSpecific=True.",
39814
+ aiSpecific: true
39801
39815
  },
39802
39816
  "visual/math-font-entropy": {
39803
39817
  recall: 45e-4,
@@ -39806,7 +39820,8 @@ var signal_strength_default = {
39806
39820
  precision: 0.8114,
39807
39821
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39808
39822
  verdict: "USEFUL",
39809
- _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."
39823
+ _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.",
39824
+ aiSpecific: true
39810
39825
  },
39811
39826
  "visual/math-spacing-entropy": {
39812
39827
  recall: 18e-4,
@@ -39815,7 +39830,8 @@ var signal_strength_default = {
39815
39830
  precision: 0.7959,
39816
39831
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39817
39832
  verdict: "USEFUL",
39818
- _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."
39833
+ _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.",
39834
+ aiSpecific: true
39819
39835
  },
39820
39836
  "visual/clamp-soup": {
39821
39837
  recall: 0,
@@ -39825,7 +39841,8 @@ var signal_strength_default = {
39825
39841
  lastCalibratedAt: "2026-06-25T00:00:00Z",
39826
39842
  verdict: "DORMANT",
39827
39843
  defaultOff: true,
39828
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: W3C (2023), CSS Values and Units Module Level 4, W3C CR-css-values-4-20231218. (W3C clamp() spec \u2014 overuse is a code-smell, not a feature.)"
39844
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: W3C (2023), CSS Values and Units Module Level 4, W3C CR-css-values-4-20231218. (W3C clamp() spec \u2014 overuse is a code-smell, not a feature.)",
39845
+ aiSpecific: true
39829
39846
  },
39830
39847
  "component/giant-component": {
39831
39848
  recall: 0.0176,
@@ -39834,7 +39851,8 @@ var signal_strength_default = {
39834
39851
  precision: 0.7485,
39835
39852
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39836
39853
  verdict: "USEFUL",
39837
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=4205, FP=1413, P=74.8%, FPR=0.77%, lift=2.3. aiSpecific=True."
39854
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=4205, FP=1413, P=74.8%, FPR=0.77%, lift=2.3. aiSpecific=True.",
39855
+ aiSpecific: true
39838
39856
  },
39839
39857
  "component/shadcn-prop-mismatch": {
39840
39858
  recall: 13e-4,
@@ -39843,7 +39861,8 @@ var signal_strength_default = {
39843
39861
  precision: 0.929,
39844
39862
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39845
39863
  verdict: "USEFUL",
39846
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=314, FP=24, P=92.9%, FPR=0.01%, lift=10.1. aiSpecific=True."
39864
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=314, FP=24, P=92.9%, FPR=0.01%, lift=10.1. aiSpecific=True.",
39865
+ aiSpecific: true
39847
39866
  },
39848
39867
  "layout/math-grid-uniformity": {
39849
39868
  recall: 3e-4,
@@ -39852,7 +39871,8 @@ var signal_strength_default = {
39852
39871
  precision: 0.6907,
39853
39872
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39854
39873
  verdict: "OK",
39855
- _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."
39874
+ _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.",
39875
+ aiSpecific: true
39856
39876
  },
39857
39877
  "layout/math-element-uniformity": {
39858
39878
  recall: 28e-4,
@@ -39861,7 +39881,8 @@ var signal_strength_default = {
39861
39881
  precision: 0.7475,
39862
39882
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39863
39883
  verdict: "USEFUL",
39864
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=666, FP=225, P=74.7%, FPR=0.12%, lift=2.3. aiSpecific=True."
39884
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=666, FP=225, P=74.7%, FPR=0.12%, lift=2.3. aiSpecific=True.",
39885
+ aiSpecific: true
39865
39886
  },
39866
39887
  "typo/math-button-label-uniformity": {
39867
39888
  recall: 2e-4,
@@ -39870,7 +39891,8 @@ var signal_strength_default = {
39870
39891
  precision: 0.6379,
39871
39892
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39872
39893
  verdict: "HYGIENE",
39873
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=37, FP=21, P=63.8%, FPR=0.01%, lift=1.4. aiSpecific=False."
39894
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=37, FP=21, P=63.8%, FPR=0.01%, lift=1.4. aiSpecific=False.",
39895
+ aiSpecific: false
39874
39896
  },
39875
39897
  "perf/css-bloat": {
39876
39898
  recall: 0.0117,
@@ -39879,7 +39901,8 @@ var signal_strength_default = {
39879
39901
  precision: 0.8252,
39880
39902
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39881
39903
  verdict: "HYGIENE",
39882
- _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."
39904
+ _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.",
39905
+ aiSpecific: false
39883
39906
  },
39884
39907
  "wcag/focus-appearance": {
39885
39908
  recall: 26e-4,
@@ -39888,7 +39911,8 @@ var signal_strength_default = {
39888
39911
  precision: 0.9623,
39889
39912
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39890
39913
  verdict: "HYGIENE",
39891
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=612, FP=24, P=96.2%, FPR=0.01%, lift=19.7. aiSpecific=False."
39914
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=612, FP=24, P=96.2%, FPR=0.01%, lift=19.7. aiSpecific=False.",
39915
+ aiSpecific: false
39892
39916
  },
39893
39917
  "wcag/target-size": {
39894
39918
  recall: 0,
@@ -39898,7 +39922,8 @@ var signal_strength_default = {
39898
39922
  lastCalibratedAt: "2026-06-25T00:00:00Z",
39899
39923
  verdict: "DORMANT",
39900
39924
  defaultOff: true,
39901
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: W3C (2018), Web Content Accessibility Guidelines (WCAG) 2.1, Success Criterion 2.5.5 (Target Size); Fitts, P. M. (1954), \u2018The Information Capacity of the Human Motor System in Controlling the Amplitude of Movement\u2019, J. Exp. Psychol. 47(6):381-391. (WCAG 2.5.5 + Fitts's Law \u2014 minimum 24\xD724 CSS px tap target.)"
39925
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: W3C (2018), Web Content Accessibility Guidelines (WCAG) 2.1, Success Criterion 2.5.5 (Target Size); Fitts, P. M. (1954), \u2018The Information Capacity of the Human Motor System in Controlling the Amplitude of Movement\u2019, J. Exp. Psychol. 47(6):381-391. (WCAG 2.5.5 + Fitts's Law \u2014 minimum 24\xD724 CSS px tap target.)",
39926
+ aiSpecific: false
39902
39927
  },
39903
39928
  "component/multiple-components-per-file": {
39904
39929
  recall: 0.0681,
@@ -39907,7 +39932,8 @@ var signal_strength_default = {
39907
39932
  precision: 0.6294,
39908
39933
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39909
39934
  verdict: "HYGIENE",
39910
- _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."
39935
+ _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.",
39936
+ aiSpecific: false
39911
39937
  },
39912
39938
  "context/import-path-mismatch": {
39913
39939
  recall: 0.0739,
@@ -39916,7 +39942,8 @@ var signal_strength_default = {
39916
39942
  precision: 0.8079,
39917
39943
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39918
39944
  verdict: "HYGIENE",
39919
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=17672, FP=4202, P=80.8%, FPR=2.28%, lift=3.2. aiSpecific=False."
39945
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=17672, FP=4202, P=80.8%, FPR=2.28%, lift=3.2. aiSpecific=False.",
39946
+ aiSpecific: false
39920
39947
  },
39921
39948
  "logic/key-prop-missing": {
39922
39949
  recall: 17e-4,
@@ -39925,7 +39952,8 @@ var signal_strength_default = {
39925
39952
  precision: 0.6246,
39926
39953
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39927
39954
  verdict: "HYGIENE",
39928
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=416, FP=250, P=62.5%, FPR=0.14%, lift=1.3. aiSpecific=False."
39955
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=416, FP=250, P=62.5%, FPR=0.14%, lift=1.3. aiSpecific=False.",
39956
+ aiSpecific: false
39929
39957
  },
39930
39958
  "logic/math-variable-name-entropy": {
39931
39959
  recall: 2e-4,
@@ -39934,7 +39962,8 @@ var signal_strength_default = {
39934
39962
  precision: 0.5806,
39935
39963
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39936
39964
  verdict: "HYGIENE",
39937
- _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."
39965
+ _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.",
39966
+ aiSpecific: false
39938
39967
  },
39939
39968
  "security/public-admin-route": {
39940
39969
  recall: 28e-4,
@@ -39944,7 +39973,8 @@ var signal_strength_default = {
39944
39973
  lastCalibratedAt: "2026-06-26T22:30:00Z",
39945
39974
  verdict: "HYGIENE",
39946
39975
  _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]",
39947
- defaultOff: true
39976
+ defaultOff: true,
39977
+ aiSpecific: false
39948
39978
  },
39949
39979
  "security/unsafe-html-render": {
39950
39980
  recall: 13e-4,
@@ -39953,7 +39983,8 @@ var signal_strength_default = {
39953
39983
  precision: 0.661,
39954
39984
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39955
39985
  verdict: "HYGIENE",
39956
- _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."
39986
+ _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.",
39987
+ aiSpecific: false
39957
39988
  },
39958
39989
  "visual/naturalness-anomaly": {
39959
39990
  recall: 0.1645,
@@ -39962,7 +39993,8 @@ var signal_strength_default = {
39962
39993
  precision: 0.7755,
39963
39994
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39964
39995
  verdict: "USEFUL",
39965
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=39319, FP=11382, P=77.6%, FPR=6.17%, lift=2.7. aiSpecific=True."
39996
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=39319, FP=11382, P=77.6%, FPR=6.17%, lift=2.7. aiSpecific=True.",
39997
+ aiSpecific: true
39966
39998
  },
39967
39999
  "perf/halstead-anomaly": {
39968
40000
  recall: 0,
@@ -39971,7 +40003,8 @@ var signal_strength_default = {
39971
40003
  precision: 0.75,
39972
40004
  lastCalibratedAt: "2026-06-27T12:00:00Z",
39973
40005
  verdict: "USEFUL",
39974
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=3, FP=1, P=75.0%, FPR=0.00%, lift=2.3. aiSpecific=True."
40006
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=3, FP=1, P=75.0%, FPR=0.00%, lift=2.3. aiSpecific=True.",
40007
+ aiSpecific: true
39975
40008
  },
39976
40009
  "arch/astro-island-leak": {
39977
40010
  recall: 0,
@@ -39981,7 +40014,8 @@ var signal_strength_default = {
39981
40014
  lastCalibratedAt: "2026-06-25T00:00:00Z",
39982
40015
  verdict: "DORMANT",
39983
40016
  defaultOff: true,
39984
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Hevery, M. (2022), \u2018Islands Architecture: A New Pattern for Server-Component Frameworks\u2019, ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages & Applications (OOPSLA), invited talk; Astro Documentation (2023), https://docs.astro.build. (Astro Islands architecture \u2014 client JS should not leak into server components.)"
40017
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Hevery, M. (2022), \u2018Islands Architecture: A New Pattern for Server-Component Frameworks\u2019, ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages & Applications (OOPSLA), invited talk; Astro Documentation (2023), https://docs.astro.build. (Astro Islands architecture \u2014 client JS should not leak into server components.)",
40018
+ aiSpecific: true
39985
40019
  },
39986
40020
  "logic/qwik-hook-leak": {
39987
40021
  recall: 0,
@@ -39991,7 +40025,8 @@ var signal_strength_default = {
39991
40025
  lastCalibratedAt: "2026-06-25T00:00:00Z",
39992
40026
  verdict: "DORMANT",
39993
40027
  defaultOff: true,
39994
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Hevery, M. (2022), \u2018Qwik: A Resumable JavaScript Framework\u2019, ACM SIGPLAN OOPSLA companion; Builder.io Technical Report. (Qwik resumability \u2014 serializing state avoids hydration cost.)"
40028
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Hevery, M. (2022), \u2018Qwik: A Resumable JavaScript Framework\u2019, ACM SIGPLAN OOPSLA companion; Builder.io Technical Report. (Qwik resumability \u2014 serializing state avoids hydration cost.)",
40029
+ aiSpecific: true
39995
40030
  },
39996
40031
  "test/missing-edge-case": {
39997
40032
  recall: 0,
@@ -40001,7 +40036,8 @@ var signal_strength_default = {
40001
40036
  lastCalibratedAt: "2026-06-25T00:00:00Z",
40002
40037
  verdict: "DORMANT",
40003
40038
  defaultOff: true,
40004
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Myers, G. J. (1979), *The Art of Software Testing*, Wiley-Interscience (canonical boundary value analysis reference); Beizer, B. (1990), *Software Testing Techniques*, 2nd ed., Van Nostrand Reinhold. (Boundary value analysis \u2014 empty / zero / max / null / type-boundary cases.)"
40039
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Myers, G. J. (1979), *The Art of Software Testing*, Wiley-Interscience (canonical boundary value analysis reference); Beizer, B. (1990), *Software Testing Techniques*, 2nd ed., Van Nostrand Reinhold. (Boundary value analysis \u2014 empty / zero / max / null / type-boundary cases.)",
40040
+ aiSpecific: true
40005
40041
  },
40006
40042
  "typo/calc-fontsize": {
40007
40043
  recall: 0,
@@ -40011,7 +40047,8 @@ var signal_strength_default = {
40011
40047
  lastCalibratedAt: "2026-06-25T00:00:00Z",
40012
40048
  verdict: "DORMANT",
40013
40049
  defaultOff: true,
40014
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Marcotte, E. (2016), *Responsive Design: Patterns & Principles*, A Book Apart; Brown, J. (2018), *Every Layout*, self-published (rel='https://every-layout.dev'). (Fluid typography via clamp(min, preferred, max).)"
40050
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Marcotte, E. (2016), *Responsive Design: Patterns & Principles*, A Book Apart; Brown, J. (2018), *Every Layout*, self-published (rel='https://every-layout.dev'). (Fluid typography via clamp(min, preferred, max).)",
40051
+ aiSpecific: false
40015
40052
  },
40016
40053
  "typo/clamp-offscale": {
40017
40054
  recall: 0,
@@ -40021,7 +40058,8 @@ var signal_strength_default = {
40021
40058
  lastCalibratedAt: "2026-06-25T00:00:00Z",
40022
40059
  verdict: "DORMANT",
40023
40060
  defaultOff: true,
40024
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: W3C (2023), CSS Values 4 \xA77.2 (Functional Notations: clamp()); Brown, J. (2018), *Every Layout*. (CSS clamp() \u2014 off-scale (negative, >10rem) values are typos.)"
40061
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: W3C (2023), CSS Values 4 \xA77.2 (Functional Notations: clamp()); Brown, J. (2018), *Every Layout*. (CSS clamp() \u2014 off-scale (negative, >10rem) values are typos.)",
40062
+ aiSpecific: false
40025
40063
  },
40026
40064
  "typo/math-cta-vocabulary": {
40027
40065
  recall: 0,
@@ -40031,7 +40069,8 @@ var signal_strength_default = {
40031
40069
  lastCalibratedAt: "2026-06-25T00:00:00Z",
40032
40070
  verdict: "DORMANT",
40033
40071
  defaultOff: true,
40034
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Cialdini, R. B. (1984), *Influence: The Psychology of Persuasion*, Harper Business; Krug, S. (2000), *Don't Make Me Think*, 2nd ed., New Riders. (CTA wording \u2014 vague labels reduce click-through per Cialdini commitment/consistency.)"
40072
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Cialdini, R. B. (1984), *Influence: The Psychology of Persuasion*, Harper Business; Krug, S. (2000), *Don't Make Me Think*, 2nd ed., New Riders. (CTA wording \u2014 vague labels reduce click-through per Cialdini commitment/consistency.)",
40073
+ aiSpecific: true
40035
40074
  },
40036
40075
  "layout/forced-layout": {
40037
40076
  recall: 0,
@@ -40041,7 +40080,8 @@ var signal_strength_default = {
40041
40080
  lastCalibratedAt: "2026-06-25T00:00:00Z",
40042
40081
  verdict: "DORMANT",
40043
40082
  defaultOff: true,
40044
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Mozilla Developer Network (2023), CSS Grid Layout, https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout; W3C (2023), CSS Grid Layout Module Level 3, W3C CR-css-grid-3-20231218. (CSS Grid spec \u2014 forced layout is a fallback hack, not the idiomatic approach.)"
40083
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Mozilla Developer Network (2023), CSS Grid Layout, https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout; W3C (2023), CSS Grid Layout Module Level 3, W3C CR-css-grid-3-20231218. (CSS Grid spec \u2014 forced layout is a fallback hack, not the idiomatic approach.)",
40084
+ aiSpecific: true
40045
40085
  },
40046
40086
  "visual/generic-centering": {
40047
40087
  recall: 0,
@@ -40051,7 +40091,8 @@ var signal_strength_default = {
40051
40091
  lastCalibratedAt: "2026-06-25T00:00:00Z",
40052
40092
  verdict: "DORMANT",
40053
40093
  defaultOff: true,
40054
- _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Wertheimer, M. (1923), \u2018Untersuchungen zur Lehre von der Gestalt II\u2019, Psychologische Forschung 4:301-350; M\xFCller-Brockmann, J. (1981), *Grid Systems in Graphic Design*, Niggli. (Gestalt centering + grid systems \u2014 generic centering is anti-grid.)"
40094
+ _calibrationNote: "v0.10.1 ship \u2014 not in v4 per-rule table. Default-off until calibration data lands. Backed by: Wertheimer, M. (1923), \u2018Untersuchungen zur Lehre von der Gestalt II\u2019, Psychologische Forschung 4:301-350; M\xFCller-Brockmann, J. (1981), *Grid Systems in Graphic Design*, Niggli. (Gestalt centering + grid systems \u2014 generic centering is anti-grid.)",
40095
+ aiSpecific: true
40055
40096
  },
40056
40097
  "product/terminology-drift": {
40057
40098
  recall: 85e-4,
@@ -40060,7 +40101,8 @@ var signal_strength_default = {
40060
40101
  precision: 0.7956,
40061
40102
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40062
40103
  verdict: "HYGIENE",
40063
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=2028, FP=521, P=79.6%, FPR=0.28%, lift=3.0. aiSpecific=False."
40104
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=2028, FP=521, P=79.6%, FPR=0.28%, lift=3.0. aiSpecific=False.",
40105
+ aiSpecific: false
40064
40106
  },
40065
40107
  "product/ux-pattern-fragmentation": {
40066
40108
  recall: 1e-4,
@@ -40069,7 +40111,8 @@ var signal_strength_default = {
40069
40111
  precision: 0.8,
40070
40112
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40071
40113
  verdict: "USEFUL",
40072
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=32, FP=8, P=80.0%, FPR=0.00%, lift=3.1. aiSpecific=True."
40114
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=32, FP=8, P=80.0%, FPR=0.00%, lift=3.1. aiSpecific=True.",
40115
+ aiSpecific: true
40073
40116
  },
40074
40117
  "security/sql-construction": {
40075
40118
  recall: 3e-3,
@@ -40078,7 +40121,8 @@ var signal_strength_default = {
40078
40121
  precision: 0.6788,
40079
40122
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40080
40123
  verdict: "OK",
40081
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. OK \u2014 TP=710, FP=336, P=67.9%, FPR=0.18%, lift=1.6. aiSpecific=True."
40124
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. OK \u2014 TP=710, FP=336, P=67.9%, FPR=0.18%, lift=1.6. aiSpecific=True.",
40125
+ aiSpecific: true
40082
40126
  },
40083
40127
  "security/missing-auth-check": {
40084
40128
  recall: 63e-4,
@@ -40087,7 +40131,8 @@ var signal_strength_default = {
40087
40131
  precision: 0.9247,
40088
40132
  lastCalibratedAt: "2026-06-26T22:30:00Z",
40089
40133
  verdict: "USEFUL",
40090
- _calibrationNote: "v4 corpus (2026-06-25): 95,599 neg + 76,550 pos (frontend, TS/TSX/JS/JSX). USEFUL \u2014 TP=479, FP=39, P=92.5%, FPR=0.04%, lift=15.3."
40134
+ _calibrationNote: "v4 corpus (2026-06-25): 95,599 neg + 76,550 pos (frontend, TS/TSX/JS/JSX). USEFUL \u2014 TP=479, FP=39, P=92.5%, FPR=0.04%, lift=15.3.",
40135
+ aiSpecific: false
40091
40136
  },
40092
40137
  "security/dangerous-cors": {
40093
40138
  recall: 5e-4,
@@ -40097,7 +40142,8 @@ var signal_strength_default = {
40097
40142
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40098
40143
  verdict: "NOISY",
40099
40144
  _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. NOISY \u2014 TP=114, FP=84, P=57.6%, FPR=0.05%, lift=1.0. aiSpecific=True.",
40100
- defaultOff: true
40145
+ defaultOff: true,
40146
+ aiSpecific: true
40101
40147
  },
40102
40148
  "test/duplicate-setup": {
40103
40149
  recall: 1e-4,
@@ -40106,7 +40152,8 @@ var signal_strength_default = {
40106
40152
  precision: 0.8235,
40107
40153
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40108
40154
  verdict: "USEFUL",
40109
- _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."
40155
+ _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.",
40156
+ aiSpecific: true
40110
40157
  },
40111
40158
  "logic/ghost-defensive": {
40112
40159
  recall: 1e-4,
@@ -40115,7 +40162,8 @@ var signal_strength_default = {
40115
40162
  precision: 0.8824,
40116
40163
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40117
40164
  verdict: "USEFUL",
40118
- _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."
40165
+ _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.",
40166
+ aiSpecific: true
40119
40167
  },
40120
40168
  "typo/calc-raw-px": {
40121
40169
  recall: 0,
@@ -40124,7 +40172,8 @@ var signal_strength_default = {
40124
40172
  precision: 0.75,
40125
40173
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40126
40174
  verdict: "HYGIENE",
40127
- _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."
40175
+ _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.",
40176
+ aiSpecific: false
40128
40177
  },
40129
40178
  "security/fail-open-auth": {
40130
40179
  recall: 0,
@@ -40133,7 +40182,8 @@ var signal_strength_default = {
40133
40182
  precision: 1,
40134
40183
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40135
40184
  verdict: "USEFUL",
40136
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=1, FP=0, P=100.0%, FPR=0.00%, lift=inf. aiSpecific=True."
40185
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=1, FP=0, P=100.0%, FPR=0.00%, lift=inf. aiSpecific=True.",
40186
+ aiSpecific: true
40137
40187
  },
40138
40188
  "wcag/focus-obscured": {
40139
40189
  recall: 33e-4,
@@ -40142,7 +40192,8 @@ var signal_strength_default = {
40142
40192
  precision: 0.82,
40143
40193
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40144
40194
  verdict: "HYGIENE",
40145
- _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."
40195
+ _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.",
40196
+ aiSpecific: false
40146
40197
  },
40147
40198
  "visual/arbitrary-escape": {
40148
40199
  recall: 25e-4,
@@ -40151,7 +40202,8 @@ var signal_strength_default = {
40151
40202
  precision: 0.7802,
40152
40203
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40153
40204
  verdict: "USEFUL",
40154
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=600, FP=169, P=78.0%, FPR=0.09%, lift=2.7. aiSpecific=True."
40205
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=600, FP=169, P=78.0%, FPR=0.09%, lift=2.7. aiSpecific=True.",
40206
+ aiSpecific: true
40155
40207
  },
40156
40208
  "security/hardcoded-secret": {
40157
40209
  recall: 13e-4,
@@ -40160,7 +40212,8 @@ var signal_strength_default = {
40160
40212
  precision: 0.6899,
40161
40213
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40162
40214
  verdict: "OK",
40163
- _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."
40215
+ _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.",
40216
+ aiSpecific: true
40164
40217
  },
40165
40218
  "visual/radius-scale-violation": {
40166
40219
  recall: 4e-4,
@@ -40169,7 +40222,8 @@ var signal_strength_default = {
40169
40222
  precision: 0.9697,
40170
40223
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40171
40224
  verdict: "HYGIENE",
40172
- _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."
40225
+ _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.",
40226
+ aiSpecific: false
40173
40227
  },
40174
40228
  "test/fake-placeholder": {
40175
40229
  recall: 53e-4,
@@ -40178,7 +40232,8 @@ var signal_strength_default = {
40178
40232
  precision: 0.7854,
40179
40233
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40180
40234
  verdict: "USEFUL",
40181
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=1259, FP=344, P=78.5%, FPR=0.19%, lift=2.8. aiSpecific=True."
40235
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=1259, FP=344, P=78.5%, FPR=0.19%, lift=2.8. aiSpecific=True.",
40236
+ aiSpecific: true
40182
40237
  },
40183
40238
  "security/exposed-env-var": {
40184
40239
  recall: 6e-4,
@@ -40187,7 +40242,8 @@ var signal_strength_default = {
40187
40242
  precision: 0.5387,
40188
40243
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40189
40244
  verdict: "HYGIENE",
40190
- _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."
40245
+ _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.",
40246
+ aiSpecific: false
40191
40247
  },
40192
40248
  "perf/cls-image": {
40193
40249
  recall: 2e-4,
@@ -40196,7 +40252,8 @@ var signal_strength_default = {
40196
40252
  precision: 0.5104,
40197
40253
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40198
40254
  verdict: "HYGIENE",
40199
- _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."
40255
+ _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.",
40256
+ aiSpecific: false
40200
40257
  },
40201
40258
  "layout/gap-monopoly": {
40202
40259
  recall: 4e-4,
@@ -40205,7 +40262,8 @@ var signal_strength_default = {
40205
40262
  precision: 0.7928,
40206
40263
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40207
40264
  verdict: "HYGIENE",
40208
- _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."
40265
+ _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.",
40266
+ aiSpecific: false
40209
40267
  },
40210
40268
  "visual/spacing-scale-violation": {
40211
40269
  recall: 83e-4,
@@ -40214,7 +40272,8 @@ var signal_strength_default = {
40214
40272
  precision: 0.7342,
40215
40273
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40216
40274
  verdict: "HYGIENE",
40217
- _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."
40275
+ _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.",
40276
+ aiSpecific: false
40218
40277
  },
40219
40278
  "visual/inline-style-dominance": {
40220
40279
  recall: 96e-4,
@@ -40223,7 +40282,8 @@ var signal_strength_default = {
40223
40282
  precision: 0.6535,
40224
40283
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40225
40284
  verdict: "HYGIENE",
40226
- _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."
40285
+ _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.",
40286
+ aiSpecific: false
40227
40287
  },
40228
40288
  "layout/spacing-grid": {
40229
40289
  recall: 2e-4,
@@ -40232,7 +40292,8 @@ var signal_strength_default = {
40232
40292
  precision: 0.7222,
40233
40293
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40234
40294
  verdict: "HYGIENE",
40235
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=39, FP=15, P=72.2%, FPR=0.01%, lift=2.0. aiSpecific=False."
40295
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=39, FP=15, P=72.2%, FPR=0.01%, lift=2.0. aiSpecific=False.",
40296
+ aiSpecific: false
40236
40297
  },
40237
40298
  "wcag/dragging-movements": {
40238
40299
  recall: 0,
@@ -40241,7 +40302,8 @@ var signal_strength_default = {
40241
40302
  precision: 0.4,
40242
40303
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40243
40304
  verdict: "HYGIENE",
40244
- _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."
40305
+ _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.",
40306
+ aiSpecific: false
40245
40307
  },
40246
40308
  "test/weak-assertion": {
40247
40309
  recall: 0.0414,
@@ -40250,7 +40312,8 @@ var signal_strength_default = {
40250
40312
  precision: 0.8622,
40251
40313
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40252
40314
  verdict: "USEFUL",
40253
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=9906, FP=1583, P=86.2%, FPR=0.86%, lift=4.8. aiSpecific=True."
40315
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=9906, FP=1583, P=86.2%, FPR=0.86%, lift=4.8. aiSpecific=True.",
40316
+ aiSpecific: true
40254
40317
  },
40255
40318
  "logic/bayesian-conditional": {
40256
40319
  recall: 0,
@@ -40260,7 +40323,8 @@ var signal_strength_default = {
40260
40323
  lastCalibratedAt: "2026-06-27T00:00:00Z",
40261
40324
  verdict: "DORMANT",
40262
40325
  defaultOff: true,
40263
- _calibrationNote: "v0.12.0 ship \u2014 new Bayesian LR-combiner rule (Bento et al. 2024 *Neurocomputing*). Default-off until v0.12 corpus re-calibration lands. Threshold P(AI|fires) \u2265 0.7; posterior computed from per-rule likelihood ratios."
40326
+ _calibrationNote: "v0.12.0 ship \u2014 new Bayesian LR-combiner rule (Bento et al. 2024 *Neurocomputing*). Default-off until v0.12 corpus re-calibration lands. Threshold P(AI|fires) \u2265 0.7; posterior computed from per-rule likelihood ratios.",
40327
+ aiSpecific: true
40264
40328
  },
40265
40329
  "logic/heaps-deviation": {
40266
40330
  recall: 0.0122,
@@ -40269,7 +40333,8 @@ var signal_strength_default = {
40269
40333
  precision: 0.5461,
40270
40334
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40271
40335
  verdict: "HYGIENE",
40272
- _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."
40336
+ _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.",
40337
+ aiSpecific: false
40273
40338
  },
40274
40339
  "logic/ks-distribution-shift": {
40275
40340
  recall: 0.6375,
@@ -40278,7 +40343,8 @@ var signal_strength_default = {
40278
40343
  precision: 0.7096,
40279
40344
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40280
40345
  verdict: "HYGIENE",
40281
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=152391, FP=62358, P=71.0%, FPR=33.80%, lift=1.9. aiSpecific=False."
40346
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=152391, FP=62358, P=71.0%, FPR=33.80%, lift=1.9. aiSpecific=False.",
40347
+ aiSpecific: false
40282
40348
  },
40283
40349
  "logic/zipf-slope-anomaly": {
40284
40350
  recall: 0.0156,
@@ -40287,7 +40353,8 @@ var signal_strength_default = {
40287
40353
  precision: 0.6983,
40288
40354
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40289
40355
  verdict: "HYGIENE",
40290
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=3718, FP=1606, P=69.8%, FPR=0.87%, lift=1.8. aiSpecific=False."
40356
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. HYGIENE \u2014 TP=3718, FP=1606, P=69.8%, FPR=0.87%, lift=1.8. aiSpecific=False.",
40357
+ aiSpecific: false
40291
40358
  },
40292
40359
  "ai/markdown-leakage": {
40293
40360
  recall: 0,
@@ -40296,7 +40363,8 @@ var signal_strength_default = {
40296
40363
  precision: 0.7143,
40297
40364
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40298
40365
  verdict: "OK",
40299
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. OK \u2014 TP=5, FP=2, P=71.4%, FPR=0.00%, lift=1.9. aiSpecific=True."
40366
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. OK \u2014 TP=5, FP=2, P=71.4%, FPR=0.00%, lift=1.9. aiSpecific=True.",
40367
+ aiSpecific: true
40300
40368
  },
40301
40369
  "ai/comment-ratio": {
40302
40370
  recall: 0.2523,
@@ -40305,7 +40373,8 @@ var signal_strength_default = {
40305
40373
  precision: 0.6687,
40306
40374
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40307
40375
  verdict: "OK",
40308
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. OK \u2014 TP=60308, FP=29876, P=66.9%, FPR=16.19%, lift=1.6. aiSpecific=True."
40376
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. OK \u2014 TP=60308, FP=29876, P=66.9%, FPR=16.19%, lift=1.6. aiSpecific=True.",
40377
+ aiSpecific: true
40309
40378
  },
40310
40379
  "ai/whitespace-regularity": {
40311
40380
  recall: 0.0731,
@@ -40315,7 +40384,8 @@ var signal_strength_default = {
40315
40384
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40316
40385
  verdict: "NOISY",
40317
40386
  _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. NOISY \u2014 TP=17466, FP=13438, P=56.5%, FPR=7.28%, lift=1.0. aiSpecific=True.",
40318
- defaultOff: true
40387
+ defaultOff: true,
40388
+ aiSpecific: true
40319
40389
  },
40320
40390
  "ai/text-like-ratio": {
40321
40391
  recall: 0,
@@ -40324,7 +40394,8 @@ var signal_strength_default = {
40324
40394
  precision: 0.75,
40325
40395
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40326
40396
  verdict: "USEFUL",
40327
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=3, FP=1, P=75.0%, FPR=0.00%, lift=2.3. aiSpecific=True."
40397
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=3, FP=1, P=75.0%, FPR=0.00%, lift=2.3. aiSpecific=True.",
40398
+ aiSpecific: true
40328
40399
  },
40329
40400
  "ai/errors-near-eof": {
40330
40401
  recall: 0.0697,
@@ -40334,7 +40405,8 @@ var signal_strength_default = {
40334
40405
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40335
40406
  verdict: "NOISY",
40336
40407
  _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. NOISY \u2014 TP=16673, FP=10112, P=62.2%, FPR=5.48%, lift=1.3. aiSpecific=True.",
40337
- defaultOff: true
40408
+ defaultOff: true,
40409
+ aiSpecific: true
40338
40410
  },
40339
40411
  "ai/any-density": {
40340
40412
  recall: 55e-4,
@@ -40344,7 +40416,8 @@ var signal_strength_default = {
40344
40416
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40345
40417
  verdict: "NOISY",
40346
40418
  _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. NOISY \u2014 TP=1313, FP=758, P=63.4%, FPR=0.41%, lift=1.3. aiSpecific=True.",
40347
- defaultOff: true
40419
+ defaultOff: true,
40420
+ aiSpecific: true
40348
40421
  },
40349
40422
  "ai/renyi-profile": {
40350
40423
  recall: 0,
@@ -40354,7 +40427,8 @@ var signal_strength_default = {
40354
40427
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40355
40428
  verdict: "INVERTED",
40356
40429
  _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. INVERTED \u2014 TP=3, FP=9, P=25.0%, FPR=0.00%, lift=0.3. aiSpecific=True.",
40357
- defaultOff: true
40430
+ defaultOff: true,
40431
+ aiSpecific: true
40358
40432
  },
40359
40433
  "ai/log-rank-histogram": {
40360
40434
  recall: 0,
@@ -40363,7 +40437,8 @@ var signal_strength_default = {
40363
40437
  precision: 0,
40364
40438
  lastCalibratedAt: "2026-06-27T00:00:00Z",
40365
40439
  verdict: "OK",
40366
- _calibrationNote: "v0.13.0 stub: rule implemented per Gehrmann 2019 GLTR; calibration on v7 corpus pending. v0.13.0: marked OK (peer-reviewed math backing; lift=0 because v7 calibration has not been run yet \u2014 will be re-evaluated)."
40440
+ _calibrationNote: "v0.13.0 stub: rule implemented per Gehrmann 2019 GLTR; calibration on v7 corpus pending. v0.13.0: marked OK (peer-reviewed math backing; lift=0 because v7 calibration has not been run yet \u2014 will be re-evaluated).",
40441
+ aiSpecific: true
40367
40442
  },
40368
40443
  "ai/segment-surprisal-cv": {
40369
40444
  recall: 0.182,
@@ -40372,7 +40447,8 @@ var signal_strength_default = {
40372
40447
  precision: 0.7438,
40373
40448
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40374
40449
  verdict: "USEFUL",
40375
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=43498, FP=14983, P=74.4%, FPR=8.12%, lift=2.2. aiSpecific=True."
40450
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=43498, FP=14983, P=74.4%, FPR=8.12%, lift=2.2. aiSpecific=True.",
40451
+ aiSpecific: true
40376
40452
  },
40377
40453
  "ai/compression-profile": {
40378
40454
  recall: 0.3139,
@@ -40381,7 +40457,8 @@ var signal_strength_default = {
40381
40457
  precision: 0.732,
40382
40458
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40383
40459
  verdict: "USEFUL",
40384
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=75031, FP=27473, P=73.2%, FPR=14.89%, lift=2.1. aiSpecific=True."
40460
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=75031, FP=27473, P=73.2%, FPR=14.89%, lift=2.1. aiSpecific=True.",
40461
+ aiSpecific: true
40385
40462
  },
40386
40463
  "ai/tailwind-color-overuse": {
40387
40464
  recall: 0.0216,
@@ -40390,7 +40467,8 @@ var signal_strength_default = {
40390
40467
  precision: 0.8436,
40391
40468
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40392
40469
  verdict: "USEFUL",
40393
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=5169, FP=958, P=84.4%, FPR=0.52%, lift=4.2. aiSpecific=True."
40470
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=5169, FP=958, P=84.4%, FPR=0.52%, lift=4.2. aiSpecific=True.",
40471
+ aiSpecific: true
40394
40472
  },
40395
40473
  "ai/default-react-stack": {
40396
40474
  recall: 1e-3,
@@ -40399,7 +40477,8 @@ var signal_strength_default = {
40399
40477
  precision: 0.9957,
40400
40478
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40401
40479
  verdict: "USEFUL",
40402
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=231, FP=1, P=99.6%, FPR=0.00%, lift=178.3. aiSpecific=True."
40480
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=231, FP=1, P=99.6%, FPR=0.00%, lift=178.3. aiSpecific=True.",
40481
+ aiSpecific: true
40403
40482
  },
40404
40483
  "ai/library-reinvention": {
40405
40484
  recall: 3e-4,
@@ -40408,7 +40487,8 @@ var signal_strength_default = {
40408
40487
  precision: 0.9275,
40409
40488
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40410
40489
  verdict: "USEFUL",
40411
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=64, FP=5, P=92.8%, FPR=0.00%, lift=9.9. aiSpecific=True."
40490
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=64, FP=5, P=92.8%, FPR=0.00%, lift=9.9. aiSpecific=True.",
40491
+ aiSpecific: true
40412
40492
  },
40413
40493
  "ai/state-default-overuse": {
40414
40494
  recall: 29e-4,
@@ -40417,7 +40497,8 @@ var signal_strength_default = {
40417
40497
  precision: 0.8161,
40418
40498
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40419
40499
  verdict: "USEFUL",
40420
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=701, FP=158, P=81.6%, FPR=0.09%, lift=3.4. aiSpecific=True."
40500
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=701, FP=158, P=81.6%, FPR=0.09%, lift=3.4. aiSpecific=True.",
40501
+ aiSpecific: true
40421
40502
  },
40422
40503
  "ai/fetch-default-overuse": {
40423
40504
  recall: 28e-4,
@@ -40426,7 +40507,8 @@ var signal_strength_default = {
40426
40507
  precision: 0.8976,
40427
40508
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40428
40509
  verdict: "USEFUL",
40429
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=666, FP=76, P=89.8%, FPR=0.04%, lift=6.8. aiSpecific=True."
40510
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=666, FP=76, P=89.8%, FPR=0.04%, lift=6.8. aiSpecific=True.",
40511
+ aiSpecific: true
40430
40512
  },
40431
40513
  "ai/console-debug-storm": {
40432
40514
  recall: 8e-3,
@@ -40435,7 +40517,8 @@ var signal_strength_default = {
40435
40517
  precision: 0.9161,
40436
40518
  lastCalibratedAt: "2026-06-27T12:00:00Z",
40437
40519
  verdict: "USEFUL",
40438
- _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=1912, FP=175, P=91.6%, FPR=0.09%, lift=8.4. aiSpecific=True."
40520
+ _calibrationNote: "v7 corpus re-calibration (2026-06-27, min-date=2025-01-01): 184488 neg + 239054 pos. USEFUL \u2014 TP=1912, FP=175, P=91.6%, FPR=0.09%, lift=8.4. aiSpecific=True.",
40521
+ aiSpecific: true
40439
40522
  },
40440
40523
  "db/missing-fk-index": {
40441
40524
  recall: 0,
@@ -40445,7 +40528,8 @@ var signal_strength_default = {
40445
40528
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40446
40529
  verdict: "DORMANT",
40447
40530
  defaultOff: true,
40448
- _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: PostgreSQL Global Development Group (2024), *PostgreSQL 16 Documentation \xA75.4 (Constraints)*, https://www.postgresql.org/docs/16/ddl-constraints.html; Squawk (2023), *Postgres linter rules*, https://github.com/sqllabs/squawk, rule `require-index-for-fk`. (Foreign key columns need a matching index \u2014 sequential scan on parent delete is a canonical Postgres anti-pattern.)"
40531
+ _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: PostgreSQL Global Development Group (2024), *PostgreSQL 16 Documentation \xA75.4 (Constraints)*, https://www.postgresql.org/docs/16/ddl-constraints.html; Squawk (2023), *Postgres linter rules*, https://github.com/sqllabs/squawk, rule `require-index-for-fk`. (Foreign key columns need a matching index \u2014 sequential scan on parent delete is a canonical Postgres anti-pattern.)",
40532
+ aiSpecific: false
40449
40533
  },
40450
40534
  "db/duplicate-index": {
40451
40535
  recall: 0,
@@ -40455,7 +40539,8 @@ var signal_strength_default = {
40455
40539
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40456
40540
  verdict: "DORMANT",
40457
40541
  defaultOff: true,
40458
- _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: PostgreSQL Global Development Group (2024), *PostgreSQL 16 Documentation \xA711.2 (Index Types)*; Heroku Postgres Team (2018), *Efficient Use of PostgreSQL Indexes*. (Duplicate indexes silently double write cost without read benefit \u2014 Postgres does not warn.)"
40542
+ _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: PostgreSQL Global Development Group (2024), *PostgreSQL 16 Documentation \xA711.2 (Index Types)*; Heroku Postgres Team (2018), *Efficient Use of PostgreSQL Indexes*. (Duplicate indexes silently double write cost without read benefit \u2014 Postgres does not warn.)",
40543
+ aiSpecific: false
40459
40544
  },
40460
40545
  "db/missing-not-null": {
40461
40546
  recall: 0,
@@ -40465,7 +40550,8 @@ var signal_strength_default = {
40465
40550
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40466
40551
  verdict: "DORMANT",
40467
40552
  defaultOff: true,
40468
- _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: PostgreSQL Global Development Group (2024), *PostgreSQL 16 Documentation \xA75.4.1 (Check Constraints)*; Kleppmann, M. (2017), *Designing Data-Intensive Applications*, O'Reilly, ch.4 (NULL semantics in RDBMS). (Required-identifier columns without NOT NULL produce silent NULL inserts \u2014 canonical AI SQL smell.)"
40553
+ _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: PostgreSQL Global Development Group (2024), *PostgreSQL 16 Documentation \xA75.4.1 (Check Constraints)*; Kleppmann, M. (2017), *Designing Data-Intensive Applications*, O'Reilly, ch.4 (NULL semantics in RDBMS). (Required-identifier columns without NOT NULL produce silent NULL inserts \u2014 canonical AI SQL smell.)",
40554
+ aiSpecific: false
40469
40555
  },
40470
40556
  "db/enum-sprawl": {
40471
40557
  recall: 0,
@@ -40475,7 +40561,8 @@ var signal_strength_default = {
40475
40561
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40476
40562
  verdict: "DORMANT",
40477
40563
  defaultOff: true,
40478
- _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: PostgreSQL Global Development Group (2024), *PostgreSQL 16 Documentation \xA78.7 (Enumerated Types)*; Borkowski, A. (2022), *PostgreSQL enum types: when to use them and when not to*, pgconfig.org. (Enums with >12 values are brittle to extend and hard to localize \u2014 lookup table is the standard replacement.)"
40564
+ _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: PostgreSQL Global Development Group (2024), *PostgreSQL 16 Documentation \xA78.7 (Enumerated Types)*; Borkowski, A. (2022), *PostgreSQL enum types: when to use them and when not to*, pgconfig.org. (Enums with >12 values are brittle to extend and hard to localize \u2014 lookup table is the standard replacement.)",
40565
+ aiSpecific: false
40479
40566
  },
40480
40567
  "db/naming-inconsistency": {
40481
40568
  recall: 0,
@@ -40485,7 +40572,8 @@ var signal_strength_default = {
40485
40572
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40486
40573
  verdict: "DORMANT",
40487
40574
  defaultOff: true,
40488
- _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: PostgreSQL Global Development Group (2024), *PostgreSQL 16 Documentation \xA74.1.1 (Identifiers and Key Words)*; pgsql-hackers (2018), *Re: snake_case vs camelCase in Postgres identifiers*. (snake_case is the Postgres convention; mixing styles in the same schema breaks ORM generators.)"
40575
+ _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: PostgreSQL Global Development Group (2024), *PostgreSQL 16 Documentation \xA74.1.1 (Identifiers and Key Words)*; pgsql-hackers (2018), *Re: snake_case vs camelCase in Postgres identifiers*. (snake_case is the Postgres convention; mixing styles in the same schema breaks ORM generators.)",
40576
+ aiSpecific: false
40489
40577
  },
40490
40578
  "db/sql-concat": {
40491
40579
  recall: 0,
@@ -40495,7 +40583,8 @@ var signal_strength_default = {
40495
40583
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40496
40584
  verdict: "DORMANT",
40497
40585
  defaultOff: true,
40498
- _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: OWASP Foundation (2021), *OWASP Top 10 \u2014 A03:2021 Injection*, https://owasp.org/Top10/A03_2021-Injection/; OWASP Foundation (2017), *SQL Injection Prevention Cheat Sheet*. (Template-literal SQL with ${...} interpolation is the #1 SQL injection vector in AI-generated TypeScript code.)"
40586
+ _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: OWASP Foundation (2021), *OWASP Top 10 \u2014 A03:2021 Injection*, https://owasp.org/Top10/A03_2021-Injection/; OWASP Foundation (2017), *SQL Injection Prevention Cheat Sheet*. (Template-literal SQL with ${...} interpolation is the #1 SQL injection vector in AI-generated TypeScript code.)",
40587
+ aiSpecific: true
40499
40588
  },
40500
40589
  "docs/stale-package-reference": {
40501
40590
  recall: 0,
@@ -40505,7 +40594,8 @@ var signal_strength_default = {
40505
40594
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40506
40595
  verdict: "DORMANT",
40507
40596
  defaultOff: true,
40508
- _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: Meng, M. et al. (2020), *The Cost of Fixing Code Documentation: An Empirical Study on Open-Source Software*, ICSE 2020; Aghajani, E. et al. (2019), *Software documentation: a practitioners' perspective*, ICSE 2019. (Doc references to undeclared packages are copy-paste rot from previous projects \u2014 high-signal doc drift.)"
40597
+ _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: Meng, M. et al. (2020), *The Cost of Fixing Code Documentation: An Empirical Study on Open-Source Software*, ICSE 2020; Aghajani, E. et al. (2019), *Software documentation: a practitioners' perspective*, ICSE 2019. (Doc references to undeclared packages are copy-paste rot from previous projects \u2014 high-signal doc drift.)",
40598
+ aiSpecific: false
40509
40599
  },
40510
40600
  "docs/stale-function-reference": {
40511
40601
  recall: 0,
@@ -40515,7 +40605,8 @@ var signal_strength_default = {
40515
40605
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40516
40606
  verdict: "DORMANT",
40517
40607
  defaultOff: true,
40518
- _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: Meng, M. et al. (2020), *The Cost of Fixing Code Documentation*; Chen, Z. et al. (2022), *An Empirical Study on Code Documentation Adequacy*, MSR 2022. (Doc callouts to non-existent exports \u2014 readers copy-paste and hit a runtime error.)"
40608
+ _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: Meng, M. et al. (2020), *The Cost of Fixing Code Documentation*; Chen, Z. et al. (2022), *An Empirical Study on Code Documentation Adequacy*, MSR 2022. (Doc callouts to non-existent exports \u2014 readers copy-paste and hit a runtime error.)",
40609
+ aiSpecific: false
40519
40610
  },
40520
40611
  "docs/expired-code-example": {
40521
40612
  recall: 0,
@@ -40525,7 +40616,8 @@ var signal_strength_default = {
40525
40616
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40526
40617
  verdict: "DORMANT",
40527
40618
  defaultOff: true,
40528
- _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: Parnas, D.L. (2010), *Precise Documentation: The Key to Better Software*, Springer (canonical doc-correctness argument); Chen, Z. et al. (2022). (Fenced code examples with broken imports erode trust in the entire docs site.)"
40619
+ _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: Parnas, D.L. (2010), *Precise Documentation: The Key to Better Software*, Springer (canonical doc-correctness argument); Chen, Z. et al. (2022). (Fenced code examples with broken imports erode trust in the entire docs site.)",
40620
+ aiSpecific: false
40529
40621
  },
40530
40622
  "docs/broken-link": {
40531
40623
  recall: 0,
@@ -40535,7 +40627,8 @@ var signal_strength_default = {
40535
40627
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40536
40628
  verdict: "DORMANT",
40537
40629
  defaultOff: true,
40538
- _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: Nielsen, J. (2000), *Designing Web Usability*, New Riders (broken links as a top-5 trust erosion signal); Google Search Central (2024), *Crawl errors documentation*, https://developers.google.com/search/docs/crawling-indexing. (Broken internal links cost SEO crawl budget and reader trust.)"
40630
+ _calibrationNote: "v0.17.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: Nielsen, J. (2000), *Designing Web Usability*, New Riders (broken links as a top-5 trust erosion signal); Google Search Central (2024), *Crawl errors documentation*, https://developers.google.com/search/docs/crawling-indexing. (Broken internal links cost SEO crawl budget and reader trust.)",
40631
+ aiSpecific: false
40539
40632
  },
40540
40633
  "security/eval": {
40541
40634
  recall: 0,
@@ -40545,7 +40638,8 @@ var signal_strength_default = {
40545
40638
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40546
40639
  verdict: "DORMANT",
40547
40640
  defaultOff: true,
40548
- _calibrationNote: "v0.16.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: OWASP Foundation (2021), *OWASP Top 10 \u2014 A03:2021 Injection*; Mozilla Developer Network (2024), *eval() \u2014 MDN Web Docs*, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval (Security Considerations). (eval() and new Function() are RCE vectors if the input is ever attacker-controlled.)"
40641
+ _calibrationNote: "v0.16.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: OWASP Foundation (2021), *OWASP Top 10 \u2014 A03:2021 Injection*; Mozilla Developer Network (2024), *eval() \u2014 MDN Web Docs*, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval (Security Considerations). (eval() and new Function() are RCE vectors if the input is ever attacker-controlled.)",
40642
+ aiSpecific: false
40549
40643
  },
40550
40644
  "security/localstorage-token": {
40551
40645
  recall: 0,
@@ -40555,7 +40649,8 @@ var signal_strength_default = {
40555
40649
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40556
40650
  verdict: "DORMANT",
40557
40651
  defaultOff: true,
40558
- _calibrationNote: "v0.16.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: OWASP Foundation (2021), *OWASP Top 10 \u2014 A07:2021 Identification and Authentication Failures*; OWASP Foundation (2022), *HTML5 Security Cheat Sheet \xA72.1 (Local Storage)*. (JWT/access/refresh tokens in localStorage are readable by any XSS payload \u2014 issue as httpOnly cookies instead.)"
40652
+ _calibrationNote: "v0.16.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: OWASP Foundation (2021), *OWASP Top 10 \u2014 A07:2021 Identification and Authentication Failures*; OWASP Foundation (2022), *HTML5 Security Cheat Sheet \xA72.1 (Local Storage)*. (JWT/access/refresh tokens in localStorage are readable by any XSS payload \u2014 issue as httpOnly cookies instead.)",
40653
+ aiSpecific: false
40559
40654
  },
40560
40655
  "security/target-blank-no-noopener": {
40561
40656
  recall: 0,
@@ -40565,7 +40660,8 @@ var signal_strength_default = {
40565
40660
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40566
40661
  verdict: "DORMANT",
40567
40662
  defaultOff: true,
40568
- _calibrationNote: 'v0.16.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: OWASP Foundation (2022), *HTML5 Security Cheat Sheet \xA72.3 (Tabnabbing)*; WHATWG (2024), *HTML Living Standard \u2014 Link types: noopener*. (target="_blank" without rel="noopener" lets the linked page control window.opener \u2014 reverse tabnabbing.)'
40663
+ _calibrationNote: 'v0.16.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: OWASP Foundation (2022), *HTML5 Security Cheat Sheet \xA72.3 (Tabnabbing)*; WHATWG (2024), *HTML Living Standard \u2014 Link types: noopener*. (target="_blank" without rel="noopener" lets the linked page control window.opener \u2014 reverse tabnabbing.)',
40664
+ aiSpecific: false
40569
40665
  },
40570
40666
  "wcag/missing-alt": {
40571
40667
  recall: 0,
@@ -40575,7 +40671,8 @@ var signal_strength_default = {
40575
40671
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40576
40672
  verdict: "DORMANT",
40577
40673
  defaultOff: true,
40578
- _calibrationNote: 'v0.16.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: W3C (2023), *Web Content Accessibility Guidelines (WCAG) 2.2 \u2014 1.1.1 Non-text Content*, https://www.w3.org/TR/WCAG22/. (Every <img> needs alt text. Decorative: alt="". Informative: describe the image.)'
40674
+ _calibrationNote: 'v0.16.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: W3C (2023), *Web Content Accessibility Guidelines (WCAG) 2.2 \u2014 1.1.1 Non-text Content*, https://www.w3.org/TR/WCAG22/. (Every <img> needs alt text. Decorative: alt="". Informative: describe the image.)',
40675
+ aiSpecific: false
40579
40676
  },
40580
40677
  "typo/placeholder-text": {
40581
40678
  recall: 0,
@@ -40585,7 +40682,8 @@ var signal_strength_default = {
40585
40682
  lastCalibratedAt: "2026-06-30T00:00:00Z",
40586
40683
  verdict: "DORMANT",
40587
40684
  defaultOff: true,
40588
- _calibrationNote: "v0.16.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: Nielsen, J. (2000), *Designing Web Usability* (placeholder copy as a top-10 trust erosion signal); Krug, S. (2000), *Don't Make Me Think*, 2nd ed. (TODO/placeholder text in shipped UI signals incomplete work.)"
40685
+ _calibrationNote: "v0.16.0 ship \u2014 not in v7 per-rule table. Default-off until calibration data lands. Backed by: Nielsen, J. (2000), *Designing Web Usability* (placeholder copy as a top-10 trust erosion signal); Krug, S. (2000), *Don't Make Me Think*, 2nd ed. (TODO/placeholder text in shipped UI signals incomplete work.)",
40686
+ aiSpecific: false
40589
40687
  }
40590
40688
  };
40591
40689
 
@@ -40597,6 +40695,12 @@ function loadSignalStrength() {
40597
40695
  }
40598
40696
 
40599
40697
  // src/engine/worker.ts
40698
+ function buildParserCacheConfig(cwd) {
40699
+ const envVal = process.env.SLOP_AUDIT_CACHE;
40700
+ const enabled = envVal === "1" || envVal === "true";
40701
+ const root = process.env.SLOP_AUDIT_CACHE_ROOT ?? join12(cwd, ".slopbrick", "cache", "ast");
40702
+ return { enabled, root };
40703
+ }
40600
40704
  function applyRuleOverrides(issues, rules) {
40601
40705
  const result = [];
40602
40706
  for (const issue of issues) {
@@ -40611,6 +40715,7 @@ function applyRuleOverrides(issues, rules) {
40611
40715
  return result;
40612
40716
  }
40613
40717
  async function scanFile(filePath, config, registry, cwd = process.cwd()) {
40718
+ const cache = buildParserCacheConfig(cwd);
40614
40719
  const ext = extname6(filePath).toLowerCase();
40615
40720
  const UNSUPPORTED_LANGS = /* @__PURE__ */ new Set([
40616
40721
  ".swift",
@@ -40641,7 +40746,7 @@ async function scanFile(filePath, config, registry, cwd = process.cwd()) {
40641
40746
  };
40642
40747
  }
40643
40748
  try {
40644
- const { ast, source } = await parseFile(filePath);
40749
+ const { ast, source } = await parseFile(filePath, { cache });
40645
40750
  const facts = extractFacts(filePath, ast, source, config.supportsRsc ?? true, config.framework ?? "react", config);
40646
40751
  const activeRegistry = registry ?? new RuleRegistry();
40647
40752
  if (!registry) {