| name | debugging |
| description | Auto-triggered debugging skill for bug/issue diagnosis and fix. Runs systematic root cause analysis, unit tests, deep tracing, and implements fixes. |
Comprehensive Debugging Skill
Expert debugging workflow for diagnosing and fixing issues in the Supplier Management System codebase. Auto-triggers when bug/issue-related keywords are detected.
Auto-Trigger Keywords
The skill activates when messages contain:
- Bug/Issue: "bug", "issue", "problem", "error", "broken", "not working"
- Failures: "failed", "failure", "crash", "exception", "error"
- Unexpected Behavior: "unexpected", "should be", "not as expected", "wrong"
- Performance: "slow", "timeout", "performance", "hangs"
- Data Integrity: "corruption", "mismatch", "incorrect data", "balance wrong"
- Concurrency: "race condition", "concurrent", "lock", "conflict"
Debugging Workflow (7 Phases)
Phase 1: Symptom Collection & Reproduction ✓
Objective: Understand what's broken and make it happen consistently
Gather Symptom Information
- What is the user experiencing?
- When did it start happening?
- Is it reproducible or intermittent?
- Any error messages or log entries?
- Affected components/modules?
Ask Clarifying Questions
- What steps lead to the issue?
- What was expected vs. what happened?
- Can you reproduce it on demand?
- Does it happen in all contexts or specific scenarios?
- Any recent changes before issue appeared?
Document Reproduction Steps
- Create minimal steps to recreate issue
- Identify scope (single feature, multiple features, system-wide?)
- Note any prerequisites or state
Tools Used: Conversation/question analysis, User descriptions
Phase 2: Environment & Context Analysis ✓
Objective: Understand the system state and context
Review Recent Code Changes
git log --oneline -20 git diff HEAD~5 -- relevant/files- Find commits that might have introduced issue
- Check blame history for modified functions
Examine System State
- Check CONFIG settings and defaults
- Review relevant sheet structure and data
- Look for related cached data state
- Check user permissions and environment
Review Related Documentation
- Check CLAUDE.md "Gotchas & Known Issues" section
- Review module responsibilities in CLAUDE.md
- Look for documented limitations
- Check for architectural constraints
Check Git History for Similar Issues
git log --all --oneline | grep -i "fix" git log --all --oneline | grep -i "bug" git show <commit-hash> # Review fix approach
Tools Used: Bash (git commands), Read (documentation)
Phase 3: Unit Test Execution & Analysis ✓
Objective: Identify scope and validate assumptions
Locate Relevant Test Files
- Test.CacheManager.gs
- Test.InvoiceManager.gs
- Test.PaymentManager.gs
- Test.Integration.gs
- Test.MasterDatabase.gs
Run Targeted Unit Tests
# From Script Editor, run relevant test function runPaymentManagerTests() runCacheManagerTests() testInvoiceManager()Analyze Test Results
- Which tests pass/fail?
- Do failures match reported issue?
- Are there error messages in Logger?
- Check test coverage of affected code
Document Test Gaps
- Is the bug scenario covered by tests?
- What test would prevent this issue?
- Create new test case for bug scenario
Tools Used: Bash (running tests), Logger analysis, Test file reading
Phase 4: Integration Testing ✓
Objective: Understand how modules interact
Review Integration Test Suite
- Read Test.Integration.gs
- Run relevant integration scenarios
- Check for cross-module failures
Trace Data Flow Through Modules
- Entry point (onEdit, batch operation, menu click)
- Which modules process the data?
- What's the expected data transformation?
- Check cache updates after each step
Verify Assumptions
- Does invoice get created correctly?
- Is cache synchronized after payment?
- Are balances calculated after updates?
- Are audit logs recorded?
Tools Used: Read (integration test analysis), Bash (test execution), Logger
Phase 5: Root Cause Analysis & Deep Trace ✓
Objective: Find the exact cause of the issue
Code Inspection of Suspected Module
- Read the primary module file
- Check function that handles reported scenario
- Look for edge cases not handled
- Check error handling (try-catch blocks)
Deep Trace Analysis
- Follow execution path step-by-step
- Add console logging to critical points:
Logger.log(`[MODULE] Function called with: ${JSON.stringify(data)}`); Logger.log(`[MODULE] Cache state: ${JSON.stringify(cache)}`); Logger.log(`[MODULE] Result: ${JSON.stringify(result)}`); - Trace data transformations
- Check variable states at decision points
Common Bug Patterns (check these first)
- Cache Invalidation Timing: Payment cache updated BEFORE PaymentLog write?
- Formula vs Values: Storing formula strings instead of evaluated values?
- Lock Scope Issues: Lock released too early or held too long?
- User Resolution: Session.getActiveUser() vs UserResolver.getCurrentUser()?
- Master Database Mode: Simple trigger accessing other spreadsheet?
- Edge Cases: Boundary conditions (zero amounts, negative balances)?
- Null/Undefined: Unhandled null values or missing fields?
- Type Mismatches: String vs number, date formatting issues?
- Concurrent Access: Race conditions without proper locking?
Hypothesis Testing
- Form specific hypothesis: "Bug occurs because..."
- Write test case to prove/disprove
- Add logging to validate hypothesis
- Trace execution with real data
Tools Used: Read (code inspection), Edit (add logging), Bash (run tests), Grep (search patterns)
Phase 6: Fix Implementation ✓
Objective: Implement minimal, targeted fix
Design the Fix
- What's the smallest change to resolve?
- Does it align with module responsibilities?
- Will it break existing functionality?
- Are there other similar issues?
Implement Fix
- Apply minimal change to source file
- Keep changes focused on root cause
- Add defensive code if needed
- Include explanatory comments
Example Fix Patterns
// ❌ BAD: Timing issue PaymentCache.clear(); // Cache cleared paymentLog.appendRow(...); // Data added after clear // ✅ GOOD: Correct ordering paymentLog.appendRow(...); // Write data first PaymentCache.clear(); // Then invalidate cacheAdd Logging for Future Debugging
- Log state changes
- Log error conditions
- Include context in log messages
- Use consistent prefixes:
[MODULE] message
Tools Used: Read (understand current code), Edit (implement fix)
Phase 7: Verification & Regression Testing ✓
Objective: Prove fix works and doesn't break anything
Test the Specific Bug Scenario
- Run reproduction steps
- Verify issue is gone
- Check edge cases still work
- Confirm expected behavior restored
Run Full Test Suite
# Run all related tests runAllPaymentManagerTests() runAllCacheManagerTests() runAllInvoiceManagerTests() runIntegrationTests()- All tests must pass
- No new test failures
- Performance not degraded
Integration Testing
- Test with batch operations
- Test with concurrent edits
- Test with Master Database mode (if applicable)
- Test data integrity end-to-end
Create Prevention Test Case
- Add test case that would catch this bug
- Ensure test fails without fix
- Ensure test passes with fix
- Document what it prevents
Review for Side Effects
- Does fix affect other modules?
- Are there performance implications?
- Does caching still work correctly?
- Are audit logs still recorded?
Tools Used: Bash (test execution), Logger (verification), Read (test review)
Investigation Checklist
When starting investigation, verify:
- Issue is reproducible
- Reproduction steps documented
- Recent code changes reviewed (git log)
- Relevant test files identified
- Unit tests run and analyzed
- Integration tests run and analyzed
- Known gotchas reviewed (CLAUDE.md)
- Similar past issues checked
- Root cause identified with evidence
- Minimal fix designed and implemented
- Fix tested and verified
- Full test suite passes
- Prevention test case added
- No side effects identified
Common Issues & Solutions
Cache Synchronization Issues
Symptom: Balance wrong, invoice data stale, payment not applied
Investigation:
git log --oneline | grep -i "cache"
# Find recent cache-related changes
grep -n "updateInvoiceInCache\|PaymentCache.clear\|invalidate" PaymentManager.gs
# Check cache update order
Common Cause: Cache cleared before sheet write, or updated before SUMIFS formula recalculates
Fix Pattern: Always write sheet first, then clear/invalidate cache
Trigger Context Issues
Symptom: Works manually, fails in trigger; "Cannot access other spreadsheets"
Investigation:
- Check if accessing Master Database
- Check CONFIG.masterDatabase.connectionMode
- Check trigger type in Script Editor
Fix Pattern: Use installable trigger instead of simple trigger for Master Database mode
User Resolution Issues
Symptom: Wrong user recorded, "default@google.com" showing up
Investigation:
- Check UserResolver usage in code
- Verify fallback chain works
- Check trigger context
Fix Pattern: Use UserResolver.getCurrentUser() instead of Session.getActiveUser()
Balance Calculation Issues
Symptom: Balance doesn't match, off by payment amount
Investigation:
- Check _calculateTransactionImpact logic
- Verify payment type handling
- Check invoice state transitions
Fix Pattern: Trace through calculation, verify all payment types handled correctly
Concurrency Issues
Symptom: Intermittent duplicates, race conditions, "Unable to acquire lock"
Investigation:
- Check lock scope in PaymentManager
- Verify critical section is protected
- Check batch operation locking
Fix Pattern: Ensure locks cover entire critical section, not just part of it
Deep Trace Logging Template
When adding debugging logs:
/**
* Deep trace for [issue description]
* Related to: [component/feature]
* Test case: [reproduction steps]
*/
function debugFunction(data) {
Logger.log(`[MODULE] Function entry: data=${JSON.stringify(data)}`);
try {
const step1 = calculateSomething(data);
Logger.log(`[MODULE] After step1: result=${JSON.stringify(step1)}`);
const step2 = updateCache(step1);
Logger.log(`[MODULE] After step2 (cache): result=${JSON.stringify(step2)}`);
Logger.log(`[MODULE] Cache state: ${JSON.stringify(CacheManager.getInvoiceData())}`);
return { success: true, data: step2 };
} catch (error) {
Logger.log(`[MODULE] ERROR: ${error.message}`);
Logger.log(`[MODULE] Stack: ${error.stack}`);
throw error;
}
}
Tools Available
- Read - Examine source and test files
- Edit - Implement fixes and add logging
- Bash - Run tests and git commands
- Grep - Search for patterns and related code
- Glob - Find test files and related modules
Output Format
For each bug investigation, provide:
- Symptom Analysis - What's broken and under what conditions
- Environment Context - Recent changes, affected modules, state
- Test Results - Unit and integration test findings
- Root Cause - Why the bug occurs with specific evidence
- Fix Implementation - Minimal code change with explanation
- Verification - Testing approach and results
- Prevention - Test case or safeguard to prevent recurrence
Key Principles
- Systematic Approach - Follow phases in order, don't skip steps
- Evidence-Based - Use test results, logs, and code evidence
- Minimal Changes - Fix root cause, not symptoms
- Test-First - Write test for bug before implementing fix
- Documentation - Document what went wrong and how to prevent it
- Prevention - Always add test case to catch this bug in future
Related Testing Functions
From codebase (run from Script Editor):
runPaymentManagerTests()- All payment testsrunCacheManagerTests()- All cache teststestInvoiceManager()- Invoice functionalityrunIntegrationTests()- Multi-module scenariostestMasterDatabaseConnection()- Master DB validation