<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Multi-Pass on Tarragon</title><link>https://tarrragon.github.io/blog/tags/multi-pass/</link><description>Recent content in Multi-Pass on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Sun, 26 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/multi-pass/index.xml" rel="self" type="application/rss+xml"/><item><title>Writing 的 multi-pass review：N 輪 review、每輪換 frame</title><link>https://tarrragon.github.io/blog/report/writing-multi-pass-review/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/report/writing-multi-pass-review/</guid><description>&lt;h2 id="結論">結論&lt;/h2>
&lt;p>寫文字（文章 / 註解 / doc / prompt / commit message）的 ROI 來自 &lt;strong>N 輪不同 frame 的 re-read&lt;/strong>、不是單次「寫對」。每輪 catch 上一輪 frame miss 的東西：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>輪次&lt;/th>
 &lt;th>Frame&lt;/th>
 &lt;th>抓什麼&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>生成&lt;/td>
 &lt;td>把 idea 變字、預期會有錯&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>2&lt;/td>
 &lt;td>對意圖（&lt;a href="../ease-of-writing-vs-intent-alignment/">#67&lt;/a>）&lt;/td>
 &lt;td>寫出來跟原意對齊嗎、有沒有便利驅動的偏移&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>3&lt;/td>
 &lt;td>機會成本語氣&lt;/td>
 &lt;td>有沒有「應該」「不行」「正確」絕對主義？是不是該翻成「在 X 情境下 A 較好、Y 情境 B 較好」&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>4&lt;/td>
 &lt;td>Grep-ability / 命名&lt;/td>
 &lt;td>關鍵字前置嗎？AI 能單次 grep 命中嗎？&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>5&lt;/td>
 &lt;td>反例 / 邊界&lt;/td>
 &lt;td>「何時不適用」段寫了嗎？反模式列了嗎？&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>每輪用「跟前一輪不同的眼睛」看同一份文字 — 才能 catch 不同層的問題。&lt;strong>第 1 輪的 frame 不可能同時 catch 所有層&lt;/strong>（&lt;a href="../literal-interception-vs-behavioral-refinement/">#82&lt;/a> 字面 vs 行為的 ceiling）。&lt;/p>
