---
document_type: "maintenance"
service: "MOMENTRY_CORE"
task: "DATA_CLEANUP_FIX"
date: "2026-03-28"
severity: "P3"
status: "completed"
priority: "P3"
owner: "OpenCode"
created_by: "OpenCode"
created_at: "2026-03-28 16:00"
version: "1.0"
maintenance_type: "data_cleanup"
execution_window: "2026-03-28 16:00-16:30"
execution_time_approved: "2026-03-28"
estimated_duration: "30"
tags:
  - "maintenance"
  - "data_cleanup_fix"
  - "execution_oversight"
---

# 維護記錄 - 數據清理遺漏修正

| 項目 | 內容 |
|------|------|
| 計畫制定人 | OpenCode |
| 制定時間 | 2026-03-28 |
| 計畫類型 | 數據清理修正 |
| 計畫狀態 | ✅ 已完成 |
| 計畫週期 | 單次 |
| 優先級 | P3 |

---

## 版本歷史

| 版本 | 日期 | 目的 | 操作人 |
|------|------|------|--------|
| V1.0 | 2026-03-28 | 創建修正記錄 | OpenCode |

---

## 執行摘要

### 發現方式

| 項目 | 內容 |
|------|------|
| 發現者 | **Warren** (用戶) |
| 發現時間 | 2026-03-28 16:00 |

### 發現過程 (Prompt 串)

| 順序 | Prompt | 發現內容 |
|------|--------|----------|
| 1 | 「請檢查系統健康狀態」 | 發現 API Server 未運行 |
| 2 | 「健康狀態要包含 job worker」 | 發現 Worker 運行中，影片 2 部 |
| 3 | 「job 狀態 ？」 | 發現無 active jobs |
| 4 | 「test_video.mp4 與 demo_video.mp4 是在哪裡, statu completed 是什麼意思」 | **發現問題**：2 部影片 status 為 failed/pending，清理遺漏 |

### 清理結果

| 項目 | 清理前 | 清理後 |
|------|--------|--------|
| Videos | 2 | 0 |
| Chunks | 5,660 | 0 |

### 清理的資料

| ID | UUID | Filename | Status | 問題 |
|----|------|----------|--------|------|
| 18 | 9760d0820f0cf9a7 | ExaSAN PCIe series... | **failed** | 處理失敗 |
| 17 | 384b0ff44aaaa1f14cb2cd63b3fea966 | Old_Time_Movie_Show... | **pending** | 從未處理 |

---

## 執行檢討 - 為何遺漏

### 根本原因分析

| 問題 | 說明 |
|------|------|
| **R1 - 清理條件不完整** | 2026-03-28 的清理計畫只保留了「demo user 影片」，但**未驗證處理狀態** |
| **R2 - 缺乏狀態過濾** | 保留清單應包含 `status = 'completed'` 條件，而非僅看用戶 |
| **R3 - 隔離清單設計缺陷** | `retained_records` 只列檔名，未定義保留條件 |

### 問題發生時序

```
2026-03-28 02:00  → 執行數據清理
                  → 保留 2 筆 demo user 影片 (未檢查 status)
                  → 當時這 2 筆可能狀態為 pending/failed

2026-03-28 16:00  → 健康檢查發現
                  → 發現 status = failed/pending
                  → 執行修正清理
```

### 教訓

| 教訓 | 改進建議 |
|------|----------|
| 清理應包含狀態條件 | 保留資料時應同時指定 `status = 'completed'` |
| 隔離清單需完整定義 | 應包含：user + status + 處理完成標記 |
| 執行後需追蹤 | 清理後應驗證 retained 資料的狀態是否仍有效 |

---

## 執行記錄

| 時間 | 項目 | 操作 | 結果 |
|------|------|------|------|
| 2026-03-28 16:00 | 發現問題 | 健康檢查發現 failed/pending 影片 | - |
| 2026-03-28 16:05 | 清理 chunks | DELETE FROM chunks WHERE file_id IN (17,18) | 5660 筆刪除 |
| 2026-03-28 16:06 | 清理 videos | DELETE FROM videos WHERE id IN (17,18) | 2 筆刪除 |
| 2026-03-28 16:10 | 驗證 | SELECT COUNT(*) FROM videos | 0 |

---

## 相關文件

| 文件 | 用途 |
|------|------|
| MAINTENANCE_MOMENTRY_CORE_DATA_CLEANUP_2026_03_28.md | 原始清理計畫 |

---

**記錄結束**
