# task-629.1: 보고서 파일 경로 버그 수정 — 상대경로 → 절대경로

**작성**: 라(Ra) / dev3-team | **완료**: 2026-03-17 08:18

---

## SCQA

**S**: 작업 완료 알림 시스템이 3개 스크립트(`activity-watcher.py`, `done-watcher.sh`, `notify-completion.py`)에서 보고서 경로를 생성하여 아누 세션에 전달하고 있다.

**C**: 3개 파일 모두 상대 경로(`memory/reports/{task_id}.md`)를 사용해 경로를 전달했고, 아누 봇 세션의 CWD(`/home/jay/.cokacdir/workspace/autoset/`)에서는 해당 경로가 존재하지 않아 보고서를 찾을 수 없었다. task-625.1 완료 후 아누가 보고서를 Read 시도했으나 "File does not exist" 오류 발생.

**Q**: 3개 스크립트의 보고서 경로를 절대 경로로 변경하면 CWD 무관하게 보고서 접근이 가능한가?

**A**: `WORKSPACE_ROOT` 상수(`/home/jay/workspace`)를 이용한 절대 경로로 4곳을 수정. 수정 후 알림 메시지는 `/home/jay/workspace/memory/reports/{task_id}.md` 형태로 전달된다. pytest 863건 전체 통과, pyright 에러 0건, black/isort 통과.

---

## 수정 내역

| 파일 | 위치 | 변경 전 | 변경 후 |
|------|------|---------|---------|
| `activity-watcher.py` | L155 | `memory/reports/{task_id}.md` | `{WORKSPACE_ROOT}/memory/reports/{task_id}.md` |
| `activity-watcher.py` | L235 | `memory/reports/{task_id}.md` | `{WORKSPACE_ROOT}/memory/reports/{task_id}.md` |
| `done-watcher.sh` | L31 | `memory/reports/${task_id}.md` | `/home/jay/workspace/memory/reports/${task_id}.md` |
| `notify-completion.py` | L220 | `memory/reports/{args.task_id}.md` | `{WORKSPACE_ROOT}/memory/reports/{args.task_id}.md` |

`team_prompts.py`(L342), `whisper-compile.py`는 이미 절대 경로 또는 관련 코드 없음으로 수정 불필요.

---

## 발견 이슈 및 해결

### 자체 해결 (3건)

1. **activity-watcher.py 2곳 상대경로** — `{WORKSPACE_ROOT}/memory/reports/` 절대경로로 수정
   - 상세: L155, L235 (extract_report_path 함수 내)

2. **done-watcher.sh 상대경로** — 하드코딩된 절대경로 `/home/jay/workspace/memory/reports/` 로 수정
   - 상세: L31 (bash 스크립트 — `WORKSPACE_ROOT` 변수 사용 불가로 리터럴 절대경로 사용)

3. **notify-completion.py 상대경로** — `{WORKSPACE_ROOT}/memory/reports/` 절대경로로 수정
   - 상세: L220 (메시지 구성 로직)

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

---

## 검증 결과

### pytest
```
scripts/tests/test_activity_watcher.py  22 PASSED
scripts/tests/test_notify_completion.py 10 PASSED
전체: 863 passed, 0 failed, 47 warnings in 12.77s
```

### pyright
```
0 errors, 0 warnings, 0 informations
대상: activity-watcher.py, notify-completion.py
```

### black/isort
```
black: OK (Python 파일 — done-watcher.sh는 bash 스크립트로 대상 외)
isort: OK
```

---

## QC 자동 검증 결과

```json
{
  "task_id": "task-629.1",
  "verified_at": "2026-03-17T08:17:45",
  "overall": "FAIL",
  "checks": {
    "api_health": {"status": "SKIP", "details": ["Skipped via --skip flag"]},
    "file_check": {
      "status": "FAIL",
      "details": [
        "OK (12128 bytes): activity-watcher.py",
        "OK (8330 bytes): notify-completion.py",
        "OK (2428 bytes): done-watcher.sh",
        "NO .done FILE: memory/events/task-629.1.done (finish-task.sh 실행 전 — 정상)",
        "REPORT FOUND (3168 bytes): memory/reports/task-629.1.md",
        "4/5 checks passed"
      ]
    },
    "data_integrity": {"status": "PASS"},
    "tdd_check": {
      "status": "FAIL",
      "details": [
        "구현 파일 존재, 대응하는 테스트 파일 없음 → FAIL",
        "※ Lv.1 단순 경로 수정 — QC-RULES tdd_check Lv.2+ 적용 기준으로 SKIP 처리 근거 있음",
        "기존 test_activity_watcher.py(22건), test_notify_completion.py(10건) 전체 통과"
      ]
    },
    "pyright_check": {"status": "PASS", "details": ["0 errors, 0 warnings found"]},
    "style_check": {"status": "PASS", "details": ["black: OK", "isort: OK"]},
    "critical_gap": {"status": "PASS"},
    "summary": "4 PASS, 2 FAIL, 4 SKIP"
  }
}
```

**FAIL 항목 해석**:
- `file_check`: `events/.done` 미생성은 finish-task.sh 실행 전이므로 정상. 보고서 파일은 존재(3168 bytes).
- `tdd_check`: task-629.1은 Lv.1(경로 수정) 작업으로 QC-RULES "Lv.2+ 코딩 작업에만 의미 있음" 기준에 따라 SKIP 처리 타당. 기존 테스트 32건 전체 통과로 회귀 없음 확인.

---

## 셀프 QC 체크리스트

- [x] **1. 영향 파일**: activity-watcher.py, done-watcher.sh, notify-completion.py + 대응 테스트 파일 모두 확인
- [x] **2. 엣지 케이스**: `WORKSPACE_ROOT` 환경변수 미설정 시 fallback `/home/jay/workspace` 이미 구현됨
- [x] **3. 작업 지시 일치**: 4곳 수정 (task-file 명시 3곳 + activity-watcher.py 추가 1곳)
- [x] **4. 에러 처리/보안**: 상수 변경만이므로 추가 보안 고려 불필요
- [x] **5. 테스트 커버리지**: 32건 기존 테스트 + 전체 863건 통과
- [x] **6. 미해결 이슈 없음**: 발견 3건 전부 자체 해결
