@qball-inc/the-bulwark 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +43 -0
- package/agents/bulwark-fix-validator.md +633 -0
- package/agents/bulwark-implementer.md +391 -0
- package/agents/bulwark-issue-analyzer.md +308 -0
- package/agents/bulwark-standards-reviewer.md +221 -0
- package/agents/plan-creation-architect.md +323 -0
- package/agents/plan-creation-eng-lead.md +352 -0
- package/agents/plan-creation-po.md +300 -0
- package/agents/plan-creation-qa-critic.md +334 -0
- package/agents/product-ideation-competitive-analyzer.md +298 -0
- package/agents/product-ideation-idea-validator.md +268 -0
- package/agents/product-ideation-market-researcher.md +292 -0
- package/agents/product-ideation-pattern-documenter.md +308 -0
- package/agents/product-ideation-segment-analyzer.md +303 -0
- package/agents/product-ideation-strategist.md +259 -0
- package/agents/statusline-setup.md +97 -0
- package/hooks/hooks.json +59 -0
- package/package.json +45 -0
- package/scripts/hooks/cleanup-stale.sh +13 -0
- package/scripts/hooks/enforce-quality.sh +166 -0
- package/scripts/hooks/implementer-quality.sh +256 -0
- package/scripts/hooks/inject-protocol.sh +52 -0
- package/scripts/hooks/suggest-pipeline.sh +175 -0
- package/scripts/hooks/track-pipeline-start.sh +37 -0
- package/scripts/hooks/track-pipeline-stop.sh +52 -0
- package/scripts/init-rules.sh +35 -0
- package/scripts/init.sh +151 -0
- package/skills/anthropic-validator/SKILL.md +607 -0
- package/skills/anthropic-validator/references/agents-checklist.md +131 -0
- package/skills/anthropic-validator/references/commands-checklist.md +102 -0
- package/skills/anthropic-validator/references/hooks-checklist.md +151 -0
- package/skills/anthropic-validator/references/mcp-checklist.md +136 -0
- package/skills/anthropic-validator/references/plugins-checklist.md +148 -0
- package/skills/anthropic-validator/references/skills-checklist.md +85 -0
- package/skills/assertion-patterns/SKILL.md +296 -0
- package/skills/bug-magnet-data/SKILL.md +284 -0
- package/skills/bug-magnet-data/context/cli-args.md +91 -0
- package/skills/bug-magnet-data/context/db-query.md +104 -0
- package/skills/bug-magnet-data/context/file-contents.md +103 -0
- package/skills/bug-magnet-data/context/http-body.md +91 -0
- package/skills/bug-magnet-data/context/process-spawn.md +123 -0
- package/skills/bug-magnet-data/data/booleans/boundaries.yaml +143 -0
- package/skills/bug-magnet-data/data/collections/arrays.yaml +114 -0
- package/skills/bug-magnet-data/data/collections/objects.yaml +123 -0
- package/skills/bug-magnet-data/data/concurrency/race-conditions.yaml +118 -0
- package/skills/bug-magnet-data/data/concurrency/state-machines.yaml +115 -0
- package/skills/bug-magnet-data/data/dates/boundaries.yaml +137 -0
- package/skills/bug-magnet-data/data/dates/invalid.yaml +132 -0
- package/skills/bug-magnet-data/data/dates/timezone.yaml +118 -0
- package/skills/bug-magnet-data/data/encoding/charset.yaml +79 -0
- package/skills/bug-magnet-data/data/encoding/normalization.yaml +105 -0
- package/skills/bug-magnet-data/data/formats/email.yaml +154 -0
- package/skills/bug-magnet-data/data/formats/json.yaml +187 -0
- package/skills/bug-magnet-data/data/formats/url.yaml +165 -0
- package/skills/bug-magnet-data/data/language-specific/javascript.yaml +182 -0
- package/skills/bug-magnet-data/data/language-specific/python.yaml +174 -0
- package/skills/bug-magnet-data/data/language-specific/rust.yaml +148 -0
- package/skills/bug-magnet-data/data/numbers/boundaries.yaml +161 -0
- package/skills/bug-magnet-data/data/numbers/precision.yaml +89 -0
- package/skills/bug-magnet-data/data/numbers/special.yaml +69 -0
- package/skills/bug-magnet-data/data/strings/boundaries.yaml +109 -0
- package/skills/bug-magnet-data/data/strings/injection.yaml +208 -0
- package/skills/bug-magnet-data/data/strings/special-chars.yaml +190 -0
- package/skills/bug-magnet-data/data/strings/unicode.yaml +139 -0
- package/skills/bug-magnet-data/references/external-lists.md +115 -0
- package/skills/bulwark-brainstorm/SKILL.md +563 -0
- package/skills/bulwark-brainstorm/references/at-teammate-prompts.md +60 -0
- package/skills/bulwark-brainstorm/references/role-critical-analyst.md +78 -0
- package/skills/bulwark-brainstorm/references/role-development-lead.md +66 -0
- package/skills/bulwark-brainstorm/references/role-product-delivery-lead.md +79 -0
- package/skills/bulwark-brainstorm/references/role-product-manager.md +62 -0
- package/skills/bulwark-brainstorm/references/role-project-sme.md +59 -0
- package/skills/bulwark-brainstorm/references/role-technical-architect.md +66 -0
- package/skills/bulwark-research/SKILL.md +298 -0
- package/skills/bulwark-research/references/viewpoint-contrarian.md +63 -0
- package/skills/bulwark-research/references/viewpoint-direct-investigation.md +62 -0
- package/skills/bulwark-research/references/viewpoint-first-principles.md +65 -0
- package/skills/bulwark-research/references/viewpoint-practitioner.md +62 -0
- package/skills/bulwark-research/references/viewpoint-prior-art.md +66 -0
- package/skills/bulwark-scaffold/SKILL.md +330 -0
- package/skills/bulwark-statusline/SKILL.md +161 -0
- package/skills/bulwark-statusline/scripts/statusline.sh +144 -0
- package/skills/bulwark-verify/SKILL.md +519 -0
- package/skills/code-review/SKILL.md +428 -0
- package/skills/code-review/examples/anti-patterns/linting.ts +181 -0
- package/skills/code-review/examples/anti-patterns/security.ts +91 -0
- package/skills/code-review/examples/anti-patterns/standards.ts +195 -0
- package/skills/code-review/examples/anti-patterns/type-safety.ts +108 -0
- package/skills/code-review/examples/recommended/linting.ts +195 -0
- package/skills/code-review/examples/recommended/security.ts +154 -0
- package/skills/code-review/examples/recommended/standards.ts +231 -0
- package/skills/code-review/examples/recommended/type-safety.ts +181 -0
- package/skills/code-review/frameworks/angular.md +218 -0
- package/skills/code-review/frameworks/django.md +235 -0
- package/skills/code-review/frameworks/express.md +207 -0
- package/skills/code-review/frameworks/flask.md +298 -0
- package/skills/code-review/frameworks/generic.md +146 -0
- package/skills/code-review/frameworks/react.md +152 -0
- package/skills/code-review/frameworks/vue.md +244 -0
- package/skills/code-review/references/linting-patterns.md +221 -0
- package/skills/code-review/references/security-patterns.md +125 -0
- package/skills/code-review/references/standards-patterns.md +246 -0
- package/skills/code-review/references/type-safety-patterns.md +130 -0
- package/skills/component-patterns/SKILL.md +131 -0
- package/skills/component-patterns/references/pattern-cli-command.md +118 -0
- package/skills/component-patterns/references/pattern-database.md +166 -0
- package/skills/component-patterns/references/pattern-external-api.md +139 -0
- package/skills/component-patterns/references/pattern-file-parser.md +168 -0
- package/skills/component-patterns/references/pattern-http-server.md +162 -0
- package/skills/component-patterns/references/pattern-process-spawner.md +133 -0
- package/skills/continuous-feedback/SKILL.md +327 -0
- package/skills/continuous-feedback/references/collect-instructions.md +81 -0
- package/skills/continuous-feedback/references/specialize-code-review.md +82 -0
- package/skills/continuous-feedback/references/specialize-general.md +98 -0
- package/skills/continuous-feedback/references/specialize-test-audit.md +81 -0
- package/skills/create-skill/SKILL.md +359 -0
- package/skills/create-skill/references/agent-conventions.md +194 -0
- package/skills/create-skill/references/agent-template.md +195 -0
- package/skills/create-skill/references/content-guidance.md +291 -0
- package/skills/create-skill/references/decision-framework.md +124 -0
- package/skills/create-skill/references/template-pipeline.md +217 -0
- package/skills/create-skill/references/template-reference-heavy.md +111 -0
- package/skills/create-skill/references/template-research.md +210 -0
- package/skills/create-skill/references/template-script-driven.md +172 -0
- package/skills/create-skill/references/template-simple.md +80 -0
- package/skills/create-subagent/SKILL.md +353 -0
- package/skills/create-subagent/references/agent-conventions.md +268 -0
- package/skills/create-subagent/references/content-guidance.md +232 -0
- package/skills/create-subagent/references/decision-framework.md +134 -0
- package/skills/create-subagent/references/template-single-agent.md +192 -0
- package/skills/fix-bug/SKILL.md +241 -0
- package/skills/governance-protocol/SKILL.md +116 -0
- package/skills/init/SKILL.md +341 -0
- package/skills/issue-debugging/SKILL.md +385 -0
- package/skills/issue-debugging/references/anti-patterns.md +245 -0
- package/skills/issue-debugging/references/debug-report-schema.md +227 -0
- package/skills/mock-detection/SKILL.md +511 -0
- package/skills/mock-detection/references/false-positive-prevention.md +402 -0
- package/skills/mock-detection/references/stub-patterns.md +236 -0
- package/skills/pipeline-templates/SKILL.md +215 -0
- package/skills/pipeline-templates/references/code-change-workflow.md +277 -0
- package/skills/pipeline-templates/references/code-review.md +336 -0
- package/skills/pipeline-templates/references/fix-validation.md +421 -0
- package/skills/pipeline-templates/references/new-feature.md +335 -0
- package/skills/pipeline-templates/references/research-brainstorm.md +161 -0
- package/skills/pipeline-templates/references/research-planning.md +257 -0
- package/skills/pipeline-templates/references/test-audit.md +389 -0
- package/skills/pipeline-templates/references/test-execution-fix.md +238 -0
- package/skills/plan-creation/SKILL.md +497 -0
- package/skills/product-ideation/SKILL.md +372 -0
- package/skills/product-ideation/references/analysis-frameworks.md +161 -0
- package/skills/session-handoff/SKILL.md +139 -0
- package/skills/session-handoff/references/examples.md +223 -0
- package/skills/setup-lsp/SKILL.md +312 -0
- package/skills/setup-lsp/references/server-registry.md +85 -0
- package/skills/setup-lsp/references/troubleshooting.md +135 -0
- package/skills/subagent-output-templating/SKILL.md +415 -0
- package/skills/subagent-output-templating/references/examples.md +440 -0
- package/skills/subagent-prompting/SKILL.md +364 -0
- package/skills/subagent-prompting/references/examples.md +342 -0
- package/skills/test-audit/SKILL.md +531 -0
- package/skills/test-audit/references/known-limitations.md +41 -0
- package/skills/test-audit/references/priority-classification.md +30 -0
- package/skills/test-audit/references/prompts/deep-mode-detection.md +83 -0
- package/skills/test-audit/references/prompts/synthesis.md +57 -0
- package/skills/test-audit/references/rewrite-instructions.md +46 -0
- package/skills/test-audit/references/schemas/audit-output.yaml +100 -0
- package/skills/test-audit/references/schemas/diagnostic-output.yaml +49 -0
- package/skills/test-audit/scripts/data-flow-analyzer.ts +509 -0
- package/skills/test-audit/scripts/integration-mock-detector.ts +462 -0
- package/skills/test-audit/scripts/package.json +20 -0
- package/skills/test-audit/scripts/skip-detector.ts +211 -0
- package/skills/test-audit/scripts/verification-counter.ts +295 -0
- package/skills/test-classification/SKILL.md +310 -0
- package/skills/test-fixture-creation/SKILL.md +295 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
metadata:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
last_updated: "2026-02-01"
|
|
4
|
+
source_urls: []
|
|
5
|
+
|
|
6
|
+
category: language-specific
|
|
7
|
+
subcategory: rust
|
|
8
|
+
tier: T2
|
|
9
|
+
|
|
10
|
+
bugs_caught:
|
|
11
|
+
- "Ownership and borrowing edge cases"
|
|
12
|
+
- "Lifetime issues"
|
|
13
|
+
- "Unsafe code pitfalls"
|
|
14
|
+
|
|
15
|
+
values:
|
|
16
|
+
# Ownership
|
|
17
|
+
move_after_use:
|
|
18
|
+
code: |
|
|
19
|
+
let s = String::from("hello");
|
|
20
|
+
let s2 = s;
|
|
21
|
+
println!("{}", s); // Error
|
|
22
|
+
issue: "Use after move"
|
|
23
|
+
bugs_caught:
|
|
24
|
+
- "Value moved, then used"
|
|
25
|
+
safe_for_automation: true
|
|
26
|
+
|
|
27
|
+
partial_move:
|
|
28
|
+
code: |
|
|
29
|
+
struct Point { x: i32, y: i32 }
|
|
30
|
+
let p = Point { x: 1, y: 2 };
|
|
31
|
+
let x = p.x;
|
|
32
|
+
println!("{:?}", p); // Error
|
|
33
|
+
issue: "Partial move makes struct unusable"
|
|
34
|
+
bugs_caught:
|
|
35
|
+
- "Partial move of struct"
|
|
36
|
+
safe_for_automation: true
|
|
37
|
+
|
|
38
|
+
# Borrowing
|
|
39
|
+
mutable_while_borrowed:
|
|
40
|
+
code: |
|
|
41
|
+
let mut v = vec![1, 2, 3];
|
|
42
|
+
let first = &v[0];
|
|
43
|
+
v.push(4); // Error
|
|
44
|
+
println!("{}", first);
|
|
45
|
+
issue: "Mutable borrow while immutable borrow exists"
|
|
46
|
+
bugs_caught:
|
|
47
|
+
- "Borrow checker violation"
|
|
48
|
+
safe_for_automation: true
|
|
49
|
+
|
|
50
|
+
iterator_invalidation:
|
|
51
|
+
code: |
|
|
52
|
+
let mut v = vec![1, 2, 3];
|
|
53
|
+
for i in &v {
|
|
54
|
+
v.push(*i); // Error
|
|
55
|
+
}
|
|
56
|
+
issue: "Modification during iteration"
|
|
57
|
+
bugs_caught:
|
|
58
|
+
- "Iterator invalidation"
|
|
59
|
+
safe_for_automation: true
|
|
60
|
+
|
|
61
|
+
# Lifetimes
|
|
62
|
+
dangling_reference:
|
|
63
|
+
code: |
|
|
64
|
+
fn dangle() -> &String {
|
|
65
|
+
let s = String::from("hello");
|
|
66
|
+
&s // Error: returns reference to dropped value
|
|
67
|
+
}
|
|
68
|
+
issue: "Returning reference to local"
|
|
69
|
+
bugs_caught:
|
|
70
|
+
- "Dangling reference"
|
|
71
|
+
safe_for_automation: true
|
|
72
|
+
|
|
73
|
+
lifetime_elision_surprise:
|
|
74
|
+
code: |
|
|
75
|
+
fn longest(x: &str, y: &str) -> &str {
|
|
76
|
+
if x.len() > y.len() { x } else { y }
|
|
77
|
+
} // Error: need lifetime annotations
|
|
78
|
+
issue: "Lifetime elision rules don't apply"
|
|
79
|
+
bugs_caught:
|
|
80
|
+
- "Missing lifetime annotation"
|
|
81
|
+
safe_for_automation: true
|
|
82
|
+
|
|
83
|
+
# Option/Result
|
|
84
|
+
unwrap_none:
|
|
85
|
+
code: |
|
|
86
|
+
let x: Option<i32> = None;
|
|
87
|
+
x.unwrap(); // Panic!
|
|
88
|
+
issue: "Unwrap on None"
|
|
89
|
+
bugs_caught:
|
|
90
|
+
- "Panicking on None"
|
|
91
|
+
safe_for_automation: true
|
|
92
|
+
|
|
93
|
+
unwrap_err:
|
|
94
|
+
code: |
|
|
95
|
+
let x: Result<i32, &str> = Err("oops");
|
|
96
|
+
x.unwrap(); // Panic!
|
|
97
|
+
issue: "Unwrap on Err"
|
|
98
|
+
bugs_caught:
|
|
99
|
+
- "Panicking on Err"
|
|
100
|
+
safe_for_automation: true
|
|
101
|
+
|
|
102
|
+
# Integer overflow
|
|
103
|
+
overflow_debug:
|
|
104
|
+
code: |
|
|
105
|
+
let x: u8 = 255;
|
|
106
|
+
let y = x + 1; // Panic in debug, wrap in release
|
|
107
|
+
issue: "Integer overflow"
|
|
108
|
+
bugs_caught:
|
|
109
|
+
- "Different behavior debug vs release"
|
|
110
|
+
safe_for_automation: true
|
|
111
|
+
|
|
112
|
+
# Unsafe
|
|
113
|
+
unsafe_deref_null:
|
|
114
|
+
code: |
|
|
115
|
+
let ptr: *const i32 = std::ptr::null();
|
|
116
|
+
unsafe { *ptr } // Undefined behavior
|
|
117
|
+
issue: "Null pointer dereference"
|
|
118
|
+
bugs_caught:
|
|
119
|
+
- "UB in unsafe code"
|
|
120
|
+
safe_for_automation: true
|
|
121
|
+
|
|
122
|
+
data_race_unsafe:
|
|
123
|
+
code: |
|
|
124
|
+
static mut COUNTER: i32 = 0;
|
|
125
|
+
// Multiple threads accessing COUNTER
|
|
126
|
+
issue: "Data race in unsafe static"
|
|
127
|
+
bugs_caught:
|
|
128
|
+
- "Data race with mutable static"
|
|
129
|
+
safe_for_automation: true
|
|
130
|
+
|
|
131
|
+
# String/str
|
|
132
|
+
string_indexing:
|
|
133
|
+
code: |
|
|
134
|
+
let s = String::from("hello");
|
|
135
|
+
let c = s[0]; // Error: cannot index String
|
|
136
|
+
issue: "Direct string indexing not allowed"
|
|
137
|
+
bugs_caught:
|
|
138
|
+
- "UTF-8 aware string handling"
|
|
139
|
+
safe_for_automation: true
|
|
140
|
+
|
|
141
|
+
string_slice_boundary:
|
|
142
|
+
code: |
|
|
143
|
+
let s = "héllo";
|
|
144
|
+
let slice = &s[0..2]; // Panic if not char boundary
|
|
145
|
+
issue: "Slice not on char boundary"
|
|
146
|
+
bugs_caught:
|
|
147
|
+
- "Multi-byte character slicing"
|
|
148
|
+
safe_for_automation: true
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
metadata:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
last_updated: "2026-02-01"
|
|
4
|
+
source_urls: []
|
|
5
|
+
|
|
6
|
+
category: numbers
|
|
7
|
+
subcategory: boundaries
|
|
8
|
+
tier: T0
|
|
9
|
+
|
|
10
|
+
bugs_caught:
|
|
11
|
+
- "Integer overflow/underflow"
|
|
12
|
+
- "Off-by-one errors"
|
|
13
|
+
- "Division by zero"
|
|
14
|
+
- "Sign handling errors"
|
|
15
|
+
|
|
16
|
+
values:
|
|
17
|
+
zero:
|
|
18
|
+
value: 0
|
|
19
|
+
bugs_caught:
|
|
20
|
+
- "Division by zero"
|
|
21
|
+
- "Zero-index edge cases"
|
|
22
|
+
- "Falsy value handling"
|
|
23
|
+
safe_for_automation: true
|
|
24
|
+
|
|
25
|
+
negative_one:
|
|
26
|
+
value: -1
|
|
27
|
+
bugs_caught:
|
|
28
|
+
- "Array index -1 handling"
|
|
29
|
+
- "Invalid count/size"
|
|
30
|
+
- "Error return value"
|
|
31
|
+
safe_for_automation: true
|
|
32
|
+
|
|
33
|
+
positive_one:
|
|
34
|
+
value: 1
|
|
35
|
+
bugs_caught:
|
|
36
|
+
- "Minimum positive handling"
|
|
37
|
+
- "Off-by-one at lower bound"
|
|
38
|
+
safe_for_automation: true
|
|
39
|
+
|
|
40
|
+
negative_zero:
|
|
41
|
+
value: -0
|
|
42
|
+
bugs_caught:
|
|
43
|
+
- "Signed zero handling"
|
|
44
|
+
- "Comparison with zero"
|
|
45
|
+
safe_for_automation: true
|
|
46
|
+
note: "In IEEE 754, -0 === 0 but 1/-0 === -Infinity"
|
|
47
|
+
|
|
48
|
+
# 32-bit integer boundaries
|
|
49
|
+
int32_max:
|
|
50
|
+
value: 2147483647
|
|
51
|
+
bugs_caught:
|
|
52
|
+
- "32-bit integer overflow"
|
|
53
|
+
- "INT_MAX handling"
|
|
54
|
+
safe_for_automation: true
|
|
55
|
+
note: "2^31 - 1"
|
|
56
|
+
|
|
57
|
+
int32_max_plus_1:
|
|
58
|
+
value: 2147483648
|
|
59
|
+
bugs_caught:
|
|
60
|
+
- "32-bit overflow to negative"
|
|
61
|
+
safe_for_automation: true
|
|
62
|
+
note: "2^31 - overflows to -2147483648 in signed 32-bit"
|
|
63
|
+
|
|
64
|
+
int32_min:
|
|
65
|
+
value: -2147483648
|
|
66
|
+
bugs_caught:
|
|
67
|
+
- "32-bit integer underflow"
|
|
68
|
+
- "INT_MIN handling"
|
|
69
|
+
safe_for_automation: true
|
|
70
|
+
note: "-2^31"
|
|
71
|
+
|
|
72
|
+
int32_min_minus_1:
|
|
73
|
+
value: -2147483649
|
|
74
|
+
bugs_caught:
|
|
75
|
+
- "32-bit underflow"
|
|
76
|
+
safe_for_automation: true
|
|
77
|
+
|
|
78
|
+
# 64-bit integer boundaries
|
|
79
|
+
int64_max:
|
|
80
|
+
value: 9223372036854775807
|
|
81
|
+
bugs_caught:
|
|
82
|
+
- "64-bit integer overflow"
|
|
83
|
+
- "LONG_MAX handling"
|
|
84
|
+
safe_for_automation: true
|
|
85
|
+
note: "2^63 - 1"
|
|
86
|
+
|
|
87
|
+
int64_min:
|
|
88
|
+
value: -9223372036854775808
|
|
89
|
+
bugs_caught:
|
|
90
|
+
- "64-bit integer underflow"
|
|
91
|
+
- "LONG_MIN handling"
|
|
92
|
+
safe_for_automation: true
|
|
93
|
+
note: "-2^63"
|
|
94
|
+
|
|
95
|
+
# Unsigned boundaries
|
|
96
|
+
uint32_max:
|
|
97
|
+
value: 4294967295
|
|
98
|
+
bugs_caught:
|
|
99
|
+
- "Unsigned 32-bit max"
|
|
100
|
+
- "UINT_MAX handling"
|
|
101
|
+
safe_for_automation: true
|
|
102
|
+
note: "2^32 - 1"
|
|
103
|
+
|
|
104
|
+
uint64_max:
|
|
105
|
+
value: 18446744073709551615
|
|
106
|
+
bugs_caught:
|
|
107
|
+
- "Unsigned 64-bit max"
|
|
108
|
+
safe_for_automation: true
|
|
109
|
+
note: "2^64 - 1"
|
|
110
|
+
|
|
111
|
+
# JavaScript safe integer
|
|
112
|
+
js_max_safe_int:
|
|
113
|
+
value: 9007199254740991
|
|
114
|
+
bugs_caught:
|
|
115
|
+
- "JavaScript precision loss"
|
|
116
|
+
- "Number.MAX_SAFE_INTEGER"
|
|
117
|
+
safe_for_automation: true
|
|
118
|
+
note: "2^53 - 1"
|
|
119
|
+
|
|
120
|
+
js_max_safe_int_plus_1:
|
|
121
|
+
value: 9007199254740992
|
|
122
|
+
bugs_caught:
|
|
123
|
+
- "JavaScript precision loss at boundary"
|
|
124
|
+
safe_for_automation: true
|
|
125
|
+
note: "2^53 - loses precision"
|
|
126
|
+
|
|
127
|
+
# Common business boundaries
|
|
128
|
+
hundred:
|
|
129
|
+
value: 100
|
|
130
|
+
bugs_caught:
|
|
131
|
+
- "Percentage boundary"
|
|
132
|
+
- "Hundred-based calculations"
|
|
133
|
+
safe_for_automation: true
|
|
134
|
+
|
|
135
|
+
thousand:
|
|
136
|
+
value: 1000
|
|
137
|
+
bugs_caught:
|
|
138
|
+
- "Thousand separator handling"
|
|
139
|
+
safe_for_automation: true
|
|
140
|
+
|
|
141
|
+
million:
|
|
142
|
+
value: 1000000
|
|
143
|
+
bugs_caught:
|
|
144
|
+
- "Large number display"
|
|
145
|
+
safe_for_automation: true
|
|
146
|
+
|
|
147
|
+
# Off-by-one patterns
|
|
148
|
+
power_of_2_minus_1:
|
|
149
|
+
value: 255
|
|
150
|
+
bugs_caught:
|
|
151
|
+
- "8-bit boundary"
|
|
152
|
+
- "Color value max"
|
|
153
|
+
safe_for_automation: true
|
|
154
|
+
note: "2^8 - 1"
|
|
155
|
+
|
|
156
|
+
power_of_2:
|
|
157
|
+
value: 256
|
|
158
|
+
bugs_caught:
|
|
159
|
+
- "8-bit overflow"
|
|
160
|
+
safe_for_automation: true
|
|
161
|
+
note: "2^8"
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
metadata:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
last_updated: "2026-02-01"
|
|
4
|
+
source_urls: []
|
|
5
|
+
|
|
6
|
+
category: numbers
|
|
7
|
+
subcategory: precision
|
|
8
|
+
tier: T1
|
|
9
|
+
|
|
10
|
+
bugs_caught:
|
|
11
|
+
- "Floating point comparison failures"
|
|
12
|
+
- "Rounding errors in calculations"
|
|
13
|
+
- "Currency calculation bugs"
|
|
14
|
+
|
|
15
|
+
values:
|
|
16
|
+
classic_float_fail:
|
|
17
|
+
expression: "0.1 + 0.2"
|
|
18
|
+
expected: 0.3
|
|
19
|
+
actual: 0.30000000000000004
|
|
20
|
+
bugs_caught:
|
|
21
|
+
- "Direct float comparison"
|
|
22
|
+
- "Classic IEEE 754 demonstration"
|
|
23
|
+
safe_for_automation: true
|
|
24
|
+
|
|
25
|
+
float_subtraction:
|
|
26
|
+
expression: "0.3 - 0.1"
|
|
27
|
+
expected: 0.2
|
|
28
|
+
actual: 0.19999999999999998
|
|
29
|
+
bugs_caught:
|
|
30
|
+
- "Float subtraction precision"
|
|
31
|
+
safe_for_automation: true
|
|
32
|
+
|
|
33
|
+
currency_penny:
|
|
34
|
+
value: 0.01
|
|
35
|
+
bugs_caught:
|
|
36
|
+
- "Currency precision (use integers for cents)"
|
|
37
|
+
safe_for_automation: true
|
|
38
|
+
|
|
39
|
+
currency_calculation:
|
|
40
|
+
expression: "19.99 * 100"
|
|
41
|
+
expected: 1999
|
|
42
|
+
actual: 1998.9999999999998
|
|
43
|
+
bugs_caught:
|
|
44
|
+
- "Currency multiplication precision"
|
|
45
|
+
safe_for_automation: true
|
|
46
|
+
|
|
47
|
+
very_small:
|
|
48
|
+
value: 1e-300
|
|
49
|
+
bugs_caught:
|
|
50
|
+
- "Very small number handling"
|
|
51
|
+
- "Underflow risks"
|
|
52
|
+
safe_for_automation: true
|
|
53
|
+
|
|
54
|
+
very_large:
|
|
55
|
+
value: 1e300
|
|
56
|
+
bugs_caught:
|
|
57
|
+
- "Very large number handling"
|
|
58
|
+
- "Overflow risks"
|
|
59
|
+
safe_for_automation: true
|
|
60
|
+
|
|
61
|
+
recurring_decimal:
|
|
62
|
+
expression: "1 / 3"
|
|
63
|
+
bugs_caught:
|
|
64
|
+
- "Repeating decimal representation"
|
|
65
|
+
safe_for_automation: true
|
|
66
|
+
|
|
67
|
+
division_precision:
|
|
68
|
+
expression: "10 / 3 * 3"
|
|
69
|
+
expected: 10
|
|
70
|
+
actual: 9.999999999999998
|
|
71
|
+
bugs_caught:
|
|
72
|
+
- "Division-multiplication precision loss"
|
|
73
|
+
safe_for_automation: true
|
|
74
|
+
|
|
75
|
+
sum_many_small:
|
|
76
|
+
expression: "0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1"
|
|
77
|
+
expected: 1.0
|
|
78
|
+
actual: 0.9999999999999999
|
|
79
|
+
bugs_caught:
|
|
80
|
+
- "Accumulated rounding errors"
|
|
81
|
+
safe_for_automation: true
|
|
82
|
+
|
|
83
|
+
percentage_of_percentage:
|
|
84
|
+
expression: "100 * 0.7 * 0.7"
|
|
85
|
+
expected: 49
|
|
86
|
+
actual: 48.99999999999999
|
|
87
|
+
bugs_caught:
|
|
88
|
+
- "Compound percentage calculations"
|
|
89
|
+
safe_for_automation: true
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
metadata:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
last_updated: "2026-02-01"
|
|
4
|
+
source_urls: []
|
|
5
|
+
|
|
6
|
+
category: numbers
|
|
7
|
+
subcategory: special
|
|
8
|
+
tier: T1
|
|
9
|
+
|
|
10
|
+
bugs_caught:
|
|
11
|
+
- "NaN propagation"
|
|
12
|
+
- "Infinity handling"
|
|
13
|
+
- "Special value comparisons"
|
|
14
|
+
|
|
15
|
+
values:
|
|
16
|
+
nan:
|
|
17
|
+
value: "NaN"
|
|
18
|
+
bugs_caught:
|
|
19
|
+
- "NaN !== NaN comparison failure"
|
|
20
|
+
- "NaN propagation through calculations"
|
|
21
|
+
- "isNaN vs Number.isNaN confusion"
|
|
22
|
+
safe_for_automation: true
|
|
23
|
+
note: "Use Number.isNaN() not isNaN()"
|
|
24
|
+
|
|
25
|
+
positive_infinity:
|
|
26
|
+
value: "Infinity"
|
|
27
|
+
bugs_caught:
|
|
28
|
+
- "Infinite loop risks"
|
|
29
|
+
- "Display of infinite values"
|
|
30
|
+
- "Comparison with Infinity"
|
|
31
|
+
safe_for_automation: true
|
|
32
|
+
|
|
33
|
+
negative_infinity:
|
|
34
|
+
value: "-Infinity"
|
|
35
|
+
bugs_caught:
|
|
36
|
+
- "Negative infinity handling"
|
|
37
|
+
- "Min value calculations"
|
|
38
|
+
safe_for_automation: true
|
|
39
|
+
|
|
40
|
+
epsilon:
|
|
41
|
+
value: 2.220446049250313e-16
|
|
42
|
+
bugs_caught:
|
|
43
|
+
- "Floating point comparison threshold"
|
|
44
|
+
safe_for_automation: true
|
|
45
|
+
note: "Number.EPSILON in JavaScript"
|
|
46
|
+
|
|
47
|
+
max_value:
|
|
48
|
+
value: 1.7976931348623157e+308
|
|
49
|
+
bugs_caught:
|
|
50
|
+
- "Maximum float value"
|
|
51
|
+
- "Overflow to Infinity"
|
|
52
|
+
safe_for_automation: true
|
|
53
|
+
note: "Number.MAX_VALUE in JavaScript"
|
|
54
|
+
|
|
55
|
+
min_value:
|
|
56
|
+
value: 5e-324
|
|
57
|
+
bugs_caught:
|
|
58
|
+
- "Minimum positive float"
|
|
59
|
+
- "Underflow to zero"
|
|
60
|
+
safe_for_automation: true
|
|
61
|
+
note: "Number.MIN_VALUE in JavaScript (positive)"
|
|
62
|
+
|
|
63
|
+
min_safe_integer:
|
|
64
|
+
value: -9007199254740991
|
|
65
|
+
bugs_caught:
|
|
66
|
+
- "Minimum safe integer"
|
|
67
|
+
- "Precision loss below this"
|
|
68
|
+
safe_for_automation: true
|
|
69
|
+
note: "-(2^53 - 1)"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
metadata:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
last_updated: "2026-02-01"
|
|
4
|
+
source_urls: []
|
|
5
|
+
|
|
6
|
+
category: strings
|
|
7
|
+
subcategory: boundaries
|
|
8
|
+
tier: T0
|
|
9
|
+
|
|
10
|
+
bugs_caught:
|
|
11
|
+
- "NullPointerException on empty input"
|
|
12
|
+
- "Off-by-one in length validation"
|
|
13
|
+
- "Buffer overflow on long strings"
|
|
14
|
+
- "Whitespace-only treated as empty"
|
|
15
|
+
|
|
16
|
+
values:
|
|
17
|
+
empty:
|
|
18
|
+
value: ""
|
|
19
|
+
bugs_caught:
|
|
20
|
+
- "NullPointerException"
|
|
21
|
+
- "Empty input not handled"
|
|
22
|
+
- "Length validation off-by-one"
|
|
23
|
+
safe_for_automation: true
|
|
24
|
+
|
|
25
|
+
single_char:
|
|
26
|
+
value: "a"
|
|
27
|
+
bugs_caught:
|
|
28
|
+
- "Minimum length validation"
|
|
29
|
+
- "Single vs empty distinction"
|
|
30
|
+
safe_for_automation: true
|
|
31
|
+
|
|
32
|
+
two_chars:
|
|
33
|
+
value: "ab"
|
|
34
|
+
bugs_caught:
|
|
35
|
+
- "Off-by-one at minimum boundary"
|
|
36
|
+
safe_for_automation: true
|
|
37
|
+
|
|
38
|
+
whitespace_only:
|
|
39
|
+
value: " "
|
|
40
|
+
bugs_caught:
|
|
41
|
+
- "Trim logic errors"
|
|
42
|
+
- "Empty vs whitespace distinction"
|
|
43
|
+
safe_for_automation: true
|
|
44
|
+
|
|
45
|
+
single_space:
|
|
46
|
+
value: " "
|
|
47
|
+
bugs_caught:
|
|
48
|
+
- "Space handling"
|
|
49
|
+
- "Trim edge case"
|
|
50
|
+
safe_for_automation: true
|
|
51
|
+
|
|
52
|
+
tabs_and_spaces:
|
|
53
|
+
value: "\t \t"
|
|
54
|
+
bugs_caught:
|
|
55
|
+
- "Mixed whitespace handling"
|
|
56
|
+
- "Inconsistent trim behavior"
|
|
57
|
+
safe_for_automation: true
|
|
58
|
+
|
|
59
|
+
leading_whitespace:
|
|
60
|
+
value: " hello"
|
|
61
|
+
bugs_caught:
|
|
62
|
+
- "Left trim failures"
|
|
63
|
+
- "Whitespace preservation bugs"
|
|
64
|
+
safe_for_automation: true
|
|
65
|
+
|
|
66
|
+
trailing_whitespace:
|
|
67
|
+
value: "hello "
|
|
68
|
+
bugs_caught:
|
|
69
|
+
- "Right trim failures"
|
|
70
|
+
- "Trailing space handling"
|
|
71
|
+
safe_for_automation: true
|
|
72
|
+
|
|
73
|
+
long_string_1000:
|
|
74
|
+
value_template: "a * 1000"
|
|
75
|
+
bugs_caught:
|
|
76
|
+
- "Performance degradation"
|
|
77
|
+
- "Memory allocation issues"
|
|
78
|
+
safe_for_automation: true
|
|
79
|
+
note: "Generate 1000 'a' characters"
|
|
80
|
+
|
|
81
|
+
long_string_10000:
|
|
82
|
+
value_template: "a * 10000"
|
|
83
|
+
bugs_caught:
|
|
84
|
+
- "Buffer limits"
|
|
85
|
+
- "Truncation errors"
|
|
86
|
+
safe_for_automation: true
|
|
87
|
+
note: "Generate 10000 'a' characters"
|
|
88
|
+
|
|
89
|
+
max_length_minus_1:
|
|
90
|
+
value_template: "a * (MAX_LENGTH - 1)"
|
|
91
|
+
bugs_caught:
|
|
92
|
+
- "Off-by-one at maximum"
|
|
93
|
+
safe_for_automation: true
|
|
94
|
+
note: "Use system-specific MAX_LENGTH"
|
|
95
|
+
|
|
96
|
+
max_length:
|
|
97
|
+
value_template: "a * MAX_LENGTH"
|
|
98
|
+
bugs_caught:
|
|
99
|
+
- "Exact boundary handling"
|
|
100
|
+
safe_for_automation: true
|
|
101
|
+
note: "Use system-specific MAX_LENGTH"
|
|
102
|
+
|
|
103
|
+
max_length_plus_1:
|
|
104
|
+
value_template: "a * (MAX_LENGTH + 1)"
|
|
105
|
+
bugs_caught:
|
|
106
|
+
- "Overflow at maximum"
|
|
107
|
+
- "Rejection message quality"
|
|
108
|
+
safe_for_automation: true
|
|
109
|
+
note: "Use system-specific MAX_LENGTH"
|