bb745a0e9b
`_check_gates()` skipped a failed gate whenever sha256(git HEAD + `git status --porcelain`) matched the last failure. Porcelain sees neither the contents of an untracked or already-modified file nor inputs outside the repo, so a repaired input replayed the stale failure and burned retries until the goal auto-paused (#110649). The gate now runs on every eligible boundary; the retry cap still bounds a genuinely stuck red suite. `workspace_fingerprint` and `GoalGate.last_failed_fingerprint` are removed with their only consumer (old persisted state ignores the extra key on load). Based on the analysis in #110649 (JsonDaRula69) and PR #110658 (KoNit-K), whose `git diff HEAD` hash still misses untracked contents and adds a full diff per boundary.