hud-manual-testing
Scannednpx machina-cli add skill petekp/claude-code-setup/hud-manual-testing --openclawClaude HUD Manual Testing
Verify core functionality works after code changes. Uses the project's reset script and debugging tools.
When to Use
- After implementing significant features
- After fixing state detection bugs
- Before commits affecting session tracking
- When user asks to "test the app" or "verify it works"
Testing Workflow
1. Full Reset
Reset to clean state to test first-run experience and verify nothing depends on stale data:
./scripts/dev/reset-for-testing.sh
This clears:
- App UserDefaults (layout, setup state)
~/.capacitor/(sessions, locks, activity)- Hook script and registrations
- Rebuilds app and launches it
2. First-Run Verification
After reset, verify the onboarding flow:
- Setup screen appears - App should detect missing hooks
- Hook installation works - Click install, verify success
- Empty project list - No projects pinned yet
3. Core Functionality Checklist
Test each feature manually:
| Feature | How to Test | Expected |
|---|---|---|
| Add project | Click +, select a project folder | Project appears in list |
| Session detection | Start Claude in that project | State shows Ready/Working |
| State transitions | Type prompt, wait for response | Working → Ready transitions |
| Lock detection | Check ls ~/.capacitor/sessions/ | Lock dir exists while Claude runs |
| Session end | Exit Claude session | State returns to Idle |
4. Debug Commands
If issues occur, check these:
# Watch hook events in real-time
tail -f ~/.capacitor/hud-hook-debug.log
# View current session states
cat ~/.capacitor/sessions.json | jq .
# Check active locks
ls -la ~/.capacitor/sessions/
# Check for process
ps aux | grep -E "(claude|hud-hook)"
5. Quick Restart (No Reset)
For iterative testing without full reset:
./scripts/dev/restart-app.sh
This rebuilds Rust + Swift and restarts the app, keeping state intact.
Common Issues
State stuck on Working/Waiting
Check if lock holder is alive:
cat ~/.capacitor/sessions/*.lock/pid | xargs -I {} ps -p {}
If PID is dead but lock exists, the cleanup should remove it on next app launch.
Hook events not firing
Verify hooks are registered:
cat ~/.claude/settings.json | jq '.hooks'
Should show entries for SessionStart, UserPromptSubmit, etc. pointing to hud-state-tracker.sh.
UniFFI checksum mismatch
Regenerate bindings:
cargo build -p hud-core --release
cd core/hud-core && cargo run --bin uniffi-bindgen generate --library ../../target/release/libhud_core.dylib --language swift --out-dir ../../apps/swift/bindings/
cp ../../apps/swift/bindings/hud_core.swift ../../apps/swift/Sources/ClaudeHUD/Bridge/
rm -rf ../../apps/swift/.build
Verification Summary
After testing, confirm:
- App launches without crash
- Hooks install successfully on first run
- Projects can be added/removed
- Session states reflect actual Claude activity
- States transition correctly (Idle → Ready → Working → Ready → Idle)
- No orphaned lock holders accumulate
Source
git clone https://github.com/petekp/claude-code-setup/blob/main/skills/hud-manual-testing/SKILL.mdView on GitHub Overview
This skill provides a structured manual testing workflow for Claude HUD to verify core functionality after changes. It guides testers through a full reset, app launch, onboarding, and a core feature checklist to catch issues before commits. It relies on the project’s reset script and debugging tools to ensure reliable test results.
How This Skill Works
It starts with a full reset using scripts/dev/reset-for-testing.sh to clear stale data, then launches Claude HUD and walks through onboarding and feature checks. Testers use a Core Functionality Checklist and targeted debug commands (e.g., tail -f ~/.capacitor/hud-hook-debug.log, cat ~/.capacitor/sessions.json | jq ., ls -la ~/.capacitor/sessions/, ps aux | grep -E "(claude|hud-hook)" ) to validate state transitions and locks.
When to Use It
- After implementing significant features
- After fixing state detection bugs
- Before commits affecting session tracking
- When users ask to 'test the app' or 'verify it works'
- During iterative testing with quick restarts (no full reset)
Quick Start
- Step 1: Run a full reset to test first-run experience: ./scripts/dev/reset-for-testing.sh
- Step 2: Verify onboarding and first-run flow (setup appears, install hooks, empty project list)
- Step 3: Complete Core Functionality Checklist and use debug commands to confirm state and locks
Best Practices
- Always perform a full reset before major tests to ensure a clean state
- Verify onboarding flow: setup screen, hook installation, and empty project list
- Run through the Core Functionality Checklist: add project, session detection, state transitions, lock detection, and session end
- Use the provided debug commands to inspect hooks, sessions, locks, and processes
- If issues arise, use Quick Restart to iterate without losing essential state
Example Use Cases
- After implementing a significant feature in Claude HUD to ensure onboarding and session tracking still work
- After fixing a state detection bug to confirm correct state transitions
- Before committing changes that affect session handling to catch regressions
- When a user asks to test the app or verify that it works
- During iterative testing using Quick Restart to validate changes without a full reset