&lt;hr>
&lt;h2 id="為什麼一輪寫不出全部維度">為什麼一輪寫不出全部維度&lt;/h2>
&lt;p>寫的時候 working memory 有限、必須 collapse 多個維度去專注其中之一：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>生成 frame&lt;/strong> 在意 idea 完整 → 顧不上語氣&lt;/li>
&lt;li>&lt;strong>語氣 frame&lt;/strong> 在意「機會成本 vs 絕對主義」→ 顧不上 grep-ability&lt;/li>
&lt;li>&lt;strong>grep frame&lt;/strong> 在意關鍵字前置 → 顧不上反例&lt;/li>
&lt;/ul>
&lt;p>要求一輪同時 catch 所有 = 認知超載。實際結果是「每個維度都做一半」。&lt;/p>
&lt;p>&lt;strong>多輪設計接受 working memory 限制、用 N 輪解 N 維&lt;/strong>。每輪只專注一個 frame、效率反而高。&lt;/p>
&lt;hr>
&lt;h2 id="五輪-review-的具體-checklist">五輪 review 的具體 checklist&lt;/h2>
&lt;h3 id="輪-1生成">輪 1：生成&lt;/h3>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> idea 從頭寫到尾、不停下來改&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 預期會有 typo、結構亂、語氣不對 — 不在這輪修&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 跑得到結尾比寫得漂亮重要&lt;/li>
&lt;/ul>
&lt;h3 id="輪-2對意圖67">輪 2：對意圖（&lt;a href="../ease-of-writing-vs-intent-alignment/">#67&lt;/a>）&lt;/h3>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> 開頭一句講清「這段在說什麼」嗎？&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 有沒有 #67 的「便利驅動偏移」— 寫得順但其實偏題了？&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 段落順序是不是「好寫」決定的、不是「易讀」決定的？&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 有沒有「為了補滿格式」寫的廢段？&lt;/li>
&lt;/ul>
&lt;h3 id="輪-3機會成本語氣">輪 3：機會成本語氣&lt;/h3>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> 跑 grep 抓「應該 / 必須 / 不行 / 不可以 / 正確的方式 / 唯一」這些絕對詞&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 每個絕對詞檢查：是物理 / 法律 / 安全事實嗎？不是的話翻成「在 X 情境下 A 較好、Y 情境下 B 較好」&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 反模式表的「為什麼不好」寫到「違反某個原則」、不寫「就是不對」&lt;/li>
&lt;/ul>
&lt;h3 id="輪-4grep-ability--命名">輪 4：Grep-ability / 命名&lt;/h3>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> 關鍵字在段首、不在段中&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 表格欄位用 grep 友善的分隔（&lt;code>:&lt;/code> &lt;code>|&lt;/code> &lt;code>→&lt;/code>）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 檔名 / slug 跟 title 對應、不要用流水號&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 命名能用單次 grep 命中、不需要語意推理&lt;/li>
&lt;/ul>
&lt;h3 id="輪-5反例--邊界">輪 5：反例 / 邊界&lt;/h3>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> 「何時不適用」段寫了嗎？&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 反模式表給「為什麼不好 + 修法」嗎、還是只給警告？&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 跨卡 cross-link 補了嗎？&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 有沒有 over-claim、把「在多數情境下」說成「總是」？&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="套用到不同-output-類型">套用到不同 output 類型&lt;/h2>
&lt;p>每類有特化的輪次組合：&lt;/p></description><content:encoded><![CDATA[<h2 id="結論">結論</h2>
<p>寫文字（文章 / 註解 / doc / prompt / commit message）的 ROI 來自 <strong>N 輪不同 frame 的 re-read</strong>、不是單次「寫對」。每輪 catch 上一輪 frame miss 的東西：</p>
<table>
  <thead>
      <tr>
          <th>輪次</th>
          <th>Frame</th>
          <th>抓什麼</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>生成</td>
          <td>把 idea 變字、預期會有錯</td>
      </tr>
      <tr>
          <td>2</td>
          <td>對意圖（<a href="../ease-of-writing-vs-intent-alignment/">#67</a>）</td>
          <td>寫出來跟原意對齊嗎、有沒有便利驅動的偏移</td>
      </tr>
      <tr>
          <td>3</td>
          <td>機會成本語氣</td>
          <td>有沒有「應該」「不行」「正確」絕對主義？是不是該翻成「在 X 情境下 A 較好、Y 情境 B 較好」</td>
      </tr>
      <tr>
          <td>4</td>
          <td>Grep-ability / 命名</td>
          <td>關鍵字前置嗎？AI 能單次 grep 命中嗎？</td>
      </tr>
      <tr>
          <td>5</td>
          <td>反例 / 邊界</td>
          <td>「何時不適用」段寫了嗎？反模式列了嗎？</td>
      </tr>
  </tbody>
</table>
<p>每輪用「跟前一輪不同的眼睛」看同一份文字 — 才能 catch 不同層的問題。<strong>第 1 輪的 frame 不可能同時 catch 所有層</strong>（<a href="../literal-interception-vs-behavioral-refinement/">#82</a> 字面 vs 行為的 ceiling）。</p>
<hr>
<h2 id="為什麼一輪寫不出全部維度">為什麼一輪寫不出全部維度</h2>
<p>寫的時候 working memory 有限、必須 collapse 多個維度去專注其中之一：</p>
<ul>
<li><strong>生成 frame</strong> 在意 idea 完整 → 顧不上語氣</li>
<li><strong>語氣 frame</strong> 在意「機會成本 vs 絕對主義」→ 顧不上 grep-ability</li>
<li><strong>grep frame</strong> 在意關鍵字前置 → 顧不上反例</li>
</ul>
<p>要求一輪同時 catch 所有 = 認知超載。實際結果是「每個維度都做一半」。</p>
<p><strong>多輪設計接受 working memory 限制、用 N 輪解 N 維</strong>。每輪只專注一個 frame、效率反而高。</p>
<hr>
<h2 id="五輪-review-的具體-checklist">五輪 review 的具體 checklist</h2>
<h3 id="輪-1生成">輪 1：生成</h3>
<ul>
<li><input disabled="" type="checkbox"> idea 從頭寫到尾、不停下來改</li>
<li><input disabled="" type="checkbox"> 預期會有 typo、結構亂、語氣不對 — 不在這輪修</li>
<li><input disabled="" type="checkbox"> 跑得到結尾比寫得漂亮重要</li>
</ul>
<h3 id="輪-2對意圖67">輪 2：對意圖（<a href="../ease-of-writing-vs-intent-alignment/">#67</a>）</h3>
<ul>
<li><input disabled="" type="checkbox"> 開頭一句講清「這段在說什麼」嗎？</li>
<li><input disabled="" type="checkbox"> 有沒有 #67 的「便利驅動偏移」— 寫得順但其實偏題了？</li>
<li><input disabled="" type="checkbox"> 段落順序是不是「好寫」決定的、不是「易讀」決定的？</li>
<li><input disabled="" type="checkbox"> 有沒有「為了補滿格式」寫的廢段？</li>
</ul>
<h3 id="輪-3機會成本語氣">輪 3：機會成本語氣</h3>
<ul>
<li><input disabled="" type="checkbox"> 跑 grep 抓「應該 / 必須 / 不行 / 不可以 / 正確的方式 / 唯一」這些絕對詞</li>
<li><input disabled="" type="checkbox"> 每個絕對詞檢查：是物理 / 法律 / 安全事實嗎？不是的話翻成「在 X 情境下 A 較好、Y 情境下 B 較好」</li>
<li><input disabled="" type="checkbox"> 反模式表的「為什麼不好」寫到「違反某個原則」、不寫「就是不對」</li>
</ul>
<h3 id="輪-4grep-ability--命名">輪 4：Grep-ability / 命名</h3>
<ul>
<li><input disabled="" type="checkbox"> 關鍵字在段首、不在段中</li>
<li><input disabled="" type="checkbox"> 表格欄位用 grep 友善的分隔（<code>:</code> <code>|</code> <code>→</code>）</li>
<li><input disabled="" type="checkbox"> 檔名 / slug 跟 title 對應、不要用流水號</li>
<li><input disabled="" type="checkbox"> 命名能用單次 grep 命中、不需要語意推理</li>
</ul>
<h3 id="輪-5反例--邊界">輪 5：反例 / 邊界</h3>
<ul>
<li><input disabled="" type="checkbox"> 「何時不適用」段寫了嗎？</li>
<li><input disabled="" type="checkbox"> 反模式表給「為什麼不好 + 修法」嗎、還是只給警告？</li>
<li><input disabled="" type="checkbox"> 跨卡 cross-link 補了嗎？</li>
<li><input disabled="" type="checkbox"> 有沒有 over-claim、把「在多數情境下」說成「總是」？</li>
</ul>
<hr>
<h2 id="套用到不同-output-類型">套用到不同 output 類型</h2>
<p>每類有特化的輪次組合：</p>
<h3 id="文章contentpostscontentreport">文章（content/posts、content/report）</h3>
<p>完整跑 1-5 輪。額外加：</p>
<ul>
<li><strong>輪 6</strong>：跨卡 cross-link 健康度（單向引用 vs 雙向）</li>
<li><strong>輪 7</strong>：放回 <code>_index.md</code> 的索引條描述對應到內容嗎</li>
</ul>
<h3 id="程式註解doc-comment--inline">程式註解（doc comment / inline）</h3>
<p>跑 1-3 輪 + 額外：</p>
<ul>
<li><strong>輪 4&rsquo;</strong>：grep-ability 改成「介面 vs 實作分層」— doc comment 不洩漏 impl、inline comment 講 why 不講 what</li>
<li><strong>輪 5&rsquo;</strong>：反例改成「這個註解 5 個月後讀還看得懂嗎」（時間軸 robust）</li>
</ul>
<h3 id="naming變數--函式--檔名--slug">Naming（變數 / 函式 / 檔名 / slug）</h3>
<p>→ 見 <a href="../naming-as-iterated-artifact/">#84 Naming 是 iterated artifact</a>、有特化的 4 輪設計。</p>
<h3 id="prompt給-llm-的指令">Prompt（給 LLM 的指令）</h3>
<p>跑 1-3 輪 + 額外：</p>
<ul>
<li><strong>輪 4&rsquo;&rsquo;</strong>：模糊指令（<a href="/blog/skills/requirement-protocol/clarifying-ambiguous-instructions/" data-link-title="Clarifying Ambiguous Instructions — 模糊指令澄清協議" data-link-desc="requirement-protocol reference：空間 / 相對位置 / 隔離 / 決定權 / 篩選五類模糊指令的澄清模板 &#43; visible 三問判準 &#43; 篩選三問。">clarifying-ambiguous-instructions</a>）— 「對齊」「靠近」這類詞翻成具體數字 / 條件</li>
<li><strong>輪 5&rsquo;&rsquo;</strong>：「邊界 case 預期行為」明示了嗎</li>
</ul>
<hr>
<h2 id="stakes-conditional-追加輪epistemic-rigor">Stakes-conditional 追加輪：Epistemic Rigor</h2>
<p>5 輪基本 frame 是 frame 軸（生成 / 意圖 / 語氣 / grep / 反例）；<strong>高 stakes 內容</strong>（reader 照做後錯誤不可逆 / 系統層 / 不可分批 ship 修正）追加 stakes 軸的 <strong>輪 E：epistemic rigor</strong>——比照學術 peer review 的 claim / evidence / method / threats / citation 五個 sub-check、確認論述強度足以承擔 reader 直接 implement 的下游風險。</p>
<h3 id="啟動條件opt-in不污染預設">啟動條件（opt-in、不污染預設）</h3>
<table>
  <thead>
      <tr>
          <th>內容類型</th>
          <th>是否跑輪 E</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>一般技術文章（layout / refactor / debug 教學）</td>
          <td>不跑（5 輪夠）</td>
      </tr>
      <tr>
          <td>資安 / cryptography / 防護 mitigation 教學</td>
          <td><strong>跑</strong></td>
      </tr>
      <tr>
          <td>Concurrency 正確性 / memory model claims</td>
          <td><strong>跑</strong></td>
      </tr>
      <tr>
          <td>Distributed consistency / consensus 演算法</td>
          <td><strong>跑</strong></td>
      </tr>
      <tr>
          <td>Financial 計算 / accounting / settlement</td>
          <td><strong>跑</strong></td>
      </tr>
      <tr>
          <td>Medical / safety-critical 計算</td>
          <td><strong>跑</strong></td>
      </tr>
      <tr>
          <td>任何「reader 照做後錯誤不可逆 / 系統層」的內容</td>
          <td><strong>跑</strong></td>
      </tr>
  </tbody>
</table>
<p>判別啟動的核心問題：「<strong>reader 照這段實作會不會在生產系統留 silent gap、且不能靠後續 ship 修補</strong>？」——會 → 跑輪 E、不會 → 5 輪即可。動機論證見 <a href="../security-teaching-rigor-asymmetry/">#99 資安教學審查標準對應風險不對稱</a>。</p>
<h3 id="輪-eepistemic-rigor-的-5-個-sub-check">輪 E：Epistemic Rigor 的 5 個 sub-check</h3>
<table>
  <thead>
      <tr>
          <th>Sub-check</th>
          <th>問題</th>
          <th>對應 audit 維度</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>E.1 Claim</td>
          <td>每個結論可拆 falsifiable 子句嗎？</td>
          <td><a href="../false-sense-of-security-as-primary-failure/">#100 false sense of security</a></td>
      </tr>
      <tr>
          <td>E.2 Evidence</td>
          <td>claim → evidence 推論鏈完整、有 mechanism 嗎？</td>
          <td><a href="../mitigation-threat-alignment/">#102 mitigation 對位</a></td>
      </tr>
      <tr>
          <td>E.3 Method</td>
          <td>reader 照 method 做能反向驗證嗎？</td>
          <td><a href="../threat-model-explicitness/">#101 threat model 明確性</a> + <a href="../mitigation-threat-alignment/">#102</a></td>
      </tr>
      <tr>
          <td>E.4 Threats</td>
          <td>什麼前提失效會 invalidate？</td>
          <td><a href="../mitigation-context-dependence/">#103 context-dependence</a></td>
      </tr>
      <tr>
          <td>E.5 Citation</td>
          <td>版本 / 句意 / current best practice 都對嗎？</td>
          <td><a href="../security-citation-currency-and-precision/">#104 citation 時效精確</a></td>
      </tr>
  </tbody>
</table>
<h3 id="輪-e-的產出格式">輪 E 的產出格式</h3>
<p>跑完輪 E、每個 weakness 對應到一個 dimension + tier、見 <a href="../security-audit-recommendation-tiers/">#105 audit recommendation 層級</a>：</p>
<ul>
<li><strong>Accept</strong>：無 weakness 或在容忍範圍</li>
<li><strong>Minor revise</strong>：補 boundary / contrast / 版本標記類小改、不阻擋 ship</li>
<li><strong>Major revise</strong>：結構性 false sense、需重寫、ship 前必須修</li>
<li><strong>Withdraw</strong>：教錯主動誤導 reader（過時 crypto 沒標 deprecated / 扭曲 citation 反向違反現行標準 / defense theater 當示範），保留 = 增加生產系統 risk、必須移除或全換</li>
</ul>
<p>withdraw tier 是高 stakes 內容跟一般內容的關鍵差異——一般內容 review 沒有「保留 = 增加 risk」的硬決策、高 stakes 必須有。</p>
<h3 id="跟-5-輪基本-frame-的分工">跟 5 輪基本 frame 的分工</h3>
<table>
  <thead>
      <tr>
          <th>軸</th>
          <th>5 輪基本 frame</th>
          <th>輪 E（高 stakes 追加）</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>軸定位</td>
          <td>Frame 軸：每輪換一個寫作品質視角</td>
          <td>Stakes 軸：論述強度檢查</td>
      </tr>
      <tr>
          <td>觸發</td>
          <td>預設全跑（依 output 類型可跳少數輪）</td>
          <td>高 stakes 內容才 opt-in</td>
      </tr>
      <tr>
          <td>找的問題</td>
          <td>typo / 偏題 / 絕對主義 / grep / 邊界缺</td>
          <td>claim 空降 / 對位失效 / context 缺 / citation 過時 / withdraw-level 教錯</td>
      </tr>
      <tr>
          <td>失敗後果</td>
          <td>文字品質低、reader 用力讀</td>
          <td>reader 照做後實作出生產破口、silent failure</td>
      </tr>
  </tbody>
</table>
<p>兩軸正交、不取代——高 stakes 內容兩軸都跑（5 輪 frame + 輪 E stakes）、一般內容只跑 5 輪。輪 E 不在 5 輪裡是因為：把 epistemic rigor 設為預設會讓一般文章 over-audit、稀釋 review 紀律；設為 conditional opt-in 才能讓高 stakes 場景拉到學術級而不污染日常寫作。</p>
<p>→ 詳細維度展開（threat model 對稱 / mitigation 對位 mechanism / context-dependence / citation 時效）跟 audit recommendation tier 判準、見 <a href="../security-teaching-rigor-asymmetry/">#99</a> → <a href="../false-sense-of-security-as-primary-failure/">#100</a> → <a href="../threat-model-explicitness/">#101-104</a> → <a href="../security-audit-recommendation-tiers/">#105</a> 系列。</p>
<hr>
<h2 id="反模式跳輪的代價">反模式：跳輪的代價</h2>
<table>
  <thead>
      <tr>
          <th>反模式</th>
          <th>後果</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>寫完直接 ship、跳過所有 review 輪</td>
          <td>第 1 輪生成 frame 沒抓到的全部漏</td>
      </tr>
      <tr>
          <td>每輪用同個 frame review</td>
          <td>角度沒換、重複 catch 同類錯、新類錯不會浮現</td>
      </tr>
      <tr>
          <td>「我邊寫邊改」融合多輪</td>
          <td>working memory 超載、每維都做一半</td>
      </tr>
      <tr>
          <td>跳過輪 3 機會成本語氣</td>
          <td>絕對主義教讀者規則、不教思考</td>
      </tr>
      <tr>
          <td>跳過輪 4 grep</td>
          <td>AI 找不到、文字變孤兒</td>
      </tr>
      <tr>
          <td>跳過輪 5 反例</td>
          <td>看起來是教條、不是 trade-off</td>
      </tr>
      <tr>
          <td>「下次寫的時候多注意」當 review 取代</td>
          <td><a href="../external-trigger-for-high-roi-work/">#72 高 ROI 無觸發</a> 紀律失效</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="何時可以跳某些輪">何時可以跳某些輪</h2>
<table>
  <thead>
      <tr>
          <th>情境</th>
          <th>可跳的輪</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>內部 quick note、不會有人看</td>
          <td>跳 4 + 5（grep + 反例）</td>
      </tr>
      <tr>
          <td>Commit message</td>
          <td>跳 4 + 5、留 1-3</td>
      </tr>
      <tr>
          <td>Slack / chat 即時對話</td>
          <td>只跑輪 1</td>
      </tr>
      <tr>
          <td>引言 / 標題</td>
          <td>1-4 都跑、5 可省</td>
      </tr>
      <tr>
          <td>摘要 / TL;DR</td>
          <td>1-3 + 5（反例不適用、但語氣很重要）</td>
      </tr>
      <tr>
          <td>純資料填寫（schema / config）</td>
          <td>跳 3、其他都跑</td>
      </tr>
  </tbody>
</table>
<p>四類共通：<strong>ROI 不同、輪次組合不同</strong>。Production 文件 / 卡片 / 註解 全跑、即時通訊只跑核心。</p>
<hr>
<h2 id="跟其他抽象層原則的關係">跟其他抽象層原則的關係</h2>
<table>
  <thead>
      <tr>
          <th>原則</th>
          <th>關係</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="../ease-of-writing-vs-intent-alignment/">#67 寫作便利度</a></td>
          <td>輪 2 的核心判準 — 為什麼便利寫法 ≠ 對齊意圖</td>
      </tr>
      <tr>
          <td><a href="../literal-interception-vs-behavioral-refinement/">#82 字面攔截 vs 行為精煉</a></td>
          <td>本卡是 #82 在「寫」這個動作的具體實例 — review 是 multi-pass、不是 hook</td>
      </tr>
      <tr>
          <td><a href="../cards-as-living-system-iteration/">#81 卡片系統的迭代浮現</a></td>
          <td>spiral 浮現本身就是寫作的 multi-pass 範例（卡片 → meta → reference）</td>
      </tr>
      <tr>
          <td><a href="../decision-dialogue-dimensions/">#79 決策對話的五維度</a></td>
          <td>寫決策呈現要用 #79 self-check + 本卡的輪 2 一起跑</td>
      </tr>
      <tr>
          <td><a href="../naming-as-iterated-artifact/">#84 Naming 是 iterated artifact</a></td>
          <td>本卡的輪 4 在 naming 場景的特化</td>
      </tr>
      <tr>
          <td><a href="../methodology-multi-pass-embedding/">#85 Methodology 的 multi-pass 該 embed 在 pillar</a></td>
          <td>本卡的 5 輪設計就是 compositional-writing 該 embed 為「第 6 原則」的內容</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="判讀徵兆">判讀徵兆</h2>
<table>
  <thead>
      <tr>
          <th>訊號</th>
          <th>該做的事</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>寫完直接 commit、覺得「OK 應該夠」</td>
          <td>跑五輪、每輪都會抓到東西</td>
      </tr>
      <tr>
          <td>每次 review 都「看不出哪裡可改」</td>
          <td>Frame 沒換、改用下一輪的 frame 看</td>
      </tr>
      <tr>
          <td>「這次先這樣、下次寫好一點」</td>
          <td>是 <a href="../external-trigger-for-high-roi-work/">#72 結構性跳過</a>、補 trigger（pre-commit / template / pair）</td>
      </tr>
      <tr>
          <td>反模式段空白</td>
          <td>跳了輪 5、補</td>
      </tr>
      <tr>
          <td>找不到自己寫過的卡</td>
          <td>輪 4 沒做、grep-ability 漏掉</td>
      </tr>
      <tr>
          <td>文字看起來像教條</td>
          <td>輪 3 的絕對主義詞沒翻、補</td>
      </tr>
      <tr>
          <td>段落開頭看不出在說什麼</td>
          <td>輪 2 的意圖顯性沒做</td>
      </tr>
  </tbody>
</table>
<p><strong>核心</strong>：Writing 的 ROI 來自<strong>多輪不同 frame</strong>、不是單次「寫得仔細」。要寫得仔細的部分太多、超過 working memory、必須分輪。<strong>跳輪的代價是某維度永遠做一半、累積成「看起來都對但其實有漏」的低品質文字</strong>。</p>
]]></content:encoded></item><item><title>Naming 是 iterated artifact：第一個名字幾乎不對、四輪 review 才收斂</title><link>https://tarrragon.github.io/blog/report/naming-as-iterated-artifact/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/report/naming-as-iterated-artifact/</guid><description>&lt;h2 id="結論">結論&lt;/h2>
&lt;p>第一次寫的名字幾乎都不對 — 不是因為命名能力不夠、是因為&lt;strong>第一版命名只能基於「寫的當下看到的 context」&lt;/strong>、而正確的名字需要看到「未來所有 call-site / grep 結果 / 重構場景」。&lt;/p>
&lt;p>命名的正確設計是 &lt;strong>iterated artifact&lt;/strong>：寫 → re-read → 改 → 再 re-read → 收斂。每輪用不同 frame：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>輪&lt;/th>
 &lt;th>Frame&lt;/th>
 &lt;th>抓什麼&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>第一版&lt;/td>
 &lt;td>把概念變字串&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>2&lt;/td>
 &lt;td>Grep-ability&lt;/td>
 &lt;td>能單次 grep 命中嗎？跟其他 entity 名字不撞嗎？&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>3&lt;/td>
 &lt;td>Cross-call-site&lt;/td>
 &lt;td>從 caller 角度看、名字暗示的契約對嗎？&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>4&lt;/td>
 &lt;td>Impl 洩漏檢查&lt;/td>
 &lt;td>名字洩漏了 impl 細節嗎？換 impl 名字會錯嗎？&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>每輪可能 catch 到「上一輪沒看到」的問題、迫使重命名。&lt;strong>接受重命名是命名工作的常態、不是失敗&lt;/strong>。&lt;/p>
