Skip to content

idd-issue --blocked-by:GraphQL mutation 名稱錯誤(addBlockedByDependency 不存在,應為 addBlockedBy / blockingIssueId),且失敗訊息誤指原因、原生 dependency 從未建立 #353

Closed

Description

@kiki830621

Problem

Original text:
「兩張 issue 都開」
— Source: 使用者,2026-09-24(+08:00)對話——同意開「idd-issue 的 GraphQL mutation 名稱錯誤」這張 issue

idd-issue 的 --blocked-by 三層 fallback 中,Layer 1(GitHub 原生 dependency)用的 mutation 在 GitHub GraphQL schema 裡不存在:

mutation($i:ID!,$b:ID!){addBlockedByDependency(input:{issueId:$i,blockedByIssueId:$b}){issue{id}}}

實際名稱(2026-09-24 introspection 查證):

$ gh api graphql -f query='{__schema{mutationType{fields{name}}}}' --jq '...name' | grep -i block
addBlockedBy
removeBlockedBy
$ gh api graphql -f query='{__type(name:"AddBlockedByInput"){inputFields{name}}}'
clientMutationId / issueId / blockingIssueId

正確寫法:

mutation($i:ID!,$b:ID!){addBlockedBy(input:{issueId:$i,blockingIssueId:$b}){issue{number}}}

照文件原樣執行的回應是 Variable $b is declared by anonymous mutation but not used;改用 addBlockedBy 後在 PsychQuant/Akashic-Library#620、#621 實測成功(原生 blocked-by 已建立)。

Type

bug

為什麼一直沒被發現(安靜的失敗)

SKILL.md 的呼叫是 if ! gh api graphql … 2>/dev/null; then echo "⚠ … failed (repo not enabled / API error / permission); body blockquote already in place":

  • 2>/dev/null 吞掉了 GraphQL 的錯誤訊息;
  • 失敗訊息把原因歸給「repo 沒啟用/API 錯誤/權限」——三個都不是真因,讀的人會以為是環境問題;
  • Layer 2(body blockquote)照樣成功,所以結果看起來「大致可用」。

