| name | fix-bug |
| description | Intelligently debug and fix bugs with a repro-first approach. Use when the user reports a bug, unexpected behavior, or asks to fix an issue. Establishes reproducible test cases before fixing. |
Bugfix - Intelligent Bug Debugging and Fixing
When to Use This Skill
Use this skill when:
- The user reports a bug or unexpected behavior
- The user asks to fix an issue or error
- The user says something isn't working correctly
- The user invokes
/bugfix [description]
Core Philosophy
Understand, Reproduce, Fix: First consult documentation to understand expected behavior, then establish a reproducible test case, and finally fix the bug. If you can't reproduce it, you can't verify the fix.
Workflow
Step 1: Read Relevant Documentation
Use the read-docs skill to search for and read documentation in ./docs/:
- Search for docs related to the bug component/system
- Read all relevant documentation files
- Follow read-docs skill procedures: log access, score helpfulness, request missing docs
Decision Point - Are docs sufficient?
→ Docs are SUFFICIENT (complete, accurate, helpful):
- You understand the expected behavior
- You know what the bug is deviating from
- Proceed to Step 2
→ Docs are INSUFFICIENT (missing, incomplete, or outdated):
- You logged access with -1 or +0 score
- You added documentation request(s) to
./docs/documentation-requests.md - Now evaluate: Is the missing information CRITICAL to understanding the bug?
CRITICAL means:
- You cannot determine expected behavior without it
- You don't understand how the component should work
- The bug involves behavior that isn't documented
- You would be guessing at what "correct" means
If CRITICAL → STOP and invoke docs-maintainer:
- DO NOT proceed to Step 2
- DO NOT "examine the code directly"
- DO NOT "work around the gap"
- Instead: Use Task tool with
subagent_type=docs-maintainer - Provide context about what documentation is needed
- Wait for documentation to be created
- Return to Step 1 (read the newly created docs)
If NOT CRITICAL (only minor details missing):
- The overall expected behavior is clear from docs
- You just need minor implementation details from code
- Proceed to Step 2 (use code inspection to fill gaps)
What documentation tells you:
- What the correct behavior should be
- What the bug is deviating from
- Where to look for the root cause
- What test cases to write
See .claude/skills/read-docs/SKILL.md for complete documentation access procedures.
Step 2: Establish a Reproducible Test Case
Check for existing failing tests
- Run the test suite:
go test ./... - Look for tests related to the bug description
- If a test is already failing for this issue, use it as the repro
- Run the test suite:
If no failing test exists, create one
- Identify the affected package/module
- Write a minimal test that demonstrates the bug
- The test should:
- Be focused and minimal (test one thing)
- Have a clear assertion that fails due to the bug
- Include a descriptive name explaining what should happen
- Run the new test to confirm it fails:
go test -v ./pkg/[package]/ -run TestName
If you cannot establish a repro
- STOP immediately
- Explain to the user what you've tried
- Ask clarifying questions:
- What exact steps trigger the bug?
- What is the expected vs actual behavior?
- Can they provide example inputs/outputs?
- Are there specific scenes or parameters that trigger it?
- Do NOT proceed to debugging without a repro
Step 3: Debug the Issue
Analyze the failing test
- Examine the test output and error messages
- Identify the root cause (not just symptoms)
- Use the Read tool to examine relevant source files
- Look for:
- Logic errors
- Edge cases not handled
- Race conditions (if parallel code)
- Numerical precision issues (common in raytracers)
- Incorrect assumptions
Form a hypothesis
- State clearly what you believe is causing the bug
- Explain the reasoning
- If uncertain, use debugging techniques:
- Add temporary logging/prints
- Check intermediate values
- Verify assumptions with additional test assertions
Step 4: Implement the Fix
Make targeted changes
- Fix the root cause, not symptoms
- Keep changes minimal and focused
- Follow the existing code style
- Avoid over-engineering or adding unnecessary features
Consider edge cases
- Does the fix handle boundary conditions?
- Are there similar bugs elsewhere in the codebase?
- Does the fix introduce new issues?
Step 5: Verify the Fix
Run the reproduction test
go test -v ./pkg/[package]/ -run TestName- The test that was failing must now pass
- If it still fails, return to Step 3
Run the full test suite
go test ./...- Ensure no regressions were introduced
- If any other tests fail, investigate and fix
Manual verification (if applicable)
- If the bug affects visual output or interactive features:
- Test with the CLI:
./raytracer --scene=... --max-samples=10 - Or test with the web interface
- Test with the CLI:
- Verify the expected behavior is now correct
- If the bug affects visual output or interactive features:
Step 6: Clean Up
Remove debugging code
- Remove any temporary logging, prints, or debug statements
- Keep the test case you created
Document if needed
- If the bug was subtle or non-obvious, add a comment explaining why the fix is necessary
- Update any relevant documentation
Special Considerations for Raytracer Bugs
Rendering Issues:
- Always verify tests with visual output when fixing rendering bugs
- Be careful with floating-point comparisons (use epsilon for tolerance)
- Consider both path-tracing and BDPT integrators
Performance Issues:
- Use benchmarks, not just tests:
go test -bench=. ./pkg/[package]/ - Profile if needed:
--profile=cpu.profthengo tool pprof cpu.prof
Parallel/Concurrency Bugs:
- These are hard to reproduce - run tests multiple times
- Look for race conditions:
go test -race ./... - Check for proper synchronization in worker pools
BVH/Acceleration Structure Bugs:
- Test with scenes that stress the BVH:
spheregrid,trianglemesh,dragon - Verify both correctness and performance
Examples
Example 1: Visual Rendering Bug
User: "/bugfix The cornell box scene has black artifacts in the corners"
Response:
1. First, let me check documentation about the Cornell box scene and rendering...
[Uses read-docs skill: searches, reads ./docs/scenes.md and ./docs/rendering.md]
[Logs access per read-docs procedures]
2. Based on the docs, Cornell box should have uniform lighting. Let me check for
existing tests...
[Checks test files]
3. I don't see a failing test. Let me create a test that renders the cornell
scene and checks for black pixels (RGB values below a threshold in expected
areas):
[Creates test in pkg/scene/cornell_test.go]
4. Running the test...
[Test fails, confirms the bug]
5. Now analyzing the cornell scene setup and rendering code...
[Investigates light sources, material properties, ray intersection]
6. Found the issue: [explains root cause]
[Implements fix]
7. Re-running the test...
[Test passes]
8. Running full test suite...
[All tests pass]
The bug is fixed! The issue was [explanation].
Example 2: Cannot Reproduce
User: "/bugfix Random crashes when rendering"
Response:
1. Let me check documentation about the rendering system and known issues...
[Uses read-docs skill: reads ./docs/renderer.md]
[Logs access, scores +0 - found general overview only]
2. Documentation doesn't mention crashes. Let me check for existing tests and
try to reproduce...
[Attempts to create a test, runs various scenarios]
3. I cannot establish a reliable reproduction of this crash. I need more
information:
- Which scene(s) cause the crash?
- What command line arguments are you using?
- Does it happen after a certain number of passes/samples?
- Are you using CLI or web interface?
- What does the error message say (if any)?
Once I can reproduce it, I'll be able to debug and fix it.
Example 3: Existing Failing Test
User: "/bugfix Tests are failing in pkg/geometry"
Response:
1. First, let me check documentation about the geometry package and BVH...
[Uses read-docs skill: reads ./docs/bvh.md]
[Logs access, scores +1 - found helpful info]
2. Documentation explains BVH should use median-split. Running the test suite
to identify which test is failing...
[go test ./pkg/geometry/]
3. Found failing test: TestBVHIntersection
[Shows test output]
4. This test is our repro. Analyzing why it fails based on expected behavior
from docs...
[Investigates the code]
5. Root cause: [explanation]
[Implements fix]
6. Verifying fix...
[Test now passes, full suite passes]
Fixed! The issue was [explanation].
Example 4: Missing Documentation (Critical)
User: "/bugfix BDPT integrator produces incorrect brightness"
Response:
1. Let me check documentation about BDPT implementation...
[Uses read-docs skill: reads ./docs/integrators.md]
[Logs access, scores -1 - missing MIS and brightness details]
[Adds documentation request per read-docs procedures]
2. The missing documentation on MIS weighting is critical to understanding the
expected behavior. Let me invoke the docs-maintainer agent to create this
documentation before proceeding...
[Uses Task tool with subagent_type=docs-maintainer]
[Agent creates documentation on BDPT MIS weighting]
3. Now reading the newly created documentation...
[Reads updated ./docs/integrators.md]
[Logs access, scores +1 - found needed MIS details]
4. Based on the documentation, I now understand the expected MIS calculation.
Creating a test that verifies brightness values...
[Creates test that checks brightness values]
[Test fails, confirms bug]
5. Analyzing code against documented behavior...
[Investigates BDPT implementation]
6. Found the issue: MIS weights not properly normalized per the documented formula
[Implements fix]
7. Verifying fix...
[Test passes, full suite passes]
Fixed! The bug was in the MIS weight normalization.
Common Pitfalls to Avoid
- Don't skip documentation - Always check docs first (follow read-docs skill procedures)
- DON'T PROCEED TO STEP 2 WHEN DOCS ARE CRITICAL - This is the most common mistake:
- If you can't determine expected behavior from docs, STOP
- If you say "let me examine the code directly" when docs are missing, you're doing it wrong
- Invoke docs-maintainer first, wait for docs, then proceed
- Code inspection is NOT a substitute for understanding expected behavior
- Don't guess at fixes - Always understand the root cause first
- Don't skip the repro - "It seems to work now" is not sufficient
- Don't introduce regressions - Always run the full test suite
- Don't over-complicate - Simple, targeted fixes are better
- Don't leave debug code - Clean up before finishing
Integration with Project Testing
This raytracer project has:
- Unit tests in each package:
pkg/*/[package]_test.go - Test helper utilities
- Benchmark support
- Race detection available
Use these existing tools and patterns when creating reproduction tests.