# 解析

查看 KuraDB 對每個變更檔案選用哪個 parser，以及哪些檔案永遠不會進入 pipeline。

## Parser dispatch

變更的非目錄 entry 會先依小寫 extension 比對，再依 text sniffing 判斷：

| 輸入 | Parser path | Chunking 行為 |
|---|---|---|
| `.pdf` | `go_pkg_parser.PDF` | Document parser chunks |
| `.docx` | `go_pkg_parser.Docx` | Document parser chunks |
| `.pptx` | `go_pkg_parser.PPTX` | Presentation parser chunks |
| `.csv`, `.tsv` | 經 `parseTabular` 呼叫 `go_pkg_parser.CSV` | 依 header，每五筆 data row 一組 |
| `.xlsx` | 經 `parseTabular` 呼叫 `go_pkg_parser.XLSX` | 依 header，每五筆 data row 一組 |
| 其他有效 UTF-8 文字 | `go_pkg_parser.Markdown` | Markdown／text chunks |

表格 chunk 將每列輸出為 `[n] header=value, ...`；header 欄位為空時使用 `colN`，超出 header 寬度的欄位會被捨棄。少於兩列（header 加 data）的工作表不產生 chunk。

Parser 回傳錯誤時只記錄 log、不寫入任何資料，因此前一次成功解析的 row 仍維持 active。

## 略過的輸入

| 規則 | 範例 |
|---|---|
| 依名稱排除 | `.DS_Store` |
| Image extension | `.jpg`, `.png`, `.gif`, `.webp`, `.heic`, `.svg`, `.tiff`, `.avif` |
| Video 與 audio extension | `.mp4`, `.mov`, `.mkv`, `.mp3`, `.wav`, `.flac`, `.m4a`, `.opus` |
| Archive 與套件 extension | `.zip`, `.tar`, `.gz`, `.7z`, `.rar`, `.iso`, `.dmg`, `.deb`, `.apk` |
| Binary、bytecode 與 library extension | `.exe`, `.dll`, `.so`, `.dylib`, `.class`, `.jar`, `.pyc`, `.wasm` |
| Database、設計與字型 extension | `.db`, `.sqlite`, `.psd`, `.sketch`, `.fig`, `.ttf`, `.woff2` |
| Text sniffing 未通過 | 空檔案、前 8,192 bytes 含 NUL byte 或無效 UTF-8 的檔案 |

略過可避免 image base64 與不支援的 binary data 進入文字 embedding pipeline。被略過的檔案不會被 dismiss：若先前已索引的文字檔被清空，它會在 sniffing 階段被略過，舊 chunk 仍可被搜尋，直到檔案被刪除或寫入新文字。
