Compositional Writing

以 Zettelkasten(卡片盒筆記法)為核心的寫作方法論。將每段文字視為可重複組合的原子卡片,讓人類讀者與 AI 代理人都能以最小認知負擔找到答案。


這份檔案是綱領層

SKILL.md 給的是原則、判別線與邊界;可執行的操作在兩個地方——本檔的「字句層 keyword bank」那一節(有可直接跑的 rg 指令),以及 references/ 底下各情境的 reference(有步驟與範例)。

所以讀本檔各原則時,「我的第一個動作是什麼」的答案幾乎都是同一個:到觸發路由表找自己的情境,打開對應的 reference。原則要跨情境成立,而動作只在情境裡才有意義,所以動作住在 reference 裡、不住在原則旁邊。要直接動手的人先跳到觸發路由表。

動手之前先定這一份的定位

定位決定體例,所以它在所有規則之前。 寫下一句話:誰讀、讀完要做什麼。這一句是後面每一條規則的過濾器,也是選 reference 的依據。

判別的軸不是「內容裡有沒有可執行的東西」——教材也會給辨識訊號與可以改的東西——而是那個動作落在哪裡:在世界上動手,還是在腦中重新歸類。

定位讀者體例Reference
Agent 指令、規範照著執行的執行者操作手冊:步驟編號是執行的位置,判錯代價要寫,因為執行者需要知道哪一步不能錯reference-authoring-standards.md
人類教材來理解一件事的人引導與脈絡:講清楚為什麼是這個順序,順序自己就出來;讀者要的是判讀的依據writing-articles.md
程式碼註解正在讀那段程式的人只解釋商業邏輯,不解釋原理也不冗長,因為原理讀程式碼就有writing-code-comments.md

同一個內容集合底下可能兩種定位並存:一個分類裡的文章是教材,而它的目錄頁是那個分類的操作手冊;整個子集合也可能兩邊都不是,例如一份歸納問題與解法的記錄——讀者不是來理解一個主題的,而可執行的那一半住在別處。定位按稿件要讀者做什麼判,不按它放在哪裡判。

會讓稿件被讀成手冊的裝置(掃裝置比掃語氣可靠):表徵對映清單(「症狀:成因」)、檢查順序的指示、配比與參數數字、順序關鍵加上顛倒的後果、可執行的操作判斷標準、具體器具與工具作法、序列連接詞(先、之後、最後)。最後一項最容易漏——把步驟編號換成它只改掉一半。

處置不是刪掉資訊:材料與手法該留就留,改的是框架——把「照著做的步驟」改寫成「這件事為什麼是這樣」,把「顛倒的後果」改寫成「順序在這裡有什麼物理意義」。詳見 positioning-decides-form-before-any-rule-applies。

每一句先填槽位再成句(生成端規格)

上一節定的是整份稿件的定位;這一節定的是每一句的規格,寫的當下就用,不等審查。

描述一個操作的句子由四個槽位組成——動作者(人、腳本、工具、系統元件)、動詞(這個領域裡的操作:執行、轉換、比對、寫入)、受詞(動詞在這個領域裡能作用的對象)、結果(輸出或狀態變成什麼)。每個槽位填的都是這個領域裡實際存在的東西;量詞計數的是領域裡的單位。

寫操作句的順序是先列槽位再成句:

槽位遠端沒有執行任何指令遠端一個字都沒有執行
動作者遠端遠端
動詞執行執行
受詞指令字
量詞的單位指令(零個)字(零個)

右邊那一句在中文語法上完整、讀起來通順,而「執行」在這個領域裡作用的對象是指令、程式、命令——沒有任何系統逐字執行東西。「一個 X 都沒有 Y」在口語裡成立的前提是 X 是 Y 的計數單位(「一個字都沒說」成立,字是說話的單位),搬到「執行」上前提不成立,句子照樣通順,因為中文語法不檢查受詞跟動詞在領域裡合不合。讀者要做四步還原(認出慣用語 → 把字對回指令 → 把一個都沒有對回零個 → 重組),而左邊那一句直接就是終點。

判斷標準是受詞是不是動詞在這個領域裡能作用的對象:寫的當下逐句可判、不需要上下文。量詞槽位另有一條:範圍在句內具名——「任何指令」具名、單位在領域內,過;「一個字」具名、單位在領域外,不過;「徵兆完全一樣」範圍沒具名,不過,而且那篇文章的下一節給了分辨方法,「完全」跟內容矛盾。範圍寫在同一句或緊接的前一子句都算具名。判定者不代填槽位:單位要寫在句子裡,判定者從上下文推得出來不算——一次實測判定者替「完全一樣」補了「逐項相同的徵兆」這個單位然後放行,那正是規格要擋讀者做的動作換成審查者在做。判斷標準是是非題「單位有沒有寫在句子裡」,寫成「推不推得出單位」它永遠通過。先前的「拿掉強調事實變不變」要有人先拿掉才知道,是後驗的,本節的判斷標準取代它。同一個標準管三種變體:受詞填了領域外的名詞(「一個字都沒有執行」)、動作者填了指令片段(「tr -d '\r' 處理的是行尾」——被處理的是輸出裡的位元組,行尾轉換是處理的結果,「行尾」填在受詞槽位是錯的)、位置槽位填了指示詞(「字串比對在這裡會失敗」——「這裡」不是領域裡的位置)。

這一節放在生成入口、與字句層 bank 分開,理由是 bank 是反模式清單、給審查者掃已寫好的稿,而寫的人跟審的人是同一個模型時,審查端對這一類的偵測率是零——同一個模型覺得自然的句子,它寫出來、它審過去。生成器需要的是正向規格:寫每一句操作描述之前先填四個槽位,槽位填不出領域內的名詞就不成句。慣用語進不來,因為慣用語的受詞幾乎都在領域外。

論斷句、總結句、段標與過渡句同樣要填槽位,而它們的缺口多半在名詞裡。 這一節原先只寫操作句,而同一種省略在不描述操作的句子裡更常見,也更難看出來:「錯的來源不只一種,而輸出都不帶訊號」主詞與謂語都在、語法完整,四個槽位查下來全部通過,缺的是名詞自己要求的補足語——來源是什麼的來源、輸出是誰的輸出、訊號是什麼的訊號;「錯」是形容詞被當成名詞用,連什麼錯了都沒說。所以槽位多一格:本身要求「誰的、什麼的、哪兩者之間的」的名詞(來源、輸出、結果、原因、代價、差別、位置、範圍、邊界、訊號、層、線、情形)要把它的所屬寫在這一句或緊接的前一句裡;形容詞與動詞不直接當名詞用(「看不出錯」寫成「看不出答案錯了」)。判斷問句是這個名詞是誰的、什麼的,能不能從這一句或前一句逐字指出來,判定者同樣不代填。改寫:「錯的來源不只一種,而輸出都不帶訊號」→「答案錯掉的成因不只一種,而引擎一種都不會報錯」。

這一類集中在作者做抽象與收束的位置——段標、段落的第一句與最後一句、總結段、過渡句——寫到這些位置時逐句問一次。只寫在目錄頁、讀者看不到的框架詞也是同一個成因:「結果集由什麼決定,到這一篇有了完整的答案」的問題本身只存在於作者的編排底稿裡。審查端的偵測與它的量測在 noun-without-its-owner-passes-the-slot-check。

動作者那一格要問主詞能不能做這個動作,槽位另加時機與觸發原因。 「一個檔案被幾個不同的需求修改過,可以從版本歷史數出來,這個數字決定哪些檔案值得回頭讀」逐格查下來每一格都填了名詞,而讀者說不出數的人是誰、他在工作流程的哪一步去數、為什麼需要這個數字。三種形態讓動作者缺席而格子看起來是滿的:條件句寫對象的狀態、後面接沒有主詞的祈使(「一個檔案同時對上兩列時,依……來分」——誰分?)、被動句或「由……」只交代次要動作的動作者(「由工具改寫……處置是從統計排除」——誰排除?)、指標當主詞(「這個數字決定」「commit 數會把……」——數字不做決定,讀排行的人才做)。寫描述做法的句子、條件句與段落首句時,順序是誰 → 在什麼時機(讀者工作流程裡的一步,不是對象的狀態)→ 做了什麼 → 為什麼會觸發:「工程師做 code review、查看檔案的修改紀錄時,從版本歷史發現它被幾個不同的需求修改過」。判斷問句是這一句描述的事,誰做、在工作流程的哪一步做、為什麼會發生,能不能從這一句、前一句或所在段落的第一句逐字指出來(同段的祈使句沿用段落第一句寫出的動作者);動作者用文章已有的角色(讀排行的人、歸類的人、解衝突的人),指標與清單只當受詞或依據。審查修正是這一類最常見的產地:修正的人讀過審查意見,那條意見交代的情形他已經知道,於是只寫答案、把問題的主語放在句首——把審查意見改進稿件時,先把它交代的情形寫進句子再寫處置。詳見 topic-first-sentence-drops-actor-and-timing。

組織全篇的框架詞也要過槽位。 「X 回答的問題是:……」「這一層問的是……」把系統元件寫成應答的一方:健康檢查在領域裡做的是定期執行一條指令、依結果標記狀態,沒有回答任何提問,動詞與受詞兩格填的都是譬喻。寫的當下把「回答」換成元件實際做的動作(執行、量測、比對、送出、標記),把「問題」換成它實際指的那一種——問句、故障、要處理的事項、主題或需求,判斷問句是「這個『問題』翻成英文要從 question、problem、issue、topic、requirement 裡選哪一個」。框架詞還會往下游造句型:內容被當成問句引出來,就寫成正反問句;總覽句沿用「由 Z 接手」的骨架而手上還沒有具名的 Z,就寫成同義反覆的排比。三者各自的判讀在 question-answer-frame-blurs-problem-issue-request、a-not-a-question-as-noun-clause 與 parallel-clause-filled-with-the-topics-definition。

描述一個工具或指令要寫成好幾段時,段與段之間的順序跟著槽位走:讀者會看到什麼 → 這個工具做什麼 → 為什麼需要它(機制,系統元件指名)→ 不做的具體後果 → 副作用;這是段與段之間的順序,每一段的第一句仍是那一段的主題句。動作者槽位填對之後段落順序通常自動修正——操作者視角的順序就是讀者的問題序。詳見 command-fragment-as-subject-hides-the-actor 與 spoken-emphasis-is-silent-in-text。

示範指令的引數另有一條檢查(程式碼區塊適用)

上一節的判定單位是句子,而指令沒有主詞也沒有謂語,逐句填槽位的動作走到程式碼區塊就停下來。區塊裡的每一個字面值因此通過每一道句子層檢查。

示範指令有四個位置——工具、子命令、選項、引數——其中引數最需要寫:工具與子命令的名字讀者查得到,選項多半有 --help 列得出來,而引數的語意常常只有文章講得出來(路徑為什麼選在這裡、兩個引數哪個是來源、給不給這個引數會讓指令做不同的事),而且它是讀者唯一要動手改的位置。

判斷標準一句話,逐條指令可執行:讀者要把這條指令用在自己的環境上,他得改哪幾個位置;每一個要改的位置,文章有沒有說過它填的是什麼。 答「不用改任何位置」的指令不適用。

掃描入口是區塊裡的字面值、不是佔位符——<serial> 自帶「這裡要換」的訊號,/sdcard/screen.png 長得像一個完整可用的答案,於是同時逃過作者的說明義務與讀者的警覺;稿件上因此看不出缺口,那個位置填著一個看起來很正常的值

引數的有無改變行為時,兩種形態各給一條指令、並列在同一個程式碼區塊裡,各自帶一行註解說它做什麼。並列是修法本身,文字說明是補充而不是替代——只給一條、另一條用散文描述時,讀者要從那段文字重建出另一條指令長什麼樣,而他來那一節就是為了拿指令。邊界:錯誤用法不進區塊(區塊是可以複製的位置),寫在散文裡用行內程式碼標出來就夠了。

五種形態、修法與掃描指令在 literal-operand-hides-the-change-point。 散文裡夾了一段程式時,程式與只屬於某一行的解釋移進區塊寫成註解,跨行的推導留在散文——一段散文把同一段查詢或指令的零件用行內程式碼嵌進句子,讀者要一邊讀推導一邊在腦中把程式組回去(見 code-fragments-in-prose-make-readers-reassemble)。區塊怎麼排、註解裝什麼、何時改用參數表,連同 before / after 走查與檢查清單在 demonstrating-commands。

Core Pillars(核心支柱)

支柱意義
Atomization 原子化一段文字只承載一個概念,可獨立閱讀與重用
Explicit Intent 意圖顯性與層級貼合讀者第一眼就看懂「為什麼在這裡、屬哪個抽象層級、該做什麼」
Searchability 可查詢性人和 AI 都能用關鍵字 / grep / regex 快速定位

Core Principles(核心原則速查)

讀者能在本區塊完成快速複習;需要具體應用時,依下方「觸發路由」讀對應情境 reference。

1. 原子化(Atomization)

一張卡一個概念:能獨立理解、可跨情境重用。拆分依據是認知負擔與情境匹配度 — 讀者要同時記住的概念數、以及這張卡是否符合讀者當下的情境需求。常見的誤判依據是「行數」(卡太長就拆)、行數只反映表面字數、不反映概念數:一張 200 行的卡可能只講一個概念、一張 30 行的卡可能塞了三個概念。判別問題是「讀者要同時 hold 幾個概念才讀得懂這張卡」、超過 7 個就要拆。

內容壓力的出口是擴充結構、不是壓縮內容:內容超出容器的自然大小時(判斷標準裝不進表格格、概念裝不進標題、範例讓段落過長)、合法出口都在結構層——就地展開(延伸段、本篇專屬內容)、外部化成卡(跨篇可用的支撐 / 背景概念、範例寫進卡片、文章引用卡片承接論證)、或換成連結(概念在內容集合裡已有卡或專章承載時、刪掉格內自撰的 gloss 改放連結);裁內容遷就容器違規、終點形態是簡報式文章(表格當主體、格內殘語、條列連綴——簡報的正當性來自講者在場補完、文章沒有講者)。邊界:主線概念必須行內展開(外部化斷論證線);擴充的對象是結構不是句長(句層另由消費單位分配管);checklist、規格表與查表型段落(判讀徵兆表 / 對照表)的表格形態合法——消費單位是逐項執行或逐列查詢、同一機制豁免;拆卡淨收益待試點驗證、先小規模再全面。選出口前先搜內容集合有沒有既有落點(有落點就是換成連結、不寫 gloss;但程序要逐項消耗的列舉留在本篇、只有定義外部化——一次獨立冷讀顯示三篇裡「不點就接不下去」的連結全是這一類,而所有背景術語卡都判可選)。判「換成連結」之前要打開目的地把成員並排:它與「先收斂載體」在外觀上無法分辨、差別在切法對不對得上,而一次第二人分診(同一批 29 列、一致率 86%)的四處分歧有三處就出在這裡、方向全部偏向連結。,並跑一個前置檢查:查這個概念在別篇有沒有不相容的版本——用雙向對映測試(兩篇的成員並排、逐項問能不能互相對映完整、只存在於一側的成員就是不相容的證據)與動作測試(讀者會不會為這件事做同一個動作兩次:一篇的產出是另一篇的輸入是互補、兩篇是同一個動作的兩份指示是衝突);有衝突就先收斂單一權威載體——判斷標準完整度決定哪一套內容留下(殘缺的那套當載體會擴散殘缺)、引用數只決定住址搬不搬(遷移成本、非品質、而且要數指向那組成員的引用不是指向那一頁的:整頁入連由該頁主題帶來、一次實測相差一個量級而據此選錯了理由)、同一對象已有卡時卡通常是住址(理由是成員定義本來就是卡的責任)、而兩套各有對方缺的成員時載體要先補齊才有資格當載體(收斂不是挑一套刪掉另一套、補齊時檢查新成員的名字在載體上有沒有被佔用的近義詞、否則會把同名異義搬進唯一的住址)——其餘各篇沿用它的語彙並重新界定 scope,「同步成一份」與「兩套並陳」都不是修法。搜尋別篇版本時掃的是「宣告一組固定成員、要求逐項填寫的段落」、不論它排成表格、清單或散文(寫成「掃表格」會漏掉全部——一次實測的六個住址全是編號清單),而計數只算同層的住址(不同層的分解對齊語彙、不收斂)。這種矛盾單篇視角下不落空(每篇單獨讀都自洽)、要在分診階段查。兩次實測的出口分布差異很大(一次以換成連結為主、另一次以收斂載體為主),分布隨卡層覆蓋與跨章關係變動、不可推廣——每次改寫重跑分診。文章要短、讓細節搬進卡片、別讓細節消失。壓縮論證的下界是一句話的理由、不是零——把論證外移只留主張句是合法的壓縮方向,而主張句旁邊要留得住「為什麼」的那一句:一次冷讀在依此壓縮後的稿件上直指「這是對做法的否定,但沒立即說明為什麼」,沒有理由的禁令讀者記不住,也判不出邊界(邊界是從理由推出來的,理由不在場時他只能照字面套用或整條忽略)。詳見 content-pressure-resolves-by-expansion-not-compression。

串連佔掉的是本篇的篇幅,順序是先自足再往外開門:相互引用的集合會讓串連看起來像義務,而每一條引用都佔掉本來要用來講自己的位置——上一條的「換成連結」出口因此有個前提,本篇的主線不能靠它。驗收是把所有往外的連結當成不存在重讀一次,剩下定義加屬性清單就代表判斷做錯了;遮住連結之後第一個要查的是那個貫穿全篇的詞(承重術語在自己的主場最容易沒有定義,作者寫得越多陌生感消失得越早)。串連寫成條件分支(換掉哪一項會變成什麼)讓它成為本篇的內容,而分支不會順便交代目的地,承諾要另外寫——判斷標準是遮住目的地之後讀者預測不預測得出那一篇會給什麼,句型只影響命中率、不是判定條件(寫成謂語命中率高,但照句法規則判會產生假陰性)。症狀是讀得懂而說不出要交付什麼,只有問「這一篇讓你具備什麼能力」分得開。詳見 cross-links-eat-the-article-they-live-in。

拆完之後有一組新的檢查,對象是拆分自己造出來的交界:一份文件拆成多檔之後多出一個原本不存在的位置——讀者在這裡離開一份檔案、進入另一份,或者不知道還有另一份可以進。每一份單獨讀都是對的,所以逐檔的自審與逐檔的冷讀對這一類一律回報通過,要另外查。逐項檢查(新檔之間的互指對稱、位置座標不寫總數、層級不混疊、定義與使用同檔、內嵌計數改分組名、指路在首次用點,以及新檔以外的兩項:指向原檔路徑與原錨點的外部引用、原檔保留成導覽表)、切法怎麼決定層級混疊會不會發生、以及外移之後殘餘要自足到什麼程度,都在 references/structuring-with-solid.md 的〈拆完之後的交界檢查〉,判定與實測見 split-defects-land-between-the-files。

職責數從修改紀錄讀,長度不是拆分的觸發條件:有版本歷史的文件,git log --follow 依 commit 標題歸類,類數就是職責數;600 行的參數表可以只有一種職責、80 行的 README 可以有四種,長度只決定一種職責之內要不要分節。一份文件多出一種職責發生在有人加一節的那一次修改,所以加之前問:這一節的修改理由在不在這份文件既有的理由裡,以及它換到同一個內容集合的另一個分類底下會不會更合適——文章的範圍是標題與所屬分類的交集,標題常常不寫分類已經限定的條件。集中登記型文件(變更紀錄、索引)例外,改用片段檔。詳見 change-history-counts-a-documents-responsibilities 與 section-scope-is-bounded-by-the-category-too,操作在 references/structuring-with-solid.md 的 S 單一責任。

拆分標準的核心問題:「這張卡聚焦在什麼問題、議題切完整了嗎?」— 判斷標準是 focus 完整度。常見的次級訊號是「卡之間是否衝突」「邊界是否清晰」、兩者都不夠:兩張卡互不衝突、仍可能各切了一半同樣議題;一張卡邊界清晰、仍可能塞了兩個獨立議題。focus 完整度問的是「這張卡有沒有把它聲稱要解決的議題講完」、是 contrast 上面那兩個訊號抓不到的死角。

2. 索引建立(Indexing)

用 MOC(Map of Content)、tag 層級與反向索引把卡片串成可導航的網。入口文件只做路由、把細節留給目標卡;引用深度最多一層、讓讀者一跳就到答案(避免 A→B→C 的多層跳躍)。

引用錨點用語意標題、不用位置編號:引用另一個章節 / 階段 / 條列項時寫「見核心問題」、不寫「見 Stage 3」— 編號是結構排列的 derivation、結構重排時引用句字面完好、語意 silent 指向錯的內容(比 broken link 難偵測:連結斷掉會報錯、編號錯位會成功解析到錯的東西)。對應要求是每個結構單位的標題要承載核心意義(「Stage 3:核心問題」、編號只作排序前綴)、引用取語意半邊;發布方凍結的編號(RFC 段號 / 法條)是 fact、可引用。相對位置(末段 / 下段 / 上節 / 下方)是同構的另一種 derivation 而判斷標準寬一階——同檔緊鄰的合法且常比具名好讀,失效條件有兩個、各自獨立:跨檔即失效(讀者手上的「上節」是他正在讀的那一份的)、目標可能移動即失效(不報錯,成功解析到現在住在那個位置的東西)。由第二個推出位置指涉的主要來源是修法自己(寫下的當刻位置一定是對的),所以掃描的觸發是改動、不是完稿;定址型產物(地址表 / 索引 / 路由表)一律具名、不看距離。詳見 reference-by-semantic-title-not-number。

語意錨用單一字串、引用他卡用對方的詞彙:同一個結構單位的語意名稱只能有一個 canonical 字串(取標題語意半邊)。反向的形態同樣要查——一個名字承擔多個所指:一次實測裡「格」在同一個分類裡指四件事(責任位置、分類的一類、主題陣容裡的空位、某個框架的象限),而定義只掛在其中一個所指的另一個名字上(表頭與段標寫「位置」、散文寫「格」),三份理解探針對「格是什麼」全數回報「文字沒說」——定義存在、讀者卻拿不到,因為它掛在另一個名字底下。偵測靠探針而不是 grep:同名異義每一處單獨讀都通順— 同義雙名(標題「決策記錄 + scaffold 建議」、引用「決策收斂階段」)讓 grep 掃 A 漏 B、重排修復退回人腦對應。引用另一張卡並描述它的內容時、寫之前把被引卡重新打開、用它自己的分類詞彙轉述 — 記憶存概念不存 taxonomy、憑印象轉述會把對方明確分開的類別併掉、每條關係宣告要找得到被引卡的支撐句。

集合命名用角色、不內嵌數量:標題要當穩定錨、就得先是純 fact —「核心七問」「成長六階段」「四大支柱」把成員數烤進名字、數量是成員清單的 derivation、加一問名稱先失真、所有複製過名稱的地方跟著過期。命名只承載角色與層級(核心問題 / 撞牆階段 / 支柱)、數量讓清單自己呈現;外部凍結品牌(SOLID 五原則 / OWASP Top 10)跟概念閾值(兩次門檻)的數字是 fact、可留。同一個機制在散文裡的載體掃不到而數量更多:承擔指涉功能的計數(「後三列」「三則」「共用兩節」)沒有「刪掉」這個出口,且它的產生源是結構改動——寫下的當刻數字是對的,加一列、拆一檔、搬走一節就當場過期,每一輪修法都在生產新的。修法是改成不自帶計數(把數字改對只買到一輪),判別問句是這個數字由什麼決定——由會被改動的集合的成員數決定就不安全,由模式數 / 階段數這類不隨結構增刪的東西決定就安全;掃描的觸發同樣是改動、不是完稿。合規邊界:成員由機制固定且緊鄰具名展開者可帶數字(如「六欄位」「三查」);## 標題帶數字(如〈五種情境〉)須與表列數一致並註明例外成員,否則仍屬違規。詳見 name-collections-by-role-not-count。

正文裡的對象用它是什麼來命名,不用序數、計數或字母代號:名字的職責跟程式變數相同——讀者只看到名字就知道它指什麼。「三支」「七步」「第三步」「第一級」「前提一」「A1 與 C」是作者規劃結構時的索引,讀者要手上有那份清單才解得開,而作者與同源 reviewer 都持有清單,所以這一類在審查裡沒有成本、只在從中段落進來的讀者身上有。生成端就用內容名:分組用它回答的問題、步驟用動作、分級用它的判斷標準、並排的做法用描述;段標不帶序號,引用用節名或內容。判讀兩問:這個名字當變數名稱過不過得了程式碼審查;讀者從搜尋落在這一句,知不知道它指什麼。「這個集合不會再變」不構成保留序數的理由——上一條的損害要等成員增減,這一條在成員不變時就已經發生。序數名字密集的段落多半同時在寫作者的編排思路(各篇怎麼分組、兩篇怎麼分工),那些是維護資訊、不進正文。詳見 ordinal-labels-are-the-authors-index。

切開一個集合時先寫切分的依據、再替每一塊命名,之後只用名字:「一部分交得出去」「交不出去的那一半」「那一側」只說了有一刀,沒說刀落在哪裡、每一塊是什麼,讀者要從例子歸納切法。修法跟抽變數是同一個動作:第一次切的位置寫出一個可以逐項判定的依據(「判斷時要讀什麼」,不是「有的做得到」),再依序用業界術語、文章裡的案例名、描述短語替每一塊命名,之後段落首句用名字開頭。取名常會逼出內容——要把一塊叫「靜態分析」,就得說出靜態分析在這個例子上判得出什麼;「那一側」「另一邊」不必決定指的是什麼,所以寫反的論斷能藏在它底下,命名時才對不上。整體也要具名,同一組對象只用一組名字。同一個概念每次換一個描述重講一次是同一類(重複的運算式沒有抽成變數),沒有字詞可掃,寫到第二次描述同一件事時就停下來命名。這一條影響的是讀者能不能理解,審查端列為必修。判讀問句:讀者只讀這一句,說不說得出這一塊是什麼、另一塊是什麼;所屬寫在同一句的(「子表這一側……父表那一側……」)合規。命名由句子結構完成,取名的動作不寫進正文:「盲區有兩種,各取一個名字,下文都用這兩個名字」的後半句刪掉之後讀者什麼都沒少——成員兩三個時寫成「分成 A 與 B」再逐一定義,成員更多時用清單列出名字、下一段起逐一解釋;判讀用刪除測試(刪掉這個子句,讀者少了什麼:少了名字或所指就留,什麼都沒少就刪)。詳見 unnamed-halves-are-unextracted-variables。

摘要另一份內容時寫出成員,不寫計數:在介紹另一份讀者還沒讀的內容的位置(文章結尾指向下一篇、description、目錄頁交付欄、閱讀路線說明),「四個追問、三種寫法、四類邊界」只交付清單的長度——寫的人手上有那份內容所以數字對他是完整索引,讀者手上沒有。寫的當下把成員寫出來,數字通常可以拿掉;成員太多時寫共同的性質。判讀問:沒讀過那一篇的人,讀完這個片語知不知道成員是什麼。詳見 counted-summary-delivers-only-the-length。

錨點標籤的自足義務隨引用點數上升:檢索鍵位(title / 表格鍵欄 / 段標 / 欄位標籤)的精簡優先只在這個鍵只有一個消費點時成立。鍵一旦被別處逐字引用它就是錨點,而引用的形式是逐字比對——加字即斷開,所以每個引用點只交付短名本身、補完的責任全部落回讀者;短名省下的字數付一次,還原限定語的成本乘以讀者數與引用點數,而既有標籤要改時它與全部引用點必須同一次改、修復成本同樣乘上去。判斷標準是兩個問句:這個標籤裡的每個名詞,讀者知道是哪一個嗎;每個動詞,讀者知道主詞是誰嗎。省略的限定語補回標籤本身、不補在鄰欄(讀者先讀標籤才決定要不要讀那一列)。偵測的入口是引用點數(rg -F -l -- "<標籤>" <根目錄>、命中兩檔以上就是錨點),對象是定義處的標籤清單而非全文段標——用段標當代理會量到模板重複(一次實測前幾名全是 YAML、Problem 這類模板欄位)。這一類讀起來是完整的詞,所以查殘片的檢查(名詞頭、指涉閉合)全數放行、一致性掃描也無效——壓縮零星發生,周圍都是對的。例外:表頭語境下已自足的通用欄位標籤(「觸發」「反應」)、領域內一跳查得到的正式術語。詳見 compressed-label-cost-multiplies-with-citations。

3. 意圖顯性與層級貼合(Explicit Intent & Layer Alignment)

寫作前先標記本文所在抽象層級(實作 / 工具 / 協作 / 認知 / 架構)、論述停在該層。素材取自哪個層級、論述就收斂在哪個層級 — 因為跨層提升等於用 X 層的詞彙描述 Y 層的議題、讀者拿到規則但對不到自己當下的情境。要把實作層素材抽象到認知層、先補對應抽象層的支撐文件(讓論述有對應層的詞彙跟 case 可引用)、再做跨層提升。

寫「為什麼」和「要達成什麼」、把「程式碼在做什麼」留給程式碼自身(程式碼讀一次就知道做什麼、寫進註解只是冗餘)。主詞與動詞直接、段落開頭即表達意圖。TODO / placeholder 留給 inline 註解、文件本體只放當前契約 — 因為文件常被當成「契約 SSoT」引用、混入未完成事項會讓讀者誤判契約範圍。同一篇文字貼合它在系統裡的抽象層級、把下層實作藏在介面後面。

機會成本語氣優先:程式設計大多是多目標取捨、討論的是「在什麼情境下哪個選項較划算」。把絕對二元語氣(「正確概念是 X / 替代方案不足 / 應該這樣做」)翻成情境化敘述:「比較好的做法是 A、因為 [情境] / B 在 [其他情境] 合理 / D 的成本特別高、只在 [極端情境] 才划算」。機會成本教讀者「思考方式」(能套用到新情境)、絕對主義教讀者「規則」(壓力下會忘)— 所以前者是預設語氣。例外保留給物理 / 法律 / 數學事實(安全性、資料完整性、合規、雜湊必有碰撞)。絕對二元語氣有兩種形式:命令式(「應該做 X」)讀者聽得出是主張、會審;必然式(「X 天生就是 Y / 本質就是 / 必然」)偽裝成事實陳述、更隱形 — 把設計選擇講成自然法則時尤其要 catch、還原成「在選了某前提後 X 才以此形式成立」。判別線:這個必然有沒有上游設計選擇當前提(有=條件性、要講前提;無=真必然、可斷言)。詳見 teaching-prose-neutral-register。

選項數由議題本身的合理選項數決定:機會成本的精神是「教思考方式」 — 議題有幾個合理選項就寫幾個(2 個寫 A/B、3 個寫 A/B/C、4 個寫 A/B/C/D)。強湊到固定數量會把「教思考」退化成「填格式」、生出「實務上幾乎不存在」的低品質假反模式。真正的反模式直接標「D:反模式 — 違反 X 原則」、給讀者明確的「為什麼這條路該避開」、保持誠實。

讀者定位聲明(生成端前置步驟):每個教學模組在第一篇文章生成前,顯式聲明讀者定位——一段話描述目標讀者的背景、已有能力、缺的經驗。這份聲明是後續所有生成和 review 的可檢查基準。缺少顯式聲明時,LLM 預設用「教外行人」的姿態寫教學內容,這個預設不被 review 挑戰(reviewer 共享同一個預設),導致宣導語氣通過多輪審查。per outside-in reader frames

讀者定位:缺經驗的專業人士、不是外行人:技術教材的讀者是在特定領域缺乏經驗的專業人士,不是完全不懂的外行人。寫法是補足經驗缺口(直接描述情境與操作需求),不是從零科普(故事線導入、比喻堆疊、宣導語氣)。宣導式語氣(「你可能沒注意到」「把 X 想成 Y」「跑得好好的」)預設讀者無能、降低教材可信度。這條定位是能力宣稱、不是知識宣稱——它說讀者有能力理解(研究方法、開發原則、邏輯推導),不說他已經知道這個領域的名詞、原理與縮寫;兩種讀法對同一句話都通順,而只有後一種會授權省略。方向由需求決定:專業讀者要的是每個流程的原因、成本、代價與用詞精準,全部是更多的文字,所以這條原則推向展開。判別問句是這一處省略,省下的是讀者不需要的字,還是讀者要自己補回來的脈絡;省略在產物上沒有痕跡(沒補的卡不存在、沒展開的原理不佔行數),所以偵測靠術語分級表與理解取樣、不靠讀稿。詳見 audience-is-professional-not-layperson。

不寫會取代讀者查證的東西(上一條的反向配對):特定實例的值與處理方式(某台機器、某個環境、某次安裝)寫進文字之後,就佔據了讀者原本要自己查的那個位置——他要的是「我這一台是什麼」而文字給了「有一台是什麼」,而特定實例的值正好是他那一台會不一樣的那些。危害與正確性無關:值可以完全正確、來源完全可靠,而它從來就不是關於他的系統的。判別問句是讀者拿這一句去用,他是去查自己的系統,還是直接照抄;修法是換成該去哪裡查,或在機制需要例子才講得清時用明顯的佔位值並寫明它是佔位的。不受約束的三類是機制、規範定義、公開介面的行為(在每個實例上相同,查證與照抄得到同一個答案)。「標註未驗證」對這一類不夠,差別在誰承擔預設——標註要讀者的自律才生效,不寫由結構保證;而照抄的人多半搜尋直達那一行、複製、離開,路徑上不經過那個標記。伴生判斷「需要實機才寫得了」多半是把「有了會更好」講成「需要」:主題拆成「問題的形狀與該去哪裡查」與「某個實例上的具體答案」兩半之後,前一半不必等硬體、後一半不該寫。與上一條是反向的一對——那條管該寫而沒寫,這條管不該寫而寫了,兩者都在稿件上看不出來。詳見 written-value-replaces-the-readers-check。

跨專業溝通用情境遞進、不用比喻堆疊:向非本領域的專業人士(管理層、決策者)解釋技術議題時,減少術語並從簡單情境遞進到複雜情境。比喻傳遞形狀但不傳遞嚴重性、在細節處崩解、且隱含「對方聽不懂」的預設。用決策者熟悉的維度(影響範圍、恢復時間、成本量級)表達。詳見 cross-expertise-scenario-not-analogy。

技術教材內嵌管理層可彙報的資訊:技術段落旁嵌入成本量級、時程估算、進度指標與決策簽核點(各自寫出數值或範圍與它的推導依據,不獨立成段),讓讀者學完技術做法的同時拿到向上彙報的素材。成本用量級不用精確數、時程用範圍不用單點、進度用可查詢指標。詳見 management-reportable-info-in-technical-content。

斷言清單要過重建測試、重建不了展開成讀者走查:條列式斷言(「拆開來看有三個毛病:1、2、3」)是作者走完推導後只輸出結論;判定用重建測試——讀者只憑文中已給的材料能不能自己得出每一條,不能就展開成讀者位置的走查:把讀者放到使用產物的位置、每條斷言換成動作加材料(缺的材料補進文中、那正是清單藏住的缺口)、可重用的檢查方式放在走完之後浮現。摘要位置的條列(前文已推導、條列是回收)與每條自帶證據的清單合規。詳見 assertion-list-needs-reader-walkthrough。

教學與檢討內容的敘事姿態:寫給帶問題來的讀者:教學與檢討內容的讀者由搜尋或路由帶來、自帶問題與動機;演講技巧(問句標題、懸念段標、三幕劇遞進、第一人稱事件敘事)服務的是注意力會流失的聽眾,搬進教學內容時代價全部落在資訊結構上——問句標題把檢索錨用來提問、懸念弧把判斷標準壓到文末、個人時間線把可重用的判斷包在一次性經歷裡。標題與段標是寫主旨的直述句(寫法見下一條);檢討內容以客觀條件視角組織(「reviewer 問了 X」改成「若對這個做法問 X 而答不出來、就該重新檢討」);內容來自實際事件時,在開場之前寫一段事件說明(日期、環境、做什麼操作時發生),症狀與結果留給正文。修懸念不是把結論搬到開頭:灌輸與懸念是同一個缺陷的兩個方向、都讓結論與推導脫節——未經推導的開頭結論摘要(含「觸發場景 / 疑問來源 / 整理目的 / 本文邊界」欄位組)讀者只能硬記、同樣要抽掉;分工是標題寫主旨、開頭逐一列出這篇討論的內容、結論與判斷標準在推導走完的位置浮現。判別線是位置:操作型自問句(判斷標準的執行步驟)合規、標題 / 段標 / 結論位的問句是懸念型。這類問題是生成端高頻預設、審查是逆風、防線主力在生產側。詳見 write-for-readers-not-audiences。

教學文章的標題與段標寫主旨、不寫成結論句:標題寫這一篇講的對象與交付的內容種類(機制、取捨、流程、判讀),冒號之後寫涵蓋的成員;段標寫這一節講的對象。「X 決定 Y」「X 不是 Y,是 Z」「X 才是 Y」這類斷言留在正文裡推導走完的位置——讀者在乎那句結論的理由是正文建立的,而標題是他還沒讀正文時看到的那一行,被別篇當成連結文字時他連本篇的主題都還不知道。讀得懂的結論句也改:寫標題的人手上有全部前提、分不出哪些是讀者進來之前就有的,而「有沒有謂語在下斷言」是他看得出來的。寫的當下把標題當成別篇裡的一個連結文字讀一次,逐項問:有沒有謂語在下斷言、每個名詞沒讀過本篇的人認不認得、只憑這一行說不說得出這一篇的對象與內容種類。描述這一篇做什麼事的「對象+動詞」寫法是主旨、合規;沒有下斷言的標籤式段標(「往下讀」「判讀方式」「為什麼只收這幾本」)同樣要改——把指示詞與泛用標籤換成它指的東西,固定收尾段名(「下一步路由」「判讀訊號」「往下讀」)不是例外、寫成「內容種類:實際連到或判讀的對象」,寫不出有意義主旨的段標就移除、那一節併進相鄰的節;改名之後同一次核對以完整標題當連結文字、以節名引用段標與連到段標錨點的位置。適用範圍是教學文章。詳見 title-states-the-subject-not-a-premised-conclusion。

敘事的解碼材料要在讀者已讀的文本裡:教學敘事的每一句、解碼所需的材料必須已經在讀者手上——已讀過的正文加基線知識;動用讀者還沒讀到的後文、或只存在於作者腦中的全篇地圖,是把作者側的成本轉嫁給讀者。作者寫敘事時持有全篇地圖、文學化壓縮(位置與數量指涉「前兩本 / 另外幾個 / 後者 / 這一側」、轉喻代替命名、單邊對比、把操作結論留給讀者推、抽象名詞當解釋句主詞、破折號懸念)全部預設讀者共享這張地圖——書評體的密度審美混入教學語域、代價落在資訊結構。判定問句逐句可執行:「讀者線性首讀讀到這一句、能不能當場復原完整命題(指涉對象、對比兩面、操作含義)」。修法:指涉具名(首次全名;位置與數量是排列的 derivation、實例中連作者自己都數錯——同一篇三次計數三次全錯)、對比補全另一面、結論寫到讀者能決定下一步動作的層級、具體實體當主詞(框架欄位名起句當主詞是高頻形態——「X 的前提是…」改成被描述的實體當主詞、欄位對應由內容自己承載)、並列定義各自成段、旁註移到主線走完後。位置指涉的極端形態是跨頁指涉(「該篇的起點條目」——綁定在另一份文件裡、讀完本篇也解不開)。展開的價格依反模式類型分層:具名替換是代換不加字、補全對比與隱式結論才花字數——實測導言多兩成、全篇只多百分之五,最高頻的違規恰好是最便宜的修法。命中是候選不是判決:向後近距回指、下半句立即揭曉的破折號、「」內引用合規、判定只看解碼材料(綁定)在不在已讀文本裡——同一個角色詞可以在定義它的篇內合法、在跨頁處違規。詳見 decodable-from-text-already-read。

文章的連貫靠鞏固形狀、不靠讀者的記憶:讀者的工作記憶要當成隨時會清空的(設計條件取自 ADHD 讀者——注意力隨時中斷、無法被要求記住任何東西;而任何讀者被打斷、隔天續讀或從搜尋落在中段時,持有的脈絡與之相同),脈絡必須能從任一節點就地重建。做法是每個結構單位攜帶它與其他單位的內容關係(誰給定義、誰在同一個問題上走不同邏輯、誰處理誰留下的問題),讀者從任一切面推得出其他切面。四種把脈絡寄存在讀者記憶裡的形態:前向懸置(「等下再討論」是沒有內容的欠條)、位置回指(「前面兩個小節」要讀者持有位置地圖)、壓縮總結(「用一句話總結」把形狀推遲到文末補交)、列舉鳥瞰(「分成兩組、第一組四本講……」要讀者 hold 整張清單才能繼續、注意力在列舉途中斷掉的讀者帶走的是零)。修法是關係鏈(成員逐個以它與前一個成員的內容關係進場、工作記憶負擔恆為一)加錨點路由(關係詞旁掛連結、找回情境的成本是一次點擊);帶內容名的前向路由合法——判定看指涉攜帶什麼:只有位置或時間違規、攜帶內容名是路由。這不是前情提要:重複讓文章變長而形狀不變清楚,鞏固動的是指涉的載體、多數是代換不加字。連不進關係網的段落是拆分訊號:對立與獨立都是關係,說不出任何內容關係的段落考慮獨立成篇、不硬寫轉場句黏合。割裂對作者與同源 reviewer 不可見(能力強的讀者自動補完形狀),驗收可以用不會補完的讀者——探針從中段讀起、問「這一節跟前後是什麼關係」。詳見 coherence-by-shape-not-reader-memory。

連貫靠句句推進、回收語只暴露斷點:形狀層的配套句層原則——前句的成果是後句的條件、句句朝同一個方向,逐句判斷標準是「這一句要求讀者往前走還是回頭」。五類要刪的字:回收式過場(「立場站定、量尺在手」——把剛讀完的內容摘一次當跳板,需要跳板的位置就是上一句沒接好的位置,修法是把回收句改寫成推進句「釐清 X 之後還需要 Y」、不是把跳板寫漂亮)、懸念否定(「仍然沒有答案——」)、文章自指(「承接的就是這一段」——讀者在讀主題、不在讀文章怎麼編排自己)、迂迴指代、姿態描述(「質疑的是問題本身」交付的是關係的元資料,把問題寫出來之後對立詞整個省下)。譬喻分兩層判、第一層答完通常就結束:這個概念在領域裡有沒有現成術語(標準 / 判斷標準 / 門檻 / 成本 / 邊界)——有就用術語、譬喻不進場(中英文技術文件用的是同一組詞,standard 而不是 the yardstick;譬喻要讀者建一筆對映、術語不用,那筆成本換到的只有畫面感);沒有術語才問服役長度(貫穿全篇的是導航地標、兩三句就拆場的是純成本)。成因是散文審美混入技術語域,實測形態是同一篇裡總覽用術語、專節用譬喻而分裂成兩個名字——掃描要跨全篇對同一個所指、不是逐段看。與用詞搭配的錯配軸正交。總覽段每環只背「關係+名字」、細節下放專節;連結掛在句中已有的名字上、不為連結另造括號標籤;順序由讀者的問題序驅動、不由素材的來源鏈驅動,推遲項集中句尾、不在論證中途插入推遲宣告。附完整 before / after 對照範例,詳見 coherence-by-advancing-not-recapping。

教學內容不預設考核情境:「說得出 / 答得出 / 講得出」當檢核動詞時、句子預設一個考核情境(有問的人、答案要被說出來給人聽),而教學讀者為吸收知識而來、實際活動是自我評估理解與應用——文章的定位是建立識別能力與應用能力、檢核動詞用那些能力自己的動詞(識讀 / 辨別 / 指認 / 列得出 / 查得出 / 判斷得出 / 對應得出 / 追得出 / 算得出——按被檢核的能力選、一律替換做出新模具)。判定問句:這一句描述的情境裡有沒有真實的問方與言說行為。三類合法保留:場景內真實對話(稽核 / 客服核身 / 會議追問)、協定與查詢語意(DNS 回答查詢——主詞是系統時「答不出」多半該寫「查不出」)、表達載體(名稱 / 註解 / 型別「說」什麼是它的功能);自查問句合規、要看收尾的「答不出來就 X」。檢核的出口是時機與路由、不是宣判:前置檢核三步——需求句陳述前置、主動提醒內容與回顧點(列出會用到什麼、告訴讀者可以去哪裡回顧——檢查的工作由文章做完、不派給讀者;自我評估問句是可選變體不是預設)、對還不熟的讀者給時機定性加路由(先建立概念、再回來讀);後果句可以存在但不能是段落最後一句、路由才是。這是借來的讀者框架家族第三個成員(聽眾 / 地圖共享者 / 受試者)。詳見 verify-by-recognition-not-recitation。

寫作除了表達意義,還要設計閱讀的節奏、壓力與引導:意義正確而閱讀過程沒被設計的文章、每一行都讀得懂、整篇讀下來卻累——負擔在句與句的累積裡。三個設計面:節奏(中文單音節、閱讀節奏比多音節拼音文字快;要讀者思考的位置刻意加字延長閱讀時間——「不僅是」寫成「不僅僅是」、「有無」寫成「有或無」;字數是節奏資源不是壓縮目標、精簡義務只在檢索鍵位)、壓力(高密度要求理解力、不指稱人事物要求記憶力、兩者相乘成壓迫力;診斷問句:讀到這行時讀者手上有幾個未解決的指涉、上一次喘口氣的句子在幾行前)、引導(用到前置概念的位置主動提醒「會用到什麼、可以去哪裡回顧、再回來讀」——檢查的工作由文章做完、不派給讀者;識讀落差用一層層的切入點承接——術語分級 / 概念卡 / 讀者路線;高專業內容也不寫成只有同領域小圈頂尖讀者能讀、語句與段落容易理解跟銜接是底線、深度不因此降)。冷讀審查在「看得懂」之外加兩問:讀起來累不累、卡住的讀者有沒有被接住。詳見 writing-designs-the-reading-process。

評價由讀者自己形成、寫作交付材料:傳達觀點的寫作交付材料(事實、屬性、行為、取捨、後果、推導),評價由讀者用材料自己形成——主觀評價語(優雅 / 出色 / 經典 / 值得 / 紮實)是預先消化的結論、給讀者速成印象、取代讀者形成想法的過程。判定不看準不準:準確而溫和的評價同樣違規(形態問題、跟誇飾強度軸正交);操作測試是「讀者能不能用文中材料檢驗這句話」。修法:問「我看到什麼讓我這樣覺得」、把那個東西寫出來、評價刪掉;角色標籤用功能不用地位。邊界:評鑑文體例外(評價附材料與判斷標準)、推導收尾的結論合法、凍結外部名照抄、機制描述不觸發、註解不鑑賞程式碼。明確立場:讀者的速成期待存在、但不以滿足它為目標。詳見 readers-form-their-own-judgments。

檢視註解的最高原則是商業邏輯:檢視一則註解時第一個評估是它有沒有解釋到這個行為、這個事件、或這個 flag 的商業邏輯——有、才進入文字層的修法;沒有、不修文字、先重新檢討寫它的動機。這一條決定註解該不該存在、其餘原則決定它該怎麼寫、順序顛倒會把力氣花在修一則不該存在的註解的文字上。詳見 references/writing-code-comments.md 的最高原則節。

註解的動機先於註解的文字:準備寫一則程式碼註解時,先問寫它的動機是「說明這裡在做什麼」還是「怕有人改壞它」。後者不是註解問題——散文型註解不參與執行、改壞的當下不產生任何訊號,而做批次整理與自動化重構的人不會經過那一行。處置是先問那個約束能不能被消除(它通常是某個結構選擇的產物),不能消除才交給會發聲的機制;判斷標準是問這段資訊有沒有對應的斷言(存不存在一條會紅的斷言,不是造不造得出句子),驗證是當場把約束破壞掉、跑測試、把輸出貼出來。詳見 protective-comment-signals-missing-enforcement。

規則要指到一個打得開的東西:寫會被別人照著執行的文件(規範、手冊、skill、spec、agent 指令)時,每個步驟的可執行性由「照它工作的人第一個動作指得出來嗎」決定、不由它寫得清不清楚決定。三種失效成因不同而後果相同——名字指向不存在的東西(改名後沒跟著改的路徑)、名字從來不是實體(像專有名詞但查無對應檔案的詞)、根本沒指名(步驟寫成形容詞並列,「核心先行、正向陳述、案例補足」)。第三種最難發現,因為前兩種至少有一個錯的名字可以查。這類缺陷通得過任意多輪人工審查,理由是規則文件的讀者全部自帶答案:讀的人知道自己打開的是哪個檔,補完發生在讀者那一側而且無聲。判斷標準是一句話——照這一條工作,第一個動作是打開什麼檔、執行什麼指令、叫用哪一個具名的東西;答得出名字就驗它現在還在不在。修法對應形態:名字錯了就換掉並搜全庫的舊名、名字不是實體就換成實體(查無對應實體代表規則要求的東西還不存在,處置是建立它或刪掉規則)、沒指名就把形容詞換成動作加對象。概念層的定位宣告不適用。詳見 rule-must-point-at-something-openable。

規則的要件不要寫成讀者的主觀狀態:「無法判定時」「有疑義時」「不確定時」這類條件要讀者先承認自己處於那個狀態,而誤讀的定義就是他不認為自己誤讀——一次量測裡三份讀者的自陳欄都填「沒有讀出兩種以上可能判定」而判定值全錯。處置是換成外部可查的條件(去查文件就有答案的那種),並加一句「判定者自認顯然成立,不改變本款結果」擋住回流。同族的兩個形態是極性詞(讀者會替直述句自行加回「成立/不成立」,所以要廢除並禁用、不是改寫)與雙重否定(會連帶擴散,要全庫一次清完)。詳見 subjective-precondition-never-fires-for-the-misreader。

禁止某條推理捷徑的那句話,不要交代那條捷徑需要的前提:寫出「這裡有幾種、互斥、窮盡」等於交給讀者一張走排除法的地圖,而讀者取用結構說明比逐格查觸發條件便宜。實測一句「結論只有三種、互斥且窮盡、不得由排除其中一種逕行認定另一種」零效力——同一輪的兩名判定者走的正是它禁止的那條路;刪除後三輪皆以正面觸發條件命中。**要防排除法靠的是每一格各有正面觸發條件。**同一張卡另記一條盤點紀律:評估一款的零引用之前先問它被引用會發生什麼——有一類的處置是刪除而不是搬位置。詳見 rule-text-can-have-negative-effect。

教材的脈絡由三件事決定,而三件都靠自審檢查不到:這一篇在序列裡的位置(說得出讀者手上已經有什麼、交付什麼、刻意不碰什麼;深度看第一項不看題材的表面複雜度)、論證用得到的材料有沒有就地寫進去(承重術語當場定義、承重機制寫進正文、每一句的指涉能從已讀文字解出來)、以及往外的連結綁在什麼上面(綁在本篇模型的一個可動項上——「把其中一項換掉會變成什麼」,而不是「遇到 X 去讀 Y」,也不只是列舉相鄰主題;做不到代表本篇還沒建立帶可動項的模型,而這條推論只適用於模型有兩個以上可動項的教材)。description 與第一段決定整篇形狀,所以從要交付的觀念發想、不從假想的讀者問題發想,查閱型內容不受這一條約束。偏移的成因固定是規則錯配——為執行者或查閱型內容設計的規則被套到教材上,而觸發條件只看形狀;一份原則的射程限制放在它自己身上沒有效力,適用邊界要由引用它的規範寫出來。詳見 teaching-article-context。

知識卡建卡標準用「最不熟悉的讀者」:知識卡的建卡標準是「目標讀者群裡最不熟悉的那端能不能理解這個術語」,不是「作者覺得夠不夠常見」。常識是相對於背景的——.htaccess 對 PHP 工程師是常識、對 Node.js 工程師完全陌生。跨背景讀者群的教材裡,幾乎所有領域特定術語都需要建卡。建卡的邊際成本低(40-50 行)、讀者缺卡的代價高(離開教材去 Google、可能找到不一致的解釋)。per 常識是相對於讀者背景的。

操作步驟帶環境專屬工具路徑:操作型文章的每一步至少帶一條工具路徑(用什麼軟體、輸入什麼指令)。同一個動作在不同環境(container / VM / 共享主機)的工具路徑可能完全不同——「拍下現況」在 container 是 docker commit、在 VM 是 AMI 快照、在共享主機是 FTP mirror + phpinfo。文章涵蓋多種環境時、每一步要按環境分列工具、或標明適用環境。自測問題:「讀者坐在電腦前,下一個動作是打開什麼軟體?」答不出來就是缺口。per 操作指引要帶環境專屬工具路徑。

Case 引用段落的三段式結構:三段式是案例引用段落的順序紀律 — 把「概念 → 案例 → 操作」三層分開承擔(段首給概念定義、case 引用居中、通用工程知識展開)、讓段落結構跟讀者學習新概念的認知順序對齊。LLM 從 case 反推內容容易把 case 揭露當概念出發點、實證觀察 11/12 段都犯這個錯。詳見 case-citation-three-part-structure。

知識目標決定文章結構:文章寫完後讀者帶走的是判斷能力(面對新情境能自己評估)還是操作步驟(照做能解決特定問題)——兩者需要不同的結構。判斷力導向把機制理解當主線、操作當自然推導的結果;流程導向把步驟當主線。多數教學文章應走判斷力導向——文章的價值在於提供判斷力、這是官方文件不做的事。詳見 teach-judgment-not-procedure。

判斷標準寫到條件層:判斷標準有三個成熟度——口訣(無推導的結論)、維度清單(「判斷看 A / B / C」)、條件層(讀者判斷得出自己落在哪一個條件、各條件的後果與理由,加失效情境)——教學要交付到第三層。維度清單是判斷標準的空殼:有判斷的動詞、每個維度都有機制支撐、通過字句與機制審查,卻在讀者要做決定的那一刻斷線;且機制重建完成後它仍會殘留(機制正確與判斷標準到位是兩個獨立檢查)。驗收用重算測試:讀者帶自己的參數進來,能否判斷出自己落在哪一個條件與它的後果。條件到行動的逐項對應(「A 成立 → 做 X」)是照著執行的 surface(agent 指令、skill、runbook)的形態,寫進教學文章就是手冊的裝置。條件不可窮舉的決策,用自查問句組(把變數轉成讀者可自答的問題)+排序規則,同樣算第三層。詳見 criteria-need-condition-action-mapping。

判斷標準的輸入集合要跟正文的組織維度對齊:映射的成熟度與輸入的完整性是兩個獨立的檢查——一段判斷標準可以替每個條件都寫出明確的後果,而只要讀者帶進來的個案在某個維度上取了作者沒設想的值,整條路就走不到底。最高頻的形態是只收「表徵」一個輸入,把產生表徵的那個條件從輸入端折疊掉,即使它在正文裡佔了整整一節(處置句寫著只有某一種執行環境才有的操作名詞,而內容涵蓋的環境不只那一種)。便宜的自查指標是分支數與種類數的落差:分支數少於正文自己列出的種類數時,就有種類落在所有分支之外。作者看不見它,因為讀的人自帶那個被折疊的條件;驗收要拿具體個案走一遍、而個案要刻意挑落在那些種類上的。詳見 criteria-fold-away-the-condition-that-produces-the-symptom。

並排多種做法時,比較的軸要落在讀者接下來要交出的那份產出上:軸的來源有兩個——那幾種做法彼此的差異(回的筆數、花的時間、取得到的欄位),或讀者讀完要交出的那份產出(他正在設計的資料結構、介面、型別)。取自做法差異的每一欄都正確、都可實測、主詞都寫清楚了,而讀者讀完不知道自己該怎麼辦,因為他要動手改的那份產出不在任何一欄裡。把軸寫成「這個做法假設了什麼」仍然不算換到讀者那一側——主詞還是做法;換過來的問法是「我要設計這個東西,某一項要不要唯一、允不允許缺」,而那一個決定同時決定幾種做法各自成不成立。既有檢查全數放行:軸的數量與種類數對得上(缺軸那一條的先兆不觸發),名字與機制也都對,錯在整組軸選在另一個平面上。判讀逐欄唸標題問主詞是誰,或問讀者讀完這一欄會去改什麼——改這段文字的降為格內內容,改他正在設計的那份產出的留作欄並排在前面。修法是先寫下讀者要交出的那份產出再往回列軸;原本的軸不刪、降成格。跨篇的零件要在某一處並排,而那一處是新的內容——互相連結不產生並排,讀者一次仍然只看得到一種。詳見 comparison-axis-comes-from-the-readers-decision。適用邊界:那張卡出自單一內容集合的一次判定,而它的觸發條件靠「多數教材的讀者以工作為目的」這個未量測的預設落地——套到新的集合之前先自己答一次「這裡的讀者真正要交出的是哪一份產出」,而答案要從那個集合已經宣告的定位取、不是當下猜,並寫進審查紀錄(不留痕跡的話這一步成本是零,於是會被跳過)。判別不適用的軸是那份產出的去留而不是它的型別:通過評分就丟掉的作業不適用,會被別人接手維護的產出適用——同樣是一段程式,這兩者不同。判別的入口是「本篇在比較什麼」而不是「有幾欄」,排成散文的比較同樣在射程內。判讀表也接不住三種形態裡的第三種(零件散在各篇、根本沒有表可以逐欄唸),那一種直接走修法的第三條。

教學模組要有推導源頭:分析導向的教學模組(判斷標準密集、讀者要帶走判斷力),模組級結構要是推導體系、不是主題集合——一個源頭機制(成本結構 / 約束 / 生命週期,各篇判斷標準能折算回去的基準)、每篇承擔一條展開、模組入口能一句話說出推導起點。源頭買到:判斷標準同尺、跨篇矛盾現形、擴篇有掛載點、推導式閱讀路線成立。目錄型模組與異質 case 記錄不適用;源頭是折算基準、不是開場模板。詳見 teaching-module-needs-derivation-anchor 與 references/managing-article-collections.md 的對應段。

深度的分配不看主題的表面複雜度:判斷一段要寫多詳細時用「讀者讀到這裡手上有什麼」,而不是這個主題看起來簡不簡單。基本處讀者手上的既有結構最少、作者的熟悉度最高,兩邊的需求剛好反向,所以用熟悉度當訊號必然分配錯——而陷阱聚集在基本處有結構上的原因:基本語法用得最頻繁,同一個誤解在每次使用裡重複,且失效多半是靜默的(實作為相容性接受寬鬆寫法,寬鬆的那一版還能算出看起來合理的值)。「難」與「危險」是兩個不同的軸。 同一條也管進階議題的起點——推導從底下的基本機制開始、複雜需求留成案例,驗收用一句話測試(這個起點能不能在不預設本模組任何內容的前提下說完)。詳見 basics-anchor-the-advanced。

複合問題先拆機制再談交互:問題由多個概念交互導致時、先各自教 A / B / C 的機制、再談 A×B×C 交互。讀者理解各元件後交互作用是自然推導的。各概念獨立成篇、文章之間用連結而非重複來串接。判讀訊號是文章裡出現「另外還有一個原因是…」的堆疊式展開。詳見 compound-problem-decompose-then-interact。

原子筆記要有向上的議題入口:承載知識的原子筆記(Zettelkasten 卡 / glossary / 術語條目)不是字典條目 — 字典答「這個詞是什麼」、承載知識答「你在討論什麼、撞到什麼問題、才需要這知識」。撰寫者有預設情境讀者沒有、所以每張卡(或其上層)要從情境進入而非劈頭給定義:建議題 hub(以讀者遇到的問題為題)討論再分流到原子卡、卡頂回指議題、讓搜尋直接落地者也有回路。沒這層卡淪字典、讀者沒有觸發點、不知何時用。詳見 atomic-note-needs-situational-entry。

軸名要取機制、不要取它的代理:替一組判斷標準或一條分界軸命名時,選中的常常是與機制同向但較弱的代理(用途之於性質、識別碼之於預設行為),而真正在做功的那句話留在括號或下一句的理由裡。代理與機制分岔的情況正是判斷標準要處理的難題,於是判斷標準在最需要它的地方失效;作者看不見是因為讀到軸名時腦中自動補上機制,而讀者只拿得到名字。修法是把括號裡那句升格成軸名、代理降級成入口。判讀訊號:同一份內容的兩處把同一個東西歸到軸的兩側、套到具體個案時分不開、或一個名詞底下的東西成本差一個量級(複合名詞蓋住不同性質的形態)。字句與結構層審查都抓不到它,只有對抗性審查與個案實跑抓得到。詳見 axis-named-by-proxy-not-mechanism

4. 可查詢性(Searchability)

關鍵字前置、使用可 grep 的分隔符(: | → ==)、欄位名稱使用 regex 友善格式。命名讓 AI 能以單次 grep 命中,不需要語意推理。

句子層文法標準(全部書面產出適用):技術文章描述操作的每一句由四個槽位組成——動作者、動詞、受詞、結果——每個槽位填的是這個領域裡實際存在的東西,量詞計數的是領域裡的單位。判斷標準是受詞是不是動詞在這個領域裡能作用的對象:「執行」作用於指令,「一個字都沒有執行」的受詞「字」在領域外,句子語法完整而讀者要做四步還原;「處理的是行尾」的受詞「行尾」不是被處理的東西,被處理的是輸出裡的位元組。這條標準獨立於文章的定位、獨立於消費位(鍵位或段落位都適用),與行自足是兩個獨立的檢查——行自足管的是句子在脈絡外能不能還原命題,本條管的是每個槽位填的名詞在不在領域裡。它是生成端規格(見〈每一句先填槽位再成句〉),寫的當下逐句填槽位;不只操作句——論斷句、總結句、段標與過渡句另有一格:本身要求「誰的、什麼的」的名詞(來源、輸出、代價、差別、位置)要寫出所屬,形容詞與動詞不直接當名詞用。審查端 grep 抓不到(領域外的名詞與缺席的所屬都沒有固定關鍵詞),操作句靠冷讀或理解探針的「這個動作是誰做的」與「對什麼做的」兩欄,名詞所屬靠逐字引出所屬的探針(見 noun-without-its-owner-passes-the-slot-check)。詳見 command-fragment-as-subject-hides-the-actor 與 spoken-emphasis-is-silent-in-text。

行自足是可查詢性的配套義務:grep-friendly 設計預期句子被單獨命中、被命中的句子就要單獨讀得懂。單句消費位(checklist 項、表格格、判斷標準句、grep 目標行、章節首句)必須在句內資訊自足——四條件:命題完整(主詞 / 謂語 / 對象 / 條件在場)、指涉閉合(殘片名詞有完整形先行)、實詞可反推(承載內容的詞能反推到機制 / 條件 / 契約)、一句一命題(對仗的每個半句能獨立判真);驗收用抽離重讀測試(句子單獨給沒讀過上下文的消費者、命題能不能無歧義復原)。第三類位置是檢索鍵位(title / description / 表格鍵欄 / 卡名)——義務是識別充足、命題完整不適用、跟精簡規範衝突時精簡優先。段落敘事位可依賴鄰句、壓縮合法——三角取捨(精準、總長、句自足)的解法是按消費單位分配:自足要補成分、精準要加限定語與名詞頭、兩者都與精簡的減字反向、全域加長跟全域壓縮都是錯的答案。中文單字多義與 LLM 的三種消費模式(單行檢索 / attention 稀釋 / 風格繼承)是放大條件;四字節奏與對仗是「該跑抽離重讀」的候選訊號、不是判決(判定看消費單位)。詳見 sentence-self-sufficiency-by-consumption-unit 與 references/reference-authoring-standards.md 的單句消費位段。

5. 欄位設計(Field Design)

同一份文件的不同欄位,從不同角度觀察同一件事,不重複撰寫。what 描述動作、why 陳述動機、acceptance 定義可驗證條件;混淆欄位會讓讀者在多處讀到相同內容。

欄位集合是一個關於「會有哪些結果」的宣稱,而欄位不足時的失真是結構強制的:一份自檢表的結果欄只容得下「發現問題 → 修正」時,「本來就對」的項目沒有格子,於是被虛構成有問題(實測有人把「初稿即為現況」寫成「發現後已修正」)或被整列跳過——兩種失真方向相反,彙總時抵銷不了也看不出來。驗收是逐欄列舉它可能的值,問有沒有一種真實情形落在全部的值之外;修法是補值而不是補說明,因為填表的人選的是清單裡有的那一個。同一張卡另記報告結論要分兩類(正面命中不依賴涵蓋完整性、窮舉宣稱依賴),不分類則涵蓋數被修正時無從判斷哪幾項要重看。詳見 field-shape-induces-false-reporting。

6. 多輪 Re-read Pass(Multi-pass Review)

完稿即進入 review 階段。一次寫對全部維度違反 working memory、實際結果是「每維度都做一半」。設計 N 輪 re-read、每輪用不同 frame:

輪Frame抓什麼
1生成idea → 字、預期會有錯
2對意圖(ease-of-writing-vs-intent-alignment)正文、title、description、MOC hook 都跟原意對齊
3機會成本語氣全 surface 的絕對詞翻成 trade-off
4Grep-ability / 命名 / 術語title、slug、link label、段首關鍵字可單次 grep 命中;術語保留原文錨點與完整名詞頭
5反例 / 邊界「何時不適用」段、反模式列表

Surface enumeration 是 multi-pass 的固定前置步驟。寫作產物包含 body surface 與 metadata / navigation surface:title、description、tags、heading、link label、MOC / index entry、slug / filename。每輪 frame 都掃這份 surface 清單,讓正文與讀者入口共用同一個概念錨點。description / hook 對規則做壓縮時、可以丟細節、不可以改模態 — 把本體的「條件允許(可延後但要記錄)」壓成「絕對禁止(不可跳過)」、讀者依摘要行動就會偏離本體;摘要讀起來比本體「更有力、更乾脆」就是失真訊號、模態詞跟主詞動詞同級、最後砍。實測一批七份文件有四份的 description 出現模態漂移 — 這個檢查每批都要跑。

核心:「再仔細一次」≠ multi-pass — 同 frame 重看 catch 不到新問題。每輪換 frame、才能 catch 不同層。各 reference(writing-articles / writing-code-comments / writing-documents / writing-prompts)依 output 類型有特化的輪次組合。

Naming 是這條原則最容易跳的子場景 — 第一版命名幾乎不對、四輪 review(第一版 / grep / cross-call-site / impl 洩漏)才收斂、見 naming-as-iterated-artifact 跟 writing-code-comments 的 naming review 段。術語是 naming 的高歧義子場景:翻譯術語第一次出現保留原文錨點,中文壓縮術語保留完整名詞頭,中文名詞頭要保留來源中的概念角色,轉換他人材料時強度詞停在原文量級(保真轉換鎖定量級、原創文案與宣告過的再創作以訴求效果為準),見 terminology-keeps-original-anchor、compressed-chinese-terms-need-head-noun、translation-must-preserve-concept-role 與 rewrite-preserves-claim-intensity。

譯名不用讀者會先想到別的東西的詞(嚴重寫作錯誤)。 管的是正文裡由外文概念翻來的術語;產品名、協定名、程式識別字與業界通用的縮寫(HTTP、JSON)不在此列,知識卡的標題格式另依專案規範。寫下每一個譯名時問一句:除了要譯的這個概念,軟體或介面裡還有沒有另一個讀者常碰到的東西也叫這個名字? 有的話,讀者在技術文件裡讀到它會先想到那一個,照那個意思學錯而且不會停下來問,因為那個詞他認得——cursor 譯成「游標」,讀者想到畫面上的游標;file handle 譯成「把手」,讀者想到介面上的拖曳把手;pagination bookmark 譯成「書籤」,讀者想到瀏覽器書籤;short-circuit evaluation 譯成「捷徑」,讀者想到桌面捷徑。軟體以外的日常意思本身不構成違規:「旗標」的日常意思是旗子、「交易」是買賣,而軟體與介面裡沒有另一個東西叫這兩個名字,讀者在技術文件裡讀到它們只會想到 flag 與 transaction,合規;「鉤子」「管線」「記憶體」同理。比對的是中文名稱:看台灣的軟體介面上那個東西實際顯示的中文字,英文同名不算——例如英文 header 另指文書軟體的頁首,但那個東西在台灣介面上顯示的是「頁首」,不能拿來判定「標頭」違規;兩份探針曾這樣從英文反推。日常功能相似不能拿來當合規的理由:「游標」也是「標記目前位置」,讀者照樣先想到畫面上的游標。問句排除要譯的那個概念本身(「鉤子」在軟體裡指的正是 hook,不算另一個東西);先前的版本問「讀者第一個想到的是不是要譯的這個概念」,判斷者因此把旗子、買賣這類軟體以外的意思也算進去,兩批探針實測各有兩份誤判;現在的問句把比較範圍限定在軟體或介面裡的另一個東西。自己拿不準時,用術語探針量(問「在技術文件裡讀到這個詞,第一個想到什麼;它在軟體或介面裡是什麼」)。這一問只能在寫的當下做:作者與同源審查者都知道那個詞在這裡指什麼,所以讀起來通順,看不出問題。修法依序是:先查承載這個概念的知識卡或術語表有沒有已定案的寫法,有就照用;沒有就把英文詞在這個情境裡指的東西寫成一句話(英文詞有多個意思就每個意思各自處理)、再找讓詞面直接說出功能的譯名(讀字面就知道它做什麼),找不到就自組描述功能的短語(分頁的 cursor 寫「接續標記(cursor)」、資料庫的寫「查詢結果的讀取物件(cursor)」),短語說不清就改寫成完整的一句話,再附英文原詞;替代譯名同樣要過這一問——一次探針實測裡,替「書籤」找替代時提出的候選之一是「分頁遊標」,又回到同一個錯誤。定案的譯名寫回知識卡,讓下一位作者照用,同一個概念才不會有兩個名字。量過之後各份探針給的定義仍收斂不到同一個所指的詞(test oracle),第一次出現寫一句中文描述再附英文原詞,之後同一篇可以只寫英文詞。第一次出現寫「中文(original term)」,之後以中文為主,程式識別字與討論英文詞本身時用英文;沒有任何中文說明、只寫英文,是把翻譯工作交給讀者,也不算修好。既有譯名在其他中文資料裡流通時,附一句「其他中文資料常寫作 X」,讓讀者拿舊譯名也對得上。沿用查得到的既有譯名之前,先看那份文件裡用法一不一致、是不是機器翻譯;某個譯名「很常見」要先問常見在哪一種中文的語料(繁中或簡中)。詳見 borrowed-everyday-word-as-translated-term。

高 stakes 內容追加輪 E(epistemic rigor、conditional opt-in):reader 照做後錯誤不可逆的內容(資安 / concurrency 正確性 / distributed consistency / financial / medical)在 5 輪基本 frame 之外、追加 stakes 軸的 epistemic rigor pass——比照學術 peer review 跑 claim / evidence / method / threats / citation 五個 sub-check、加上 audit recommendation tier(accept / minor / major / withdraw)。一般內容 5 輪夠、不跑輪 E;高 stakes 內容兩軸都跑。詳見 references/auditing-articles.md 跟 /report/writing-multi-pass-review/ 的「stakes-conditional 追加輪」段。

Production 教學文章追加輪 8-10(字句層 catch、跑 N 輪仍漏時觸發):跑了 5 輪基本 frame 仍系統性漏 catch 字句層問題(口語修辭 / 廢話前綴 / 地區漂移 / 依賴 code / 裝飾符號 emoji / 對讀者喊話 / 自評誇飾 / 必然性框架 / 恐嚇式語氣 / 歸因語氣)時、追加三個換軸機制——輪 8 keyword bank(換工具、含 emoji / 裝飾 unicode 掃描)、輪 9 reader simulation(換視角、四 lens:自包含性 + register/stance + meta 殘留 + AI 歸因過度)、輪 10 self-criticism(換層次、審視 framework 本身覆蓋度)。短文 / 即時 note 不需要、production 教學文章在跑 5 輪後仍漏同類問題時 opt-in。keyword bank 命中是候選、不是判決——grep 命中後仍要一個語意判定步驟(這個命中是建立概念的違規、還是合規的反例對照 / hook),reviewer 容易把違規合理化放行;偵測(bank)跟判定(語意)是兩個認知步驟。register/stance 類(喊話 / 誇飾 / 必然)無穩定關鍵詞、keyword bank 抓不到、輪 9 reader-sim 是主 keyword bank 是輔、且最依賴 external cold-read。漏抓後補機制前先分 design gap(框架缺 frame、改框架)vs execution gap(框架有 frame 但只跑了臨時子集、改執行不是改框架)——「加 keyword」對 execution gap 跟無關鍵詞的類都無效。詳見 multi-pass-review-frame-granularity、decorative-symbols-keyword-bank、teaching-prose-neutral-register 跟 references/writing-articles.md 輪 8-10 段。

批量 sibling 寫作的生成端輪替:一次寫多份同類文件時、cadence 同質化會在六個層發生(title 形式 / 開場句式 / 章節標題 / 敘事骨架 / 條目形態 / 跨檔引用句)、單份 review 全部抓不到、且 review 端抓過的同骨會在下一批復發 — 同類 finding 第二次出現、就把規則升到生成端:寫之前排好開場 frame 輪替(規則先行 / 後果先行 / 動作先行 / 反差先行)、條目形態輪替、敘事視角輪替、引用句去重。詳見 cadence-homogenization。以集合裡的舊文章當範本寫新稿時,範本的句型缺陷可能跟著進來:一次實測裡,舊文章用來組織集合的譬喻(「這條線」「各接一個面」「由 X 承接」「X 的決定落在 Y」)在七份新稿初稿裡每一份都出現,連「把讀者做的決定寫成分類的屬性」這個錯誤也一樣;而同一組詞在同一網站沒有這批範本的其他集合也常見,所以範本與生成端自己的用詞習慣都可能是成因。寫新稿之前用 bank〈結構譬喻頂替主詞與動詞〉那一條掃範本,寫完之後用同一條掃自己的初稿,新稿與範本一起修;bank 的其他類別照原本的完稿掃描跑。詳見 structural-metaphor-replaces-actor-and-verb。

驗證手段要對齊錯誤的層次:字面攔截(掃得到的固定字串)與行為精煉(要看行為才判得出的)是兩種錯誤層次,用錯層的手段驗不出東西而報告看起來正常。詳見 literal-interception-vs-behavioral-refinement,那裡給兩層的分界與各自該用的驗證手段。

Instance 軸:跨 reviewer instance 隔離:Instance 軸是 multi-pass review 的另一條擴展軸 — N 個獨立 reviewer instance 各自獨立 context、各自跑 background、解「單一 reviewer 同時看多維度容易維度盲點 + context 污染」的問題。Instance 指獨立 reviewer 程式實體(如 agent tool spawn 出的 subagent)、跟同一 reviewer 換輪次 frame(frame 軸)正交可疊加。適用 production 教學文章 / 高 stakes 內容 / 跨章節教學模組這類維度複雜度高的審查場景。詳見 agent-team-context-isolation。

詳見 Writing 的 multi-pass review、Methodology 的 multi-pass 該 embed 在 pillar、Metadata surface 要納入寫作 review 範圍、False sense of security 是高 stakes 寫作的主要失敗模式、Risk-asymmetric audit standard、colloquial-rhetoric-erodes-technical-precision、prose-self-contained-without-code-reference、regional-terminology-alignment、multi-pass-review-frame-granularity、design-flaw-by-current-axes-not-hindsight、agent-team-context-isolation、decorative-symbols-keyword-bank、teaching-prose-neutral-register。


When to Consult This Skill(觸發路由)

觸發情境讀哪份 reference
要寫或改一段程式碼註解 / doc commentreferences/writing-code-comments.md
要起草 / 改寫一份文件(worklog、spec、README)references/writing-documents.md
要設計 log / 錯誤訊息 / 結構化輸出references/writing-logs.md
要撰寫給 AI 的 prompt / instruction / Agent 派發 / Ticket Context Bundlereferences/writing-prompts.md(為 .claude/rules/core/ai-communication-rules.md 的詳細版庫,portability-allow)
要撰寫完整長篇技術文章(blog post / post-mortem / 架構決策 / 除錯復盤 / 技術評估)references/writing-articles.md
要把外部分析文章 / 產業評論 / 投資人備忘錄 / 高密度研究材料轉成教學型分析文章,把從業者經驗談(訪談 / 社群貼文 / 口述)轉成分析教學(機制重建),或把 AI 改寫稿從摘要升級成可遷移框架references/source-to-teaching-analysis.md
要翻譯 / 轉譯文章、把英文材料改寫成中文、檢查術語誤譯、中文譯名放回句子後是否成立、或譯文有沒有超譯(強度被拉高成口號)references/translation-review.md
要管理多篇相關文章的結構(系列、文集、知識庫、素材庫比例、MOC、跨篇引用、何時抽抽象層 / Pattern 卡片、同一個對象在兩個集合各有一頁)references/managing-article-collections.md
要做文章 / 模組 / 系列的結構決策(該不該拆篇、擴充點設計、方法論與案例的依賴方向、多讀者分流)、剛把一份文件拆成多檔要查交界、或用結構原則 review 既有文集references/structuring-with-solid.md
要對既有高 stakes 內容(資安 / concurrency / distributed / financial / medical)做 reviewer-style audit、找 false sense of security / 對位失效 / context 缺 / citation 過時 / 強度失準(誇飾或降格)references/auditing-articles.md
要寫或檢查判讀 / 選型 / 決策類內容(回答「該怎麼判斷」那一層),或讀者提問「什麼情況會需要這個」「什麼樣的系統會這樣做」「沒有範例看不懂」references/judgment-content-needs-scenarios.md
要把一個題目的幾種做法並排比較(比較表有幾欄、每一欄比什麼、跨篇的零件在哪裡並排)/report/comparison-axis-comes-from-the-readers-decision/
要在文章或文件裡示範指令(區塊裡放什麼、註解裝什麼、何時並列兩條、何時另開參數表)references/demonstrating-commands.md
要設計 ticket 欄位 / schema frontmatter / 表單欄位references/designing-fields.md
想驗證寫作品質(認知負擔、獨立理解率)references/meta-metrics.md
要新增或修改一份 Skill reference(撰寫品質規範、結構標準)references/reference-authoring-standards.md
要驗收 Skill 發布品質(語意層驗收、Phase 2 dry-run)references/dry-run-guide.md

每份 reference 自包含:以該情境為核心,把核心原則翻譯成可直接套用的檢查項與範例。閱讀任一 reference 不需要回來看其他 reference。


Success Criteria(M1-M2 認知負擔類)

Metric定義目標
M1 — 找到答案路徑讀者從 SKILL.md 出發,需要開啟幾個檔案才能解決問題≤ 2
M2 — reference 獨立理解率隨機挑一份 reference,不讀其他 reference 能否獨立套用100%

詳細量測方式與自評表見 references/meta-metrics.md。M3-M5(token 類)保留未定,待實際範例累積後補足。


跟特化寫作流程的分工

本 skill 是 單篇 寫作的基礎方法、覆蓋 articles / comments / logs / prompts / fields 等 surface。當寫作對象是 跨多章節的教學模組(5+ 章、有案例庫支撐、跨章引用密集)、屬特化情境、有專屬的 跨章節生產流程:案例庫 audit 抽 findings、SSoT 對應規劃、agent team 平行 review、跨檔修正循環、跨章 polish pass。

兩類流程的分工:

流程適用核心紀律
本 skill(compositional-writing)單篇文字(articles / comments / logs / prompts / fields)6 原則(原子化 / 索引 / 意圖顯性 / 可查詢 / 欄位 / 多輪 review)+ 各 surface 特化 reference
跨章節教學模組生產流程跨 5+ 章、有 case 庫的教學模組case-first 流程:案例 audit → 基於 findings 寫稿 → agent team 平行 review → 修正循環 → polish pass、加 case 引用四 axis 紀律(深度 / 分層 / 合成 / 結構)

兩類流程互補疊加 — 教學模組的每章內部寫作仍套本 skill 6 原則、case 引用段落用 case-citation-three-part-structure、agent team review 用 agent-team-context-isolation。當下游專案沒有跨章節教學模組需求、本 skill 即可獨立運作;當有需求、教學模組生產流程是本 skill 的擴展層、不取代本 skill。

字句層 keyword bank(完整清單)

這一節是本站字句層檢查的唯一權威清單。 其他地方(本檔的 frontmatter description、multi-round-review 的 Round 1-A、專案規範)出現的枚舉都是摘要,數量與成員以這一節為準。做字句層審查時打開這一節逐類跑,不要憑記憶重編 pattern——重編版通常把不同類別的詞混進同一條 regex,命中之後無法判定是哪一類違規。

