Imported from tarrragon/graph_project_docs_manager (
.claude/skills/multi-round-review/SKILL.md). Install upstream withnpx skills add tarrragon/graph_project_docs_manager --skill multi-round-review. Copyright stays with the author (MIT).
Multi-Round Review
寫多篇章節後做多輪 agent reviewer audit 的標準操作流程。每輪用不同 frame、跨輪 finding 互不重疊、至少三輪是硬底線、停止判讀從 Round 3 結束後才開始。已在 backend 5 章(3 輪 9 reviewer 38 finding)和 dotfile 31 篇(3 輪 8 reviewer 43 finding)兩次驗證,Round 3 每次都找出 14 項全新類型的問題。
適用情境
- 多篇相關章節:3+ 章一起寫完、需要跨稿件 audit
- 品質高於速度:每輪 30-60 分鐘 reviewer + 30-120 分鐘 fix、3 輪約 4-8 小時
- 章節品質敏感:教學模組、規範文件、長期累積的內容
- 主 context 容量敏感:reviewer 平行 background 是節省 context 的關鍵設計
不適用:
- 單篇短文:固定成本(規劃 frame + 跑 reviewer + 整合 finding)對短文 ROI 低
- 快速迭代原型:流程偏向「寫一次寫好」、不是「快速修改」
- 低風險文件:個人筆記、草稿、不需要外部 review
基本原則
- 每輪用不同 frame(per #114 multi-pass frame 顆粒度盲點):同 reviewer / 同 frame 跑多輪 catch 高度相同。多輪價值在 frame 切換、不在重複加深。
- 跨輪 finding 互不重疊:若新一輪 finding 跟上一輪重疊、代表 frame 沒換、再跑無增益。
- 停止訊號是 frame 涵蓋、不是 finding 遞減(per #148 跨輪 review 停止訊號):多輪 review 通常 finding 不遞減、Round 3 可能比 Round 1 / 2 多。停止判讀看「想不出新 frame」。
- 至少三輪是硬底線(per #202 多輪審查至少三輪):Round 3 的 steelman / outbound frame 覆蓋 Round 1-2 結構性盲區(漏選項、反向引用、搜尋落點、知識卡缺口),歷次實測每輪都找出 10+ 項。Round 1-2 從「已寫的內容」裡找錯,Round 3 從「沒寫的東西」出發——這類問題在前兩輪的 frame 下結構性不可見。「要不要跑 Round 3」不是判讀問題、是執行紀律。停止判讀從 Round 3 結束後才開始。
- 規模與來源是兩件事(per 規模買不到異源視角):一個 session 派出的所有 reviewer 與探針構成單一來源——同一份稿、同一個人寫的 prompt、同一個 context 的框架。增加數量提高的是覆蓋的面,不是視角的來源數。register 與用詞搭配這一類的偵測依賴的正是來源,所以「已經派了幾十個 reviewer」不構成異源已經覆蓋的證據。一次實測:兩個併行執行者各自跑完四輪、各自掃描回報乾淨,交換檢視時各自一眼看到對方一處違規,其中一處的判斷標準可機械執行而寫的人套在自己的小節標題上判定通過。併行的另一個執行者是最便宜的異源視角,交換的單位是掃描而不是評價。
誰做哪一段
這份文件同時被兩種角色讀,而它們該做的事完全不同。讀之前先確定自己是哪一種。
| 主 session(規劃並派發的那個) | reviewer(被派出去的那個) | |
|---|---|---|
| 讀哪些段 | 全部 | 只讀自己被指派的那一個 frame |
| 決定輪數與 frame 組合 | 是 | 否 |
| 派 agent | 是 | 否——reviewer 不再往下派 |
| 執行檢查、產出報告 | 只做不外包的那幾項(見下) | 是,且只做被指派的那一個 |
| 判斷可不可以停 | 是 | 否 |
| 整合跨 reviewer 的 finding、決定修法 | 是 | 否 |
給 reviewer 的話:你拿到的 prompt 會指名一個 frame。這份文件的其餘部分是為了讓主 session 規劃用的,不是你的工作清單——特別是下方「Reviewer prompt 結構」那一節,它描述的是別人怎麼寫指令給你,不是要你照著再派一批 agent 出去。做完你那一個 frame、產出契約要求的東西、送回去,就結束。
如果你拿到的指示沒有指名 frame:不要自己挑一個,也不要整份跑一遍。回去問派你來的人要哪一個——這種情況代表派發時漏了東西,而你猜一個跑完的成本比問一句高得多,猜錯的那份報告還會被當成該維度已經覆蓋。
主 session 不外包的四項:整體通讀(reviewer 各看一角、合成缺陷只有通讀看得到)、停止判讀、跨 reviewer finding 的去重與修法決策、以及需要窮盡列舉的維度(列舉在主 context 很便宜,派出去反而容易失敗,理由見下方「任務形狀」段)。
派發之前先定這一批的定位
定位決定哪些 frame 適用,所以它在 frame 表之前,不在 frame 表裡面。 寫下一句話:誰讀、讀完要做什麼。這一句是後面每一個 frame 的過濾器。
判別定位的軸不是「內容裡有沒有可執行的東西」——教材也給辨識訊號與可以改的東西——而是那個動作落在哪裡:在世界上動手,還是在腦中重新歸類。
三種常見定位與它們對應的體例:
| 定位 | 讀者 | 體例 |
|---|---|---|
| Agent 指令、規範 | 照著執行的執行者 | 操作手冊:步驟編號是執行的位置,判錯代價要寫,因為執行者需要知道哪一步不能錯 |
| 人類教材 | 來理解一件事的人 | 引導與脈絡:講清楚為什麼是這個順序,順序自己就出來;讀者要的是判讀的依據 |
| 程式碼註解 | 正在讀那段程式的人 | 只解釋商業邏輯,不解釋原理也不冗長,因為原理讀程式碼就有 |
同一個內容集合底下可能兩種定位並存。 一個分類裡的文章是教材,而它的目錄頁是那個分類的操作手冊(成員表、路由、待辦),使用者的動作是照著它走到某一篇。整個子集合也可能不是教材:一份歸納問題與解法的記錄,讀者不是來理解一個主題的,而它也不是操作手冊——可執行的那一半住在別處。所以定位按稿件要讀者做什麼判、不按它放在哪裡判,而 2-D 掃體例時要把這些位置排除,否則會把正確的形式報成違規。
定位判定為人類教材時,下列 frame 的觸發條件要重新過一次,因為它們的預設來自 agent 指令或工程決策內容:2-B‴ 的微案例要求(後果直觀時補了是冗餘)、2-B″ 的可執行走查(教材的讀者不照著執行)、1-D 的下游任務(下游任務是理解而不是產出)。判定為不跑的照樣要寫理由。
詳見 定位決定體例。
這一批要跑哪些 frame
Round 1-3 是硬底線,但每一輪裡的 frame 不是全部都跑。主 session 在派發前先過這張表,把結果寫下來——判定為不跑的也要寫,並寫出理由,否則「沒跑」與「判定不需要」在產物裡分不開。
| frame | 什麼時候跑 | 判定依據 |
|---|---|---|
| 1-A 寫作規範 / 1-B 案例 / 1-C 跨章一致 | 一律跑 | 無條件 |
| 1-D Downstream-task | 讀者讀完有明確的下一個動作(提案、估時程、選型)時 | 看文章的收尾段有沒有指向一個外部動作 |
| 1-E 斷言支撐 | 素材來源是經驗談 / 訪談 / 口述的批次;或判斷標準密集 | 高風險批次此 frame 排第一輪,知識類型錯位的修法是重寫 |
| 1-F 商業分析 | 內容含財報判讀、產業比較、估值 | 逐篇看有沒有財務數字或估值段 |
| 2-A Cadence | 一批三篇以上 | 單篇不適用(同骨化是跨篇現象) |
| 2-B 讀者旅程 | 有跨篇路線 | 單篇不適用 |
| 2-B′ 冷讀 | 一律跑 | 任何可被搜尋或直連抵達的內容都適用 |
| 2-B″ Executable walkthrough | 操作型(有步驟、有指令) | 非操作型不跑 |
| 2-B‴ 情境可想像性 | 判讀 / 選型型(給判斷標準、要讀者做決定) | 非判讀型不跑 |
| 2-B⁗ 低階 model 讀者探針 | 一律跑;審查對象是規則類文件時加「第一個具體動作」欄 | 無條件;報告的自評欄與比對欄分開讀(見產出契約) |
| 2-B⁵ 翻譯探針 | 中文稿件、且已通過 2-B⁗ | 非中文稿件不跑;命題層未收斂時先跑 2-B⁗ |
| 2-B⁶ 術語探針 | 有可疑的高頻用詞或口語譬喻 | 沒有可疑詞不跑;同批沒有控制詞的結果不採用 |
| 2-B⁷ 類型探針 | 定位是人類教材、而內容帶操作性材料時 | 同批沒有兩份控制文件的結果不採用 |
| 2-C 題目範圍 + 跨 surface | 一律跑 | 無條件;標題是寬泛傘狀詞時範圍分不開、先收窄標題 |
| 2-D 體例與定位一致 | 一律跑 | 無條件;派發前的定位宣告是它的輸入,缺宣告就跑不了 |
| 3-A 自審 / 3-B Steelman / 3-C Outbound | 一律跑 | 無條件 |
| 3-D Persona / 3-E Search landing | 對象是教材或模組 | 單篇不適用 |
| 3-F 誤用梯度 | 審查對象是規則 / 協議 / 規範 / 流程 | 對象本身要被別人照著執行就跑 |
| 3-G 共同前提 | 一批三篇以上 | 單篇不適用 |
| 3-H 個案實跑 | 內容含判斷標準(判定序、分類法、選型三問) | 判斷標準型必跑 |
每個 frame 的產出契約
沒有產出契約的 frame 等於沒跑過。 認真跑完與完全沒跑,在一份自由格式的報告裡看起來一樣。所以每個 reviewer 的 prompt 都要指定這三件事,缺一不可:
- 產出的形態:一張表還是一份清單,欄位分別是什麼。
- 窮盡還是抽樣:抽樣的話寫明抽了幾個、怎麼選的;宣稱窮盡的要能列出被檢查對象的完整清單。
- 每個 finding 註明它那一類的全部命中位置,或註明它是抽樣、抽了幾處、怎麼選的。少了這一欄,抽樣三處與逐處驗完在報告裡長得一模一樣,而修的人會照著清單逐處修完就收工——把責任放在偵測端,比修的人事後補掃便宜。
- 零 finding 怎麼表達:寫「這一維跑過、零命中」,不是省略不提。省略跟沒跑一樣。
- 探針的自評欄不是結果欄:探針回報裡的「有把握 / 看不出來」答的是「這段文字有沒有給我材料」,不是「我的答案對不對」——後者它答不了,因為它看不到答案,而那正是這個量測的設計條件。有外部答案可比對的用途(路由承諾、術語通用度、指涉解析),每一條回報都要真的拿去比對,比對結果另立一欄、不與自評欄合併。一次二十六條路由的三份獨立量測裡,三份的自評欄幾乎一致(各二十四條有把握),逐條比對後才出現一條三份全錯、其中兩份方向答反的路由,而那一條的自評欄與答對的十七條長得一模一樣。這一步無法外包給探針自己:讓它讀了目的地再自評,預測會變成摘要、設計條件當場失效。
已經在下文各 frame 寫明契約的(路由逐條表、旅程逐跳表、冷讀逐格表、個案四欄表、共同前提的各篇歸屬表),照那個格式。其餘 frame 由主 session 在 prompt 裡指定——最低限度是「位置 / 問題 / 嚴重度 / 建議修法」四欄,加上該 frame 檢查了哪些對象的清單。
標準流程
Round 1:Compliance / 基線 audit
最先用「規範遵循」frame、抓 surface 層問題。Round 1-A 寫作規範 reviewer 啟動時、必須同步 invoke compositional-writing skill 的字句層 grep keyword bank(正向陳述優先 / 口語修辭 / 地區用語 / 廢話前綴 / 裝飾符號)— 寫作規範 audit 漏這層、會把字句層問題推到 Round 2 才被 catch。常見三個 reviewer 平行 background:
- A: 寫作規範 audit — 專案寫作規範(如 AGENTS.md / markdown-writing-spec)/ compositional-writing 規範遵循
- 字句層 grep(必跑)——下面是摘要、不是完整清單。完整的一份在
compositional-writing的「字句層 keyword bank(完整清單)」節,目前十七類;這裡沒有列到的至少有澄清式框架、歸因語氣、宣導語氣、脈絡懸置(等下再討論 / 前面兩個小節 / 用一句話總結 / 列舉鳥瞰)四類。派 reviewer 時把它導去那一節逐類跑,不要只跑這裡列到的:- 正向陳述優先:
rg "不[行可是要能該支對符夠必]|無法|沒[做有]|而非|而不是" <files>— 不主導段落的少量負向(反例對照)可保留、主要敘述要正向 - 口語修辭(#111):
rg "其實|實務上|真的|碰巧|立刻撞牆|沒事" <files> - 地區用語(#112):單詞層
rg "集群|默認|質量|視頻|函數|文件夾|接口" <files>;慣用語層rg "拍腦袋|拍板|靠譜|給力|接地氣|一波|死磕|躺平|內卷" <files>(已知個案、非窮舉——慣用語是開放集合、同源 reviewer 對這層有結構盲區、回報「clean」不可當真、新個案要靠目標地區讀者冷讀;見 compositional-writing 的regional-idioms-evade-keyword-bankprinciple) - 廢話前綴:
rg "值得注意的是|需要說明的是|實際上|基本上|事實上" <files> - 裝飾符號:
rg "✅|❌|⚠️|🚨|🟡|🟢|⭐|📌|✓|✗" <files> - 對讀者喊話:
rg "很多人|大家|不少人|你的|你在|你把|你天天|你會|你可能|先讀懂|先釐清|別搞混|別被" <files>— 教材中性陳述、不安撫 / 不第二人稱 / 不祈使(hook / narrative 輕度第二人稱可留);裸所有格 / 主詞(你的 X / 你在 X)也算、grep 對裸『你』非窮舉、register 類真防線是異源冷讀 - 自評誇飾:
rg "教科書級|堪稱|可謂|完美|經典|範本級|大師級|漂亮地|優雅地|最佳實踐|best practice" <files>— 品質 verdict 頂替技術理由 - 必然性框架:
rg "天生|與生俱來|本質就是|本來就是|必然|唯一|註定|理所當然" <files>— 把設計選擇講成自然法則(物理 / 法律 / 數學事實除外) - 泛用詞濫用:
rg "坑|東西|搞|弄|處理一下|情況" <files>— 同一個泛用詞蓋過不同具體情境時、依情境換精確詞(意外 / 陷阱 / 出問題 / 發生狀況);命中密集且各指不同事才違規、真泛指 / 引號引用合規;「坑」繁中少用 - 敘事姿態:問句標題
rg "^title:.*[??]" <files>、問句段標rg "^#{2,} .*[??]" <files>、敘事轉折詞rg "才想清楚|還是被退|我到底|我於是" <files>、輔助訊號是檢討類文章的「我」密度顯著高於同類其他篇 — 教學與檢討內容寫給帶問題來的讀者:標題承載結論、開頭承載情境定位、判斷標準由推導交付(不設懸念、也不把結論抽到開頭灌輸——灌輸與懸念是同一個缺陷的兩個方向、都讓結論與推導脫節)、檢討用客觀條件視角(「reviewer 問了 X」寫成「若對這個做法問 X 而答不出來、就該重新檢討」);操作型自問句(判斷標準的執行步驟)與「」內引用合規、標題 / 段標 / 結論位扣住答案的問句違規、未經推導的開頭結論摘要與「觸發場景 / 整理目的」欄位組同屬違規。這類是生成端高頻默認、同源 reviewer 覺得「故事帶入是好教學」而放行、防線主力在生產側規範與模板、本 grep 是補位;見 compositional-writing 的write-for-readers-not-audiencesprinciple - 虛構經驗與出處(AI 生成內容):
rg "我們團隊|我們的團隊|我們公司|我們曾|我當時" <files>加精確出處宣稱(「第 N 頁寫道」+ 引號引文)——經驗宣稱是證據宣稱、虛構是造假不是修辭;先判定事件存不存在、再改敘事姿態(順序反了會把虛構藏進條件視角);引文逐字核對來源、出處只寫到驗證過的層級;真實事件的 work-log 與「」內他人自述合規。grep 只覆蓋三個掃描面裡的一面:虛構的人更常以第三人稱出現(PM / reviewer / 同事 / 新人 / 團隊士氣)、沒有穩定關鍵詞、靠逐篇讀開場,而文章的動機句常掛在這些角色身上;判定單位是生成批次、不是關鍵字命中——一篇判定虛構後用版本歷史查同批(同 commit / 同日期 / 同模板)整批逐篇驗,清單清空不等於批次清空(實測命中 6 篇、同批 31 篇);具名錨點(檔名 / 行數 / 日誌規模)與情節分開驗、對不上的數字跟情節一起拿掉。見 compositional-writing 的no-fabricated-experience-or-attribution - 位置與集合指涉:
rg "前者|後者|前兩[本篇章個]|另外[一二三四五兩][本篇個章條張]|其他[一二三四五兩][本篇個章條張]|其餘[一二三四五兩][本篇個章條張]|下一[本篇章節]|上一[本篇章節]|這一側|那一側" <files>— 解碼材料要在讀者已讀的文本裡:位置與數量是作者地圖的 derivation、連作者自己都常數錯(實測同一篇三次計數三次全錯);集合指涉(其他三篇 / 另外三本)即使計數正確也要給成員或方向——數字只證明數過、不承載意義。命中是候選——緊鄰具名清單、全稱比較、已具名集合的向後回指、時間距離遠指合規;判定看綁定在不在已讀文本、命中順手驗計數;集合列不動是分類規劃要拆的訊號、不是省略的授權。見 compositional-writing 的decodable-from-text-already-read。這條 pattern 的成員是從論述型內容歸納的,審查對象換體裁時要先重做形態盤點——清單型內容(書單、工具比較、選型表)的結構單位是一篇裡的一組並列成員,指涉走序數,主流形態是前一本|下一本|上一本|本篇第[一二三四五六]本|上述[兩三四]本|前面幾本,與「前者 / 後者」沒有交集。一次實測:論述文那組 pattern 在一批書單上回傳 86 個命中而逐處判定全部合規,該體裁的三十處違規一處都不在裡面,修完之後命中數只動一。回報這一類 clean 之前,先人工讀三到五篇列出實際形態、再問 pattern 涵蓋幾種;修完之後回頭比對命中數,數字幾乎沒動就是修的東西與量的東西不是同一批。見 compositional-writing 的keyword-pattern-does-not-transfer-across-genres - 用詞搭配錯位:
rg "說完的話|背後.{0,8}的話|想告訴|潛台詞|訊號很直接|訊號.{0,4}很直接" <files>— 抽象概念(角度 / 框架 / 訊號 / 數字)配上不貼合屬性的謂語:擬人化錯配(角度不會「說」、數字不會「想告訴」)與形容詞錯配(訊號的可辨識度是「清晰 / 明確」不是「直接」);無穩定關鍵詞、grep 只抓已知形態、真防線是異源冷讀,見 compositional-writing 的word-choice-fits-concept-attributes - 物理化錯配:
rg "撐得住|撐不住|撐得起|撐不起|能撐|撐住|撐起|撐不久|站得住|站不住|站得起|站不起|掛在|扛|垮|頂得住|咬得|咬合|啃" <files>— 同一張卡四種錯配裡唯一有一組穩定關鍵詞可掃的一種。抽象概念(證據 / 論證 / 結論 / 判斷標準 / 方法 / 責任)配上承重、支撐、懸掛類動詞;判斷標準可機械執行——問這個動詞照字面成立需要什麼物理條件,需要重量或支點的就是借來的。替換依主詞選:論證與結論用成立、證據用可靠、正文用自足、選型用適用,其餘走足以支持 / 依賴 / 佐證 / 維持不久 / 負責。這一種的危害多一層:「撐得住」聽起來已經像答案,於是「支持什麼、到什麼範圍」不必被回答。例外是就地展開成可逐項對應的類比、以及主詞本來就是實體或系統負載 - 可信度斷言:
rg "站得住|站不住|撐得住|撐不住|撐得起|說得通|說不通|這個說法.{0,6}成立" <files>— 與上一條共用一組關鍵詞而問的是不同的問題:那條問動詞對不對(證據「撐得住」寫成證據「可靠」),這條問這句話該不該寫。可信度是讀者讀完之後產生的感想、不是作者該寫出來的句子——作者寫出來等於替讀者下了結論,而讀者手上的材料沒有變多;處置是刪掉那句、直接陳述那件事,不確定的話那件事本身就不該寫。兩條規則管的是不同的量:這條減少這類句子的數量、那條管住留下來的那些(題目本身就是證據品質或查證方法時非寫可信度不可,而那裡「撐得住」仍然是錯的動詞),順序是先問該不該寫、決定要寫之後再問動詞對不對。命中是候選不是判決——評鑑文體(評價附材料與判斷標準)與「」內引用合規。同一張卡的另外兩種形態沒有關鍵詞可掃(段標帶推導的連接詞、整節在講比題目更泛的東西),由 Round 2-C 的段標範圍檢查承接;見 文章寫題目本身
- 正向陳述優先:
- 命中是候選、不是判決:grep 命中後仍要一個語意判定步驟——這個命中是「建立核心概念的違規」(段首 / 小節開場)、還是「合規的反例對照 / hook / 真必然」。reviewer 容易把違規合理化成「可接受對照」放行(偵測成功、判定失敗);判定用「概念位置」、不用「有沒有對照意味」。回報「字句層 clean」前先確認 clean 不是判定放水。register 違規(否定起手 / 概念前置 / 喊話 / 誇飾)有判定上限:它的偵測可機械化(grep 抓得到句型)、但判定要讀懂「讀起來對不對」、無法 regex 化;而且 LLM reviewer 跟作者共享文體直覺 ——「不是 X、而是 Y」這種 LLM 高頻自產的定義句型全員讀起來「自然」、同源自審對這類有結構上限、加再多輪都跨不過。register 層的真防線是文體異源視角:external human cold-read、或 prompt 明確採「挑剔否定起手 / 概念後置」對抗姿態的 reviewer。同源 reviewer 回報的「register 層 clean」不可當真、要標「未經異源抽查」。同源的範圍包含整棵派發樹:本 session 派出的每個 reviewer 與探針都拿著本 session 寫的 prompt、繼承同一個框架,所以輪數與 agent 數再多都不脫離同一個來源(見規模買不到異源視角)。但要分清子集:「重點優先 / 否定起手」(不是 X 而是 Y、與其 X 不如 Y)有可操作的判斷標準 —— 逐句問「核心概念第一次正面出現在句首、還是被擠到『而是』之後」、強制執行這個機械步驟就抓大部分、異源只補殘餘;真正主要靠異源的是喊話 / 誇飾這類無單一重點位置的 register。別把「有可操作的判斷標準卻沒執行」(execution gap)誤當「判定不可機械化」(design 上限)。
- 詳細 grep keyword bank 跟 frame 路由見
compositional-writingskill。
- 字句層 grep(必跑)——下面是摘要、不是完整清單。完整的一份在
- B: 案例 / fact-check audit — 案例引用準確性、編號 mis-cite、跨章節引用;教學層 case 引用的敘事重量(per 教學層引用剝離身分與規模)——教學文引用 case 的段落逐句掃事件帳目(票數 / 案例數 / 版本號)、規模鋪陳、產品身分與領域功能詞、這些的住址在 case 記錄原文;finding 的建議修法先給「刪」、刪不動才泛化成無身分載體(「一個專案」「一筆資料」)、通用化帳目(113 張 → 上百張)是半吊子修法——前情提要仍在、只是變模糊;判定用「拿掉後論證還成立嗎」的機械測試、不用「規模感幫論證」的直覺(作者與同源 reviewer 共享此直覺、準確性審查攔不到——數字是準確的、只是不該在教學層)
- C: 跨章一致性 audit — 編號、學習路線、模組整合、frontmatter 一致(含 description 體例檢查:先判這一批是教材還是查閱型,教材說這一篇涵蓋什麼、查閱型回答什麼情境下需要回來讀,兩者共用「遮住 description 只看標題能不能猜出全部內容」這條驗收;一個分類的 description 幾乎每一篇都以「時」收尾是規範長出來的形狀、要整批重寫並回頭改規範,per description-as-recall-trigger)。路由目的地承接驗證(必跑、不能靠連結檢查代勞):逐條掃 out-of-scope、下一步路由、交接欄位,去目的地實際找出承接該主題的檔案或段落——連結檢查驗的是「目標存在」、這一維驗的是「目標承接這個主題」,兩者差一個語意判定。承接之上還有第三道關卡可達:目的地確實有這個主題、但埋在第三層小節時,讀者到站的體驗與落空相同(看到滿頁不相干內容、判斷自己找錯了就離開)。驗收走到落點的第一屏——指過去之後不再往下捲、不再點第二次,看得到嗎;看不到就把路由指到那個小節、或在條目裡寫明它在目的地的哪一段。第四種目的地是自己維護範圍之外(外部規格、官方文件):它會改版、改路徑、下架而自己無法讓它保持承接,處置是連過去的同時寫明「到那裡要拿到什麼」,寫不出來的外部路由通常是在推卸而非導引。寫成 code 格式的模組名(
`05-deployment-platform`)而非連結的條目風險最高:它不是連結、連存在性檢查都不進,指涉一個根本不存在的模組也不會報錯。這一維的產出是一張逐條表(路由條目 / 目的地 / 實際承接的檔案或段落 / 到站第一屏看不看得到)——沒有列出條目的「已檢查」不成立,抽查三條與逐條驗完在不列條目的報告裡長得一模一樣。落空時分四種處置、判斷標準是「這個主題該不該由那個模組承接」:指錯了(主題其實在別處、改指正確落點——先全站搜該主題再假設要新寫,這種最容易被誤判成「還沒寫」)、該有但沒寫(列進目的地模組的 backlog、並判斷要不要先建簡版:讀者到達後拿一段話加幾個連結能繼續走就建、需要完整推導才有價值就只留 backlog 並暫時拿掉該條)、根本不該路由(刪掉或收回本文處理)。失效能存活過完整審查是因為三層都不看它:工具只驗存在、其他 frame 查的是連結有效性與 outbound 方向、作者憑主題的語感歸屬分配模組而非去目的地確認過。
宣告核對(同一維、可機械化的那一半):把稿件裡所有「本站尚未寫」「尚無對應章節」「已列入 backlog」「不在本章範圍」的宣告掃出來(rg "本站尚未寫|尚無對應|尚未有|已列入 backlog|不在本章範圍|本章不涵蓋"),逐條反證——真的沒有嗎、backlog 真的有那一列嗎、被排除的那個主題在它指的目的地真的有嗎。可數宣稱另外要跑一次觸發核對,而不只是重算。 頁面上會隨內容變動的數字(覆蓋率、分佈、成員總數)有兩個獨立的失效面:值算錯了,以及沒有人會回頭算。逐條問三件事——這個數字的計數單位定義在哪、什麼事件會改變它、寫下來的重算觸發涵不涵蓋那些事件。差集就是靜默過期的入口,而寫下來的錯觸發比缺席的觸發難查,因為條款讀起來就是有人想過了;觸發條款裡的排除句(「跟著 A 走,而不是跟著 B 走」)要單獨驗一次,把 B 當成已發生、問這個值會不會變。同一維要防的還有內部自洽被當成驗證過:一組分項加起來剛好等於總數時,它讀起來像被核對過,而自洽只證明它們出自同一次計算、不證明那次計算是什麼時候做的——一次實測裡審查者驗了加法就判定通過,外部重算之後四個獨立計數全部得到另一個值。分辨的問句是「這個數字上一次被實際算出來是什麼時候」。見 compositional-writing 的 recompute-trigger-must-bind-to-the-changing-event。
錯誤的缺口宣告比沒有宣告更糟:它讓後續審查不會再查那一項,而讀者拿到的是「這裡沒有東西」這個錯誤結論。實測抓過一篇新章三處寫「本站尚未寫」而該主題另有一整篇專章。這一項與上面的目的地承接是同一種動作(離開讀者視角、對全站做窮盡查證),差別只在驗的是連結還是宣告。
-
D: Downstream-task audit(outside-in) — 讀者讀完後的下一個動作是什麼?他需要什麼素材才能完成那個動作?技術文章的讀者常見的下游任務是「向管理層提案」「估算時程」「選型決策」——文章如果只講技術做法、缺成本量級 / 時程估算 / 進度指標 / 決策簽核點,讀者學會了做法卻推不動。操作型文章的下游任務是「照做」——如果步驟停在 WHAT 層沒到 HOW WITH WHAT(具體工具 / 指令),讀者知道該做什麼但不知道用什麼做。per outside-in reader frames
-
E: 斷言支撐 / 知識類型 audit — 字句、cadence、讀者旅程、steelman 都在文字表面與結構層操作、對「整個模組是錯的知識類型」結構性不可見:一個模組可以每句合規、每個結構到位、整體卻是結論都在 / 支撐全缺的經驗談。兩層檢查:斷言層——每篇抽 3-5 個承擔判斷標準的核心斷言、問「靠什麼成立:機制推導 / 量化 / 可驗來源 / 實機驗證、還是口吻與權威(『厲害的人都這樣』『經驗上如此』)」;數字閾值(「不超過七成」)要問「推導在哪、讀者換情境能重算嗎」——標了約數不等於有支撐、這是斷言支撐跟 steelman「閾值有無源頭」的差別(句子層誠實 vs 判斷標準層可推導)。斷言層另查讀者可重建性:結論式條列(「拆開來看有三個毛病:1、2、3」、grep 候選
rg "拆開來看|[一二三四五六]個毛病|有[一二三四五六]個問題")逐條問「讀者只憑文中已給的材料能不能自己得出這條」——重建不了的清單是作者只輸出結論、讀者只能硬記或盲信、且清單形式會把「缺材料」藏住(支撐結論的程式碼與對照根本不在文中、但結論寫在那裡讓缺席看起來不缺);修法不是修字句、是展開成讀者位置的走查(把讀者放到使用產物的位置、每條斷言換成動作加材料、可重用的檢查方式在走完後浮現)、範式與 before / after 見 compositional-writing 的assertion-list-needs-reader-walkthrough。摘要位置的條列(前文已推導、條列是回收)與每條自帶證據的清單合規。斷言層還要驗判斷標準成熟度:判斷標準句停在維度清單(「判斷看 A / B / C」、動詞是看 / 考慮 / 取決於而沒有「→ 就」的映射)是判斷標準的空殼——有機制支撐仍可能空殼(機制正確與判斷標準到位是獨立檢查)、驗收用重算測試(讀者帶自己的參數能不能走出行動)。模組層——模組的知識類型(分析 / 敘事 / 操作)跟所在分類的定位與 sibling house style 一致嗎(分類有算式與結構分析、新模組全篇敘事即失配);分析模組另問推導源頭存不存在:模組入口能不能一句話說出推導起點、任選一篇的核心判斷標準能不能折算回共同機制——答不出來是主題集合訊號、跨篇判斷標準矛盾在這種結構下不可見。素材來源是經驗談 / 訪談 / 口述的 batch 為高風險、此 frame 必排第一輪——知識類型錯位的修法是重寫、越晚抓字句層打磨全作廢。支撐類型依知識目標判定(操作型=實機驗證、分析型=機制與量化)、心態 / 生態類內容標明定位分離即可、此 frame 不適用。per claim-support frame -
F: 商業分析嚴謹度 audit(商業/財務分析內容專用、conditional opt-in) — 內容涉及財報判讀、產業比較、估值、投資建議時啟動。必須同步 invoke
business-analysisskill 的 7 步驟流程作為 checklist。五個檢查維度:- 分母與口徑:每個成本百分比是否標示分母?同一篇文章是否在不同段落用不同分母而未說明?
- 結構性 vs 一次性拆解:毛利率或獲利的顯著變動是否被分解為結構性改善、外部利好、一次性因素三類?未拆解的獲利變動 = 判讀缺口
- 基準適用性:引用的產業基準(「食材成本應該 35%」「人事佔 10%」)是否標示了隱含的營運模式假設?跨模式引用基準而未說明前提差異 = 誤導
- 關係人交易:涉及集團內上下游公司時,是否辨識了轉移定價對個別公司毛利率的影響?只看下游不看上游 = 低估集團盈利
- 正常化 EPS:估值段如果使用了 peak-year 或 trough-year 的 EPS,是否做了正常化調整?未調整 = 估值偏差
- 數據時效標示:所有引用的財務數字是否標註年度/季度?文章老化後未標時效的數據會誤導讀者——「毛利率 21%」在 2025 年是事實、在 2027 年可能已過時。每個數據段至少標一次時效來源(「2025 年度財報」「2026 Q1 法說會」)
- N/A 處理:維度不適用時標 N/A 並附簡短理由(如「非上市公司分析、正常化 EPS 不適用」)。N/A 代表「已評估、判定不相關」,跟「未檢查」不同
- 非財務分析內容不需要跑此 frame。詳見
business-analysisskill 的完整 7 步驟和references/操作清單。
預期 finding 類型:編號錯、broken link、案例 mis-citation、規範違反、字句層負向 / 口語 / 廢話、cadence 散點、成本 / 時程 / 工具缺口、斷言支撐缺失(訴諸權威 / 無推導閾值)、模組級知識類型失配、分母未標示、獲利變動未拆解、基準前提未說明、關係人交易未辨識、估值未正常化。
Round 2:Cadence / 讀者旅程 frame
修完 Round 1 後、改用「字句層 + 讀者體驗」frame:
-
A: Cadence + 字句層 — 句型同骨化(per #122 cadence 同質化)、廢話前綴、口語修辭、地區用語。修 cadence 時警惕反噬:為破舊模具而立的生成端規則(如「段首一律目標詞先行」)若均勻套整批、會複製出比原模具更密的新模具、且同源自審在「已修」錯覺下看不到——修法要輪替多個 framing、修完把修法產物納入整組重掃(per 均勻修法複製新模具)
-
B: Reader simulation 旅程審查(走路線,必須指定讀者身分與起點) — 這個 frame 的單位是一條路線而非單篇,而且是時序動作:模擬一個帶著問題的讀者,只看見他當下看得見的東西。啟動前先固定三件事——讀者是誰(經驗背景要具體到能判斷什麼算太難)、從哪一篇起步、帶著什麼問題;缺任何一件時這個 frame 沒有判斷標準、會退化成逐篇讀。產出是逐跳表:每一跳記「帶著什麼問題離開前一篇 / 後一篇的前三段有沒有接住 / 走完之後那個問題答了沒有」。沒有逐跳表的「已走過」不成立。實測有效的形態是同一批內容走三到四條不同起點的路線,因為斷點常常只在某一條上出現(同一個目的地對不同來意的讀者,接得住與接不住是兩回事)。不要把宣告核對混進這個 frame:那是全域動作、有明確檢查表,而走路線沒有檢查表,兩件事並行時 reviewer 會先做有檢查表的那件(per 宣告的組合不等於執行的組合 的同一種不對稱),走路線因此被靜默擠掉。宣告核對放 Round 1-C。假裝特定讀者類型(如「剛從入門影片進來的開發者」)、實際走學習路線、看入口判讀 / 內容門檻 / 跳出訊號。Reader-persona register 適配:指定具體讀者角色後,額外問「這個人讀到這段會覺得被低估嗎」。術語知識卡覆蓋:假裝讀者群裡最不熟悉的那端(如 Node.js 工程師讀 PHP 教材),逐一掃描文中術語——任何讓該讀者需要去 Google 的術語都是知識卡缺口。常識是相對於讀者背景的、作者和同源 reviewer 共享的「常識」盲區需要這個 frame 才能 catch。per 常識是相對於讀者背景的——宣導語氣(故事帶入、比喻堆疊、「你可能不知道」)對專業讀者是 register 失配,keyword bank 抓不到(字面合規)、同源 reviewer 容易放行(共享「故事帶入是好教學」的直覺)。per outside-in reader frames
-
B″: Executable walkthrough(操作型文章專用、outside-in) — 假裝讀者從零照做、每一步問「下一個動作是打開什麼軟體、輸入什麼指令」。任何一步答不出來就是工具缺口。操作步驟在邏輯層正確(fact-check 通過)但缺工具指引(讀者無法執行)是 inside-out review 的結構性盲區。環境分支:同一個動作(「拍下現況」「匯出資料庫」「建立備份」)在不同執行環境(container / VM / 共享主機)對應完全不同的工具路徑,只寫一種環境的做法會讓另一種環境的讀者卡住。如果文章涵蓋多種環境、每一步要按環境分列工具或標明「本篇適用 X 環境、Y 環境見另一篇」。同根因容易被指出兩次——第一次補了工具名稱、第二次才補環境替代路徑。per 操作指引要帶環境專屬工具路徑。非操作型文章(概念型 / 溝通型)不需要跑此 frame
-
B‴: 情境可想像性(判讀 / 選型型文章專用、outside-in) — 假裝讀者沒有該領域的實務經驗,逐一掃「機制陳述」(描述某機制具備什麼屬性、承擔判斷標準、但沒說什麼時候會用到的句子),問「他想不想像得出來什麼情況會需要這個」。判讀類內容只給屬性時,讀者得自己補情境才能使用它。而補情境需要的正是該領域的事故經驗,那份經驗也是這個判斷的輸入之一——能補的人已經握有做判斷的材料,內容對他的增量因此有限。經驗是梯度、而可用程度沿著它單峰:中段(熟悉鄰近領域、不熟這一塊)收益最大;再往外的零經驗端缺的已經是術語入口而非情境、補了情境也接不上;資深端本來就不需要。判定「不需補」時要說出它落在哪一端——零經驗端的下一步是補卡連結、不是結案。情境與實作的分界畫在解析度不畫在內容類型:判讀層取到讓成本可感的粒度(花多久、動到誰、卡在哪)就停,再往下的函式庫與參數屬於下游;用內容類型當判斷標準會把「要先找到對方窗口、約一個維護時間」誤判成實作而裁掉,那句其實是判讀層必須交出的成本量級。跟鄰近 frame 的分工:B 問「他懂不懂這個術語」(術語層)、本 frame 問「他想不想像得出這些情況會發生」(情境層);B″ 是操作型專用(照做做得出來嗎)、本 frame 是判讀型專用(判斷得出來嗎)。要檢查三個成分——系統形態(什麼樣的系統會遇到、服務設計階段的讀者)、觸發事件(什麼事件會逼出這個動作、服務維運階段的讀者),以及微案例(走到這裡出事會長什麼樣、無身分的三四句短敘事)。前兩者是分類語言、回答進入條件,第三者是後果的敘事化;判讀表的「判讀訊號」欄有時序陷阱,訊號要等設計落地才觀察得到、設計階段的讀者對照不到任何東西。微案例查三件事:四拍齊不齊(當初為何這樣做 / 何時開始出問題 / 為何沒被及時發現 / 止血代價,第三拍最不可省——其餘三拍讀者能從機制推得、第三拍取決於該組織的監控與責任配置)、挑的形態對不對(挑後果最不直觀的一兩個;直觀的如「密鑰外洩會被冒用」補了是冗餘,照節次順序補到哪算哪的通常正好挑中直觀那幾類)、第三拍有沒有來源(親歷、案例庫已記的形態、或機制上必然;第三拍是唯一推不出來的那一拍,推不出來就代表無經驗的作者只能發明它,而模板不會擋下發明——第三拍寫得比其餘三拍概括是沒有來源的痕跡,此時留白比杜撰好)。三種形態不適用:分流型入口(整段責任是把讀者導去別處)、純參考(規格表)、程序型(步驟一二三四)——判定不適用要指出該篇的哪一段構成該形態、並確認其餘各節沒有在給判斷標準;判讀類文章幾乎都含一節分流或一節步驟,以其中一節把整篇判成不適用是這個 frame 最省力的關機鍵。判定與補寫程序、四組正反例見 判讀內容要給情境與後果。兩個實測要點:同一篇通常有一兩節已經寫對(先掃出來當本篇的參照樣本、比另立標準可靠);檢查單位是「內容」而非「段落」——同一列的內容分散在別節也算有,硬要每列都有獨立段落會製造重複
-
B′: 冷讀 / 零脈絡單卡落地審查 — 假裝讀者經搜尋或直連落在單一篇章、毫無 section 與前後文脈絡,逐篇冷讀。專抓「洩漏撰寫者預設前提的行話」(如未定義就出現的「家族」「上述框架」「如前所述」)與「缺『為何讀這篇 / 何時會用到』的進入動機」。與 B 的關鍵差別:B 是讀完全部、走路線的知情讀者,會自動腦補脈絡而看不見行話洩漏;B′ 是零脈絡冷讀者,才會立刻問「這裡突然冒出的 X 是什麼」。原子化 / Zettelkasten / glossary / 任何可被直連或搜尋單獨抵達的內容,B′ 為必備 frame,不可只靠 B。顆粒度含兩層、同一個冷讀 reviewer 執行:篇章層(單篇落地讀得懂嗎、行話洩漏與進入動機)與句子層(單句消費位——checklist 項、表格內容欄、判斷標準句——逐格跑抽離重讀)。句子層的判斷標準是資訊充足四條件:命題完整(主詞 / 謂語 / 對象 / 條件 / 量化與情態在場)、指涉閉合(殘片在單位內可回收、且判讀不需先解壓)、實詞可反推(承載內容的詞能對到機制 / 條件 / 契約)、一句一命題(並列的每個半句能獨立判真)——專案有 compositional-writing skill 時同步 invoke 取完整定義。抽離的單位是消費單位(一項 / 一列含鍵欄)、不是裸句:表格鍵欄與 title 是檢索鍵位、義務是識別充足、命題完整不適用——照字面逐格掃鍵欄會產生假陽性。執行協議:每格要記錄復原出的命題、不是只記通過與否(模型會用自己的文風先驗補完歧義後回報「沒問題」);兩層實測由同一個 B′ reviewer 完成有效、審查單句消費位密集的稿件(skill reference、checklist、規範文件)時、逐格判定表(格 / 復原出的命題 / 判定)為必附產出——沒有逐格表的「句子層 clean」不成立。高頻不通過成因兩類:以數量命名的縮略回指(「四條件」「兩步驟」這類、數字裡的成員在單位外)、跨卡借術語不帶定義。篇章層必問一題「這一篇讓你具備什麼能力」——冷讀預設「讀得懂」等於「有內容」,而互相引用的集合裡有一種稿件讀得懂而說不出要交付什麼(篇幅被鄰居的引用佔走),只有這一題分得開;答「看不出來」或列出兩種以上互斥的可能就是命中。同一題另外驗路由:逐條問「文章有沒有說去了拿到什麼」,判斷標準是遮住目的地之後預測不預測得出那一篇會給什麼;句型只影響命中率(實測那一對是「某某付給了誰,決定了這個市場是零和還是負和,見某某」高、「某某與某某的互動在某某」低),照句法規則判會產生假陰性——這一維用關鍵詞比對會高估、用句法規則會漏,要靠這個 frame 量。見 串連佔掉的是本篇的篇幅。
-
B⁗: 低階 model 讀者探針(分歧即歧義、機械檢查與高階 reviewer 都覆蓋不到的那一層) — 前面所有 frame 的判斷標準都落在某個 reviewer 的判斷上,而 reviewer 的理解力越強、越容易在讀到殘缺句子時自動補完,坑因此被填平而不現形。這個 frame 把判斷標準移到多份獨立理解之間的分歧:派 N 個低階 model(Haiku 這類)用逐字相同的指令讀同一篇,五個條件缺一不可——(1) 指令逐字相同(差異才只來自模型、分歧才可歸因)、(2) 不給審查框架(問「你讀到什麼」不問「這寫得好不好」,給了審查框架低階模型會退化成品質較差的 reviewer、優勢全部消失)、(3) 明令標記不確定且禁止推測填平(模型的「有幫助」傾向會把空缺補起來,要它寫「文章沒說」而不是猜)、(4) 問理解不問評價、(5) 判斷標準是分布不是任一份的結論。五種用途換問題不換派發方式:理解正確性(每段在講什麼/動作誰做的/指涉詞指什麼/讀完會做什麼)、重點涵蓋度(列出所有重點、主旨一句話、只能記住三件事——判斷標準是作者的意圖清單與讀者的回報清單之間的差集,讀者不知道自己漏了什麼、所以直接問「你讀懂了嗎」問不出來)、主旨明確度、閱讀負擔(讀到哪裡累/哪裡回頭重讀/想跳過哪段/長度偏長還偏短——回報本身即資料、不需收斂)、語氣與讀者定位(語氣三詞/作者把我當什麼讀者/六類語氣違規各有沒有——語氣是同源審查的硬盲區,低階模型的文體先驗跟作者不同)。「只能記住三件事」與「有沒有哪一句讀了兩次以上」是兩題最便宜的高價值訊號:前者逼出壓縮(讀者不是逐條吸收、是壓縮後吸收,壓縮時丟掉的正是帶不走的),後者讓模型自陳卡頓位置。歸因先於處置:探針回報的是資料不是結論,判定「讀者讀錯了」之前先在原文裡搜那個讀法對應的字串——找得到逐字對應的句子就不是讀者誤讀、是文章自己這樣寫的(修那句、並找出它跟哪裡衝突,同一節的正文與結尾摘要打架是高頻形態);找不到對應句子而現有材料足以推出那個讀法是表述有歧義;兩者都沒有才是模型自己的問題。跳過這一步的動力來自收斂本身——幾份一致的時候「讀者讀錯了」這個結論順到不需要查證,而查證成本只是一條 grep。歸因完成後,處置是一份讀錯就是判決——收斂度決定證據強度(這個讀法有多容易出現)、不決定要不要修,把統計門檻當處置門檻會放掉大部分 finding;理由不在統計裡(引導讀者是寫作者的職責、讀者讀錯就沒有讀這篇的意義),而方向還是反的(模型群體的變異度低於真人,五份只有一份搞錯代表真人裡的比例只會更高)。唯一例外用操作測試分界:文章有沒有給出足以排除那個讀法的材料——給了而模型仍讀錯是模型的問題、沒給是寫作的問題。零分歧只證明表達無歧義、不證明內容對。分歧點的修法多數是補句子成分與具名指涉、不是補段落——判別問句是「把主詞、受詞與指涉對象補回去之後這句還讀不懂嗎」,補回去就懂了是成分問題(改句子、不加內容),仍不懂才是脈絡問題。兩輪量測(同一篇剛通過三輪九個高階 reviewer 的稿件):第一輪五份理解探針找出全體一致一處、過半四處、單份三處,共十處修正全是補成分與具名指涉;那個全體一致的位置不是讀者誤讀、是作者自己寫的矛盾——該節正文說事件會隨 issue 或 repo 消失、而同一節四行後的結尾摘要寫著「留下永久記錄」,五份忠實回報了結尾那句,量到的機制是「正文與結尾摘要衝突時讀者帶走摘要」。第二輪四份分用途探針另產出五處,其中閱讀負擔探針指認出兩段「不確定為什麼要出現在這篇裡」、而其中一段的來歷正是前一輪 reviewer 要求補的——審查要的跟讀者要的不是同一個東西。規則類文件(規範 / skill / spec / agent 指令)是這個 frame 的特殊對象:對文章而言探針是真人讀者的代理,對規則類文件而言讀它並照它執行的本來就是模型,探針量到的不是近似值而是實際的執行輸入——嚴重度因此更高(一條規則被讀錯,往後每個 session 都照錯的版本執行,而錯誤的執行不會回頭報告自己讀錯了),且「一份讀錯就是判決」在這裡不需要靠變異度推論。這類對象要在指令裡加一欄**「照這一節工作,我的第一個具體動作是什麼」**——它量的是規則落不落得到實體上,而不是句子讀不讀得懂;一條每個字都懂、卻沒有指向任何打得開的東西的規則,在理解正確性那一欄會全數通過。實測這一欄單獨產出五處而其餘各欄都沒報出它們(改名後沒跟著改的路徑、查無對應檔案的專有名詞、寫成形容詞並列的步驟),判別與修法見 rule-must-point-at-something-openable。這一欄不可以省略成「你讀懂了嗎」:讀懂與執行得出來是兩回事,而讀者的預設回答是讀懂了。低階模型不可信的維度:事實正確性、跨檔一致性、承重論點的反證,那些仍要高階 reviewer;大量已知形態的掃描仍歸 grep(便宜好幾個量級)。詳見 comprehension-sampled-not-judged
-
B⁵: 翻譯探針(強制消歧、詞與語法層,中文稿件專用) — B⁗ 問「你讀到什麼」而回答的形式是摘要,摘要允許保持模糊:模型可以在不決定「這個所有格指誰」的情況下寫出一段正確的摘要。翻譯繞不過去——中文允許不決定的語法項,英文強制決定(主詞、單複數、時態、定冠詞、所有格的方向、並列的轄域、修飾語的作用範圍、字面義還是譬喻義),譯者必須每一項都選一個答案。派 N 個低階模型用逐字相同的指令把同一段中文翻成英文,判斷標準同樣是份與份之間的分歧、不看任何一份譯文的品質(低階模型的翻譯本身會出錯,單份譯得好不好不進判定)。指令要三件事、缺第二件就退化成一般翻譯:(1) 逐句翻譯不摘要不省略不改寫結構(結構改寫會把歧義一起改掉)、(2) 翻完單獨列出「翻譯時我必須自己決定、而原文沒有明確給出的東西(例如某個名詞的單複數、某個句子的主詞是誰、某個並列結構的範圍到哪、某個詞是字面義還是比喻義)」加上選了哪一個與其他可能解讀——這一欄才是產出、譯文是副產品,括號裡的例子要留在指令中,拿掉之後模型回報的多半是譯詞選擇而不是語法項的決定、(3) 決定不了的寫「原文沒有給出判斷依據」、禁止推測填補;專有名詞與技術術語保留原文當對照錨點。譯文與註記都要看:註記是譯者自覺的決定,不自覺的決定只有把譯文並排逐句對照才看得到——實測份數最多的那個發現(一個詞三份全錯)沒有出現在任何一份註記裡。三類獨有發現:語法項分歧(
X 的 Y不標記施事或被描述對象,英文必須在 of / for / by 之間選)、譬喻會現形(有現成術語的概念多份會收斂到那個術語、用譬喻的會分歧成多個英文詞或被譯者標記成 metaphor——這給「概念有現成術語就用術語」那條判斷標準一個可量測的驗收方式;一次補測在同一段內取得對照:「判斷標準」三份全收斂到 criteria、同段的「量尺」三份給出不同英文詞)、零資訊句裸露(中文的四字節奏讓空話讀起來像在做事、英文沒有那個節奏支撐,是廢字類別的獨立驗證器)。內部分類詞的跨頁綁定也會被抓出來:原語言讀者掃過去不停、翻譯者必須決定意思,缺的連結因此現形。順序不可顛倒——這個 frame 的稿件要先通過 B⁗,命題層還沒收斂就跑會被大量低層 finding 淹沒,而那些 finding 多數在命題層修完之後自動消失。處置沿用一份讀錯就是判決:份與份選了不同答案是歧義(修)、都寫「沒有判斷依據」是缺定義或缺綁定(補)、一致選錯而原文材料足以排除那個讀法才是模型的問題(結案)。三種不適用:命題層未收斂的稿件、判定術語翻譯的正確性(那要專業對照)、以原語言語感本身為主題的內容(雙關與成語的模糊是內容不是缺陷)。實測一段剛通過三份理解探針並修正過的稿件,三處發現全部是理解探針沒報過的、其中兩處三份一致;同批驗證了上一輪修法生效(集合邊界三份全部譯對)。詳見 translation-forces-disambiguation這個 frame 有一個不可讓渡的設計條件:譯者只能拿得到文字。 訊號來自份與份之間的分歧,而分歧之所以能歸因到原文,前提是譯者無法用意圖補完。所以不要讓寫這段的實例自己翻,也不要餵給它整篇脈絡——拿得到意圖的譯者一樣會強制決定,只是決定得對:機制照常運作、訊號消失。一次十份探針的對照(指令逐字相同、只差讀到的範圍:全文 223 行 vs 該段落 9 行)結果完全分離——有脈絡的 5/5 譯成作者意圖的讀法且零人列進不確定欄,無脈絡的 5/5 譯成另一個讀法。會傷到讀者的歧義,正好是作者毫無困難就能解決的那一種,所以「在寫作當下同時產出中英文互相對照」這個做法對它全盲,產出的譯文不是檢驗、是一張錯誤的合格證明。
判讀時另加兩條。譯文通順而原文的某個成分不在裡面要當成命中:翻不出來的處理有時是把那個成分刪掉,連「翻譯卡住了」這個間接訊號都一併消掉,所以要逐項核對原文成分在譯文的落點、不只讀譯文順不順。「沒有標記不確定」讀成沒有資訊、不讀成沒有問題——實測中零標記的那一項正是錯得最徹底的一項。完整判定與實測見 probe-independence-is-not-transferable。
-
B⁶: 術語探針(受測單位是一個詞,不是一段文字) — B⁗ 與 B⁵ 測的都是一段文字被讀成什麼,而有一種缺陷小到不會在那兩個 frame 裡現形:某個詞本身在目標語域裡沒有穩定的所指。它躲得過的理由是熟悉度而不是能力——一個詞在稿件裡出現幾百次之後,作者與同源 reviewer 讀到它都會自動補上作者給的定義,而那個定義不是領域給的。字句層的 keyword bank 也抓不到它:清單收的是已知形態,而這種詞的形態就是「看起來像個正常的術語」。
做法是把對象從一段文字縮成一個詞,派多份低階模型各自回答「這個詞在<領域>裡指什麼;沒把握或沒見過就直接說沒見過,不要推測」。設計上比 B⁗ 多一個條件:同批要混入至少兩個已知通用的術語,且不標示哪個是控制。 控制詞收斂,代表這批的能力足夠、測試詞的分歧可以歸因到詞本身;控制詞也分歧,這批整批作廢。少了控制詞,「全部都答不出來」有兩個互相排斥的解釋(這個詞非通用 / 這批模型不行),而報告分不出來。
回答分四類讀,而收斂度只分得出前三類:收斂到同一個定義是通用術語;各給不同定義而都有把握是一名多義,處置是拆開或就地界定;全部回報「不確定 / 沒見過 / 像是自造」是非通用。第四類是少數份有把握、而它們一致指向一個與作者用法不同的東西——這個詞在同一個領域裡已經有主人,它在收斂度上與非通用詞同區,只看數字會判成邊緣而換個同義詞了事。這一類的處置最嚴格(非通用可以就地定義後留用,同域佔用只能換掉,而且要換成描述不是同義詞),證據全在定義的內容裡,所以 prompt 要多一句「有把握的那些,寫出它指的東西」。非通用不等於自創——一個詞可以真實存在、在別的領域有穩定用法而在這裡讀不出來,那是語域錯配;歸因的判斷標準是一條查證(這個詞在別的領域有沒有穩定用法),兩者處置相同而檢討的歸因不同,寫成自創會讓下一個人去查是誰造的而查不到。
判定非通用之後的替換是這個 frame 的第二半,不能一條指令掃全站。 反覆使用多年的詞通常已經長出好幾個所指,而單一替換詞會在其中幾種上讀成別的意思。程序三步:先把左右各兩三個字連同該詞一起取出來分組計數(分組結果就是義項的候選清單,成本是一條指令——但這條指令本身要先驗:某些環境的 sort / uniq 在 UTF-8 locale 下把中文字串視為等值、會把全部詞形塌成一組並回報一個剛好等於總數的數字,餵三個已知不同的字串進去看回報幾組就知道);再按義項給對映,動作修飾語可以縮短、狀態義換成條件、事物性修飾語與動詞帶賓語給最長的展開式(展開式較長而永遠不會被讀錯,縮寫式在部分義項上會碰撞,所以預設值選展開式、縮寫只給確定安全的那幾組);最後對有英文詞而無可靠中譯的那一個,保留英文並連回知識卡,硬翻只會製造第二個非通用詞。
這個 frame 也用來判口語譬喻算不算正式書面語——問一個譬喻是不是書面語,與問一個詞是不是通用術語,是同一個問題的兩面。新抓到的詞要進 grep 清單之前先跑一次入選判斷:違規義項不佔多數的詞收進去只會製造假陽性。完整判定與程序見 term-probe-measures-register-not-invention。
-
B⁷: 類型探針(受測單位是整篇的定位,不是句子也不是詞) — 2-D 的判定由作者做,而作者知道自己想寫的是什麼,所以那個判定有結構上限。類型探針把判定移到多份獨立的理解上:問法不能點名類型,五個問題沒有一個提到手冊或教材——這一段寫給誰看、讀完之後的第一個動作是什麼、預期讀者會照著做嗎、會放在手邊隨時翻還是讀過一次就好、以及讓你這樣判斷的是哪幾句(逐字抄)。第五題是這個 frame 產出價值最高的一題,它直接交出裝置清單而不必事後回推。
同批要混入兩份控制文件且不標示:一份無疑義的操作手冊(有編號步驟的流程)與一份無疑義的教材(概念解釋),機制與 B⁶ 的控制詞相同。控制項在「隨時翻」這一軸上分開,測試項的判讀才可歸因;控制項分不開就整批作廢。
判讀時「會不會照著做」與「會不會放在手邊」是兩條軸,只翻一條要當成沒改完。回報的引句一律回原文逐字核對,找得到就是文章自己這樣寫的,歸因結束、直接進處置。
-
C: Title commitment + cross-surface — body 是否對齊 title 承諾、跨 surface(章節 ↔ report 卡 ↔ knowledge card)三角對齊。題目範圍檢查(必跑,產出是逐段標表):把標題與各段標並排,逐個問這一節在不在標題的範圍內——這個問題沒有出現在任何其他 frame 裡,而它抓的每一句都合規,所以字句層掃不到、事實查核通過、steelman 找不到反例、冷讀也讀得懂。兩種落在範圍外的形態各有處置:段標帶著推導的連接詞(於是、所以、因此、可見)交代的是作者從 A 走到 B 的那一步而讀者要的是 B,把連接詞之後刪掉、前半通常就是完整的段標;一整節在講比標題更泛的東西(一套適用於一類對象的程序、一類現象)移出去獨立成篇,並在待辦裡寫出那一節的實際內容而不是只寫標題——寫不出內容的條目等於刪掉。第三種形態(可信度斷言)有關鍵詞、在 Round 1-A 掃。產出是一張逐段標表(段標 / 在不在標題範圍內 / 判定為在的理由或處置)——沒有列出段標的「已對齊」不成立。判定依賴標題夠具體:標題本身是寬泛的傘狀詞時範圍內與範圍外分不開,這時要先收窄標題再跑。見 文章寫題目本身
-
D: 體例與定位一致 — 拿派發前寫下的那一句定位,逐節問「這一節的體例屬於哪一種定位」。判斷標準是讀者讀完之後那個動作落在哪裡:在世界上動手(轉小火、按比例準備、輸入指令)是手冊,在腦中重新歸類(用一個框架重新詮釋已經發生的事)是教材。掃的是裝置而不是語氣,七種形態:表徵對映清單(「症狀:成因」)、檢查順序的指示、配比與參數數字、順序關鍵加上顛倒的後果、可執行的操作判準、具體器具與工具作法、序列連接詞(先、之後、最後)。最後一項最容易漏,把步驟編號換成它只改掉一半。產出是一張逐節表(節名 / 體例判定 / 命中哪些裝置 / 處置)。處置不刪資訊——材料與手法該留就留,改的是框架:把「照著做的步驟」改寫成「這件事為什麼是這樣」,把「顛倒的後果」改寫成「順序在這裡有什麼物理意義」。其餘 frame 對這一類全數通過的理由、以及裝置清單的量測來源,見 定位決定體例
B′ 在「看不看得懂」之外還帶閱讀節奏與引導兩問(量閱讀的成本與斷點、不只理解的可能性):(1) 讀起來累不累——這一段要讀者同時記住幾個未具名的指涉、連續幾行是高密度句、思考時間有沒有被襯出來(中文單音節、節奏快,要讀者思考的位置該刻意加字延長閱讀時間——「不僅是→不僅僅是」;高密度 × 不指稱人事物是相乘的壓迫力,每句都讀得懂的文章仍可能整篇壓迫);(2) 卡住的讀者有沒有被接住——用到前置概念的位置有沒有主動提醒與路由(「這裡會用到 X、還不熟可以先去某處建立概念、再回來讀」——檢查的工作由文章做完、不要求讀者自我檢討)、識讀落差有沒有一層層的切入點(術語分級 / 概念卡 / 讀者路線)。專案有 compositional-writing skill 時同步 invoke 取 writing-designs-the-reading-process 的完整判斷標準。
預期 finding 類型:cadence 同骨化(多篇同位置同句型)、影片詞彙橋斷裂、enumeration 模板化、行話洩漏(預設脈絡未對冷讀者交代)、單篇缺進入動機、閱讀壓迫(連續高密度句 / 讀者要攜帶多個未具名指涉)、前置概念缺主動提醒與路由、多份理解之間的分歧(指涉詞被讀出不同對象、施事者被讀成錯的人、結論被一致壓平成更強的版本)。、高頻用詞在目標語域沒有穩定所指(術語探針,控制詞收斂才採用)
B vs B′ 盲點(til/terms 實證):一組 14 張互連術語卡,知情 reviewer(讀完全部)判讀「讀者旅程」全 A,卻沒抓到每張卡都用「連到家族 / 概念家族」這個只有撰寫者懂的詞——冷讀者落在單卡會立刻卡住。教訓:知情 reviewer 的腦補正是盲點來源;原子內容必跑 B′ 冷讀 frame。
Round N:重組後遺症 frame(拆章 / 併章 / 大幅改寫之後專用)
審查過程中決定把一篇拆成兩篇、把兩篇併成一篇、或整節重寫時,那個動作本身要一輪專屬的審查——它產生的問題與內容本身的問題不同類,前幾輪的 frame 都掃不到:
- 原篇的敘事完整性:少了被搬走的那幾節之後有沒有斷裂?特別看判讀流程還提不提得到已經不在的內容、in-scope 與節點表對不對得上、以及形態段的收尾句(常見形態是原篇仍宣告「某某的後果最不直觀」而那則微案例已經隨新篇走了——宣告而不履行)
- 指向原處的外部連結:全站掃還有沒有地方以為那幾節還在原篇。帶 anchor 的優先,因為連結有效而落點錯的最難發現
- 搬運過程有沒有掉東西:把
git show刪掉的部分與新篇的內容逐段比對。有沒有句子在搬運中消失、或被改寫成較弱的版本 - 被移動內容的定位宣告:新篇宣告的前提對它自己的全部內容都成立嗎?常見的是拆出去的幾節裡只有一節符合新篇宣告的前提,其餘兩節的適用範圍其實更廣
- 待辦清單的除籍:這次拆併回收了哪幾列?逐一確認那一列的內容真的全部完成——隨新篇走了的與留在原篇的要分開算
Round 3:Self-application / Steelman / Outbound frame
修完 Round 2 後、改用「meta / 知識淵博讀者 / 跨章影響」frame:
-
A: Self-application sweep — 用本 batch 寫的 report 卡 / 規範 self-grep 同 batch 稿件、catch 規範化後仍犯的同義變體(per #147 規範化跟自審)
-
B: Steelman / Reality test — 知識淵博讀者視角、檢查判讀訊號 / 取捨表 enumeration 是否窮盡、有無稻草人、數字 / 閾值有無源頭。承重論點的 steelman 要用兩次:claim-driven batch(承重論點錯了下游要大改的——方法論主張、核心假設、跨稿件共用 spec)的那個論點,該在動筆前先 steelman 當生產閘門,這輪 Round 3 steelman 是第二次(全面收尾);只在 Round 3 才挑戰承重論點=太晚,錯誤已寫進 N 個檔、跨檔回改。承重論點常是「只有一組 X」「所有 Y 都 Z」的全稱 / 唯一性宣稱,反證靠逐條枚舉候選反例、別把「還沒找到反例」當「不存在反例」。同源自審對自己的地基有盲區、承重論點的挑戰交對抗 / 異源 reviewer。
steelman 有一塊天生打不到的地方:它找的是說出口的主張的反例,而未言明的實作前提不是主張,因此躲得過它、也躲得過事實審查與斷言審查——三者都預設要被檢驗的東西已經被寫出來(per 軸是對的而底下有未言明的實作前提)。prompt 要多一條指示才抓得到:除了挑戰說出口的主張,另外找「這套判斷標準假設東西存在哪裡、用什麼形式存、誰來查詢它」這類文中答得出來卻沒被寫成選擇的假設。可辨識訊號是費力——一整套機制的存在理由若是「否則會很貴 / 很慢」,先查那個困難是問題本身的性質、還是選定的容器帶進來的。實測一次抓到整章的取樣窗口設計是為了繞開一個由「用時間序列實作」這個從未寫出的假設造成的成本問題。
本批在前幾輪採納的替代結構是這一輪的必查對象。 它在 Round 1-2 被提出時是為了修掉一份具體的缺陷清單、逐項屬實,因此沒有被任何一輪當成待驗項;而它帶進來的新性質(維度不正交、判斷標準無法執行、要求的輸入取得不到、對反例免疫)與那份清單零交集。prompt 要明寫它是「本輪審查的產物、由 reviewer 提出而作者採納、沒有經過獨立驗證」,否則 reviewer 會把它當成既有前提。判讀與三題驗收見 替補結構的豁免來自它修掉的清單。
另一類 steelman 抓得到、而字句與結構層抓不到的是軸名取了次好的代理變數:正確的機制寫在括號或下一句的理由裡,而標題與軸名用的是它的代理(per 軸名取了次好的代理變數)。反例集中在同一處、且都指向「這個名字宣稱的因果其實由別的東西決定」時,反例本身就在指出真正的機制。
-
C: Outbound impact audit — 既有章節應該但沒引用新章節的反向引用、knowledge card 缺口、跨章節整合段缺位
-
G: 共同前提盤點(跨篇、批次寫完之後跑) — 前面所有 frame 的檢查單位都是單篇,包括 outbound 也是「既有內容該不該指向新內容」這種單篇對單篇的方向。這個 frame 的單位是整批:把這批各篇的前置段、寫作邊界宣告、以及「這要靠 X 才做得到」這類前提句抽出來並排,找同一個判斷被三篇以上當前提而沒有任何一篇承接的情形。它在單篇視角下不落空——每篇都給了自己那一角、讀者當下走得下去——所以逐篇審查不論多細都看不到(per 共同前提沒有住址)。前置段是最常見的藏身處,因為它確實是本篇的適用性閘門、主題也對得上,「不屬於這篇」那條檢查因此不觸發;辨識訊號是那一段回答的問題比本篇主題更早發生、且對別篇同樣成立。判別缺卡還是缺章:同一個定義重複=術語(建卡),同一條判斷軸的不同角重複=缺章(取捨需要並置)。這個 frame 的 finding 形態特殊——它產出的是「該有而不存在的篇章」,所以修法多半是登記待辦而非當場補;產出要標明各篇的哪一角屬於它,否則下一輪又會被逐篇修回各篇裡。「不存在」這個宣稱在採納前要全站反證(搜前提句的原話、可能的 slug 形式、同義詞)——實測一次「缺章候選」的主題已有一張 slug 逐字對應的既有卡、outbound reviewer 的全站掃描漏掉它;錯誤的缺章宣告會誘發重複建卡、比漏報更貴。整合者對缺章 finding 的預設處置是「登記待驗證」、驗證通過才升「登記待辦」。
同一個 frame 的另一半是「兩個住址」:一個對象被兩篇各自分解一次(各給一套階段表、欄位組或責任清單、成員數與切點不同)。它跟零住址共用同一個盲區來源(檢查單位是單篇),而且雙向連結齊備仍然失效——讀者帶著一套的判讀結果到另一篇對不到任何一格,所以既有的跨篇維度(連結有效性、引用準確性)與逐篇審查全部會通過。操作是對整批列出所有宣告一組固定成員、要求逐項填寫的段落,不論它排成表格、編號清單或連續散文,再把鍵欄描述同一類對象的那些並置。掃描條件不可寫成「帶表格的段落」——一次實測的六個住址全是編號清單、沒有一個是表格,而那個條件是從幾個恰好用表格承載的實例歸納出來的,把載具形式當成了判斷標準、照它跑會漏掉全部。並置後跑雙向對映(成員能不能互相對映完整;對映前先對齊粒度與層級,責任對欄位、內含對並列會給假陽性,同名異義會給假陰性)與動作測試(讀者會不會為這件事做同一個動作兩次)。計數只算同層的住址:不同層的分解(責任對欄位)處置是對齊語彙、不是收斂,混算會讓收斂範圍多出不該進去的對象。
判定為不相容時的修法不是同步兩套(那是有共同起源的副本漂移的修法、對平行發明會產出兩邊都不像的第三套)、也不是並陳讓讀者對照,而是選單一載體:判斷標準完整度決定哪一套內容留下、引用數只決定住址搬不搬、同一對象已有卡時卡通常是住址。三條操作要求跟著載體選擇——引用數要數指向那組成員的引用、不是指向那一頁的(整頁入連通常由該頁的主題帶來、與這組成員無關,一次實測相差一個量級而據此選錯了理由);兩套各有對方缺的成員時載體要先補齊才有資格當載體(收斂不是挑一套刪掉另一套);補齊時檢查新成員的名字在載體上有沒有被佔用的近義詞(否則會把同名異義搬進唯一的住址)。明示自己是子集或簡化並指回權威處的那一套不觸發(導航層合法)。
-
D: Persona coverage(outside-in) — 列出目標讀者可能進入這套教材的情境(新專案從零開始、接手別人的環境、救火後正規化、被要求稽核合規……),檢查每個情境是否有對應的入口文章。inside-out review 在既有結構內找問題,persona coverage 質疑結構本身的覆蓋範圍
-
F: 誤用 / 激勵梯度(審查對象是規則 / 協議 / 規範 / 流程時啟動) — 前面所有 frame 問的是「規則對不對、清不清楚、有沒有漏維度」,這個 frame 問一個趕時間、想通過檢查的執行者會怎麼「合規地」執行它。對每條可操作的規則問三題:最省力的遵循方式是什麼 / 那條路徑與意圖差多少 / 規則本身有沒有擋住它。第三題答否時補的是痕跡不是語氣(per 判定型規則要規定判定的痕跡)——沒有痕跡的判定不可證偽,判斷標準是「認真做過與完全沒做,產物有沒有差別」。塌陷方向可預測:沿著零後續動作的那個結論走(判成不適用 / 不需要補 / 份量不夠),那個結論最省力也最難質疑,因為它不產出任何東西可供檢查。四個高頻形態:不適用清單只列類型不要求舉證(變成規則的關機鍵)、數量上限被當配額(「一兩個」的下限是一)、三級量表的中間值兩邊都不必舉證、「暫緩」類條款沒有觸發回補的觀察者(退化成永久豁免)。實測一輪十一項 finding、全部收斂成同一形狀——這個收斂本身是訊號:逐條再補限定句會讓規則膨脹到需要導讀,補到三條就該停下來抽共用原則。
-
E: Search landing 粒度(outside-in) — 列出讀者可能搜尋的 5-10 個具體問題(如「怎麼輪替 AWS access key」「FTP 站台怎麼做自動備份」),檢查每個問題能不能落在一篇聚焦的文章上、還是被埋在綜述的某個段落裡。跟 B′ cold-read 的差別:B′ 看「落地後讀不讀得懂」、search landing 看「能不能落地到足夠聚焦的內容」
-
H: 個案實跑(instance 軸、判斷標準型內容必跑) — 不做抽象審查,拿三到四個具體個案把判斷標準實際走一遍,逐問記錄答案。判斷標準型內容(判定序、分類法、排序準則、選型三問)用讀「這段話對不對」驗不到它的實際行為,要照著走一次才看得出會停在哪裡。個案要涵蓋規模、約束型態與消費者形態的極端(極小團隊 / 受稽核 / 合約約束 / 非人格消費者),每個個案 × 每篇要產出四欄:判斷標準走到哪、答案可不可執行、有沒有涵蓋該個案的關鍵約束、有沒有給出荒謬或危險的答案。prompt 要明令「判斷標準答不出來就記錄答不出來、不要虛構文章沒寫的內容來填補」,那正是這輪要找的。兩次實測都由這個 frame 產出該批最高價值的 finding:一次抓到判定序的兩個出口自相矛盾(三輪抽象審查加一次通讀全部放行),一次抓到四個個案的瓶頸其實是同一個缺席的變數,而那個變數在抽象層讀不出來——四個停頓點要並排才看得出對齊。它也是唯一會抓到「照這篇做會違約 / 違規」這類後果的 frame。
停頓點要並排,而且要先問輸入端。 這個 frame 的產出價值集中在把所有個案的停頓點放在一起看:逐案讀只會得到一堆互不相干的小問題,並排之後常會發現它們缺的是同一個維度。最高頻的形態是判斷標準只收「表徵」一個輸入,而產生表徵的那個條件被折疊掉了——即使那個條件在正文裡佔了整整一節(處置句寫著只有某一種執行環境才有的操作名詞,而內容涵蓋的環境不只那一種)。派發前先自己數一個便宜的指標:判斷標準的分支數少於正文自己列出的種類數時,就有種類落在所有分支之外,而落在外面的通常正是最需要判斷標準的那幾個。個案要刻意挑落在那些種類上的。判讀與修法見 判斷標準只收表徵。
預期 finding 類型:同義變體(grep pattern 漏抓)、enumeration 不窮盡、反向引用斷裂、新概念缺卡、讀者情境缺入口、搜尋問題缺聚焦文章、判斷標準在真實約束下給出不可執行或危險的答案。
Round N 規劃判讀
停止判讀的前提是報告已在手上:收到 idle 通知不等於收到報告。 idle 通知代表 reviewer 執行緒閒置、不代表報告本體已透過 SendMessage 送達主線程(回報方式要求見上方「Reviewer prompt 結構」)。逐一確認每個 reviewer 的報告本體已達,才能開始判讀下列四個停止訊號——把「已經 idle」誤讀成「已經收到」,會在報告仍在原地遺失的狀態下就宣告某個 frame 已涵蓋。
Round 1-3 是硬底線、直接跑不問。Round 3 結束後才進入「是否需要 Round 4」的判讀。四個停止訊號齊備、停:
- 新 frame 想不出來:team 腦力激盪 30 分鐘想不出「能 catch 新東西」的 frame
- 七軸動完:per #126、frame / instance / surface / scope / cadence / timing / granularity 七軸都用過
- Finding 性質退化:新 frame catch 到的 finding 又退回 surface 層
- 修法成本反轉:修一個 finding 成本超過讀者實際感受價值
任二齊備、可以判定「真的夠了」。任一齊備、繼續但要主動規劃 frame 切換。
四個訊號之外還有一個前置條件:整體通讀。 所有 frame 跑過、所有 finding 修完,不等於這份內容現在是好的——修法本身改變了被審查的對象,而兩次各自正確的修法可以合成一個對兩個 frame 都不可見的缺陷(per 多次修法會合成缺陷)。停止之前要有一次以整體為對象的通讀,判斷標準是「這份內容現在讀起來像一個人一次寫完的嗎」。逐條檢查修法產物不能取代它——合成缺陷在那些條目之間。
同一輪還要重讀共用產物:入口頁(路線敘述)、待辦清單、索引。它們被每一輪修改、卻不在任何一輪的審查範圍裡,因為每輪的 frame 都是對著內容設計的。入口頁看「這幾條路線現在還通嗎」,待辦清單看「這幾列真的都還沒做嗎、做完的真的都刪了嗎」。
Reviewer prompt 結構
每個 reviewer 用 background agent、prompt 結構:
你是 [frame 名稱] 審查員。任務是用 [frame 描述] 對 N 篇稿件做 audit。
# 必讀規範
- [規範檔案清單]
# 審查目標
- [章節 / 報告卡完整路徑清單]
# 審查維度
[3-6 個具體維度、每個帶 grep pattern 或檢查方式]
# 不要做
[排除已被前面 round 覆蓋的維度、避免 finding 重疊]
# 輸出格式
- 嚴重(必修):違反 [規範]
- 建議(可改):可優化但非阻塞
最後給「整體評估」分級。
報告 1500 字內、不修檔案。
# 回報方式
完成後以 SendMessage({to: "main"}) 主動送出報告本體,不可只靠任務結束/idle 通知帶回。預期報告會超過單則訊息長度上限時,先在此指定切分維度(如按審查維度拆)與每則標號方式(如 1/3、2/3、3/3),不要等被截斷才臨時決定怎麼拆。
關鍵設計:
- 「不要做」段必填:排除已被前面 round 覆蓋的 frame、強制 reviewer 進入新維度、避免 finding 重疊
- 平行 background 跑:3 個 reviewer 同時跑、主 context 節省 ~80% token
- 輸出限長(1500 字):避免報告自我膨脹、強制 reviewer 精煉
- 輸出格式是欄位契約:每個 finding 帶固定欄位(位置、問題描述、嚴重度、建議修法)、下游的整合 punch list 靠欄位運作 — 漏欄位的 finding 整合時只能退回原報告重讀、平行 reviewer 省 context 的效益就被吃掉。位置欄用「檔案 + 段落語意標題」、行號在多 reviewer 平行修復中會漂移
- 判定型規則要指定痕跡:reviewer prompt 裡凡是要求「先判斷 X、再依判斷做 Y」的維度,同時規定判定要留下什麼可複驗的產物(判定的結果 / 判定的範圍清單 / 判成零後續結論時的依據)。少了這一項,「已檢查、無發現」與「沒檢查」在報告裡長得一樣,而最省力的判定結論通常正是那個零後續的。詳見 判定型規則要規定判定的痕跡
- SRP 違反要標路由目的地:reviewer 標記「這段不屬於這篇」時要同時標「建議的目的地」— 只標前者不標後者,修改者容易選最省力的動作(刪除),而不是最正確的動作(路由)。詳見 misplaced-content-routing
- 回報方式必須明寫、不可預設 idle 通知帶回報告:背景 agent 的最終回覆文字不會自動送達主線程,主線程只會收到 idle 通知——兩者是不同訊號,idle 通知代表執行緒閒置、不代表報告本體已交付。prompt 沒明寫
SendMessage({to: "main"})要求時,reviewer 完成審查後報告會原地遺失,主線程需逐一索取才拿得到(實測一輪 7 個 reviewer 全數如此,多耗五個往返)。通道細節與根因見.claude/references/agent-dispatch-template.md「交付通道速查」維度二(PC-BAL-038)。長報告即使壓在 1500 字內仍可能在傳輸端被截斷且無訊號,須在 prompt 內預先約定切分方式,不要事後才補救
整合 finding 跟 fix 工作流
每輪結束後:
- 跨 reviewer convergence:3 個 reviewer 報告中重疊的 finding 優先序最高(per #138 cross-reviewer convergence)
- 整合 punch list:列嚴重 / 建議 / 不修三層、估每項修法成本。轉述 reviewer 報告進 punch list 時、保留原報告的嚴重度與義務模態 — 「必修」在摘要裡降級成「可改」、後續的修法範圍確認就建立在失真清單上;摘要壓縮要保留模態、不只保留內容
- 跟用戶確認修法範圍:「修必修 + 建議全部修 / 只修必修 / 全部 backlog」用 AskUserQuestion 取得方向
- reviewer 提出的是「替代結構」而不是「修一處」時,採納之前先驗它(per 替補結構的豁免來自它修掉的清單)。辨識訊號是它的理由寫成「這樣一次解掉前面那 N 項」而 N 大於三 —— 那份清單就是它的豁免證明,逐項可核對且全部屬實,於是質疑它等於質疑一個剛證明過自己有效的東西;外部來源再多帶一層「別人想過」。重問殺死前任的那個問題驗不到它,因為它正是為了回答那個問題而被提出的,會逐項答對而檢驗通過。要問的是新結構自己的三題:維度兩兩正交嗎(其中一個維度的成本是不是另一個維度的變數的函數)、宣稱的判斷標準拿一個具體個案走得完嗎、它要求的輸入取得到嗎。在它有自己的驗證之前不擴散到下游(骨架重寫、路由描述、鏡像同步都先停)—— 傳播成本 × 推翻機率才是採納這個動作的真實代價。實測一次:Round 2 採納的骨架被 Round 3 的三個 frame 從三條路徑獨立推翻,而中間已經擴散到二十餘個檔。
- 修法落在別人的段落上時,讀完那一段再改:合成缺陷高頻發生在「為了修 A 而動了 B 段落」的情形,而動的人只讀了要插入的那個位置。同一條適用於除籍——刪掉一列待辦時要寫出它是被哪一次改動完成的,寫不出來的多半只做了一半,而刪掉它等於讓那個缺口不再被系統性發現
- 每個 finding 修完之後,掃的是那一類、不是清單上的那幾行(per finding 清單列的是抽樣位置)。reviewer 列出的是它抽樣到的位置,而清單的形式(位置、原文摘引、嚴重度、建議修法)在暗示完整性,於是「執行完清單」被讀成「處理完問題」。修完用該 finding 的特徵字串掃整批稿件——命中歸零、或剩下的都逐處判定合規,才算這一條處理完;掃描指令先拿一個已知會命中的字串驗過管道(零命中有兩個來源,指令寫錯的那一個看起來跟乾淨一模一樣)。論元結構、並列轄域、語域這幾類沒有穩定關鍵詞,掃不出來的改派一輪限定 scope 的複掃,指令只說「找出這一類的全部位置」而不給已知的那幾處——給了的話回報會收斂到那幾處附近。留下的舊實例比新引入的變體難抓:新變體下一輪近 frame 撞得到,舊實例因為這一類已經回報過、後續輪次不再掃它。
- 拆 commit:按 frame 拆 2-3 個 commit(如 commit 1 處理規範 frame finding、commit 2 處理 cadence frame)
- 驗證 + commit:專案 markdown 工具鏈(如 mdtools lint / cards / fmt)跑過、各 commit 帶清楚的修法描述
修法生效要另外量測
修完不等於修好,而兩者在產物裡看起來一樣——finding 被劃掉、檔案有 diff、commit 訊息寫著修了什麼,這些都不證明那個缺陷不再發生。
驗收方式是拿原本那組問題重跑一次:把當初暴露缺陷的 reviewer 或探針指令逐字複製,餵給修好的版本,看回答有沒有從缺陷態翻轉。指令要逐字相同,否則翻轉可能來自問法變了。這一步只對當初有明確錯誤答案的 finding 適用(讀錯了什麼、指不出第一個動作、找不到某份清單),開放式的品質意見沒有可翻轉的基準。
實測一次:修完之後四題有三題翻轉,第四題沒有——而沒翻轉的那題,兩份回報給了不同的理由,其中一個經查證不成立(宣稱該段落位置太後面,實測在全檔前百分之九)。若只看「兩份都說還有風險」就動手,會照錯的理由去搬動段落;成立的那個理由指向的是完全不同的修法(規則寫成了假設、假設不成立時沒有退路)。
所以這一步同時擋兩件事:宣告修好而其實沒修好,以及照著錯的理由再修一次。它也把 歸因先於處置 推到驗證階段——那裡歸因的對象是回報的內容,這裡歸因的對象是回報給出的原因。
驗證通過的部分不要再動。「再看一遍總能找到東西」與「量到修法生效」是兩件事,前者沒有停止條件。
跨 batch 的 finding 升級
同類 finding 第二次出現、代表 review 端攔截已證明不夠、把規則往上游升一級。升級階梯:
- Review 端(第一次出現):寫進 reviewer prompt 的審查維度、由 reviewer 掃
- 生成端(第二次出現):寫進生成前的輪替表 / 檢查清單、寫的時候就避開(per cadence 同質化的生成端輪替)
- 工具鏈(偵測 pattern 穩定後):規則的偵測面若能用 regex 表達、進專案 lint 的警告層。警告層的設計沿用「命中是候選、不是判決」— 自動掃描只負責曝光候選、語意判定留給人;自動化的價值是存量 debt 持續可見、不再依賴 review 記憶
升級條件兩條:偵測規則已穩定(同一 pattern 連兩個 batch 有效)、誤判可控(有明確的豁免形態、如引號內的反例引用)。register / stance 類規則(喊話 / 誇飾 / 必然性框架)的判定無法 regex 化、停在生成端、不硬升工具鏈。
register 違規的異源複核操作
register 違規(重點後置、喊話、誇飾)的同源自審有上限(見「命中是候選、不是判決」段)。對這類要做窮盡複核時、跑一套「降低同源慣性 + 交接異源」的操作、而不是再疊一輪同源 reviewer(加再多輪都跨不過同源盲區):
- 機械候選曝光:先用工具鏈(lint 警告層 / grep keyword bank)對 review 範圍跑、得一份客觀候選池。這層不靠 LLM 判斷、不受同源盲區影響、確保「偵測」不漏 —— 判定才是同源弱點,偵測交給機械最可靠。
- 對抗文體 agent:指派 reviewer agent、prompt 明確採對抗姿態 ——「挑剔否定起手 / 概念後置、預設違規除非能證明合規(核心概念在句首 / 明示反例段 / 「」內引用)」。對抗姿態抵銷「讀起來自然就放行」的同源慣性、但它仍是 LLM、不是真異源。
- 複核清單分層交接:agent 回報不當定論。把結果分兩層 ——「機械可確認」(pattern / keyword 命中、客觀)跟「register 判定」(這個命中是不是違規、同源判斷)。前者可信、後者標「需異源複核」。
- 人異源定奪:把「register 判定」那層攤成清單、交給作者以外的眼睛(人類冷讀)定奪。這是唯一真異源、register 違規的最後一關。
關鍵紀律:agent 回報的 register 層「clean」不可當真。這套操作降低同源慣性、提高候選曝光率、但不取代人異源 —— 它的產出是「給人複核的清單」、不是「已複核乾淨」。
判斷兩個維度該不該合併:隔離實驗
frame 清單長到一定程度之後會反覆出現同一個問題——某兩個維度是不是同一件事、能不能合併省一輪。憑推理判會錯,因為判的人同時懂兩個維度,看不出哪些東西是靠另一個維度才看得見的。用隔離實驗量它。
做法是同一批稿件派兩個 reviewer,各自被硬性限制在一個維度內:
- 限制要寫進 prompt 且是硬的。實測用過的兩條——「你只能讀這一個檔案,不要開啟任何其他檔案、不要跟隨任何連結」與「不要對單篇提『這一段可以寫更好』的建議,重複回報視為無效」。限制不夠硬時 reviewer 會自己補足另一邊,實驗就失去分辨力。
- 兩邊都要對每個 finding 標記交叉可見性:這個 finding 用另一個維度抓不抓得到(僅本維度可見 / 兩者皆可見 / 僅另一維度可見)。這一欄是實驗的主要產物,要在 prompt 裡明說它是必填。
- 讓其中一邊回答方法論問題:你這一輪的 finding 各由哪一種動作產生、那些動作該不該算同一個 frame。執行過那個維度的 reviewer 比事後看報告的人更清楚它實際在做什麼。
判讀結果看兩件事。互斥率——各自有多少項是對方結構上看不見的;兩邊都有相當比例時誰都不涵蓋誰,合併會漏掉一整類。動作性質——同一輪裡若混了時序動作(模擬帶著問題的讀者,只看得見他當下看得見的)與全域動作(離開讀者視角、對全站窮盡查證),那是兩個 frame 而非一個,而且要分開派:有檢查表的那個會擠掉沒有檢查表的(per 宣告的組合不等於執行的組合)。
一次實測的數據當參考:冷讀 14 項有 7 項是路線讀者看不見的、走路線 8 項有 6 項是冷讀者看不見的,而路線那一輪自報 finding 約各半來自「走路線」與「比對宣告與內容」。結論是不新增一輪,而是把混在一起的兩個動作拆到既有的兩處——這個結論與實驗前的預期不同,那正是跑實驗的理由。
跟既有 skill 的關係
case-first-module-workflow(若專案已採用此 skill)的 Stage 4 含「agent team review」但偏 case-driven 單輪。Multi-round-review 補完跨輪 frame 切換維度、可以接在 case-first 的 Stage 5 之後或同時使用。compositional-writing提供寫作原則(intent-revealing、grep-friendly)+ 字句層 grep keyword bank(正向陳述 / 口語修辭 / 地區用語 / 廢話前綴 / 裝飾符號)。本 skill 啟動時應同步 invoke compositional-writing — Round 1-A 寫作規範 reviewer 必須跑 compositional-writing 的字句 grep(見上)、Round 2-A cadence reviewer 引用其 multi-pass review 第 6 原則跟 cadence-homogenization 原則卡。兩個 skill 是垂直協同:multi-round-review 給 frame 切換結構、compositional-writing 給每輪 frame 的具體檢查清單。- 協同觸發:用戶說「多輪審查 / 寫作 audit / batch review」時、兩個 skill 都該 surface — multi-round-review 規劃 frame、compositional-writing 提供每 frame 的 keyword bank。單獨用 multi-round-review 容易漏字句層、單獨用 compositional-writing 容易漏跨輪 frame 規劃。
business-analysis提供商業分析的 7 步驟流程和 7 個分析模式(分母意識、邊際貢獻、正常化 EPS、關係人交易、三面受壓、結構性 vs 一次性、供給衝擊 vs 週期)。審查的內容涉及財報判讀、產業比較、估值時,Round 1-F 應同步 invoke business-analysis skill — 用其 7 步驟作為分析完整度的 checklist、用其 references/ 的判讀條件表驗證文中的分析是否到位。跟 compositional-writing 的垂直協同關係相同:multi-round-review 給 frame 結構、business-analysis 給商業分析維度的具體檢查清單。
反模式
- 用 finding 數遞減當停止訊號:上一輪修完、下一輪 finding 變少就停 — 會錯過「更深層 frame 仍有 finding 待 catch」的時機
- 同 reviewer 跑多輪:per #114、同 frame 多輪 catch 高度重複、無增益
- 跳過 frame 規劃直接派 reviewer:「再來一輪 audit」沒指定 frame 切換、reviewer 用同方向掃同類問題、是 #114 的具體實例
- 單跑字面 grep 修法:修完字面層(編號、broken link)就以為到位、漏掉結構層(cadence)跟同義變體(per #147)
- 用單一模板修 cadence 同質化:為破一個模具立「一律 X」的生成端規則、均勻套整批、會收斂出比原模具更密的新模具;「套了破模具規則」的自我感覺遮住「規則本身是單一模板」、同源逐張自審全 clean。修法要輪替多個 framing(不換統一模板)、且把修法產物納入整組跨卡異源 cadence 重掃(per 均勻修法複製新模具)
- 跑臨時子集卻當成跑完整框架:只派幾個臨時擬的 reviewer frame + 一次 grep、就回報「review 完成 / clean」—— 漏抓後容易誤判成「框架不足」(design gap)而去加 frame / keyword、實際是「沒跑完該跑的輪」(execution gap)。漏抓先分 design gap(改框架)vs execution gap(改執行、別只加 keyword);register/stance 類(喊話 / 誇飾 / 必然)尤其要靠 reader simulation + external cold-read、不是加 keyword(per compositional-writing 的 multi-pass-review-frame-granularity 原則)
- 把「多輪全過」當成「知識類型對」:歷輪 finding 全部落在字句與結構層時、「三輪全過」的語意只是「已覆蓋層全過」——斷言支撐與知識類型層若沒有 frame 負責、錯的知識類型(披著教學結構的經驗談)會全數通過。finding 類型分佈本身是訊號:全部集中表面層 = 深層無人在看、下一輪排斷言支撐 frame(per claim-support frame)
版本紀錄在同目錄的 CHANGELOG.md。