fix(diagnostics): 處理 ai review findings #32

Open
jiantw83 wants to merge 85 commits from develop into master
Member

Summary

  • 修正 debug 診斷輸出:先限長再遮罩,並擴充 Email、JWT、private key 等常見 PII/secret 遮罩。
  • 改用 shallow 檔案存在判斷,避免 merge-base 策略額外呼叫 git 查詢 shallow 狀態。
  • 收斂 token 權限說明,移除 README 函式清單的易漂移行號連結。
  • 清空已處理 ai-review findings,並把非本次安全最小改動項目記錄到 exclusions。

Tests

  • npm test
## Summary - 修正 debug 診斷輸出:先限長再遮罩,並擴充 Email、JWT、private key 等常見 PII/secret 遮罩。 - 改用 shallow 檔案存在判斷,避免 merge-base 策略額外呼叫 git 查詢 shallow 狀態。 - 收斂 token 權限說明,移除 README 函式清單的易漂移行號連結。 - 清空已處理 ai-review findings,並把非本次安全最小改動項目記錄到 exclusions。 ## Tests - `npm test`
jiantw83 added 85 commits 2026-07-28 06:03:12 +00:00
docs(doc-funcs): 補齊 action 與 workflow 文件
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Codex) (pull_request) Failing after 28s
CI / TEST (Claude) (pull_request) Failing after 27s
CI / TEST (Antigravity) (pull_request) Failing after 34s
3fe643c003
fix(gitrepo): 補抓淺層 checkout 的 base 歷史
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Codex) (pull_request) Successful in 31s
CI / TEST (Claude) (pull_request) Successful in 30s
CI / TEST (Antigravity) (pull_request) Failing after 33s
c4c23d4531
docs(審查步驟編號): 依新順序重編步驟編號與說明
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Claude) (pull_request) Successful in 27s
CI / TEST (Codex) (pull_request) Successful in 31s
CI / TEST (Antigravity) (pull_request) Failing after 36s
8662e8ca80
chore(ci): 啟用建問題模式
CI / TEST (Codex) (pull_request) Successful in 28s
CI / TEST (Claude) (pull_request) Successful in 28s
CI / TEST (Antigravity) (pull_request) Failing after 33s
node-actions/template: CI / BUILD (pull_request) Successful in 3s
3631bf3592
feat(建問題模式): 無問題時靜默通過,不在 PR 留任何審查留言
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 24s
CI / TEST (Codex) (pull_request) Successful in 27s
CI / TEST (Antigravity) (pull_request) Failing after 33s
94b32737c5
chore(審查記錄): AI 失敗時輸出 exit code 與 stderr/stdout 供診斷
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 28s
CI / TEST (Codex) (pull_request) Successful in 29s
CI / TEST (Antigravity) (pull_request) Failing after 33s
4a68743b66
fix(ci): 傳入各 AI 工具的 OAuth 憑證修正未登入問題
CI / TEST (Claude) (pull_request) Successful in 23s
CI / TEST (Codex) (pull_request) Failing after 3m4s
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Antigravity) (pull_request) Failing after 37s
e37a96433d
解決議題 #7 🔴 嚴重(Assassin/security):agentFailureDetail 原本無遮罩擷取 stderr/stdout 各 500 字寫入 CI log,可能長期外洩 token、PII 或原始碼祕密。

- 預設只輸出 exit code/signal/killed 等不含機密的分類資訊。
- 僅在明確開啟 ACTIONS_STEP_DEBUG=true 時,才附上經新增 redactSecrets 遮罩(Authorization/token/URL 帳密/長金鑰)並去除控制字元的片段。
- 另新增 postOthersToIssue:建問題模式下警告+建議改逐條發到 issue,讓每條問題可個別回覆(feat,配合 index.js)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
解決議題 #7 🟠 警告(Leo/maintainability、Rogue/efficiency):resolveMergeBase 原先無條件連做 --unshallow 與兩次 --deepen,且忽略各次 fetch 成敗、只把首次 merge-base 錯誤設為 cause。

- 改為資料驅動策略清單,每個補抓策略成功後立即重試 merge-base,一成功即回傳,避免多餘遠端往返(--unshallow 成功就不再 deepen)。
- 全部用盡才拋錯,訊息彙整各策略成功/失敗診斷(僅策略名與成敗,不含 git 原始輸出以免洩漏遠端資訊),並以 error.cause 保留首次錯誤。
- 本檔另含既有的 push-token(PAT)推送參數 pushToken(feat),維持原推送降級行為。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
整併議題 #7 的建問題模式流程調整與多項 findings 修復(index.js、gitea.js 交錯同檔,整檔歸此)。

