# task-1330.1 완료 보고서

**S**: `finish-task.sh`에서 `.done` 생성 시 노하우 업데이트 여부를 검증하는 코드 레벨 강제 메커니즘이 없어, 디자인/마케팅 QC 작업 시 팀이 노하우 기록 지시를 무시해도 `.done`이 발급되었다.

**C**: 프롬프트 텍스트 지시만으로는 실효성 없음. 코드 레벨에서 강제 검증하여 노하우 미업데이트 시 `.done` 생성을 차단해야 한다.

**Q**: `finish-task.sh`에 노하우 freshness 체크를 추가하여, 디자인/마케팅 작업 완료 시 노하우 파일 업데이트를 코드 레벨에서 강제할 수 있는가?

**A**: Step 0으로 노하우 freshness 체크 로직을 삽입 완료. task 파일의 디자인/마케팅 키워드 감지 → task-timers.json의 start_time 추출 → 노하우 파일 3개의 mtime 비교 → 미업데이트 시 exit 1로 차단. `SKIP_KNOWHOW_CHECK=1` 환경변수로 오탐 시 우회 가능. 테스트 4시나리오 6항목 전부 PASS.

---

## 산출물

### 수정 파일
- `/home/jay/workspace/scripts/finish-task.sh` (10-71행 삽입: Step 0 노하우 freshness 체크)

### 신규 파일
- `/home/jay/workspace/teams/dev1/tests/test_knowhow_check.sh` (테스트 스크립트)

---

## 변경 상세

### finish-task.sh Step 0 동작 흐름
1. `$WORKSPACE/memory/tasks/${TASK_ID}.md` 파일 존재 여부 확인
2. task 파일에 디자인/마케팅 키워드 포함 여부 grep 확인
3. `task-timers.json`에서 해당 task의 `start_time` 추출
4. Python으로 `knowhow-design.md`, `design-qc-knowhow.md`, `knowhow-marketing.md` 세 파일의 mtime을 start_time과 비교
5. 하나도 업데이트 안 됐으면 FAIL → `exit 1`로 .done 생성 차단
6. `SKIP_KNOWHOW_CHECK=1` 환경변수 설정 시 WARNING 출력 후 우회

### 기존 로직 영향
- 기존 `.done` 생성, `task-timer end`, `notify-completion` 로직: 변경 없음
- 스크립트 인터페이스(`finish-task.sh <task_id>`): 변경 없음
- 새 환경변수 `SKIP_KNOWHOW_CHECK` 추가 (기본값 0, 기존 동작에 영향 없음)

---

## 테스트 결과

6/6 PASS (exit code 0)

- TEST 1: 디자인 키워드 + 노하우 미업데이트 → `[ERROR]` 메시지 출력, exit 1, .done 미생성 (3건 PASS)
- TEST 2: 디자인 키워드 + 과거 start_time → Step 0 차단 없이 통과 (1건 PASS)
- TEST 3: SKIP_KNOWHOW_CHECK=1 우회 → `[WARN]` 메시지 확인, exit 1 없음 (1건 PASS)
- TEST 4: 일반 개발 작업 (키워드 없음) → Step 0 영향 없음 (1건 PASS)

---

## 발견 이슈 및 해결

### 자체 해결 (0건)
없음

### 범위 외 미해결 (0건)
없음

### 잠재 이슈 (참고)
1. **키워드 오탐 실증**: task-1330.1 자체 완료 시 task 파일에 "이미지" 키워드 포함 → 오탐 발생. `SKIP_KNOWHOW_CHECK=1`로 정상 우회 확인. "Docker 이미지 빌드" 등 비디자인 작업에서도 동일 가능 → 우회 메커니즘 필수
2. **task-timers.json 미존재 시**: python3 에러 → `2>/dev/null || echo ""`로 빈 문자열 반환 → TASK_START 비어있으므로 체크 skip → 안전
3. **노하우 파일 3개 모두 미존재 시**: updated 리스트가 비어있으므로 FAIL 판정 → 이는 의도적 동작 (파일이 없으면 만들어야 함)

---

## 모델 사용 기록
- 불칸(백엔드) / finish-task.sh 수정 / sonnet / -
- 아르고스(테스터) / 테스트 스크립트 작성 및 실행 / sonnet / -
