Files
msd-core/FIXES_APPLIED.md
Justin Adams 9d7ea9c188 fix: statusline crash handling, color validation, git staging rules
Fixed three critical bugs and documented findings:

1. hooks/gsd-statusline.js - Added error handling for file system operations
   - Wrapped fs.readdirSync and fs.statSync in try-catch
   - Prevents crashes from permission errors or race conditions

2. bin/install.js - Added hex color validation
   - Validates hex color format (#RGB or #RRGGBB)
   - Prevents invalid colors from being written to config

3. commands/gsd/execute-phase.md - Fixed git staging violation
   - Replaced 'git add -u' with individual file staging
   - Maintains consistency with documented git commit rules

Documentation:
- BUG_REPORT.md - Comprehensive review findings (8 bugs total)
- FIXES_APPLIED.md - Details of fixes applied and testing recommendations

Known issues remaining:
- JSON config parsing uses fragile grep/sed (requires jq or refactor)
- Documented workarounds and recommendations for future fixes

https://claude.ai/code/session_01RAgU8GfJ2dwtBSmJDGzpWA

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-03 11:10:53 -06:00

199 lines
5.1 KiB
Markdown

# Fixes Applied - Bug Report Follow-up
**Date:** 2026-01-31
**Related:** BUG_REPORT.md
---
## Critical Bugs Fixed
### 1. ✅ Fixed: Missing error handling in statusline.js
**File:** `hooks/gsd-statusline.js`
**Change:** Wrapped directory reading operations in try-catch block
**Before:**
```javascript
if (session && fs.existsSync(todosDir)) {
const files = fs.readdirSync(todosDir) // Could crash
.filter(...)
.map(f => ({ name: f, mtime: fs.statSync(...).mtime })) // Could crash
```
**After:**
```javascript
if (session && fs.existsSync(todosDir)) {
try {
const files = fs.readdirSync(todosDir)
.filter(...)
.map(f => ({ name: f, mtime: fs.statSync(...).mtime }))
// ... rest of logic
} catch (e) {
// Silently fail on file system errors - don't break statusline
}
}
```
**Impact:** Prevents statusline crashes from file system permission issues or race conditions.
---
### 2. ✅ Fixed: Hex color validation in install.js
**File:** `bin/install.js`
**Change:** Added validation for hex color format
**Before:**
```javascript
} else if (colorValue.startsWith('#')) {
// Already hex, keep as is
newLines.push(line);
}
```
**After:**
```javascript
} else if (colorValue.startsWith('#')) {
// Validate hex color format (#RGB or #RRGGBB)
if (/^#[0-9a-f]{3}$|^#[0-9a-f]{6}$/i.test(colorValue)) {
// Already hex and valid, keep as is
newLines.push(line);
}
// Skip invalid hex colors
}
```
**Impact:** Prevents invalid hex color values from being written to config files.
---
### 3. ✅ Fixed: Git add rules violation in execute-phase.md
**File:** `commands/gsd/execute-phase.md`
**Change:** Replaced `git add -u` with individual file staging
**Before:**
```bash
git add -u && git commit -m "fix({phase}): orchestrator corrections"
```
**After:**
```bash
# Stage each modified file individually (never use git add -u, git add ., or git add -A)
git status --porcelain | grep '^ M' | cut -c4- | while read file; do
git add "$file"
done
git commit -m "fix({phase}): orchestrator corrections"
```
**Impact:** Maintains consistency with documented git commit rules and prevents accidental staging of unwanted files.
---
## Known Issues Remaining
### Fragile JSON Parsing (High Priority - Not Fixed)
**Status:** ⚠️ Documented but not fixed
**Reason:** Requires more extensive refactoring to use `jq` or alternative JSON parser
**Location:** Multiple workflow files
**Files affected:**
- `get-shit-done/workflows/execute-phase.md:20, 62, 76-77`
- `commands/gsd/execute-phase.md:45, 100`
- `agents/gsd-executor.md:47`
**Current approach:**
```bash
MODEL_PROFILE=$(cat .planning/config.json 2>/dev/null | grep -o '"model_profile"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "balanced")
```
**Recommended fix:**
```bash
MODEL_PROFILE=$(jq -r '.model_profile // "balanced"' .planning/config.json 2>/dev/null || echo "balanced")
```
**Workaround for users:**
- Ensure `.planning/config.json` is properly formatted with consistent spacing
- Always quote string values in JSON
- Avoid special characters in configuration values
**Next steps:**
- Evaluate if `jq` can be a required dependency
- Or create a Node.js helper script for JSON parsing that workflows can call
- Or document the JSON formatting requirements clearly for users
---
## Testing Recommendations
### 1. Statusline Error Handling
**Test case:** Delete files while statusline is reading them
```bash
# Terminal 1: Watch statusline
while true; do node hooks/gsd-statusline.js; sleep 1; done
# Terminal 2: Create and delete files rapidly
mkdir -p ~/.claude/todos
while true; do
touch ~/.claude/todos/test-file.json
sleep 0.1
rm ~/.claude/todos/test-file.json
sleep 0.1
done
```
**Expected:** Statusline continues working without crashes
### 2. Color Validation
**Test case:** Invalid hex colors in frontmatter
```markdown
---
color: #ZZZ
---
```
**Expected:** Invalid color is skipped during installation
### 3. Git Operations
**Test case:** Verify individual file staging
```bash
# Create some changes
touch file1.txt file2.txt
git add file1.txt file2.txt
git commit -m "test files"
echo "change" > file1.txt
echo "change" > file2.txt
# Run the orchestrator commit logic
# Should stage each file individually
```
**Expected:** Files are staged one at a time, not in bulk
---
## Future Improvements
1. **Centralize JSON parsing**: Create a helper utility for all JSON config reading
2. **Add unit tests**: Test critical paths like statusline, installer, config parsing
3. **Establish error handling patterns**: Document and enforce consistent error handling
4. **Path constants**: Centralize hardcoded paths in a configuration module
5. **Integration tests**: Test full workflow orchestration end-to-end
---
## Changelog Entry
```markdown
## [Unreleased]
### Fixed
- **hooks/gsd-statusline.js**: Added error handling for file system operations to prevent crashes
- **bin/install.js**: Added validation for hex color values to prevent invalid config
- **commands/gsd/execute-phase.md**: Fixed git staging to use individual files instead of git add -u
### Known Issues
- JSON config parsing uses fragile grep/sed patterns - will be addressed in future release
```