docs(eval): Phase 2 경로 정책 정정 — 2-B /app/logs vs 2-C /app/scripts canonical

Plan/README 가 /app/scripts 를 통일 경로로 가정했으나 실측 결과 read-only
bind-mount 라 docker cp 불가. soft lock 으로 --build 도 금지. 단계별로
다른 경로 사용해야 함:

- 2-B canary (pre-merge): /app/logs/phase2_backfill.py + /app/logs/*.csv
  (docker cp worktree → /app/logs rw bind-mount). canary 검증 동안
  미검증 코드 main 진입 회피.
- 2-C nightly (post-merge canonical): /app/scripts/phase2_backfill.py +
  /app/evals/markdown/phase2_* (feat/phase2-backfill main 머지 +
  parent git pull 후 bind-mount 자동 활성). cron 도 canonical path.

evals/markdown/README.md 의 enqueue 예제 + 신규 #### 경로 정책 섹션 반영.
This commit is contained in:
2026-05-02 23:53:28 +00:00
committed by Hyungi Ahn
parent 48f8bf6ca6
commit f61dce262e
+31 -5
View File
@@ -165,15 +165,41 @@ docker exec hyungi_document_server-fastapi-1 python /app/scripts/phase2_backfill
- inventory 의 `forecast_skip_reason='none'` 만 선정 후보.
- 시드 고정 → 재실행 시 동일 sample.
### 경로 정책 (2-B canary vs 2-C nightly)
`/app/scripts/``/app/evals/` 는 parent repo (`~/Documents/code/hyungi_Document_Server`, branch=main) 의 read-only bind-mount. `docker cp ... :/app/scripts/...` 는 read-only 위반으로 실패. `docker compose --build` 은 검색 실험 soft lock 위반. → 단계별로 다른 경로 사용:
| 단계 | script 경로 | sample CSV 경로 | 메커니즘 |
|---|---|---|---|
| **2-B canary (pre-merge)** | `/app/logs/phase2_backfill.py` | `/app/logs/phase2_canary_sample.csv` | `docker cp` worktree → /app/logs (rw bind-mount) |
| **2-C nightly (post-merge canonical)** | `/app/scripts/phase2_backfill.py` | `/app/evals/markdown/phase2_*` | feat/phase2-backfill main 머지 + parent `git pull` 후 bind-mount 자동 활성 |
**2-B 임시 sync** (canary 실행 직전 1회):
```bash
docker cp ~/Documents/code/hyungi_Document_Server_phase2/scripts/phase2_backfill.py \
hyungi_document_server-fastapi-1:/app/logs/phase2_backfill.py
docker cp ~/Documents/code/hyungi_Document_Server_phase2/evals/markdown/phase2_canary_sample.csv \
hyungi_document_server-fastapi-1:/app/logs/phase2_canary_sample.csv
```
**2-C 진입 시점** (canary GO 결정 후):
```bash
cd ~/Documents/code/hyungi_Document_Server_phase2 && git push origin feat/phase2-backfill
cd ~/Documents/code/hyungi_Document_Server && git fetch origin \
&& git merge --ff-only origin/feat/phase2-backfill && git push origin main
```
이유: 미검증 코드를 main 에 미리 박지 않음 / canary 결과 따라 worktree 에서 hot-fix 가능 / nightly cron 은 canonical path 만 사용 (cp 단계 없음).
### enqueue (one-shot, 사용자 승인 게이트)
```bash
# dry-run (default)
docker exec hyungi_document_server-fastapi-1 python /app/scripts/phase2_backfill.py enqueue \
--csv /app/evals/markdown/phase2_canary_sample.csv
# dry-run (default) — 2-B 단계 = /app/logs 임시 경로 (위 §"경로 정책" 참조)
docker exec hyungi_document_server-fastapi-1 python /app/logs/phase2_backfill.py enqueue \
--csv /app/logs/phase2_canary_sample.csv
# actual (사용자 승인 후)
docker exec hyungi_document_server-fastapi-1 python /app/scripts/phase2_backfill.py enqueue \
--csv /app/evals/markdown/phase2_canary_sample.csv --no-dry-run
docker exec hyungi_document_server-fastapi-1 python /app/logs/phase2_backfill.py enqueue \
--csv /app/logs/phase2_canary_sample.csv --no-dry-run
```
- marker-service `/ready` 사전 검증.
- `enqueue_stage` idempotent — 중복 호출 안전.