feat(log): 每完成一個任務就寫一筆日誌,暫存改三段式寫入 #17

Merged
jiantw83 merged 5 commits from feat/sdlc-flow-rules/main into develop 2026-08-27 03:39:38 +00:00
Member

PR 描述

摘要

  • 需求描述:把功能主幹 feat/sdlc-flow-rules/main 累積的內容整批推上 develop。本存取庫負責使用者 15 條規則第一群「SDLC 執行流程」裡的 R1:每完成一個任務就立刻寫一筆工作日誌,不再等整個工作包做完才補一大筆。粒度變細之後,暫存區被清掉的時機也跟著變關鍵,所以一併把單次寫入拆成 merge、commit、abort 三段。
  • 計畫名稱:無
  • 計畫頁:無
  • 分析頁:無

本 PR 併入 5 個 commit,來自已合併的子功能 PR plugins/log#16。

變更內容

檔案 為什麼改
tools/worklog-pending.sh 新增 merge、commit、abort 三段式。原本寫完 wiki 就整包 clear,會連「merge 之後、寫入完成之前」另一個工作階段新存進來的內容一起刪掉
skills/worklog/SKILL.md 日誌粒度改成每完成一個任務就寫一筆,並改走三段式寫入。R1 要的就是這個粒度
templates/log-entry.md 條目範本配合單一任務的粒度調整,不再假設一筆等於一個完整工作包
README.md 同步日誌粒度與三段式暫存的說明
plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json 三份 manifest 版本同步升到 0.1.1

設計重點

  • 三段式解決的是同一件事:暫存只能在 wiki 寫入成功之後才清。merge 把暫存內容與本次條目合成一份要寫進 wiki 的檔案,同時記下這次併走了哪些暫存檔(併入清單);commit 在寫入成功後只刪掉清單上那幾個檔;abort 在寫入失敗後保留暫存,只丟掉合併檔與併入清單。
  • 只刪清單上的檔案,是為了保住 merge 之後、commit 之前另一個工作階段新存進來的內容。整包清掉的話,那段日誌就永遠補不回來了。
  • merge 在沒有暫存內容時仍然 exit 0:合併檔至少有本次條目,呼叫端不必分兩條路走。
  • 一輪 PR 留言修正也算一個任務,每輪一筆、附加到同一頁 LOG_{HASH}。決策紀錄見 wiki QUESTION_FB8DF0B5 的 2026-08-27 那一節 Q6。合併成一筆會把單輪的困難與 token 細節碾平,「嘗試了卻沒改」的耗時也會不見。
  • 暫存放在 $JSC_HOME/worklog-pending/{hash}/,合併檔與併入清單放在 .merge/ 底下,檔名帶 UTC 時間與 pid,兩個工作階段同時跑也不會互相蓋掉。
  • wiki 位置沿用既有解析順序:先讀 JSC_WIKI_REPO_LOG,未設定才退回 JSC_WIKI_REPO。

測試結果

  • 子功能 PR plugins/log#16 已完成該層的驗證並合併,本 PR 不再重跑一次。
  • 主幹整合後複驗:sh -n tools/worklog-pending.sh 通過。
  • 主幹整合後複驗:jsc-meta/tools/ste100-lint.sh 掃整個存取庫全綠。

前置 Push Request

  • 無
