Guide for fixing bugs in ClaudeBar following Chicago School TDD and rich domain design. Use this skill when:(1) User reports a bug or unexpected behavior(2) Fixing a defect in existing functionality(3) User asks "fix this bug" or "this doesn't work correctly"(4) Correcting behavior that violates the user's mental model
Content & Writing
417 Stars
31 Forks
Updated Jan 2, 2026, 10:21 AM
Why Use This
This skill provides specialized capabilities for tddworks's codebase.
Use Cases
Developing new features in the tddworks repository
Refactoring existing code to follow tddworks standards
Understanding and working with tddworks's codebase structure
---
name: fix-bug
description: |
Guide for fixing bugs in ClaudeBar following Chicago School TDD and rich domain design. Use this skill when:
(1) User reports a bug or unexpected behavior
(2) Fixing a defect in existing functionality
(3) User asks "fix this bug" or "this doesn't work correctly"
(4) Correcting behavior that violates the user's mental model
---
# Fix Bug in ClaudeBar
Fix bugs using Chicago School TDD, root cause analysis, and rich domain design.
## Workflow
```
┌─────────────────────────────────────────────────────────────┐
│ 1. REPRODUCE & UNDERSTAND │
├─────────────────────────────────────────────────────────────┤
│ • Reproduce the bug │
│ • Identify expected vs actual behavior │
│ • Locate the root cause in code │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 2. WRITE FAILING TEST (Red) │
├─────────────────────────────────────────────────────────────┤
│ • Write test that exposes the bug │
│ • Test should FAIL before fix │
│ • Test should verify CORRECT behavior │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 3. FIX & VERIFY (Green) │
├─────────────────────────────────────────────────────────────┤
│ • Implement minimal fix │
│ • Test now PASSES │
│ • All existing tests still pass │
└─────────────────────────────────────────────────────────────┘
```
## Phase 1: Reproduce & Understand
### Identify the Bug
1. **Reproduce**: Follow exact steps to trigger the bug
2. **Expected**: What SHOULD happen (user's mental model)
3. **Actual**: What IS happening (current behavior)
4. **Root cause**: WHY it's happening (code analysis)
### Locate in Architecture
> **Reference:** [docs/ARCHITECTURE.md](../../../docs/ARCHITECTURE.md)
| Layer | Location | What to look for |
|-------|----------|------------------|
| **Domain** | `Sources/Domain/` | Incorrect business logic, missing invariants |
| **Infrastructure** | `Sources/Infrastructure/` | Parsing errors, CLI/API issues |
| **App** | `Sources/App/` | View state issues, binding problems |
### Domain Invariants
Check if the bug violates domain invariants that should be maintained:
```swift
// Example: QuotaMonitor should maintain selection invariants
// - selectedProviderId should always point to an enabled provider
// - Domain should be self-validating (no external "ensure" calls needed)
```
## Phase 2: Write Failing Test (Red)
### Chicago School TDD
We follow **Chicago School TDD** (state-based testing):
- Test **state changes** and **return values**, not interactions
- Focus on the "what" (observable outcomes), not the "how" (method calls)
- Mocks stub dependencies to return data, not to verify calls
- No `verify()` calls - assert on resulting state instead
### Test Pattern
Test the CORRECT behavior, not the bug:
```swift
@Suite
struct {Component}Tests {
@Test func `{describes correct behavior}`() {
// Given - setup that triggers the bug scenario
let settings = makeSettingsRepository()
let claude = ClaudeProvider(probe: MockUsageProbe(), settingsRepository: settings)
claude.isEnabled = false // Bug trigger condition
// When - action that should work correctly
let monitor = QuotaMonitor(providers: AIProviders(providers: [claude, codex]))
// Then - assert EXPECTED behavior (will FAIL before fix)
#expect(monitor.selectedProviderId == "codex") // Not "claude"
}
}
```
### Test Location
| Bug Location | Test Location |
|--------------|---------------|
| `Sources/Domain/Monitor/` | `Tests/DomainTests/Monitor/` |
| `Sources/Domain/Provider/` | `Tests/DomainTests/Provider/` |
| `Sources/Infrastructure/CLI/` | `Tests/InfrastructureTests/CLI/` |
### Run Test (Should FAIL)
```bash
swift test --filter "{TestSuiteName}"
```
## Phase 3: Fix & Verify (Green)
### Fix Guidelines
1. **Minimal change**: Fix only what's broken
2. **Domain first**: Prefer fixing in domain layer when possible
3. **Maintain invariants**: Domain should be self-validating
4. **No over-engineering**: Don't refactor unrelated code
### Domain Design Principles
When fixing domain bugs, ensure:
```swift
// 1. Domain maintains its own invariants
public init(...) {
// Validate on construction
selectFirstEnabledIfNeeded() // Called internally, not externally
}
// 2. Public API hides implementation details
public func setProviderEnabled(_ id: String, enabled: Bool) {
provider.isEnabled = enabled
if !enabled {
selectFirstEnabledIfNeeded() // Private - called automatically
}
}
// 3. Private methods for internal invariant maintenance
private func selectFirstEnabledIfNeeded() { ... }
```
### Verify Fix
```bash
# Run the specific test (should PASS now)
swift test --filter "{TestSuiteName}"
# Run ALL tests to ensure no regressions
swift test
```
## Checklist
- [ ] Bug reproduced and understood
- [ ] Root cause identified in code
- [ ] Failing test written (exposes bug)
- [ ] Test FAILS before fix
- [ ] Minimal fix implemented
- [ ] Test PASSES after fix
- [ ] All existing tests still pass
- [ ] Domain invariants maintained (if applicable)
- [ ] CHANGELOG updated with fix description