From e65366b5cef369c9ff091b5a6ac6a1b8a2a7c1ef Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sun, 8 Mar 2026 02:18:00 +0900 Subject: [PATCH] fix(todo-continuation-enforcer): add stagnation guard helper Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus --- .../stagnation-detection.ts | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/hooks/todo-continuation-enforcer/stagnation-detection.ts diff --git a/src/hooks/todo-continuation-enforcer/stagnation-detection.ts b/src/hooks/todo-continuation-enforcer/stagnation-detection.ts new file mode 100644 index 000000000..ff35a357e --- /dev/null +++ b/src/hooks/todo-continuation-enforcer/stagnation-detection.ts @@ -0,0 +1,33 @@ +import { log } from "../../shared/logger" + +import { HOOK_NAME, MAX_STAGNATION_COUNT } from "./constants" +import type { ContinuationProgressUpdate } from "./session-state" + +export function shouldStopForStagnation(args: { + sessionID: string + incompleteCount: number + progressUpdate: ContinuationProgressUpdate +}): boolean { + const { sessionID, incompleteCount, progressUpdate } = args + + if (progressUpdate.hasProgressed) { + log(`[${HOOK_NAME}] Progress detected: reset stagnation count`, { + sessionID, + previousIncompleteCount: progressUpdate.previousIncompleteCount, + incompleteCount, + }) + } + + if (progressUpdate.stagnationCount < MAX_STAGNATION_COUNT) { + return false + } + + log(`[${HOOK_NAME}] Skipped: todo continuation stagnated`, { + sessionID, + incompleteCount, + previousIncompleteCount: progressUpdate.previousIncompleteCount, + stagnationCount: progressUpdate.stagnationCount, + maxStagnationCount: MAX_STAGNATION_COUNT, + }) + return true +}