---
task_id: task-1972
type: context
scope: task
created: 2026-04-20
updated: 2026-04-20
status: completed
---

# 맥락 노트: task-1972

**task**: task-1972

---

## 결정 근거

### 3 Step Why

**1st Why: "왜 이 설계가 필요한가?"**
→ 전수조사 적발률 34% — 코드가 실제로 존재하지 않는데 완료 보고하는 사례를 기계적으로 차단해야 함. 수동 QC는 확증 편향에 취약.

**2nd Why: "왜 시그니처 기반 자동 검증이 최선인가?"**
→ 발주자(아누)가 task 파일에 시그니처를 사전 기재하면 작업자가 우회 불가. grep + pytest는 기존 인프라에서 바로 실행 가능하고 false negative가 낮음.

**3rd Why: "왜 다른 대안보다 나은가?"**
→ 소비자 게이트(verify-done.py)와 생산자 게이트(signature_check verifier)를 이중으로 적용. import 기반이나 AST 분석보다 구현 비용이 낮고 즉시 적용 가능.

### 소비자 게이트 vs 생산자 게이트 (Cycle 3 합의)
- 1차: 소비자 게이트(verify_done.py) — 아누 .done 처리 시 검증
- 2차: 생산자 게이트(signature_check verifier) — QC 파이프라인 편입
- 채택 이유: 다빈치 제안 "팀장 봇 코드 변경 제로, 노력 낮음"

### 레벨별 차등 검증 (Cycle 2 합의)
- Lv.1-2(normal): grep 시그니처만 검증
- Lv.3+(critical/security): grep + pytest 모두 검증
- 근거: 마아트 DA "검증 레이어 과잉 → 속도 이점 소멸" 방지

### --timeout=60 제거
- pytest 실행 시 `--timeout=60` 플래그가 pytest-timeout 미설치 환경에서 에러 발생
- subprocess.run의 timeout=120으로 충분히 방어
- 결정: 제거

## 참조 자료

- 에이전트 미팅: `memory/research/agent-meeting-quality-crisis.md`
- 기존 QC: `teams/shared/qc_verify.py`
- 기존 finish-task: `scripts/finish-task.sh`

## 주의사항

- 시그니처 섹션 없는 기존 task는 SKIP (하위 호환 필수)
- 시그니처 포맷의 backtick 내 정규식 패턴 주의 (BRE `\|` 구문)
- finish-task.sh 수정 불필요 — 기존 QC 파이프라인에 편입하는 방식
