@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.
Files changed (175) hide show
  1. package/.claude-plugin/plugin.json +43 -0
  2. package/agents/bulwark-fix-validator.md +633 -0
  3. package/agents/bulwark-implementer.md +391 -0
  4. package/agents/bulwark-issue-analyzer.md +308 -0
  5. package/agents/bulwark-standards-reviewer.md +221 -0
  6. package/agents/plan-creation-architect.md +323 -0
  7. package/agents/plan-creation-eng-lead.md +352 -0
  8. package/agents/plan-creation-po.md +300 -0
  9. package/agents/plan-creation-qa-critic.md +334 -0
  10. package/agents/product-ideation-competitive-analyzer.md +298 -0
  11. package/agents/product-ideation-idea-validator.md +268 -0
  12. package/agents/product-ideation-market-researcher.md +292 -0
  13. package/agents/product-ideation-pattern-documenter.md +308 -0
  14. package/agents/product-ideation-segment-analyzer.md +303 -0
  15. package/agents/product-ideation-strategist.md +259 -0
  16. package/agents/statusline-setup.md +97 -0
  17. package/hooks/hooks.json +59 -0
  18. package/package.json +45 -0
  19. package/scripts/hooks/cleanup-stale.sh +13 -0
  20. package/scripts/hooks/enforce-quality.sh +166 -0
  21. package/scripts/hooks/implementer-quality.sh +256 -0
  22. package/scripts/hooks/inject-protocol.sh +52 -0
  23. package/scripts/hooks/suggest-pipeline.sh +175 -0
  24. package/scripts/hooks/track-pipeline-start.sh +37 -0
  25. package/scripts/hooks/track-pipeline-stop.sh +52 -0
  26. package/scripts/init-rules.sh +35 -0
  27. package/scripts/init.sh +151 -0
  28. package/skills/anthropic-validator/SKILL.md +607 -0
  29. package/skills/anthropic-validator/references/agents-checklist.md +131 -0
  30. package/skills/anthropic-validator/references/commands-checklist.md +102 -0
  31. package/skills/anthropic-validator/references/hooks-checklist.md +151 -0
  32. package/skills/anthropic-validator/references/mcp-checklist.md +136 -0
  33. package/skills/anthropic-validator/references/plugins-checklist.md +148 -0
  34. package/skills/anthropic-validator/references/skills-checklist.md +85 -0
  35. package/skills/assertion-patterns/SKILL.md +296 -0
  36. package/skills/bug-magnet-data/SKILL.md +284 -0
  37. package/skills/bug-magnet-data/context/cli-args.md +91 -0
  38. package/skills/bug-magnet-data/context/db-query.md +104 -0
  39. package/skills/bug-magnet-data/context/file-contents.md +103 -0
  40. package/skills/bug-magnet-data/context/http-body.md +91 -0
  41. package/skills/bug-magnet-data/context/process-spawn.md +123 -0
  42. package/skills/bug-magnet-data/data/booleans/boundaries.yaml +143 -0
  43. package/skills/bug-magnet-data/data/collections/arrays.yaml +114 -0
  44. package/skills/bug-magnet-data/data/collections/objects.yaml +123 -0
  45. package/skills/bug-magnet-data/data/concurrency/race-conditions.yaml +118 -0
  46. package/skills/bug-magnet-data/data/concurrency/state-machines.yaml +115 -0
  47. package/skills/bug-magnet-data/data/dates/boundaries.yaml +137 -0
  48. package/skills/bug-magnet-data/data/dates/invalid.yaml +132 -0
  49. package/skills/bug-magnet-data/data/dates/timezone.yaml +118 -0
  50. package/skills/bug-magnet-data/data/encoding/charset.yaml +79 -0
  51. package/skills/bug-magnet-data/data/encoding/normalization.yaml +105 -0
  52. package/skills/bug-magnet-data/data/formats/email.yaml +154 -0
  53. package/skills/bug-magnet-data/data/formats/json.yaml +187 -0
  54. package/skills/bug-magnet-data/data/formats/url.yaml +165 -0
  55. package/skills/bug-magnet-data/data/language-specific/javascript.yaml +182 -0
  56. package/skills/bug-magnet-data/data/language-specific/python.yaml +174 -0
  57. package/skills/bug-magnet-data/data/language-specific/rust.yaml +148 -0
  58. package/skills/bug-magnet-data/data/numbers/boundaries.yaml +161 -0
  59. package/skills/bug-magnet-data/data/numbers/precision.yaml +89 -0
  60. package/skills/bug-magnet-data/data/numbers/special.yaml +69 -0
  61. package/skills/bug-magnet-data/data/strings/boundaries.yaml +109 -0
  62. package/skills/bug-magnet-data/data/strings/injection.yaml +208 -0
  63. package/skills/bug-magnet-data/data/strings/special-chars.yaml +190 -0
  64. package/skills/bug-magnet-data/data/strings/unicode.yaml +139 -0
  65. package/skills/bug-magnet-data/references/external-lists.md +115 -0
  66. package/skills/bulwark-brainstorm/SKILL.md +563 -0
  67. package/skills/bulwark-brainstorm/references/at-teammate-prompts.md +60 -0
  68. package/skills/bulwark-brainstorm/references/role-critical-analyst.md +78 -0
  69. package/skills/bulwark-brainstorm/references/role-development-lead.md +66 -0
  70. package/skills/bulwark-brainstorm/references/role-product-delivery-lead.md +79 -0
  71. package/skills/bulwark-brainstorm/references/role-product-manager.md +62 -0
  72. package/skills/bulwark-brainstorm/references/role-project-sme.md +59 -0
  73. package/skills/bulwark-brainstorm/references/role-technical-architect.md +66 -0
  74. package/skills/bulwark-research/SKILL.md +298 -0
  75. package/skills/bulwark-research/references/viewpoint-contrarian.md +63 -0
  76. package/skills/bulwark-research/references/viewpoint-direct-investigation.md +62 -0
  77. package/skills/bulwark-research/references/viewpoint-first-principles.md +65 -0
  78. package/skills/bulwark-research/references/viewpoint-practitioner.md +62 -0
  79. package/skills/bulwark-research/references/viewpoint-prior-art.md +66 -0
  80. package/skills/bulwark-scaffold/SKILL.md +330 -0
  81. package/skills/bulwark-statusline/SKILL.md +161 -0
  82. package/skills/bulwark-statusline/scripts/statusline.sh +144 -0
  83. package/skills/bulwark-verify/SKILL.md +519 -0
  84. package/skills/code-review/SKILL.md +428 -0
  85. package/skills/code-review/examples/anti-patterns/linting.ts +181 -0
  86. package/skills/code-review/examples/anti-patterns/security.ts +91 -0
  87. package/skills/code-review/examples/anti-patterns/standards.ts +195 -0
  88. package/skills/code-review/examples/anti-patterns/type-safety.ts +108 -0
  89. package/skills/code-review/examples/recommended/linting.ts +195 -0
  90. package/skills/code-review/examples/recommended/security.ts +154 -0
  91. package/skills/code-review/examples/recommended/standards.ts +231 -0
  92. package/skills/code-review/examples/recommended/type-safety.ts +181 -0
  93. package/skills/code-review/frameworks/angular.md +218 -0
  94. package/skills/code-review/frameworks/django.md +235 -0
  95. package/skills/code-review/frameworks/express.md +207 -0
  96. package/skills/code-review/frameworks/flask.md +298 -0
  97. package/skills/code-review/frameworks/generic.md +146 -0
  98. package/skills/code-review/frameworks/react.md +152 -0
  99. package/skills/code-review/frameworks/vue.md +244 -0
  100. package/skills/code-review/references/linting-patterns.md +221 -0
  101. package/skills/code-review/references/security-patterns.md +125 -0
  102. package/skills/code-review/references/standards-patterns.md +246 -0
  103. package/skills/code-review/references/type-safety-patterns.md +130 -0
  104. package/skills/component-patterns/SKILL.md +131 -0
  105. package/skills/component-patterns/references/pattern-cli-command.md +118 -0
  106. package/skills/component-patterns/references/pattern-database.md +166 -0
  107. package/skills/component-patterns/references/pattern-external-api.md +139 -0
  108. package/skills/component-patterns/references/pattern-file-parser.md +168 -0
  109. package/skills/component-patterns/references/pattern-http-server.md +162 -0
  110. package/skills/component-patterns/references/pattern-process-spawner.md +133 -0
  111. package/skills/continuous-feedback/SKILL.md +327 -0
  112. package/skills/continuous-feedback/references/collect-instructions.md +81 -0
  113. package/skills/continuous-feedback/references/specialize-code-review.md +82 -0
  114. package/skills/continuous-feedback/references/specialize-general.md +98 -0
  115. package/skills/continuous-feedback/references/specialize-test-audit.md +81 -0
  116. package/skills/create-skill/SKILL.md +359 -0
  117. package/skills/create-skill/references/agent-conventions.md +194 -0
  118. package/skills/create-skill/references/agent-template.md +195 -0
  119. package/skills/create-skill/references/content-guidance.md +291 -0
  120. package/skills/create-skill/references/decision-framework.md +124 -0
  121. package/skills/create-skill/references/template-pipeline.md +217 -0
  122. package/skills/create-skill/references/template-reference-heavy.md +111 -0
  123. package/skills/create-skill/references/template-research.md +210 -0
  124. package/skills/create-skill/references/template-script-driven.md +172 -0
  125. package/skills/create-skill/references/template-simple.md +80 -0
  126. package/skills/create-subagent/SKILL.md +353 -0
  127. package/skills/create-subagent/references/agent-conventions.md +268 -0
  128. package/skills/create-subagent/references/content-guidance.md +232 -0
  129. package/skills/create-subagent/references/decision-framework.md +134 -0
  130. package/skills/create-subagent/references/template-single-agent.md +192 -0
  131. package/skills/fix-bug/SKILL.md +241 -0
  132. package/skills/governance-protocol/SKILL.md +116 -0
  133. package/skills/init/SKILL.md +341 -0
  134. package/skills/issue-debugging/SKILL.md +385 -0
  135. package/skills/issue-debugging/references/anti-patterns.md +245 -0
  136. package/skills/issue-debugging/references/debug-report-schema.md +227 -0
  137. package/skills/mock-detection/SKILL.md +511 -0
  138. package/skills/mock-detection/references/false-positive-prevention.md +402 -0
  139. package/skills/mock-detection/references/stub-patterns.md +236 -0
  140. package/skills/pipeline-templates/SKILL.md +215 -0
  141. package/skills/pipeline-templates/references/code-change-workflow.md +277 -0
  142. package/skills/pipeline-templates/references/code-review.md +336 -0
  143. package/skills/pipeline-templates/references/fix-validation.md +421 -0
  144. package/skills/pipeline-templates/references/new-feature.md +335 -0
  145. package/skills/pipeline-templates/references/research-brainstorm.md +161 -0
  146. package/skills/pipeline-templates/references/research-planning.md +257 -0
  147. package/skills/pipeline-templates/references/test-audit.md +389 -0
  148. package/skills/pipeline-templates/references/test-execution-fix.md +238 -0
  149. package/skills/plan-creation/SKILL.md +497 -0
  150. package/skills/product-ideation/SKILL.md +372 -0
  151. package/skills/product-ideation/references/analysis-frameworks.md +161 -0
  152. package/skills/session-handoff/SKILL.md +139 -0
  153. package/skills/session-handoff/references/examples.md +223 -0
  154. package/skills/setup-lsp/SKILL.md +312 -0
  155. package/skills/setup-lsp/references/server-registry.md +85 -0
  156. package/skills/setup-lsp/references/troubleshooting.md +135 -0
  157. package/skills/subagent-output-templating/SKILL.md +415 -0
  158. package/skills/subagent-output-templating/references/examples.md +440 -0
  159. package/skills/subagent-prompting/SKILL.md +364 -0
  160. package/skills/subagent-prompting/references/examples.md +342 -0
  161. package/skills/test-audit/SKILL.md +531 -0
  162. package/skills/test-audit/references/known-limitations.md +41 -0
  163. package/skills/test-audit/references/priority-classification.md +30 -0
  164. package/skills/test-audit/references/prompts/deep-mode-detection.md +83 -0
  165. package/skills/test-audit/references/prompts/synthesis.md +57 -0
  166. package/skills/test-audit/references/rewrite-instructions.md +46 -0
  167. package/skills/test-audit/references/schemas/audit-output.yaml +100 -0
  168. package/skills/test-audit/references/schemas/diagnostic-output.yaml +49 -0
  169. package/skills/test-audit/scripts/data-flow-analyzer.ts +509 -0
  170. package/skills/test-audit/scripts/integration-mock-detector.ts +462 -0
  171. package/skills/test-audit/scripts/package.json +20 -0
  172. package/skills/test-audit/scripts/skip-detector.ts +211 -0
  173. package/skills/test-audit/scripts/verification-counter.ts +295 -0
  174. package/skills/test-classification/SKILL.md +310 -0
  175. 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