Problem
IDD .claude/issue-driven-dev.local.json 目前 schema 只記 repo 資訊(github_repo / attachments_release / tracking_upstream / candidates / groups),沒有 collaborator 資訊。每次 /idd-issue 或 /idd-close 需要 @-tag 人時,要動態 gh api repos/.../collaborators 抓 collaborator list,然後做 fuzzy match 推測「email / display name / 通訊 thread 中的 ID」↔ login 的對應。
gh api collaborators 拿到的只有 login(name field 經常 null,要額外 gh api users/<login> 才能拿真名,且 user 可能沒設 public name)。這是 mis-tag 的溫床。
實戰案例(motivation):
PsychQuantHsu/psychophysical_representations#29 comms reply task — email thread CC d11227103@ntu.edu.tw + yfhsu@ntu.edu.tw,但兩位都是 repo collaborator(GitHub login Hardy1Yang + yungfonghsu-ui)。原本 issue 預設走 email reply,直到 user 觀察「Hsu 就是 collaborator,應該 @-tag」才 reframe 為 GitHub @-tag closing comment。問題在於 collaborator login 跟 email/student-ID/display name 的對應完全靠 maintainer 記憶,AI session 沒有 stable handle 可查,容易 mis-tag(尤其多 collaborator repo 的 NTU 學生 ID d06227105 / d11227103 這種 opaque identifier)。
Proposed solution
擴充 idd-config schema 加 collaborators array(optional):
```json
{
"github_repo": "PsychQuantHsu/psychophysical_representations",
"collaborators": [
{
"github_login": "yungfonghsu-ui",
"display_name": "徐永豐 (Yung-Fong Hsu)",
"email": "yfhsu@ntu.edu.tw",
"role": "advisor",
"aliases": ["yfhsu", "Hsu", "Hsu 老師"]
},
{
"github_login": "Hardy1Yang",
"display_name": "Hardy Yang",
"email": "d11227103@ntu.edu.tw",
"role": "collaborator",
"aliases": ["d11227103", "Hardy", "Yang"]
},
{
"github_login": "kiki830621",
"display_name": "Che Cheng",
"email": "kiki830621@gmail.com",
"role": "maintainer",
"aliases": ["d06227105"]
}
]
}
```
Schema fields
| Field |
Type |
Required |
Description |
github_login |
string |
yes |
Canonical handle, use for @-tag |
display_name |
string |
yes |
Real name (with 中文 supported), for closing summary author lines |
email |
string |
optional |
Map to email thread participant |
role |
enum |
optional |
maintainer / collaborator / advisor / external — for routing decisions |
aliases |
array |
optional |
Other identifiers (student IDs, nicknames, common references in conversation) — used for fuzzy match resolution |
Integration touches
/idd-issue --mention <token> + tagging-collaborators.md 5-step protocol — Step 3 fuzzy match 改為先 look up collaborators[].aliases + email + display_name,命中後 resolve 到 github_login,完全 bypass gh api users/<login> query。Step 5 post-verify 依然跑(看 commit body 是否真的有 @<login>)。
/idd-close Step 4 — 自動建議在 closing summary @-tag 相關 collaborator(based on whose role applies to the issue),避免 email-only fallback。
/idd-list — 顯示 issue assignee / 最近 commenter 時可以 display 真名 + 中文,而不是只 login。
/idd-diagnose / /idd-implement — diagnose 內可以引用 advisor 視角(「Hsu 老師建議...」)時 explicit 對應 @yungfonghsu-ui,不依賴 hardcoded reference。
Privacy / security 考量
.claude/issue-driven-dev.local.json 是 per-project file(not global),且通常 commit 進 git → 公開 repo 不該放 email
- 解法 1:對 public repo,collaborators array 可選(maintainer 自己 opt-in)
- 解法 2:把 collaborators 放
.claude/issue-driven-dev.private.json(gitignored)+ public version 不含 email
- 解法 3:
email 改 optional,只記 github_login + display_name + aliases(email 用 fuzzy match resolve 到 thread context,不 hardcode)
建議走解法 2 + 3 結合 — public config 只放 non-PII 欄位,private config 加 email。
Tradeoffs
| Pro |
Con |
| Eliminate mis-tag risk(stable mapping,不靠 fuzzy) |
Schema 變複雜,maintainer 要 manually fill |
| Per-project context(NTU 學生 ID 等 opaque identifier 可 resolve) |
Privacy concern(public repo PII) |
@-tag 不再依賴 gh api collaborators 動態 lookup(speed + offline-friendly) |
Stale config(collaborator 離開 / 換 GitHub handle 時要 update) |
| Closing comment / diagnose 引用更精準 |
First-time setup overhead |
Discussion seeds
idd-config init 是否要 auto-discover via gh api collaborators + fuzzy match local git config?(快速 bootstrap,user 再 review)
aliases 是否需 unique 跨 collaborator?(避免 ambiguous fuzzy match)
role 是否需要更 fine-grained(例:student / advisor / co-author / external-collaborator)?
email 在 private file 後,git ignore 機制是 plugin 端管還是 user 端管?
Refs
Problem
IDD
.claude/issue-driven-dev.local.json目前 schema 只記 repo 資訊(github_repo/attachments_release/tracking_upstream/candidates/groups),沒有 collaborator 資訊。每次/idd-issue或/idd-close需要 @-tag 人時,要動態gh api repos/.../collaborators抓 collaborator list,然後做 fuzzy match 推測「email / display name / 通訊 thread 中的 ID」↔login的對應。gh api collaborators拿到的只有login(namefield 經常 null,要額外gh api users/<login>才能拿真名,且 user 可能沒設 public name)。這是 mis-tag 的溫床。實戰案例(motivation):
PsychQuantHsu/psychophysical_representations#29comms reply task — email thread CC d11227103@ntu.edu.tw + yfhsu@ntu.edu.tw,但兩位都是 repo collaborator(GitHub loginHardy1Yang+yungfonghsu-ui)。原本 issue 預設走 email reply,直到 user 觀察「Hsu 就是 collaborator,應該 @-tag」才 reframe 為 GitHub @-tag closing comment。問題在於 collaborator login 跟 email/student-ID/display name 的對應完全靠 maintainer 記憶,AI session 沒有 stable handle 可查,容易 mis-tag(尤其多 collaborator repo 的 NTU 學生 IDd06227105/d11227103這種 opaque identifier)。Proposed solution
擴充
idd-configschema 加collaboratorsarray(optional):```json
{
"github_repo": "PsychQuantHsu/psychophysical_representations",
"collaborators": [
{
"github_login": "yungfonghsu-ui",
"display_name": "徐永豐 (Yung-Fong Hsu)",
"email": "yfhsu@ntu.edu.tw",
"role": "advisor",
"aliases": ["yfhsu", "Hsu", "Hsu 老師"]
},
{
"github_login": "Hardy1Yang",
"display_name": "Hardy Yang",
"email": "d11227103@ntu.edu.tw",
"role": "collaborator",
"aliases": ["d11227103", "Hardy", "Yang"]
},
{
"github_login": "kiki830621",
"display_name": "Che Cheng",
"email": "kiki830621@gmail.com",
"role": "maintainer",
"aliases": ["d06227105"]
}
]
}
```
Schema fields
github_login@-tagdisplay_nameemailrolemaintainer/collaborator/advisor/external— for routing decisionsaliasesIntegration touches
/idd-issue --mention <token>+tagging-collaborators.md5-step protocol — Step 3 fuzzy match 改為先 look upcollaborators[].aliases+email+display_name,命中後 resolve 到github_login,完全 bypassgh api users/<login>query。Step 5 post-verify 依然跑(看 commit body 是否真的有@<login>)。/idd-closeStep 4 — 自動建議在 closing summary @-tag 相關 collaborator(based on whose role applies to the issue),避免 email-only fallback。/idd-list— 顯示 issue assignee / 最近 commenter 時可以 display 真名 + 中文,而不是只 login。/idd-diagnose//idd-implement— diagnose 內可以引用 advisor 視角(「Hsu 老師建議...」)時 explicit 對應@yungfonghsu-ui,不依賴 hardcoded reference。Privacy / security 考量
.claude/issue-driven-dev.local.json是 per-project file(not global),且通常 commit 進 git → 公開 repo 不該放 email.claude/issue-driven-dev.private.json(gitignored)+ public version 不含 emailemail改 optional,只記github_login+display_name+aliases(email 用 fuzzy match resolve 到 thread context,不 hardcode)建議走解法 2 + 3 結合 — public config 只放 non-PII 欄位,private config 加 email。
Tradeoffs
@-tag不再依賴gh api collaborators動態 lookup(speed + offline-friendly)Discussion seeds
idd-config init是否要 auto-discover viagh api collaborators+ fuzzy match local git config?(快速 bootstrap,user 再 review)aliases是否需 unique 跨 collaborator?(避免 ambiguous fuzzy match)role是否需要更 fine-grained(例:student/advisor/co-author/external-collaborator)?email在 private file 後,git ignore 機制是 plugin 端管還是 user 端管?Refs
rules/tagging-collaborators.md(目前 5-step protocol,本 issue 提案在 Step 3 加 config-based lookup)