# PR 描述 ## 摘要 - 需求描述:把功能主幹 `feat/sdlc-flow-rules/main` 累積的內容整批推上 `develop`。本存取庫負責使用者 15 條規則第一群「SDLC 執行流程」裡的 R1:每完成一個任務就立刻寫一筆工作日誌,不再等整個工作包做完才補一大筆。粒度變細之後,暫存區被清掉的時機也跟著變關鍵,所以一併把單次寫入拆成 `merge`、`commit`、`abort` 三段。 - 計畫名稱:無 - 計畫頁:無 - 分析頁:無 本 PR 併入 5 個 commit,來自已合併的子功能 PR [plugins/log#16](https://gitea.jsc.idv.tw/plugins/log/pulls/16)。 ## 變更內容 | 檔案 | 為什麼改 | | --- | --- | | `tools/worklog-pending.sh` | 新增 `merge`、`commit`、`abort` 三段式。原本寫完 wiki 就整包 `clear`,會連「merge 之後、寫入完成之前」另一個工作階段新存進來的內容一起刪掉 | | `skills/worklog/SKILL.md` | 日誌粒度改成每完成一個任務就寫一筆,並改走三段式寫入。R1 要的就是這個粒度 | | `templates/log-entry.md` | 條目範本配合單一任務的粒度調整,不再假設一筆等於一個完整工作包 | | `README.md` | 同步日誌粒度與三段式暫存的說明 | | `plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` | 三份 manifest 版本同步升到 `0.1.1` | ## 設計重點 - 三段式解決的是同一件事:**暫存只能在 wiki 寫入成功之後才清**。`merge` 把暫存內容與本次條目合成一份要寫進 wiki 的檔案,同時記下這次併走了哪些暫存檔(併入清單);`commit` 在寫入成功後只刪掉清單上那幾個檔;`abort` 在寫入失敗後保留暫存,只丟掉合併檔與併入清單。 - 只刪清單上的檔案,是為了保住 `merge` 之後、`commit` 之前另一個工作階段新存進來的內容。整包清掉的話,那段日誌就永遠補不回來了。 - `merge` 在沒有暫存內容時仍然 exit 0:合併檔至少有本次條目,呼叫端不必分兩條路走。 - 一輪 PR 留言修正也算一個任務,**每輪一筆、附加到同一頁 `LOG_{HASH}`**。決策紀錄見 wiki [QUESTION_FB8DF0B5](https://gitea.jsc.idv.tw/knowledges/QUESTION/wiki/QUESTION_FB8DF0B5) 的 2026-08-27 那一節 Q6。合併成一筆會把單輪的困難與 token 細節碾平,「嘗試了卻沒改」的耗時也會不見。 - 暫存放在 `$JSC_HOME/worklog-pending/{hash}/`,合併檔與併入清單放在 `.merge/` 底下,檔名帶 UTC 時間與 pid,兩個工作階段同時跑也不會互相蓋掉。 - wiki 位置沿用既有解析順序:先讀 `JSC_WIKI_REPO_LOG`,未設定才退回 `JSC_WIKI_REPO`。 ## 測試結果 - 子功能 PR [plugins/log#16](https://gitea.jsc.idv.tw/plugins/log/pulls/16) 已完成該層的驗證並合併,本 PR 不再重跑一次。 - 主幹整合後複驗:`sh -n tools/worklog-pending.sh` 通過。 - 主幹整合後複驗:`jsc-meta/tools/ste100-lint.sh` 掃整個存取庫全綠。 ## 前置 Push Request - 無
jiantw83 added 5 commits 2026-08-27 03:38:54 +00:00
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` 收尾時呼叫日誌的每一個工作階段。
What:README 的 `worklog` 技能說明改寫成「每完成一個任務就寫一筆」並列出三種任務,工具表的 `worklog-pending.sh` 一列補上 `merge`、`commit`、`abort` 三個子命令與各自的時機。

Why:粒度與暫存流程都變了,README 是對外說明。說明沒跟上,使用者會照舊以為一個階段寫一筆、清暫存用 `clear`。

How:技能說明拆成兩段,第一段講粒度、第二段講十項資訊與寫入流程;工具表那一列把「寫進 wiki 成功之後才清」這句留著,因為三段式要守的正是這一條。

Who:讀 `jsc-log` 說明的人,以及要接 `worklog-pending.sh` 的 `jsc-sdlc`。
What:`plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` 的 `version` 由 0.1.0 改為 0.1.1。

Why:本次改了日誌粒度並新增三個暫存子命令,屬於行為變更,版本要跟著往上走,各 CLI 才知道要更新。

How:三份只改 `version` 一個欄位,其餘內容不動,三份保持同一版號。

Who:`jsc-log` 外掛的套件描述檔。
Reviewed-on: #16
jiantw83 merged commit d01368248e into develop 2026-08-27 03:39:38 +00:00
jiantw83 deleted branch feat/sdlc-flow-rules/main 2026-08-27 03:39:38 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/log#17