Skip to content

feat: collaborator config in idd-config — record GitHub login, email, name, aliases for tagging accuracy #86

@kiki830621

Description

@kiki830621

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

  1. /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>)。
  2. /idd-close Step 4 — 自動建議在 closing summary @-tag 相關 collaborator(based on whose role applies to the issue),避免 email-only fallback。
  3. /idd-list — 顯示 issue assignee / 最近 commenter 時可以 display 真名 + 中文,而不是只 login。
  4. /idd-diagnose / /idd-implement — diagnose 內可以引用 advisor 視角(「Hsu 老師建議...」)時 explicit 對應 @yungfonghsu-ui,不依賴 hardcoded reference。

Privacy / security 考量

  • .claude/issue-driven-dev.local.jsonper-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

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