Skip to content

docs(task): done-guard-window — done 가드 오탐의 구조적 원인 (조사·설계, 구현 미착수) - #46

Merged
hsleedevelop merged 1 commit into
mainfrom
ao/harness-aijient-team-plugin-22/done-guard-window
Aug 25, 2026
Merged

hsleedevelop merged 1 commit into
mainfrom
ao/harness-aijient-team-plugin-22/done-guard-window

Conversation

@hsleedevelop

Copy link
Copy Markdown
Contributor

task 문서만 추가하는 PR입니다. 코드 변경 없음.

왜 필요한가 — 우회가 정상 절차가 되고 있다

harness-team done의 판정 창 기준이 active.json의 switchedAt인데, 이 값은
"마지막 활성화 시각" 이지 "task 작업 구간" 이 아닙니다. 재활성화하면 창이 초기화되어
이미 만족된 증거가 사라진 것처럼 보입니다.

2026-08-25 실제 발생 — boundary-perf-invariant(plan 14/14, PR #44 머지 완료) 종결 시:

cause: spec이 `review: required`인데 이 task 기간의 리뷰 마커가 artifact에 없음
cause: task 활성화 이후 커밋이 0개임

둘 다 오탐이었습니다:

가드 실제 증거 새 창(09:19:47Z) 기준
리뷰 마커 at=05:35:00Z (codex 리뷰 기록) 창 밖 → "없음"
커밋 6건 9414faf…f704672 (PR #44 머지) 창 밖 → "0개"

원래 창은 04:25:13Z였고 증거는 전부 그 안에 있었습니다. --force로 우회했고,
그 우회 자체가 이 task를 만든 이유입니다.

구조적입니다 — 가끔 나는 버그가 아닙니다

runTask가 생성(:204)과 재활성화(:231) 모두 switchedAt을 덮어씁니다. 따라서

  • 끝난 task를 닫을 때마다 반드시 재현됩니다 — 종결에는 재활성화가 선행되므로.
  • 종결만의 문제도 아닙니다. task를 전환했다 되돌아오기만 해도 창이 초기화되어
    그 전 작업 증거가 통째로 사라집니다.

이대로면 --force가 종결의 표준 절차가 되고 가드는 이름만 남습니다.

진짜 난점 — "오탐 제거"가 아니라 "오탐만 제거"

기존 테스트가 반대 방향을 못박아 두고 있습니다:
tests/done-guard.test.mjs:461 — "이전 task 기간의 마커(at < switchedAt)는 무효 → 차단".
옛 리뷰 마커 재사용을 막는 것이 설계 의도입니다.

따라서 창을 넓히는 방향이면 오탐은 사라져도 가드가 막던 망각도 함께 통과합니다.
되살려야 하는 것은 같은 task의 이전 활성 구간뿐입니다. spec에 이를 요구사항으로 명시하고,
성공 기준에 :461 테스트가 계속 통과할 것을 넣었습니다.

영향 범위 (줄 번호는 소스와 대조 확인)

src/commands/task.mjs collectDoneIssues()의 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

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
hsleedevelop merged commit 1a2a72f into main Aug 25, 2026
1 check passed
@hsleedevelop
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants