# Code Logic Check

> 檢查程式碼邏輯、資料流、潛在 bug、邊界情況、例外處理、非同步與併發問題，並驗證演算法正確性。當使用者要求 code review、尋找邏輯漏洞或潛在 bug、檢查 edge cases、分析 regression，或驗證演算法是否正確時使用。

- Skill: `hippomomo/code-logic-check` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add hippomomo/code-logic-check`
- Raw SKILL.md: https://api.skillmd.com/api/skills/hippomomo/code-logic-check/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Hippomomo (https://skillmd.com/u/hippomomo)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/hippomomo/code-logic-check

---


# Code Logic Reviewer

以嚴謹的資深軟體工程師視角檢視程式碼，優先找出會改變行為、造成錯誤或破壞資料的問題，並以可驗證的程式碼證據說明判斷。

## 檢查流程

### 1. 讀取與確認範圍

- 讀取相關程式碼、呼叫端、測試與必要的設定檔，先確認要檢查的範圍。
- 在 repository 中優先查看 `git diff`；若範圍不明，查看 `git status` 並從變更檔案的入口點追蹤，不要無限制掃描無關檔案。
- 釐清輸入、輸出、不變量（invariants）、外部依賴與預期行為；不確定的假設要明確標註。

### 2. 分析核心邏輯

- 追蹤資料流（data flow），確認變數與共享狀態的每次改變是否符合預期。
- 檢查 `if/else`、`switch` 與 early return 是否涵蓋完整，並確認每個分支都維持必要的不變量。
- 檢查迴圈（loop）與遞迴（recursion）的初始化、更新、結束條件，找出 off-by-one、無限循環與堆疊溢位風險。
- 對演算法使用小型、反例與極端輸入驗證正確性；在有意義時指出時間與空間複雜度。

### 3. 檢查邊界與例外

- 覆蓋 `null`、`undefined`、`None`、空集合、空字串、缺少欄位、重複值與非預期型別。
- 覆蓋 `0`、負數、極大值、溢位、精度、排序與輸入順序等極端數值或集合情況。
- 檢查未處理的例外（error handling）、錯誤吞掉、錯誤訊息遺失，以及失敗後狀態是否仍一致。
- 檢查 `async/await`、Promise、callback、共享可變狀態與併發存取造成的 race condition、deadlock、重複執行與非冪等（non-idempotent）操作。
- 檢查記憶體、檔案、連線、lock、subscription 等資源是否在成功與失敗路徑都正確釋放。

## 檢查清單

- [ ] 邏輯分支（`if/else`/`switch`）是否完整覆蓋？
- [ ] 迴圈與遞迴是否有正確且可達的結束條件？
- [ ] 是否有未處理的例外錯誤（error handling）？
- [ ] 是否處理空值、空輸入、極端數值、重複值與非預期順序？
- [ ] 非同步與併發流程是否可能產生 race condition 或不一致狀態？
- [ ] 資源是否在所有路徑正確釋放（記憶體、檔案、連線等）？

## 輸出規則

- 使用繁體中文輸出，技術術語保留 English。
- 只報告能由程式碼、diff、測試或明確執行結果支持的問題；區分已確認問題與待確認假設。
- 每個 finding 儘量包含：檔案與行號、問題、觸發條件或重現情境、影響，以及修正方向。不要只描述風格偏好為 bug。
- 依嚴重性依序輸出 `Critical`、`Suggestion`、`Nit`。若某類沒有項目，明確寫「無」。

## 報告格式

### Critical

- `[path:line]` 問題與影響；補充觸發條件、程式碼依據與修正方向。

### Suggestion

- `[path:line]` 效能、可靠性、測試覆蓋或可讀性改善建議，說明改善理由。

### Nit

- `[path:line]` 命名、格式或其他不影響行為的小細節。

