← ClaudeAtlas

fix-issuelisted

Use when asked to fix, resolve or work through a GitHub issue of this repo (for example "fix issue 142", "修 issue 142", "依序從 issue N 開始", or an issue URL) and the result should be a tested fix on a branch plus a PR that closes it. Covers reproducing on main, test-first, the cai-codex regenerate and release step, validate.py and the full pytest, the PR and its CI. Usage - /fix-issue <issue number or URL>
millerlai/claude-all-in-one · ★ 0 · Code & Development · score 56
Install: claude install-skill millerlai/claude-all-in-one
# fix-issue 把這個 repo 的一個 issue,從「在 `main` 上重現」一路做到「PR 的 CI 綠了」。步驟裡用到的都是這個 repo 自己的腳本,所以這份 skill 只在這裡用。`CLAUDE.md` 已經寫過的規則(validate、pytest、codex 的產生與 release),這裡不再重抄,只放執行順序和踩過的坑。 ## 輸入與輸出 - 輸入:issue 編號或 URL。一次要處理好幾個 issue 時,一個一個來,照 issue 裡的順序表走,例如 #138 的「Task order」。 - 輸出: - `fix/<N>-<slug>` branch 上的修正和測試; - 一個帶 `Closes #N` 的 PR; - 那個 PR 的 CI 結果。 - commit、push、合併,每一步都要先問過。 ## 步驟 1. **讀 issue。** 跑 `gh issue view <N>`,讀出驗收條件、`Decision needed` 和順序。遇到待決點時: - 如果便宜又可逆,就採用 issue 的建議,並在回報裡說明; - 否則先問一個問題,得到答案再動手。 2. **開 branch。** 確認工作區乾淨,接著 `git switch main && git pull --ff-only`,再 `git switch -c fix/<N>-<slug>`。這個 issue 如果已經有 branch,先問哪一個才算數。 3. **先在 `main` 上重現。** - scratch 腳本放在 scratchpad,不要放進 repo。 - 隔離方式和 `tests/conftest.py` 一樣:拿掉 `CLAUDE_CODE_SESSION_ID`,並把 `CAI_USAGE_LEDGER` 指到 scratch 路徑。 - CLI 要照 skill 實際的跑法去跑,例如 `track_state.py status` 要從專案根目錄執行。 - 重現不出來,就停下來回報。 4. **先寫會失敗的測試。** - 每個驗收條件寫一個測試,放在 issue 點名的測試檔裡,沿用那個檔案的 helper。 - 先跑一次,讀失敗訊息:它必須是因為 issue 描述的原因而失敗,不能是 import error。 - 修之前就會通過的守門測試可以保留,但回報裡要點名是哪幾個。 5. **修。** - 做讓測試轉綠的最小改動。註解寫「為什麼」,並附上 issue 編號。 - 再用懷疑的眼光檢查一次:找出可能打破新規則的輸入,例如模板占位字、legacy 文件、CRLF、相對路徑和絕對路徑。真的找到就補一個測試。 6. **bump 版本、release codex。** - 改到 `plugins/cai/`,就 bump `plugins/cai/.claude-plugin/plugin.json`;修 bug 只升 patch 版本。 - 改到會被產生進 `plugins/cai-codex/` 的檔案,就跑 `python scripts/gen-codex.py`。全部改完之後再跑 `--release <main 上的版本升一個 patch>`。 - 同一個 branch 上可以重跑同一個版本號,因為它只和 `main` 上的版本比較。 - `usage_report.py` 這類不會被產生