skills/integration-verify/SKILL.md
開發完成後的整合驗證入口。當使用者要求在功能開發完成後自行驗證、做整合測試,或說「幫我驗證」「驗證一下功能」但未指定驗證方式時使用。判斷專案類型後先執行既有單元測試,再路由到對應的煙霧驗證流程。
npx skillsauth add CloudyWing/ai-dotfiles integration-verifyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
此 Skill 是「開發完成後讓 AI 自行整合驗證」的總入口。它負責判斷專案類型、判定執行環境、與使用者確認驗證範圍、執行既有單元測試,再依類型路由到對應的煙霧驗證流程。它本身不直接執行瀏覽器或 API 操作,實際驗證由分支 skill 或本檔的對應小節承擔。
此 Skill 不是完整 E2E 測試框架,不負責新增可重跑的測試案例。若使用者要求建立正式測試,改依專案既有測試架構處理。
驗證的預設姿態是積極推進,不是消極保守。
這條基準凌駕於本檔所有後續步驟與規範之上。當後續條文出現「可」、「視情況」、「必要時」這類有解釋空間的措辭時,依本基準解讀為「主動推進、主動確認」,不是「省事略過」。
具體拆解:
下列省事路徑反例一律禁止,發現自己正要走其中一條時立即停止並回到對應步驟:
符合任一條件時套用:
以下情境不套用:
browser-smoke、「測 API」直接觸發 api-smoke)。各分支煙霧驗證共用的指導原則。驗證的標的是操作的「結果」,不是操作本身:觸發了動作、收到 2xx 回應、畫面沒有報錯,都不等於功能正確。
各分支 skill 依此原則,在自身驗證流程中落實對應的具體做法。
此規範與 §行為基準、§結果驗證原則 並列為貫穿全流程的行為原則,適用於步驟四單元測試、步驟五煙霧驗證、步驟六寫入回查等所有階段。
執行驗證過程中,依操作風險決定是否需向使用者出聲確認:
取捨原則:短詢問成本 ≪ 漏測成本。多花一句話確認,遠比讓未驗證的程式進到下游便宜。
掃描 <work-root> 的專案結構,判斷屬於下列哪一類。同一 repo 可能含多個類型,逐一處理本次變更涉及的部分。
| 類型 | 判斷依據 |
| --- | --- |
| Web UI | package.json 含前端框架(Vue / React 等)並有 dev server;或 ASP.NET Core 專案含 SPA / Views。 |
| Web API | ASP.NET Core 專案 SDK 為 Microsoft.NET.Sdk.Web,含 Controller 或 Minimal API,無前端畫面;或專案提供 Swagger / OpenAPI。 |
| 桌面應用 | *.csproj 的 OutputType 為 WinExe,且 UseWindowsForms 或 UseWPF 為 true。 |
| CLI / 主控台 | *.csproj 的 OutputType 為 Exe 且非 GUI(無 UseWindowsForms / UseWPF);或 package.json 有 bin 指向可執行 CLI,無前端畫面。 |
| 套件 (Library) | *.csproj 的 OutputType 為 Library 並產生 NuGet 套件;或 package.json 為發佈用 npm 套件,無 app 進入點。 |
若無法判斷類型,回報無法判定並請使用者指明。
驗證只能對本機環境執行。判定方式不得僅憑單一線索,必須列出至少 3 種判定依據才能下結論。
若本次驗證標的不連任何外部服務(純本機執行的桌面應用、CLI 或套件,無資料庫、API、佇列等外部依賴),環境天然為本機,記一句說明即可,不需湊滿 3 種依據。
判定依據(從下列項目蒐集,至少湊滿 3 種):
localhost、127.0.0.1、::1、host.docker.internal、私網 IP。5000、5001、5173、3000、8080)。test、staging、prod、production、客戶名稱、機房代號。.env.example、appsettings.Development.json、docker-compose.yml 等明確標示為本機用途的範本。*.local、*.test、*.lan,或反之為對外正式網域。dev 關鍵字的歧義處理:dev 單獨出現不足以判斷環境屬性,須配合 hostname 判讀。localhost、127.0.0.1、host.docker.internal 搭配 dev 視為本機 dev mode;具體網域如 dev.example.com、dev-internal.lan 搭配 dev 視為團隊共用 dev 環境,依下方分流歸入外部分類。
中介服務的雙層判定:透過中介服務(如本機 MCP server、代理層)操作下游時,環境判定以真實寫入或讀取的下游目標為準,不以 AI 直接連線的中介為準。例:AI 連 127.0.0.1:9800(本機 MCP server)查資料庫,但 MCP server 內部連線到 prod-db.customer.com,環境屬「外部正式」,不是「本機」。
依據蒐集後分流,不允許「不確定」作為最終結論:
appsettings.Development.json、NODE_ENV=development)。記下依據後直接進入步驟三。dev):屬外部環境,停止並向使用者回報判定依據,等待使用者裁決。判定結果(採用了哪些依據、結論為何)必須記入 §整合驗證報告 的「執行環境」欄位。
執行驗證前,先用一段話向使用者說明本次驗證的範圍,內容包含:
下列情況下,必須等待使用者確認後才繼續:
若驗證為唯讀、範圍明確且環境判定為本機,可在說明範圍後直接繼續,不需停下等待。
煙霧驗證前先跑單元測試,先確認最底層的單元邏輯沒問題,再往上做整合層面的驗證。
dotnet test、npm test、npm run test:unit。X、Y,使用 Testcontainers 啟動暫存資料庫),預估耗時約 M 秒,會在暫存環境內寫入測試資料且結束後自動清理。是否執行?」使用者同意則執行;使用者明確拒絕才略過,略過時於報告標示「整合測試:已略過(使用者指示)」,不得讓略過的測試顯示為通過。*.IntegrationTests)、或測試框架的分類標記(如 NUnit [Category("Integration")],以 dotnet test --filter "Category!=Integration" 過濾)。專案若以環境變數控制,沿用既有做法,不主動改寫測試碼。整合測試與寫入相關操作的詢問時機依 §主動詢問規範 處理。
| 類型 | 處理方式 |
| --- | --- |
| Web UI | 必須使用 Skill 工具呼叫 browser-smoke,由其完成瀏覽器煙霧驗證。 |
| Web API | 必須使用 Skill 工具呼叫 api-smoke,由其完成 API 煙霧驗證。 |
| 桌面應用 | 必須使用 Skill 工具呼叫 desktop-smoke,由其完成桌面應用煙霧驗證。 |
| CLI / 主控台 | 依本檔「CLI 驗證」小節處理。 |
| 套件 (Library) | 依本檔「套件驗證」小節處理。 |
套件沒有可操作的畫面,驗證以單元測試與最小消費端為主:
dotnet pack 或 npm pack 並確認成功。主控台程式以實際執行與輸出比對為主:
dotnet run -- <參數>、node <bin> <參數>),對本次修改相關的子命令或參數,至少涵蓋正常、邊界與錯誤輸入三種情境。本步驟為強制執行 gate,不是建議。任何寫入動作(資料庫、佇列、檔案、外部服務)完成後,下一步必須是回查資料來源;未回查的寫入不得在報告中標記為通過。
執行順序:
常見回查方式:
無法回查時的處理:
本節由 sibling skill 以指向方式套用,是共用規範之一。本檔的套件分支直接依本節執行;browser-smoke、api-smoke、desktop-smoke 透過指向句套用本節通則,再各自延伸領域專屬的停止回報項。
發現問題時先判斷關聯性:
修正前必須先講出明確假設:「問題在 X,因為 Y,所以改 Z」。講不出假設、只是換個地方碰運氣時,立刻停止並回報,不消耗修正次數硬試。
修正次數上限針對同一個問題計算:
本段與「結果驗證原則」為驗證流程的共用規範,以本檔為單一來源。
api-smoke、browser-smoke、desktop-smoke以指向方式套用,不另存副本。
涉及資料庫或外部副作用時必須遵守:
驗證結束後(成功或中止皆適用):
browser-smoke、api-smoke、desktop-smoke 各自的收尾清理處理。彙整單元測試與煙霧驗證結果後,用精簡格式回報:
整合驗證:
- 專案類型:
- 執行環境:(本機;列出採用的判定依據與子情境,如本機 lab、本機 dev mode)
- 驗證範圍:
- 單元測試:通過 / 失敗 / 無(整合測試:通過 / 失敗 / 已略過(使用者指示)/ 無)
- 煙霧驗證:(瀏覽器 / API / 桌面應用 / 套件,及結果摘要)
- 寫入回查:(每個寫入動作的回查結果;無寫入時填「無寫入」)
- 修正迴圈:
- 未解決項目:
若沒有問題,未解決項目 可省略。若某環節無法執行,必須說明缺少的工具、服務或資料條件。
驗證全部通過且無未解項目時,只在對話回報,不寫檔。
彙整後仍有下列任一類內容時,將其寫入 <work-root>/.local/ai-sessions/verify-pending.md,供後續或跨 Session 接手:
此檔為當前未完成狀態的快照,採覆寫模式:每次驗證重寫整份內容,不累積歷史。若先前已存在此檔,而本次驗證已全數解決,刪除該檔。
檔案格式:
# 整合驗證未完成項目
更新時間:<YYYY-MM-DD>
專案類型:<類型>
## 未解問題
- <問題描述、已嘗試的修正、目前現象>
## 阻塞條件
- <缺少的工具、服務或資料>
## 需手動驗證
- <操作步驟與預期結果>
無內容的區塊可省略。
tools
產生或補齊 .gitattributes,統一行尾處理、二進位識別與 lock files 標記,保留既有自訂偏好。
development
產生或補齊前端 Lint 設定(Prettier + ESLint Flat Config),統一格式化與程式碼品質規則,保留既有自訂偏好。
testing
依據事實校閱報告修改技術文件:以事實層為不可違反的約束,由改檔者負責表達層的措辭與行文連貫。Use when the user asks to apply fact-check results to a document, or to edit a document based on a previously produced fact-check-report.md.
data-ai
多份資料檔整合流程。當需要將兩份以上的資料檔(如 JSON、CSV)合併、補齊闕漏欄位或去重成單一檔案時使用。以 dry-run、筆數核對與抽樣比對降低整合錯誤。