develop
master
jsc-log
tools/worklog-pending.sh
merge
commit
abort
skills/worklog/SKILL.md
templates/log-entry.md
README.md
plugin.json
.claude-plugin/plugin.json
.codex-plugin/plugin.json
jsc-hooks/hooks/version-guard.sh
version-guard.sh
LOG_{HASH}
add
list
cat
clear
tools/stage-report.sh --pending-file
jsc-git
jsc-git/tools/base-branch.sh --derive
jsc-hooks
jsc-sdlc
JSC_WP_GATE=off
git log --oneline origin/master..origin/develop
plugins/log#17
#16
git diff --stat origin/master origin/develop
plugins/log#16
worklog-pending.sh
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
No dependencies set.
The note is not visible to the blocked user.
摘要
jsc-log0.1.1 從develop放行到master。內容是使用者 15 條規則第一群「SDLC 執行流程」六條在本存取庫的落實:tools/worklog-pending.sh新增merge、commit、abort三段式寫入,工作日誌的粒度改成每完成一個任務就寫一筆。變更內容
tools/worklog-pending.shmerge、commit、abort三段式。merge把暫存內容與本次條目合成一份要寫進 wiki 的檔案,同時記下併走了哪些暫存檔(併入清單);commit在 wiki 寫入成功後只刪清單上那幾個檔;abort在寫入失敗後原封不動保住暫存,只丟掉合併檔與清單。只刪清單上的檔案,是為了保住merge之後、commit之前另一個工作階段新存進來的內容。skills/worklog/SKILL.mdmerge、寫 wiki、依結果commit或abort。templates/log-entry.mdREADME.mdplugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json設計重點
jsc-hooks/hooks/version-guard.sh都讀存取庫的預設分支master——version-guard.sh取 rawplugin.json時刻意不指定 ref,拿到的就是預設分支那一份。內容留在develop上再完整,已經安裝的 CLI 一律抓不到,版本檢查也照舊回報舊版本。階梯的前三級都已走完,這是最後一級,也是唯一會讓使用者端真的拿到新內容的一級。LOG_{HASH}的文末,既有條目不動;每筆的標題要寫清楚是哪一個工作包、哪一輪或哪一個提交。commit,失敗就abort並保住暫存重跑。舊的add、list、cat、clear子指令都還在,沒有拿掉。tools/stage-report.sh --pending-filepark 起來的內容只是接住「還沒完成任何任務就停下」的階段,它會在下一次真的寫入時併進同一次寫入;在那之前不能當成寫過的日誌。jsc-git0.0.8):越級的 PR 會被擋下來,base 一律由jsc-git/tools/base-branch.sh --derive推導。jsc-hooks0.2.3、jsc-sdlc0.1.9):不是自己領的那一包的 PR 會被擋,查無歸屬才放行只提醒。逃生門是JSC_WP_GATE=off。測試結果
git log --oneline origin/master..origin/develop:6 個 commit,最上面是已合併的plugins/log#17,其下是#16與四個實作提交,沒有夾帶別批的內容。git diff --stat origin/master origin/develop:7 個檔案、135 行新增、28 行刪除,與上表逐項對得上,沒有預期外的檔案。plugins/log#16、plugins/log#17完全相同。worklog-pending.sh三段式的測試在那兩支 PR 已經跑過,這支 PR 沒有重跑。前置 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` 收尾時呼叫日誌的每一個工作階段。