# 노하우 업데이트 코드 레벨 강제 검증

## 배경
현재 "노하우 기록하세요"는 프롬프트 텍스트 지시일 뿐, 실제 코드에서 검증하지 않음. 팀이 무시하면 .done 발급됨. 코드 레벨에서 강제 검증 필요.

## 목표
디자인/마케팅 QC 작업 완료 시 `finish-task.sh`에서 노하우 파일 수정 타임스탬프를 검증하여, 업데이트 안 됐으면 .done 생성 차단.

## 변경 사항

### 1. `scripts/finish-task.sh` 수정

`.done 원자적 생성` 전에 노하우 freshness 체크 단계 추가:

```bash
# 0. 노하우 업데이트 검증 (디자인/마케팅 작업만)
TASK_FILE="$WORKSPACE/memory/tasks/${TASK_ID}.md"
if [ -f "$TASK_FILE" ]; then
    # task 파일에 디자인/마케팅 키워드가 있는지 확인
    if grep -qiE "디자인|배너|이미지|banner|image|광고|마케팅|카피|copywriting" "$TASK_FILE" 2>/dev/null; then
        # task-timer에서 start_time 가져오기
        TASK_START=$(python3 -c "
import json
with open('$WORKSPACE/memory/task-timers.json') as f:
    data = json.load(f)
tasks = data.get('tasks', data)
t = tasks.get('$TASK_ID', {})
print(t.get('start_time', ''))
" 2>/dev/null || echo "")
        
        if [ -n "$TASK_START" ]; then
            # 노하우 파일들의 수정 시간이 작업 시작 이후인지 확인
            KNOWHOW_CHECK=$(python3 -c "
import os, sys
from datetime import datetime

start_str = '$TASK_START'
start_time = datetime.fromisoformat(start_str)

knowhow_files = [
    '$WORKSPACE/memory/specs/knowhow-design.md',
    '$WORKSPACE/memory/specs/design-qc-knowhow.md',
    '$WORKSPACE/memory/specs/knowhow-marketing.md',
]

updated = []
for f in knowhow_files:
    if os.path.exists(f):
        mtime = datetime.fromtimestamp(os.path.getmtime(f))
        if mtime > start_time:
            updated.append(os.path.basename(f))

if not updated:
    print('FAIL')
    print('노하우 파일이 작업 시작 이후 업데이트되지 않았습니다.', file=sys.stderr)
    print(f'작업 시작: {start_str}', file=sys.stderr)
    for f in knowhow_files:
        if os.path.exists(f):
            mtime = datetime.fromtimestamp(os.path.getmtime(f)).isoformat()
            print(f'  {os.path.basename(f)}: {mtime}', file=sys.stderr)
else:
    print('PASS')
" 2>/dev/null)
            
            if [ "$KNOWHOW_CHECK" = "FAIL" ]; then
                echo "[ERROR] ❌ 노하우 파일 업데이트 미확인. .done 생성 차단."
                echo "[ERROR] 디자인/마케팅 QC 후에는 반드시 노하우 파일을 업데이트해야 합니다."
                echo "[ERROR] 대상: knowhow-design.md, design-qc-knowhow.md, knowhow-marketing.md 중 최소 1개"
                echo "[HINT] --skip-knowhow-check 환경변수로 우회 가능: SKIP_KNOWHOW_CHECK=1 bash finish-task.sh $TASK_ID"
                if [ "${SKIP_KNOWHOW_CHECK:-0}" != "1" ]; then
                    exit 1
                fi
                echo "[WARN] SKIP_KNOWHOW_CHECK=1로 우회합니다."
            fi
        fi
    fi
fi
```

### 2. 우회 메커니즘
- `SKIP_KNOWHOW_CHECK=1` 환경변수로 우회 가능 (비디자인/비마케팅 작업에서 키워드 오탐 시)
- 우회 시 WARNING 로그 출력

### 3. 테스트
- 디자인 키워드가 있는 task 파일로 finish-task.sh 실행 → 노하우 미업데이트 시 차단 확인
- 노하우 파일 touch 후 → PASS 확인
- SKIP_KNOWHOW_CHECK=1 → 우회 통과 확인
- 일반 개발 작업(키워드 없음) → 영향 없음 확인

## 변경 대상 파일
- 수정: `/home/jay/workspace/scripts/finish-task.sh`

## 절대 변경 금지
- finish-task.sh의 기존 .done 생성, task-timer end, notify-completion 로직
- qc_verify.py (별도 체계)
- dispatch.py, team_prompts.py, image_workflow.py