依 CHANGELOG,這條 fallback 自 v2.52.0(#21)起就在;原生 dependency 很可能從未成功建立過。

受影響檔案(v3.1.0 原始碼)

  • plugins/issue-driven-dev/skills/idd-issue/SKILL.md(第 110、772、774 行附近:TaskCreate 描述、mutation、失敗訊息)
  • plugins/issue-driven-dev/references/bundle-flags.md(Fallback Chain 段)
  • README.md、CHANGELOG.md 的相關敘述

Expected

  1. mutation 改為 addBlockedBy(input:{issueId, blockingIssueId})
  2. 失敗時印出 GraphQL 回傳的錯誤,不要吞掉、不要猜原因
  3. 加一個會打到真 schema 的檢查(或至少 introspection 斷言 mutation 名稱存在),讓 schema 改名時會被發現,而不是安靜地退回 Layer 2

Actual

Layer 1 永遠失敗,訊息誤導;只有 Layer 2 的 body blockquote 生效。

Impact

--blocked-by 與 --bundle-mode ordered 建的依賴在 GitHub UI 上沒有原生的 blocked 標示與側欄關聯,只剩內文一行註記。


Current Status

Phase: closed
Last updated: 2026-10-09 by idd-close
Closing summary: #353 (comment)
Dashboard: #353 (comment)
Verify: #353 (comment)

Key Decisions

  • 驗證 2 輪 PASS、0 blocking;follow-up [bug] idd-issue --blocked-by handler:Layer 2 字面 \n、不去重、stdout 被佔用、目標編號與 node ID 未檢查 (follow-up from #353 verify) #359–[bug] SKILL.md 程式碼裡的 $0/$1/$2 會被 skill 參數替換改掉 (follow-up from #353 verify) #362;verified tag idd-353-verified = 68779cc
  • 「已存在」只比對整句 Target issue has already been taken,並印出該句作依據;其他 has already been taken 照常警告(取代下方第 6 條的寬鬆寫法)
  • Layer 1 訊息全走 stderr(bundle 用 CHILD_NUM=$(…) 擷取 stdout);node ID 用 -f 傳
  • live schema 檢查另由每週 workflow live-schema.yml 執行(週一 09:00 臺北時間+手動;merge 後才會跑)
  • 主規格的直接修改超出診斷原訂界線(多了已存在判定與 stderr 兩條 SHALL),決定保留在主規格,理由見驗證報告
  • Layer 1 改用 addBlockedBy(issueId, blockingIssueId),GitHub 錯誤原樣印出;already been taken 視為已存在(實測)(比對已收窄,見上)
  • 根因:mutation 與欄位名稱都不在現行 schema,且規格條文寫了同一錯名
  • Complexity = Simple(現行帶錯名的檔案 4 個 < 5,呼叫點單一)
  • 測試採離線守衛為主,真 schema introspection 做成 opt-in(repo 測試皆不打網路)
  • 直接更正 openspec/specs/idd-issue-bundle/spec.md(先例 a4f0723、e6cd7da),不動 archive

Scope Changes

Blocking

Commits

Activity

  1. kiki830621 commented on Oct 2, 2026

    @kiki830621
    MemberAuthor

    Diagnosis

    Type

    bug

    Root Cause / Analysis

    我認為 root cause 是:Layer 1 呼叫的 mutation 名稱與欄位名稱在 GitHub GraphQL schema 中都不存在——addBlockedByDependency / blockedByIssueId,正確的是 addBlockedBy / blockingIssueId。依據如下。

    重現(2026-10-02,兩方向各一次):

    這個名稱過去是否曾經存在,無法從現行 schema 查證;能確定的是現行 schema 沒有它。

    為什麼一直沒被看見(三層):

    1. SKILL.md:771 的 2>/dev/null 吞掉了 GraphQL 回傳的錯誤。
    2. SKILL.md:774 的失敗訊息寫死三個原因(repo not enabled / API error / permission),三個都不是真因,讀的人會往環境方向查。
    3. 規格本身寫了同一個錯名:openspec/specs/idd-issue-bundle/spec.md 的 Requirement 第 2 條是「SHALL attempt the GitHub GraphQL addBlockedByDependency mutation」,失敗情境也列了同樣三個猜測原因。實作與規格一致地錯,照規格審查不會抓到。

    錯名的分布(worktree 實測 grep):

    檔案 位置 性質
    plugins/issue-driven-dev/skills/idd-issue/SKILL.md 110(TaskCreate 描述)、772(mutation)、774(訊息)、1008(deferred 說明) 現行,要改
    plugins/issue-driven-dev/references/bundle-flags.md 5、46、132–140(mutation 範例)、203、300 現行,要改
    openspec/specs/idd-issue-bundle/spec.md 57、62、69 現行規格,要改
    docs/commands.md 153 現行,要改
    plugins/issue-driven-dev/CHANGELOG.md:1602、README.md:178 v2.52.0 的歷史紀錄 不改寫;新增一筆更正
    openspec/changes/archive/2026-05-05-add-bundle-flags-to-idd-issue/ 已封存的 change 不動(封存保護)

    整個 plugin 只有 idd-issue 這一個呼叫點;沒有其他 skill 使用依賴類 mutation。

    Impact

    • 影響的檔案:上表「現行,要改」的四個檔案,加一個新的守衛測試
    • 影響的使用者流程:idd-issue --blocked-by 與 --bundle-mode ordered 建立的依賴,GitHub UI 上從未出現原生 blocked 標示與側欄關聯,只剩內文的 > Blocked by #M

    Strategy

    • SKILL.md:772 改為 addBlockedBy(input:{issueId:$i,blockingIssueId:$b}){issue{number}}
    • SKILL.md:771-775 不再 2>/dev/null:保留 GraphQL 回傳的錯誤,失敗時原樣印出,移除寫死的三個猜測原因
    • SKILL.md:110、:1008 的名稱同步更正
    • references/bundle-flags.md 五處同步更正(含 mutation 範例與失敗情境表)
    • openspec/specs/idd-issue-bundle/spec.md:Requirement 第 2 條改名;失敗情境改為「warning SHALL 包含 GraphQL 回傳的錯誤」,不再列猜測原因(直接修改主規格有先例:a4f0723、e6cd7da)
    • docs/commands.md:153 更正
    • 新增離線守衛測試 scripts/tests/blocked-by-mutation/:(a) 現行檔案不得出現 addBlockedByDependency/blockedByIssueId(排除 CHANGELOG 歷史段與 archive);(b) Layer 1 使用 addBlockedBy 與 blockingIssueId;(c) graphql 呼叫不得接 2>/dev/null。另加一段 opt-in 的真 schema introspection 斷言(環境變數開啟才跑,否則明確印 SKIP),對應 Expected 第 3 點
    • CHANGELOG 新增更正條目,版本照 repo 的 release 慣例遞增

    Conflict Class

    A_parallel_safe
    編輯限於 idd-issue SKILL.md、bundle-flags.md、一份 spec、docs/commands.md 與一個新測試目錄;與其他工作共享的只有 CHANGELOG/版本號這類純文字合併點,沒有共享的執行期資源。

    Complexity

    Simple

    Hard-gate: not triggered — 帶此錯名的現行檔案為 4 個(idd-issue/SKILL.md、references/bundle-flags.md、openspec/specs/idd-issue-bundle/spec.md、docs/commands.md),未達 5;呼叫點只有 idd-issue/SKILL.md:770-775 一處,非共用抽象

    Layer 1 未命中(不是敘述文件);Layer 2 未命中(不新增對外介面,--blocked-by 的三層契約不變,只更正其中寫錯的識別名稱);Layer P 未命中(各檔獨立的文字更正,無順序依賴;測試做法依 repo 慣例決定,見 Risks)。

    Risks

    • 測試做法的取捨:repo 的 52 個測試套件沒有任何一個打網路,CI 只跑 run-all-tests.sh。所以主要防線是離線文字守衛;真 schema 的斷言做成 opt-in,避免 CI 因為沒有網路或 token 而變紅。opt-in 段在預設情況下只會印 SKIP,不能把它算成「schema 已驗證」。
    • 改正後 Layer 1 第一次真的會建立原生依賴;同一對 issue 重跑時 GitHub 的行為(重複建立是否報錯)未實測,實作時要驗一次,必要時把「已存在」當成成功。
    • 直接改主規格(非 Spectra change)只限於更正錯誤識別名稱與移除猜測原因,不改契約。

    Residue

    (none)

    Vagueness Pre-check

    • V1: 1 — 錯誤的 mutation、欄位、正確名稱與行號都寫在 issue body(「正確寫法」區塊附完整 mutation)
    • V4: 2 — Expected 三點各自可驗;第 3 點給了兩種可接受形式(真 schema 檢查,或至少 introspection 斷言),選擇空間已被 issue 列舉
    • Triggered: no — both axes ≤ 3

    Recommended Agent: codex-xhigh

    Confidence: 0.5
    Data source: static_heuristic(四個候選的 routing 資料皆為 0 筆,冷啟動規則)
    Reasoning: Static heuristic (cold start): codex score 4 vs claude score 0.

    Sister Concerns Filed (mid-diagnose, v2.47.0+ #528)

    Filed: #356, #357

    未開(與既定方向衝突):bundle 的 Epic 加上原生 sub-issue 連結(addSubIssue)——#83 已定調跨票追蹤用 milestone,替 Epic 加功能與該方向相反;是否保留 Epic 由 #357 裁決。

  2. kiki830621 commented on Oct 2, 2026

    @kiki830621
    MemberAuthor

    📊 For Reviewer / Collaborator

    現在:已結案。根因是 Layer 1 呼叫的 mutation 名稱與欄位都不在 GitHub schema(應為 addBlockedBy / blockingIssueId),且錯誤被吞掉;已改用正確 mutation、原樣印出 GitHub 錯誤,隨 3.1.1 發布。merge 後手動跑的 live schema 檢查綠燈(2026-10-09)。
    Blocking:無
    你該做什麼:無

    last-updated by idd-close at → closed, 2026-10-09

  3. kiki830621 commented on Oct 2, 2026

    @kiki830621
    MemberAuthor

    Implementation Plan

    • 新增 plugins/issue-driven-dev/scripts/tests/blocked-by-mutation/test.sh(先寫,先看它失敗):(a) 所有 tracked 檔案不得出現 addBlockedByDependency/blockedByIssueId,例外是封閉清單——CHANGELOG、README 的版本歷史列、openspec/changes/archive/、本測試目錄;(b) Layer 1 使用 addBlockedBy 與 blockingIssueId;(c) graphql 呼叫不接 2>/dev/null、不再寫死猜測原因;(d) 每條檢查都有陽性對照(對突變副本必須失敗);(e) IDD_LIVE_GH=1 時對真 schema 做 introspection,否則明確印 SKIP
    • 修改 skills/idd-issue/SKILL.md:Layer 1 改用 addBlockedBy(input:{issueId, blockingIssueId});捕捉 GraphQL 輸出,失敗時原樣印出;has already been taken 視為已存在(2026-10-02 實測:重複建立回 rc=1、Validation failed: Target issue has already been taken,狀態不變);第 110、1008 行同步更正
    • 修改 references/bundle-flags.md:五處名稱、mutation 範例、失敗情境表同步更正
    • 修改 openspec/specs/idd-issue-bundle/spec.md:Requirement 第 2 條改名;失敗情境改為「warning SHALL 包含 GraphQL 回傳的錯誤」;新增「依賴已存在」情境
    • 修改 docs/commands.md:153
    • 版本 3.0.0 → 3.0.1(plugin.json、.claude-plugin/marketplace.json)+ CHANGELOG 3.0.1 條目

    不改:CHANGELOG 舊條目、README 版本歷史列、已封存的 spectra change——都是當時的紀錄。

  4. kiki830621 commented on Oct 2, 2026

    @kiki830621
    MemberAuthor

    Implementation Complete

    Checklist (synced from TaskList)

    • 新增守衛測試 scripts/tests/blocked-by-mutation/test.sh(先紅後綠;17 項,陽性對照齊備;IDD_LIVE_GH=1 時 20 項)→ commit 44c9691
    • skills/idd-issue/SKILL.md Layer 1:addBlockedBy(issueId, blockingIssueId)、GitHub 錯誤原樣印出、already been taken 視為已存在;第 110、1018 行同步 → commit 44c9691
    • references/bundle-flags.md 五處與失敗情境改寫(移除猜測原因)→ commit 44c9691
    • openspec/specs/idd-issue-bundle/spec.md:Requirement 第 2 條、失敗情境、新增「Dependency already exists」情境;spectra validate --specs 24/24 valid → commit 44c9691
    • docs/commands.md:153 → commit 44c9691
    • 版本 3.0.0 → 3.0.1(plugin.json、marketplace.json)+ CHANGELOG 3.0.1 → commit b433021

    Legend: - [x] done · - [~] skipped (may revisit) · - [-] won't fix (scope)
    idd-close will refuse to close if any - [ ] remains in this checklist.

    Changes

    • 44c9691: fix: idd-issue --blocked-by uses addBlockedBy and shows GitHub's error
    • b433021: chore: release 3.0.1 — native dependency for --blocked-by

    Verification evidence(皆於 committed HEAD b433021 上新跑)

    • 紅綠回歸:SKILL.md 換回修正前版本 → 新測試 rc=1;還原 → rc=0
    • 全套件 run-all-tests.sh:53/53 PASS(原 52 + 新 1)
    • IDD_LIVE_GH=1:真 schema introspection 3 項通過(^addBlockedBy$、^issueId$、^blockingIssueId$,整行比對)
    • 重複建立的行為以實測為準:對既有依賴再送一次 → rc=1、Validation failed: Target issue has already been taken、狀態不變

    Files Changed

     .claude-plugin/marketplace.json                    |   2 +-
     docs/commands.md                                   |   2 +-
     openspec/specs/idd-issue-bundle/spec.md            |  14 +-
     .../issue-driven-dev/.claude-plugin/plugin.json    |   2 +-
     plugins/issue-driven-dev/CHANGELOG.md              |  20 ++
     .../issue-driven-dev/references/bundle-flags.md    |  28 ++-
     .../scripts/tests/blocked-by-mutation/test.sh      | 202 +++++++++++++++++++++
     plugins/issue-driven-dev/skills/idd-issue/SKILL.md |  22 ++-
     8 files changed, 263 insertions(+), 29 deletions(-)
    

    Scope Compliance

    無超出範圍的改動。CHANGELOG 舊條目、README 版本歷史列、已封存的 spectra change 刻意未改(歷史紀錄)。bundle 區段的另外兩個缺陷已在診斷時分出為 #356、#357,未混入本 PR。

    Next: verification pending

    Sister Bugs Filed (mid-impl, v2.44.0+ #526)

    (none surfaced) — 實作中唯一發現的問題是新測試 live 段的子字串斷言(issueId 會被 blockingIssueId 滿足),已在本 PR 內改為整行比對;bundle 區段的兩個缺陷已於診斷時分出為 #356、#357。

    更正(verify 第 2 輪後,2026-10-02)

  5. kiki830621 commented on Oct 2, 2026

    @kiki830621
    MemberAuthor

    Verify: #353

    Engine

    pai-ensemble 2.23.0 (canonical #207) — 4 IDD lenses (requirements / logic / security / regression) + DA + Codex (gpt-6.1-sol, effort medium), model: opus

    Rounds

    Round Reviewed Result Disposition
    1 44c9691 + b433021 2 MEDIUM / 17 LOW / 13 INFO, 0 CRITICAL/HIGH fixed in 7d71b15
    2 whole PR at 7d71b15 2 MEDIUM / 16 LOW / 20 INFO, 0 CRITICAL/HIGH in-scope items fixed in 68779cc

    Aggregate

    PASS — 0 blocking, 4 follow-ups (#359–#362).

    No finding in either round violated an issue requirement or was a security hole. Round 2's two MEDIUMs were the same doc inconsistency (the DA rated it LOW). The round-2 in-scope fixes in 68779cc were not re-reviewed by the ensemble (Step 5c); they are covered by the test runs below.

    要求覆蓋率

    3 / 3 requirements addressed

    1. ✅ The mutation is addBlockedBy(input:{issueId, blockingIssueId}), in SKILL.md, the spec, references/bundle-flags.md and docs/commands.md.
    2. ✅ On failure GitHub's output is printed verbatim and no cause is guessed. An existing dependency (Target issue has already been taken, exact sentence) counts as success and prints that sentence as evidence. All Layer 1 messages go to stderr.
    3. ✅ The live schema check is IDD_LIVE_GH=1. It introspects the mutation, the input fields and the payload, and it ran green locally on 2026-10-02. .github/workflows/live-schema.yml runs it every Monday 09:00 Taipei and on demand. The CI run has not happened yet: a scheduled or dispatched workflow can only run from the default branch, so the first run comes after merge (see Post-merge).

    Findings (round 2, merged)

    # Severity Finding Source Action
    1 MEDIUM The bundle-flags.md Layer 1 example printed GitHub's reply to stdout (bare 2>&1), against the stderr rule written under it codex+logic+requirements+regression; DA: LOW In-scope fix (68779cc): the example captures into GQL_OUT and points to SKILL.md; a test checks its shape
    2 LOW The CI half of the live check has never run. GitHub disables schedules in public repos after 60 days of inactivity, and failures may go unseen requirements+regression+logic+DA In-scope note (CHANGELOG, workflow comment). Post-merge: run it by hand
    3 LOW "never created" was still stated as fact in the CHANGELOG and the workflow comment requirements In-scope fix: inference wording
    4 LOW Continuing after one target fails was untested: a break passed all checks logic In-scope fix: two-target check plus a break control
    5 LOW The rest of the 3.B handler: Layer 2 and --parent still print to stdout inside CHILD_NUM=$(…), Layer 2 builds a literal \n, there is no dedup, and M / CHILD_NUM are not validated as integers logic+security+DA Follow-up #359 (it also takes round 1's unguarded node-ID lookup). The stderr rationale is now scoped to Layer 1
    6 LOW The failure warning claimed the Layer 2 blockquote was in place without checking logic In-scope fix: claim removed
    7 LOW The already-exists branch discarded GitHub's text logic+requirements In-scope fix: prints the matched sentence
    8 LOW The Idempotency Contract row said GitHub silently de-duplicates and that Layer 2 dedups regression+DA In-scope fix: the row states the measured behaviour and points to #359
    9 LOW The direct spec edit adds requirements beyond the boundary the diagnosis set DA Decision recorded below
    10 LOW The banned-name exemptions do not list the root changelog/ regression; DA: INFO Dismissed: a hit there fails loudly by design. It gets added to the closed list when needed
    11 INFO The live check catches removal, not deprecation requirements Dismissed after measurement: introspection leaves deprecated fields out by default (Mutation: 261 fields, 277 with deprecated). The note is in the test
    12 INFO No backfill guidance for issues created by 2.52.0–3.0.0 requirements In-scope fix: CHANGELOG note
    13 INFO The signal trap did not exit logic In-scope fix
    14 INFO The checkout kept its credentials security In-scope fix: persist-credentials: false
    15 INFO The PR body, Key Decisions and Implementation Complete still described the loose match DA Updated (PR body, Current Status; correction appended to Implementation Complete)
    16 INFO run-all-tests.sh hides SKIP lines from passing suites DA Follow-up #361
    17 INFO The match checks combined stdout+stderr, and GitHub's raw reply reaches stderr security Dismissed: the match is on the exact sentence, and printing GitHub's raw error is requirement 2
    18 INFO Version 3.0.1 vs open PRs that also bump the version regression Dismissed: renumber at merge
    19 INFO The plugin README is listed as affected but left alone requirements Disposition: its v2.52.0 row is a historical record, exempt in the banned-name scan
    20 INFO A reviewer's scratch copy briefly staged deletions in the worktree index, then repaired them logic Checked: the worktree is clean and HEAD was unchanged
    — INFO Positive controls cover each check, not each condition; the full suite passes; no prompt injection found logic, regression —

    Round-1 items deferred as out of scope: #360 (idd-report GraphQL), #361 (SKIP visibility), #362 (skill $N substitution). The node-ID guard went into #359.

    Decision: spec boundary

    The diagnosis said a direct edit of the main spec would only correct the name and remove the guessed causes. The implementation went further. Requirement 2 now also says:

    • the exact Target issue has already been taken counts as success, and any other "has already been taken" still warns;
    • this layer's messages go to stderr.

    It also adds the Scenario "Dependency already exists" and two rows to the example table. These stay in the main spec, not in a Spectra change. They are the smallest contract that describes the corrected behaviour; without them the spec would still describe a layer that drops GitHub's error. The repo has precedent for direct corrections to a main spec (a4f0723, e6cd7da). This note corrects the boundary the diagnosis stated.

    Scope Check

    9 files: SKILL.md, the spec, bundle-flags.md, docs/commands.md, the new suite, the new workflow, CHANGELOG, plugin.json, marketplace.json. Each change traces to #353. Version 3.0.1.

    Tests (at 68779cc, 2026-10-02)

    • scripts/run-all-tests.sh: 53 suites, 0 failed
    • blocked-by-mutation with IDD_LIVE_GH=1 against github.com: 46 PASS / 0 FAIL
    • The new checks were red on the previous SKILL.md (5 behaviour checks failed on 3.0.0's Layer 1), and every check has a positive control
    • spectra validate --specs: idd-issue-bundle valid

    Follow-up Findings Filed (v2.72.0+ #148)

    Post-merge

    • gh workflow run live-schema.yml once and confirm it is green; cite the run in the closing summary
  6. kiki830621 commented on Oct 9, 2026

    @kiki830621
    MemberAuthor

    Closing Summary

    Problem

    從 2.52.0(#21)起,/idd-issue --blocked-by 與 --bundle-mode ordered 的 Layer 1 送出的 GraphQL mutation 在 GitHub schema 裡不存在。原生 dependency 從來沒有建立過,每一次都悄悄退回 body 的 blockquote。失敗訊息又寫死了三個無關的原因,讀的人會往環境方向查。

    Root Cause

    Layer 1 呼叫的是 addBlockedByDependency(input:{issueId, blockedByIssueId}),GitHub schema 實際的名稱是 addBlockedBy(input:{issueId, blockingIssueId})。2026-10-02 的 introspection 與兩個方向的重現都確認了這一點。

    有三層讓它一直沒被看見:

    1. 2>/dev/null 吞掉了 GraphQL 回傳的錯誤。
    2. 失敗訊息寫死 repo not enabled、API error、permission 三個原因,三個都不是真因。
    3. normative spec 寫的也是同一個錯名,所以照 spec 審查的人會判定程式是對的。

    Solution

    • 改呼叫正確的 mutation。 Layer 1 改用 addBlockedBy,node ID 以 -f 綁定(-F 遇到 @ 開頭的值會去讀本機檔案)。失敗時原樣印出 GitHub 的輸出,不再猜原因。
    • 已存在的 dependency 不算失敗。 Target issue has already been taken 視為已連結,不發警告。只認這一句,其他的「already been taken」照常警告。
    • Layer 1 的訊息改走 stderr。 bundle orchestration 把 handler 包在 CHILD_NUM=$(…) 裡,訊息若印在 stdout,會被當成下一張的 --blocked-by 值。
    • 其他地方的錯名一併更正: references/bundle-flags.md、openspec/specs/idd-issue-bundle/spec.md、docs/commands.md。
    • 新增測試。 新 suite blocked-by-mutation 用 stub gh 跑四種模式,加上兩個目標的情境。另有 .github/workflows/live-schema.yml,每週一 09:00(臺北時間)以 IDD_LIVE_GH=1 對真實 schema 做 introspection。

    Verification

    Changes

    Merge-completeness

    Step 1.55 回 rc=3,列出 4 個 orphan(44c9691、b433021、7d71b15、68779cc),判定為誤判:

    • branch tip 3be157e 的 tree 與 squash 7acac5c 完全相同。
    • squash 新增的 411 行裡,只有 4 行不在 main 上,都是版號與描述,已被 3.2.0 和 3.3.0 正常取代。

    另外,Step 1.55 的片段本身有兩處反斜線多了一個,照原樣執行永遠會跳過。這次是手動修正後才真的跑起來,這個問題另開 #375 追蹤。

    Residue Acknowledgement

    residue declared as (none) at diagnose time — no acknowledgement needed

    Doc-sync 檢查

    → doc-sync: 8 files checked.

    • README.md 已同步(1890012):plugin 表改為 3.3.0、19 skills / 8 rules / 28 references。
    • plugins/issue-driven-dev/README.md 第 184 行提到 addBlockedByDependency。那一行是 v2.52.0 當時行為的歷史紀錄,所以保留不改。

    Distribution Sync

    • Detected: plugin(issue-driven-dev)
    • Choice: chain to plugin-update
    • Outcome: 重跑 marketplace update 與 plugin update,已經是最新的 3.3.0。3.1.1 在 2026-10-07 發布並安裝。
    • At: 2026-10-09T18:23:32+08:00

    Live schema check(merge 後)

    live-schema.yml 在 merge 後一直沒有跑過(排程是每週一)。結案時手動觸發一次:run 37917817720 在 94d1368 上 success,blocked-by-mutation 46 passed、0 failed,其中三項 live introspection 確認了 addBlockedBy、issueId、blockingIssueId(2026-10-09T18:28+08:00)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions