You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
idd-issue: Step 3.6 baseline tag 未檢查 issue 號非空,建立失敗時會推出 idd--baseline #412
重現(throwaway probe,stub gh,不連網):stub gh issue create 印 could not add label: 'P0' not found 到 stderr 並 exit 1、gh repo view 回 main;透過 IDD_GH_BIN 走真的 gh-egress.sh;暫存 git repo + bare remote;Step 3.6 的 bash block 從 SKILL.md 原文抽出直接執行:
could not add label: 'P0' not found
create rc=1 URL='' NUMBER=''
--- Step 3.6 run 1 ---
* [new tag] idd--baseline -> idd--baseline
→ tagged idd--baseline at main HEAD + pushed to origin
--- Step 3.6 run 2 ---
→ idd--baseline already exists — skip (idempotent)
Activity
kiki830621 commentedon Oct 26, 2026
Diagnosis
Type
bug
Root Cause / Analysis
我認為 root cause 是:
idd-issue從頭到尾沒有任何一步把「建立結果」轉成一個經過驗證的$NUMBER,而 Step 3.6 又無條件信任$NUMBER,因為:plugins/issue-driven-dev/skills/idd-issue/SKILL.md:660-692)。範例是一個裸的bash gh-egress.sh create … --label "$TYPE",沒有URL=$(…)、沒有定義$NUMBER(Step 4.6 用的$NEW_ISSUE_NUMBER,:1204,同樣沒有任何地方定義),也沒有「建立失敗就停止」的規則。gh-egress.sh成功時exec真正的 gh(scripts/gh-egress.sh:469、:481),所以 gh 失敗時 stdout 是空的;模型自己補上的URL=$(…)/NUMBER=${URL##*/}因此得到空字串,流程照常往下走。$NUMBER不做任何驗證(SKILL.md:1026-1056)::1042TAG="${BASELINE_FMT/\{N\}/$NUMBER}"→$NUMBER為空時得到idd--baseline。:1043DEFAULT_BRANCH由$GITHUB_REPO查得,跟建立成敗無關,所以照樣解析成功。:1046idempotent 檢查只問 tag 是否存在;:1050git tag … && git push …兩個指令都會成功。:1056的 graceful-skip 只在指令失敗時生效;這條路徑上指令全部成功。觸發來源比 issue 描述的更多:除了 label 不存在(gh 失敗、exit 1),
gh-egress.sh自己的拒絕(隱私機械網 exit 10、mention 網 exit 11 等,refusal band ≥ 10)stdout 也是空的。實測:所以任何一種建立失敗,只要模型繼續往 Step 3.6 走,結果都一樣。
重現(throwaway probe,stub gh,不連網):stub
gh issue create印could not add label: 'P0' not found到 stderr 並 exit 1、gh repo view回main;透過IDD_GH_BIN走真的gh-egress.sh;暫存 git repo + bare remote;Step 3.6 的 bash block 從SKILL.md原文抽出直接執行:加上 issue 建議的
caseguard 後:''、abc、整條 URL 三種輸入都 skip 並印原因;42正常打出idd-42-baseline。PR #426 合併後問題仍在:#426 的 REST transport(
scripts/lib/gh_egress_rest.py)對不存在的 label 一樣拒絕(check_labels),而且明文規定失敗時 stdout 為空 —— 失敗形狀不變,Step 3.6 照樣拿到空號碼。(本 issue 無附件。)
Existing work
(none) — 相關但不重疊:PR #426(in flight)改了
gh-egress.sh的傳輸層與idd-issue/SKILL.md開頭與 Step 0.6 的文字,不處理本問題;本修正需在它之上 rebase。Impact
plugins/issue-driven-dev/skills/idd-issue/SKILL.md(Step 3.A、Step 3.6);測試plugins/issue-driven-dev/scripts/tests/auto-tag/test.sh(或新的可執行 suite);release 記錄(CHANGELOG.md、plugin.json、marketplace.json)。/idd-issue建立失敗(label 不存在、gh-egress 拒絕、網路/權限錯誤)且auto_tag.enabled為預設 on 時,remote 上會出現idd--baseline,需要手動刪除;同一個 repo 之後的失敗都被 idempotent skip 掩蓋。/idd-allfrom-scratch 模式(Phase 1 跑 idd-issue)同樣受影響。Strategy
scripts/tests/blocked-by-mutation/test.sh的做法 —— 從SKILL.md抽出 Step 3.6 block,在 stub gh + 暫存 repo + bare remote 上執行,NUMBER取''/abc/ 整條 URL /42:前三者斷言 remote 沒有任何 tag、stderr 有 skip 原因;42斷言出現idd-42-baseline。附 positive control(拿掉 guard 必須 RED)。另加 drift-guard 斷言 Step 3.A 文字含擷取與停止規則。URL=$(bash gh-egress.sh create …)與 exit code,NUMBER="${URL##*/}",用case "$NUMBER" in ''|*[!0-9]*)驗證;不合格就印出 gh/wrapper 的錯誤與「issue 未建立 — 停止,不執行 Step 3.5 之後的步驟」,並在 Step 5 回報失敗後停止。同時設定NEW_ISSUE_NUMBER="$NUMBER",讓 Step 4.6 用到的變數有定義。case形式)作為縱深防禦:不合格 → 印原因、graceful-skip,維持「never abort」鐵律;:1028的「拿到$NUMBER之後」改為「拿到經驗證的$NUMBER之後」。auto-tagdrift-guard 的 needle;CHANGELOG + 版號(patch,與 3.6.0 的 PR feat: run /idd-all in Claude Code cloud sessions — REST egress and reads, (PR, attended) — 3.6.0 (#416) #426 / feat: 討論中持續更新 issue:問題變了改正文、診斷變了改 Diagnosis 留言、補充才新增 comment #424 協調)。Conflict Class
B_resource_serialize
共享資源是
plugins/issue-driven-dev/skills/idd-issue/SKILL.md:#363 也要改同一個 Step 3.6 block,#411 改同檔 Step 3.5,PR #426 也動這個檔案;同檔 issue 依 same-file rule 序列化(建議與 #411 綁成一組、先於 #363)。Complexity
Simple — root cause 明確、修正自成一體:同一個 SKILL.md 的兩個相鄰段落 + 一個測試,並沿用既有 pattern(
idd-clarify/SKILL.md:111的^[0-9]+$驗證、blocked-by-mutation的抽 block 測試法);Layer 1 不命中(改的是行為)、Layer 2 不命中(無新對外介面);Layer P 不命中:無跨檔順序依賴、Strategy 4 步、唯一碰到的 risk-sensitive 點是git push,而本修正只在 push 之前多一條 skip 路徑,不新增或改變任何 push。Hard-gate: not triggered — 概念改動只在
skills/idd-issue/SKILL.md(Step 3.A + 3.6)與scripts/tests/auto-tag/test.sh兩檔(版號/CHANGELOG 屬 release 記錄,不是同一概念);Step 3.6 的 tag 片段沒有被其他檔案引用(idd-verify/SKILL.md:1385-1399是另一份獨立的 tag 程式碼,用的是已知 issue 清單的$N)。Risks
/idd-allfrom-scratch 的 Phase 1 會收到失敗而不是一個空號碼;這是正確方向,但要確認 idd-all 對 idd-issue 失敗的訊息是可讀的(skills/idd-all/SKILL.md:400只寫「從 args 或 idd-issue 結果取得」)。PRIMARY_NUM,從不設定$NUMBER)與 bundle 模式有各自的取號程式碼,guard 會讓它們的 baseline tag 一律 skip(安全方向,但等於這兩個模式沒有 baseline tag)。bundle 的取號問題已在 [bug] idd-issue --bundle-mode:Epic 編號用 | basename 取不到、--label epic 未檢查存在 (sister concern from #353) #356 追蹤;group 模式另列 sister。NUMBER=""。Residue
(none)
Sister Concerns Filed (mid-diagnose, v2.47.0+ #528)
Source: surfaced during /idd-diagnose #412 sister concern surfacing (Step 3.6)
Vagueness Pre-check
SKILL.md約第 1042 行)並附上要加的caseguard 原文;第二項「Step 3.A 在URL為空時停止」沒有給出寫法,但要做什麼很明確。Generated by Claude Code
fix: idd-issue stops when the issue was not created, and never tags i…
docs: CHANGELOG Unreleased entries for the cluster (#411, #412, #413)
kiki830621 commentedon Oct 26, 2026
Implementation Complete
Branch
idd/cluster-411-412-413(cluster with #411, #413; one PR)Checklist (synced from TaskList)
scripts/tests/baseline-tag-guard/從 SKILL.md 抽出 Step 3.6 與 Step 3.A 實際執行(stub gh-egress/gh、暫存 repo + bare remote),''/abc/整條 URL/042/4 2不打 tag、42打出idd-42-baseline;positive control 拿掉 guard 必須打出idd--baseline→ commit 79b8b68(實作前 18 項 RED)NUMBER/NEW_ISSUE_NUMBER,擷取 URL 與 exit code,驗證結尾是 issue 號,不合格就印原因並停止(不跑 Step 3.5 之後);設定 Step 4.6 讀的NEW_ISSUE_NUMBER→ commit 79b8b68$NUMBER之後」改為「拿到 Step 3.A 驗證過的$NUMBER之後」→ commit 79b8b68[Unreleased]Fixed 條目 → commit 9e3efd3;auto-tagdrift-guard 的 needle 仍然成立(27/27),行為改由新 suite 鎖定Changes
Files Changed
Scope Compliance
只動 Step 3.A 與 Step 3.6。group mode(Step 3.G)的取號問題在 #438、label 未檢查在 #439,不在本次範圍。
Next: verification pending
Generated by Claude Code
fix: verify round 1 for the cluster — body read in the splice, fences…
fix: verify round 1 follow-ups for the cluster (#411, #412, #413)
kiki830621 commentedon Oct 26, 2026
Verify: #412 → see cluster report
Aggregate: PASS(cluster
idd/cluster-411-412-413,與 #411、#412、#413 共用一份報告)完整報告(含本 issue 的分段、findings 與處理):#411 (comment)
Engine: Claude-only(cloud session,Codex leg not run)。
Generated by Claude Code