- addIssueDependency:建立追蹤 issue 後讓 PR 相依於該 issue,issue 關閉前無法合併(需 repo 啟用問題相依)。
- 🔵 #10(Rogue/efficiency):標籤改於建立 issue 前先 selectLabels、createIssue 時一次帶入,移除事後 addLabelsToIssue 補掛的多餘 API 往返(addLabelsToIssue 保留為通用工具)。
- 使用者補充:建問題模式警告+建議改逐條發到 issue(postOthersToIssue),每條問題可個別回覆。
- 🔴 #1(Mage/logic)+使用者補充:resolveOldComments 延後到審查成功產生結果、發布問題留言前才執行,並以 currentRunCommentIds 排除本回合新留言,避免前置步驟失敗時舊結果被清卻無新結果。
- 🔵 #9(Bard/style):修正「無保留問題」段落註解與實作(靜默通過、不留言)一致。
- 同步更新相關 JSDoc(含 gitea.js listLabels/createIssue/addLabelsToIssue 使用情境)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
以自動 token(gitea.token/GITHUB_TOKEN)推送的 commit 不會再觸發 CI,導致新 head 缺檢查而卡合併;新增 push-token(PAT)由呼叫端以 secrets 傳入,改以 PAT 身分推送使 PR synchronize 事件再觸發 CI,由步驟 1 快速回報把結果蓋到新 head。留空=退回 token 走 origin 推送。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
解決議題 #7 🔵 建議(Bard/style):focusLabel 與 rolesComment 文件仍標「步驟 5/6」,但角色登場已調整為攻擊方步驟 5、防守方步驟 7;統一改為 5/7 與鄰近模板文件一致。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(ci): 改以 PAT(push-token)推送 findings commit 觸發 CI
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 27s
CI / TEST (Antigravity) (pull_request) Failing after 34s
CI / TEST (Codex) (pull_request) Failing after 2m41s
10d826d1b1
各 job 的 token 改用 gitea.token、並新增 push-token: secrets.TOKEN,讓結果 commit 以 PAT 推送再觸發 CI,避免自動 token 推送不觸發而卡合併。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(ai-review 狀態): 寫回議題 #7 待人工處理問題至 findings
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 33s
CI / TEST (Antigravity) (pull_request) Failing after 37s
CI / TEST (Codex) (pull_request) Failing after 3m38s
b2129e0bc6
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
docs(review): 修正 postSevereToIssue 註解為建問題模式警告/建議逐條留言
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Antigravity) (pull_request) Failing after 33s
CI / TEST (Claude) (pull_request) Successful in 22s
CI / TEST (Codex) (pull_request) Failing after 2m55s
cfbbbe5f6c
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(ai-review 狀態): 記入議題 #8 不採納排除並寫回待人工處理 findings
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Antigravity) (pull_request) Failing after 35s
CI / TEST (Codex) (pull_request) Failing after 2m27s
CI / TEST (Claude) (pull_request) Successful in 16s
4c2b6d4265
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(AI 失敗診斷): CLI 失敗預設輸出經遮罩的 stderr 片段以利除錯
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 23s
CI / TEST (Antigravity) (pull_request) Failing after 40s
CI / TEST (Codex) (pull_request) Failing after 2m39s
71b93a885a
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(AI 失敗診斷): 失敗時預設併印遮罩後 stdout(claude-code 錯誤寫在 stdout)
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Codex) (pull_request) Successful in 2m23s
CI / TEST (Claude) (pull_request) Successful in 17s
CI / TEST (Antigravity) (pull_request) Successful in 54s
491c170d36
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(ci): 三個測試 job 指定各工具最省 model 以降低消耗
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 23s
CI / TEST (Antigravity) (pull_request) Failing after 2m13s
CI / TEST (Codex) (pull_request) Successful in 2m49s
36bf2d8644
Antigravity→gemini-3.5-flash、Codex→gpt-5.5、Claude→claude-haiku-4-5

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(ci): Claude 測試 job 改用 claude-opus-4-8
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 26s
CI / TEST (Antigravity) (pull_request) Failing after 1m24s
CI / TEST (Codex) (pull_request) Successful in 3m33s
321a717f91
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(推送觸發 CI): 合併 push-token 進 token,findings 一律以 token 認證推送觸發 CI
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Claude) (pull_request) Successful in 28s
CI / TEST (Antigravity) (pull_request) Successful in 57s
CI / TEST (Codex) (pull_request) Successful in 3m10s
05178be520
- 移除 push-token input,token 兼作 Gitea API 認證與 findings 推送
- commitAndPushFindings 一律以 token 明確認證推送(不走 origin 自動 token);
  只要 token 為能觸發 CI 的 PAT,結果 commit 即再觸發 PR 的 CI,避免新 head 缺檢查卡合併
- ci.yaml 三個 job 移除 push-token,保留 token: ${{ secrets.TOKEN }}

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(建問題模式): 僅在有嚴重問題時讓 PR 相依於 issue,警告/建議不阻擋合併
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 27s
CI / TEST (Antigravity) (pull_request) Successful in 1m2s
CI / TEST (Codex) (pull_request) Failing after 3m16s
b277ff2f7c
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(結果回報): 審查本輪不直接 exit 1,失敗只由步驟 1 讀結果 commit 訊息回報
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Claude) (pull_request) Successful in 29s
CI / TEST (Antigravity) (pull_request) Successful in 56s
CI / TEST (Codex) (pull_request) Successful in 2m59s
3ef8a30291
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(ai-review 狀態): 寫回議題 #9 待人工處理問題至 findings
node-actions/template: CI / BUILD (pull_request) Successful in 9s
CI / TEST (Claude) (pull_request) Successful in 27s
CI / TEST (Antigravity) (pull_request) Successful in 51s
CI / TEST (Codex) (pull_request) Successful in 3m4s
deb20bb078
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(推送觸發 CI): push 前重置 checkout 的自動 token extraheader,改以 PAT 身分推送
node-actions/template: CI / BUILD (pull_request) Successful in 3s
CI / TEST (Claude) (pull_request) Successful in 32s
CI / TEST (Antigravity) (pull_request) Successful in 52s
CI / TEST (Codex) (pull_request) Successful in 2m38s
b5264141c4
checkout 於 http.<serverUrl>/.extraheader 持久化自動 Actions token;沿用它推送會被
Gitea 視為自動 token 觸發而不再觸發 workflow。改為推送前於同 scope 先空值重置、再注入
PAT 的 Authorization,使 findings 結果 commit 以 PAT 身分推送、觸發 PR synchronize。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore: update ai-review findings [ai-review-bot][failure]
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Failing after 20s
CI / TEST (Codex) (pull_request) Failing after 27s
CI / TEST (Antigravity) (pull_request) Failing after 33s
d354f30c27
原策略 fetch 遠端符號 HEAD,會被伺服器解析為遠端預設分支,
只加深預設分支歷史、補不到目前 checkout 的 PR head,淺層時仍可能算不出 merge-base。
改先 rev-parse 取得 HEAD 的 commit SHA,以該 SHA 加深 PR head 側歷史。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- postComment → queueOrPostComment:涵蓋建問題模式下可能只暫存不立即發布的語義。
- ensureIssueCreated → createIssueAndFlushBufferedComments:明示建立 issue 並清空暫存留言的完整行為。
- review.js agentFailureDetail 的 500 字上限抽為具名常數 AGENT_DIAGNOSTIC_OUTPUT_LIMIT。
純內部命名與可讀性調整,無外部行為變更。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
配合 postComment/ensureIssueCreated 改名,更新 gitea.js 與 templates.js
JSDoc 內對兩個閉包的引用名稱。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(ai-review 狀態): 記錄 issue #10 誤報排除並回寫待人工 findings
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 27s
CI / TEST (Antigravity) (pull_request) Successful in 50s
CI / TEST (Codex) (pull_request) Successful in 3m2s
d8dd5ce92e
- exclusions.json 新增一條誤報(gitrepo.js:276 使用者名稱固定 ai-review-bot,依管理員指示)。
- 新增 findings 檔追蹤 4 條待人工處理問題(步驟編號硬編碼、兩處缺測試、debug 輸出取捨)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore: update ai-review findings [ai-review-bot][failure]
CI / TEST (Antigravity) (pull_request) Failing after 51s
node-actions/template: CI / BUILD (pull_request) Successful in 28s
CI / TEST (Claude) (pull_request) Failing after 31s
CI / TEST (Codex) (pull_request) Failing after 41s
0c29daa014
chore(ai-review findings): 寫回議題 #11–#23 只來自議題的待人工 findings
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 24s
CI / TEST (Antigravity) (pull_request) Successful in 58s
CI / TEST (Codex) (pull_request) Successful in 2m51s
d7cecc8fa8
以 --issue all 處理 13 個建問題模式追蹤議題,逐條對照目前程式碼與 exclusions.json 後:
 已解決 18 條(現行程式碼已修)、🚫 誤報 28 條(已列入 exclusions,不重複新增)、
⏭️ 待人工 44 條(設計/效能/慣例取捨,依主題去重寫回 42 條追蹤)。各議題已留言處理進度並關閉。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore: update ai-review findings [ai-review-bot][failure]
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Codex) (pull_request) Failing after 25s
CI / TEST (Claude) (pull_request) Failing after 25s
CI / TEST (Antigravity) (pull_request) Failing after 32s
05153bba8e
refactor(review): 診斷輸出長度常數提升為模組層級
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Claude) (pull_request) Successful in 32s
CI / TEST (Antigravity) (pull_request) Successful in 49s
CI / TEST (Codex) (pull_request) Successful in 2m22s
5ac73f290e
依議題 #24 Bard 建議,將 agentFailureDetail 內的 INPUT_LIMIT/
AGENT_DIAGNOSTIC_OUTPUT_LIMIT 移至模組頂層,與既有 PER_FILE_DIFF_LIMIT/
TOTAL_DIFF_LIMIT 並列集中管理;值與行為不變。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore: update ai-review findings [ai-review-bot][failure]
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Codex) (pull_request) Failing after 25s
CI / TEST (Claude) (pull_request) Failing after 26s
CI / TEST (Antigravity) (pull_request) Failing after 32s
a8561b4257
chore(ai-review 狀態): 回寫已處理 findings
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Claude) (pull_request) Successful in 28s
CI / TEST (Antigravity) (pull_request) Successful in 52s
CI / TEST (Codex) (pull_request) Successful in 2m58s
e0ae6f886f
chore: update ai-review findings [ai-review-bot][failure]
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Failing after 26s
CI / TEST (Codex) (pull_request) Failing after 32s
CI / TEST (Antigravity) (pull_request) Failing after 46s
24b248884f
chore(ai-review 狀態): 回寫本輪已處理 findings
node-actions/template: CI / BUILD (pull_request) Successful in 3s
CI / TEST (Claude) (pull_request) Successful in 27s
CI / TEST (Antigravity) (pull_request) Successful in 48s
CI / TEST (Codex) (pull_request) Successful in 3m18s
9e7f8a2a0a
chore: update ai-review findings [ai-review-bot][failure]
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Codex) (pull_request) Failing after 24s
CI / TEST (Claude) (pull_request) Failing after 28s
CI / TEST (Antigravity) (pull_request) Failing after 33s
941d763129
chore(ai-review 狀態): 回寫本輪已處理 findings
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Antigravity) (pull_request) Successful in 52s
CI / TEST (Codex) (pull_request) Successful in 2m47s
CI / TEST (Claude) (pull_request) Successful in 26s
d424447d15
chore: update ai-review findings [ai-review-bot][failure]
CI / TEST (Claude) (pull_request) Failing after 22s
CI / TEST (Codex) (pull_request) Failing after 26s
CI / TEST (Antigravity) (pull_request) Failing after 33s
node-actions/template: CI / BUILD (pull_request) Successful in 4s
55da29a86f
chore(ai-review 狀態): 回寫本輪已處理 findings
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 26s
CI / TEST (Antigravity) (pull_request) Successful in 49s
CI / TEST (Codex) (pull_request) Successful in 2m34s
216bc39255
chore: update ai-review findings [ai-review-bot][failure]
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Codex) (pull_request) Failing after 25s
CI / TEST (Claude) (pull_request) Failing after 27s
CI / TEST (Antigravity) (pull_request) Failing after 35s
76617dd9dc
chore(ai-review 狀態): 回寫本輪 findings 與排除事項
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 33s
CI / TEST (Antigravity) (pull_request) Successful in 49s
CI / TEST (Codex) (pull_request) Successful in 3m38s
43ad2b56d2
chore: update ai-review findings [ai-review-bot][failure]
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Codex) (pull_request) Failing after 25s
CI / TEST (Claude) (pull_request) Failing after 26s
CI / TEST (Antigravity) (pull_request) Failing after 32s
b60f50f2b4
chore(ai-review 狀態): 回寫本輪已處理 findings
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Antigravity) (pull_request) Successful in 1m1s
CI / TEST (Codex) (pull_request) Successful in 3m30s
CI / TEST (Claude) (pull_request) Successful in 24s
44c33b6c1e
chore: update ai-review findings [ai-review-bot][success]
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Claude) (pull_request) Successful in 24s
CI / TEST (Codex) (pull_request) Successful in 27s
CI / TEST (Antigravity) (pull_request) Successful in 33s
25f76e6e6e
Reviewed-on: #6
chore(ai-review): 清空已處理 findings 並更新 exclusions
node-actions/template: CI / BUILD (pull_request) Successful in 6s
34aecf6e43
All checks were successful
node-actions/template: CI / BUILD (pull_request) Successful in 6s
Required
Details
This pull request doesn't have enough required approvals yet. 0 of 1 approvals granted from users or teams on the allowlist.
You are not authorized to merge this pull request.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin develop:develop
git checkout develop
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: node-actions/ai-code-review#32