路由條目要自包含:跳轉單位不依賴鄰條上下文
結論
路由段落(文章尾端的「下一步」、索引頁的「依情境讀法」、MOC 的分流清單)的每一條 bullet 是獨立的跳轉單位:讀者用「掃到符合自己情境的那條就跳」的模式使用它、不保證讀過鄰條、更不保證記得鄰條連去哪。所以每條路由要自包含——完整的目標文章連結加上語意標題錨點、兩者都顯式寫在句內。「見同篇的 XX 段」「同上一條那篇」這類鄰條指代、把跳轉單位的完整性押在「讀者剛讀過上一條且正確解析了指代」上、其中「同篇」還有第二重歧義:讀者更容易把它解析成「本篇文章」、然後在錯的文章裡搜一個不存在的段落。
同一篇目標文章被多條路由指到是正常拓撲、重複完整連結合規。路由的拆分單位是讀者情境、不是目標文章:兩條 bullet 各自回答不同的讀者問題(「怎麼把工具接進告警」vs「工具的盲點與替代方案」)、即使都指向同一篇、也該是兩條各自完整的路由;為了「不重複連結同一篇」而讓第二條退化成指代、是把排版潔癖放在導航正確性前面。
為什麼指代在路由段特別危險
正文段落裡的近距離指代(「上述設定」「這個機制」)有線性閱讀保底——讀者順著讀、指代對象在幾行之內。路由段落的閱讀模式是跳讀:讀者帶著自己的情境掃過清單、只在命中的那條停下。這條 bullet 對他而言就是全部上下文、鄰條等於不存在。同一個指代詞在兩種閱讀模式下的風險完全不同、所以「正文可以用的寫法」搬進路由段就變成缺陷。
「同篇」的失效還有一層時間性:路由清單會被增刪重排。今天「上一條」指向 A 篇、下次插入一條新路由之後、「上一條」silent 指向 B 篇——跟位置編號引用的漂移是同一型(引用字面完好、語意指向錯的對象、比 broken link 難偵測)。
反模式
- 鄰條指代:「見同篇的 XX 段」「也在上面那篇」「同前述文章」——第二條路由的目標容器要讀者從鄰條推斷。
- 憑印象轉述錨點:指代之外、段名「機器死掉的盲點」是憑記憶轉述、實際標題是「整台機器死掉怎麼辦(監控自己的盲點)」——讀者即使找對文章、拿錨點去搜也落空(此半屬 #155 的錨點字串層)。
- 依目標拆條:反向的失效——同一個讀者情境因為涉及兩篇文章被拆成兩條、讀者要自己拼回完整答案。拆分判準始終是情境數。
修法
- 每條路由 = 情境 + 完整連結 + 語意錨:句型是
{目標情境描述},見 {文章標題連結} 的「{實際段落標題語意半邊}」段。連結重複出現是可接受成本。 - 錨點寫之前回目標文章對原文:段名逐字取實際標題的語意半邊、不憑印象轉述(同 #155 的引用紀律)。
- 掃描候選:
rg "同篇|上一條|前述|上面那篇|該篇" content/— 命中是候選:正文段落的近距離指代可合規、routing 段落(下一步 / 依情境 / MOC)內的命中高風險、逐處判讀。
跟其他抽象層原則的關係
- #155 引用章節用語意標題、不用位置編號——#155 守「錨點字串」層(引用語意標題、不引用會漂移的編號);本卡守「錨點容器」層(錨點所在的文章也要顯式)。本次事故兩層各踩一次:段名轉述錯誤是 #155 的違規、「同篇」指代是本卡的違規、兩輪修正各修一層——證明是兩個獨立檢查維度。
- #157 語意錨用單一字串——#157 守命名唯一性(同一結構單位只有一個 canonical 字串);本卡的「憑印象轉述錨點」是它在引用當下的即時形態:轉述產生的字串等於臨時造出第二個名字。引用-命名鏈(#156 命名端 → #157 唯一性 → #155 引用端)之後、本卡補「容器顯式」第四塊。
- #113 商業邏輯論述要 self-contained——#113 守正文段落對 code 的依賴(「那個 payload 第二段」轉嫁讀者翻 code);本卡守 navigation surface 對鄰條的依賴。同一個 self-contained 原則在兩個 surface 的形態:正文的保底是線性閱讀、路由連這層保底都沒有、要求更嚴。
- #97 Metadata surface 要納入寫作 review 範圍——路由段落屬 navigation surface;本卡是該 surface 上的一條具體檢查項:review 掃 body 的引用時、下一步 / 依情境 / MOC 的每條 bullet 要用「單條獨立可用」的標準另掃一次。
Case
ntfy 文章的「下一步」有兩條路由都指向同一篇監控文章:第一條「把 ntfy 接進 systemd 服務失敗告警」帶完整連結;第二條「整台機器死掉時體內推送發不出來、要改用體外心跳」寫成「見同篇的『機器死掉的盲點』段」。讀者實際回報「找不到這個段落」——追查發現兩層缺陷疊加:段名是憑印象轉述(實際標題是「第三層:整台機器死掉怎麼辦(監控自己的盲點)」)、「同篇」被解析成 ntfy 篇自己。第一輪只修了錨點字串、讀者仍然在錯的文章裡找;第二輪把「同篇」改成顯式的文章連結才收斂。兩條路由的情境確實不同(接法 vs 盲點)、拆兩條是對的——缺陷全部來自第二條為了避免重複連結而做的壓縮。
判讀徵兆
- 路由段落的 bullet 出現「同篇 / 上一條 / 前述 / 該篇」而目標文章連結在別條。
- 讀者回報「找不到某段落」、而引用句字面完好——優先懷疑錨點轉述或容器指代、不是目標文章改版。
- Review 路由清單時逐條問:「只給我這一條、我知道要開哪篇文章的哪一段嗎?」答不出來就是缺口。
- 重排或增刪路由清單的 commit、掃一次清單內的相對指代詞。