@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,132 @@
|
|
|
1
|
+
metadata:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
last_updated: "2026-02-01"
|
|
4
|
+
source_urls: []
|
|
5
|
+
|
|
6
|
+
category: dates
|
|
7
|
+
subcategory: invalid
|
|
8
|
+
tier: T2
|
|
9
|
+
|
|
10
|
+
bugs_caught:
|
|
11
|
+
- "Invalid date parsing"
|
|
12
|
+
- "Date validation bypass"
|
|
13
|
+
- "Error handling for bad dates"
|
|
14
|
+
|
|
15
|
+
values:
|
|
16
|
+
feb_30:
|
|
17
|
+
value: "2024-02-30"
|
|
18
|
+
bugs_caught:
|
|
19
|
+
- "February 30 doesn't exist"
|
|
20
|
+
- "Date validation"
|
|
21
|
+
safe_for_automation: true
|
|
22
|
+
|
|
23
|
+
feb_29_non_leap:
|
|
24
|
+
value: "2023-02-29"
|
|
25
|
+
bugs_caught:
|
|
26
|
+
- "Feb 29 in non-leap year"
|
|
27
|
+
safe_for_automation: true
|
|
28
|
+
|
|
29
|
+
month_32:
|
|
30
|
+
value: "2024-01-32"
|
|
31
|
+
bugs_caught:
|
|
32
|
+
- "Day 32 doesn't exist"
|
|
33
|
+
safe_for_automation: true
|
|
34
|
+
|
|
35
|
+
month_0:
|
|
36
|
+
value: "2024-00-15"
|
|
37
|
+
bugs_caught:
|
|
38
|
+
- "Month 0 doesn't exist"
|
|
39
|
+
safe_for_automation: true
|
|
40
|
+
|
|
41
|
+
month_13:
|
|
42
|
+
value: "2024-13-15"
|
|
43
|
+
bugs_caught:
|
|
44
|
+
- "Month 13 doesn't exist"
|
|
45
|
+
safe_for_automation: true
|
|
46
|
+
|
|
47
|
+
day_0:
|
|
48
|
+
value: "2024-06-00"
|
|
49
|
+
bugs_caught:
|
|
50
|
+
- "Day 0 doesn't exist"
|
|
51
|
+
safe_for_automation: true
|
|
52
|
+
|
|
53
|
+
negative_year:
|
|
54
|
+
value: "-2024-06-15"
|
|
55
|
+
bugs_caught:
|
|
56
|
+
- "Negative year handling"
|
|
57
|
+
- "BCE date handling"
|
|
58
|
+
safe_for_automation: true
|
|
59
|
+
|
|
60
|
+
hour_24:
|
|
61
|
+
value: "2024-06-15T24:00:00"
|
|
62
|
+
bugs_caught:
|
|
63
|
+
- "Hour 24 validity"
|
|
64
|
+
- "ISO 8601 allows 24:00:00"
|
|
65
|
+
safe_for_automation: true
|
|
66
|
+
note: "Technically valid in ISO 8601, means midnight next day"
|
|
67
|
+
|
|
68
|
+
hour_25:
|
|
69
|
+
value: "2024-06-15T25:00:00"
|
|
70
|
+
bugs_caught:
|
|
71
|
+
- "Hour 25 doesn't exist"
|
|
72
|
+
safe_for_automation: true
|
|
73
|
+
|
|
74
|
+
minute_60:
|
|
75
|
+
value: "2024-06-15T12:60:00"
|
|
76
|
+
bugs_caught:
|
|
77
|
+
- "Minute 60 doesn't exist"
|
|
78
|
+
safe_for_automation: true
|
|
79
|
+
|
|
80
|
+
second_60:
|
|
81
|
+
value: "2024-06-15T23:59:60"
|
|
82
|
+
bugs_caught:
|
|
83
|
+
- "Leap second handling"
|
|
84
|
+
safe_for_automation: true
|
|
85
|
+
note: "Valid during leap seconds, otherwise invalid"
|
|
86
|
+
|
|
87
|
+
empty_string:
|
|
88
|
+
value: ""
|
|
89
|
+
bugs_caught:
|
|
90
|
+
- "Empty date string"
|
|
91
|
+
- "Null/empty handling"
|
|
92
|
+
safe_for_automation: true
|
|
93
|
+
|
|
94
|
+
invalid_format:
|
|
95
|
+
value: "not-a-date"
|
|
96
|
+
bugs_caught:
|
|
97
|
+
- "Non-date string parsing"
|
|
98
|
+
safe_for_automation: true
|
|
99
|
+
|
|
100
|
+
partial_date:
|
|
101
|
+
value: "2024-06"
|
|
102
|
+
bugs_caught:
|
|
103
|
+
- "Partial date handling"
|
|
104
|
+
- "Missing day"
|
|
105
|
+
safe_for_automation: true
|
|
106
|
+
|
|
107
|
+
wrong_separator:
|
|
108
|
+
value: "2024/06/15"
|
|
109
|
+
bugs_caught:
|
|
110
|
+
- "Slash separator handling"
|
|
111
|
+
- "Format flexibility"
|
|
112
|
+
safe_for_automation: true
|
|
113
|
+
|
|
114
|
+
us_format:
|
|
115
|
+
value: "06/15/2024"
|
|
116
|
+
bugs_caught:
|
|
117
|
+
- "US date format (MM/DD/YYYY)"
|
|
118
|
+
- "Ambiguous format"
|
|
119
|
+
safe_for_automation: true
|
|
120
|
+
|
|
121
|
+
european_format:
|
|
122
|
+
value: "15/06/2024"
|
|
123
|
+
bugs_caught:
|
|
124
|
+
- "European format (DD/MM/YYYY)"
|
|
125
|
+
- "Format ambiguity"
|
|
126
|
+
safe_for_automation: true
|
|
127
|
+
|
|
128
|
+
ambiguous_date:
|
|
129
|
+
value: "01/02/2024"
|
|
130
|
+
bugs_caught:
|
|
131
|
+
- "Ambiguous date (Jan 2 or Feb 1?)"
|
|
132
|
+
safe_for_automation: true
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
metadata:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
last_updated: "2026-02-01"
|
|
4
|
+
source_urls: []
|
|
5
|
+
|
|
6
|
+
category: dates
|
|
7
|
+
subcategory: timezone
|
|
8
|
+
tier: T2
|
|
9
|
+
|
|
10
|
+
bugs_caught:
|
|
11
|
+
- "Daylight saving time transitions"
|
|
12
|
+
- "UTC offset handling"
|
|
13
|
+
- "Timezone conversion errors"
|
|
14
|
+
|
|
15
|
+
values:
|
|
16
|
+
utc:
|
|
17
|
+
value: "2024-06-15T12:00:00Z"
|
|
18
|
+
bugs_caught:
|
|
19
|
+
- "UTC handling"
|
|
20
|
+
- "Z suffix parsing"
|
|
21
|
+
safe_for_automation: true
|
|
22
|
+
|
|
23
|
+
positive_offset:
|
|
24
|
+
value: "2024-06-15T12:00:00+05:30"
|
|
25
|
+
bugs_caught:
|
|
26
|
+
- "Positive UTC offset"
|
|
27
|
+
- "India Standard Time"
|
|
28
|
+
safe_for_automation: true
|
|
29
|
+
|
|
30
|
+
negative_offset:
|
|
31
|
+
value: "2024-06-15T12:00:00-08:00"
|
|
32
|
+
bugs_caught:
|
|
33
|
+
- "Negative UTC offset"
|
|
34
|
+
- "Pacific Time"
|
|
35
|
+
safe_for_automation: true
|
|
36
|
+
|
|
37
|
+
max_positive_offset:
|
|
38
|
+
value: "2024-06-15T12:00:00+14:00"
|
|
39
|
+
bugs_caught:
|
|
40
|
+
- "Maximum positive offset"
|
|
41
|
+
- "Line Islands"
|
|
42
|
+
safe_for_automation: true
|
|
43
|
+
|
|
44
|
+
max_negative_offset:
|
|
45
|
+
value: "2024-06-15T12:00:00-12:00"
|
|
46
|
+
bugs_caught:
|
|
47
|
+
- "Maximum negative offset"
|
|
48
|
+
- "Baker Island"
|
|
49
|
+
safe_for_automation: true
|
|
50
|
+
|
|
51
|
+
half_hour_offset:
|
|
52
|
+
value: "2024-06-15T12:00:00+05:30"
|
|
53
|
+
bugs_caught:
|
|
54
|
+
- "Half-hour timezone"
|
|
55
|
+
- "India, Nepal, etc."
|
|
56
|
+
safe_for_automation: true
|
|
57
|
+
|
|
58
|
+
quarter_hour_offset:
|
|
59
|
+
value: "2024-06-15T12:00:00+05:45"
|
|
60
|
+
bugs_caught:
|
|
61
|
+
- "Quarter-hour timezone"
|
|
62
|
+
- "Nepal"
|
|
63
|
+
safe_for_automation: true
|
|
64
|
+
|
|
65
|
+
dst_spring_forward_us:
|
|
66
|
+
value: "2024-03-10T02:30:00"
|
|
67
|
+
timezone: "America/New_York"
|
|
68
|
+
bugs_caught:
|
|
69
|
+
- "DST spring forward"
|
|
70
|
+
- "Non-existent time"
|
|
71
|
+
safe_for_automation: true
|
|
72
|
+
note: "2:30 AM doesn't exist on this day in US"
|
|
73
|
+
|
|
74
|
+
dst_fall_back_us:
|
|
75
|
+
value: "2024-11-03T01:30:00"
|
|
76
|
+
timezone: "America/New_York"
|
|
77
|
+
bugs_caught:
|
|
78
|
+
- "DST fall back"
|
|
79
|
+
- "Ambiguous time"
|
|
80
|
+
safe_for_automation: true
|
|
81
|
+
note: "1:30 AM occurs twice on this day in US"
|
|
82
|
+
|
|
83
|
+
dst_spring_forward_eu:
|
|
84
|
+
value: "2024-03-31T02:30:00"
|
|
85
|
+
timezone: "Europe/London"
|
|
86
|
+
bugs_caught:
|
|
87
|
+
- "EU DST spring forward"
|
|
88
|
+
safe_for_automation: true
|
|
89
|
+
|
|
90
|
+
dst_fall_back_eu:
|
|
91
|
+
value: "2024-10-27T01:30:00"
|
|
92
|
+
timezone: "Europe/London"
|
|
93
|
+
bugs_caught:
|
|
94
|
+
- "EU DST fall back"
|
|
95
|
+
safe_for_automation: true
|
|
96
|
+
|
|
97
|
+
no_dst_timezone:
|
|
98
|
+
value: "2024-06-15T12:00:00"
|
|
99
|
+
timezone: "UTC"
|
|
100
|
+
bugs_caught:
|
|
101
|
+
- "No-DST timezone handling"
|
|
102
|
+
safe_for_automation: true
|
|
103
|
+
|
|
104
|
+
date_line_crossing:
|
|
105
|
+
value: "2024-06-15T23:00:00+12:00"
|
|
106
|
+
bugs_caught:
|
|
107
|
+
- "International Date Line"
|
|
108
|
+
- "Same instant, different dates"
|
|
109
|
+
safe_for_automation: true
|
|
110
|
+
note: "Same instant is 2024-06-16 in -12:00"
|
|
111
|
+
|
|
112
|
+
historical_tz_change:
|
|
113
|
+
value: "2011-12-29T23:59:59"
|
|
114
|
+
timezone: "Pacific/Apia"
|
|
115
|
+
bugs_caught:
|
|
116
|
+
- "Historical timezone change"
|
|
117
|
+
- "Samoa skipped Dec 30, 2011"
|
|
118
|
+
safe_for_automation: true
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
metadata:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
last_updated: "2026-02-01"
|
|
4
|
+
source_urls: []
|
|
5
|
+
|
|
6
|
+
category: encoding
|
|
7
|
+
subcategory: charset
|
|
8
|
+
tier: T2
|
|
9
|
+
|
|
10
|
+
bugs_caught:
|
|
11
|
+
- "Character encoding detection"
|
|
12
|
+
- "BOM handling"
|
|
13
|
+
- "Mojibake"
|
|
14
|
+
|
|
15
|
+
values:
|
|
16
|
+
utf8_bom:
|
|
17
|
+
value: "\xEF\xBB\xBFHello"
|
|
18
|
+
bugs_caught:
|
|
19
|
+
- "UTF-8 BOM handling"
|
|
20
|
+
- "Invisible prefix"
|
|
21
|
+
safe_for_automation: true
|
|
22
|
+
bytes: "EF BB BF 48 65 6C 6C 6F"
|
|
23
|
+
|
|
24
|
+
utf16_le_bom:
|
|
25
|
+
value: "\xFF\xFEH\x00e\x00l\x00l\x00o\x00"
|
|
26
|
+
bugs_caught:
|
|
27
|
+
- "UTF-16 LE detection"
|
|
28
|
+
safe_for_automation: true
|
|
29
|
+
bytes: "FF FE 48 00 65 00 6C 00 6C 00 6F 00"
|
|
30
|
+
|
|
31
|
+
utf16_be_bom:
|
|
32
|
+
value: "\xFE\xFF\x00H\x00e\x00l\x00l\x00o"
|
|
33
|
+
bugs_caught:
|
|
34
|
+
- "UTF-16 BE detection"
|
|
35
|
+
safe_for_automation: true
|
|
36
|
+
bytes: "FE FF 00 48 00 65 00 6C 00 6C 00 6F"
|
|
37
|
+
|
|
38
|
+
latin1_high:
|
|
39
|
+
value: "\xe9"
|
|
40
|
+
bugs_caught:
|
|
41
|
+
- "Latin-1 high byte (é)"
|
|
42
|
+
- "UTF-8 vs Latin-1 confusion"
|
|
43
|
+
safe_for_automation: true
|
|
44
|
+
note: "é in Latin-1, invalid UTF-8"
|
|
45
|
+
|
|
46
|
+
windows_1252:
|
|
47
|
+
value: "\x93\x94"
|
|
48
|
+
bugs_caught:
|
|
49
|
+
- "Windows smart quotes"
|
|
50
|
+
- "CP1252 vs Latin-1"
|
|
51
|
+
safe_for_automation: true
|
|
52
|
+
note: "Smart quotes in Windows-1252"
|
|
53
|
+
|
|
54
|
+
ascii_only:
|
|
55
|
+
value: "Hello World 123"
|
|
56
|
+
bugs_caught:
|
|
57
|
+
- "Pure ASCII handling"
|
|
58
|
+
safe_for_automation: true
|
|
59
|
+
|
|
60
|
+
high_ascii:
|
|
61
|
+
value: "\x80\x81\x82"
|
|
62
|
+
bugs_caught:
|
|
63
|
+
- "High ASCII bytes"
|
|
64
|
+
- "Extended ASCII handling"
|
|
65
|
+
safe_for_automation: true
|
|
66
|
+
|
|
67
|
+
mixed_valid_invalid:
|
|
68
|
+
value: "Hello\xFFWorld"
|
|
69
|
+
bugs_caught:
|
|
70
|
+
- "Invalid byte in string"
|
|
71
|
+
- "Replacement character handling"
|
|
72
|
+
safe_for_automation: true
|
|
73
|
+
|
|
74
|
+
null_byte_middle:
|
|
75
|
+
value: "Hello\x00World"
|
|
76
|
+
bugs_caught:
|
|
77
|
+
- "Null byte in string"
|
|
78
|
+
- "C-string truncation"
|
|
79
|
+
safe_for_automation: true
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
metadata:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
last_updated: "2026-02-01"
|
|
4
|
+
source_urls: []
|
|
5
|
+
|
|
6
|
+
category: encoding
|
|
7
|
+
subcategory: normalization
|
|
8
|
+
tier: T2
|
|
9
|
+
|
|
10
|
+
bugs_caught:
|
|
11
|
+
- "Unicode normalization mismatches"
|
|
12
|
+
- "String comparison failures"
|
|
13
|
+
- "Security bypasses"
|
|
14
|
+
|
|
15
|
+
values:
|
|
16
|
+
nfc_composed:
|
|
17
|
+
value: "\u00e9"
|
|
18
|
+
bugs_caught:
|
|
19
|
+
- "NFC composed form"
|
|
20
|
+
- "é as single codepoint"
|
|
21
|
+
safe_for_automation: true
|
|
22
|
+
codepoints: ["U+00E9"]
|
|
23
|
+
|
|
24
|
+
nfd_decomposed:
|
|
25
|
+
value: "\u0065\u0301"
|
|
26
|
+
bugs_caught:
|
|
27
|
+
- "NFD decomposed form"
|
|
28
|
+
- "é as e + combining accent"
|
|
29
|
+
safe_for_automation: true
|
|
30
|
+
codepoints: ["U+0065", "U+0301"]
|
|
31
|
+
|
|
32
|
+
nfc_vs_nfd:
|
|
33
|
+
values:
|
|
34
|
+
nfc: "\u00e9"
|
|
35
|
+
nfd: "\u0065\u0301"
|
|
36
|
+
bugs_caught:
|
|
37
|
+
- "Normalization comparison failure"
|
|
38
|
+
- "Visual identical, byte different"
|
|
39
|
+
safe_for_automation: true
|
|
40
|
+
note: "Both render as é, but != without normalization"
|
|
41
|
+
|
|
42
|
+
overlong_utf8:
|
|
43
|
+
value: "\xC0\xAF"
|
|
44
|
+
bugs_caught:
|
|
45
|
+
- "Overlong UTF-8 encoding"
|
|
46
|
+
- "Security filter bypass"
|
|
47
|
+
safe_for_automation: true
|
|
48
|
+
note: "Overlong encoding of '/'"
|
|
49
|
+
|
|
50
|
+
invalid_utf8_continuation:
|
|
51
|
+
value: "\x80\x81\x82"
|
|
52
|
+
bugs_caught:
|
|
53
|
+
- "Invalid UTF-8 continuation bytes"
|
|
54
|
+
safe_for_automation: true
|
|
55
|
+
|
|
56
|
+
invalid_utf8_start:
|
|
57
|
+
value: "\xFE\xFF"
|
|
58
|
+
bugs_caught:
|
|
59
|
+
- "Invalid UTF-8 start bytes"
|
|
60
|
+
safe_for_automation: true
|
|
61
|
+
|
|
62
|
+
surrogate_pair:
|
|
63
|
+
value: "\uD83D\uDE00"
|
|
64
|
+
bugs_caught:
|
|
65
|
+
- "UTF-16 surrogate pair"
|
|
66
|
+
- "Emoji handling"
|
|
67
|
+
safe_for_automation: true
|
|
68
|
+
note: "😀 as surrogate pair"
|
|
69
|
+
|
|
70
|
+
unpaired_surrogate:
|
|
71
|
+
value: "\uD800"
|
|
72
|
+
bugs_caught:
|
|
73
|
+
- "Unpaired surrogate"
|
|
74
|
+
- "Invalid UTF-16"
|
|
75
|
+
safe_for_automation: true
|
|
76
|
+
|
|
77
|
+
bidi_override:
|
|
78
|
+
value: "\u202Edesrever"
|
|
79
|
+
bugs_caught:
|
|
80
|
+
- "Right-to-left override"
|
|
81
|
+
- "Display spoofing"
|
|
82
|
+
safe_for_automation: true
|
|
83
|
+
note: "Renders as 'reversed'"
|
|
84
|
+
|
|
85
|
+
zero_width:
|
|
86
|
+
value: "a\u200Bb"
|
|
87
|
+
bugs_caught:
|
|
88
|
+
- "Zero-width space"
|
|
89
|
+
- "Invisible characters"
|
|
90
|
+
safe_for_automation: true
|
|
91
|
+
|
|
92
|
+
soft_hyphen:
|
|
93
|
+
value: "soft\u00ADhyphen"
|
|
94
|
+
bugs_caught:
|
|
95
|
+
- "Soft hyphen handling"
|
|
96
|
+
- "Print vs display"
|
|
97
|
+
safe_for_automation: true
|
|
98
|
+
|
|
99
|
+
ligature:
|
|
100
|
+
value: "\uFB01"
|
|
101
|
+
bugs_caught:
|
|
102
|
+
- "Ligature handling (fi)"
|
|
103
|
+
- "Search/match failure"
|
|
104
|
+
safe_for_automation: true
|
|
105
|
+
note: "fi ligature vs 'fi'"
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
metadata:
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
last_updated: "2026-02-01"
|
|
4
|
+
source_urls: []
|
|
5
|
+
|
|
6
|
+
category: formats
|
|
7
|
+
subcategory: email
|
|
8
|
+
tier: T2
|
|
9
|
+
|
|
10
|
+
bugs_caught:
|
|
11
|
+
- "Email validation too strict"
|
|
12
|
+
- "Email validation too lenient"
|
|
13
|
+
- "RFC compliance issues"
|
|
14
|
+
|
|
15
|
+
values:
|
|
16
|
+
# Valid but often rejected
|
|
17
|
+
plus_addressing:
|
|
18
|
+
value: "user+tag@example.com"
|
|
19
|
+
valid: true
|
|
20
|
+
bugs_caught:
|
|
21
|
+
- "Plus addressing rejected"
|
|
22
|
+
- "Gmail style tagging"
|
|
23
|
+
safe_for_automation: true
|
|
24
|
+
|
|
25
|
+
subdomain:
|
|
26
|
+
value: "user@mail.example.com"
|
|
27
|
+
valid: true
|
|
28
|
+
bugs_caught:
|
|
29
|
+
- "Subdomain handling"
|
|
30
|
+
safe_for_automation: true
|
|
31
|
+
|
|
32
|
+
numeric_domain:
|
|
33
|
+
value: "user@123.45.67.89"
|
|
34
|
+
valid: true
|
|
35
|
+
bugs_caught:
|
|
36
|
+
- "IP address domain"
|
|
37
|
+
safe_for_automation: true
|
|
38
|
+
|
|
39
|
+
quoted_local:
|
|
40
|
+
value: "\"user name\"@example.com"
|
|
41
|
+
valid: true
|
|
42
|
+
bugs_caught:
|
|
43
|
+
- "Quoted local part"
|
|
44
|
+
- "Space in email"
|
|
45
|
+
safe_for_automation: true
|
|
46
|
+
|
|
47
|
+
dotted_local:
|
|
48
|
+
value: "user.name.here@example.com"
|
|
49
|
+
valid: true
|
|
50
|
+
bugs_caught:
|
|
51
|
+
- "Multiple dots handling"
|
|
52
|
+
safe_for_automation: true
|
|
53
|
+
|
|
54
|
+
single_char_local:
|
|
55
|
+
value: "a@example.com"
|
|
56
|
+
valid: true
|
|
57
|
+
bugs_caught:
|
|
58
|
+
- "Single character local"
|
|
59
|
+
safe_for_automation: true
|
|
60
|
+
|
|
61
|
+
long_local:
|
|
62
|
+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com"
|
|
63
|
+
valid: true
|
|
64
|
+
bugs_caught:
|
|
65
|
+
- "64-char local part limit"
|
|
66
|
+
safe_for_automation: true
|
|
67
|
+
note: "Max 64 chars in local part"
|
|
68
|
+
|
|
69
|
+
new_tld:
|
|
70
|
+
value: "user@example.technology"
|
|
71
|
+
valid: true
|
|
72
|
+
bugs_caught:
|
|
73
|
+
- "New TLD rejection"
|
|
74
|
+
- "TLD length assumptions"
|
|
75
|
+
safe_for_automation: true
|
|
76
|
+
|
|
77
|
+
idn_domain:
|
|
78
|
+
value: "user@münchen.de"
|
|
79
|
+
valid: true
|
|
80
|
+
bugs_caught:
|
|
81
|
+
- "International domain name"
|
|
82
|
+
- "Punycode handling"
|
|
83
|
+
safe_for_automation: true
|
|
84
|
+
|
|
85
|
+
# Invalid but often accepted
|
|
86
|
+
double_dot:
|
|
87
|
+
value: "user..name@example.com"
|
|
88
|
+
valid: false
|
|
89
|
+
bugs_caught:
|
|
90
|
+
- "Consecutive dots invalid"
|
|
91
|
+
safe_for_automation: true
|
|
92
|
+
|
|
93
|
+
leading_dot:
|
|
94
|
+
value: ".user@example.com"
|
|
95
|
+
valid: false
|
|
96
|
+
bugs_caught:
|
|
97
|
+
- "Leading dot invalid"
|
|
98
|
+
safe_for_automation: true
|
|
99
|
+
|
|
100
|
+
trailing_dot_local:
|
|
101
|
+
value: "user.@example.com"
|
|
102
|
+
valid: false
|
|
103
|
+
bugs_caught:
|
|
104
|
+
- "Trailing dot in local"
|
|
105
|
+
safe_for_automation: true
|
|
106
|
+
|
|
107
|
+
no_at:
|
|
108
|
+
value: "userexample.com"
|
|
109
|
+
valid: false
|
|
110
|
+
bugs_caught:
|
|
111
|
+
- "Missing @ sign"
|
|
112
|
+
safe_for_automation: true
|
|
113
|
+
|
|
114
|
+
double_at:
|
|
115
|
+
value: "user@@example.com"
|
|
116
|
+
valid: false
|
|
117
|
+
bugs_caught:
|
|
118
|
+
- "Double @ sign"
|
|
119
|
+
safe_for_automation: true
|
|
120
|
+
|
|
121
|
+
no_domain:
|
|
122
|
+
value: "user@"
|
|
123
|
+
valid: false
|
|
124
|
+
bugs_caught:
|
|
125
|
+
- "Missing domain"
|
|
126
|
+
safe_for_automation: true
|
|
127
|
+
|
|
128
|
+
no_local:
|
|
129
|
+
value: "@example.com"
|
|
130
|
+
valid: false
|
|
131
|
+
bugs_caught:
|
|
132
|
+
- "Missing local part"
|
|
133
|
+
safe_for_automation: true
|
|
134
|
+
|
|
135
|
+
space_unquoted:
|
|
136
|
+
value: "user name@example.com"
|
|
137
|
+
valid: false
|
|
138
|
+
bugs_caught:
|
|
139
|
+
- "Unquoted space"
|
|
140
|
+
safe_for_automation: true
|
|
141
|
+
|
|
142
|
+
special_unquoted:
|
|
143
|
+
value: "user<>@example.com"
|
|
144
|
+
valid: false
|
|
145
|
+
bugs_caught:
|
|
146
|
+
- "Special chars unquoted"
|
|
147
|
+
safe_for_automation: true
|
|
148
|
+
|
|
149
|
+
empty:
|
|
150
|
+
value: ""
|
|
151
|
+
valid: false
|
|
152
|
+
bugs_caught:
|
|
153
|
+
- "Empty email"
|
|
154
|
+
safe_for_automation: true
|