寫多篇章節 / report 卡 / knowledge card 後做多輪 agent reviewer audit 時、本 skill 應該跟 multi-round-review skill 同時啟動。觸發詞「多輪審查 / Round 1/2/3 / batch review / 寫作 audit」會同時啟動兩個 skill:

  • multi-round-review 規劃 frame 切換結構(Round 1 compliance / Round 2 cadence / Round 3 self-application)跟跨輪 finding 整合工作流
  • 本 skill(compositional-writing) 提供每輪 frame 的字句層 keyword bank — Round 1-A 寫作規範 reviewer 必須跑:
    • 正向陳述優先 grep:rg "不[行可是要能該支對符夠必]|無法|沒[做有]|而非|而不是"、加上否定起手定義句(原 pattern 漏「而是」、抓不到「不是 X、而是 Y」的後半):rg "不是[^。「」]{0,30}而是|不是[^。「」—–]{0,25}[—–]\s*是|不是[^。「」,、]{1,25}[,、]\s*是|不在[^。「」]{0,30}而在|與其[^。「」]{0,25}不如|不只.{0,15}更" — 連接詞家族不只「不是…而是」:不在…而在、破折號形式 不是 X — 是 Y、以及裸逗號形式 不是 X,是 Y 各自漏過一次才被補上,所以手寫這條 pattern 時會系統性地只想到最典型的那一個。字元類的 [^。「」] 護欄不可省——少了它會跨句配對並命中引號內的引用,產生假陽性。這一類若已由某個 lint 工具強制執行,工具那一份 regex 是權威,手動掃描要取它的涵蓋範圍而不是自己重編;兩份並存時會各自腐爛,而腐爛的方向固定是手寫那一份較窄 — 主要敘述要正向、反例對照的少量負向可保留;判別在「核心概念第一次正面出現在句首、還是被擠到『而是』之後」。合規邊界:糾正已文件化誤讀的「不是 A、而是 B」仍列可改——修法保留糾正語意(例如改寫成「條件是 B;A 不是判斷條件」),概念前置不因糾正目的豁免
    • 口語修辭 grep:rg "其實|實務上|真的|碰巧|立刻撞牆|沒事"
    • 地區用語 grep:單詞層 rg "集群|默認|質量|視頻|函數|文件夾|接口"(封閉集合、掃得到);慣用語層 rg "拍腦袋|拍板|靠譜|給力|接地氣|一波|死磕|躺平|內卷"(已知個案、非窮舉——慣用語是開放集合、grep 追不完、新個案要靠目標地區讀者冷讀,同源 reviewer 回報「地區用語 clean」對慣用語層不可當真,見 regional-idioms-evade-keyword-bank)
    • 廢話前綴 grep:rg "值得注意的是|需要說明的是|實際上|基本上|事實上"
    • 裝飾符號 grep:rg "✅|❌|⚠️|🚨|🟡|🟢|⭐|📌|✓|✗"
    • 對讀者喊話 grep:rg "很多人|大家|不少人|你的|你在|你把|你正在|你補|你天天|你會|你可能|先讀懂|先釐清|別搞混|別被"(裸「你」非窮舉:實測過 你正在、你補完 這類「你 + 一般動詞」逃過原 pattern,回報 clean 前另跑一次裸 rg "你" 逐處判定) — 教材中性陳述、不安撫情緒 / 不第二人稱代入 / 不祈使控制閱讀(hook / narrative 段落輕度第二人稱可留)。裸所有格 / 主詞(你的 X / 你在 X)也算、不限「你 + 動詞」的祈使 / 預測句型;grep 對裸『你』非窮舉、真防線是 reader-simulation 冷讀(同源 grep 抓不到 register、見 multi-pass-review-frame-granularity)
    • 自評誇飾 grep:rg "教科書級|堪稱|可謂|完美|經典|範本級|大師級|漂亮地|優雅地|最佳實踐|best practice" — 品質 verdict 頂替技術理由、換成機制 / 條件;命中後的合法性判定用位置功能兩軸(文體契約 × 行動耦合)——hook 段的強度合法、判斷標準段零容忍、判定前先定位、見 hyperbole-legitimacy-by-position-function
    • 必然性框架 grep:rg "天生|與生俱來|本質就是|本來就是|必然|唯一|註定|理所當然" — 把設計選擇講成自然法則、還原成條件性(物理 / 法律 / 數學事實除外)。合規邊界:SSOT/權威住址/裁決陳述中的「唯一」(如「唯一權威定義」「唯一標準指令」)與由機制定義直接蘊涵的「必然」(如「A 與 B 必然分屬兩個 commit」)合規;違規限把可變的設計選擇講成自然法則,改寫成條件句反而會失去 SSOT 語意
    • 澄清式框架 grep:rg "最容易誤|容易誤判|常見的?誤判|要點破|直覺會?帶偏|抵抗.*的直覺|你以為|會困惑|值得記" — 把「讀者會誤解」當敘事中心是知識缺口訊號、不是澄清時機;補正向模型與機制讓誤解無從發生、不提醒讀者一個他本不需要有的困惑。界線是具體第一人稱實測敘事跟真實診斷區分(逾時 vs 被拒、症狀層 vs 根因層)保留、只有把假想誤會當主題句起手的才改;同義變體多、grep 抓不全、靠 reader-simulation 語意判定(「這段在補正向知識、還是在提醒讀者會犯錯?」)。見 fill-knowledge-gap-not-center-misconception
    • 歸因語氣 grep:rg "承認|暴露了|證明了失敗|被迫" — 描述系統行為用「信號」「反映」「顯示」等中性觀測詞、避免「承認」「暴露」等責任歸因詞;「被迫」在描述外部強制約束時可保留。合規邊界:「承認」的主詞是規範/文件對實作的認可(非人對過失的認錯)時合規
    • 宣導語氣 grep:rg "你可能沒注意|你可能不知道|想像一下|把.{1,5}想成|跑得好好的|聽起來很|其實很簡單|說穿了就是|等於拆未爆彈|乾瞪眼|延遲引爆" — 預設讀者無知或用情緒管理取代事實陳述;讀者是專業人士、直接描述情境與後果
    • 泛用詞濫用 grep:rg "坑|東西|搞|弄|處理一下|情況" — 同一個泛用詞蓋過不同具體情境時、依情境換精確詞(意外 / 陷阱 / 出問題 / 發生狀況);命中密集且各指不同事才算違規、真泛指 / 引號引用 / 輕度 hook 合規;「坑」另有地區偏移面(某些地區高頻、某些少用)。合規邊界:「視情況」「預設情況下」為固定搭配,不計入「情況」命中。見 avoid-overused-generic-words
    • 位置與集合指涉 grep:rg "前者|後者|前兩[本篇章個]|另外[一二三四五兩][本篇個章條張]|其他[一二三四五兩][本篇個章條張]|其餘[一二三四五兩][本篇個章條張]|下一[本篇章節]|上一[本篇章節]|這一側|那一側" — 解碼材料要在讀者已讀的文本裡:位置與數量是作者腦中地圖的 derivation、連作者自己都常數錯(實測同一篇三次計數三次全錯);集合指涉即使計數正確也要給成員或方向——數字只證明數過、不承載意義,成員各自的方向才是讀者要用的資訊。命中是候選——緊鄰具名清單的行內計數、全稱比較(宣稱對全體成立、方向不參與意義)、已具名集合的向後回指、時間距離的遠指(「那個年代」)都合規;判定看綁定在不在已讀文本、命中時順手驗計數。集合成員多到列不動是分類規劃要拆的訊號、不是省略的授權。見 decodable-from-text-already-read。這條 pattern 的成員是從論述型內容歸納的,換體裁要重做形態盤點——清單型內容(書單、工具比較、選型表)的結構單位是「一篇裡的一組並列成員」,指涉因此走序數,主流形態是 前一本|下一本|上一本|本篇第[一二三四五六]本|上述[兩三四]本|前面幾本|第[一二三四五六]本,跟論述文的「前者 / 後者」沒有交集。一次實測:論述文那組 pattern 在一批書單上回傳 86 個命中而逐處判定全部合規,該體裁的三十處違規一個都不在裡面,修完之後命中數只動一。判斷標準見 keyword-pattern-does-not-transfer-across-genres
    • 計數式摘要(無穩定 pattern,按位置逐句讀):在介紹另一份內容的位置——文章結尾指向下一篇的句子、description、目錄頁的交付欄、閱讀路線的說明欄——逐一找「數字+類別名」的片語(「四個追問」「三種寫法」「四類邊界」「上線前的三件事」),問沒讀過那一篇的人知不知道成員是什麼。成員緊鄰數字寫出來的合規(「自連接、視窗函數與相關子查詢三種寫法」),量測事實合規(「差三個量級」),只有數字加類別名的違規。grep 分不出兩者,rg "^description:.*[一二三四五六七八九十兩]+ ?(個|種|類|項|條)" 只用來縮小要讀的範圍。「位置與集合指涉」那條管回指已讀的集合(其他三篇),碰不到這一類。見 counted-summary-delivers-only-the-length
    • 名詞缺所屬(無穩定 pattern,按位置逐句讀):在段標、段落的第一句與最後一句、總結段、過渡句,逐一找本身要求「誰的、什麼的、哪兩者之間的」的名詞(來源、輸出、結果、原因、代價、差別、位置、範圍、邊界、訊號、層、線、情形)與被當成名詞用的形容詞或動詞(「看不出錯」的「錯」),問它的所屬能不能從這一句或前一句逐字指出來;指不出來就違規(「錯的來源不只一種,而輸出都不帶訊號」)。名詞清單只能用來知道該看哪裡,不能當判決:一次二十句的校準裡,清單命中已知違規的一半、也命中已知合規的七成,因為合規句的所屬寫在前一句(「原因是配對是逐列做的」)。判定某個譬喻要換之後,先數它在整個集合裡出現幾次,整批換成同一個領域用詞——只改被標出的那一句,同一個概念就有了兩個名字。只寫在目錄頁而讀者看不到的框架詞是同一個成因,那一半可以用腳本掃。見 noun-without-its-owner-passes-the-slot-check
    • 對象起手句(缺動作者、時機與觸發原因;pattern 只找候選):在描述做法的句子、條件句、段落首句與審查修正加進來的句子,逐句問誰做、在讀者工作流程的哪一步做、為什麼會發生,能不能從這一句、前一句或所在段落的第一句逐字指出來。候選 pattern 三條——指標當主詞 rg "(這個數字|需求數|commit 數|行數|分數|它)[^。,]{0,4}決定"(前面是「用」「拿」「依」的合規)、句首名詞接被動 rg "(^|[。;])\s*[^,。;:]{2,20}(被|由)[^,。;]{1,16}(修改|改寫|寫入|產生|編輯)"、條件句接沒有主詞的祈使 rg "(^|[。])\s*[^,。;:「」]{2,22}時,(依|照|先|把|改|用|回到)";一篇一百六十句的實測裡三條去重後命中九句、明確違規四句,「常見的拆檔門檻是行數」這種沒有被動也沒有條件句的形態三條都抓不到。審查端派逐字引出「誰/時機/原因」的探針,逐個動詞回答(只問主要動作時,前半有動作者、後半缺的句子會漏掉),至少兩份引不出動作者或引出指標、清單的列為候選;「原因」欄沒有鑑別力。逐個動詞的版本雜訊很高——一篇 214 句的實跑裡,狀態動詞與沒寫主詞的祈使句讓幾乎每一句都被標記——候選要再過兩條條件才收斂:只看描述某人在工作流程裡做的動作(工具與機制自身的行為、狀態動詞、定義句、解法陳述不算),以及這一句與所在段落的第一句都沒有寫出動作者(段落第一句寫出的動作者由同段的祈使句沿用);那一次通過兩條條件的有 37 句。合規邊界:範圍交代句、定義句、描述機制本身行為的句子(「git 的改名偵測決定衝突的形態」,主詞是能做這個動作的元件)。見 topic-first-sentence-drops-actor-and-timing
    • 讀者會先想到別的東西的譯名(嚴重;無穩定 pattern,逐個譯名問):先列出稿件裡所有由外文概念翻來的中文詞——rg -o "[一-龥]{2,}([A-Za-z][^)]*)" <files> 抓得到附了原文的那些(輸出會連前面的中文子句一起抓進來,要手動截出括號前的譯名),沒附原文的要另外讀(漏附原文本身也違反原文錨點規則)——逐個問「除了要譯的這個概念,軟體或介面裡還有沒有另一個讀者常碰到的東西也叫這個名字」,有就是必修(游標、把手、書籤、捷徑);軟體以外的日常意思不算(旗標、交易、鉤子合規);日常功能相似不能當合規理由。已知個案:rg "游標" <files> 指的不是畫面上的游標時(分頁或逐批讀取的 cursor 寫「接續標記(cursor)」、資料庫的寫「查詢結果的讀取物件(cursor)」)。已知個案非窮舉,這類譯名是開放集合;同源審查者知道那個詞在稿件裡指什麼,所以回報「譯名 clean」不可當真,拿不準的候選交給術語探針,問法加一欄「在技術文件裡讀到這個詞,第一個想到什麼」。另查反方向的錯誤:英文術語第一次出現的位置沒有任何中文說明,同樣違規(量過仍無可靠中譯、第一次出現附了一句中文描述的英文詞合規)。只寫英文這個方向沒有可用的 pattern——實測 rg "[一-龥] ?[A-Za-z]{4,} ?[一-龥]" 在一篇分頁文章命中三十處,多半是第一次出現已附中文之後的合規裸用——所以逐個英文術語找它的第一次出現讀。見 borrowed-everyday-word-as-translated-term
    • 縮寫術語 grep:rg "判準" — 「判準」是「判斷標準」的縮寫,詞面只在科學哲學與教育評量有穩定所指,工程讀者讀不出來;一律寫「判斷標準」,狀態義寫「X 條件」(停止條件、完成條件)。全站替換過兩次仍回流,所以 content/ 由 lint 規則 TERM-abbreviation 以 error 擋下;skill 目錄不跑 lint,這一類要手動掃。討論這個詞本身時加「」或行內程式碼。見 term-probe-measures-register-not-invention
    • 序數、計數與字母代號當名字 grep:rg "[一二三四五六七八九十兩]支|[一二三四五六七八九十]步|第[一二三四五六七八九十][步支節級層章階種類條項]|前提[一二三四五]|兩個軸|另一個軸|這個軸" 與 rg "\b[A-E][0-9]?\b 那|\b[A-E][0-9]? 與 [A-E][0-9]?\b" — 正文裡的實體用作者的索引當名字(「第一支的篇落在七步的第三步」「D 與 E 在這裡」),讀者要回頭翻才知道指什麼;判讀用變數名稱測試(當成程式變數名稱過不過得了審查)與落點測試(從中段落進來知不知道它指什麼),修法是用問題/動作/判斷標準/描述命名、段標拿掉序號。詞綴隨內容變、這條 pattern 非窮舉:換一個分類先盤點那裡用的是支、步、級、節、層、階段還是別的。命中是候選——緊鄰清單且隨即逐一具名展開的計數、量測事實的數字、外部凍結編號、確實在描述位置而前一句剛列完成員的序數都合規;「集合不會再變」不構成放行理由。命中密集的段落順手問它是不是在寫作者的編排思路(各篇怎麼分組、兩篇怎麼分工、改哪一篇),那一類整段移出正文。見 ordinal-labels-are-the-authors-index
    • 部分與一側當名字 grep:rg "一部分|另一半|這一半|那一半|這部分|那部分|另一部分|那一側|這一側|另一側|另一邊" — 被切開的集合沒有名字、切分依據沒寫出來(「有一部分判斷標準交得出去」「交不出去的那一半」),或「一側」當成「就……而言」的譬喻(「在條件這一側還有路」);命中後問讀者只讀這一句說不說得出每一塊是什麼、以及被切開的整體是什麼(「同一條線的另一半」每一塊有名字而整體沒有,違規);裸「這部分」回指而前面沒有切分的,按指涉問題改成那一塊的名字。豁免:組成句「X 是 Y 的一部分」(部分與整體都在句內)、所屬寫在同一句的「子表這一側……父表那一側」、字面比例。全站實跑 618 處候選、116 處要改,其中兩處的模糊切分底下是寫反的論斷——命名時才發現對不上;替換文字裡新出現的關係(並列、包含、因果)要回原文核對。修法是先寫依據、再用業界術語/案例名/描述短語命名,見 unnamed-halves-are-unextracted-variables
    • 命名的旁白 grep:rg "取一個名字|各取|下文都用|以下逐一說明|以下分別說明" — 命名的句子另外宣告取名或約定下文用法(「盲區有兩種,各取一個名字,下文都用這兩個名字」)。判讀用刪除測試:刪掉這個子句,讀者少了什麼;什麼都沒少就刪,改成「分成 A 與 B」再逐一定義,成員多時用清單列名字、下一段起逐一解釋。合規邊界:「下文把 X 稱為 Y」這類子句本身帶著所指與名字,刪掉會失去名字,保留。見 unnamed-halves-are-unextracted-variables
    • 正反問句當名詞 grep:rg --pcre2 "(\p{Han})不\1|有沒有"(需要 PCRE2) — 「連不連得到」「對不對」「讀不讀得到」這類 A 不 A 問句被當成主語、受詞或介系詞的受詞用,承擔英文 whether 子句的角色而沒有開頭標記,讀者讀到動詞才知道前面那段是問句。命中後問兩件獨立的事:位置——讀者讀到它之前,有沒有一個詞(「問」「檢查」「確認」、引號、問號、「是否」)告訴他接下來是問句;沒有就改成直述或「是否」「能否」;主語位置、介系詞「對」後面與多段並列加「都」最重(撞上「連……都」與附加問句「對不對」兩個高頻句型)。判斷標準——把謂語(對、通、到、行)單獨拿出來,讀者說不說得出照什麼標準判斷;說不出就寫進去(「是否把請求轉到正確的服務」),這一條在「檢查」後面的受詞位置同樣適用。合規邊界:接在「問」「檢查」後面且謂語有標準的、「」內的引語、程式碼。pattern 抓不到夾在句中的「X 嗎」。寫的人知道「對」照什麼標準,所以分析這個形態的段落本身也會寫出它(一次實測七處),要靠掃描。見 a-not-a-question-as-noun-clause
    • 「問題」與「回答」當框架詞 grep:rg "回答的問題|回答的是|問的是|問題是:" — 系統元件被寫成回答問題的一方,「問題」一個詞同時指檢查的內容、故障、歸屬的範圍與需求。命中後逐處問:這個「問題」翻成英文要從 question、problem、issue、topic、requirement 裡選哪一個;選得出就用那個意思的中文詞重寫並寫出內容(哪裡壞了、處理什麼、屬於哪個範圍、誰需要什麼),同一篇每處選的不同代表一個詞承擔了多個所指;「回答」換成元件實際做的動作(執行、量測、比對、送出、標記)。單獨的「問題」詞頻太高不直接掃,從框架詞找到集中的文章再逐處翻譯;建在這個框架上的自創術語(「問題盲區」)會同時帶著問句與故障兩種讀法。合規邊界:場景裡有人實際提問、業界固定術語(「N+1 問題」)、動詞片語「出問題」(密集重複時才換)。見 question-answer-frame-blurs-problem-issue-request
    • 排比的同義反覆(無穩定 pattern,按位置逐句讀):讀總覽句、段落首句,以及三個子句以上的排比(「X 的 Y,由 Z 接手;X 的 Y′,由 Z′ 接手……」),逐個子句做定義代換——變動格(Z)是否只從話題(Y)的定義就推得出來、不需要本篇的任何其他資訊(「問題盲區由問另一個問題的層接手」);是的話資訊量是零。輔助檢查是語序翻轉:改成動作者在前(「問另一個問題的層接手問題盲區」),變得明顯空洞的子句就是被話題在前的語序遮住的那一個。排比裡有子句打破骨架、或總覽句寫在它所總覽的對象被介紹之前,都是候選訊號。修法:填實際的配對(具名的元件、人或步驟),或寫出這組分類帶來、讀者從定義推不出的判斷;填不出名字的子句不進排比。「每個半句能獨立判真」對它放行(同義反覆必然為真),四槽位也常放行(角色描述有名詞頭,看起來像已填的槽位)。見 parallel-clause-filled-with-the-topics-definition
    • 脈絡懸置 grep:rg "等下再|稍後再|之後會(講|談|提到)|後面會(提到|講|說明)|下面會(提到|講)|如前所述|前面(提過|說過|講過|幾個小節|兩個小節)|上[一面](提到|說過)|用一句話(總結|概括)|一言以蔽之" — 把脈絡寄存在讀者工作記憶裡的三種句式:前向懸置(「等下再討論」是沒有內容的欠條、到期時讀者已不記得)、位置回指(「前面兩個小節」要讀者持有位置地圖、中斷後的讀者不持有)、壓縮總結(「用一句話總結」把形狀推遲到文末補交)。判定看指涉攜帶什麼——只有位置或時間違規、攜帶內容名(最好再帶連結)是合法路由(「那正是 C 那本要處理的問題」);緊鄰的近距指涉(「見下表」而表在下一行)、「」內引用、已具名對象的向後回指合規。同類的結構層形態列舉鳥瞰(「分成兩組、第一組四本講……」)grep 候選 rg "分成[兩三四五]組|第[一二三四]組"、要讀者 hold 整張清單才能繼續讀,修法是關係鏈——成員逐個以它與前一個成員的內容關係進場;緊鄰表格或清單且各成員隨即具名展開的合規。見 coherence-by-shape-not-reader-memory
    • 教室形式三形態(教學定位被讀成教室講課時的殘留,三個形態各有檢查方式):
      • 形態一:情境故事開場——判別是刪掉開場第一段之後,不熟這個主題的讀者還能不能判斷這篇跟他要找的東西有沒有關係。開場的職責是寫出這篇討論哪些東西:逐一列出各段落的主題,寫到讀者能逐項對照自己需要的程度;適用的版本、環境與另有專篇的面向接在內容之後。只交代範圍(「範圍從 A 開始,到 B 為止」)也不夠,讀者要先知道整個主題由哪些部分組成,才看得懂 A 與 B 之間有什麼。改前:「本篇的情境來自一次實際排查⋯⋯」;改後:「這篇整理電腦經由 Wi-Fi 用 adb 連線到 Android 手機之後,遠端排查用到的指令:在多台裝置中指定要操作的那一台、擷取螢幕畫面與錄影並確認傳回的檔案完整、查出畫面最上層是哪個 App 的哪個 Activity、用 logcat 篩出某個元件啟動前後的紀錄、查詢 App 權限與使用者限制這類狀態,以及放寬安裝管控的修改型指令。」
      • 形態二:省略主詞受詞——grep 抓不到(缺的字沒有關鍵詞),靠冷讀(2-B′)或理解探針。判別是每一句的操作主體讀者在只看這一段的情況下能不能還原。改前:「回答的卻是沒問的那個問題」;改後:「把 dumpsys user 的輸出交給 grep -i restriction 過濾時,比對到的行包括 Guest restrictions 區塊裡的 no_install_unknown_sources;這個區塊列的是 guest 使用者型別的預設限制。」結果寫成可以觀察到的狀態(安裝、執行、成功、失敗、沒有回應、回傳哪個錯誤碼);「裝得起來」「被擋住」「撈到」只說了結果的方向或用了口語動詞,沒有說出結果是什麼
      • 形態三:教室互動語句 grep:rg "該問誰|要問誰|容易搞錯|容易讀反|容易認錯|前面提到的|前面說的|先確認.*再|先讀懂.*再|注意這裡"。修法是把互動句改成直述——「這裡容易讀反」改成引導看對的欄位並給出正確的讀法;「不能預設第一行就是有焦點的那一組」改成「dumpsys window 替每個顯示器各印一組 mCurrentFocus 與 mFocusedApp,讀輸出的人跳過兩個欄位的值都是 null 的那幾組,值不是 null 的那一組屬於有焦點的顯示器」。command 中性陳述語句合規
      • 形態四:判定標準包裝成自問自答 grep:rg "問自己|問一個問題|然後問"。改法是拆成條件與通過標準
      • 形態五:「問得出/問不出」替代指標 grep:rg "問得出|問不出來|問不出"。改法是寫出指標名稱與通過標準
      • 根因與判讀徵兆見 teaching-is-not-lecturing
    • 補充資訊歸位(先備知識與環境陷阱有沒有跟在所屬的指令旁邊)——grep 抓不到,判別問句是「讀者在讀到哪個位置時會需要這段資訊」。遊離的形態:參數的理由獨立成段而讀者掃表格時跳過它、環境陷阱跟在無關的段落後面。修法是搬到所屬的指令或概念旁邊——表格欄位裡、或緊跟指令的說明段。改前:-G 16M 的放大理由寫在表格下方一段散文裡;改後:搬進表格的用途欄。見 supplementary-knowledge-follows-its-parent-concept
    • 敘事姿態 grep:問句標題 rg "^title:.*[??]"、問句段標 rg "^#{2,} .*[??]"、敘事轉折詞 rg "才想清楚|還是被退|我到底|我於是"、輔助訊號是檢討類文章的「我」密度顯著高於同類其他篇 — 教學與檢討內容寫給帶問題來的讀者、標題寫主旨、結論與判斷標準由推導交付(不設懸念、也不把結論抽到開頭灌輸)、檢討用客觀條件視角;操作型自問句(判斷標準的執行步驟)與「」內引用合規、標題 / 段標 / 結論位扣住答案的問句違規、未經推導的開頭結論摘要與欄位組同屬違規;這類是生成端高頻預設、審查是補位、防線主力在生產側規範與模板。虛構經驗軸(AI 生成內容):第一人稱複數經驗宣稱 rg "我們團隊|我們的團隊|我們公司|我們曾|我當時" 與精確出處宣稱(「第 N 頁寫道」+ 引號引文)預設待驗——經驗宣稱是證據宣稱、虛構是造假不是修辭;先判定事件存不存在、再改姿態(順序反了會把虛構藏進條件視角);引文逐字核對、出處只寫到驗證過的層級;真實事件的工作紀錄與「」內他人自述合規。grep 只覆蓋三個掃描面裡的一面:虛構的人更常以第三人稱出現(PM / reviewer / 同事 / 新人 / 團隊士氣),沒有穩定關鍵詞、靠逐篇讀開場,而動機句常掛在這些角色身上;判定單位是生成批次不是關鍵字命中——一篇被判定虛構之後用版本歷史查同批(同 commit / 同日期 / 同模板)整批逐篇驗,清單清空不等於批次清空(一次實測:關鍵字命中 6 篇、實際同批 31 篇)。見 no-fabricated-experience-or-attribution 與 write-for-readers-not-audiences
    • 結論句標題與段標 grep:標題 rg -n '^title:.*(決定|主導|取決|不是|而是|才|就是|等於|只是|只有|由誰)'、兩個子句以上的段標 rg -n '^#{2,3} .*[,,]' — 教學文章的標題與段標寫主旨(對象與交付的內容種類)、不寫成結論句;命中後問這一行有沒有謂語在下斷言,有就改寫成主旨、把那句結論放回正文裡推導走完的位置(先確認正文那個位置真的有這一句)。合規邊界:「管理」「決策」這類名詞的命中、描述這一篇做什麼事的「對象+動詞」(「從入口程式看應用啟動流程」)、並列成員的逗號合規;歸納問題與解法的記錄是否比照由各內容集合裁定。「名詞讀者認不認得」那一半沒有關鍵詞可掃,寫的人自己判不準(他讀過全文),靠只給標題清單的讀者探針。改名之後同一次核對連結文字、節名引用與錨點。見 title-states-the-subject-not-a-premised-conclusion
    • 用詞搭配錯位 grep:rg "說完的話|背後.{0,8}的話|想告訴|潛台詞|訊號很直接|訊號.{0,4}很直接" — 把抽象概念(角度 / 框架 / 訊號 / 數字)配上不貼合屬性的謂語:擬人化錯配(角度不會「說」、數字不會「想告訴」)與形容詞錯配(訊號的可辨識度是「清晰 / 明確」不是「直接」)。無穩定關鍵詞、grep 只抓已知形態、真防線是異源冷讀(跟 register 類同屬同源盲區)。見 word-choice-fits-concept-attributes
    • 物理化錯配 grep(同一張卡四種錯配裡唯一有一組高密度關鍵詞可掃的):rg "撐得住|撐不住|撐得起|撐不起|能撐|撐住|撐起|撐不久|站得住|站不住|站得起|站不起|掛在|扛|垮|頂得住|咬得|咬合|啃" — 抽象概念(證據、論證、結論、判斷標準、方法、責任)配上承重、支撐、懸掛類的動詞。證據跟結論之間沒有重量、沒有支點、沒有材料強度,那些動詞不帶進資訊,只是把讀者對物理世界的直覺借過來蓋住實際的關係。偵測可機械執行:問這個動詞照字面成立需要什麼物理條件——需要重量、支點、材料強度、上下方位的就是借來的;這一步找出候選、不決定修法。修法看句子在做什麼:描述關係的(論證掛在前提上、責任由誰扛)換成關係動詞——論證依賴前提、資料佐證、責任由某人負責;足夠性斷言(宣稱某個對象足以或不足以滿足某個需求的句子:證據撐不撐得住、方法撐不久、這套說法會垮、資料庫撐得住這個流量)佔著需求與判斷標準的位置,與「問題」這個詞同一類,改寫要寫出需求(支持哪個決定、承受什麼負載、維持多久)、判斷標準(滿足到什麼程度算夠)與機制(靠什麼屬性滿足、在哪一點不再滿足)——換成「足以支持」「維持不久」仍然沒寫,不算修好。分界問一句:這句話是否在宣稱某個對象足以或不足以滿足某個需求。清單裡的其他動詞同樣先判斷佔住哪一格:拖垮、壓垮、扛不住佔住失效的形態與傳遞路徑(寫出哪個元件失效成什麼樣子——變慢、無回應、崩潰、資料錯誤——經由哪一項共用資源傳過去),硬扛、啃佔住負擔(誰承擔哪些工作、代價是什麼),掛在、咬合佔住關係(依賴、隸屬、耦合程度),站得住佔住可信度(多半整句不寫);負載情境再分容量、過載、故障擴散、突發緩衝與耗盡時間,「負載」本身要寫出單位,容量數字只留在範例情境並標明來源,見 physical-verbs-stand-in-for-content。例外:明示並就地展開成可逐項對應的類比(物理意象在同一段被對回真實機制)合規;沒展開的就是借詞。系統負載不豁免:「撐住尖峰流量」「拖垮 OLTP」有物理對應,而需求與判斷標準照樣被省略,要寫出負載量、判斷標準(例如延遲門檻)與瓶頸在哪一項資源;結構上的實際連接(「route table 掛在 subnet 上」)不是足夠性斷言,合規。先前的全站實測(716 個命中行判 68 個違規)是在系統負載豁免下量的,取消豁免後違規數會上升。這串清單是抽樣、不是這一類的全部——能進清單的只有違規義項佔該詞用法多數的詞,而本義合法的直譯(「滑坡」的本義是山崩,違規的只有 slippery slope 借來的義項;「下滑 / 滑落 / 滑向某個狀態」合規)與詞頻過高的泛用動詞(「拿到的是理解」——讀書得到的是理解、該說學到 / 讀出來 / 得到的教訓;而「拿到的需求 / 拿去用」合規)都漏在清單外,加進去只會用噪音蓋掉訊號。兩者改用探針:補語型態探針(「⋯⋯的是」後面接的是完整斷言而非名詞組時,前面那個動詞多半選錯——精準的認知動詞容得下子句、物理取得動詞只容得下名詞組)與本義探針(那個詞在本語言的本義是什麼詞性、什麼類別,跟句子把它當成什麼在用合不合)。換詞時同義詞要按語境分散,一律替換會用新模具換舊模具。判斷標準與清單的分工見 keyword-list-needs-dominant-violating-sense。見同一張 principle 卡
    • 結構譬喻頂替主詞與動詞 grep:rg "條線|書線|各接|承接|接得住|接不住|一個面($|[^向])|那一面|這一面|走《|,走 \[|住在|決定落在|決定的對象|承擔的角色|從印象變成" — 內容集合的組織者替自己的結構取了空間與搬運的名字(分類是幾條「線」、每一篇「承接」一個「面」、讀者「走」到下一篇、判定「住在」某一篇),寫進正文之後佔住了主詞與動詞。三種形態各藏一個槽位:譬喻當單位名藏主詞(換成集合裡實際的單位名:書單、主題篇、面向;「一側」照〈部分與一側當名字〉判)、搬運與居住動詞藏動作(換成實際的動作與動作者:討論、涵蓋、讀、收在、寫在、在這一篇的用途是)、轉化句藏動作者(「把 X 從印象變成數字」→「用哪幾項數字取代對 X 的印象」;「X 的決定落在 Y」→「X 討論的主題放在 Y 上」)。分工句寫成「這三本各自討論不同的面向:《A》討論…,《B》分析…」,句子本身就是分工;寫成「一個面向」時,同一句或下一句寫出是哪個面向。判讀分兩種問法:線、面、接、承接、走、住在、落在這組空間與搬運譬喻,先問這個詞描述的是不是內容集合的結構(分類、篇章、目錄頁、讀者的閱讀路徑、判定寫在哪裡),描述系統、市場或領域對象的多半合規,仍逐處問主詞做不做得了這個動作;轉化句與「承擔的角色」不是空間譬喻,不套這一問,改問〈每一句先填槽位再成句〉的「這一句描述的事誰做、主詞做不做得了這個動作」。集合的目錄頁(索引頁)也是集合的結構,照這一條判。換詞:替換詞照同一條再掃一次、判讀照樣問;依語境寫出實際的動作,不全篇換成同一個詞(「承接」一律換「涵蓋」是新的模具),換成「銜接、串起、扮演…角色、負責承載」只是換一個譬喻。pattern 非窮舉(詞取自一個書單集合與它的新稿):掃一個集合時,讀它的目錄頁、範本的段標與分工句,找出當「處理/討論/收」主詞的組織名詞與連結前面的動詞;補進的詞先抽樣,違規義項佔多數才加(判斷標準見 keyword-list-needs-dominant-violating-sense),命中多半是「第二層」這類序數分層的,歸〈序數與代號命名〉;逐類表這一列寫出補進的詞與讀了哪幾份檔案,沒補到詞時寫讀了哪幾份。以舊文章為範本寫新稿時什麼時候掃,見〈批量 sibling 寫作的生成端輪替〉。誤報依集合差很多:基礎設施類的「承接」多半是系統元件承接流量,財務類多半是「承接量」。轉向其他條目的情形:「承接」的主詞是正在讀的這一篇或這一個模組、描述它自己怎麼編排(「承接的就是這一段」「本模組承接另一模組的概念判讀」),歸 Core Principles 第 3 節〈連貫靠句句推進〉的文章自指;描述另一篇、另一個模組涵蓋或沒涵蓋某個主題(「模組七沒有一篇承接這個主題」)照本條判;「接得住/接不住」宣稱足不足夠時,照〈物理化錯配〉的足夠性斷言寫出需求、判斷標準與機制;主詞是物的「承擔」同時是〈用詞搭配錯位〉的擬人化;「這條線」指分界或判斷標準時,換成現成術語(判斷標準、門檻、邊界)。合規邊界:系統元件承接流量、連線或請求(「由 Cloud NAT 承接出站連線」)、市場交易的承接(承接量、承接買盤)、當譯名用的「承接(assume)」、人接手一件事(「這個決策由誰承接」);領域裡本來就叫「線」的名詞(產品線、資產線、時間線、邊界線、圖表的曲線、職涯的技術路線);字面的線性排列,限定排列的是實體或版面(「不排成一條線」;「把地基串成一條線」是組織譬喻,不在此列);「線索」;「住在」的主詞是檔案、目錄、資源,或系統裡的規則、資料與元件(「collation 住在欄位上」「最佳化器住在引擎裡」),描述內容集合時主詞是內容、判定、解釋的改「寫在」;主詞是人的「承擔的角色」;「決定落在哪一格」這類讀者在選項之間的選擇,以及讀者、改動、書、篇或判定「落在」某個條件、選項或分類(意思是屬於);引號內示範對話裡的用法。規則類文件(規則檔與 skill,包括本 skill)用承接、住在、落在描述路由目的地、資料夾,或內容寫在哪一個檔、哪一段、哪一處(「承接這個主題的資料夾」「推導住在 report 卡」「多份落在同一處」)的用法還沒有判定:審查時不列 finding,逐類表寫「未判定」,改寫到這些行時保留原詞;規則類文件裡其餘的結構譬喻(「這條線」「各接一個面」)照本條判。改寫時補出的主詞或對象,回到被介紹的對象(書、文件)與稿件前文核對。見 structural-metaphor-replaces-actor-and-verb
    • 替讀者假設情境與頻率 grep:rg "每週都|每天都|每次都會|天天|經常要|常常要|常常會|總是要|永遠在|一定遇過|都遇過|都經歷過|躲不掉的|免不了|總會遇到|遲早會" — 一句話替讀者決定他經歷過什麼、多常發生(「這個位置每週都會遇到的那場對話」),把一個條件寫成讀者的日常;沒經歷過的讀者對不上,可能推論自己做錯了什麼、或這份內容不是寫給他的。修法是寫成職責或條件並寫出發生的前提(「這個位置的職責包含的一種對話:團隊成員交出來的成果不夠好時,由對別人的產出負責的人指出這件事」);誇大的頻率(「天天開會」「永遠在救火」)換回它要說的機制(「之間要持續協調」);「多數這類對話難開口」若是引用的分析,寫出來源的名字(「依《書名》的分析」),是撰稿者自己的判斷時寫出依據或刪掉「多數」(這一形態沒有 pattern,逐處讀介紹來源的句子)。判讀問句是這個頻率描述的是誰的經歷、有沒有寫在一個條件或程序階段之下:描述讀者的經歷而沒有條件的是這一類(「真正天天影響你的是其中幾條」的文法主詞是物,頻率仍然加在讀者身上),只看文法主詞兩個方向都會判錯。條件寫在同一句、或同一段裡這一句之前都算;條件要是讀者拿得來對照自己處境的事實(「有三個以上的團隊、交接面開始需要設計時」),「在某些團隊裡」「團隊大了以後」不算條件。第二人稱的形態(「你天天用的」「你一定遇過」)同時落在〈對讀者喊話〉,用詞照那一條改。這一類的主要防線是異源冷讀,pattern 是輔助:它只抓帶頻率詞的形態,命中多半是系統或機制自己的運作;用指示詞預設讀者認得一個情境的形態沒有固定關鍵詞,候選用 rg "那場|那種|那一刻|那個時刻" 掃這次的掃描檔案集,命中後問前文有沒有描述過那個情境、這個處境是不是每一位讀者都有。合規邊界:頻率描述的是系統、程序或機制自己的運作(「排程每天執行一次」「債齡每天都在增加」),或讀者以外的第三方與外部事件(「客訴每天都在發生」「每天都有上百個搶購活動」);頻率寫在條件或程序階段之下(「主機經常重建的環境裡」「導入期間管理員仍要天天登入主機」);頻率寫在判讀訊號裡(「規則清單每週都在加新案例時,代表……」);有資料來源的頻率;段首寫明「具體是這樣」「舉一個例子」的假設示範;沒有主詞的類比句(「裝修完之後每天都在受益」)不屬這一類,照〈用詞搭配錯位〉判。見 sentence-assumes-the-readers-situation
    • 散文夾程式(計數找候選):去掉程式碼區塊後,一個散文段落裡行內程式碼達十處以上的列為候選——python3 -c 'import re,sys;[print(f,n) for f in sys.argv[1:] for n in [max([len(re.findall(r"[^\n]+",p)) for p in re.sub(r".*?","",open(f).read(),flags=re.S).split("\n\n") if not p.lstrip().startswith(("|","-","#",">"))]+[0])] if n>=10]’ <檔案…>。命中後問這些行內程式碼拼起來是不是一段讀者該整塊看的程式(一個查詢、一條指令、一段輸出);是的話程式與逐行解釋移進區塊寫成註解、推導留散文。各自是獨立名字的(欄位名、路徑、設定鍵)不必移,一串工具名是清單問題。十處是縮小候選的門檻、不是判定條件。**計數掃不到的形態是散文描述一段頁面上沒出現的程式**(「多一則三星之後回 101」「換成 NOT EXISTS 回 102」「展開之後是……」),行內程式碼只有兩三處,改用句型找候選:rg ‘(多|加|再加|刪掉?|改成)[一兩]?[則列筆張個][^。]{0,20}之後|換成[^。]{1,20}回|展開(之後|成)|也修不掉’`;能跑的就把程式與資料寫出來實跑、結果寫成註解,跑不了才照「不補」處理。見 code-fragments-in-prose-make-readers-reassemble
    • 指令引數未說明的檢查:有詞形可掃的三類——rg -n '^\s*[a-z].* /[a-z][a-zA-Z0-9_./-]*'(指令裡的絕對路徑)、rg -n '^\s*[a-z].* [A-Z][A-Z_]{3,}'(全大寫的常數引數)、rg -n '<[a-z_]+>'(佔位符,用來對照哪些位置已經被解釋過)。命中是候選、而更重要的是漏網的那些:小寫識別碼形式的引數(secure、windows、allow)沒有穩定詞形,grep 抓不到,要逐條指令過判斷標準問句。判定看那個位置的說明在不在全文裡,不看指令本身寫得清不清楚——區塊裡的字面值讀起來永遠是完整的,所以逐句自審與同源冷讀對這一類一律回報通過。見 literal-operand-hides-the-change-point
    • 並列括號的關係檢查:沒有關鍵詞可掃、形態可掃——rg -n "^\s*[-*0-9].*(.+)\s*$" 找出以括號收尾的條列項,連續三個以上就把整組抽出來並排,逐個寫下它與前面那個詞的關係(解釋 / 定義 / 範例 / 驗證方法 / 紀錄內容 / 度量)。版面上的同構本身是一個宣告,讀者依它去解讀每一個括號,各裝不同東西時他找不到那條統一規則就逐個猜——一次實測六個括號被探針判讀出六種關係,其中「形態數(簽核人與日期)」被讀成定義而照此執行的人會去數簽核人。每一個括號單獨看都通順,所以逐句自審過得去、要整組並排才看得見。修法是換成表格的顯性對映(讓表頭說出那個關係),或在括號裡加關係詞。條文被宣告為可執行時零容忍。合規邊界:嚴重度依條文可執行性分級——可執行條文零容忍列可改;目錄型列表與純說明性條列降為 Info;AUQ label/description 等規格字面的括號(內容為欄位規格非解釋)不計。見 parallel-parentheses-imply-a-uniform-relation
    • 懷疑某個詞本身不通用時有第二個探針:術語探針。對象從一段文字縮成一個詞,問多份低階模型這個詞在該領域指什麼——作者對自己寫過幾百次的詞已經沒有陌生感,這一項自審測不出來。設計上多一個條件:同批混入至少兩個已知通用的術語且不標示哪個是控制,控制詞收斂才代表分歧可歸因到詞本身。回答分四類讀而收斂度只分得出前三類(收斂=通用、各給不同定義而都有把握=一名多義、全部沒見過=非通用);第四類是少數份有把握而它們一致指向另一個所指——這個詞在同一個領域已經有主人,處置只能換掉且要換成描述,所以 prompt 要多一句「有把握的那些,寫出它指的東西」。而非通用不等於自創——真實存在於別的領域的詞在這裡讀不出來是語域錯配,處置相同而檢討的歸因不同。這一項也用來判口語譬喻算不算正式書面語,替換要先列詞形分佈再按義項走,見 term-probe-measures-register-not-invention。
    • grep 抓不到的那幾類有一個補位偵測:翻譯探針。把同一段中文派給多份低階模型翻成英文,判斷標準是份與份之間的分歧——中文允許不決定的語法項,英文強制決定(主詞、單複數、所有格的方向、並列的轄域、字面義還是譬喻義),譯者無法把原文的模糊態原樣搬過去。它對本節底下這幾類特別有效:頂替術語的譬喻(有現成術語的概念多份會收斂到那個術語、用譬喻的會分歧成多個英文詞——這是譬喻判斷標準的量測方式)、回收式過場那類零資訊句(中文的四字節奏讓空話讀起來像在做事、英文沒有那個節奏支撐)、位置與集合指涉裡的跨頁綁定(原語言讀者掃過去不停、翻譯者必須決定意思)、以及所有格方向與並列轄域這類 bank 沒有涵蓋的語法項。指令的產出是「翻譯時我必須自己決定、而原文沒有明確給出的東西」那一欄、譯文是副產品。收斂也要驗一步:三份收斂到同一個讀法通常是好消息,而收斂到同一個錯誤的讀法指的是原文替譯者做了決定、只是做錯了(一次實測:三份把「那一篇的三本」全部譯成 three statements,成因是指涉在同一句裡換了對象而句尾的鄰近詞把讀法拉過去)——回原文查一次那個讀法對不對,這一步的成本是一條 grep。自稱可機械執行的條文有兩個語法項要先關掉:基數(「對應到一個容器元件」不決定至少一個還是恰好一個,而一個關係對到兩個元件時兩者判定相反)與否定的轄域(「不」加單音節動詞可以是不執行這個動作、也可以是不施加這個要求,在規則文裡分別代表保留它與可以不填)。這一類的分歧不會進探針自己的決策清單——譯者當下沒有意識到自己在決定,所以要把譯文並排逐句對照,「決策清單很短」不代表原文乾淨。稿件要先通過理解探針才跑這個——命題層還沒收斂就跑會被大量低層 finding 淹沒。詳見 translation-forces-disambiguation
    • 翻譯探針的獨立性不可讓渡:不要在寫作當下自己產出譯文當校對。 訊號來自份與份之間的分歧,而分歧要能歸因到原文,前提是譯者無法用意圖補完——寫這段的實例自己翻是最極端的形態,餵整篇脈絡給它是同一件事的弱化版。一次十份對照(指令逐字相同、只差讀到的範圍)結果完全分離:有脈絡的 5/5 譯成作者意圖的讀法且零人標記不確定,無脈絡的 5/5 譯成另一個讀法。會傷到讀者的歧義,正好是作者毫無困難就能解決的那一種,所以自譯對它全盲、產出的譯文是一張錯誤的合格證明。寫作端要留下的是一個問句,不是譯文——沒讀過前文的人拿這一句,能不能定位到唯一的對象;答不出來就當場具名。見 probe-independence-is-not-transferable。
    • 命中數不是涵蓋率:一條回傳大量命中的 pattern 讀起來像「這一類有在管」,於是「這個體裁的這一類還有沒有別的形態」不會被問——零命中至少還會讓人懷疑 pattern 寫錯了。跑完一批修正之後回頭比對命中數:修了幾十處而數字幾乎沒動時,修的東西與量的東西不是同一批。這個對照免費(改動前後各跑一次),而它是涵蓋缺口最早的訊號。掃描指令本身也要驗——同一個 session 內三次因為指令而非內容漏報:zsh 的字串沒斷行、uniq -c 的輸出被誤讀、以及要求前後脈絡的 regex 略過了靠近行首行尾的命中。回報 clean 之前,先拿一個已知會命中的字串餵給同一條指令。 這三種裡最後一種有個可執行的修法,而它背後是一組相反的失效方向:換行與儲存格分隔符要替換成單一空白,不要刪除、也不要拿它們當切段的邊界——拿來切段會讓跨行或跨格的命中漏報,直接刪除會把相鄰的字接成原文沒有的字串而生出假命中,兩者都不報錯。取前後脈絡的掃描因此寫成不限長度的形式(.{0,20} 而不是 .{20}),並在回報零行時先看計數是不是也為零——計數非零而脈絡零行,零的是切段不是內容。
    • 這些 grep 曝光候選、不做自動判定:命中後要不要算違規有品味核心;且 LLM reviewer 跟作者共享文體、同源自審對 register 類(否定起手 / 喊話 / 誇飾 / 概念前置)有結構上限 ——「不是 X、而是 Y」這種 LLM 高頻自產句型最容易全員放水。grep + 同源判定只負責曝光候選、register 層的真防線是文體異源視角(human cold-read 或 prompt 採「挑剔否定起手 / 概念後置」對抗姿態的 reviewer)、同源回報的「clean」不可當真
    • 判斷標準外交接:驚嘆號等標點強度重複、逐字重複兩處歸「同一件事兩形」(結構層一致性判斷標準,非本清單類別);skill / reference 檔頭缺三段式(何時讀/同目錄/溯源)歸結構約設定判斷標準(self-application sweep 的 self-grep 對象)。兩者字面上像字句層問題、但本清單無對應類別,不列為本清單 finding
    • 1-A 掃描的另兩份判斷標準(非本清單成員):跑 1-A 全批掃描時,「隱含詞」歸文件撰寫明示性判斷標準,合規邊界已載於該專案的文件撰寫明示性規則(其撰寫前檢查清單一節);「優化」等禁用詞豁免範圍與 zhtw cross_strait/confusable 命中判專案 canonical 歸語言約束判斷標準,合規邊界已載於該專案的語言約束規則(禁用詞那一條)。本清單不重複載述條文內容,語意與命中規則以各自正本為準

