Problem
使用者文件沒有寫清楚 idd-plan 與 idd-diagnose 的關係與先後順序。結果是:使用者問了三次仍不確定,使用者的 AI 自行推斷出「不用 diagnose,直接用 plan」(與設計相反),而 maintainer 在同一段對話裡給出了兩種互斥的說法。
Original text(Telegram 私訊,2026-07-08 15:00–15:25。對話對象為 IDD 早期使用者,以 K 代稱 — 見文末 Privacy note):
15:00 K:issue>plan>deep research>verify>report>close
15:00 K:過程中>comment
15:00 K:那如果我想研究問題,這樣可以嗎
15:01 Che:issue後面我通常會先 /diagonose
15:01 Che:diagonose之後你要補deepresearch都可以
15:01 K:那不用plan嗎
15:02 Che:diagnose 會判斷需不需要plan
15:03 K:好的
15:06 K:他之前說deep research就好,然後AI現在就跟我說不用diagnose, 直接用plan
15:08 Che:看起來是我說明沒寫完整
15:08 Che:你照著她做我想應該也是可以
15:08 Che:plan可以取代diagonoe
15:25 K:像我剛剛提出的問題老師覺得有哪些需要開issue嗎
15:25 Che:就是要寫清楚plan, diagonose的關係,要讓使用者清楚知道順序 之類的
(同一使用者在 07-05 另有 report(收斂) 的功能詢問,經確認是 AI 幻想出來的 skill 名稱 — 見文末 sibling 說明,同屬「說明不完整 → AI 自行補完」這個 class。)
Type
docs
Expected
使用者只讀 plugins/issue-driven-dev/README.md 就能回答三個問題:
idd-plan 在 pipeline 的哪個位置?
- 誰決定要不要跑
idd-plan — 使用者自己選,還是 idd-diagnose 判定?
- 可不可以跳過
idd-diagnose 直接叫 /idd-plan?代價是什麼?
Actual
三個問題目前都答不出來:
| 位置 |
現況 |
問題 |
README.md:52 canonical pipeline 圖 |
idd-issue → idd-diagnose → idd-implement → idd-verify → idd-close(5 格編號 ①–⑤) |
完全沒有 idd-plan。使用者看圖不會知道它存在於流程何處 |
README.md:60 skill 表格 |
「Plan tier approval gate ... sits between Simple direct-implement and Spectra spec-contract path」 |
用的是內部 routing tier 語彙。「sits between Simple and Spectra」回答的是「複雜度光譜上的位置」,不是使用者問的「執行順序上的位置」 |
references/usecase-routing.md:49(row 9) |
idd-diagnose` 判 Plan → `idd-plan` → `idd-implement |
✅ 這是正確答案,但埋在 reference 文件第 49 行,README 沒有從 pipeline 圖指過來 |
references/usecase-routing.md:15 決策樹 |
「看 Implementation Plan 給人 approve(Plan tier) → idd-plan」 |
⚠️ 這行單獨讀反而支持錯誤解讀:「我想要 plan → 叫 idd-plan」。沒說 diagnose 必須先跑 |
| 全 plugin 文件 |
grep 取代 diagnose / skip diagnose / 跳過 diagnose → 0 命中 |
「plan 能不能取代 diagnose」這個問題在文件裡根本沒被回答過。所以 15:08 的口頭答覆「plan可以取代diagonoe」既無文件依據,也與 row 9 的設計矛盾 |
三個獨立的失敗證據:
- 使用者連問兩次(15:01「那不用plan嗎」、15:06 重提)
- 使用者的 AI 給出與設計相反的建議:「不用 diagnose, 直接用 plan」。這不是 AI 亂講 — 在現有文件下,
idd-plan 看起來就是一個和 diagnose 平行的 stage
- maintainer 自己給出互斥的兩種說法:15:02「diagnose 會判斷需不需要plan」(diagnose 是上游 router,tier 是它的輸出)vs 15:08「plan可以取代diagonoe」(peer,可互換)。這兩句不可能同時為真
Impact
idd-diagnose 是 IDD 的 router(Layer 1 disqualifier → Layer V vagueness → Layer 2 Spectra → complexity hard gate → Layer P)。跳過 diagnose 直接 plan,等於繞過整個 routing 機制:Layer V 的模糊度把關、#129 的 complexity hard gate、meeting-type 分流全部不會執行
- 新使用者的第一手心智模型會定型在錯的形狀上,之後很難改
- MANIFESTO 的核心主張是「Every issue is diagnosed before implementation — no guessing」(
README.md:13)。文件容許使用者推論出「可以跳過 diagnose」,直接侵蝕這條主張
Suggested scope(供 diagnose 參考,非定案)
- README pipeline 圖旁補一行標示 Plan/Spectra 是 diagnose 的輸出 tier,不是平行 stage
- skill 表格
idd-plan 那列改用使用者語彙(誰觸發、何時觸發),不用 tier 光譜語彙
- 明文回答「能否跳過 diagnose 直接 plan」— 不論答案是可以或不可以,寫下來 + 寫代價
usecase-routing.md:15 決策樹那行補上 diagnose 前置條件,避免單獨被讀成 entry point
補充:實作層其實已有明確答案(建立本 issue 後查證)
plugins/issue-driven-dev/skills/idd-plan/SKILL.md Step 1 的 diagnosis lookup table(第 62 行)已經明文規定:
| Complexity |
行為 |
Plan |
✅ 預期 — 繼續 |
Simple |
⚠️ 詢問 user |
Spectra(含 alias SDD-warranted) |
⛔ 提示改走 /spectra-discuss |
| (missing) |
⛔ 提示「找不到 diagnosis,先跑 /idd-diagnose #NNN」並 abort |
也就是說 shipped 實作的答案是明確的:/idd-plan 無法取代 /idd-diagnose — 沒有 ## Diagnosis comment 時它會 hard abort,連跑都跑不起來。同一份 SKILL.md 第 17 行也寫「由 idd-diagnose Step 3.5 的 Complexity verdict 決定」,Simple / Plan / Spectra 三個 tier 是 diagnose 的輸出。
這把本 issue 的性質從「需要做決定」改成「答案已經存在,但只存在於 skill 內部,沒有進到任何使用者面向的文件」,而且產生兩個更尖的問題:
- maintainer 的口頭答覆與 shipped 行為矛盾 — 2026-07-08 15:08「plan可以取代diagonoe」與
SKILL.md:62 的 hard abort 直接衝突。需確認是口誤,還是實作應該放寬
- 使用者的 AI 給的建議會在 runtime 直接失敗 — 「不用 diagnose, 直接用 plan」照做會撞 abort。使用者原本會得到一個看不懂的錯誤,而不是一個能理解的說明
修正後的 Expected 因此收斂為:把 SKILL.md:62 已經編碼的規則搬到使用者讀得到的地方(README pipeline 圖 + skill 表格),並確認口頭答覆與實作何者為準。不需要重新設計任何機制。
Clarity Surface(idd-clarify run 2026-07-26T00:00:00Z)
| Type |
Source |
Suggested canonical |
Status |
| ambiguity |
「那不用plan嗎」/「plan可以取代diagonoe」 |
來源的「plan」有兩個所指:(a) /idd-plan skill;(b) idd-diagnose Step 3.5 輸出的 Plan complexity verdict / tier。「plan 能否取代 diagnose」的答案依所指而異 —— (a) 不能(SKILL.md:62 hard abort);(b) 問題不成立(tier 是 diagnose 的產物,無法取代產生它的東西)。文件修正時兩個意思必須用不同詞面 |
resolved @ 2026-07-25T16:08:23Z (reason: 兩個所指已在 body 補充段釐清,並升格為修正需求:文件須用不同詞面區分 /idd-plan(skill) 與 Plan(tier)) |
| missing-context |
「你照著她做我想應該也是可以」/「plan可以取代diagonoe」 |
maintainer 的 live 答覆與 shipped 實作(skills/idd-plan/SKILL.md:62)衝突。待 maintainer 裁決:是實作該放寬(允許無 diagnosis 直接 plan),還是口頭答覆為口誤(文件照實作寫)。此為 diagnose 前必要輸入 |
resolved @ 2026-07-25T16:08:23Z (reason: maintainer 2026-07-26 授權裁決,採實作為準 — SKILL.md:62 hard abort 是規則,07-08 口頭答覆為口誤;修正範圍純文件+生成器,零 gate 邏輯改動) |
| terminology |
「diagonose」/「deepresearch」/「皆在diagonose上」/「家入research」 |
來源為即時通訊輸入,含 typo:diagonose→diagnose、皆在→接在、家入→加入。逐字原文依 IC_R007 保留不改,本列僅供 downstream 讀者對照 |
dismissed @ 2026-07-25T16:08:23Z (reason: 來源 typo 依 IC_R007 刻意逐字保留,僅供 downstream 對照,無行動項) |
Linked-Context Siblings Filed
本 issue 來源(單一 Telegram 對話串,2026-07-04 至 2026-07-13)掃出 5 個 sibling concern。Filed 3、surfaced-but-not-filed 2:
| # |
Concern |
處置 |
| 1 |
idd-plan ↔ idd-diagnose 關係與順序未寫清楚 |
本 issue(maintainer 2026-07-08 15:25 明確指定要開) |
| 2 |
Claude Deep Research 未整合進 IDD、無 documented 接法 |
filed → #277 |
| 3 |
issue 已 closed 但事情還要做,缺 reopen / resume-implement 路徑 |
filed → #278 |
| 4 |
AI 幻想出不存在的 IDD skill(使用者 2026-07-05 問「report(收斂) > 你有寫這個功能嗎」,經 maintainer 確認為 AI 幻覺) |
不另開 — 與本 issue 同一 root cause(使用者文件不完整 → AI 自行補完),已作為佐證寫入本 issue Problem 段。若日後出現形狀不同的第二個幻覺案例再獨立 file |
| 5 |
「AI 有能省力就省力的傾向」(使用者 2026-07-13 觀察) |
不 file — IC_R011 category (a) unactionable。maintainer 當下回覆「要看是哪一個模型 不然這樣會有困難」,即缺 model / repro 資訊時無法轉成可行動 issue。本 repo 已有 .claude/rules/attribute-assessment.md 的 Lazy Developer adversary lens 涵蓋同一 class。取得具體 repro(哪個 skill、哪個 gate 被跳過、哪個 model)後再 file |
(/idd-issue Step 4.6 clarity surface + Step 4.7 IC_R011 light-touch sister sweep)
Privacy note
原始來源為第三方 Telegram 私訊。逐字內容原樣保留(IC_R007),但對話對象的真名以 K 代稱 — 本 repo 為 public,第三方真名不必要地進入公開 issue 不符 privacy-scrubbing 紀律。若 maintainer 認為應具名,可自行 edit 補回。
Current Status
Phase: planning
Last updated: 2026-07-26 by idd-plan
Key Decisions
Scope Changes
- Phase 1 實際觸及 8 檔(5 個
SKILL.md + 新 drift-guard suite + README + CHANGELOG),超出 diagnosis 預估的 1 檔
- 由原本的「補文件說明順序」擴大為三軸:機器面向 description 修正 + 人面向自動生成流程圖 + drift-guard 結構性防再犯
- drift-guard assertion 涵蓋範圍由「lifecycle skill」擴大為「所有 IDD skill」(sister sweep 發現
idd-clarify 同屬 house-pattern 缺漏,併入 Phase 1,不另開 issue)
Blocking
Commits
1e46698 fix(skills): name the diagnosis precondition in idd-plan's description
Problem
使用者文件沒有寫清楚
idd-plan與idd-diagnose的關係與先後順序。結果是:使用者問了三次仍不確定,使用者的 AI 自行推斷出「不用 diagnose,直接用 plan」(與設計相反),而 maintainer 在同一段對話裡給出了兩種互斥的說法。(同一使用者在 07-05 另有
report(收斂)的功能詢問,經確認是 AI 幻想出來的 skill 名稱 — 見文末 sibling 說明,同屬「說明不完整 → AI 自行補完」這個 class。)Type
docs
Expected
使用者只讀
plugins/issue-driven-dev/README.md就能回答三個問題:idd-plan在 pipeline 的哪個位置?idd-plan— 使用者自己選,還是idd-diagnose判定?idd-diagnose直接叫/idd-plan?代價是什麼?Actual
三個問題目前都答不出來:
README.md:52canonical pipeline 圖idd-issue → idd-diagnose → idd-implement → idd-verify → idd-close(5 格編號 ①–⑤)idd-plan。使用者看圖不會知道它存在於流程何處README.md:60skill 表格Simpledirect-implement andSpectraspec-contract path」references/usecase-routing.md:49(row 9)idd-diagnose` 判 Plan → `idd-plan` → `idd-implementreferences/usecase-routing.md:15決策樹idd-plan」取代 diagnose/skip diagnose/跳過 diagnose→ 0 命中三個獨立的失敗證據:
idd-plan看起來就是一個和 diagnose 平行的 stageImpact
idd-diagnose是 IDD 的 router(Layer 1 disqualifier → Layer V vagueness → Layer 2 Spectra → complexity hard gate → Layer P)。跳過 diagnose 直接 plan,等於繞過整個 routing 機制:Layer V 的模糊度把關、#129 的 complexity hard gate、meeting-type 分流全部不會執行README.md:13)。文件容許使用者推論出「可以跳過 diagnose」,直接侵蝕這條主張Suggested scope(供 diagnose 參考,非定案)
idd-plan那列改用使用者語彙(誰觸發、何時觸發),不用 tier 光譜語彙usecase-routing.md:15決策樹那行補上 diagnose 前置條件,避免單獨被讀成 entry point補充:實作層其實已有明確答案(建立本 issue 後查證)
plugins/issue-driven-dev/skills/idd-plan/SKILL.mdStep 1 的 diagnosis lookup table(第 62 行)已經明文規定:PlanSimpleSpectra(含 aliasSDD-warranted)/spectra-discuss/idd-diagnose #NNN」並 abort也就是說 shipped 實作的答案是明確的:
/idd-plan無法取代/idd-diagnose— 沒有## Diagnosiscomment 時它會 hard abort,連跑都跑不起來。同一份 SKILL.md 第 17 行也寫「由idd-diagnoseStep 3.5 的 Complexity verdict 決定」,Simple/Plan/Spectra三個 tier 是 diagnose 的輸出。這把本 issue 的性質從「需要做決定」改成「答案已經存在,但只存在於 skill 內部,沒有進到任何使用者面向的文件」,而且產生兩個更尖的問題:
SKILL.md:62的 hard abort 直接衝突。需確認是口誤,還是實作應該放寬修正後的 Expected 因此收斂為:把
SKILL.md:62已經編碼的規則搬到使用者讀得到的地方(README pipeline 圖 + skill 表格),並確認口頭答覆與實作何者為準。不需要重新設計任何機制。Clarity Surface(idd-clarify run 2026-07-26T00:00:00Z)
/idd-planskill;(b)idd-diagnoseStep 3.5 輸出的Plancomplexity verdict / tier。「plan 能否取代 diagnose」的答案依所指而異 —— (a) 不能(SKILL.md:62hard abort);(b) 問題不成立(tier 是 diagnose 的產物,無法取代產生它的東西)。文件修正時兩個意思必須用不同詞面/idd-plan(skill) 與Plan(tier))skills/idd-plan/SKILL.md:62)衝突。待 maintainer 裁決:是實作該放寬(允許無 diagnosis 直接 plan),還是口頭答覆為口誤(文件照實作寫)。此為 diagnose 前必要輸入diagonose→diagnose、皆在→接在、家入→加入。逐字原文依 IC_R007 保留不改,本列僅供 downstream 讀者對照Linked-Context Siblings Filed
本 issue 來源(單一 Telegram 對話串,2026-07-04 至 2026-07-13)掃出 5 個 sibling concern。Filed 3、surfaced-but-not-filed 2:
idd-plan↔idd-diagnose關係與順序未寫清楚report(收斂)> 你有寫這個功能嗎」,經 maintainer 確認為 AI 幻覺).claude/rules/attribute-assessment.md的 Lazy Developer adversary lens 涵蓋同一 class。取得具體 repro(哪個 skill、哪個 gate 被跳過、哪個 model)後再 file(
/idd-issueStep 4.6 clarity surface + Step 4.7 IC_R011 light-touch sister sweep)Privacy note
原始來源為第三方 Telegram 私訊。逐字內容原樣保留(IC_R007),但對話對象的真名以
K代稱 — 本 repo 為 public,第三方真名不必要地進入公開 issue 不符 privacy-scrubbing 紀律。若 maintainer 認為應具名,可自行 edit 補回。Current Status
Phase: planning
Last updated: 2026-07-26 by idd-plan
Key Decisions
idd-close的 meeting fallback 字串/idd-diagnose #N」的補救指示而非純警告,避免反向嚇阻 AI 永不選 idd-planskills/idd-plan/SKILL.mdfrontmatterdescription未載明 diagnosis 前置 —— 該處是 AI 選 skill 時唯一可見的表面,且 idd-plan 是唯一同缺Use when:與防止的失敗:的 lifecycle skillSKILL.md:62的 hard abort,不放寬讓 plan 獨立跑(maintainer 2026-07-26 授權裁決)docs/workflows.md自動生成,不手寫、不建雙 source of truth(maintainer 2026-07-26 選定)Scope Changes
SKILL.md+ 新 drift-guard suite + README + CHANGELOG),超出 diagnosis 預估的 1 檔idd-clarify同屬 house-pattern 缺漏,併入 Phase 1,不另開 issue)Blocking
Commits
1e46698fix(skills): name the diagnosis precondition in idd-plan's description