# task-1428.1 완료 보고서

## SCQA

**S**: scripts/와 tests/ 하위 54개 Python 파일에 ChatID(`6937032012`), workspace 경로(`/home/jay/workspace`), threshold, ANU_KEY 등이 하드코딩되어 있어 환경 변경 시 대규모 수정이 필요한 상태였다.

**C**: config/constants.json과 config/loader.py가 Phase 0에서 구축되었으나, 실제 소비자(scripts/, tests/)가 여전히 하드코딩에 의존하여 config 단일 소스 아키텍처가 미완성이었다.

**Q**: scripts/와 tests/ 전체에서 하드코딩을 제거하고 config/env 참조로 전환하면서 기존 테스트 회귀 없이 완료할 수 있는가?

**A**: 54개 파일에서 `os.environ.get()` + fallback 패턴으로 전환 완료. `grep -rn "6937032012" scripts/ tests/` 0건 달성 (env fallback 제외). tests/ 10 failed, 1572 passed / scripts/tests/ 23 failed, 1321 passed (베이스라인 동일, 회귀 0건).

---

## 수정 항목별 요약

### 1. ChatID 하드코딩 제거 (11개 파일)
- 패턴: `"6937032012"` → `os.environ.get("COKACDIR_CHAT_ID", "6937032012")`
- scripts: ci-report.py, canary-test.py, autoresearch/runner.py
- tests: test_notify_completion.py, test_dispatch.py, conftest.py
- scripts/tests: test_notify_completion.py

### 2. Workspace path 전환 (48개 파일)
- 패턴: `Path("/home/jay/workspace")` → `Path(os.environ.get("WORKSPACE_ROOT", str(Path(__file__).resolve().parent.parent)))`
- scripts 27개, tests 18개, scripts/tests 3개

### 3. Threshold → constants.json 참조 (2개 파일)
- whisper-compile.py: `IDLE_THRESHOLD_HOURS`, `GHOST_THRESHOLD_HOURS` → constants.json `thresholds.idle_hours`, `thresholds.ghost_hours` 참조
- whisper-save-guidance.py: `_IDLE_THRESHOLD_HOURS` → constants.json 참조

### 4. ANU_KEY 하드코딩 제거 (2개 파일)
- ci-report.py, canary-test.py: `os.environ.get("COKACDIR_KEY_ANU", ...)` 전환

---

## 수정 파일 목록

### scripts/ (27개)
- /home/jay/workspace/scripts/auto_merge.py
- /home/jay/workspace/scripts/browser.py
- /home/jay/workspace/scripts/canary-test.py
- /home/jay/workspace/scripts/check-dev3.py
- /home/jay/workspace/scripts/check-dev8.py
- /home/jay/workspace/scripts/ci-report.py
- /home/jay/workspace/scripts/drive-change-log.py
- /home/jay/workspace/scripts/extract-changed-files.py
- /home/jay/workspace/scripts/file-cleanup.py
- /home/jay/workspace/scripts/file_cleanup.py
- /home/jay/workspace/scripts/health_score.py
- /home/jay/workspace/scripts/memory-janitor.py
- /home/jay/workspace/scripts/memory_janitor.py
- /home/jay/workspace/scripts/notify-completion.py
- /home/jay/workspace/scripts/pattern-detector.py
- /home/jay/workspace/scripts/preview_manager.py
- /home/jay/workspace/scripts/secret-rotation-check.py
- /home/jay/workspace/scripts/test_utm_builder.py
- /home/jay/workspace/scripts/token-tracker.py
- /home/jay/workspace/scripts/transcript-learner.py
- /home/jay/workspace/scripts/update-system-spec.py
- /home/jay/workspace/scripts/validate-output-structure.py
- /home/jay/workspace/scripts/weekly-report.py
- /home/jay/workspace/scripts/weekly_retro.py
- /home/jay/workspace/scripts/whisper-compile.py
- /home/jay/workspace/scripts/whisper-save-guidance.py
- /home/jay/workspace/scripts/youtube-check-new-transcripts.py

### scripts/autoresearch/ (4개)
- /home/jay/workspace/scripts/autoresearch/capture.py
- /home/jay/workspace/scripts/autoresearch/changelog.py
- /home/jay/workspace/scripts/autoresearch/runner.py
- /home/jay/workspace/scripts/autoresearch/skill_executor.py

