論述基礎與限制

本卡從兩個 session 併行做同一批查證的過程抽出,事件在 2026-08-30 到 08-31。兩邊各自累積了兩則錯誤的限制宣稱,其中三則寫進了共用的 memory 或派發指令,直到互相指認才被複驗。四則裡兩則完全不成立、一則範圍寫太寬。

限制有兩項。樣本全部來自網路查詢與命令列工具,其他形態的限制宣稱(API 配額、權限、相容性)是否共用同一個機制沒有驗過。複驗成本低是這一批的特性:四則的複驗都是一條指令,而需要重建環境才驗得動的限制宣稱,本卡的稽核建議可能不划算。

核心原則

宣稱分兩類,而它們的錯誤有完全不同的壽命。

事實類宣稱(「這個函式回傳 X」「這篇論文說 Y」)的反例會自己找上門:下一個引用它的人就撞到了。

限制類宣稱(「這個工具不能用」「這個站擋抓」「這條路走不通」)的反例必須被主動製造,而那則宣稱的作用正是勸阻你去製造它。它不只是難被發現——它的內容決定了沒有人會去發現它。

可以機械執行的簽名:問「什麼觀察會推翻這則宣稱」,答案是「一次我已經不再進行的嘗試」。

四個實例,兩個 session 各出兩則

「curl 被 sandbox 擋」。 一次寫檔失敗之後記下的通則,還寫進了派給另一個 session 的指令裡。複驗時三個站全部回 200。這一則的傳播代價具體可算:接到指令的那一方為了繞過它,改用瀏覽器下載一份 11 MB 的檔案,而且會回報路徑走通了——主路徑一直開著,沒有任何人會發現。

「這個站常回 404」。 複驗之後發現站是好的,404 來自猜錯的頁名:那個資料庫的分卷頁用兩位數編號,而當初猜的是中文的「卷三」寫法。失敗的原因在自己這一側,結論卻寫在對方身上。

「這個站用某工具抓會 404」。 字面成立,範圍寫太寬——同一個 URL 換一個工具回 200。那是工具的行為,不是站的性質,而寫下來的時候兩者沒有分開。

「搜尋額度跨 session 累計」。 這一則的效果是讓額度用完的一方以為整條路斷了,於是退回較弱的手段並把它的失敗當成結論。正解只是轉派給另一個執行者。實測當場證偽:一方回報額度耗盡的同時,另一方連跑十幾次都正常。

第二層:自己的失敗與對方的故障同形

前三則裡有兩則的成因在操作者這一側——猜錯頁名、選錯工具。這一層比「單次失敗推成通則」更難察覺,理由有兩個。

兩者在輸出上一模一樣。 頁名、參數、指令寫法錯了,回來的訊息跟對方壞掉沒有分別。要分開它們,得換一個維度再試一次,而那正是被勸阻的動作。

「那個站不穩」聽起來已經是一個解釋。 有了解釋之後就不再有問題要回答,於是複驗不會發生。這一則的複驗成本明明更低——換一個 URL 形式就知道——而成本低跟會不會被複驗是兩件事。

所以聽起來像解釋的結論要當成尚未歸因,而不是已經歸因。

稽核方法:掃形狀,不逐條重測

限制類宣稱不必全部重跑,掃一遍形狀就分得出哪些要複驗:

  • 「某某不能用/擋抓/會失敗/走不通」 — 標記待複驗。這種形狀的宣稱沒有人會去試,所以錯誤會留著。
  • 「某某是這樣運作的」 — 不必標記。能力類的宣稱有人會去用,用不成當場就知道。

一次實測裡,一份工具筆記的「擋抓清單」整段被標到,而同一份筆記裡談大檔怎麼下載的那一段一條都沒有——那一段每次被引用都在驗證自己。

複驗的動作固定三問:換一個工具試過嗎、換一個 URL 或參數形式試過嗎、失敗的訊息是對方回的還是自己這一側產生的。

修法

記錄時把觀察與結論分開。 「這個 URL 這次回 403」是觀察,「這個站擋抓」是結論,中間隔著上面那三問。只寫得出觀察的時候就只記觀察,並把試過的手段一起寫下來,讓下一個人知道還有哪些維度沒試。

限制宣稱要標日期與手段。 環境會變,而限制類宣稱的錯誤本來就不會被自然淘汰,所以它需要一個外加的過期機制。

寫進共用位置之前複驗一次。 memory、規範文件、派發指令這幾個位置的限制宣稱會被別人照著執行,而照著執行的人不會去試那條被說成走不通的路。

跟其他原則的關係

  • #300 查證回報的單位是宣稱,而失效的單位可能是整個框架 的後半管的是內容來源的「查不到不等於沒有」,本卡管的是能力與限制的宣稱。兩者的機制相同而限制那一類多一層:查不到一份資料,下一次有人需要它時還會再查一次;記下「這個工具不能用」,下一次沒有人會再試。那張卡的「歸因先於處置」在本卡換了個對象——那邊歸因的是讀者的誤讀,這邊歸因的是自己的失敗。
  • #294 非互動環境裡,要人停下來看的關卡表現成當機 是本卡的即時形態:一個關卡被讀成環境問題,於是人主動拆掉它。本卡處理的是那個誤讀被寫下來之後發生的事——它從一次判斷變成一條規則,作用範圍從當事人擴大到所有讀到它的人。
  • #295 查不到的反證要換一個維度 給的是複驗要換什麼:維度而不是次數。本卡補上它為什麼常常不會發生——維度換不換得動是能力問題,要不要換是動機問題,而錯誤的限制宣稱正好消滅了動機。
  • #291 掃描指令壞掉時不會報錯,它報一個數字 與本卡共用「自己這一側的錯誤看起來像外界的性質」這個結構。那裡是壞掉的指令回報一個自洽的數字,這裡是自己寫錯的 URL 回報成對方故障。
  • #296 同一個 session 派出的 reviewer 共用它的盲區 解釋了這四則為什麼是被互相指認出來的。限制宣稱寫下來之後對寫的人不再可疑,而另一個執行者沒有那一次失敗的記憶,於是照常去試。

判讀徵兆

  • 一則限制宣稱寫得出結論(「這個站擋抓」)而寫不出觀察(哪個 URL、哪個工具、什麼時候、回什麼)。
  • 問「什麼觀察會推翻它」,答案是一次已經不再進行的嘗試。
  • 某條路徑被繞過之後,繞道方案回報成功——而原路徑從此沒有再被試過。
  • 一份工具筆記裡的「不能用」清單比「怎麼用」清單舊得多,而兩者是同時寫的。
  • 對「這是對方壞了還是我寫錯了」這個問題,答案來自當時的印象而不是一次換維度的重試。
  • 派發指令裡帶著限制宣稱,而接到指令的一方沒有被要求驗證它。