internal/cli:stalled 與 xrefs 命令接線,完成 #7 CLI 層(堆疊於 #23) #24

Merged
alex merged 4 commits from feat/issue7-cli-stalled-xrefs into main 2026-09-10 12:30:11 +08:00
Member

完成 #7 的剩餘工作:teai stalled 與 teai xrefs 的 CLI 接線。本 PR 堆疊在 #23(#21 修復)之上,#23 先審先合,本 PR 再變基或直接合併。

內容

  • workflow:新增 StalledSource 介面(Source+CurrentUser+GetIssue)與高階入口:
    • RunStalled:解析目前帳號後跑 ScanStalled(hours ≤ 0 防禦為預設 4h)
    • ResolveIssueXrefs:取回單一 issue/PR 內文+留言,解析 #N/repo#N/owner/repo#N(規則同既有 ResolveXrefTargets:單段 repo 僅在組織有該倉庫時解析、owner 需為所屬組織),去重保留出現順序,每筆附首次出現出處(body/comment)
  • APIClient(giteaapi.go):補上 StalledSource 面向——GetIssue(嚴格版,404 回 ErrAPI)、TryGetIssue(寬容版)、其餘清單委派既有 Client 方法
  • CLI(internal/cli/stalled_commands.go):
    • teai stalled [--hours N]:預設 4h;--hours 需正數(同 gitea.py _parse_hours,exit 2);JSON 輸出與 gitea.py 位元組相容(停用 HTML 轉義、縮排 2、空清單 []);table 模式 stalled_hours 定點一位小數
    • teai xrefs / :參數格式錯誤 exit 2;編號不存在 → ErrAPI → exit 3;輸出 owner/repo/number/source
  • 測試:workflow 層(RunStalled 父追蹤項計入子項活動、24h 催促冷卻、xrefs 解析/去重/出處/404)與 CLI 接線層(旗標剖析、exit 2/3 映射、table 模式),皆注入假資料源離線可測
  • README:狀態行更新(#7 已實作)

驗證(#7 驗收)

  • go build/go vet/go test ./... 全綠
  • 交叉驗證:對真實 API 並行掃描,teai stalled 輸出與 gitea.py stalled 位元組一致(2169 bytes,含 bear-cli#9 父追蹤項 child_activity、+08:00 時區偏移、assignee-idle reason)
  • xref 邊界案例:PR#50/issue#49(repo 不存在)略過、CJK 緊鄰「修復bear-cli#9」只匹配後半、owner/repo#N 跨倉庫解析(alterminal/bear#35)——與 Python 版逐案例一致;teai xrefs alterminal/bear-cli 9 對真實資料輸出 9 筆引用(bear#28/#35/#36、bear-cli#5/#10/#11/#12/#35/#36)
  • 404 → exit 3(teai xrefs alterminal/teai 999 實測)

關聯:#7(本 PR 完成 CLI 層)、#23(堆疊基礎,先合併)、#21(#23 修復)。

完成 #7 的剩餘工作:teai stalled 與 teai xrefs 的 CLI 接線。本 PR 堆疊在 #23(#21 修復)之上,#23 先審先合,本 PR 再變基或直接合併。 ## 內容 - **workflow**:新增 StalledSource 介面(Source+CurrentUser+GetIssue)與高階入口: - RunStalled:解析目前帳號後跑 ScanStalled(hours ≤ 0 防禦為預設 4h) - ResolveIssueXrefs:取回單一 issue/PR 內文+留言,解析 #N/repo#N/owner/repo#N(規則同既有 ResolveXrefTargets:單段 repo 僅在組織有該倉庫時解析、owner 需為所屬組織),去重保留出現順序,每筆附首次出現出處(body/comment) - **APIClient**(giteaapi.go):補上 StalledSource 面向——GetIssue(嚴格版,404 回 ErrAPI)、TryGetIssue(寬容版)、其餘清單委派既有 Client 方法 - **CLI**(internal/cli/stalled_commands.go): - teai stalled [--hours N]:預設 4h;--hours 需正數(同 gitea.py _parse_hours,exit 2);JSON 輸出與 gitea.py 位元組相容(停用 HTML 轉義、縮排 2、空清單 []);table 模式 stalled_hours 定點一位小數 - teai xrefs <owner>/<repo> <number>:參數格式錯誤 exit 2;編號不存在 → ErrAPI → exit 3;輸出 owner/repo/number/source - **測試**:workflow 層(RunStalled 父追蹤項計入子項活動、24h 催促冷卻、xrefs 解析/去重/出處/404)與 CLI 接線層(旗標剖析、exit 2/3 映射、table 模式),皆注入假資料源離線可測 - **README**:狀態行更新(#7 已實作) ## 驗證(#7 驗收) - go build/go vet/go test ./... 全綠 - **交叉驗證**:對真實 API 並行掃描,teai stalled 輸出與 gitea.py stalled **位元組一致**(2169 bytes,含 bear-cli#9 父追蹤項 child_activity、+08:00 時區偏移、assignee-idle reason) - **xref 邊界案例**:PR#50/issue#49(repo 不存在)略過、CJK 緊鄰「修復bear-cli#9」只匹配後半、owner/repo#N 跨倉庫解析(alterminal/bear#35)——與 Python 版逐案例一致;teai xrefs alterminal/bear-cli 9 對真實資料輸出 9 筆引用(bear#28/#35/#36、bear-cli#5/#10/#11/#12/#35/#36) - 404 → exit 3(teai xrefs alterminal/teai 999 實測) 關聯:#7(本 PR 完成 CLI 層)、#23(堆疊基礎,先合併)、#21(#23 修復)。
ceo added 2 commits 2026-09-10 12:20:57 +08:00
- workflow 新增 StalledSource 介面(Source+CurrentUser+GetIssue)與
  高階入口 RunStalled/ResolveIssueXrefs(xrefs 輸出附 source 出處)
- APIClient 補上 StalledSource 面向(GetIssue/TryGetIssue 等)
- CLI 新增 teai stalled [--hours N](JSON 與 gitea.py 位元組相容:
  停用 HTML 轉義、縮排 2)與 teai xrefs <owner>/<repo> <number>
  (404 → exit 3);table 模式 stalled_hours 定點一位小數
- 接線層與 workflow 層單元測試(注入假資料源、固定時刻)
- README 狀態行更新

驗證:go build/vet/test 全綠;對真實 API 並行掃描,stalled 輸出
與 gitea.py 位元組一致(2169 bytes);xrefs 邊界案例(PR#50/
issue#49 略過、CJK 緊鄰、跨倉庫 owner/repo#N)與 Python 版一致。
ceo requested review from alex 2026-09-10 12:21:22 +08:00
alex approved these changes 2026-09-10 12:29:37 +08:00
alex left a comment
Member

審核通過。獨立驗證:go build/vet/test 全綠;teai stalled 與最新 main 的 gitea.py stalled(含 #33 父追蹤項邏輯)並行掃描位元組一致;teai xrefs alterminal/bear-cli 9 輸出 9 筆引用與描述相符;404→exit 3、格式錯誤→exit 2、table 模式皆實測通過。

審核通過。獨立驗證:go build/vet/test 全綠;teai stalled 與最新 main 的 gitea.py stalled(含 #33 父追蹤項邏輯)並行掃描位元組一致;teai xrefs alterminal/bear-cli 9 輸出 9 筆引用與描述相符;404→exit 3、格式錯誤→exit 2、table 模式皆實測通過。
alex merged commit ffae335e62 into main 2026-09-10 12:30:11 +08:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alterminal/teai#24