Skip to content

Complexity routing: vagueness 應該是一階信號,但目前 4 層 gate 都沒衡量需求清晰度 #12

@kiki830621

Description

@kiki830621

Problem

Original text (使用者口述,2026-05-04):
「判斷要走 simple, plan, spectra 的情況下,vagueness 應該是重要的判斷標準,但現在好像沒有」
— Source: /idd-issue invocation arguments

解讀

現行 idd-diagnose 的 Complexity 判定(rules/sdd-integration.md)用 4 層 gate:

Layer 衡量什麼
Layer 1(Simple disqualifier) 交付物形態(narrative / ad-hoc analysis / 多檔獨立)
Layer 2(Spectra necessary) 是否有 published API/protocol/skill/tool surface
Layer 3(Spectra confirmation) 是否動到 spec normative 行為、跨 2+ specs、架構決策
Layer P(Plan signals) 檔案互依、5+ ordered steps、decision-heavy diagnosis、risk-sensitive boundary、cross-file refactor

全部都在量「改動的形狀」(scope / surface / risk),沒有一條在量「需求本身的清晰度」。

唯一沾到邊的:

  • Layer P 的 Decision-heavy with multiple valid approaches —— 但前提是 diagnosis 已經列出 2+ 策略,代表 diagnosis 已經做完且收斂。對「issue body 本身就含糊到 diagnose 都做不下去」的情境沒覆蓋。
  • Why spectra-discuss is the default for Spectra rationale 提到「AI 常常高估 diagnosis 完整度」 —— 但這是 Spectra path 內 的安全網,不是把 vagueness 拉前到 routing 決策本身

Type

refactor(改進既有 routing 規則)

Why vagueness 應該是一階信號

Issue 的 vagueness 跟改動的 scope 是 正交 的兩個維度:

                 Scope: 小                         Scope: 大
                 ┌─────────────────────────────────┬─────────────────────────────────┐
Vague needs:     │ A. 「menu 感覺怪怪的,改一下」   │ B. 「整個 onboarding 流程要重做」  │
                 │   一檔可能就改完,但不知道要改   │   範圍大,且方向也不清楚           │
                 │   什麼 → 現在會被判 Simple      │   → 現在大機率判 Spectra(對)     │
                 ├─────────────────────────────────┼─────────────────────────────────┤
Clear needs:     │ C. 「這行 typo,改 'recieve' →  │ D. 「把 5 個 walker 抽出 visitor   │
                 │     'receive'」                 │     protocol,介面設計如附圖」     │
                 │   → Simple(對)                  │   → 現在判 Plan(對)              │
                 └─────────────────────────────────┴─────────────────────────────────┘

問題集中在 quadrant A:scope 小 + 需求模糊 → 現行邏輯判 Simple → AI 直接進 TDD loop → pattern-match 一個方向就動手 → 改完才發現「不是這個意思」。

這正是 spectra-discuss 想防的失敗模式,但 Simple path 完全沒有對應的 alignment gate。Plan path 的 EnterPlanMode 雖然能擋,但前提是先被路由到 Plan;vagueness 沒進入 routing 信號的話,quadrant A 永遠不會被路到 Plan。

Expected

rules/sdd-integration.md 應該把 Vagueness Layer 加進 4 層 gate,作為 routing 決策的一階信號。可能的 shape(待 diagnose):

  1. 新增 Layer V (Vagueness signals) —— 與 Layer P 並列,任一命中就升級到 Plan(或 Spectra,看程度)

    • Issue body 含 hedge 語(「感覺」「好像」「之類的」「順便」「之類」「something like」「somehow」)
    • 缺 expected/actual(bug type)或缺 acceptance criteria(feature type)
    • 含 open question(「該用 X 還是 Y?」「要不要也包含 Z?」)
    • 比較性訴求無基準(「改得好一點」「比較順」「更符合直覺」)
    • 多個並列名詞模糊指涉(「相關的東西」「類似的地方」)
  2. Layer 2 reformulation —— Spectra 不只看「有沒有 published API」,也看「需求是否需要先對齊才能定 contract」。Vague Spectra-shaped issue → spectra-discuss(本來就是 default,但這次 routing 應該主動點出 vagueness 是觸發因素)

  3. 新增 disqualifier 反向:即使 Layer 1 命中(narrative / ad-hoc),如果 vagueness 同時很高,可能要 escalate 到 Plan 而不是 Simple —— 例如「abstract 重寫,但風格、長度、目標讀者都沒講」應該先 Plan-mode 對齊再寫。

Actual

目前的 4 層 gate 完全沒有 vagueness 軸。所以:

  • Quadrant A(small + vague)→ 一律 Simple → AI 直接動手 → 高機率改錯方向
  • 即使 issue body 含「感覺怪怪的」「之類的」「再順便處理 X」這種 obvious hedge,也不會升級
  • 唯一補救是 user 主動指定 --complexity Plan 或寫超詳細的 issue —— 但這就是把責任推給 user

Impact

  • 失敗模式:Quadrant A issue 走 Simple path → AI 改完 → user「這不是我要的」→ revert/重做 → 多一輪
  • 頻率:高。日常很多 ad-hoc 改善請求(「這個 UI 有點怪」「reports 看起來不太對」)都落在 quadrant A
  • 目前的 workaround:user 自己升級到 Plan,或在 issue body 一開始就寫死 acceptance criteria —— 但 IDD 的 promise 是 routing 由 skill 判定,不是讓 user 預先 self-route

關聯設計線索

  • rules/sdd-integration.md "Why spectra-discuss is the default for Spectra" —— 已承認 vagueness 存在,但只在 Spectra 內部處理
  • idd-diagnose Step 3.5 是判定點,新增 Layer V 應該在這裡
  • MANIFESTO.md 5-axis bug-fix model —— 可能要新增「alignment axis」對應 vagueness
  • linked-context sister sweep(IC_R011)正交:那個是「漏抓 sibling」,這個是「主軸本身就模糊」

Next Step

/issue-driven-dev:idd-diagnose #NNN(實際 issue # 由建立後填入)

Linked-Context Siblings Filed (v2.48.0+ #529)

(none — no orphan sibling mentions in linked context)

Current Status

Phase: closed
Last updated: 2026-05-04 by idd-close

Key Decisions

  • Verdict = Spectra → spectra-discuss → propose → apply → archive 完整 lifecycle
  • Approach C 選定 (Step 3.4 in idd-diagnose,不新增獨立 skill,維持 6-skill plugin surface)
  • Heuristic = AI Likert 6-point per-axis (V1, V4),trigger threshold per-axis ≥ 4 — 不用 keyword matching
  • Hybrid 3-option (clarify / proceed / escalate) default 隨 max score 變
  • Meta-rule 屬性評分用 Likert,不用 keyword 抽到 .claude/rules/attribute-assessment.md,session-wide via @import
  • 5-axis bug-fix model → 6-axis (新增 Alignment quality,evidence = Layer V)

Scope Changes

  • 比原 issue 描述新增:meta-rule 抽出獨立檔(超越 vagueness 適用範圍);MANIFESTO 6-axis 擴充

Blocking

  • (none — closed)

Commits

Spectra Change

  • add-vagueness-layer-routing archived to openspec/changes/archive/2026-05-04-add-vagueness-layer-routing/
  • Main spec at openspec/specs/routing-vagueness-layer/spec.md (9 normative requirements)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions