壓縮標籤省下的字數是一次,展開成本乘以引用點數
論述基礎與限制
本卡由兩個實例歸納,兩例的形狀相同而取得方式不同,證據等級要分開讀。
第一例由併行 session 提供,該檔案由回報者持有,本卡的證據止於他的轉述。 一份互動規格的動畫提示表,列名寫「格選中態出現」,形式欄寫「點擊確認用內建 pressed 態,選中態本身無入場動畫(持續性標記)」。回報者指出還原這四個字要三項表外知識:「格」是哪一種格(回查該表所在章節的標題再對到元件目錄)、「選中態」是一次性回饋還是持續維持的標記(讀完形式欄的括號才知道)、「出現」在問什麼(看同表其他列才知道這一欄問的是狀態從無到有的那一瞬間要不要動畫)。自足寫法是「矩陣格的選取標記出現時」,多六個字。該列名另被下游規格四處逐字引用當跨檔錨點。回報者另記下同份文件的其他列寫得完整,判定為個案。
第二例是本站自測。 #302 定義的七種裝置,名字住在那張卡上,四個引用點各自轉述。三處保留完整形(docs/rules/writing.md〈content/ 文章的定位:教學;目錄頁與 report 卡另有體例〉(舊版的原則十一)的正文、compositional-writing 的 SKILL.md、multi-round-review 的 Round 2 reference),一處把限定語砍掉(AGENTS.md 完稿檢查清單的那一項)。
| 定義處的形態 | 檢查清單的形態 | 被砍掉的成分 |
|---|---|---|
| 順序關鍵加上顛倒的後果 | 顛倒的後果 | 主詞(什麼被顛倒) |
| 配比與參數數字 | 配比數字 | 一半的外延(參數) |
| 具體器具與工具作法 | 器具作法 | 範圍限定(具體、工具) |
| 可執行的操作判斷標準 | 操作判斷標準 | 資格限定(可執行的) |
| 檢查順序的指示 | 檢查順序指示 | 無(語法壓縮) |
整行省下十九個字。省下這些字的那一行正是完稿檢查清單,也就是這份規範裡逐項執行、每次使用都要重新解碼的位置;該處已隨本卡同一次改動補回完整形。分佈本身也是證據——其餘四個引用點都保留完整形,壓縮只發生在一處,所以一致性掃描找不到可比對的異常。
兩例都是個案,沒有對照組,本卡不宣稱這種缺陷有多常見。 成立的是機制與判斷標準,不是分佈。
核心原則
替一個概念取短名時,省下的字數付一次,還原限定語的成本乘以讀者數與引用點數。 兩側的量級不對稱,所以標籤越像術語、被引用得越廣,短名的收益越小而代價越大。
#261 把檢索鍵位(title、description、表格鍵欄、卡名、錨點)的義務定為識別充足——讀者能指認它索引的是哪個命題——並記下跟精簡規範衝突時精簡優先。本卡限定那條優先序:精簡優先的前提是這個鍵只有一個消費點。鍵一旦被別處逐字引用,它就同時是錨點,而錨點有兩個性質讓天平倒過來:
- 引用點只交付那個字串。 引用的形式是逐字比對,加字即斷開比對;每一個引用點因此只給得出短名本身,補完的責任全部落回讀者。
- 展開的代價隨引用點數上升。 既有標籤要改時,它與全部引用點必須同一次改,否則錨點斷開;所以短名的修復成本本身也乘以引用點數,而那個乘數只會隨時間變大。
識別充足因此需要一個可執行的判斷標準。判斷標準是兩個問句:這個標籤裡的每個名詞,讀者知道是哪一個嗎;每個動詞,讀者知道主詞是誰嗎。 兩題都答得出來才算識別充足。省略的限定語補回標籤本身,不補在鄰欄——讀者先讀標籤才決定要不要讀那一列,補在鄰欄的限定語落在他已經跳過的位置。
例外有兩種。 表頭語境下已經自足的通用欄位標籤(「觸發」「反應」在該表結構下無歧義),以及領域內有正式定義而讀者一跳查得到的術語。
為什麼既有的檢查走不到它
壓縮標籤看起來像術語,於是每一條以「殘片」為入口的檢查都放行。
#108 查的是名詞頭有沒有被砍到只剩形容詞或單字,「盲」這種形態自己就現形——它讀起來是半個詞。「顛倒的後果」「配比數字」「格選中態出現」的名詞頭都在,語法完整,放進表格第一欄成立,拿去 grep 也命中;#108 的四道檢查(拿出句子後知不知道是什麼、能不能放進表格第一欄、讀者能不能用它問問題、能不能跟同類詞並列)它全部通過。被砍掉的是限定語,而限定語的缺席在語法上沒有痕跡。
#261 的指涉閉合條件形式上涵蓋這一類(殘片名詞要有完整形先行),執行時走不到——執行者要先認出那是殘片才會去找完整形,而這些標籤讀起來是完整的詞。本站那一例的完整形就在同一份檔案裡,與壓縮版相隔一百七十二行。
一致性掃描同樣無效,而理由更基本:周圍都是對的。兩例的作者在同一份文件的其他位置都寫了完整形,壓縮是零星發生的,所以掃描找不到可比對的異常,逐句自審讀起來也通順。
根因在時序。壓縮發生在作者剛把一件事想清楚的當下,限定語在腦中太顯然、寫出來像廢話——而像廢話正是讀者需要的形態,他沒有經歷那次想清楚的過程。審查抓不到的原因相同:熟悉該文件的審查者持有同一份脈絡。第一例是由一位讀者問「這四個字是什麼意思」暴露的,而回答那個問題所花的成本(兩次檔案查詢加一整段拆解)本身就是量測值。
偵測與修法
偵測的入口是引用點數,而引用點數可以直接算。
1rg -F -l -- "<標籤字串>" <內容根目錄>命中兩個檔以上的標籤就是錨點,錨點逐個跑那兩個判斷標準問句。這條掃描的對象是定義處的標籤清單,不是全文的段標——用段標當代理會量到模板重複而不是引用(本站實測:段標出現次數的前幾名是 YAML、Problem、Server,全部是模板欄位)。
修法分兩種情形。
標籤還沒有被引用:直接把限定語補回標籤,成本是一次。
標籤已經是錨點:改動與全部引用點同一次進行,改完回頭跑一次同一條掃描確認沒有殘留舊字串。錨點斷開的失效形態跟 #155 的編號錯位同型——字面完好、語意 silent 指向錯的內容,比斷鏈難偵測。
跟其他抽象層原則的關係
| 原則 | 關係 |
|---|---|
| #261 語句要在它的消費單位內資訊自足 | 母卡。#261 把檢索鍵位的義務定為識別充足並讓精簡優先;本卡給識別充足一個可執行的判斷標準,並限定那條優先序——鍵同時是跨檔錨點時,自足壓過精簡。 |
| #108 中文壓縮術語要保留完整名詞頭 | 互補的兩種壓縮。#108 管名詞頭被砍(殘片自己現形),本卡管名詞頭健在而限定語被砍(讀起來像完整術語)。#108 的四道檢查對本卡的形態全數放行,這一點是本卡存在的理由。 |
| #155 引用錨點用語意標題、不用位置編號 | 錨點寫法家族的第一員。那裡的錨點是結構排列的 derivation,這裡的錨點是完整概念的壓縮;共同的失效是字面完好而語意 silent 指錯。 |
| #156 集合命名用角色、不內嵌數量 | 家族的第二員:名字裡內嵌成員數。三員的共同結構是把只在作者側成立的前提寫進了標識符,而標識符會被複製。 |
| #257 軸名取了次好的代理變數 | 相鄰而不同。#257 的名字選了較弱的代理,機制寫在括號裡;本卡的名字選對了機制,砍掉的是限定語。兩者共用同一個對讀者的傷害——讀者只拿得到名字,作者讀名字時腦中補的是完整版。 |
| #321 從名字出發的術語檢查抓不到從未命名的概念 | 同一種入口失配的另一端。#321 的名字頻率是零所以檢查走不到,本卡的名字語法合格所以檢查放行;兩者都由既有檢查的入口條件決定,跟審查認不認真無關。 |
| #302 定位決定體例 | 本卡第二個實例的來源:那七種裝置的名字住在 #302,而完稿檢查清單引用時砍掉限定語,照清單執行的人因此拿到四個無法就地判定的標籤(已修)。 |
- #353 從原則卡壓出來的操作形要獨立驗一次:同一個壓縮機制的另一個載體而軸不同。本卡的判斷標準是引用點數(被別處逐字引用兩處以上就要自足),那張的判斷標準是會不會被執行——衍生形通常只有一個消費點,而它是被照著做的那一個,所以引用一次也要自足。
判讀徵兆
| 訊號 | 該做的事 |
|---|---|
| 有人問「這個標籤是什麼意思」 | 回答所花的查詢步數就是量測值;把限定語補進標籤,讓下一個讀者直接讀得懂 |
| 某個標籤在兩個以上的檔案裡逐字出現 | 它是錨點,跑兩個判斷標準問句 |
| 標籤的限定語寫在鄰欄或括號裡 | 讀者先讀標籤才決定要不要讀鄰欄,把限定語搬進標籤本身 |
| 同一組名字在不同檔案有長短兩版 | 短版是壓縮的那一版,查它住在哪個消費位;住在檢查清單或路由表要優先修 |
| 剛把一件事想清楚,正在替它取名 | 限定語此刻讀起來像廢話,這是壓縮的觸發時點;判斷標準問句在這裡跑最便宜 |
核心:短名的收益結算一次,展開的代價由每一個讀者、每一個引用點各付一遍。標籤越像術語被到處引用,兩側的差距越大。