Skip to content

docs: idd-plan ↔ idd-diagnose 的關係與順序未寫清楚 — 使用者與其 AI 都推論出「跳過 diagnose 直接 plan」 #276

Description

@kiki830621

Problem

使用者文件沒有寫清楚 idd-planidd-diagnose 的關係與先後順序。結果是:使用者問了三次仍不確定,使用者的 AI 自行推斷出「不用 diagnose,直接用 plan」(與設計相反),而 maintainer 在同一段對話裡給出了兩種互斥的說法

Original text(Telegram 私訊,2026-07-08 15:00–15:25。對話對象為 IDD 早期使用者,以 K 代稱 — 見文末 Privacy note):

15:00 Kissue>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 就能回答三個問題:

  1. idd-plan 在 pipeline 的哪個位置?
  2. 誰決定要不要跑 idd-plan — 使用者自己選,還是 idd-diagnose 判定?
  3. 可不可以跳過 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 / 跳過 diagnose0 命中 「plan 能不能取代 diagnose」這個問題在文件裡根本沒被回答過。所以 15:08 的口頭答覆「plan可以取代diagonoe」既無文件依據,也與 row 9 的設計矛盾

三個獨立的失敗證據:

  1. 使用者連問兩次(15:01「那不用plan嗎」、15:06 重提)
  2. 使用者的 AI 給出與設計相反的建議:「不用 diagnose, 直接用 plan」。這不是 AI 亂講 — 在現有文件下,idd-plan 看起來就是一個和 diagnose 平行的 stage
  3. 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 參考,非定案)

  1. README pipeline 圖旁補一行標示 Plan/Spectra 是 diagnose 的輸出 tier,不是平行 stage
  2. skill 表格 idd-plan 那列改用使用者語彙(誰觸發、何時觸發),不用 tier 光譜語彙
  3. 明文回答「能否跳過 diagnose 直接 plan」— 不論答案是可以或不可以,寫下來 + 寫代價
  4. 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 內部,沒有進到任何使用者面向的文件」,而且產生兩個更尖的問題:

  1. maintainer 的口頭答覆與 shipped 行為矛盾 — 2026-07-08 15:08「plan可以取代diagonoe」與 SKILL.md:62 的 hard abort 直接衝突。需確認是口誤,還是實作應該放寬
  2. 使用者的 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:diagonosediagnose皆在接在家入加入。逐字原文依 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-planidd-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

  • Phase 1 已實作並開 draft PR fix(skills): name the diagnosis precondition in idd-plan's description (#276) #279;本 issue 不因該 PR 結案(Phase 2 尚未開工)
  • 實測 17 個 skill:不符 house pattern 的是 5 個不是 1 個,5 個併入 Phase 1 同修([enhancement] Plan tier triggering criteria 太寬鬆 — 大範圍改動應 MUST-trigger Plan #129 契約 / feature: /idd-all chain-solve mode — 自動接續解 spawned issues + 單 review PR #44 教訓)
  • A4 assertion 用明列 allowlist 而非機械推導 —— 推導式會誤傷 idd-close 的 meeting fallback 字串
  • 新 description 附「改跑 /idd-diagnose #N」的補救指示而非純警告,避免反向嚇阻 AI 永不選 idd-plan
  • drift-guard 自述只驗「有沒有」不驗「寫得好不好」,品質仍留給 review 人判斷(同 docs-catalog-sync 立場)
  • Root cause 定位於 skills/idd-plan/SKILL.md frontmatter description 未載明 diagnosis 前置 —— 該處是 AI 選 skill 時唯一可見的表面,且 idd-plan 是唯一同缺 Use when:防止的失敗: 的 lifecycle skill
  • 採「以實作為準」:保留 SKILL.md:62 的 hard abort,放寬讓 plan 獨立跑(maintainer 2026-07-26 授權裁決)
  • wiki 流程圖頁由 docs/workflows.md 自動生成,不手寫、不建雙 source of truth(maintainer 2026-07-26 選定)
  • Complexity = Plan(Layer P:generator 解析契約 decision-heavy/檔案順序依賴/跨 repo 寫入 wiki 屬 irreversible side effect)
  • 交付分兩階段:Phase 1(description + drift-guard,可獨立出貨)/Phase 2(generator + wiki + README 指路)

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions