Repository navigation
docs(task): done-guard-window — done 가드 오탐의 구조적 원인 (조사·설계, 구현 미착수) - #46
Merged
hsleedevelop merged 1 commit intoAug 25, 2026
Merged
Conversation
harness-team done 의 판정 창 기준이 active.json 의 switchedAt 인데, 이 값은 '마지막 활성화 시각' 이지 'task 작업 구간' 이 아니다. 재활성화하면 창이 초기화되어 이미 만족된 증거가 사라진 것처럼 보인다. 2026-08-25 실제 발생: boundary-perf-invariant(plan 14/14, PR #44 머지 완료) 종결 시 리뷰 마커·커밋 가드 2건이 걸렸고 둘 다 오탐이었다. 마커 at=05:35:00Z 와 커밋 6건이 원래 창(04:25:13Z) 안에 있었는데, 재활성화가 창을 09:19:47Z 로 밀어 버렸다. --force 로 우회했고 그 우회가 이 task 를 만든 이유다. 구조적이다: runTask 가 생성(:204)과 재활성화(:231) 모두 switchedAt 을 덮어쓰므로, 종결에는 재활성화가 선행되어 항상 재현된다. 종결만의 문제도 아니어서 task 를 전환했다 되돌아오기만 해도 창이 초기화된다. 진짜 난점은 '오탐 제거' 가 아니라 '오탐만 제거' 다. 기존 테스트 done-guard.test.mjs:461 이 '옛 마커 재사용 차단' 을 의도로 못박아 뒀으므로, 창을 넓히는 방향이면 가드가 무력해진다. 되살릴 것은 같은 task 의 이전 활성 구간뿐이다. 후보 5개를 평가해 (A) firstActivatedAt 을 유력안으로 뒀다. meta.created 는 날짜만이라(slice(0,10)) 창이 과도하게 넓어져 부적합이다. 인용한 줄 번호는 실제 소스와 대조해 확인했다. 구현은 미착수 — 창 기준 선택과 마이그레이션 설계가 남아 Ambiguity 게이트를 열어 뒀다. 정책이 아니라 기술 결정이라 착수 지시가 오면 구현 단계에서 닫는다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S79BMNyq1gqXXcEQw1vsnx
hsleedevelop
deleted the
ao/harness-aijient-team-plugin-22/done-guard-window
branch
August 25, 2026 09:34
hsleedevelop
pushed a commit
that referenced
this pull request
Aug 25, 2026
boundary-perf-invariant → ✅ done done-guard-window → 🔄 open (착수 대기) node-test-runner-flake → 🔄 open (Node 24.20.0 검증 대기) 집계는 AGENTS.md 규약대로 기본 브랜치 직접 커밋으로 갱신한다 (선례: 5e0c731, 03e506a, 7f29a84). summary --write --force 사유는 직전(7f29a84)과 동일하다. detached HEAD 라 branch --show-current 가 빈 값이어서 브랜치 가드가 거부하는데, 이 가드는 feature 브랜치에서 원장을 쓰는 것을 막는 장치이고 HEAD 가 origin/main 과 동일한 sha(1a2a72f) 여서 해당하지 않는다. 로컬 main 은 주 워크트리가 점유해(현재 f8d6b6d 로 낡음) 이 워크트리에서 체크아웃할 수 없다. 결과는 summary --check 로 '최신 상태 (59개 task)' 확인. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S79BMNyq1gqXXcEQw1vsnx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
task 문서만 추가하는 PR입니다. 코드 변경 없음.
왜 필요한가 — 우회가 정상 절차가 되고 있다
harness-team done의 판정 창 기준이active.json의switchedAt인데, 이 값은"마지막 활성화 시각" 이지 "task 작업 구간" 이 아닙니다. 재활성화하면 창이 초기화되어
이미 만족된 증거가 사라진 것처럼 보입니다.
2026-08-25 실제 발생 —
boundary-perf-invariant(plan 14/14, PR #44 머지 완료) 종결 시:둘 다 오탐이었습니다:
at=05:35:00Z(codex 리뷰 기록)9414faf…f704672(PR #44 머지)원래 창은
04:25:13Z였고 증거는 전부 그 안에 있었습니다.--force로 우회했고,그 우회 자체가 이 task를 만든 이유입니다.
구조적입니다 — 가끔 나는 버그가 아닙니다
runTask가 생성(:204)과 재활성화(:231) 모두switchedAt을 덮어씁니다. 따라서그 전 작업 증거가 통째로 사라집니다.
이대로면
--force가 종결의 표준 절차가 되고 가드는 이름만 남습니다.진짜 난점 — "오탐 제거"가 아니라 "오탐만 제거"
기존 테스트가 반대 방향을 못박아 두고 있습니다:
tests/done-guard.test.mjs:461— "이전 task 기간의 마커(at < switchedAt)는 무효 → 차단".옛 리뷰 마커 재사용을 막는 것이 설계 의도입니다.
따라서 창을 넓히는 방향이면 오탐은 사라져도 가드가 막던 망각도 함께 통과합니다.
되살려야 하는 것은 같은 task의 이전 활성 구간뿐입니다. spec에 이를 요구사항으로 명시하고,
성공 기준에
:461테스트가 계속 통과할 것을 넣었습니다.영향 범위 (줄 번호는 소스와 대조 확인)
src/commands/task.mjscollectDoneIssues()의switchedAt의존 가드 3종::442리뷰 마커 ·:474커밋 0개 ·:486테스트 미작성.후보
(A)
firstActivatedAt신규 필드 — 유력 · (B)meta.created— 부적합(slice(0,10)이라날짜만이라 창이 과도하게 넓어짐) · (C) 활성 구간 누적 · (D) task 디렉터리 첫 커밋에서 유도 ·
(E) 종결 시에만 완화 — 증상만 가림.
구현 미착수
창 기준 선택과 마이그레이션·하위 호환 설계가 남아 Ambiguity 게이트를 열어 뒀습니다.
정책이 아니라 기술 결정이라 착수 지시가 오면 구현 단계에서 닫습니다.
plan은 재현 테스트 먼저 → 구현 →
:461회귀 확인 순으로 잡았습니다 —가드 자신을 고치는 task라 "고쳤다"의 근거가 테스트여야 합니다.
문서:
docs/chad/done-guard-window/🤖 Generated with Claude Code
https://claude.ai/code/session_01S79BMNyq1gqXXcEQw1vsnx