<?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>技術文件 on Tarragon</title><link>https://tarrragon.github.io/blog/tags/%E6%8A%80%E8%A1%93%E6%96%87%E4%BB%B6/</link><description>Recent content in 技術文件 on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 17 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/%E6%8A%80%E8%A1%93%E6%96%87%E4%BB%B6/index.xml" rel="self" type="application/rss+xml"/><item><title>技術文章撰寫規範</title><link>https://tarrragon.github.io/blog/posts/%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%92%B0%E5%AF%AB%E8%A6%8F%E7%AF%84/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/posts/%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%92%B0%E5%AF%AB%E8%A6%8F%E7%AF%84/</guid><description>&lt;h2 id="適用範圍">適用範圍&lt;/h2>
&lt;p>本規範適用於團隊內部各類型技術文章，包含：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>概念說明&lt;/strong>：技術原理、系統架構、協定規格&lt;/li>
&lt;li>&lt;strong>實作教學&lt;/strong>：操作步驟、範例、API 用法&lt;/li>
&lt;li>&lt;strong>架構決策&lt;/strong>：方案比較、選型紀錄、設計文件&lt;/li>
&lt;li>&lt;strong>除錯復盤&lt;/strong>：事故紀錄、疑難排解&lt;/li>
&lt;li>&lt;strong>技術評估&lt;/strong>：工具調研、可行性評估&lt;/li>
&lt;/ul>
&lt;p>核心目標：讓讀者能複製&lt;strong>思考過程&lt;/strong>，不只複製&lt;strong>結論&lt;/strong>。結論一行就能給，思考過程才是文章的主體。&lt;/p></description><content:encoded><![CDATA[<h2 id="適用範圍">適用範圍</h2>
<p>本規範適用於團隊內部各類型技術文章，包含：</p>
<ul>
<li><strong>概念說明</strong>：技術原理、系統架構、協定規格</li>
<li><strong>實作教學</strong>：操作步驟、範例、API 用法</li>
<li><strong>架構決策</strong>：方案比較、選型紀錄、設計文件</li>
<li><strong>除錯復盤</strong>：事故紀錄、疑難排解</li>
<li><strong>技術評估</strong>：工具調研、可行性評估</li>
</ul>
<p>核心目標：讓讀者能複製<strong>思考過程</strong>，不只複製<strong>結論</strong>。結論一行就能給，思考過程才是文章的主體。</p>
<p>本規範四條規則各自後方附有正反例，來源標註：</p>
<ul>
<li>正例多引自 <code>/work-log/</code> 目錄下的已成文文章</li>
<li>反例多引自同系列文章<strong>修改前的版本</strong>（實際寫作過程中踩到過的問題）</li>
</ul>
<hr>
<h2 id="一階段分層">一、階段分層</h2>
<h3 id="規則的商業邏輯">規則的商業邏輯</h3>
<p>技術文章的內容從「事實或需求」推導到「動作或結論」，這個過程有四個功能不同的階段。每個階段處理的問題不同、失敗模式不同：</p>
<ul>
<li><strong>觀察</strong>：描述現況、需求、事實或訊息</li>
<li><strong>判讀</strong>：說明本質、原理、問題所在</li>
<li><strong>策略</strong>：列出可選方案並比較</li>
<li><strong>執行</strong>：具體操作或實作</li>
</ul>
<p>四階段若混著寫，讀者無法區分「這一段失敗是哪個階段」，也無法判斷自己的類似情境卡在哪一步。文章只能被原封不動複製，不能被理解後套用。</p>
<h3 id="做法">做法</h3>
<p>每個主題段落應包含四階段。不同類型文章中四階段的對應：</p>
<table>
  <thead>
      <tr>
          <th>階段</th>
          <th>概念說明</th>
          <th>實作教學</th>
          <th>架構決策</th>
          <th>除錯復盤</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>觀察</td>
          <td>需求或背景</td>
          <td>使用情境</td>
          <td>現況限制</td>
          <td>錯誤訊息</td>
      </tr>
      <tr>
          <td>判讀</td>
          <td>概念本質</td>
          <td>工具的位置與功能</td>
          <td>需求本質</td>
          <td>問題根因</td>
      </tr>
      <tr>
          <td>策略</td>
          <td>不同用法</td>
          <td>不同操作路徑</td>
          <td>可選方案</td>
          <td>可行解法</td>
      </tr>
      <tr>
          <td>執行</td>
          <td>程式碼範例</td>
          <td>操作步驟</td>
          <td>選定實作</td>
          <td>修復動作</td>
      </tr>
  </tbody>
</table>
<h3 id="實例對照">實例對照</h3>
<p><strong>反例（跳過判讀，觀察直接進執行）</strong>：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="ln">1</span><span class="cl"><span class="gu">## 錯誤
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="gu"></span>flutter_broadcasts_4m：Kotlin 1.8 vs Java 17 mismatch
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="gu">## 解法
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="gu"></span>在 subprojects 加上：
</span></span><span class="line"><span class="ln">6</span><span class="cl">tasks.withType(KotlinCompile).configureEach { jvmTarget = &#39;17&#39; }</span></span></code></pre></div><p>問題：讀者能複製貼上，但無法回答「為什麼是 configureEach 不是其他方式」「遇到下一個類似問題怎麼想」。思考過程沒有被保存。</p>
<p><strong>正例</strong>：<code>gradle_reasoning_traps</code> 的節點 A 結構，每個節點顯式展開成「當下看到 → 判讀 → 可選策略 → 選擇與理由 → 結果 → 事後檢視」六個子段落。讀者看完後即使遇到不同錯誤訊息，也能套用同一個四階段推導。</p>
<h3 id="禁止事項">禁止事項</h3>
<ul>
<li>從觀察直接跳執行，省略判讀與策略</li>
<li>判讀留下未解問題就進策略</li>
<li>文章中出現「選擇」卻只列一個選項</li>
</ul>
<h3 id="例外">例外</h3>
<p>純介紹性段落（例如 API 參數說明）可以省略「策略」階段，但不得省略判讀。</p>
<hr>
<h2 id="二商業邏輯先於-case">二、商業邏輯先於 CASE</h2>
<h3 id="規則的商業邏輯-1">規則的商業邏輯</h3>
<p>技術文章的內容包含兩種資訊層次：</p>
<ul>
<li><strong>商業邏輯</strong>：系統層的概念（為什麼這件事存在、在體系中代表什麼）</li>
<li><strong>CASE</strong>：實例層的資料（具體的數值、路徑、屬性、設定）</li>
</ul>
<p>CASE 單獨存在沒有意義。「<code>jvmTarget = 17</code>」這個值需要「為什麼 JVM target 要一致」這個概念當容器才能被理解。</p>
<p>順序顛倒（先 CASE 後商業邏輯）等於讓讀者先記一組沒有脈絡的資料，再倒推抽象概念。這條認知路徑是反向的，多數讀者在倒推失敗後會放棄，即使專業讀者能勉強跟上也會覺得閱讀成本偏高。</p>
<h3 id="做法-1">做法</h3>
<p>每個主題段落包含兩層，順序不得顛倒：</p>
<h4 id="商業邏輯層">商業邏輯層</h4>
<ul>
<li>主題涉及的系統層概念</li>
<li>該概念為什麼存在、解決什麼問題</li>
<li>該類內容的共通本質</li>
</ul>
<p>此層不討論具體數值、路徑、屬性名。</p>
<h4 id="case-層">CASE 層</h4>
<ul>
<li>訊息或規格中的關鍵字對應商業邏輯的哪個位置</li>
<li>具體數值或內容</li>
<li>從 CASE 推論的結論</li>
</ul>
<h3 id="實例對照-1">實例對照</h3>
<p><strong>反例（直接給 CASE，預設讀者懂背景）</strong>：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="ln">1</span><span class="cl"><span class="gu">### 判讀
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="gu"></span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="k">-</span> 這個子專案的 Java task 產出 bytecode target = 17
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="k">-</span> 同一個子專案的 Kotlin task 產出 bytecode target = 1.8
</span></span><span class="line"><span class="ln">5</span><span class="cl">- 兩者不一致觸發 Kotlin 2.2 的 strict validation</span></span></code></pre></div><p>專業人士看了懂，但讀者若不知道「bytecode target」「strict validation」在系統中代表什麼，只能抓到字面字串，無法建立模型。</p>
<p><strong>正例</strong>（加上商業邏輯層當容器）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="gu">### 判讀
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="gu"></span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="gs">**這類錯誤的本質（商業邏輯）**</span>：
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">Android 每個 module 會分別編譯 Java 跟 Kotlin 原始碼，各自產出
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">JVM bytecode。每個 bytecode 有 target version，決定能在哪些 JVM
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">runtime 上跑。同 module 內若兩種語言產出不同 target，runtime
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">可能踩到 API 相容性問題。Kotlin 2.2 把這個從 warning 提升為 error。
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="gs">**這次訊息具體說了什麼（CASE）**</span>：
</span></span><span class="line"><span class="ln">11</span><span class="cl">
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="k">-</span> compileDebugJavaWithJavac (17) → Java 產出 target 17
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="k">-</span> compileDebugKotlin (1.8) → Kotlin 產出 target 1.8
</span></span><span class="line"><span class="ln">14</span><span class="cl">- 符合上面「module 內不一致」的 pattern</span></span></code></pre></div><p>（出自 <code>gradle_reasoning_traps</code> 節點 A 修改後的版本。修改前是反例那種寫法，修改後加入商業邏輯層。）</p>
<h3 id="完成標準">完成標準</h3>
<p>段落結束前，讀者應能回答：</p>
<ol>
<li>這個主題在系統中為什麼重要？</li>
<li>這個主題的具體案例對應商業邏輯的哪個位置？</li>
</ol>
<p>若只能回答第二題，商業邏輯層不足。</p>
<hr>
<h2 id="三評估用內在屬性">三、評估用內在屬性</h2>
<h3 id="規則的商業邏輯-2">規則的商業邏輯</h3>
<p>技術文章經常包含選擇或比較：選 A 不選 B、用 X 不用 Y、選這個架構不選另一個。選擇的優劣取決於方案的<strong>內在屬性</strong>，不取決於執行者的<strong>時間消耗</strong>：</p>
<ul>
<li><strong>內在屬性</strong>：覆蓋完整性、風險、可逆性、維護成本、可理解性、依賴前提</li>
<li><strong>時間消耗</strong>：實作要多久、多少人工時</li>
</ul>
<p>時間消耗是執行者的資源考量，跟方案本身的正確性無關。用時間當評估維度會造成結構性偏差：<strong>投資型方案</strong>（擴大影響、建立基礎）看起來總是比<strong>消費型方案</strong>（解當前問題）差，但兩者能力的性質不同，不應以同一量度比較。</p>
<p>讀者讀到時間評估會誤以為「這個方案比較好」，但真正該學到的是「兩個方案各自適合什麼情境」。</p>
<h3 id="做法-2">做法</h3>
<p>每個方案比較必須包含下列維度中至少三項：</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>評估內容</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>覆蓋完整性</td>
          <td>處理所有同類情境，還是只處理當前</td>
      </tr>
      <tr>
          <td>風險</td>
          <td>失敗機率與代價</td>
      </tr>
      <tr>
          <td>可逆性</td>
          <td>出錯能否回滾</td>
      </tr>
      <tr>
          <td>維護成本</td>
          <td>長期需要多少精力</td>
      </tr>
      <tr>
          <td>可理解性</td>
          <td>未來接手者能否理解</td>
      </tr>
      <tr>
          <td>依賴前提</td>
          <td>建立在什麼假設上，前提變了會如何</td>
      </tr>
  </tbody>
</table>
<h3 id="實例對照-2">實例對照</h3>
<p><strong>反例（用時間成本換算划不划算）</strong>：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="ln">1</span><span class="cl">節點 A 事後回顧：
</span></span><span class="line"><span class="ln">2</span><span class="cl">這一步多 2 分鐘掃一遍 pub-cache，但可以省下後來約 30 分鐘的
</span></span><span class="line"><span class="ln">3</span><span class="cl">build-炸-修循環。明顯划算。</span></span></code></pre></div><p>讀者學到的是「划不划算」這個執行層結論，沒學到兩個方案的結構性差異。</p>
<p><strong>正例</strong>（用內在屬性列出方案差異）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="ln"> 1</span><span class="cl">節點 A 事後檢視：
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">若當下選擇「A2 + 同步盤點 pub-cache」：
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="k">-</span> 優點：一次盤點所有同類地雷，修復範圍完整；避免之後
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">  遇到一個修一個的反應式除錯
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="k">-</span> 缺點：盤點結果可能含假陽性；擴大修復範圍可能引入新變數
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">當下漏掉這個選項的本質問題是：
</span></span><span class="line"><span class="ln">10</span><span class="cl">單點錯誤修復後沒有主動擴大搜尋同類問題。
</span></span><span class="line"><span class="ln">11</span><span class="cl">這是決策是否涵蓋完整問題面的問題，不是執行層的快慢考量。</span></span></code></pre></div><p>（出自 <code>gradle_reasoning_traps</code> 節點 A 事後檢視。修改前是反例版本，修改後改用「覆蓋完整性」「範圍完整」這類內在屬性。）</p>
<h3 id="禁止事項-1">禁止事項</h3>
<p>不得以時間成本作為主要評估維度，包含：</p>
<ul>
<li>「這方案比較快」</li>
<li>「多花 X 分鐘省下 Y 分鐘」</li>
<li>「立即可完成」</li>
</ul>
<hr>
<h2 id="四事後檢視看判讀品質">四、事後檢視看判讀品質</h2>
<h3 id="規則的商業邏輯-3">規則的商業邏輯</h3>
<p>技術文章的品質檢視（review、事故檢討、復盤）常只看「結論對不對」，但多數失敗的根源在<strong>判讀階段</strong>：</p>
<ul>
<li>判讀未確認的推論被當結論</li>
<li>判讀觀察範圍不足（只看單點）</li>
<li>判讀用類比代替機制驗證</li>
</ul>
<p>這類問題會表現成「結論失敗」的樣子，但改善方向完全不同：</p>
<ul>
<li>結論失敗 → 下次多列幾個選項</li>
<li>判讀失敗 → 下次判讀要更嚴謹、更廣、更實證</li>
</ul>
<p>兩者混為一談會得到「要更仔細」這種無法行動的結論。</p>
<h3 id="做法-3">做法</h3>
<p>文章或決策完成後，必須回答下列四題：</p>
<ol>
<li>判讀階段的「需要確認」項目是否全部解答？</li>
<li>觀察範圍是否涵蓋同類情境，或僅處理當前一個？</li>
<li>推論中的類比假設是否驗證？</li>
<li>策略列舉是否完整？</li>
</ol>
<p>任一題答「否」，對應失敗類型必須明確標示：</p>
<table>
  <thead>
      <tr>
          <th>答「否」的題</th>
          <th>失敗類型</th>
          <th>改善方向</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>題 1</td>
          <td>未確認推論帶入結論</td>
          <td>判讀完成標準要收緊</td>
      </tr>
      <tr>
          <td>題 2</td>
          <td>觀察範圍不足</td>
          <td>擴大搜尋類似情境</td>
      </tr>
      <tr>
          <td>題 3</td>
          <td>類比代替驗證</td>
          <td>機制差異需實證</td>
      </tr>
      <tr>
          <td>題 4</td>
          <td>策略列舉不足</td>
          <td>至少列兩個選項</td>
      </tr>
  </tbody>
</table>
<h3 id="實例對照-3">實例對照</h3>
<p><strong>反例（只檢視結論，歸因模糊）</strong>：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="ln">1</span><span class="cl">這次修復走了彎路，下次應該更仔細。</span></span></code></pre></div><p>無法行動。下次遇到類似情境仍會犯同樣錯誤。</p>
<p><strong>正例</strong>（分類失敗類型，對應不同改善方向）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="ln"> 1</span><span class="cl">七個節點中四個失敗，分類：
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">| 節點 | 失敗類型 | 根本來源 |
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">|---|---|---|
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">| 節點 C | 需要新資訊（toolchain 時機） | 節點 B 判讀留下「需要確認」但沒補 |
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">| 節點 D1 | 對稱假設 | 節點 D 判讀用「結構對稱」取代「機制驗證」 |
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">| 節點 F | 方法呼叫時機 | 節點 E 判讀沒展開 API 的兩階段行為 |
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">三個失敗都源自判讀未完成就進策略。不是策略選錯，是判讀階段
</span></span><span class="line"><span class="ln">10</span><span class="cl">進入策略時，還帶著未解決的問題。</span></span></code></pre></div><p>（出自 <code>gradle_reasoning_traps</code> 的「整個過程的決策品質檢視」段落。）</p>
<p>這樣的檢視產出具體改善方向：「判讀完成標準要收緊」、「機制差異需實證」，而不是模糊的「要更仔細」。</p>
<hr>
<h2 id="五判讀徵兆對照">五、判讀徵兆對照</h2>
<p>技術文章撰寫中常見的徵兆與對應的判讀要求。看到徵兆時，作者必須回答對應問題。</p>
<h3 id="徵兆單一位置指向檔案行號屬性名">徵兆：單一位置指向（檔案、行號、屬性名）</h3>
<p>該位置是「現場」，不一定是「根因」。必須追問：</p>
<ul>
<li>為什麼是這個位置出問題？</li>
<li>是目標的狀態錯了，還是呼叫的時機錯了？</li>
</ul>
<h3 id="徵兆同類情境第二次出現">徵兆：同類情境第二次出現</h3>
<p>前次處理範圍不完整。必須追問：</p>
<ul>
<li>還有哪些同類情境？</li>
<li>是否有共通原因？</li>
</ul>
<h3 id="徵兆修改看似合理但未生效">徵兆：修改看似合理但未生效</h3>
<p>時機或機制假設錯誤。必須追問：</p>
<ul>
<li>修改的生效時機是否晚於覆蓋對象？</li>
<li>覆蓋機制是否真的能蓋過目標？</li>
</ul>
<h3 id="徵兆finalalreadycannot這類字眼">徵兆：「final」「already」「cannot」這類字眼</h3>
<p>目標已進入不可修改狀態。必須追問：</p>
<ul>
<li>目標何時進入該狀態？</li>
<li>修改能否提前到狀態轉換之前？</li>
</ul>
<h3 id="徵兆inconsistentmismatch這類字眼">徵兆：「inconsistent」「mismatch」這類字眼</h3>
<p>兩部分不一致。必須追問：</p>
<ul>
<li>哪一邊是正確的目標值？</li>
<li>不一致的方向決定治理施加在哪一邊？</li>
</ul>
<h3 id="實例">實例</h3>
<p>這組徵兆對照表的完整應用案例見 <code>gradle_evaluation_order_traps</code>，該文將三種 Gradle 時序錯誤（<code>already evaluated</code>、<code>is final</code>、覆寫沒生效）各自對應到同一個底層問題（時機錯位），並給出對應的解法方向。這就是「看到徵兆 → 查表 → 推出判讀結論」的標準路徑。</p>
<hr>
<h2 id="六術語">六、術語</h2>
<table>
  <thead>
      <tr>
          <th>術語</th>
          <th>定義</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>商業邏輯</td>
          <td>系統層次的概念說明，不涉及具體值</td>
      </tr>
      <tr>
          <td>CASE</td>
          <td>具體內容（數值、路徑、屬性名）</td>
      </tr>
      <tr>
          <td>判讀</td>
          <td>從事實推導本質的過程</td>
      </tr>
      <tr>
          <td>策略</td>
          <td>可選方案</td>
      </tr>
      <tr>
          <td>現場</td>
          <td>訊息直接指向的位置</td>
      </tr>
      <tr>
          <td>根因</td>
          <td>底層原因，不一定等於現場</td>
      </tr>
      <tr>
          <td>投資型策略</td>
          <td>有長期回報的方案（擴大覆蓋、建立認知）</td>
      </tr>
      <tr>
          <td>消費型策略</td>
          <td>只處理當前問題的方案</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="七提交自檢">七、提交自檢</h2>
<p>提交文章前自檢：</p>
<ul>
<li><input disabled="" type="checkbox"> 四階段（觀察／判讀／策略／執行）完整，或已說明可省略的階段</li>
<li><input disabled="" type="checkbox"> 每個主題段落先商業邏輯後 CASE</li>
<li><input disabled="" type="checkbox"> 判讀中所有「需要確認」項目已解答或註明可暫不確認</li>
<li><input disabled="" type="checkbox"> 每個方案比較至少三個評估維度</li>
<li><input disabled="" type="checkbox"> 未以時間成本為主要評估維度</li>
<li><input disabled="" type="checkbox"> 事後檢視四題已回答</li>
<li><input disabled="" type="checkbox"> 失敗類型已標示（若有）</li>
</ul>
<hr>
<h2 id="參考範例">參考範例</h2>
<p>本規範四條規則的完整應用案例：</p>
<ul>
<li><a href="/blog/work-log/gradle-jvm-target-%E9%99%A4%E9%8C%AF%E5%BE%A9%E7%9B%A4%E4%B8%83%E5%80%8B%E7%AF%80%E9%BB%9E%E7%9A%84%E7%AD%96%E7%95%A5%E6%AC%8A%E8%A1%A1/" data-link-title="Gradle JVM target 除錯復盤：七個節點的策略權衡" data-link-desc="Gradle JVM target 不一致的除錯決策復盤，重點在每步的策略權衡與走過的彎路。">Gradle JVM target 除錯復盤：七個節點的策略權衡</a> — 全四條規則的完整應用，每個節點皆含觀察／判讀／策略／結果／事後檢視五層</li>
<li><a href="/blog/work-log/gradle-%E5%BC%B7%E5%88%B6%E8%A6%86%E5%AF%AB-plugin-%E7%9A%84-jvm-targetkotlin-%E8%88%87-java-%E7%9A%84%E5%88%87%E5%85%A5%E9%BB%9E%E4%B8%8D%E5%B0%8D%E7%A8%B1/" data-link-title="Gradle 強制覆寫 plugin 的 JVM target：Kotlin 與 Java 的切入點不對稱" data-link-desc="Kotlin / AGP 升級後 build 報 `Inconsistent JVM-target compatibility`。為何要強制覆寫 plugin 的 JVM target，以及 Kotlin 與 Java 設定切入點的不對稱。">Gradle 強制覆寫 plugin 的 JVM target：Kotlin 與 Java 的切入點不對稱</a> — 商業邏輯先於 CASE 的範例（先講 Kotlin plugin 與 AGP 的機制差異，再講具體寫法）</li>
<li><a href="/blog/work-log/gradle-configuration-%E6%99%82%E5%BA%8F%E9%99%B7%E9%98%B1afterevaluateevaluationdependsonfinalized-properties/" data-link-title="Gradle Configuration 時序陷阱：afterEvaluate、evaluationDependsOn、finalized properties" data-link-desc="Gradle 報 `Cannot run Project.afterEvaluate ... already evaluated` 或 `property is final`。時序錯誤同源於 callback 註冊太晚或屬性賦值太晚，附各 API 的正確時機。">Gradle Configuration 時序陷阱：afterEvaluate、evaluationDependsOn、finalized properties</a> — 判讀徵兆對照的完整應用</li>
<li><a href="/blog/work-log/%E7%82%BA%E4%BB%80%E9%BA%BC-bug-%E5%9C%A8%E5%90%88%E4%BD%B5%E5%BE%8C%E6%89%8D%E7%88%86gradle-cache-%E6%8E%A9%E8%93%8B%E6%BD%9B%E4%BC%8F%E5%95%8F%E9%A1%8C%E7%9A%84%E9%82%8F%E8%BC%AF/" data-link-title="為什麼 Bug 在合併後才爆：Gradle Cache 掩蓋潛伏問題的邏輯" data-link-desc="feature branch build 正常、合併到 main 後才爆、但合併前 main 也沒錯。根因早已潛伏，Gradle cache 掩蓋、合併只是觸發條件。">為什麼 Bug 在合併後才爆：Gradle Cache 掩蓋潛伏問題的邏輯</a> — 事後檢視看判讀品質的範例（將「合併造成」重新歸因為「判讀時把觸發條件當根因」）</li>
</ul>]]></content:encoded></item></channel></rss>