逐類表留在版本控制看得到的位置:照本節跑完一批稿件的產出是一張逐類表——掃了哪幾類、各命中幾處、每處的語意判定,零命中的類別也列。這張表(連同探針回報的歸因,如果跑了探針)寫進 commit message 或專案的工作紀錄;只寫在對話回覆裡不算留下紀錄,因為對話結束之後沒有人讀得到它,而「完全沒跑」與「跑了零命中」在產物上看起來一樣。

詳細各維度的判讀規則跟修法、見對應 reference(writing-articles / writing-documents 等)跟 principles 目錄內的 cadence-homogenization / colloquial-rhetoric / regional-terminology / decorative-symbols / multi-pass-review-frame-granularity 等原則卡。

協同要點:

  • 單獨用 multi-round-review、容易漏字句層 — reviewer prompt 列「規範遵循」但漏 grep 具體 pattern
  • 單獨用本 skill、容易漏跨輪 frame 規劃 — 知道要檢查字句層、但缺「Round N+1 用什麼新 frame」結構
  • 兩個 skill 一起啟動 — multi-round-review 給結構、本 skill 給每輪的 grep checklist

寫作對象是「單篇 + 完稿前自己 review」時、用本 skill 第 6 原則(多輪 Re-read Pass)的 5 輪 frame 即可;寫作對象是「跨多篇 + agent reviewer 平行 audit」時、multi-round-review 接手結構規劃、本 skill 在 reviewer prompt 內被引用作為檢查清單。


