Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates a structured Bug Fix Brief (BFB) to document issue corrections. Includes root cause analysis, repro steps, fix options, and fix checklist. Use when user asks to create a BFB, document a bug fix, or generate a bug correction document.
.claude/skills/giuseppe-trisciuoglio-bug-fix-brief/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 52% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 4% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -8% | 0% |
This skill generates a Bug Fix Brief (BFB): a structured document in docs/bfb/ that uniformly captures every bug fix with root cause, repro steps, fix options, and checklist.
Trigger: "create BFB", "document bug", "bug fix brief", "document fix"
Check existing numbering:
bashls docs/bfb/ 2>/dev/null || echo "Directory does not exist"
Ask the user for:
Complete the full BFB template:
markdown## BFB-XXX: [Title] **Reference:** [Issue link] **Environment:** [Env] `vX.Y.Z` **Date:** YYYY-MM-DD --- ### 1. Bug - **Observed:** [wrong behavior] - **Expected:** [correct behavior] ### 2. Repro
→ error/output]
### 3. Cause
`path/file.ext` — `function()` @ line N
[Why it happens, max 3 lines]
### 4. Decision
| Option | Fix | Choice |
|--------|-----|--------|
| A | [desc] | ✅/❌ |
| B | [desc] | ✅/❌ |
**Rationale:** [why]
### 5. Fix
- [ ] [change 1]
- [ ] [test]
- [ ] [verify repro]
### 6. Notes
[recurring patterns, links, warnings]Show the generated BFB and ask with AskUserQuestion:
Only after approval:
bashmkdir -p docs/bfb
Write to docs/bfb/BFB-XXX-title.md
Input: "create BFB for login email null crash"
Final output:
markdown## BFB-042: Login crash with null email **Reference:** #1287 **Environment:** Prod `v2.4.1` **Date:** 2026-05-02 --- ### 1. Bug - **Observed:** App crashes if email field is empty - **Expected:** Error message "Email required" ### 2. Repro
→ NullPointerException @ AuthManager.kt:34
### 3. Cause
`AuthManager.kt` — `validateEmail()` @ line 34
Missing null check on email.trim()
### 4. Decision
| Option | Fix | Choice |
|--------|-----|--------|
| A | Add safe call `?.` | ✅ |
| B | Refactor with Result type | ❌ |
**Rationale:** Option A is minimal, zero impact.
### 5. Fix
- [ ] Add `email?.trim()?.isNotEmpty() == true`
- [ ] Test `validateEmail_null_returnsFalse()`
- [ ] Verify repro
### 6. Notes
- Check other forms for missing null checksdocs/bfb/: Create if it does not exist| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 26,803 | 6,766 | -75% | 1 | 1 | 0% | 2,394 | 1,234 | -48% | 0 | 0 | — |
case-02 | fail→fail | 15,114 | 5,800 | -62% | 1 | 1 | 0% | 2,319 | 1,288 | -44% | 0 | 0 | — |
case-03 | fail→pass | 17,792 | 14,032 | -21% | 1 | 1 | 0% | 2,980 | 3,041 | +2% | 0 | 0 | — |
case-04 | pass→pass | 7,324 | 5,327 | -27% | 1 | 1 | 0% | 1,197 | 1,838 | +54% | 0 | 0 | — |
case-05 | pass→pass | 17,796 | 11,785 | -34% | 1 | 1 | 0% | 2,820 | 2,807 | -0% | 0 | 0 | — |
case-06 | pass→pass | 12,083 | 12,225 | +1% | 1 | 1 | 0% | 2,011 | 2,949 | +47% | 0 | 0 | — |
case-07 | fail→fail | 12,288 | 6,850 | -44% | 1 | 1 | 0% | 1,926 | 1,225 | -36% | 0 | 0 | — |
case-08 | pass→fail | 9,422 | 4,796 | -49% | 1 | 1 | 0% | 1,482 | 1,250 | -16% | 0 | 0 | — |
case-09 | fail→pass | 5,908 | 2,953 | -50% | 1 | 1 | 0% | 964 | 1,463 | +52% | 0 | 0 | — |
case-10 | fail→pass | 9,651 | 3,921 | -59% | 1 | 1 | 0% | 1,518 | 1,624 | +7% | 0 | 0 | — |
case-15 | fail→pass | 8,792 | 4,052 | -54% | 1 | 1 | 0% | 1,555 | 1,610 | +4% | 0 | 0 | — |
case-11 | fail→fail | 11,751 | 3,845 | -67% | 1 | 1 | 0% | 1,901 | 1,599 | -16% | 0 | 0 | — |
case-12 | pass→fail | 7,021 | 5,860 | -17% | 1 | 1 | 0% | 1,225 | 1,363 | +11% | 0 | 0 | — |
case-13 | fail→pass | 9,634 | 2,740 | -72% | 1 | 1 | 0% | 1,509 | 1,384 | -8% | 0 | 0 | — |
case-14 | pass→pass | 11,487 | 5,236 | -54% | 1 | 1 | 0% | 1,747 | 1,795 | +3% | 0 | 0 | — |
case-16 | fail→fail | 9,780 | 5,741 | -41% | 1 | 1 | 0% | 1,587 | 1,320 | -17% | 0 | 0 | — |
case-17 | fail→pass | 7,251 | 6,189 | -15% | 1 | 1 | 0% | 990 | 1,876 | +89% | 0 | 0 | — |
case-18 | fail→fail | 10,906 | 7,338 | -33% | 1 | 1 | 0% | 1,875 | 1,395 | -26% | 0 | 0 | — |
case-19 | fail→pass | 7,206 | 2,228 | -69% | 1 | 1 | 0% | 1,233 | 1,359 | +10% | 0 | 0 | — |
case-20 | fail→fail | 18,206 | 4,777 | -74% | 1 | 1 | 0% | 2,745 | 1,174 | -57% | 0 | 0 | — |
case-21 | fail→pass | 11,488 | 3,926 | -66% | 1 | 1 | 0% | 1,849 | 1,605 | -13% | 0 | 0 | — |
case-22 | fail→pass | 9,951 | 1,711 | -83% | 1 | 1 | 0% | 1,425 | 1,255 | -12% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 15 counted toward the lift figure. The other 7 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 15 comparable cases. 5 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.