### scripts/tests/ (3개)
- /home/jay/workspace/scripts/tests/test_crawl_integration.py
- /home/jay/workspace/scripts/tests/test_notify_completion.py
- /home/jay/workspace/scripts/tests/test_worktree_manager.py

### tests/ (20개)
- /home/jay/workspace/tests/conftest.py
- /home/jay/workspace/tests/test_ab_analysis.py
- /home/jay/workspace/tests/test_add_team.py
- /home/jay/workspace/tests/test_auto_merge.py
- /home/jay/workspace/tests/test_bot_watchdog.py
- /home/jay/workspace/tests/test_dashboard_todo_tabs.py
- /home/jay/workspace/tests/test_dispatch.py
- /home/jay/workspace/tests/test_ensure_bot_memory.py
- /home/jay/workspace/tests/test_hermes_audit.py
- /home/jay/workspace/tests/test_notify_completion.py
- /home/jay/workspace/tests/test_qc_gate.py
- /home/jay/workspace/tests/test_qc_integration.py
- /home/jay/workspace/tests/test_report_parser.py
- /home/jay/workspace/tests/test_task_1037_1_design_restriction.py
- /home/jay/workspace/tests/test_task_1044_1_archive_title_time.py
- /home/jay/workspace/tests/test_task_1096_1_org_details.py
- /home/jay/workspace/tests/test_task_timer_qc.py
- /home/jay/workspace/tests/test_team_prompts.py
- /home/jay/workspace/tests/test_tech_debt.py
- /home/jay/workspace/tests/test_todo_sync.py

---

## 테스트 결과

### tests/ (베이스라인 ↔ 변경 후)
- **Before**: 10 failed, 1572 passed
- **After**: 10 failed, 1572 passed
- **회귀**: 0건

### scripts/tests/ (베이스라인 ↔ 변경 후)
- **Before**: 23 failed, 1321 passed
- **After**: 23 failed, 1321 passed
- **회귀**: 0건

### ChatID grep 검증
- `grep -rn "6937032012" scripts/ tests/ --include="*.py" | grep -v "environ.get|env_keys.get"` → **0건**

---

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **conftest import 에러** — `from conftest import TEST_CHAT_ID` → pyright resolve 불가. 각 파일에 로컬 상수 `_TEST_CHAT_ID` 정의로 해결.
   - 수정: tests/test_notify_completion.py:22, tests/test_dispatch.py:23
2. **replace_all 부작용** — `TEST_CHAT_ID` → `_TEST_CHAT_ID` 치환 시 이미 변환된 변수명에 이중 적용. `__TEST_CHAT_ID` → `_TEST_CHAT_ID`로 수정.
   - 수정: tests/test_notify_completion.py:22, tests/test_dispatch.py:23
3. **drive-change-log.py/notify-completion.py 누락** — 1차 배치에서 누락된 2개 파일의 하드코딩 경로 추가 수정.
   - 수정: scripts/drive-change-log.py:32, scripts/notify-completion.py:32

### 범위 외 미해결 (2건)
1. **기존 테스트 실패 33건** — tests/ 10건 + scripts/tests/ 23건은 작업 이전부터 실패. 본 작업 범위 외.
2. **pyright runtime-path import 에러** — `Import "dispatch"`, `Import "prompts.team_prompts"` 등은 pytest 실행 시 sys.path 추가로 해결되는 런타임 의존성. pyright 정적 분석 한계.

---

## 모델 사용 기록
- 스바로그(백엔드) / scripts/ 그룹A ChatID+경로 수정 / sonnet
- 라다(프론트엔드, 역할 확장) / scripts/ 그룹B 경로+threshold 수정 / sonnet / 정당성: 순수 Python 백엔드 작업이나 병렬처리를 위해 역할 확장
- 벨레스(테스터) / tests/ ChatID+경로 수정 / sonnet
- 추가 에이전트 2회 / 잔여 하드코딩 일괄 처리 / sonnet

---

## 비고
- 모든 변경은 env fallback 패턴으로 하위 호환성 100% 유지
- config/constants.json 수정 없음 (Phase 0에서 완료된 파일 보호)
- dispatch.py, tools/, dashboard/ 미수정