Directory Index

 1compositional-writing/
 2├── SKILL.md                              # 本檔:核心原則速查 + 觸發路由
 3└── references/
 4    ├── writing-code-comments.md          # 情境 1:程式碼註解(含「動機先於文字」前置分岔)
 5    ├── writing-documents.md              # 情境 2:文件撰寫
 6    ├── writing-logs.md                   # 情境 3:log 輸出
 7    ├── writing-prompts.md                # 情境 4:prompt 撰寫
 8    ├── writing-articles.md               # 情境 5:完整長篇技術文章
 9    ├── source-to-teaching-analysis.md     # 情境 5a:外部分析材料 → 教學型分析文章
10    ├── translation-review.md             # 情境 5b:文章翻譯 / 轉譯的句內邏輯 review
11    ├── managing-article-collections.md   # 情境 5c:跨多篇文章的結構(三層、素材庫比例、MOC、Pattern 卡片)
12    ├── structuring-with-solid.md         # 情境 5d:結構決策標準(SOLID 寫作映射:拆分 / 擴充點 / 依賴方向 / 讀者分流)
13    ├── judgment-content-needs-scenarios.md # 情境 5e:判讀 / 選型類內容補情境與後果(形態 / 觸發事件 / 微案例、含正反例四組)
14    ├── demonstrating-commands.md         # 情境 5f:示範指令(區塊內容、註解分工、並列對照、參數表判斷標準)
15    ├── designing-fields.md               # 情境 6:欄位設計(含六欄位角度總表)
16    ├── designing-fields-ticket-6w.md     # 六欄位詳細範例:正確 + 混淆共 12 項(按需讀取)
17    ├── meta-metrics.md                   # 品質量化驗收(M1-M5)
18    ├── reference-authoring-standards.md  # Skill reference 撰寫品質規範
19    ├── dry-run-guide.md                  # Skill 發布前語意層驗收(Phase 2 dry-run 流程)
20    └── principles/                       # Skill 內部支撐型原則卡(含 terminology / naming / review / case-citation / agent-team 等原則)

Reading Order(建議閱讀順序)

  1. 第一次接觸 → 從本 SKILL.md 的「核心支柱 + 核心原則」讀起
  2. 進入實際寫作情境 → 依觸發路由讀對應 reference(只讀一份)
  3. 想驗證成果 → 讀 meta-metrics.md 做自評

Last Updated: 2026-10-14

版本紀錄在同目錄的 CHANGELOG.md。