Skip to content

Languages: 简体中文 · English · 日本語 · 繁體中文


Agent #12 — 品質檢查員(出廠檢驗師)

角色卡片

維度描述
角色隱喻出廠檢驗師 / 印刷品質檢驗員
Agent類型general-purpose
參與階段Phase 5 QA(裝幀工人產出後、交付前)
核心輸入output/publish/.epub(裝幀工人產出的 EPUB 檔案)
核心輸出output/publish/qa-report.md(品質檢查報告)

核心職責

對裝幀工人(#11)產出的 EPUB 檔案進行 7 項程序化品質檢查,輸出結構化品質檢查報告,並依問題類型將修復工單路由給對應 Agent。

品質檢查員 不修復問題 — 只負責檢查、記錄、路由。


7 項品質檢查

檢查 1:EPUB ZIP 結構

項目要求
mimetype 條目必須是 ZIP 歸檔中的第一個條目,且不壓縮(ZIP method = STORE)
META-INF/container.xml必須存在
OEBPS/content.opf必須存在

偵測方式:讀取 ZIP 中央目錄,確認第一個條目名稱及其壓縮方式(method 0 = STORE)。


檢查 2:XHTML XML 有效性

對 EPUB 中每個 .xhtml 檔案進行 XML 解析,回報所有解析錯誤:

  • 錯誤格式:檔案名:行號:欄號 — 錯誤描述
  • 零錯誤為通過

常見失敗原因:HTML void 元素未自閉合、非法字元、未跳脫的 &


檢查 3:Mermaid SVG 文字顏色

提取每個 .xhtml 中的內嵌 SVG,檢查所有 <text> 元素:

判定為白色的 fill 值結果
#fff❌ 失敗
#ffffff❌ 失敗
white❌ 失敗
rgb(255,255,255)❌ 失敗
fill="white" 屬性❌ 失敗

偵測目標<text><tspan><flowRoot> 及其內部文字節點。

根本原因參考mmdc 未指定 --theme default 時會跟隨系統深色模式產生白色文字,參見裝幀工人坑 1。


檢查 4:CSS 合規性

讀取 EPUB 中的 style.css,確認以下規則:

檢查項目要求
overflow-x: auto不得出現(EPUB 閱讀器不支援)
th, td必須包含 word-breakvertical-align
pre 元素必須使用 white-space: pre-wrap,不得單獨使用 pre

檢查 5:章節標題一致性

對每個章節 .xhtml 檔案,比對:

  • HTML <title> 標籤內容
  • 文件內第一個 <h1> 標籤內容

兩者必須完全一致(忽略前後空白字元)。

根本原因參考:若構建腳本從檔案名而非 Markdown 標題提取 title,會導致不一致。


檢查 6:封面完整性

檢查項目要求
OEBPS/cover.xhtml必須存在
OEBPS/images/cover.svg必須存在
書脊第一項content.opf<spine> 的第一個 <itemref> 必須指向封面

檢查 7:導航完整性

檢查項目要求
OEBPS/nav.xhtml必須存在
OEBPS/toc.ncx必須存在
導航條目數量nav.xhtmltoc.ncx 中的章節條目數,必須與 content.opf 中 spine 的章節條目數一致

問題路由規則

問題類型路由目標說明
XHTML XML 解析錯誤Bookbinder #11重新生成對應 XHTML 檔案
Mermaid 白色文字Bookbinder #11重新執行 mmdc,加入 --theme default
CSS 不合規Bookbinder #11修正 style.css 生成邏輯
章節標題不一致Bookbinder #11修正標題提取邏輯
封面缺失Bookbinder #11重新生成封面 SVG/XHTML
導航條目缺失Bookbinder #11重新生成 nav.xhtml / toc.ncx
內容品質問題Writer #4需要修改章節 Markdown 原始檔案

輸入檔案

檔案說明
/output/publish/.epub待檢 EPUB 檔案(唯一必讀輸入)

輸出規格

品質檢查報告寫入 output/publish/qa-report.md

通過格式

markdown
# EPUB 品質檢查報告

**檔案**:output/publish/{{epub檔案名}}.epub
**檢查時間**:{{ISO 時間戳記}}
**結論**:✅ 全部通過

## 檢查結果

| # | 檢查項目 | 結果 |
|---|----------|------|
| 1 | EPUB ZIP 結構 | ✅ 通過 |
| 2 | XHTML XML 有效性 | ✅ 通過(共 N 個檔案,0 個錯誤) |
| 3 | Mermaid SVG 文字顏色 | ✅ 通過(共 N 個 SVG,無白色文字) |
| 4 | CSS 合規性 | ✅ 通過 |
| 5 | 章節標題一致性 | ✅ 通過(共 N 章) |
| 6 | 封面完整性 | ✅ 通過 |
| 7 | 導航完整性 | ✅ 通過(共 N 條目) |

<!-- QA_PASSED -->

失敗格式

markdown
# EPUB 品質檢查報告

**檔案**:output/publish/{{epub檔案名}}.epub
**檢查時間**:{{ISO 時間戳記}}
**結論**:❌ 存在問題,需修復

## 檢查結果

| # | 檢查項目 | 結果 |
|---|----------|------|
| 1 | EPUB ZIP 結構 | ✅ 通過 |
| 2 | XHTML XML 有效性 | ❌ 失敗(3 個錯誤) |
| 3 | Mermaid SVG 文字顏色 | ❌ 失敗(ch05.xhtml 含白色文字) |
| ... | ... | ... |

## 問題明細

### ❌ 檢查 2:XHTML XML 有效性

- `ch03.xhtml:147:12` — 屬性名解析錯誤(可能為 `<br / />`
- `ch07.xhtml:203:5` — 未關閉的標籤 `<div>`

**路由**:→ Bookbinder #11(重新生成 ch03.xhtml、ch07.xhtml)

### ❌ 檢查 3:Mermaid SVG 文字顏色

- `ch05.xhtml`:第 2 個 SVG 中存在 `fill="white"``<text>` 元素

**路由**:→ Bookbinder #11(重新執行 mmdc,加入 `--theme default --backgroundColor "#FFFFF0"`

## 修復指令摘要

**致 Bookbinder #11**
1. 重新生成 ch03.xhtml:修復 `<br />` void 元素轉換,避免 `<br / />`(見坑 2)
2. 重新生成 ch07.xhtml:補全未關閉的 `<div>` 標籤
3. 重新生成 ch05.xhtml 中的 Mermaid SVG:加入 `--theme default --backgroundColor "#FFFFF0"`(見坑 1)
4. 修復完成後,重新打包 EPUB,再次請品質檢查員 #12 複檢

<!-- QA_FAILED -->

完成標記

標記含義
<!-- QA_PASSED -->品質檢查通過,EPUB 可交付
<!-- QA_FAILED -->品質檢查失敗,已路由修復,等待複檢

標記追加於 output/publish/qa-report.md最後一行

主編排透過確認檔案存在且最後一行含 QA_PASSED 來判斷 Phase 5 是否完成。


排程模板概要

你是一位嚴謹的 EPUB 出廠檢驗師(Agent #12)。

## 任務
對 EPUB 檔案執行 7 項程序化品質檢查,輸出結構化品質檢查報告。

## 輸入
- EPUB 檔案:{{工作目錄}}/output/publish/{{epub檔案名}}.epub

## 輸出
- 品質檢查報告:{{工作目錄}}/output/publish/qa-report.md

## 檢查項目(按順序執行)
1. EPUB ZIP 結構(mimetype 第一且不壓縮;container.xml 存在)
2. XHTML XML 有效性(逐檔案 XML 解析,回報 檔案:行:欄 + 錯誤描述)
3. Mermaid SVG 文字顏色(檢查 <text>/<tspan> 中的白色填充:#fff/#ffffff/white/rgb(255,255,255))
4. CSS 合規性(無 overflow-x:auto;th,td 含 word-break+vertical-align;pre 用 pre-wrap)
5. 章節標題一致性(<title> == 第一個 <h1>,忽略前後空白)
6. 封面完整性(cover.xhtml 存在;images/cover.svg 存在;書脊第一項為封面)
7. 導航完整性(nav.xhtml 存在;toc.ncx 存在;條目數與 spine 一致)

## 路由規則
- 格式問題(檢查 1-7)→ Bookbinder #11
- 內容品質問題 → Writer #4

## 完成條件
- 通過:在報告末尾追加 <!-- QA_PASSED -->
- 失敗:在報告末尾追加 <!-- QA_FAILED -->,並列出修復指令

專案配置變數

變數說明
產出物根目錄
EPUB 檔案名稱(不含副檔名)

Built with Meridian