<?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>Knowledge Gardening on Tarragon</title><link>https://tarrragon.github.io/blog/tags/knowledge-gardening/</link><description>Recent content in Knowledge Gardening 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/knowledge-gardening/index.xml" rel="self" type="application/rss+xml"/><item><title>決策對話協議的浮現：從 #74 到 #81 的多層迭代</title><link>https://tarrragon.github.io/blog/posts/%E6%B1%BA%E7%AD%96%E5%B0%8D%E8%A9%B1%E5%8D%94%E8%AD%B0%E7%9A%84%E6%B5%AE%E7%8F%BE%E5%BE%9E-%2374-%E5%88%B0-%2381-%E7%9A%84%E5%A4%9A%E5%B1%A4%E8%BF%AD%E4%BB%A3/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/posts/%E6%B1%BA%E7%AD%96%E5%B0%8D%E8%A9%B1%E5%8D%94%E8%AD%B0%E7%9A%84%E6%B5%AE%E7%8F%BE%E5%BE%9E-%2374-%E5%88%B0-%2381-%E7%9A%84%E5%A4%9A%E5%B1%A4%E8%BF%AD%E4%BB%A3/</guid><description>&lt;h2 id="這篇要說什麼">這篇要說什麼&lt;/h2>
&lt;p>&lt;a href="../cards-skills-system-case-study/">前一篇 case study&lt;/a> 紀錄的是「實作驅動」的閉環 — 從一個 bug 出發、逼出新卡片。&lt;/p>
&lt;p>本篇紀錄的是 &lt;strong>「對話驅動」的閉環&lt;/strong> — 不修任何 production code、純粹從對話中浮現新卡。觸發點是 user 的一句反思：「&lt;strong>剛剛提出很多不同方向的決策做選擇、這些選擇應該被做成卡片然後分析或者分拆細節研究&lt;/strong>」。&lt;/p>
&lt;p>接下來六輪 spiral 迭代、產生 8 張新卡（&lt;a href="https://tarrragon.github.io/blog/report/" data-link-title="Report — 開發過程的事後檢討" data-link-desc="blog 開發過程中、把實際遇到的版型 / 整合 / 框架共處等情境、整理成『應該怎麼做、沒這樣做會有什麼麻煩』的事後檢討。每篇皆為正向指引、幫助下一輪同類任務跳過反覆試錯。">#74-#81&lt;/a>）+ 1 份 SKILL reference + skill v0.5。本文紀錄這條路徑、當作 &lt;a href="https://tarrragon.github.io/blog/report/cards-as-living-system-iteration/" data-link-title="卡片系統的迭代浮現：原子卡 → meta-卡 → reference 三層展開" data-link-desc="知識卡片系統不是一次寫成、是 dialogue → 原子卡 → meta-卡 → reference 的迭代浮現。每一輪迭代解決上一輪的 over-fit / under-fit、串連分散的卡片、抽出 meta-原則、最後沉澱成可直接套用的 reference 文件。本卡是 cards-skills 系統設計的 process-level 元原則。">#81 卡片系統的迭代浮現&lt;/a> 的具體實例。&lt;/p>
&lt;hr>
&lt;h2 id="起點對話中的反思訊號">起點：對話中的反思訊號&lt;/h2>
&lt;p>對話到第 N 回合時、agent 已經在多次出現「決策呈現」的場景：&lt;/p>
&lt;ul>
&lt;li>「Content mode 三選一」 → user 答 (a)&lt;/li>
&lt;li>「一次 ship 全部 vs 分批」 → user 答「一次」&lt;/li>
&lt;li>「五策略選一」 → user 答 「C 主 + D 補」&lt;/li>
&lt;li>「ship D 還是 B/C」 → user 答 「先 D、B/C 下輪」&lt;/li>
&lt;li>「反省選哪幾個」 → user 答 「1+2」&lt;/li>
&lt;/ul>
&lt;p>每次 agent 都呈現得不一樣、user 也每次回得不一樣。&lt;strong>反覆出現但形式各異 = 抽 meta 的訊號&lt;/strong>（&lt;a href="https://tarrragon.github.io/blog/report/two-occurrence-threshold/" data-link-title="2 次門檻：第一次是運氣、第二次是訊號" data-link-desc="同一個問題出現第 2 次時、就該停下來把處理層級升一階 — 從推理升到量測、從手動驗證升到自動化、從同方向嘗試升到換思路。第 1 次失敗的資訊不足、第 2 次提供「重複出現」的證據、值得付出升級成本。本文是 #11 / #15 / #20 / #23 四篇實作的共同抽象。">#42 2 次門檻&lt;/a> + &lt;a href="https://tarrragon.github.io/blog/report/cards-as-living-system-iteration/" data-link-title="卡片系統的迭代浮現：原子卡 → meta-卡 → reference 三層展開" data-link-desc="知識卡片系統不是一次寫成、是 dialogue → 原子卡 → meta-卡 → reference 的迭代浮現。每一輪迭代解決上一輪的 over-fit / under-fit、串連分散的卡片、抽出 meta-原則、最後沉澱成可直接套用的 reference 文件。本卡是 cards-skills 系統設計的 process-level 元原則。">#81 迭代浮現&lt;/a>）。&lt;/p>
&lt;p>User 的「&lt;strong>這些選擇應該被做成卡片&lt;/strong>」就是 meta-訊號的明確化 — 不是 agent 自己浮現的、是 user 點出來的。&lt;strong>External trigger（&lt;a href="https://tarrragon.github.io/blog/report/external-trigger-for-high-roi-work/" data-link-title="高 ROI 無外部觸發的工作會被結構性跳過" data-link-desc="工作有兩個獨立維度：ROI 高低 &amp;#43; 是否有外部觸發。高 ROI &amp;#43; 無觸發 = ROI 的承諾、拖延的現實。靠紀律不可行 — 結構性偏差需要結構性對策（外部觸發 / CI / hook / 排程 / pair）。本卡是 #67 便利反相關、#68 checkpoint 跳過、#69 RED 跳過的共同上位原則。">#72&lt;/a>）才能逼出抽 meta 這個高 ROI 但無觸發的工作&lt;/strong>。&lt;/p></description><content:encoded><![CDATA[<h2 id="這篇要說什麼">這篇要說什麼</h2>
<p><a href="../cards-skills-system-case-study/">前一篇 case study</a> 紀錄的是「實作驅動」的閉環 — 從一個 bug 出發、逼出新卡片。</p>
<p>本篇紀錄的是 <strong>「對話驅動」的閉環</strong> — 不修任何 production code、純粹從對話中浮現新卡。觸發點是 user 的一句反思：「<strong>剛剛提出很多不同方向的決策做選擇、這些選擇應該被做成卡片然後分析或者分拆細節研究</strong>」。</p>
<p>接下來六輪 spiral 迭代、產生 8 張新卡（<a href="/blog/report/" data-link-title="Report — 開發過程的事後檢討" data-link-desc="blog 開發過程中、把實際遇到的版型 / 整合 / 框架共處等情境、整理成『應該怎麼做、沒這樣做會有什麼麻煩』的事後檢討。每篇皆為正向指引、幫助下一輪同類任務跳過反覆試錯。">#74-#81</a>）+ 1 份 SKILL reference + skill v0.5。本文紀錄這條路徑、當作 <a href="/blog/report/cards-as-living-system-iteration/" data-link-title="卡片系統的迭代浮現：原子卡 → meta-卡 → reference 三層展開" data-link-desc="知識卡片系統不是一次寫成、是 dialogue → 原子卡 → meta-卡 → reference 的迭代浮現。每一輪迭代解決上一輪的 over-fit / under-fit、串連分散的卡片、抽出 meta-原則、最後沉澱成可直接套用的 reference 文件。本卡是 cards-skills 系統設計的 process-level 元原則。">#81 卡片系統的迭代浮現</a> 的具體實例。</p>
<hr>
<h2 id="起點對話中的反思訊號">起點：對話中的反思訊號</h2>
<p>對話到第 N 回合時、agent 已經在多次出現「決策呈現」的場景：</p>
<ul>
<li>「Content mode 三選一」 → user 答 (a)</li>
<li>「一次 ship 全部 vs 分批」 → user 答「一次」</li>
<li>「五策略選一」 → user 答 「C 主 + D 補」</li>
<li>「ship D 還是 B/C」 → user 答 「先 D、B/C 下輪」</li>
<li>「反省選哪幾個」 → user 答 「1+2」</li>
</ul>
<p>每次 agent 都呈現得不一樣、user 也每次回得不一樣。<strong>反覆出現但形式各異 = 抽 meta 的訊號</strong>（<a href="/blog/report/two-occurrence-threshold/" data-link-title="2 次門檻：第一次是運氣、第二次是訊號" data-link-desc="同一個問題出現第 2 次時、就該停下來把處理層級升一階 — 從推理升到量測、從手動驗證升到自動化、從同方向嘗試升到換思路。第 1 次失敗的資訊不足、第 2 次提供「重複出現」的證據、值得付出升級成本。本文是 #11 / #15 / #20 / #23 四篇實作的共同抽象。">#42 2 次門檻</a> + <a href="/blog/report/cards-as-living-system-iteration/" data-link-title="卡片系統的迭代浮現：原子卡 → meta-卡 → reference 三層展開" data-link-desc="知識卡片系統不是一次寫成、是 dialogue → 原子卡 → meta-卡 → reference 的迭代浮現。每一輪迭代解決上一輪的 over-fit / under-fit、串連分散的卡片、抽出 meta-原則、最後沉澱成可直接套用的 reference 文件。本卡是 cards-skills 系統設計的 process-level 元原則。">#81 迭代浮現</a>）。</p>
<p>User 的「<strong>這些選擇應該被做成卡片</strong>」就是 meta-訊號的明確化 — 不是 agent 自己浮現的、是 user 點出來的。<strong>External trigger（<a href="/blog/report/external-trigger-for-high-roi-work/" data-link-title="高 ROI 無外部觸發的工作會被結構性跳過" data-link-desc="工作有兩個獨立維度：ROI 高低 &#43; 是否有外部觸發。高 ROI &#43; 無觸發 = ROI 的承諾、拖延的現實。靠紀律不可行 — 結構性偏差需要結構性對策（外部觸發 / CI / hook / 排程 / pair）。本卡是 #67 便利反相關、#68 checkpoint 跳過、#69 RED 跳過的共同上位原則。">#72</a>）才能逼出抽 meta 這個高 ROI 但無觸發的工作</strong>。</p>
<hr>
<h2 id="迭代過程六輪-spiral">迭代過程：六輪 spiral</h2>
<h3 id="輪-1列候選不寫卡">輪 1：列候選、不寫卡</h3>
<p>User 的「應該被做成卡片」沒指定要寫幾張、寫什麼。Agent 列五個候選（A-E）+ 推薦 B+C 組合。User 回「<strong>每個都做成卡片</strong>」+ 給出迭代原則：「<strong>先拓展知識庫、然後才整理成上層的抽象決策依據、最後才做決策</strong>」。</p>
<p>這個原則 = [#81] 的 process explicit form：先原子卡 → 後 meta-卡 → 最後決策（套用）。</p>
<h3 id="輪-2寫五張原子卡74-78">輪 2：寫五張原子卡（#74-#78）</h3>
<p>每張一個維度：</p>
<ul>
<li>#74 呈現格式（選項表 + 推薦 + 開放修改）</li>
<li>#75 主策略 + 補強疊加（不必互斥）</li>
<li>#76 分批 ship（三軸切分）</li>
<li>#77 「現在不決定」是合法選項</li>
<li>#78 反省任務預設複選</li>
</ul>
<p>寫的時候各自獨立、沒明確意識到「這五張其實是同一回事的五個面向」。<strong>在第 5 張寫到一半才開始覺得「好像每張都在打開一個固定的 default」</strong>。</p>
<p>訊號：[#81] 「寫第 N 張卡、發現大段內容跟前一張重複」 → 抽 meta。</p>
<h3 id="輪-3抽-meta-卡-79">輪 3：抽 meta-卡 #79</h3>
<p>User 接著問「都做、用多層迭代去拓展卡片」、agent 回應時自己浮現了 meta-發現：<strong>這五張其實對應五個獨立維度、可組合成 2^5 = 32 種對話形態</strong>。</p>
<p>寫 #79 時、把五張卡的「打開的 default」歸納成五個維度 + 五步判讀。<strong>Meta-卡讓五張原子卡從「平行五張」變成「有結構的網」</strong>。</p>
<p>回頭給每張原子卡補上「跟 #79 的對應」 cross-link、迭代結束。</p>
<h3 id="輪-4沉澱成-reference">輪 4：沉澱成 reference</h3>
<p>光有卡還不夠 — 實作中要翻 5 張卡才能完整 apply、太貴。</p>
<p>寫 <code>references/decision-dialogue.md</code>、把五步判讀 + 完整模板 + self-check 沉澱成一份可直接套用的 protocol。同時更新 SKILL.md 加 trigger route（「呈現決策 / 開放問 / 反省題」）+ Directory Index + 抽象層原則段。</p>
<p>訊號：[#81] 「實作中要回查 ≥ 3 張卡」 → 沉澱 reference。</p>
<h3 id="輪-5dogfood--反向補卡80-81">輪 5：dogfood + 反向補卡（#80-#81）</h3>
<p>User 的「我們想得到的都作、直到推演到極限」逼 agent 自查：</p>
<p><strong>自查 1</strong>：回頭看 agent 在這輪對話的回應、找 collapse 反模式。發現 4 處：</p>
<ul>
<li>「需要我繼續嗎？」 = yes/no（最隱形的 collapse）</li>
<li>「下一層候選」用 bullet 沒適配欄</li>
<li>推薦騎牆「A 比較好不過 B 也行」</li>
<li>反省題列點未明示「互不衝突」</li>
</ul>
<p>→ 寫 #80 Yes/No 二選、把 dogfood 4 例寫進 reference 作為「Bad/Good 對照」。</p>
<p><strong>自查 2</strong>：「這套迭代過程本身是不是 cardable？」是 — 寫 #81 卡片系統的迭代浮現、紀錄「原子 → meta → reference」的 spiral 結構。</p>
<p>訊號：[#81] 「meta-卡寫太早、新 case 一直破壞」的反面 — 寫得剛好、反而能容納新 case（#80、#81 自己）。</p>
<h3 id="輪-6跨連--補強">輪 6：跨連 + 補強</h3>
<p>把 #75（主+補強疊加）展開到 selector pattern：[#46-#49] 看似互斥（每個元件選一個起點）、實際在同一份 code 內可疊加（document + closest 共用）。<strong>Meta-原則的價值之一就是回頭發現舊卡之間有新關係</strong>。</p>
<p>更新 #59（五策略選擇矩陣）加「並用」段落、引用 #75 + #76。</p>
<hr>
<h2 id="過程中的觀察">過程中的觀察</h2>
<h3 id="1-user-的-prompt-直接決定-spiral-深度">1. User 的 prompt 直接決定 spiral 深度</h3>
<p>User 的三句話分別觸發三層深度：</p>
<table>
  <thead>
      <tr>
          <th>User 的話</th>
          <th>觸發深度</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>「應該被做成卡片」</td>
          <td>寫原子卡（layer 1）</td>
      </tr>
      <tr>
          <td>「先拓展知識庫、再整理上層、最後決策」</td>
          <td>抽 meta-卡（layer 2）+ reference（layer 3）</td>
      </tr>
      <tr>
          <td>「都作、推演到極限」</td>
          <td>dogfood + 反向補卡（layer 4-5）</td>
      </tr>
  </tbody>
</table>
<p>每句話都是 [#72] L4 外部觸發 — 沒這些話、agent 不會自己走到第 5 層。<strong>Spiral 深度由 trigger 決定、不由 agent 紀律決定</strong>。</p>
<h3 id="2-dogfood-回饋的-roi-比新卡高">2. Dogfood 回饋的 ROI 比新卡高</h3>
<p>#80（yes/no）的內容比 #74 短得多、但 ROI 可能更高 — 因為它捕捉的是「最常見、最隱形」的反模式。同樣 reference 的「dogfood Bad/Good 4 例」比抽象描述有用 — 將來 agent 看到自己寫類似格式、能直接認出來。</p>
<p>訊號：<strong>具體例子（特別是反例）的 ROI 通常 &gt; 抽象描述</strong>。</p>
<h3 id="3-meta-卡跟-reference-的職責不同">3. Meta-卡跟 reference 的職責不同</h3>
<p>寫完 #79 還不夠、需要 reference — 因為：</p>
<ul>
<li>卡片回答「為什麼」、reference 回答「怎麼做」</li>
<li>卡片是讀爽的、reference 是被翻的</li>
<li>卡片可選、reference 在實作中是 must</li>
</ul>
<p><strong>兩者缺一不可</strong>：只寫卡 → 知道但忘記用；只寫 reference → 知道做但不知道為什麼、難 maintain。</p>
<h3 id="4-真實的-spiral-不是線性">4. 真實的 spiral 不是線性</h3>
<p>寫 #74 時不知道有 #79、寫 #79 時回頭改 #74-#78、寫 reference 時又發現 #80 漏了、寫 #80 時補 reference 的 dogfood 段。<strong>每一層完成後都會反過來修上一層</strong>。</p>
<p>線性思維（「先寫完 layer 1 才寫 layer 2」）會卡住、spiral 思維（「來回修、每輪都加深」）才能浮現完整結構。</p>
<hr>
<h2 id="跟既有原則的關係">跟既有原則的關係</h2>
<table>
  <thead>
      <tr>
          <th>既有原則</th>
          <th>在本次 spiral 中的角色</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/report/two-occurrence-threshold/" data-link-title="2 次門檻：第一次是運氣、第二次是訊號" data-link-desc="同一個問題出現第 2 次時、就該停下來把處理層級升一階 — 從推理升到量測、從手動驗證升到自動化、從同方向嘗試升到換思路。第 1 次失敗的資訊不足、第 2 次提供「重複出現」的證據、值得付出升級成本。本文是 #11 / #15 / #20 / #23 四篇實作的共同抽象。">#42 2 次門檻</a></td>
          <td>第 N 次出現決策呈現 = 抽 meta 的訊號</td>
      </tr>
      <tr>
          <td><a href="/blog/report/minimum-necessary-scope-is-sanity-defense/" data-link-title="最小必要範圍是 sanity 防線：保護行為可預測性" data-link-desc="縮 selector 範圍、observer 範圍、JS 操作範圍 — 不是為了效能、是為了讓行為可預測、不被未來變動打破。本文是 #13 / #14 / #29 三篇實作的共同抽象。">#43 最小必要範圍</a></td>
          <td>先窄後寬：原子卡（窄）→ meta（寬）、不要直接寫 meta</td>
      </tr>
      <tr>
          <td><a href="/blog/report/ease-of-writing-vs-intent-alignment/" data-link-title="寫作便利度跟意圖對齊反相關" data-link-desc="寫程式時最容易寫出的版本、通常是離意圖最遠的版本。便利度建立在「現有上下文 / 已 materialize 資料 / 已存在 API」上、而意圖對齊需要找到正確的層、處理上游、跨抽象層 — 兩者方向相反。識別這個反相關 = 識別自己掉進「容易寫的陷阱」。">#67 寫作便利度反相關</a></td>
          <td>「直接寫 meta」容易、「迭代浮現」難 — 真實結構不對齊容易寫的格式</td>
      </tr>
      <tr>
          <td><a href="/blog/report/external-trigger-for-high-roi-work/" data-link-title="高 ROI 無外部觸發的工作會被結構性跳過" data-link-desc="工作有兩個獨立維度：ROI 高低 &#43; 是否有外部觸發。高 ROI &#43; 無觸發 = ROI 的承諾、拖延的現實。靠紀律不可行 — 結構性偏差需要結構性對策（外部觸發 / CI / hook / 排程 / pair）。本卡是 #67 便利反相關、#68 checkpoint 跳過、#69 RED 跳過的共同上位原則。">#72 高 ROI 無觸發</a></td>
          <td>抽 meta + 寫 reference 沒外部觸發不會做、user 的話是 L4 觸發</td>
      </tr>
      <tr>
          <td><a href="/blog/report/decision-dialogue-dimensions/" data-link-title="決策對話的五個維度：保持完整選擇空間" data-link-desc="對話中的「決策」不是單一動作、是多維度選擇空間：呈現格式 / 策略疊加 / 批次邊界 / 時間軸 / 選項類型。預設多半 collapse 到最窄格（開放問 &#43; 單策略 &#43; 一次完成 &#43; 立刻決 &#43; 單選）、塞使用者進最少自由度的盒子。本卡是 #74-#78 的上層串連 — 五張卡各對應一個維度的鬆綁。">#79 決策對話的五維度</a></td>
          <td>本次 spiral 的 output、也是元素之一</td>
      </tr>
      <tr>
          <td><a href="/blog/report/cards-as-living-system-iteration/" data-link-title="卡片系統的迭代浮現：原子卡 → meta-卡 → reference 三層展開" data-link-desc="知識卡片系統不是一次寫成、是 dialogue → 原子卡 → meta-卡 → reference 的迭代浮現。每一輪迭代解決上一輪的 over-fit / under-fit、串連分散的卡片、抽出 meta-原則、最後沉澱成可直接套用的 reference 文件。本卡是 cards-skills 系統設計的 process-level 元原則。">#81 卡片系統的迭代浮現</a></td>
          <td>本次 spiral 的 process-level 抽象</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="本次-spiral-的-output-清單">本次 spiral 的 output 清單</h2>
<table>
  <thead>
      <tr>
          <th>類型</th>
          <th>數量</th>
          <th>內容</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>原子卡</td>
          <td>5</td>
          <td>#74-#78（呈現 / 疊加 / 分批 / 延後 / 複選）</td>
      </tr>
      <tr>
          <td>Meta-卡</td>
          <td>1</td>
          <td>#79 五維度</td>
      </tr>
      <tr>
          <td>反向補卡</td>
          <td>2</td>
          <td>#80 yes/no、#81 迭代浮現</td>
      </tr>
      <tr>
          <td>Reference</td>
          <td>1</td>
          <td><code>decision-dialogue.md</code>（runtime + blog）</td>
      </tr>
      <tr>
          <td>Skill 整合</td>
          <td>2</td>
          <td>requirement-protocol v0.5、frontend-with-playwright v0.4</td>
      </tr>
      <tr>
          <td>跨連</td>
          <td>多處</td>
          <td>#59 加疊加段、#46-#49 加 #75 跨連</td>
      </tr>
      <tr>
          <td>Case study</td>
          <td>1</td>
          <td>本文</td>
      </tr>
  </tbody>
</table>
<p><strong>整輪迭代的成本</strong>：純對話、無 production code 改動、無新測試。<strong>整輪迭代的價值</strong>：未來 agent 在每次「決策呈現」場景都有 reference 可翻、有 self-check 可用、有 dogfood 例子可對照。</p>
<hr>
<h2 id="結語">結語</h2>
<p>本系統的成型不是「用心寫文件」、是接受**「對話會浮現結構、原子卡會自我串連、meta-卡會回頭修原子卡」這個 spiral 真相**、然後讓每輪迭代都加深一點。</p>
<p>下一次 user 在對話中又出現「這個應該被做成卡片」訊號時、流程已經是現成的 — 套 [#81] 的三層展開 + [#72] 的 L4 觸發、就能繼續長新卡。<strong>真正的 knowledge infrastructure 不是寫一次的文件、是長期 spiral 的 living system</strong>。</p>
]]></content:encoded></item></channel></rss>