Skip to main content

batuta/bug_hunter/
defect_patterns.rs

1//! Defect pattern tables for bug hunting (QA-002 split).
2
3use super::types::{DefectCategory, FindingSeverity};
4
5/// Base defect patterns. When PMAT SATD is active, TODO/FIXME/HACK/XXX
6/// are handled by pmat and excluded here to avoid duplicates.
7pub(super) fn base_defect_patterns(
8    pmat_satd_active: bool,
9) -> Vec<(&'static str, DefectCategory, FindingSeverity, f64)> {
10    let mut patterns = Vec::new();
11    if !pmat_satd_active {
12        patterns.extend([
13            ("TODO", DefectCategory::LogicErrors, FindingSeverity::Low, 0.3),
14            ("FIXME", DefectCategory::LogicErrors, FindingSeverity::Medium, 0.5),
15            ("HACK", DefectCategory::LogicErrors, FindingSeverity::Medium, 0.5),
16            ("XXX", DefectCategory::LogicErrors, FindingSeverity::Medium, 0.5),
17        ]);
18    }
19    // Always include runtime fault patterns
20    patterns.extend([
21        ("unwrap()", DefectCategory::LogicErrors, FindingSeverity::Medium, 0.4),
22        ("expect(", DefectCategory::LogicErrors, FindingSeverity::Low, 0.3),
23        // SAFETY: no actual unsafe code — string literals for pattern matching
24        ("unsafe {", DefectCategory::MemorySafety, FindingSeverity::High, 0.7),
25        ("transmute", DefectCategory::MemorySafety, FindingSeverity::High, 0.8),
26        ("panic!", DefectCategory::LogicErrors, FindingSeverity::Medium, 0.5),
27        ("unreachable!", DefectCategory::LogicErrors, FindingSeverity::Low, 0.3),
28    ]);
29    patterns
30}
31
32/// GPU/CUDA and cross-cutting defect patterns (always active).
33pub(super) fn gpu_and_crosscutting_patterns(
34) -> Vec<(&'static str, DefectCategory, FindingSeverity, f64)> {
35    vec![
36        // Detects GPU kernel defects: CUDA errors and invalid PTX code
37        ("CUDA_ERROR", DefectCategory::GpuKernelBugs, FindingSeverity::Critical, 0.9),
38        ("INVALID_PTX", DefectCategory::GpuKernelBugs, FindingSeverity::Critical, 0.95),
39        ("PTX error", DefectCategory::GpuKernelBugs, FindingSeverity::Critical, 0.9),
40        ("kernel fail", DefectCategory::GpuKernelBugs, FindingSeverity::High, 0.8),
41        ("cuBLAS fallback", DefectCategory::GpuKernelBugs, FindingSeverity::High, 0.7),
42        ("cuDNN fallback", DefectCategory::GpuKernelBugs, FindingSeverity::High, 0.7),
43        // Silent degradation - error swallowing without alerting
44        (".unwrap_or_else(|_|", DefectCategory::SilentDegradation, FindingSeverity::High, 0.7),
45        ("if let Err(_) =", DefectCategory::SilentDegradation, FindingSeverity::Medium, 0.5),
46        ("Err(_) => {}", DefectCategory::SilentDegradation, FindingSeverity::High, 0.75),
47        ("Ok(_) => {}", DefectCategory::SilentDegradation, FindingSeverity::Medium, 0.4),
48        ("// fallback", DefectCategory::SilentDegradation, FindingSeverity::Medium, 0.5),
49        ("// degraded", DefectCategory::SilentDegradation, FindingSeverity::High, 0.7),
50        // Identifies skipped test markers (#[ignore], // skip)
51        ("#[ignore]", DefectCategory::TestDebt, FindingSeverity::High, 0.7),
52        ("// skip", DefectCategory::TestDebt, FindingSeverity::Medium, 0.5),
53        ("// skipped", DefectCategory::TestDebt, FindingSeverity::Medium, 0.5),
54        ("// broken", DefectCategory::TestDebt, FindingSeverity::High, 0.8),
55        ("// fails", DefectCategory::TestDebt, FindingSeverity::High, 0.75),
56        ("// disabled", DefectCategory::TestDebt, FindingSeverity::Medium, 0.6),
57        ("test removed", DefectCategory::TestDebt, FindingSeverity::Critical, 0.9),
58        ("were removed", DefectCategory::TestDebt, FindingSeverity::Critical, 0.9),
59        ("tests hang", DefectCategory::TestDebt, FindingSeverity::Critical, 0.9),
60        ("hang during", DefectCategory::TestDebt, FindingSeverity::High, 0.8),
61        ("compilation hang", DefectCategory::TestDebt, FindingSeverity::High, 0.8),
62        // Dimension-related GPU bugs (hidden_dim limits)
63        ("hidden_dim >=", DefectCategory::GpuKernelBugs, FindingSeverity::High, 0.7),
64        ("hidden_dim >", DefectCategory::GpuKernelBugs, FindingSeverity::High, 0.7),
65        ("// 1536", DefectCategory::GpuKernelBugs, FindingSeverity::Medium, 0.5),
66        ("// 2048", DefectCategory::GpuKernelBugs, FindingSeverity::Medium, 0.5),
67        ("model dimensions", DefectCategory::GpuKernelBugs, FindingSeverity::Medium, 0.5),
68        // Hidden debt - euphemisms that hide technical debt (PMAT issue #149)
69        // These appear in doc comments and regular comments
70        ("placeholder", DefectCategory::HiddenDebt, FindingSeverity::High, 0.75),
71        ("stub", DefectCategory::HiddenDebt, FindingSeverity::High, 0.7),
72        ("dummy", DefectCategory::HiddenDebt, FindingSeverity::High, 0.7),
73        ("fake", DefectCategory::HiddenDebt, FindingSeverity::Medium, 0.6),
74        ("mock", DefectCategory::HiddenDebt, FindingSeverity::Medium, 0.5),
75        ("simplified", DefectCategory::HiddenDebt, FindingSeverity::Medium, 0.6),
76        ("for demonstration", DefectCategory::HiddenDebt, FindingSeverity::High, 0.75),
77        ("demo only", DefectCategory::HiddenDebt, FindingSeverity::High, 0.8),
78        ("not implemented", DefectCategory::HiddenDebt, FindingSeverity::Critical, 0.9),
79        ("unimplemented", DefectCategory::HiddenDebt, FindingSeverity::Critical, 0.9),
80        ("temporary", DefectCategory::HiddenDebt, FindingSeverity::Medium, 0.6),
81        ("hardcoded", DefectCategory::HiddenDebt, FindingSeverity::Medium, 0.5),
82        ("hard-coded", DefectCategory::HiddenDebt, FindingSeverity::Medium, 0.5),
83        ("magic number", DefectCategory::HiddenDebt, FindingSeverity::Medium, 0.5),
84        ("workaround", DefectCategory::HiddenDebt, FindingSeverity::Medium, 0.6),
85        ("quick fix", DefectCategory::HiddenDebt, FindingSeverity::High, 0.7),
86        ("quick-fix", DefectCategory::HiddenDebt, FindingSeverity::High, 0.7),
87        ("bandaid", DefectCategory::HiddenDebt, FindingSeverity::High, 0.7),
88        ("band-aid", DefectCategory::HiddenDebt, FindingSeverity::High, 0.7),
89        ("kludge", DefectCategory::HiddenDebt, FindingSeverity::High, 0.75),
90        ("tech debt", DefectCategory::HiddenDebt, FindingSeverity::High, 0.8),
91        ("technical debt", DefectCategory::HiddenDebt, FindingSeverity::High, 0.8),
92    ]
93}