diff --git a/CHANGELOG.md b/CHANGELOG.md
index f7a9e5c74..583089ace 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,9 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [Unreleased]
+### Changed
+- `/gsd:debug` flow now requires a `human-verify` checkpoint after self-verification before marking debug sessions `resolved` and moving files to `.planning/debug/resolved/`
+
## [1.20.3] - 2026-02-16
### Fixed
diff --git a/agents/gsd-debugger.md b/agents/gsd-debugger.md
index 4413c99eb..e0337b594 100644
--- a/agents/gsd-debugger.md
+++ b/agents/gsd-debugger.md
@@ -737,7 +737,7 @@ DEBUG_RESOLVED_DIR=.planning/debug/resolved
```markdown
---
-status: gathering | investigating | fixing | verifying | resolved
+status: gathering | investigating | fixing | verifying | awaiting_human_verify | resolved
trigger: "[verbatim user input]"
created: [ISO timestamp]
updated: [ISO timestamp]
@@ -801,10 +801,10 @@ files_changed: []
## Status Transitions
```
-gathering -> investigating -> fixing -> verifying -> resolved
- ^ | |
- |____________|___________|
- (if verification fails)
+gathering -> investigating -> fixing -> verifying -> awaiting_human_verify -> resolved
+ ^ | | |
+ |____________|___________|_________________|
+ (if verification fails or user reports issue)
```
## Resume Behavior
@@ -907,6 +907,7 @@ Based on status:
- "investigating" -> Continue investigation_loop from Current Focus
- "fixing" -> Continue fix_and_verify
- "verifying" -> Continue verification
+- "awaiting_human_verify" -> Wait for checkpoint response and either finalize or continue investigation
@@ -966,11 +967,52 @@ Update status to "fixing".
- Update status to "verifying"
- Test against original Symptoms
- If verification FAILS: status -> "investigating", return to investigation_loop
-- If verification PASSES: Update Resolution.verification, proceed to archive_session
+- If verification PASSES: Update Resolution.verification, proceed to request_human_verification
+
+
+
+**Require user confirmation before marking resolved.**
+
+Update status to "awaiting_human_verify".
+
+Return:
+
+```markdown
+## CHECKPOINT REACHED
+
+**Type:** human-verify
+**Debug Session:** .planning/debug/{slug}.md
+**Progress:** {evidence_count} evidence entries, {eliminated_count} hypotheses eliminated
+
+### Investigation State
+
+**Current Hypothesis:** {from Current Focus}
+**Evidence So Far:**
+- {key finding 1}
+- {key finding 2}
+
+### Checkpoint Details
+
+**Need verification:** confirm the original issue is resolved in your real workflow/environment
+
+**Self-verified checks:**
+- {check 1}
+- {check 2}
+
+**How to check:**
+1. {step 1}
+2. {step 2}
+
+**Tell me:** "confirmed fixed" OR what's still failing
+```
+
+Do NOT move file to `resolved/` in this step.
-**Archive resolved debug session.**
+**Archive resolved debug session after human confirmation.**
+
+Only run this step when checkpoint response confirms the fix works end-to-end.
Update status to "resolved".
@@ -1127,6 +1169,8 @@ Orchestrator presents checkpoint to user, gets response, spawns fresh continuati
**Commit:** {hash}
```
+Only return this after human verification confirms the fix.
+
## INVESTIGATION INCONCLUSIVE
```markdown
@@ -1176,7 +1220,8 @@ Check for mode flags in prompt context:
**goal: find_and_fix** (default)
- Find root cause, then fix and verify
- Complete full debugging cycle
-- Archive session when verified
+- Require human-verify checkpoint after self-verification
+- Archive session only after user confirmation
**Default mode (no flags):**
- Interactive debugging with user
diff --git a/commands/gsd/debug.md b/commands/gsd/debug.md
index d0014bb76..27c383ede 100644
--- a/commands/gsd/debug.md
+++ b/commands/gsd/debug.md
@@ -110,6 +110,9 @@ Task(
**If `## CHECKPOINT REACHED`:**
- Present checkpoint details to user
- Get user response
+- If checkpoint type is `human-verify`:
+ - If user confirms fixed: continue so agent can finalize/resolve/archive
+ - If user reports issues: continue so agent returns to investigation/fixing
- Spawn continuation agent (see step 5)
**If `## INVESTIGATION INCONCLUSIVE`:**
diff --git a/get-shit-done/templates/DEBUG.md b/get-shit-done/templates/DEBUG.md
index b2fa321ad..63ef4b2bc 100644
--- a/get-shit-done/templates/DEBUG.md
+++ b/get-shit-done/templates/DEBUG.md
@@ -8,7 +8,7 @@ Template for `.planning/debug/[slug].md` — active debug session tracking.
```markdown
---
-status: gathering | investigating | fixing | verifying | resolved
+status: gathering | investigating | fixing | verifying | awaiting_human_verify | resolved
trigger: "[verbatim user input]"
created: [ISO timestamp]
updated: [ISO timestamp]
@@ -127,9 +127,14 @@ files_changed: []
- Update Resolution.verification with results
- If verification fails: status → "investigating", try again
+**After self-verification passes:**
+- status -> "awaiting_human_verify"
+- Request explicit user confirmation in a checkpoint
+- Do NOT move file to resolved yet
+
**On resolution:**
- status → "resolved"
-- Move file to .planning/debug/resolved/
+- Move file to .planning/debug/resolved/ (only after user confirms fix)