&lt;hr>
&lt;h2 id="為什麼第一版幾乎不對">為什麼第一版幾乎不對&lt;/h2>
&lt;p>寫第一版時、認知資源都在「概念是什麼」、剩下的給命名只夠：&lt;/p>
&lt;ul>
&lt;li>看到當前 function 在做的事 → 命名只反映當前&lt;/li>
&lt;li>不知道未來會有 N 個 call-site → 沒考慮一致性&lt;/li>
&lt;li>不知道未來會有 grep / refactor → 沒考慮 unique-ness&lt;/li>
&lt;li>不知道未來會換 impl → 命名容易洩漏現在的 impl 細節&lt;/li>
&lt;/ul>
&lt;p>第一版命名是&lt;strong>對「現在的 context」過度擬合&lt;/strong>。下一輪 review 換 frame 才能看到擬合方向之外。&lt;/p>
&lt;hr>
&lt;h2 id="四輪-review-的具體-checklist">四輪 review 的具體 checklist&lt;/h2>
&lt;h3 id="輪-1第一版">輪 1：第一版&lt;/h3>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> 名字反映「做什麼 / 是什麼」、不是「怎麼做」&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 動詞 / 名詞符合語言慣例（function 動詞、value 名詞）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 不超過 4 個單字（長 ≠ 清楚）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 跑得到 next step、不在這輪糾結&lt;/li>
&lt;/ul>
&lt;h3 id="輪-2grep-ability">輪 2：Grep-ability&lt;/h3>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> &lt;code>grep -r &amp;quot;&amp;lt;name&amp;gt;&amp;quot;&lt;/code> 能命中目標、不會被別的 entity 蓋過&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 跟 framework / library reserved name 不撞（避免 &lt;code>data&lt;/code>、&lt;code>type&lt;/code>、&lt;code>value&lt;/code> 等過泛）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 名字不是其他名字的子字串（&lt;code>get&lt;/code> 會匹配 &lt;code>getName&lt;/code> &lt;code>getUser&lt;/code>&amp;hellip;）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 中英混合場景下、英文部分能 grep（不要用 &lt;code>處理器handler&lt;/code> 這種 mixed）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 縮寫慎用（&lt;code>usr&lt;/code> &lt;code>cfg&lt;/code> &lt;code>mgr&lt;/code> 增加 grep 失敗率）&lt;/li>
&lt;/ul>
&lt;h3 id="輪-3cross-call-site-一致性">輪 3：Cross-call-site 一致性&lt;/h3>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> 從 caller 角度看、名字暗示的契約對嗎？&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 跟同 module 其他類似 entity 命名格式一致嗎？（&lt;code>getUser&lt;/code> vs &lt;code>fetchUser&lt;/code> 不該混用）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 同一個概念在不同 file 用同名嗎？（不該 &lt;code>userId&lt;/code> / &lt;code>user_id&lt;/code> / &lt;code>uid&lt;/code> 三個並存）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 動詞時態一致嗎？（&lt;code>fetched&lt;/code> vs &lt;code>fetching&lt;/code> vs &lt;code>fetch&lt;/code> 對應狀態 / 動作 / 命令、不該混用）&lt;/li>
&lt;/ul>
&lt;h3 id="輪-4impl-洩漏檢查">輪 4：Impl 洩漏檢查&lt;/h3>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> 名字含 impl 細節嗎？（&lt;code>fetchUserViaSql&lt;/code> ≠ &lt;code>fetchUser&lt;/code>、後者較好）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 換 impl 後名字還對嗎？（&lt;code>cacheGetUser&lt;/code> 改成走 DB 後名字錯了）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 名字洩漏 data structure 細節嗎？（&lt;code>userArray&lt;/code> ≠ &lt;code>users&lt;/code>、後者不綁 array）&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 介面層名字 vs 實作層名字區分嗎？（介面用「做什麼」、實作用「怎麼做」可加細節）&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="套用到不同命名場景">套用到不同命名場景&lt;/h2>
&lt;h3 id="變數--函式">變數 / 函式&lt;/h3>
&lt;p>完整跑 1-4 輪。&lt;/p></description><content:encoded><![CDATA[<h2 id="結論">結論</h2>
<p>第一次寫的名字幾乎都不對 — 不是因為命名能力不夠、是因為<strong>第一版命名只能基於「寫的當下看到的 context」</strong>、而正確的名字需要看到「未來所有 call-site / grep 結果 / 重構場景」。</p>
<p>命名的正確設計是 <strong>iterated artifact</strong>：寫 → re-read → 改 → 再 re-read → 收斂。每輪用不同 frame：</p>
<table>
  <thead>
      <tr>
          <th>輪</th>
          <th>Frame</th>
          <th>抓什麼</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>第一版</td>
          <td>把概念變字串</td>
      </tr>
      <tr>
          <td>2</td>
          <td>Grep-ability</td>
          <td>能單次 grep 命中嗎？跟其他 entity 名字不撞嗎？</td>
      </tr>
      <tr>
          <td>3</td>
          <td>Cross-call-site</td>
          <td>從 caller 角度看、名字暗示的契約對嗎？</td>
      </tr>
      <tr>
          <td>4</td>
          <td>Impl 洩漏檢查</td>
          <td>名字洩漏了 impl 細節嗎？換 impl 名字會錯嗎？</td>
      </tr>
  </tbody>
</table>
<p>每輪可能 catch 到「上一輪沒看到」的問題、迫使重命名。<strong>接受重命名是命名工作的常態、不是失敗</strong>。</p>
<hr>
<h2 id="為什麼第一版幾乎不對">為什麼第一版幾乎不對</h2>
<p>寫第一版時、認知資源都在「概念是什麼」、剩下的給命名只夠：</p>
<ul>
<li>看到當前 function 在做的事 → 命名只反映當前</li>
<li>不知道未來會有 N 個 call-site → 沒考慮一致性</li>
<li>不知道未來會有 grep / refactor → 沒考慮 unique-ness</li>
<li>不知道未來會換 impl → 命名容易洩漏現在的 impl 細節</li>
</ul>
<p>第一版命名是<strong>對「現在的 context」過度擬合</strong>。下一輪 review 換 frame 才能看到擬合方向之外。</p>
<hr>
<h2 id="四輪-review-的具體-checklist">四輪 review 的具體 checklist</h2>
<h3 id="輪-1第一版">輪 1：第一版</h3>
<ul>
<li><input disabled="" type="checkbox"> 名字反映「做什麼 / 是什麼」、不是「怎麼做」</li>
<li><input disabled="" type="checkbox"> 動詞 / 名詞符合語言慣例（function 動詞、value 名詞）</li>
<li><input disabled="" type="checkbox"> 不超過 4 個單字（長 ≠ 清楚）</li>
<li><input disabled="" type="checkbox"> 跑得到 next step、不在這輪糾結</li>
</ul>
<h3 id="輪-2grep-ability">輪 2：Grep-ability</h3>
<ul>
<li><input disabled="" type="checkbox"> <code>grep -r &quot;&lt;name&gt;&quot;</code> 能命中目標、不會被別的 entity 蓋過</li>
<li><input disabled="" type="checkbox"> 跟 framework / library reserved name 不撞（避免 <code>data</code>、<code>type</code>、<code>value</code> 等過泛）</li>
<li><input disabled="" type="checkbox"> 名字不是其他名字的子字串（<code>get</code> 會匹配 <code>getName</code> <code>getUser</code>&hellip;）</li>
<li><input disabled="" type="checkbox"> 中英混合場景下、英文部分能 grep（不要用 <code>處理器handler</code> 這種 mixed）</li>
<li><input disabled="" type="checkbox"> 縮寫慎用（<code>usr</code> <code>cfg</code> <code>mgr</code> 增加 grep 失敗率）</li>
</ul>
<h3 id="輪-3cross-call-site-一致性">輪 3：Cross-call-site 一致性</h3>
<ul>
<li><input disabled="" type="checkbox"> 從 caller 角度看、名字暗示的契約對嗎？</li>
<li><input disabled="" type="checkbox"> 跟同 module 其他類似 entity 命名格式一致嗎？（<code>getUser</code> vs <code>fetchUser</code> 不該混用）</li>
<li><input disabled="" type="checkbox"> 同一個概念在不同 file 用同名嗎？（不該 <code>userId</code> / <code>user_id</code> / <code>uid</code> 三個並存）</li>
<li><input disabled="" type="checkbox"> 動詞時態一致嗎？（<code>fetched</code> vs <code>fetching</code> vs <code>fetch</code> 對應狀態 / 動作 / 命令、不該混用）</li>
</ul>
<h3 id="輪-4impl-洩漏檢查">輪 4：Impl 洩漏檢查</h3>
<ul>
<li><input disabled="" type="checkbox"> 名字含 impl 細節嗎？（<code>fetchUserViaSql</code> ≠ <code>fetchUser</code>、後者較好）</li>
<li><input disabled="" type="checkbox"> 換 impl 後名字還對嗎？（<code>cacheGetUser</code> 改成走 DB 後名字錯了）</li>
<li><input disabled="" type="checkbox"> 名字洩漏 data structure 細節嗎？（<code>userArray</code> ≠ <code>users</code>、後者不綁 array）</li>
<li><input disabled="" type="checkbox"> 介面層名字 vs 實作層名字區分嗎？（介面用「做什麼」、實作用「怎麼做」可加細節）</li>
</ul>
<hr>
<h2 id="套用到不同命名場景">套用到不同命名場景</h2>
<h3 id="變數--函式">變數 / 函式</h3>
<p>完整跑 1-4 輪。</p>
<p>額外注意：</p>
<ul>
<li><strong>作用域</strong> — 越窄作用域越可短（loop counter <code>i</code>、close-up var <code>tmp</code>）；越寬作用域越要明確</li>
<li><strong>類型暗示</strong> — boolean 用 <code>is</code> / <code>has</code> / <code>should</code> 開頭</li>
</ul>
<h3 id="檔名--module">檔名 / module</h3>
<p>跑 1-4 + 加：</p>
<ul>
<li><strong>層級表達</strong> — 檔名能否反映在 directory 結構中的位置？</li>
<li><strong>避免 <code>utils</code> / <code>helpers</code> / <code>common</code></strong> — 這類是「不知該叫什麼」的訊號、強制再過一次輪 1-4</li>
</ul>
<h3 id="url-slug--route">URL slug / route</h3>
<p>跑 1-4 + 加：</p>
<ul>
<li><strong>SEO</strong> — 跟 search query 的 substring match 對齊（<a href="../search-engine-matching-mode-mismatch/">#73 search 匹配模式</a>）</li>
<li><strong>kebab-case 一致</strong></li>
<li><strong>不含 stop words</strong>（<code>the</code>、<code>a</code>、<code>is</code>、<code>of</code>、<code>with</code>、<code>and</code>）— 跟搜尋引擎 stemming 對齊</li>
</ul>
<h3 id="api-endpoint--db-column">API endpoint / DB column</h3>
<p>跑 1-4 + 加：</p>
<ul>
<li><strong>跨 service 一致性</strong> — 同一概念在 client / server / DB 用同名（避免 <code>user_id</code> / <code>userId</code> / <code>uid</code> 跨 layer 不一致）</li>
<li><strong>不可變更性</strong> — DB column / API endpoint 改名成本極高、輪 1-4 多跑幾次值得</li>
</ul>
<hr>
<h2 id="反模式放棄重命名">反模式：放棄重命名</h2>
<table>
  <thead>
      <tr>
          <th>反模式</th>
          <th>後果</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>「先這樣、之後再改」</td>
          <td><a href="../external-trigger-for-high-roi-work/">#72 結構性跳過</a> — 永遠不改</td>
      </tr>
      <tr>
          <td>「重命名 PR 風險高、別做」</td>
          <td>累積成 cognitive debt、後續 onboarding / debug 成本爆炸</td>
      </tr>
      <tr>
          <td>「IDE 會自動重命名、不用想清楚」</td>
          <td>IDE 改不到 doc / commit / chat 引用</td>
      </tr>
      <tr>
          <td>用 <code>data</code> <code>value</code> <code>type</code> <code>info</code> <code>obj</code> 含糊命名</td>
          <td>grep 失敗率高、自帶 false-match</td>
      </tr>
      <tr>
          <td>用語言不一致的 <code>處理 handler</code></td>
          <td>中英混雜、grep 兩邊都失敗</td>
      </tr>
      <tr>
          <td><code>tempVar1</code> <code>tempVar2</code> 流水號</td>
          <td>看不出是什麼、純佔位</td>
      </tr>
      <tr>
          <td><code>getUserById</code> 名字洩漏 query strategy</td>
          <td>換成 cache hit 後名字錯了</td>
      </tr>
      <tr>
          <td>複數同義詞並存（<code>fetch</code> / <code>get</code> / <code>load</code> / <code>retrieve</code>）</td>
          <td>caller 不知選哪個</td>
      </tr>
      <tr>
          <td>介面命名洩漏 impl（<code>HashMapUserStore</code>）</td>
          <td>impl 換 RedisStore 後 caller 跟著改</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="何時可以跳輪">何時可以跳輪</h2>
<table>
  <thead>
      <tr>
          <th>情境</th>
          <th>可跳輪</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Loop counter / 即時 close-up var</td>
          <td>只跑輪 1</td>
      </tr>
      <tr>
          <td>Test code 內部 helper</td>
          <td>跑輪 1 + 4</td>
      </tr>
      <tr>
          <td>Temporary script / one-off</td>
          <td>1 + 2</td>
      </tr>
      <tr>
          <td>跨 team API / DB schema</td>
          <td><strong>每輪都跑、跑兩遍</strong></td>
      </tr>
      <tr>
          <td>Public library / SDK</td>
          <td><strong>每輪都跑、跑兩遍</strong></td>
      </tr>
      <tr>
          <td>Production-facing URL / endpoint</td>
          <td><strong>不可跳、改名成本極高</strong></td>
      </tr>
  </tbody>
</table>
<p>兩極：作用域越窄越可省、跨邊界 / public 越要 multi-pass。</p>
<hr>
<h2 id="跟其他抽象層原則的關係">跟其他抽象層原則的關係</h2>
<table>
  <thead>
      <tr>
          <th>原則</th>
          <th>關係</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="../writing-multi-pass-review/">#83 Writing 的 multi-pass review</a></td>
          <td>本卡是 #83 輪 4 在 naming 場景的特化</td>
      </tr>
      <tr>
          <td><a href="../literal-interception-vs-behavioral-refinement/">#82 字面攔截 vs 行為精煉</a></td>
          <td>命名 lint（max length、case style）只擋字面、grep-ability / 一致性 / impl 洩漏靠 multi-pass review</td>
      </tr>
      <tr>
          <td><a href="../ease-of-writing-vs-intent-alignment/">#67 寫作便利度</a></td>
          <td>第一版命名是「容易寫」、不是「對齊意圖」、需要重命名</td>
      </tr>
      <tr>
          <td><a href="../search-engine-matching-mode-mismatch/">#73 search 匹配模式</a></td>
          <td>URL slug 的命名要跟 search 預期匹配模式對齊</td>
      </tr>
      <tr>
          <td><a href="../single-source-of-truth/">#44 SSOT</a></td>
          <td>同概念跨 layer 用同名 = naming SSOT、不該允許多版本同義</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="判讀徵兆">判讀徵兆</h2>
<table>
  <thead>
      <tr>
          <th>訊號</th>
          <th>該做的事</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>第一次想到的名字直接用了</td>
          <td>跑輪 2-4、預期會改</td>
      </tr>
      <tr>
          <td><code>data</code> <code>type</code> <code>value</code> <code>info</code> <code>obj</code> 出現</td>
          <td>含糊命名、強制重新命</td>
      </tr>
      <tr>
          <td><code>utils</code> / <code>helpers</code> / <code>common</code> module</td>
          <td>「不知該叫什麼」訊號、重新分類</td>
      </tr>
      <tr>
          <td>Grep 命中太多無關結果</td>
          <td>名字太短 / 太泛、重命名加 prefix</td>
      </tr>
      <tr>
          <td>Caller code 看 callsite 不知契約</td>
          <td>介面名字洩漏不夠、補強或改名</td>
      </tr>
      <tr>
          <td>重構後類型 / impl 換了名字沒換</td>
          <td>命名洩漏 impl、重命名</td>
      </tr>
      <tr>
          <td>同概念出現 ≥ 2 個名字</td>
          <td>違反 SSOT、選一個改另一個</td>
      </tr>
      <tr>
          <td>重命名 PR 被 reject「沒必要」</td>
          <td>文化沒接受 naming 是 iterated、補 reviewer education</td>
      </tr>
  </tbody>
</table>
<p><strong>核心</strong>：命名是 <strong>iterated artifact</strong>、不是 single-shot 動作。第一版基於狹窄 context 幾乎必錯。<strong>接受 N 輪 review 跟 K 次重命名是常態</strong>、命名品質會提升一個量級。試圖一次寫對 = 第一版 ship 出去 = 後續長期付 cognitive 成本。</p>
]]></content:encoded></item><item><title>Methodology 的 multi-pass 該升級為 pillar 層：核心結構才會被執行</title><link>https://tarrragon.github.io/blog/report/methodology-multi-pass-embedding/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/report/methodology-multi-pass-embedding/</guid><description>&lt;h2 id="結論">結論&lt;/h2>
&lt;p>凡是教做事方法的東西（SKILL、playbook、methodology document、checklist）— 如果你認為 multi-pass refinement 是必要的、就要把它放在&lt;strong>核心結構層&lt;/strong>（pillar、principle、step）、不是放在&lt;strong>附帶段&lt;/strong>（appendix、tips、reminder、see also）。&lt;/p>
&lt;p>放在 appendix = 結構暗示「optional、看心情選擇」 = 在 &lt;a href="../external-trigger-for-high-roi-work/">#72 高 ROI 無觸發&lt;/a> 的結構壓力下、永遠被跳過。&lt;strong>Pillar 層 = 結構性必跑、用結構強制行為、不靠紀律&lt;/strong>。&lt;/p>
&lt;hr>
&lt;h2 id="為什麼-pillar--appendix-的位置決定執行率">為什麼 pillar / appendix 的位置決定執行率&lt;/h2>
&lt;p>讀者看 SKILL / methodology 時、認知資源分配：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Pillar / Core Principles&lt;/strong>：必讀、會內化、實作中會回想&lt;/li>
&lt;li>&lt;strong>Steps / Reference&lt;/strong>：實作中翻&lt;/li>
&lt;li>&lt;strong>Tips / Appendix / &amp;ldquo;See also&amp;rdquo;&lt;/strong>：第一次讀掃過、之後忘記&lt;/li>
&lt;/ul>
&lt;p>把 multi-pass review 放 appendix = 結構暗示「這是進階、可選」。即使內容寫得很詳細、結構訊號蓋過內容。&lt;/p>
&lt;p>對比放 pillar：每次接觸 SKILL、第一眼看到 4-5 個 pillar 中包含 &amp;ldquo;Multi-pass Refinement&amp;rdquo; — 結構性提示「這跟其他 pillar 同樣重要」。&lt;/p>
&lt;hr>
&lt;h2 id="各-methodology-的-pillar--appendix-切分">各 methodology 的 pillar / appendix 切分&lt;/h2>
&lt;p>實際 methodology 文件的 pillar 應該包含 multi-pass、appendix 應該避免：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Methodology&lt;/th>
 &lt;th>適合的 pillar&lt;/th>
 &lt;th>不適合放 appendix&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>compositional-writing（寫作方法論）&lt;/td>
 &lt;td>第 6 原則「Re-read Pass」明示輪次&lt;/td>
 &lt;td>「最後 review 一下」三字附帶&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>requirement-protocol（需求協議）&lt;/td>
 &lt;td>第 4 pillar「Multi-pass Refinement」明示「第 1 輪實作預期不對」&lt;/td>
 &lt;td>「失敗多次再回頭看」零散提示&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>frontend-with-playwright（前端 + 測試協議）&lt;/td>
 &lt;td>「漸進驗證」在 6 大原則中（已有）、再加「Multi-pass Review」串成系列&lt;/td>
 &lt;td>TODO 註解講「之後 review」&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>TDD（test-driven）&lt;/td>
 &lt;td>RED-GREEN-REFACTOR 三步本身就是 multi-pass&lt;/td>
 &lt;td>「重構是 optional」當 appendix&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Agile（process）&lt;/td>
 &lt;td>Sprint review / retrospective 是 pillar&lt;/td>
 &lt;td>「有空回顧一下」當 appendix&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>每個 methodology 的設計都該檢查：&lt;strong>multi-pass 是 pillar 還是 appendix？&lt;/strong>&lt;/p>
