feat(log): 每完成一個任務就寫一筆日誌,暫存改三段式 #16
1 Participants
Notifications
Due Date
No due date set.
Blocks
#29 feat(sdlc): 工作包隔離、留言取得共識後再修、盯 PR 到合併與每任務一筆日誌
plugins/sdlc
Reference: plugins/log#16
Reference in New Issue
Block a user
摘要
stage-report.sh --pending-file只是暫存,要併進同一次日誌寫入,寫成功之後才清除。決策紀錄在 wiki 存取庫knowledges/QUESTION的QUESTION_FB8DF0B5,2026-08-27 那一節。變更內容
tools/worklog-pending.shclear,呼叫端只能先清再寫(寫失敗兩邊都沒有)或寫完清全部(把中途新存進來的內容一起刪掉)。新增merge、commit、abort三段式,把「清除」綁在 wiki 寫入的結果上skills/worklog/SKILL.mdtemplates/log-entry.mdREADME.mdclearplugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json設計重點
merge只讀不刪,刪檔一律等commit。只刪併入清單上那幾個檔,是為了保住merge之後、commit之前另一個工作階段新存進來的內容。commit只認merge產出的清單,而且清單上的路徑必須落在該 hash 的暫存目錄底下,否則當用法錯誤擋下來——這道護欄擋的是拿別處的清單來刪檔。abort一個暫存都不刪,下一次merge會再把它們併進去,所以失敗重試不會掉內容。merge在沒有暫存時仍然回0:合併檔至少有本次條目,呼叫端不必為「有沒有暫存」分兩條路走。測試結果
sh -n tools/worklog-pending.sh:語法檢查通過。$JSC_HOME走過完整流程:add存一份暫存後merge,印出MERGED=、CLAIM=、PENDING=1,合併檔內容確認是「暫存在前、本次條目在後」。abort之後印「暫存保留 1 個檔案」,list仍列得出那份暫存,內容沒掉。merge後commit,印「已清除暫存 1 個檔案」,再list回3(沒有暫存內容)。commit ABCD1234 /etc/passwd回2並印繁中訊息,指出併入清單必須是merge產出的那一份。ste100-lint.sh .:全庫零命中。worklog技能實際寫進 wiki 的往返,需要可連線的 Gitea 與設定好的JSC_WIKI_REPO_LOG,本次在沒有 Gitea 存取的環境進行。前置 Push Request
What:`tools/worklog-pending.sh` 新增 `merge {hash} {本次條目檔}`、`commit {hash} {併入清單}`、`abort {hash} {併入清單}` 三個子命令。`merge` 合成「暫存內容在前、本次條目在後」的檔案並印出 `MERGED=`、`CLAIM=`、`PENDING=`;`commit` 只刪併入清單上那幾個檔;`abort` 暫存一個都不刪,只丟掉合併檔與清單。原本的 `clear` 保留,改為清掉全部暫存。 Why:暫存只能在 wiki 寫入成功之後才清,但原本只有一個 `clear`,呼叫端要嘛先清再寫(寫失敗就兩邊都沒有),要嘛寫完清全部(把 `merge` 之後才存進來的內容一起刪掉)。兩種都會弄丟工作紀錄。 How:`merge` 只讀不刪,刪檔一律等 `commit`,也就是等 wiki 回報成功。只刪清單上的檔案,是為了保住 `merge` 之後、`commit` 之前另一個工作階段新存進來的內容。`commit` 只認 `merge` 產出的清單,而且清單上的路徑必須落在該 hash 的暫存目錄底下,不然當用法錯誤擋下來——這道護欄擋的是拿別處的清單來刪檔。`merge` 在沒有暫存時仍然回 `0`,合併檔至少有本次條目,呼叫端不必分兩條路走。 Who:`jsc-log:worklog` 寫日誌那一步,以及用 `stage-report.sh --pending-file` 暫存過內容的 SDLC 階段。What:`worklog` 技能改成一個任務一筆條目,任務有三種——一個工作包、一輪 PR 留言修正、一個獨立的修正提交,並新增「What counts as one task」一表寫明各自何時結束;寫入步驟改走 `merge`、`commit`、`abort` 三段式,十項資訊裡的花費時間、token 用量、任務狀態、執行細節四項改成只算這一個任務。`templates/log-entry.md` 的頁首說明同步改寫。 Why:原本一個階段只寫一筆,同一個工作包跑五輪留言修正也只留下一筆。花費時間與 token 用量被攤成一個總數,看不出哪一輪花掉多少;連「試了卻沒改到檔案」的那一輪也整段消失,而那段時間正是最該被看見的。 How:下一個任務開始前先把這一筆寫完,五輪就是五筆,各自帶自己的花費時間與 token 用量,一律附加到同一頁 `LOG_{HASH}`,既有條目不動。每筆的標題要寫清楚是哪一個任務(工作包代號、第幾輪、或提交標題),五筆並排才讀得下去。花費時間在任務結束的當下讀,token 用量傳同一個 session id,兩個數字才描述同一件事。 Who:`jsc-sdlc:implement` 與 `jsc-sdlc:maintain` 收尾時呼叫日誌的每一個工作階段。