# FR-030.2 證據分類圖片/PDF 內容辨識 — 收尾 SUMMARY

| 項目 | 內容 |
|------|------|
| Feature | FR-030.2（↳ FR-030 子，多模態能力補強） |
| 狀態 | ✅ 實作完成、12 單元測試通過、端對端實測通過 |
| Branch | `feature/evidence-classify-image-vision`（未 push、未 merge main） |
| 版本 | bump 1.2.1 → **1.3.0**（功能版號） |
| 收尾日期 | 2026-05-29 |

---

## 1. 做了什麼

讓 FR-030 證據分類器的 Docker container 用 Claude Vision 辨識圖片（png/jpg/gif/webp）與 PDF 內容並分類。方式：分類管道從「字串進」改成「Anthropic content blocks 進」（方式 A）。**原分類 / 歸檔流程一個字不動** —— `_state.json` 結構、Drive 歸檔、review UI 全沿用，圖片/PDF 出分類器後與文字檔走同一條歸檔路。

全部改動侷限在 `scripts/evidence/classify/docker/`，不碰主專案 app/domain/infra。

## 2. 行為差異

| 檔型 | 改版前 | 改版後 |
|------|--------|--------|
| docx/csv/txt/log/md | 抽文字分類 | 不變（語意等價） |
| png/jpg/jpeg/gif/webp | `[Unsupported]` 跳過 | base64 → image block → Vision 分類 |
| pdf | `[Unsupported]` 跳過 | base64 → document block → 讀全頁分類 |
| 超限/不支援 | — | skip → 既有「未處理」清單 |

## 3. Commits（branch `feature/evidence-classify-image-vision`）

**規劃（本 session 產出）**：`7f931580` spec → `379a28df` spec folding → `b24bb838` plan → `dddbce08`+`4f42432a` handoff

**實作（Sonnet 照 plan 執行）**：`c3c1a20b`（pypdf+helper）→ `f7bd6f59`/`4e2fb810`（helper 修補）→ `a5d44229`（extract_text 改名）→ `4de056df`（build_content_blocks）→ `02a88ada`（double-read fix）→ `b67ce67a`（classify+worker）→ `3f488221`（prompt）→ `9da4824e`（list_jobs evidence_folder_id）

**收尾（本 session）**：changelog + release note + pyproject bump + design §11 + 本 SUMMARY（同一 commit）

## 4. 規範文件齊全度

| 文件 | 狀態 |
|------|------|
| design.md（含 §8 取捨 / §11 reconciliation） | ✅ |
| implementation-plan.md | ✅ |
| handoff 執行交接 prompt | ✅ |
| changelog `2026-05-29-feat-evidence-classify-image-vision.md` | ✅ 本次補 |
| release note `v1.3.0.md` | ✅ 本次補 |
| pyproject version bump 1.3.0 | ✅ 本次補 |
| README FR 登記表 FR-030.2 列 | ✅（規劃時已加） |
| 本 SUMMARY | ✅ |

## 5. 驗證

- 單元測試：`scripts/evidence/classify/docker/test_container_entrypoint.py` → **12 passed**
- 端對端：真實 Drive + Claude 跨一張截圖 + 一份 PDF，確認分到 AO（user 驗收）

## 6. 部署 handover

1. 重 build classifier image（雙 tag；BE 寫死用 `:latest`，故 `:latest` 必須一起打）：
   ```bash
   docker build \
     -t cmmc-classifier:1.3.0 \
     -t cmmc-classifier:latest \
     -f scripts/evidence/classify/docker/Dockerfile \
     scripts/evidence/classify/docker
   ```
2. 主專案 BE 重啟（`list_jobs` 新增 `evidence_folder_id`）
3. evidence-classify 仍屬實驗功能

## 7. 已知 follow-up

- **.xlsx / .pptx 支援**：收尾時 user 提出、討論到抽取預設即暫停 → 未實作。需走本地抽文字（`openpyxl` / `python-pptx`），未來可開子任務。
- **成本控管 / quota**：實驗階段不設上限。
- **區間內零星 fix commit changelog**：docx-import / excel-import / template-copy 可能缺獨立 changelog（v1.2.1 收尾遺留），待補。
- **BE/FE 版號對齊**：BE 進到 1.3.0，FE 也應對齊到 v1.3.0（不跨 repo 改，建議 FE repo 另開 session）。

## 8. 尚待 user 決定

- **push / merge**：本 branch 未 push、未 merge main。release 是否從本 branch 還是 merge 後再 cut，待 user 指示。
- **working tree 有無關的 drive-sync 死結工作未提交** —— 上版相關 commit 已全程顯式 git add，未掃到這批；該批工作獨立處理。
