book-workflow — 蒸餾 → 出圖 → 審計 → 放行/回爐
路徑約定(先讀這個)
- 插件根(= 倉庫根) = 本 SKILL.md 所在目錄的上兩級(
skills/book-workflow/的../../),記作$PLUGIN。 - 工作區 = 用戶當前打開的專案根(cwd),記作
$WS。蒸餾產物(books/、.work/、tools/、.dsh/)全部落在$WS。 - 橋接/審計腳本不在工作區內,調用時必須帶
--ws $WS,否則找不到工作區根。 - 原則:先審計後編譯——階段 5 的 compile 只對判態全綠的 Bundle 做。
cangjie 蒸餾(階段0-4) → svg 出圖(按需) → 橋接(逐字回源) → 四閘審計 → 全綠 compile 交付
▲ │
└────────────────── 回爐(按判態映射) ◀── 紅 ────────────┘
第 0 步 — 工作區自舉(每個工作區一次,冪等)
python3 $PLUGIN/scripts/bootstrap.py $WS
它建 $WS/.venv(Python ≥3.10 + PyYAML + PyMuPDF)、裝入 dsh 閘門套裝($WS/tools/ 與 $WS/.dsh/),並體檢 node(圖件閘的 svg-lint 依賴,缺失時該閘判「不適用」)。之後的命令統一用 $WS/.venv/bin/python(下文記作 $PY)。
階段一 — cangjie 蒸餾(生成側)
先確認輸入:原書文本(PDF/EPUB/TXT/轉寫稿路徑,沒有文本就停下來向用戶要,不憑記憶拆書)、書名+作者+出版年、使用目的(學習查閱→single;接入日常/跨書組合→pack)。
然後完整閱讀 $PLUGIN/vendor/cangjie-skill/SKILL.md 並嚴格按它執行(RIA-TV++ 五階段:Adler 整書理解 → 5 路並行提取 → 三重驗證 → 晉級門 → RIA++ 能力卡 → Zettelkasten → 壓力測試)。本工作流要求:
- 產物落在
$WS/books/<slug>/(含verified.md、candidates/、rejected/、.cangjie/capabilities/); - 跑到階段 4(壓力測試)之後、階段 5(編譯交付)之前停下,先進入本工作流的出圖與審計;
- 保留全部審計軌跡,斷點續跑狀態(PIPELINE_STATE.md)每階段更新。
階段 1.5 — 出圖(svg-diagram,按需)
框架/流程/計算類能力卡或 DIGEST 需要配圖時,先讀 $PLUGIN/vendor/svg-diagram/SKILL.md 的房規再手繪 SVG(CJK 字體棧、五組語義配色、盒高=字號×3、盒間距≥25px、C/Q 曲線連線、一次畫對)。落位:
| 場景 | 位置 | 引用方式 |
|---|---|---|
| 能力卡配圖 | $WS/books/<slug>/.cangjie/capabilities/resources/<cap-slug>.svg | 卡片正文寫資源名 + Bundle 該能力 resources: 聲明 |
| DIGEST/OVERVIEW 配圖 | $WS/books/<slug>/assets/<名>.svg |  相對路徑 |
自查(error 必須清零):
node $PLUGIN/vendor/svg-diagram/tools/svg-lint/bin/svg-lint.mjs <圖.svg>
階段二 — 橋接(逐字回源核驗)
$PY $PLUGIN/bridge/cangjie_to_dsh.py --book-dir $WS/books/<slug> --source <原書.txt|.md|.pdf> --task <slug> --ws $WS
它把原文落成 $WS/.work/<task>/book_text.md(PDF 自動抽取——審計錨定對象永遠是原始書文),解析每張能力卡 R 段引文並去空白逐字比對,鑄穩定池 id(CJ-NNN)生成 dsh 格式池與技能審計副本。任何引文對不上 ⇒ rc=1 紅牌,回階段一修 R 層。
階段三 — 四閘審計(判態)
$PY $PLUGIN/bridge/run_audit.py --task <slug> --ws $WS
依次跑:證據包構件 → G-66 池覆蓋 → G-67 錨一致 → G-68 證據閉包 → 圖件閘(svg 引用完整 + svg-lint 合規)。判態追加到 $WS/.work/<task>/audit-verdict.md(審計時間線)。
階段四 — 放行或回爐
| 判態 | 去向 |
|---|---|
| 全綠 | 放行 → $PY $PLUGIN/vendor/cangjie-skill/scripts/cangjie.py compile --bundle $WS/books/<slug>/.cangjie/capabilities --out <用戶確認的安裝目標> --output auto |
| 橋接回源紅 / G-67 紅 | 回 cangjie 階段 2(R 層引文/日期錨修正),重跑橋接 |
| G-66 紅(精選未落 R 層) | 回 cangjie 階段 1/1.5(補採候選/複核淘汰),重跑橋接 |
| G-68 紅(閉包/漂移) | 先重跑審計入口;仍紅查階段 3/4 的 id 映射 |
| 圖件閘紅 | 按房規修圖或補引用,重跑審計入口 |
回爐是常態不是失敗——帶著閘門給出的具體失敗項(哪條引文、哪個 id、哪張圖)定向修,不要整冊重做。
判據口徑(誰在查什麼)
- 回源:引文去空白後必須是原文逐字子串——防「引了但原文沒有」。
- G-66:critical/high 能力(橋接打「總綱」標記)的引文必須落在某卡 R 層——防重要單元被靜默漏掉。
- G-67:同行「日期×引文」必須在原文 400 字窗口共現——防張冠李戴的時間錨。
- G-68:技能引用的每個池 id 有 sha256 閉包且池不漂移——防「引了找不到原文/池改包未重建」。
- 圖件閘:引用的 svg 必須存在、所有 svg 過 lint error=0——防斷鏈與爛圖。
質量紅線
- 沒有原文不蒸餾;引文 ≤150 字/段(英文 ≤100 詞)。
- 合成演練不得冒充書中案例;A1 無原書案例時如實標註。
- 審計全綠前不 compile、不安裝。
- 淘汰項(
rejected/)保留理由;重要缺口如實登記,不虛報零遺漏。 - 圖與正文一致——數據變了圖必須跟著變;與正文矛盾的圖比沒圖更糟。
- 版權合規由使用者按原書授權判斷;本工作流只保證「準則可執行、引文可核驗」。
生態位
- cangjie-skill(隨包於
$PLUGIN/vendor/):蒸餾方法論與流程的權威定義。 - dsh-distillation-director(同上):三閘判態的權威實現,本地腳本零 API 成本。
- svg-diagram(同上):出圖房規與 lint。
- 本技能只做編排與判態收口;上游規範以三個 vendor 的 SKILL.md/README 為準,衝突時以 vendor 原文為準並在此登記偏差。