# pulse:features-unblock > Unblock PULSE execution when stuck on needs_human or max retries. Mark feature as complete, skip, or retry. - Author: Damion Davy - Repository: drddavi/PULSE - Version: 20260126085815 - Stars: 1 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/drddavi/PULSE - Web: https://mule.run/skillshub/@@drddavi/PULSE~pulse:features-unblock:20260126085815 --- --- name: pulse:features-unblock description: Unblock PULSE execution when stuck on needs_human or max retries. Mark feature as complete, skip, or retry. --- # Unblock Unblock PULSE execution when a feature requires human intervention. ## When to Use - Verifier returned `needs_human` (manual verification required) - Feature exceeded max retries - Worker reported a permanent blocker ## Pre-Check: Ensure Config Complete Before processing, merge any missing CONFIG.json keys from the reference template. **Reference:** `~/.claude/skills/pulse-project-init/templates/CONFIG.json` ```bash jq --slurpfile ref <(cat ~/.claude/skills/pulse-project-init/templates/CONFIG.json) ' ($ref[0].settings + .settings) as $settings | ($ref[0].models + .models) as $models | . + {settings: $settings, models: $models} ' .pulse/CONFIG.json > .pulse/CONFIG.tmp && mv .pulse/CONFIG.tmp .pulse/CONFIG.json ``` If keys were added, display: `Config updated: Added {list of keys}` --- ## Process ### 1. Check If Blocked ```bash cat .pulse/PULSE_PROGRESS.json ``` If `status` is NOT `"blocked"`: ``` PULSE is not blocked. Current status: {status} Run /pulse:execute to continue. ``` Exit. ### 2. Show Blocker Details ``` ═══════════════════════════════════════ PULSE Blocked ═══════════════════════════════════════ Feature: {feature_id} - {feature_name} Reason: {error.message} Type: {error.type} ═══════════════════════════════════════ ``` ### 3. Read Feature Details ```bash cat .pulse/PULSE_FEATURES.json | jq '.[] | select(.id == {feature_id})' ``` Show relevant info: - Total attempts made - Last error message - Feature description ### 4. Ask User What To Do Use AskUserQuestion: ``` How do you want to handle this blocked feature? ``` | Option | Description | |--------|-------------| | **Complete** (Recommended if verified) | Mark as complete - you've manually verified it works | | **Skip** | Skip this feature and continue to next | | **Retry** | Reset attempts and try again | ### 5. Execute User Choice #### If "Complete": 1. Get real timestamp: ```bash date -u +"%Y-%m-%dT%H:%M:%SZ" ``` 2. Update `PULSE_FEATURES.json`: ```json { "status": "complete", "current_attempts": 0, "last_error": null, "completed_at": "{timestamp}", "verified_by": "human" } ``` 3. Update `PULSE_PROGRESS.json`: ```json { "status": "idle", "error": null, "overall": { "completed_features": "increment by 1", "percent": "recalculate" }, "current": { "stage": "completed", "feature_id": null, "feature_name": null } } ``` 4. Display: ``` ✓ Feature {id} marked as complete (human verified) Progress: {completed}/{total} features ({percent}%) Run /pulse:execute to continue with remaining features. ``` #### If "Skip": 1. Get real timestamp: ```bash date -u +"%Y-%m-%dT%H:%M:%SZ" ``` 2. Update `PULSE_FEATURES.json`: ```json { "status": "skipped", "skipped_at": "{timestamp}", "skip_reason": "human_decision" } ``` 3. Update `PULSE_PROGRESS.json`: ```json { "status": "idle", "error": null, "overall": { "skipped_features": "increment by 1" }, "current": { "stage": "skipped", "feature_id": null, "feature_name": null } } ``` 4. Display: ``` ⊘ Feature {id} skipped Progress: {completed}/{total} features ({percent}%) Skipped: {skipped} Run /pulse:execute to continue with remaining features. ``` #### If "Retry": 1. Update `PULSE_FEATURES.json`: ```json { "status": "pending", "current_attempts": 0, "last_error": null } ``` 2. Update `PULSE_PROGRESS.json`: ```json { "status": "idle", "error": null, "current": { "stage": "pending", "feature_id": null, "feature_name": null } } ``` 3. Display: ``` ↻ Feature {id} reset for retry Attempts reset to 0. Feature will be retried from scratch. Run /pulse:execute to continue. ``` ### 6. Ask to Resume After unblocking, ask: ``` Do you want to resume execution now? ``` | Option | Action | |--------|--------| | **Yes** | Run `Skill("pulse:execute")` | | **No** | Exit - user will run manually | ## Display Summary ``` ═══════════════════════════════════════ PULSE Unblocked ═══════════════════════════════════════ Action: {Complete|Skip|Retry} Feature: {id} - {name} Progress: {completed}/{total} ({percent}%) {Next step message} ═══════════════════════════════════════ ``` ## Edge Cases ### Multiple Blocked Features If somehow multiple features are blocked (shouldn't happen normally): 1. Show list of all blocked features 2. Process them one at a time 3. After each, ask if user wants to continue unblocking ### No .pulse Folder ``` Error: No .pulse folder found. Run /pulse:project-init first. ``` ### Corrupted State If JSON files are invalid: ``` Error: PULSE state files corrupted. Check .pulse/PULSE_PROGRESS.json and .pulse/PULSE_FEATURES.json ```