你修好使用者回報的問題,新版也發出去了。你打開那則 issue(GitHub 上的問題回報),準備回覆他。你會寫什麼?
多數人會寫「修好了」。我 6 月 22 日就是這樣回的:
你好 @joeleee,感谢回报,这个问题已经复现、确认并修复了 🙏
Day 28 查出來,那次的修正從沒拿掉 Reload。他沒再回來,也沒有人在真的面板上按過一次右鍵,所以這句「修复了」,在 issue 上掛了三個多月。
30 篇寫完了。這篇番外把 #42 收掉:新版發出去之後,把清單剩下的行跑完,再寫回覆。
#42 是 usage(我做的開源小工具,顯示 Claude Code、Codex 這些 AI 工具用了多少額度)收到的回報。使用者在面板(點選單列圖示彈出的視窗)上按右鍵、點 Reload,面板就空了,他想重開,又找不到在哪裡結束 App。
Day 29 拿 34 行的驗收清單驗這次的修正:適用 23 行,過了 12 行,沒過 3 件,還沒到 8 行。那時修正還在分支上。10 月 9 日,v0.33.3 帶著它發出去了。
還沒到的 8 行,發版後就能接著驗。下面是我照著跑的結果:
推上去之後、發版前(Day 10 兩行):這個版本在 GitHub 上跑了 5 項(CI、CodeQL、
Scorecard、網站部署、Release),全部 success,綠了才發
出貨前開一次、寫進出貨流程(Day 8):發版流程裡有一步 smoke_test_app.sh,
自動打開打包好的 App,success
同一天第二版(Day 22):10 月 9 日只發了 v0.33.3 這一版
發版後下載回來(Day 22):usage.app.zip 的雜湊跟發布頁上的一致;
unzip -l 列得出 panels/web_panel.py,這次修正改的那一行在裡面:
item_identifier = getattr(item, "identifier", None)
剩下的 3 行,自動流程替你做不了:
後兩行,就是這篇要做的事。
寫回覆之前,還要把壞消息算進去。Day 29 沒過的三件,v0.33.3 一件都沒動:
#42 的標題本來就是兩件事:面板空白,和找不到在哪裡結束。這次能說修好的,只有前一件。
6 月 22 日那句回覆,只說了一件事:修好了。清單裡跟回覆有關的幾行,要它多寫三樣東西:
再加一樣清單沒寫的:之前說錯了,就先更正。
照這樣寫,回覆變成這樣(他用簡體中文回報,我就用簡體中文回):
@joeleee 6 月 22 日我回复"已经修复",其实不对:那次的修改没有真正移除右键菜单里的
Reload,抱歉。
v0.33.3 修好了第一件事:面板右键菜单里不再有 Reload。照你的步骤重跑:
- 修正前:右键点 Reload,面板上的文字从 323 个字变成 0 个字
- 修正后:右键菜单里没有 Reload 可点,面板上的文字维持 323 个字
更新:brew upgrade --cask usage,或到 Releases 下载最新版的 usage.app.zip(v0.33.3 起都有这个修正)。
第二件事(面板空白时找不到退出)还没有修:Mac 版目前只有面板上一个"结束"按钮。
如果面板又空白了,可以打开"活动监视器",选中 usage,点窗口顶部的"停止"按钮,再点"退出",
再重新打开 usage。

最後一段是這次多出來的。它承認還有一件沒修,也告訴使用者,現在遇到時怎麼辦。commit 說明沒貼的前後輸出,就補在中間那段。
Day 30 說:出過一次事,就加一行。#42 的回覆出過一次事,驗收清單「做完怎麼算對」加第 35 行(前 34 行在 Day 30 文末):
- 回覆使用者:修好的和還沒修的分開寫。修好的寫哪個版本、怎麼更新,貼照他步驟重跑的前後輸出;還沒修的寫現在遇到怎麼辦。之前回過「修好了」卻沒修好,先更正
AI 幫你修好的東西,最後是你去跟使用者說。一句「修好了」,三個多月沒人發現它不對;修好的和還沒修的分開寫,使用者讀完就知道哪裡好了、哪裡還要等。
這個系列到這裡結束。謝謝你讀到這裡。