Merge pull request 'feat(code-review-nuget): 補上逐版升級回退策略' (#15) from develop into master

Reviewed-on: #15
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
This commit was merged in pull request #15.
This commit is contained in:
2026-06-22 03:03:06 +00:00
5 changed files with 11 additions and 10 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "jsc", "name": "jsc",
"version": "0.1.2", "version": "0.1.3",
"description": "JSC 程式碼審查 pluginClaude Code / Codex / Antigravity / OpenCode),提供 RPG 攻防式 git diff review、裁決結果歸檔、Gitea AI review findings 修復/PR 流程,以及 C# / .NET NuGet 套件更新流程;於 Claude Code 以 /jsc: 前綴呼叫。", "description": "JSC 程式碼審查 pluginClaude Code / Codex / Antigravity / OpenCode),提供 RPG 攻防式 git diff review、裁決結果歸檔、Gitea AI review findings 修復/PR 流程,以及 C# / .NET NuGet 套件更新流程;於 Claude Code 以 /jsc: 前綴呼叫。",
"skills": "./skills", "skills": "./skills",
"author": { "author": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "jsc", "name": "jsc",
"version": "0.1.2", "version": "0.1.3",
"description": "JSC 程式碼審查 plugin,提供 RPG 攻防式 git diff review、裁決結果歸檔、Gitea AI review findings 修復/PR 流程,以及 C# / .NET NuGet 套件更新流程。", "description": "JSC 程式碼審查 plugin,提供 RPG 攻防式 git diff review、裁決結果歸檔、Gitea AI review findings 修復/PR 流程,以及 C# / .NET NuGet 套件更新流程。",
"skills": "./skills" "skills": "./skills"
} }
+1 -1
View File
@@ -199,7 +199,7 @@ rm -rf ~/.config/opencode/skills/code-review
### `code-review-nuget` ### `code-review-nuget`
將 C# / .NET 專案的 NuGet 套件更新到最新可用版本。流程會先探測 `.sln` / `.slnx` / `.csproj``dotnet` 工具,執行 baseline `restore` / `build`,再**依專案分組列出所有 direct / transitive 套件**與目前版本、最新版本、參考來源。接著建立 `ProjectReference` graph:若當前專案所參考的上層專案已 direct reference 相同 NuGet 套件,且該套件會透過專案參考安全傳遞,便逐一移除重複 `PackageReference`;每移除一筆都立刻 `restore` / `build` 驗證,失敗即回復。最後逐一更新 direct 套件版本(支援 Central Package Management / `Directory.Packages.props`),**每更新一個套件就 restore/build 確認專案可正常編譯**;失敗的套件會回復並記錄原因,不會保留破壞 build 的更新 將 C# / .NET 專案的 NuGet 套件更新到最新可用版本。流程會先探測 `.sln` / `.slnx` / `.csproj``dotnet` 工具,執行 baseline `restore` / `build`,再**依專案分組列出所有 direct / transitive 套件**與目前版本、最新版本、參考來源。接著建立 `ProjectReference` graph:若當前專案所參考的上層專案已 direct reference 相同 NuGet 套件,且該套件會透過專案參考安全傳遞,便逐一移除重複 `PackageReference`;每移除一筆都立刻 `restore` / `build` 驗證,失敗即回復。最後逐一更新 direct 套件版本(支援 Central Package Management / `Directory.Packages.props`),**每更新一個套件就 restore/build 確認專案可正常編譯**;若最新版本編譯失敗,改從目前版本之後的最小可用版本逐版升級,直到遇到第一個編譯失敗版本,保留最後一個可編譯版本並記錄失敗點
參數:`[<solution-or-project>] [--include-prerelease] [--no-dedupe] [--build <command>] [--yes]`(目標可為 `.sln``.slnx``.csproj``--include-prerelease` 允許 prerelease`--no-dedupe` 略過重複參考清理;`--build` 覆寫驗證指令;`--yes` 略過一般確認但不略過必要決策)。 參數:`[<solution-or-project>] [--include-prerelease] [--no-dedupe] [--build <command>] [--yes]`(目標可為 `.sln``.slnx``.csproj``--include-prerelease` 允許 prerelease`--no-dedupe` 略過重複參考清理;`--build` 覆寫驗證指令;`--yes` 略過一般確認但不略過必要決策)。
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "jsc", "name": "jsc",
"version": "0.1.2", "version": "0.1.3",
"description": "JSC 程式碼審查 plugin,提供 RPG 攻防式 git diff review、裁決結果歸檔、Gitea AI review findings 修復/PR 流程,以及 C# / .NET NuGet 套件更新流程;於 Antigravity 以 /jsc: 前綴呼叫。", "description": "JSC 程式碼審查 plugin,提供 RPG 攻防式 git diff review、裁決結果歸檔、Gitea AI review findings 修復/PR 流程,以及 C# / .NET NuGet 套件更新流程;於 Antigravity 以 /jsc: 前綴呼叫。",
"skills": "./skills/" "skills": "./skills/"
} }
+7 -6
View File
@@ -1,18 +1,18 @@
--- ---
name: code-review-nuget name: code-review-nuget
description: 將 C# / .NET 專案的 NuGet 套件更新到最新可用版本。當使用者要求更新 NuGet、升級 PackageReference、清理重複套件參考、檢查專案參考中的重複 NuGet、或逐包更新並確認 build 時觸發。流程會依專案分組列出套件,檢查 ProjectReference 上層專案是否已引用相同套件並移除可安全移除的重複參考,接著逐一更新套件版本;每更新或移除一個套件都必須 restore/build 驗證。不適用於:非 .NET 專案、只想查詢套件清單不更新、或只要人工建議不修改檔案。 description: 將 C# / .NET 專案的 NuGet 套件更新到最新可用版本。當使用者要求更新 NuGet、升級 PackageReference、清理重複套件參考、檢查專案參考中的重複 NuGet、或逐包更新並確認 build 時觸發。流程會依專案分組列出套件,檢查 ProjectReference 上層專案是否已引用相同套件並移除可安全移除的重複參考,接著逐一更新套件版本;每更新或移除一個套件都必須 restore/build 驗證。若更新到最新版本後編譯失敗,改由目前版本之後的最小可用版本逐版升級,直到遇到第一個編譯失敗版本,保留最後一個可編譯版本。不適用於:非 .NET 專案、只想查詢套件清單不更新、或只要人工建議不修改檔案。
argument-hint: "[<solution-or-project>] [--include-prerelease] [--no-dedupe] [--build <command>] [--yes]" argument-hint: "[<solution-or-project>] [--include-prerelease] [--no-dedupe] [--build <command>] [--yes]"
--- ---
# code-review-nuget — 更新 C# 專案 NuGet 套件 # code-review-nuget — 更新 C# 專案 NuGet 套件
把 C# / .NET repo 內的 NuGet 套件依專案盤點、清理可安全移除的重複參考,然後逐一更新到最新可用版本。每個套件異動後都要驗證專案可以正常編譯;若失敗,回復該套件異動並記錄原因,繼續處理下一個可獨立處理的套件 把 C# / .NET repo 內的 NuGet 套件依專案盤點、清理可安全移除的重複參考,然後逐一更新到最新可用版本。每個套件異動後都要驗證專案可以正常編譯;若最新版本失敗,改從目前版本之後的最小可用版本逐版升級,直到第一個編譯失敗版本為止,保留最後一個可編譯版本並記錄失敗點
## 輸出規範 ## 輸出規範
- 所有面向使用者的輸出一律使用繁體中文(台灣用語);套件 id、檔名、指令、版本號保留原文。 - 所有面向使用者的輸出一律使用繁體中文(台灣用語);套件 id、檔名、指令、版本號保留原文。
- 修改前先輸出簡短執行計畫;除非使用者要求確認、遇到多個 solution 無法判斷、或編譯失敗需要取捨,否則依計畫執行。 - 修改前先輸出簡短執行計畫;除非使用者要求確認、遇到多個 solution 無法判斷、或編譯失敗需要取捨,否則依計畫執行。
- 每個套件都要留下結果:已更新 / 已略過 / 已回復 / 已移除重複參考,以及對應版本與驗證指令。 - 每個套件都要留下結果:已更新 / 已降階到可編譯版本 / 已略過 / 已回復 / 已移除重複參考,以及對應版本與驗證指令。
- 不主動 commit、push 或開 PR;使用者明確要求時才做。 - 不主動 commit、push 或開 PR;使用者明確要求時才做。
## 參數 ## 參數
@@ -117,7 +117,8 @@ argument-hint: "[<solution-or-project>] [--include-prerelease] [--no-dedupe] [--
若使用者提供 `--build <command>`,以該命令取代 build 步驟,但 restore 仍需執行。 若使用者提供 `--build <command>`,以該命令取代 build 步驟,但 restore 仍需執行。
4. 驗證結果: 4. 驗證結果:
- 成功:記錄 `PackageId oldVersion -> newVersion`,保留變更。 - 成功:記錄 `PackageId oldVersion -> newVersion`,保留變更。
- 失敗:回復該套件異動與 lock file 變更,重新 restore/build 確認回復後可編譯;記錄為「已回復」並摘要錯誤 - 最新版本失敗:回復最新版本異動與 lock file 變更,確認回到可編譯狀態;接著查詢該套件「目前版本之後、最新版本之前或等於最新版本」的所有可用版本,由最低版本開始逐一升級並每版 restore/build。遇到成功就暫時保留並繼續下一版;遇到第一個失敗版本就停止此套件升級、回復到上一個成功版本,記錄為「已降階到可編譯版本」。如果第一個候選版本就失敗,回復到原版本並記錄為「已回復」。
- 查詢可用版本時優先使用目前專案既有 feed 設定(`nuget.config`);可用 `dotnet package search`、`nuget list`、NuGet v3 API 或專案環境可用的等價工具。不得改用未設定的公開 feed 造成私有套件版本判斷錯誤。
- 因相依套件版本衝突導致失敗:可嘗試更新同一 dependency chain 中的必要 direct 套件,但仍必須一次一包、每包驗證。 - 因相依套件版本衝突導致失敗:可嘗試更新同一 dependency chain 中的必要 direct 套件,但仍必須一次一包、每包驗證。
### 5. 特殊檔案與版本管理 ### 5. 特殊檔案與版本管理
@@ -137,11 +138,11 @@ argument-hint: "[<solution-or-project>] [--include-prerelease] [--no-dedupe] [--
至少包含: 至少包含:
- 重複 PackageReference:移除幾筆、回復幾筆、需人工確認幾筆。 - 重複 PackageReference:移除幾筆、回復幾筆、需人工確認幾筆。
- NuGet 更新:成功幾筆、已是最新幾筆、回復幾筆、略過幾筆。 - NuGet 更新:成功幾筆、已是最新幾筆、降階到可編譯版本幾筆、回復幾筆、略過幾筆。
- 最後一次成功驗證的指令。 - 最後一次成功驗證的指令。
- 尚待人工處理的套件與原因。 - 尚待人工處理的套件與原因。
若所有變更後最終 build 成功,明確寫「最終編譯驗證成功」。若有套件因失敗被回復,說明目前工作區保留的是已通過 build 的變更集合。 若所有變更後最終 build 成功,明確寫「最終編譯驗證成功」。若有套件因最新版本失敗而降階或回復,說明目前工作區保留的是已通過 build 的變更集合,並列出失敗版本與最後成功版本
## 呼叫方式 ## 呼叫方式