# task-1972: .done 자동 검증 게이트 구현 — 에이전트 미팅 합의 실행

## 목적
팀장이 .done 생성 → 시스템이 자동으로 task 파일의 `## 완료 시그니처`를 읽어서 grep/pytest 실행 → PASS면 수용, FAIL이면 .rejected 생성 + 자동 재위임.

사람이 수동으로 보고서를 읽고 판단하는 게 아니라, 스크립트가 기계적으로 판정.

## ★ 반드시 먼저 읽을 파일 ★
1. `memory/research/agent-meeting-quality-crisis.md` — 에이전트 미팅 3사이클 합의 내용
2. `scripts/finish-task.sh` — 현재 .done 생성 스크립트
3. `teams/shared/qc_verify.py` — 현재 QC 파이프라인

## 설계 (에이전트 미팅 Cycle 3 합의 기반)

### 1. signature_check.py — 시그니처 자동 검증 verifier
- 경로: `teams/shared/verifiers/signature_check.py`
- 기능:
  - task 파일(`memory/tasks/{task_id}.md`)에서 `## 완료 시그니처` 섹션 파싱
  - `[grep] \`패턴\` @ \`파일경로\`` → `grep -rn "패턴" 파일경로` 실행, exit 0 = PASS
  - `[pytest] \`테스트경로::테스트명\`` → `python3 -m pytest 테스트경로 -x` 실행, exit 0 = PASS
  - 시그니처 섹션 없으면 → SKIP (하위 호환)
  - 레벨 판별: task 파일에서 `## 레벨` 파싱
    - Lv.1-2 (normal): [grep]만 검증
    - Lv.3+ (critical/security): [grep] + [pytest] 모두 검증
- qc_verify.py의 ALL_CHECKS에 `"signature_check"` 등록
- symlink 구조로 전 팀 자동 배포

### 2. 소비자 게이트 — .done 수신 시 자동 검증
- 경로: `scripts/verify-done.py` (신규)
- 기능:
  - .done 파일 감지 시 자동 실행 (기존 아누 .done 감지 훅에서 호출)
  - task_id 추출 → task 파일 읽기 → 시그니처 파싱 → 검증 실행
  - 검증 PASS: .done 유지 (기존 플로우 계속)
  - 검증 FAIL: .done → .done.rejected로 rename + 실패 사유 기록 + 팀장에게 알림
- 호출 지점: `scripts/finish-task.sh` 또는 아누의 .done 감지 루프

### 3. 자동 재위임 로직
- .done.rejected 시 해당 task_id의 팀 정보를 task-timers.json에서 추출
- 동일 팀에 "시그니처 검증 실패 항목 수정" 재위임 메시지 전송
- 재위임 시 실패한 시그니처 목록을 포함

### 4. dispatch.py 연동
- dispatch.py에서 task 파일 생성 시 `## 완료 시그니처` 섹션을 자동 포함
- 아누가 task 파일에 시그니처를 사전 기재하면 그대로 사용
- 시그니처 미기재 시 task_desc에서 핵심 키워드를 추출하여 기본 [grep] 생성 (best-effort)

## ★★★ 절대 규칙 ★★★
- 기존 .done 프로토콜 깨지면 안 됨 — 시그니처 없는 기존 task는 SKIP
- 기존 테스트 전체 PASS 필수
- finish-task.sh의 기존 .qc-result 게이트와 충돌 없어야 함

## 완료 시그니처
- [grep] `def.*signature_check\|class.*SignatureCheck` @ `teams/shared/verifiers/signature_check.py`
- [grep] `signature_check` @ `teams/shared/qc_verify.py`
- [grep] `verify-done\|verify_done` @ `scripts/`
- [pytest] `tests/test_signature_check.py`

## 검증 시나리오
1. 시그니처 있는 task + 코드 존재 → .done 유지 (PASS)
2. 시그니처 있는 task + 코드 없음 → .done.rejected 생성 (FAIL)
3. 시그니처 없는 기존 task → SKIP (하위 호환)
4. Lv.1-2 task → [grep]만 검증
5. Lv.3+ task → [grep] + [pytest] 모두 검증
6. .rejected 시 자동 재위임 메시지 전송 확인
7. pytest 전체 PASS

## 레벨
- critical (시스템 핵심 인프라)

## 프로젝트
- dev-system