&lt;hr>
&lt;h2 id="如何識別該升-pillar-但被當-appendix">如何識別「該升 pillar 但被當 appendix」&lt;/h2>
&lt;p>訊號：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>訊號&lt;/th>
 &lt;th>該做的事&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>「最後再 review 一下」「有空再 polish」這類 disclaimer&lt;/td>
 &lt;td>升成獨立 pillar / 原則&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Multi-pass 內容散在多個 reference 角落、沒有單一定位&lt;/td>
 &lt;td>抽出 pillar、各 reference 引用&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Pillar 列表只 3 條（看似簡潔）、但實作中常忘 review&lt;/td>
 &lt;td>缺 pillar、補上 multi-pass&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>「第 1 輪原則」+「第 2 輪原則」分開兩個 SKILL&lt;/td>
 &lt;td>合併、multi-pass 是同 SKILL 的多輪、不是兩個 SKILL&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>文件結尾「最後注意事項」常被使用者引用為「我忘了」&lt;/td>
 &lt;td>結構問題、移到 pillar&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>每個訊號都是 &lt;strong>multi-pass 的位置太低&lt;/strong>、結構壓力把它當作 optional。&lt;/p>
&lt;hr>
&lt;h2 id="升-pillar-後的設計四個必要元素">升 pillar 後的設計：四個必要元素&lt;/h2>
&lt;p>把 multi-pass 升成 pillar、需要含這四個元素才完整：&lt;/p>
&lt;h3 id="1-明示第-1-輪不追求完美">1. 明示「第 1 輪不追求完美」&lt;/h3>
&lt;p>寫在 pillar 內容、第一句就講：「第 1 輪不要追求 perfect、預期會有未發現問題、設計第 2 輪去 catch」。&lt;/p></description><content:encoded><![CDATA[<h2 id="結論">結論</h2>
<p>凡是教做事方法的東西（SKILL、playbook、methodology document、checklist）— 如果你認為 multi-pass refinement 是必要的、就要把它放在<strong>核心結構層</strong>（pillar、principle、step）、不是放在<strong>附帶段</strong>（appendix、tips、reminder、see also）。</p>
<p>放在 appendix = 結構暗示「optional、看心情選擇」 = 在 <a href="../external-trigger-for-high-roi-work/">#72 高 ROI 無觸發</a> 的結構壓力下、永遠被跳過。<strong>Pillar 層 = 結構性必跑、用結構強制行為、不靠紀律</strong>。</p>
<hr>
<h2 id="為什麼-pillar--appendix-的位置決定執行率">為什麼 pillar / appendix 的位置決定執行率</h2>
<p>讀者看 SKILL / methodology 時、認知資源分配：</p>
<ul>
<li><strong>Pillar / Core Principles</strong>：必讀、會內化、實作中會回想</li>
<li><strong>Steps / Reference</strong>：實作中翻</li>
<li><strong>Tips / Appendix / &ldquo;See also&rdquo;</strong>：第一次讀掃過、之後忘記</li>
</ul>
<p>把 multi-pass review 放 appendix = 結構暗示「這是進階、可選」。即使內容寫得很詳細、結構訊號蓋過內容。</p>
<p>對比放 pillar：每次接觸 SKILL、第一眼看到 4-5 個 pillar 中包含 &ldquo;Multi-pass Refinement&rdquo; — 結構性提示「這跟其他 pillar 同樣重要」。</p>
<hr>
<h2 id="各-methodology-的-pillar--appendix-切分">各 methodology 的 pillar / appendix 切分</h2>
<p>實際 methodology 文件的 pillar 應該包含 multi-pass、appendix 應該避免：</p>
<table>
  <thead>
      <tr>
          <th>Methodology</th>
          <th>適合的 pillar</th>
          <th>不適合放 appendix</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>compositional-writing（寫作方法論）</td>
          <td>第 6 原則「Re-read Pass」明示輪次</td>
          <td>「最後 review 一下」三字附帶</td>
      </tr>
      <tr>
          <td>requirement-protocol（需求協議）</td>
          <td>第 4 pillar「Multi-pass Refinement」明示「第 1 輪實作預期不對」</td>
          <td>「失敗多次再回頭看」零散提示</td>
      </tr>
      <tr>
          <td>frontend-with-playwright（前端 + 測試協議）</td>
          <td>「漸進驗證」在 6 大原則中（已有）、再加「Multi-pass Review」串成系列</td>
          <td>TODO 註解講「之後 review」</td>
      </tr>
      <tr>
          <td>TDD（test-driven）</td>
          <td>RED-GREEN-REFACTOR 三步本身就是 multi-pass</td>
          <td>「重構是 optional」當 appendix</td>
      </tr>
      <tr>
          <td>Agile（process）</td>
          <td>Sprint review / retrospective 是 pillar</td>
          <td>「有空回顧一下」當 appendix</td>
      </tr>
  </tbody>
</table>
<p>每個 methodology 的設計都該檢查：<strong>multi-pass 是 pillar 還是 appendix？</strong></p>
<hr>
<h2 id="如何識別該升-pillar-但被當-appendix">如何識別「該升 pillar 但被當 appendix」</h2>
<p>訊號：</p>
<table>
  <thead>
      <tr>
          <th>訊號</th>
          <th>該做的事</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>「最後再 review 一下」「有空再 polish」這類 disclaimer</td>
          <td>升成獨立 pillar / 原則</td>
      </tr>
      <tr>
          <td>Multi-pass 內容散在多個 reference 角落、沒有單一定位</td>
          <td>抽出 pillar、各 reference 引用</td>
      </tr>
      <tr>
          <td>Pillar 列表只 3 條（看似簡潔）、但實作中常忘 review</td>
          <td>缺 pillar、補上 multi-pass</td>
      </tr>
      <tr>
          <td>「第 1 輪原則」+「第 2 輪原則」分開兩個 SKILL</td>
          <td>合併、multi-pass 是同 SKILL 的多輪、不是兩個 SKILL</td>
      </tr>
      <tr>
          <td>文件結尾「最後注意事項」常被使用者引用為「我忘了」</td>
          <td>結構問題、移到 pillar</td>
      </tr>
  </tbody>
</table>
<p>每個訊號都是 <strong>multi-pass 的位置太低</strong>、結構壓力把它當作 optional。</p>
<hr>
<h2 id="升-pillar-後的設計四個必要元素">升 pillar 後的設計：四個必要元素</h2>
<p>把 multi-pass 升成 pillar、需要含這四個元素才完整：</p>
<h3 id="1-明示第-1-輪不追求完美">1. 明示「第 1 輪不追求完美」</h3>
<p>寫在 pillar 內容、第一句就講：「第 1 輪不要追求 perfect、預期會有未發現問題、設計第 2 輪去 catch」。</p>
<p>去掉「第 1 輪該寫對」的隱含預設、釋放認知資源。</p>
<h3 id="2-列出-n-輪的-frame-清單">2. 列出 N 輪的 frame 清單</h3>
<p>每輪用什麼 frame、catch 什麼。例：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">輪 1：生成 — idea → 字
</span></span><span class="line"><span class="ln">2</span><span class="cl">輪 2：對意圖 — 跟原意對齊嗎
</span></span><span class="line"><span class="ln">3</span><span class="cl">輪 3：機會成本語氣 — 絕對主義詞翻成 trade-off
</span></span><span class="line"><span class="ln">4</span><span class="cl">輪 4：grep-ability — 關鍵字前置嗎
</span></span><span class="line"><span class="ln">5</span><span class="cl">輪 5：反例 / 邊界 — 何時不適用寫了嗎</span></span></code></pre></div><h3 id="3-何時可跳輪">3. 何時可跳輪</h3>
<p>不是所有情境都跑全輪。寫清楚「跳輪的合理情境」、避免「跑全輪 = 過度工程」的反彈。</p>
<h3 id="4-跨-frame-的不可替代性">4. 跨 frame 的不可替代性</h3>
<p>明示：<strong>輪 N 不能用「再跑一次輪 N-1」取代</strong> — 不同 frame 才能 catch 不同層。重複同 frame = 同類錯一直 miss。</p>
<hr>
<h2 id="反模式我自己會-review當-pillar-替代">反模式：「我自己會 review」當 pillar 替代</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">不該寫：「請務必在送出前自行 review。」
</span></span><span class="line"><span class="ln">2</span><span class="cl">應該寫：「此 methodology 的第 N 個 pillar 是 Multi-pass Review、含 1-5 輪 frame：⋯⋯」</span></span></code></pre></div><p>「自行 review」= L1 紀律（<a href="../external-trigger-for-high-roi-work/">#72</a>）= 預期失敗。</p>
<p>「列入 pillar + 列輪次 + 列 checklist」= L3-L5 結構性對策 = 結構強制執行。</p>
<hr>
<h2 id="套用到本系統的具體-case">套用到本系統的具體 case</h2>
<h3 id="case-1requirement-protocol-skill">Case 1：requirement-protocol skill</h3>
<ul>
<li><strong>現況</strong>：3 大支柱 + 6 大原則、multi-pass 散在「2 次門檻」「漸進驗證」「revert checkpoint」三條原則裡、沒明示</li>
<li><strong>應該</strong>：升第 4 支柱「Multi-pass Refinement」、把散落的多輪意涵集中</li>
</ul>
<h3 id="case-2compositional-writing-skill">Case 2：compositional-writing skill</h3>
<ul>
<li><strong>現況</strong>：3 大支柱 + 5 大原則、各 reference 結尾有「self-check」段（部分 multi-pass 跡象）</li>
<li><strong>應該</strong>：升第 6 原則「Re-read Pass」、引用 <a href="../writing-multi-pass-review/">#83</a> 的 5 輪 frame、各 reference 加「第 2 輪 review checklist」</li>
</ul>
<h3 id="case-3frontend-with-playwright-skill">Case 3：frontend-with-playwright skill</h3>
<ul>
<li><strong>現況</strong>：「漸進驗證」原則含 multi-pass、但跟「dogfood / 多輪測試」沒串連</li>
<li><strong>應該</strong>：補抽象層原則段、明示 multi-pass 跨「漸進驗證 → playwright dogfood → production observation」是同一條 spiral</li>
</ul>
<hr>
<h2 id="跟其他抽象層原則的關係">跟其他抽象層原則的關係</h2>
<table>
  <thead>
      <tr>
          <th>原則</th>
          <th>關係</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="../external-trigger-for-high-roi-work/">#72 高 ROI 無觸發</a></td>
          <td>本卡是 #72 在 methodology 設計層的展現 — appendix-level 是 L1 紀律、pillar-level 是 L3-L5 結構</td>
      </tr>
      <tr>
          <td><a href="../literal-interception-vs-behavioral-refinement/">#82 字面攔截 vs 行為精煉</a></td>
          <td>Methodology 設計這個動作本身就是 multi-pass 的對象 — 第一版 pillar 不對、要 review</td>
      </tr>
      <tr>
          <td><a href="../writing-multi-pass-review/">#83 Writing 的 multi-pass review</a></td>
          <td>寫 methodology 文件本身要套 #83 — methodology 文件也是 writing</td>
      </tr>
      <tr>
          <td><a href="../naming-as-iterated-artifact/">#84 Naming 是 iterated artifact</a></td>
          <td>Pillar 的命名要跑 multi-pass naming review</td>
      </tr>
      <tr>
          <td><a href="../ease-of-writing-vs-intent-alignment/">#67 寫作便利度</a></td>
          <td>寫 methodology 時、便利的寫法是「核心 3 條 + 細節塞 appendix」、跟「使用者實際需要 multi-pass 跑」不對齊</td>
      </tr>
      <tr>
          <td><a href="../minimum-necessary-scope-is-sanity-defense/">#43 最小必要範圍</a></td>
          <td>Pillar 不該過度膨脹、但「該升的內容沒升」是反向偏差、本卡是補 #43 的另一邊</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="判讀徵兆">判讀徵兆</h2>
<table>
  <thead>
      <tr>
          <th>訊號</th>
          <th>該做的事</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Methodology 文件結尾有「最後 review 一下」</td>
          <td>升 pillar</td>
      </tr>
      <tr>
          <td>Pillar 列表只 3 條、但 reference 多次提到「再過一次」</td>
          <td>缺 multi-pass pillar</td>
      </tr>
      <tr>
          <td>Multi-pass 內容散在 ≥ 3 個地方</td>
          <td>抽 pillar、各 reference 引用</td>
      </tr>
      <tr>
          <td>「進階使用者再 review」這類分級</td>
          <td>結構訊號錯位 — multi-pass 不是進階、是 baseline</td>
      </tr>
      <tr>
          <td>使用者反饋「我忘了 review」</td>
          <td>結構問題、不是紀律問題、升 pillar</td>
      </tr>
      <tr>
          <td>Reference 結尾 self-check 沒人用</td>
          <td>位置太尾、提升結構地位</td>
      </tr>
      <tr>
          <td>新 methodology 文件第一版</td>
          <td>預設加 multi-pass pillar、不是寫完才補</td>
      </tr>
  </tbody>
</table>
<p><strong>核心</strong>：Methodology 設計的 pillar / appendix 切分<strong>不是內容深淺問題、是執行率問題</strong>。Pillar 層必跑、appendix 層不跑。把 multi-pass 視為「附帶」= 結構性確保它不被執行。<strong>真正必要的東西要升結構、不能藏在末尾</strong>。</p>
]]></content:encoded></item></channel></rss>