jiantw83
|
3b6dd1b901
|
test(wire-cli): 冒煙測試補驗工作包歸屬的四條判定路徑
What:`tools/wire-cli.sh` 的 `smoke` 新增一段,用一份暫時的 `$JSC_HOME` 狀態檔把「狀態檔不存在」「PR 屬於領取中的工作包」「PR 屬於別的工作包」「逃生門 `JSC_WP_GATE=off`」四種情境各跑一次,逐一比對結束碼;收尾那句 `status=ok` 的說明也跟著補上這一段。
Why:原本兩支 `wp-check` 冒煙都把技能名清空,只走得到「沒有未結清 PR」與「取不到技能名」兩條捷徑,歸屬比對整段一次都沒跑到。判定寫了卻沒驗,等於沒寫。
How:驗的是判定結果本身,不只是腳本跑得完——每一種情境都給定預期結束碼,對不上就計入失敗並印出前 200 字的輸出。狀態檔放在暫時目錄,冒煙測試不該在使用者真正的 `$JSC_HOME/wp/` 留下痕跡。每次呼叫都接 `</dev/null`:`wp-check` 會讀標準輸入,管線沒人關閉時整支會卡死。建不出暫存目錄也算失敗,不能靜悄悄跳過。
Who:`jsc-hooks:hooks-install` 接線後跑的冒煙測試,以及改動 `sdlc-gate.sh` 歸屬判定的人。
|
2026-08-27 11:20:28 +08:00 |
|
jiantw83
|
870f52fbaa
|
feat(sdlc-gate): 工作包閘門加上歸屬比對與領取紀錄
What:`hooks/sdlc-gate.sh` 新增 `wp-claim {owner}/{repo} {工作包代號} [{PR 編號}] [{分析頁}]` 與 `wp-unclaim {owner}/{repo}` 兩個子命令,`wp-lock` 新增第四個參數收工作包代號,鎖檔改為純文字 `key=value`,`wp-report` 多印第四欄工作包代號。`wp-check` 逐筆判歸屬:`prompt` 多注入一行點名不屬於這裡的 PR,`skill` 擋下 `plan`、`analyze`、`maintain` 時一併點名,`implement` 仍放行但收到同一則提醒。
Why:同一份分析常有好幾包平行進行,每包各自的 worktree 與 PR。原本的鎖檔只記存取庫與 PR 編號,看不出那支 PR 是誰的,於是任何一個工作階段都可能去改別包的程式碼、回別包的留言。
How:歸屬只比一件事——鎖檔的 `wp` 與同一個存取庫領取檔的 `wp` 取數字比一次,兩邊都有值且不相等就是別包的。`WP-03`、`WP-3`、`3` 先正規化再比,不然同一包的幾種寫法會被當成不同包。任何一邊查不到(沒有分析頁、沒寫代號、領取檔不存在)一律當查無歸屬並放行,理由與 `version-guard.sh` 一致:只擋確定違規,否則會把技能組維護自己鎖死。舊版單行 TSV 鎖檔照樣讀得動,讀出來是查無歸屬,換格式不會讓既有的鎖失效。`implement` 一律放行,連別包的 PR 未結清也放行——結清 PR 正是 `implement` 的步驟,擋它會把流程鎖死。分類迴圈用 here-document 餵資料而不用管線,管線右邊是子 shell,判到的違規會在迴圈結束時全部消失。
Who:跑 SDLC 實作階段的每個工作階段,以及 `jsc-sdlc/tools/wp-gate.sh` 的 `claim`、`lock` 與 `owns`。
|
2026-08-27 11:20:28 +08:00 |
|
jiantw83
|
667b60c8e9
|
feat(manifest): 三份 manifest 版本升到 0.2.2
What:三份 manifest 由 0.2.1 升到 0.2.2。
Why:字表擴充後偵測能力大幅改變,本機沒跟著升版,version-guard.sh 就判不出落後,
使用者不會收到更新提示,繼續用覆蓋率只有兩成的舊字表。
How:以 jsc-meta 的 sync-skill-manifest.sh 統一 bump,三份同步成同一個值。
Who:非程式碼輸出的繁中無亂碼檢查。
|
2026-08-27 09:53:55 +08:00 |
|
jiantw83
|
75fba4715c
|
feat(simplified): 字表擴充到 1006 字並補齊跳過清單
What:簡體字表由 102 字擴充到 1006 字;lang-guard.sh 的跳過清單補上
jsc-meta 的 references/ste100.md 與 tools/ste100-lint.sh。
Why:102 字的舊表覆蓋率太低——拿 21 個常見簡體詞實測只抓到 4 個,「简体字」
「举办」「觉得」「战争」「医药」這類全部漏掉,規則等於形同虛設。跳過清單則是
對稱性問題:規則文件與機檢工具本身會列舉簡體字當範例,不跳過就每次先抓到自己。
How:字表逐字檢查「簡化後才出現的字形」,剔除正體也在用的字(后、台、干、只、
里、面、制、志、出、斗、丑、了、卷、咸、云、留、言、短、困、陷、游、封、吞),
再拿 jsc 全部 11 個存取庫共 221 個檔案的既有正體中文語料回歸驗證,誤報為零。
檔頭寫明排除原則與「改完必須拿語料重驗」的要求。跳過清單比照 ste100-lint.sh 的做法。
Who:非程式碼輸出的繁中無亂碼檢查。
|
2026-08-27 09:53:55 +08:00 |
|
jiantw83
|
aee2f19699
|
feat(manifest): 三份 manifest 版本升到 0.2.1
What:把 `plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` 三份 manifest 的版本由 0.2.0 升到 0.2.1。
Why:0.2.0 已隨前一支 PR 發佈出去,本次新增的第七支 hook 與五個 CLI 的接線沒有跟著升版,`version-guard.sh` 就看不出本機落後,使用者不會收到更新提示。
How:以 jsc-meta 的 `sync-skill-manifest.sh` 統一 bump,patch 進位,三份同步成同一個值。
Who:繁中與編碼檢查 hook 的跨 CLI 支援。
|
2026-08-27 09:50:03 +08:00 |
|
jiantw83
|
fe3c5723a5
|
feat(hooks-install): 文件同步到七支 hook
What:`README.md` 的 hook 一覽表新增 `lang-guard.sh` 一列(事件、三種模式、逃生門),所有「六支 hook」改七支,環境變數表補 `JSC_LANG_GUARD`,`tools/jsc-wrap.sh` 那列補收尾 sweep;`skills/hooks-install/SKILL.md` 六支改七支並補覆蓋範圍與備註,`description` 的括號清單加上這支;`AGENTS.md` 清單同步,並新增一條繁中無亂碼規則。
Why:文件寫六支、實際跑七支,使用者與 sub agent 都會照文件辦事,少接的那一支永遠沒有人發現。`AGENTS.md` 是各 CLI 讀得到的規則檔,新規則不寫進去就只剩 hook 在擋,模型自己不會知道。
How:README 維持 STE100 繁中;SKILL.md 維持整份英文,`description` 保持 4 句、保留觸發時機。規則正文一律不在本存取庫留副本,只指向 `jsc-meta` 的 `references/ste100.md`,字表位置指向 `hooks/simplified.txt`。
Who:`jsc-hooks` 的文件層,讀者是使用者與執行 `hooks-install` 的 sub agent。
|
2026-08-27 09:50:03 +08:00 |
|
jiantw83
|
bbad6566f7
|
feat(wire-cli): 把 lang-guard.sh 接到五個 CLI 的既有時機
What:`hooks/hooks.json` 的 `UserPromptSubmit` 加 `lang-guard.sh prompt`、`PostToolUse` 的 `Write|Edit|MultiEdit` 加無參數模式;`tools/wire-cli.sh` 把 codex 的 `notify`、kiro 的 `userPromptSubmit` 串上 sweep,規則檔文字加上 `lang-guard.sh prompt` 的輸出,`smoke` 三種模式各跑一輪,`status` 補盤點項,寫入後驗證一併涵蓋;`tools/jsc-wrap.sh` 收尾再跑一次 sweep;`hooks/ste100-guard.sh` 的注入文字補上適用範圍與 UTF-8 無亂碼。
Why:hook 寫好了不接線等於沒寫。接的位置與 `comment-scope.sh` 完全一樣,因為兩支要解的是同一個問題——只有 claude 有 post-tool hook,其餘四個 CLI 拿不到「剛剛寫了哪個檔」,只能改掃整個工作區。各 CLI 的掃描時機本來就不同:claude 逐檔即時、codex 每輪結束、kiro 每輪提示送出時、copilot 與 antigravity 只有工作階段結束,回報時不能寫成五支一樣。
How:規則檔文字取 `lang-guard.sh prompt` 的實際輸出,不在接線腳本裡抄一份規則,抄了兩邊就會各自漂移。寫入後以 `has_lang_guard()` 比對腳本第一行實際輸出,確認規則檔真的收到那一段。`smoke` 沿用既有的 exit 2 例外:掃描模式掃到違規回 2 是設計行為,不是執行期錯誤。`jsc-wrap.sh` 的 sweep 一律加 `|| true`,包裝器原樣回傳 CLI 自己的結束碼——包裝器改掉結束碼,呼叫端的 `cmd && next` 就會誤判。
Who:`jsc-hooks` 的接線層,由 `hooks-install` 技能對 claude、codex、copilot、antigravity、kiro 五個 CLI 執行。
|
2026-08-27 09:50:03 +08:00 |
|
jiantw83
|
e3a9c67781
|
feat(lang-guard): 新增第七支 hook,強制非程式碼輸出繁中無亂碼
What:新增 `hooks/lang-guard.sh` 與機檢字表 `hooks/simplified.txt`。腳本比照 `comment-scope.sh` 的結構,一樣三種模式:`prompt` 注入規則摘要、無參數掃剛寫入的單一檔案、`sweep [dir]` 掃整個 git 工作區這次改過的檔案。偵測三項:簡體字、亂碼(U+FFFD 與雙重編碼殘骸)、非 UTF-8 編碼。命中走 stderr 並 exit 2,資料不足或找不到 git 一律安靜 exit 0,逃生門 `JSC_LANG_GUARD=off`。
Why:使用者新增的規則是「非程式碼的輸出一律套用繁中無亂碼」,範圍涵蓋程式碼註解、commit 訊息、PR 描述、wiki 頁、對使用者的回報與各種文件。這條規則原本只有 `ste100-guard.sh` 的提示層,模型看得到卻沒有人檢查,寫出簡體字或亂碼不會有任何回饋。提示層擋不住的事,就要有機檢層。
How:簡體字樣式由字表組出,字表是單一真實來源,腳本裡不留第二份;字表讀不到就安靜跳過這一項,不中斷整支腳本。亂碼一律用位元組比對(`LC_ALL=C`),不靠語系的字元範圍,因為 `grep -E` 的字元範圍在不同語系下行為不一致。掃描深度沿用 `comment-scope.sh`:檔案已追蹤就只掃 `git diff HEAD` 的新增行,不翻舊帳。二進位檔只認 NUL 位元組判定,不拿「非可列印字元」當判準,那會把所有含中文的檔案誤判成二進位。字表刻意排除繁體也在用的字(后、台、干、只、里、面、制、志),並跳過 `simplified.txt`、`ste100-guard.sh`、`lang-guard.sh` 三份以簡體字與亂碼為討論對象的檔案,避免整支 hook 每次先抓到自己。
Who:`jsc-hooks` 的 hook 實作層,供 `hooks/hooks.json` 與 `tools/wire-cli.sh` 接線給五個 CLI 使用。
|
2026-08-27 09:50:03 +08:00 |
|
jiantw83
|
542f0aab2c
|
feat(manifest): 三份 manifest 版本升到 0.2.0
What:把 plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json 三份
manifest 的版本由 0.1.9 升到 0.2.0。
Why:0.1.9 已隨前一支 PR 發佈出去,本次新增的 sweep 模式與四支 CLI 的接線
沒有跟著升版,version-guard.sh 就看不出本機落後,使用者不會收到更新提示。
How:以 jsc-meta 的 sync-skill-manifest.sh 統一 bump,minor 進位、patch 歸零,
三份同步成同一個值。
Who:註解範圍檢查 hook 的跨 CLI 支援。
|
2026-08-27 09:20:44 +08:00 |
|
jiantw83
|
b23c546079
|
docs(hooks-install): 據實寫明各 CLI 的註解範圍掃描時機
What:`skills/hooks-install/SKILL.md`、`README.md`、`AGENTS.md` 三份文件一併改寫註解範圍的覆蓋範圍說明:`comment-scope.sh` 由兩種模式改為三種,並以表格列出五個 CLI 各自的掃描時機——claude 逐檔即時(PostToolUse)、codex 每輪結束(`notify`)、kiro 每輪提示送出時(`userPromptSubmit`,掃的是上一輪寫的檔)、copilot 與 antigravity 只有工作階段結束時由 `tools/jsc-wrap.sh` 收尾掃一次。README 的 `tools/jsc-wrap.sh` 那列補上收尾 sweep 與「不影響結束碼」的約定,`smoke` 例外說明改成掃描模式通用。
Why:舊文件寫的是「四個 CLI 只剩規則提示」,接上 sweep 之後那句話已經不實。但也不能倒過來寫成五支一樣:時機差一輪或差一整個工作階段,操作者要知道自己現在用的 CLI 什麼時候才會收到警告。文件不同步,操作者會對保護程度有錯誤預期。
How:SKILL.md 全份維持英文,正文改用一張 CLI 對掃描時機的表格,並註明 sweep 讀的是 `git diff HEAD`、涵蓋範圍與 claude 相同、不在 git 工作區內就安靜 exit 0,frontmatter 的 `description` 不動;README.md 維持 STE100 繁中,hook 一覽表那列補上三種模式與各 CLI 時機,原本的降級段落換成同一張表;AGENTS.md 的第 5 條補上三種模式與「不得寫成五支一樣」的要求。
Who:`jsc-hooks` 的文件層與 `hooks-install` 技能,供操作者與後續 sub agent 依循。
|
2026-08-27 09:16:32 +08:00 |
|
jiantw83
|
0bebdef46f
|
feat(wire-cli): 把 comment-scope sweep 接到其餘四個 CLI
What:`tools/wire-cli.sh` 把 `comment-scope.sh sweep` 接進 codex 的 `config.toml` 根層 `notify` 與 kiro 的 `.kiro/hooks/jsc-hooks.json` 的 `userPromptSubmit`;`tools/jsc-wrap.sh` 在 CLI 結束後、回傳結束碼之前跑一次 sweep,涵蓋 copilot、antigravity 與同樣走包裝器的 codex。`smoke` 多跑一輪 sweep,`status` 多盤點 codex 的 `notify-sweep` 與 kiro 的 `comment-scope-sweep` 兩項。
Why:這四個 CLI 沒有 post-tool hook,接不到逐檔即時掃描,先前只寫得進規則提示,違規註解寫進去沒有人叫。接上 sweep 之後五個 CLI 都掃得到,差別只剩回饋速度。`smoke` 與 `status` 不同步補上,就驗不出來接線少了哪一支。
How:codex 的 notify 串成 `start; mark; sweep`,位置仍由 `replace_block_toml` 保證落在第一個表頭之前,寫入後除了既有的根層鍵檢查,再 grep 一次確認 sweep 真的串進那一行。kiro 的 `run` 尾端接上 sweep,`prompt` 與 `sweep` 各驗一個 grep,只驗腳本名會漏掉少接的那一個。`jsc-wrap.sh` 的 sweep 加 `|| true` 接住 exit 2,包裝器一律原樣回傳 CLI 自己的結束碼——包裝器改掉結束碼,呼叫端的 `cmd && next` 就會誤判。`smoke` 的 exit 2 白名單由「無參數模式」放寬到「所有掃描模式」,因為 sweep 在髒工作區本來就會回 2,那是 hook 正常工作,不是 hook 壞掉。四個 CLI 的 `reason` 與 `[jsc]` 說明改寫成各自真正的掃描時機。
Who:`jsc-hooks` 的接線工具層,供 `jsc-hooks:hooks-install` 與 `jsc-hooks:repair` 呼叫,最終服務 codex、copilot、antigravity、kiro 的使用者。
|
2026-08-27 09:16:15 +08:00 |
|
jiantw83
|
8ede74e9e2
|
feat(comment-scope): 新增 sweep 模式,掃整個 git 工作區
What:`hooks/comment-scope.sh` 由兩種模式變三種,新增 `sweep [dir]`:掃整個 git 工作區這次改過的所有檔案,命中就把報告與最多三行證據送到 stderr 並 exit 2,找不到 git 就安靜 exit 0。`prompt` 與無參數單檔掃描兩個模式的判定邏輯一行不動。
Why:只有 claude 有 PostToolUse,拿得到「剛剛寫了哪個檔」。codex、copilot、antigravity、kiro 四個 CLI 都沒有 post-tool 事件,註解範圍檢查在那邊只剩規則提示,違規註解寫進去了不會有人叫。改掃整個工作區的 git diff,時機晚一點,涵蓋範圍一樣。
How:單檔判定抽成 `scan_file()`,兩種掃描模式共用同一份禁止樣式與白名單,不會各自漂移。`sweep` 以 `git rev-parse --show-toplevel` 找庫根,所以在子目錄跑也掃得到整個庫;逐檔報告累積在暫存檔再一次輸出,因為迴圈跑在管線的子行程裡,變數帶不回本 shell。
Who:`jsc-hooks` 的 hook 實作層,供 `tools/wire-cli.sh` 接線給 codex、copilot、antigravity、kiro 四個 CLI 使用。
|
2026-08-27 09:15:56 +08:00 |
|
jiantw83
|
7690b697c7
|
feat(manifest): 三份 manifest 版本升到 0.1.9
What:`plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` 三份 manifest 的 `version` 由 0.1.8 升到 0.1.9。
Why:本次新增了第六支 hook,屬於功能增修。版本不升,`version-guard.sh` 的版本前置檢查與 `jsc-cli:deploy` 的更新判斷都看不出本機落後,使用者不會收到更新提示。
How:三份檔案同步改同一個版本號,維持三份 manifest 版本一致的既有慣例。
Who:`jsc-hooks` 的發佈中繼資料,供 `hooks/version-guard.sh` 與 `jsc-cli:deploy` 比對版本。
|
2026-08-26 19:01:36 +08:00 |
|
jiantw83
|
5d60e0f231
|
feat(hooks-install): 文件同步六支 hook 與降級說明
What:`skills/hooks-install/SKILL.md`、`README.md`、`AGENTS.md` 三份文件一併改口徑為六支 hook,補上 `comment-scope.sh` 的職責、兩種模式、環境變數 `JSC_COMMENT_SCOPE` 與 `JSC_CHANGED_FILE`,以及各 CLI 的覆蓋範圍差異。
Why:文件停在五支會誤導操作者,讓人以為每個 CLI 都受同等保護。實際上只有 claude 有 post-tool hook,其他四個 CLI 只接得到規則提示,這個落差必須據實寫明。
How:SKILL.md 的 `description` 與正文加上 comment scope scanner,並註明 exit 2 在冒煙測試裡算健康;README.md 的 hook 表格新增一列,接線工具那列改寫 `smoke` 的例外說明,環境變數表補兩列,另加一段講明四個 CLI 的降級實情;AGENTS.md 新增一條規則,寫明規則正文的唯一來源在 `jsc-review`,本存取庫不留副本。
Who:`jsc-hooks` 的文件層與 `hooks-install` 技能,供操作者與後續 sub agent 依循。
|
2026-08-26 19:01:36 +08:00 |
|
jiantw83
|
e2232d26f1
|
feat(wire-cli): 接線腳本納入註解範圍 hook,五支改六支
What:`tools/wire-cli.sh` 新增 `comment_scope_text()`、`rules_text()` 與 `has_comment_scope()` 三個函式,把 `comment-scope.sh` 的 `prompt` 模式接進 codex、copilot、antigravity 的規則檔與 kiro 的 hook JSON,`smoke` 與 `status` 兩個子命令也補上這支 hook,全腳本由五支 hook 改口徑為六支。
Why:`hooks/hooks.json` 只服務 claude;其他四個 CLI 要靠這支腳本接線,不改就完全接不到新規則。`smoke` 與 `status` 不同步補上,接線成功與否也驗不出來。
How:`comment_scope_text()` 直接取 `comment-scope.sh prompt` 的實際輸出當規則文字,不在本存取庫留規則清單副本;`rules_text()` 把 STE100 與註解範圍併進同一個 `<!-- jsc-hooks -->` 標記段落,重跑等同先移除再重裝;`has_comment_scope()` 供 `status` 判斷標記段落在不在。`smoke` 把 `comment-scope.sh` 無參數模式的 exit 2 視為設計行為,與 `sdlc-gate.sh check` 同列例外。
Who:`jsc-hooks` 的接線工具層,供 `jsc-hooks:hooks-install` 與 `jsc-hooks:repair` 呼叫。
|
2026-08-26 19:01:36 +08:00 |
|
jiantw83
|
f81ceaf145
|
feat(comment-scope): 新增註解範圍檢查 hook 並接進 claude 的 hooks.json
What:新增第六支 hook `hooks/comment-scope.sh`,並在 `hooks/hooks.json` 補上兩個接線點:UserPromptSubmit 走 `prompt` 模式、PostToolUse 的 `Write|Edit|MultiEdit` 走掃描模式。
Why:程式碼註解常被寫進工單編號、專案代號、負責人這類文件相關資訊,讓註解變成過期文件。過去只能靠 `/jsc-review:code-review` 事後抓,回饋太慢;把規則搬到寫檔當下,模型可以立刻修正。
How:`prompt` 模式印出規則摘要注入提示。無參數模式從 stdin JSON 取 `file_path`(或環境變數 `JSC_CHANGED_FILE`),只掃 `git diff HEAD` 的新增行,不翻舊帳;markdown、純文字、資料檔與二進位檔一律跳過。命中就把警告與最多三行證據送到 stderr 並以 exit 2 交回模型就地修正,不擋寫入。逃生門為 `JSC_COMMENT_SCOPE=off`。規則正文的唯一來源在 `jsc-review` 的 `references/comment-scope.md`,本存取庫不留副本。
Who:`jsc-hooks` 的 hook 層,服務 `jsc-hooks:hooks-install` 的接線流程與 `jsc-review:code-review` 的註解契約檢查。
|
2026-08-26 19:01:36 +08:00 |
|
jiantw83
|
961af918bf
|
chore(gitignore): 忽略本機接線檔目錄 .kiro/
What:在 .gitignore 的暫存分類底下新增 .kiro/ 一行,讓該目錄維持不追蹤。
Why:.kiro/ 是 jsc-hooks:hooks-install 在本機產生的接線檔,內容含本機絕對路徑。這種檔案因人而異,提交進存取庫會讓別人拉到錯的路徑,也會每次接線就冒出雜訊變更。
How:於 .gitignore 加上獨立註解區塊與 .kiro/ 樣式,只忽略不刪檔;本機既有目錄原地保留,git status 不再列出。
Who:hooks 存取庫的版本控管設定,配合 jsc-hooks:hooks-install 的接線產出。
|
2026-08-26 18:40:11 +08:00 |
|
jiantw83
|
0c83495ba8
|
fix(version-guard): 把 jsc-ask:ask 與 jsc-gitea:wiki 加進豁免清單
What:版本守門 hook 的豁免清單新增 jsc-ask:ask 與 jsc-gitea:wiki 兩支技能,並在檔頭註解補上理由。
Why:jsc-cli:deploy 要問使用者 install/update/uninstall,一定會呼叫 jsc-ask:ask;ask 問完又一定寫回 wiki 才算完成。這兩支只要版本落後就被擋下,訊息還指回 /jsc-cli:deploy,deploy 卡在問不出模式那一步,形成死鎖,跟直接擋 deploy 是同一種問題。
How:在 case "$skill" 的豁免比對加上 jsc-ask:ask 與 jsc-gitea:wiki 兩個樣式,維持原本 exit 0 的略過行為;檔頭豁免清單註解同步補上兩條說明,講清楚死鎖成因。
Who:hooks/version-guard.sh 的外掛版本守門功能,影響 jsc-cli:deploy 的部署流程。
|
2026-08-26 18:40:11 +08:00 |
|
jiantw83
|
221742486b
|
fix(sdlc-gate): 工作包鎖檔改依索引區分,避免平行工作包互相覆蓋並修正提示文字
|
2026-08-26 17:59:21 +08:00 |
|
jiantw83
|
f1bcdc3d72
|
feat(wire-cli): 新增唯讀的接線盤點子命令
What: wire-cli.sh 新增 status 子命令,只讀設定檔判斷 jsc 標記段落在不在,不寫檔也不執行 hook。每個接線點印一行 item,以 status=wired、degraded、unwired、skipped 回報。
Why: 體檢類技能要問「hook 接線在不在」,但既有三個子命令都會動到環境:不帶子命令會重新接線、purge 會刪掉、smoke 會真的執行 hook。體檢不該有副作用。
How: 沿用底下接線區塊的同一組檔案位置與標記字串,共用 has_block、toml_root_key、json_top_key 三個判讀函式。codex 的 notify 另外單獨檢查是否落在根層,標記在、鍵被歸進表裡時 codex 讀不到,等同沒接。
Who: 供 jsc-cli:doctor 呼叫的接線檢查。
|
2026-08-26 10:44:47 +08:00 |
|
jiantw83
|
65d3c13d22
|
chore(hooks): 三份 manifest 同步升版到 0.1.7
|
2026-08-25 18:59:29 +08:00 |
|
jiantw83
|
26a5a4690d
|
docs(hooks): 補上工作包 PR 閘門的 hook 說明與逃生門
|
2026-08-25 18:59:29 +08:00 |
|
jiantw83
|
b9ad321930
|
feat(sdlc-gate): 新增工作包 PR 閘門,未結清就擋下別的階段技能
|
2026-08-25 18:59:29 +08:00 |
|
jiantw83
|
e62511b57f
|
chore(hooks): 三份 manifest 同步升版到 0.1.6
|
2026-08-25 18:18:10 +08:00 |
|
jiantw83
|
6ecb7d0387
|
docs(hooks): 同步 purge、smoke 與錯誤掃描的工具與技能說明
|
2026-08-25 18:18:10 +08:00 |
|
jiantw83
|
b45a98af87
|
feat(hooks-install): 安裝改為先清空所有 hook 再接線並驗執行期
|
2026-08-25 18:18:10 +08:00 |
|
jiantw83
|
ad2f944a66
|
fix(hooks): 修正版本號為單位數格式
|
2026-08-25 16:39:49 +08:00 |
|
jiantw83
|
c68292acbc
|
feat(hooks): 自動接手失敗接線與修復流程
|
2026-08-25 16:33:38 +08:00 |
|
 jiantw83andClaude Opus 5
|
2982ca4e9f
|
chore(hooks): 三份 manifest 同步升版並同步 marketplace 正本
What:三份 plugin manifest 版本同步 bump,兩份 marketplace 檔與 plugins/meta 正本對齊。
Why:準則要求技能異動必須同步升版;marketplace 副本必須與正本完全一致。
How:以 jsc-meta 的 tools/sync-skill-manifest.sh 升版,marketplace 檔由正本複製。
Who:jsc-meta:skill-check 例行稽核(2026-08-25)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-25 14:58:54 +08:00 |
|
 jiantw83andClaude Opus 5
|
83170e1b43
|
docs(hooks): 同步文件與參考資料
What:更新 README、AGENTS.md、templates 與 references,讓文件敘述與實際行為一致。
Why:稽核發現多處文件與程式行為分歧,違反「每個意義只有單一真實來源」。
How:以實際程式行為為準改寫敘述,重複的規則收成單一來源並以一行指引指過去。
Who:jsc-meta:skill-check 例行稽核(2026-08-25)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-25 14:58:54 +08:00 |
|
 jiantw83andClaude Opus 5
|
fedcfc8b05
|
fix(hooks): 補齊稽核缺失並修掉護欄失效
What:依 jsc-meta:skill-check 的稽核結果修正技能與工具——補上每個步驟的可檢核完成條件、
把留在內文的標準輸入輸出流程下放 tools/、修正查表與退碼路由造成的誤判。
Why:稽核發現這些缺失會讓技能在實際執行時走錯分支或靜默通過。
完成條件缺漏是最常被違反的一項;退碼誤判與查表錯誤則會讓良性狀況被當成失敗。
How:逐項對照 references/guidelines.md 的審核檢查清單修正,新增的工具都有
documented exit codes,並以真實執行驗證每條路徑。
Who:jsc-meta:skill-check 例行稽核(2026-08-25)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-25 14:58:54 +08:00 |
|
 jiantw83andClaude Opus 5
|
99f5747b9e
|
chore(plugin 版本): 三份 manifest 升版至 0.0.9
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-25 13:03:17 +08:00 |
|
 jiantw83andClaude Opus 5
|
8a8e455c87
|
docs(README): 補上 version-guard report 的用途說明
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-25 13:03:17 +08:00 |
|
 jiantw83andClaude Opus 5
|
2736555a75
|
feat(version-guard): 新增 report 子指令,一次比對所有 plugin 的本機與已發佈版本
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-25 13:03:17 +08:00 |
|
 jiantw83andClaude Opus 5
|
3b0c8f0e33
|
chore(plugin 版本): 三份 manifest 升版至 0.0.8
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-25 11:52:38 +08:00 |
|
 jiantw83andClaude Opus 5
|
922a95f147
|
docs(README): 補上 version-guard 與其環境變數說明
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-25 11:52:38 +08:00 |
|
 jiantw83andClaude Opus 5
|
60b6b8fe00
|
feat(version-guard): 技能使用前檢查版本,落後遠端就擋下並提示更新
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-25 11:52:38 +08:00 |
|
 jiantw83andClaude Opus 5
|
9b6cfb9d2e
|
chore(plugin 版本): 三份 manifest 升版至 0.0.7
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-24 18:54:19 +08:00 |
|
 jiantw83andClaude Opus 5
|
8c455954d9
|
fix(wiki 連結): 目錄頁連結方向修正、工作證不再假裝連結
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-24 18:54:19 +08:00 |
|
 jiantw83andClaude Opus 5
|
fdde05e825
|
chore(plugin 版本): 三份 manifest 升版至 0.0.6
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-24 18:00:35 +08:00 |
|
 jiantw83andClaude Opus 5
|
4b64bf526e
|
docs(README): 安裝入口改為 plugins/meta 並補上遷移說明
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-24 18:00:35 +08:00 |
|
 jiantw83andClaude Opus 5
|
cacd234869
|
chore(plugin 版本): 三份 manifest 升版至 0.0.5
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-24 16:05:18 +08:00 |
|
 jiantw83andClaude Opus 5
|
0d1671cae1
|
docs(README): 更新 sdlc-gate 閘門行為與 JSC_MODEL 優先序說明
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-24 16:05:18 +08:00 |
|
 jiantw83andClaude Opus 5
|
830ec26f97
|
feat(sdlc-gate): 階段閘門改為能力標籤程式判定,模型不符即擋下該輪提示
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-24 16:05:18 +08:00 |
|
jiantw83
|
69eee91f27
|
feat(hooks-install): 將 hooks-install 的 CLI 佈線邏輯抽離為腳本
為什麼:
`skills/hooks-install/SKILL.md` 原本直接內嵌各 CLI(codex/copilot/antigravity/kiro)的詳細佈線步驟,包含逐步設定檔修改、wrapper alias 安裝、以及 `<!-- jsc-hooks -->` 標記區塊的冪等替換邏輯,違反 jsc-meta:skill-check 稽核準則中「確定性程序邏輯應由腳本執行,不應留給子代理每次自行解讀 prose」的要求。
做了什麼:
新增腳本 `tools/wire-cli.sh {cli}`,將原本內嵌於 SKILL.md 的佈線邏輯全數抽出,並支援冪等執行(標記區塊替換、可安全重跑),輸出機器可讀的 `status=wired|degraded|skipped reason=...` 首行訊息與對應結束碼(0=wired、1=degraded、2=bad usage、3=skipped)。改寫 `skills/hooks-install/SKILL.md`,改為依偵測到的 CLI 呼叫此腳本,並讀取其 status/結束碼判斷結果,不再自行內含佈線步驟。同步更新 `README.md`:在工具表新增 `tools/wire-cli.sh` 說明列,並改寫 hooks-install skill 的描述段落,反映新的腳本驅動流程與 `status=` 回報慣例。三份外掛清單 `plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` 版本號自 0.0.3 升級為 0.0.4,對應此行為變更。
怎麼做:
建立獨立腳本承載原本的 CLI 佈線程序邏輯,改造 SKILL.md 為呼叫腳本並解讀其標準化輸出,同步更新文件與版本號。
影響範圍:
`skills/hooks-install/SKILL.md`、`README.md`、`plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json`、新增檔案 `tools/wire-cli.sh`;影響 hooks-install skill 的執行流程與所有安裝 jsc-hooks 外掛的 CLI 佈線行為。
|
2026-08-24 14:47:46 +08:00 |
|
jiantw83
|
c4909e1a1f
|
fix(marketplace): 修正 marketplace.json 與正典註冊表不同步的欄位缺漏
為什麼:
`.claude-plugin/marketplace.json` 與 `.agents/plugins/marketplace.json` 兩份檔案內容與 `plugins/jsc` 正典 marketplace 註冊表不一致,導致各 domain repo 的 marketplace 副本無法保持逐位元組同步。
做了什麼:
補上 `.agents/plugins/marketplace.json` 缺漏的頂層 `description`、`owner` 物件的 `description`,以及全部 11 個外掛(含 jsc-hooks 本身)缺漏的 per-plugin `description` 欄位;同時修正 `.claude-plugin/marketplace.json` 中 jsc-meta 描述的標點不一致問題,將斜線改為中文頓號,與正典風格一致。
怎麼做:
逐欄位比對正典 `plugins/jsc/marketplace.json` 內容,補齊並修正兩份檔案至與正典完全一致。
影響範圍:
`.claude-plugin/marketplace.json`、`.agents/plugins/marketplace.json`,屬全 repo 範圍的基礎設施修正,不影響任何 skill 邏輯或執行行為。
|
2026-08-24 14:47:36 +08:00 |
|
 jiantw83andClaude Fable 5
|
aae0516cb5
|
chore(manifest): 三份 manifest 升版至 0.0.3
What:plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json 版本由 0.0.2 升至 0.0.3,描述補上「SDLC 模型鎖」。
Why:本次新增 SDLC 模型鎖 hook 與 wrapper 工具屬功能擴充,需升版讓各 CLI 的 plugin 更新機制抓到新版本,描述也要反映新能力。
How:三份 manifest 同步改 version 與 description,維持欄位結構不變。
Who:透過 jsc marketplace 安裝 jsc-hooks 的所有 AI CLI 與 jsc-cli:deploy 佈署流程。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-24 11:37:08 +08:00 |
|
 jiantw83andClaude Fable 5
|
bdfb4619af
|
docs(hooks-install): 更新四支 hook 的接線說明與文件
What:hooks-install SKILL.md 改寫接線表並加上逐 CLI 驗證欄;README 補上 sdlc-gate、tools 兩支腳本與 JSC_MODEL 變數說明;AGENTS.md 同步 domain 描述。
Why:新增 SDLC 模型鎖與 wrapper 方案後,安裝流程與環境變數契約已改變,文件必須與實作一致,否則接線技能會漏裝。
How:接線表改為三欄(CLI、接線、驗證),copilot 與 antigravity 改兩段式(jsc-wrap.sh 包裝+規則檔追加),codex 與 kiro 註明模型鎖降級為技能步驟檢查;每步補上完成判準。
Who:執行 hooks-install 技能的 AI 助理與維護 jsc-hooks domain 的開發者。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-24 11:36:54 +08:00 |
|
 jiantw83andClaude Fable 5
|
8a95bd2b47
|
feat(ste100): 加入送出前自我檢查清單
What:ste100-guard.sh 追加一行輸出,列出五項送出前自我檢查(簡體字、半形句尾標點、套路句、半形斜線並列、諂媚開場),並附常見例字。
Why:只宣告規則不足以攔下高頻違規,參考 oh-my-pi 的做法,把可自查的具體症狀直接列給模型,命中就先改再送出。
How:在既有規則宣告後追加第二個 echo,維持單行文字、exit 0,不影響任何 CLI 的接線方式。
Who:所有經 UserPromptSubmit hook 或規則檔取得 STE100 規則的 AI CLI 輸出。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-24 11:36:40 +08:00 |
|
 jiantw83andClaude Fable 5
|
bb91cc2832
|
feat(wrapper): 新增無 Hook CLI 的包裝啟動器與日誌回填
What:新增 tools/jsc-wrap.sh 包裝啟動器與 tools/scan-logs.sh 離線日誌回填腳本。
Why:copilot、antigravity 沒有 hook 系統,計時與技能用量原本完全缺漏,需要 hook 之外的落地方案。
How:jsc-wrap.sh 匯出 JSC_CLI 與 JSC_SESSION_ID,啟動前後各呼叫一次 session-timer.sh,結束時自動執行 scan-logs.sh 並原樣傳遞子行程退出碼;scan-logs.sh 解析 copilot、antigravity、codex 的原生日誌,把技能用量與階段界線補進 $JSC_HOME,重掃不產生重複記錄。
Who:無 hook 系統的 CLI(copilot、antigravity)與僅有 notify 的 codex,資料供 jsc-log:worklog 與 jsc-log:stats 使用。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-24 11:36:24 +08:00 |
|
 jiantw83andClaude Fable 5
|
05b3779118
|
feat(sdlc-gate): 新增 SDLC 每 session 模型鎖 hook
What:新增 hooks/sdlc-gate.sh,提供 lock、unlock、check、report 四個子指令;hooks.json 於 UserPromptSubmit 加掛 check。
Why:SDLC 各階段對模型能力有硬性要求,僅靠技能提示無法防止中途切換模型,需要 hook 層強制。
How:以 session 為鍵把「階段 模型」寫入 $JSC_HOME/sessions/{sid}.stage;check 依 stdin JSON、JSC_MODEL、~/.claude/settings.json 順序判定目前模型,別名互含視為相符,不符時注入繁中封鎖提醒;缺資料一律安靜降級、永遠 exit 0。
Who:jsc-sdlc 四個階段技能(plan、analyze、implement、maintain)於閘門通過時上鎖,Claude Code 的 UserPromptSubmit hook 負責攔查。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-24 11:36:05 +08:00 |
|
jiantw83
|
e0dd3072b2
|
feat(error): 新增 ERROR wiki 範本
|
2026-08-21 16:53:17 +00:00 |
|
 jiantw83andClaude Fable 5
|
97fdeb9211
|
fix(hooks): 移除 manifest 重複的 hooks 設定並升版至 0.0.2
What(改了什麼):
刪除 .claude-plugin/plugin.json 中的 "hooks": "./hooks/hooks.json" 欄位,
並將 plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json
三份 manifest 的版本號從 0.0.1 升到 0.0.2。
Why(為什麼改):
claude plugin list 回報 jsc-hooks 載入失敗(Hook load failed:
Duplicate hooks file detected)。Claude Code 會自動載入標準路徑
hooks/hooks.json,manifest 再宣告同一份檔案就造成重複載入,
manifest.hooks 只該用來宣告額外的 hook 檔。
How(怎麼改):
移除多餘的 manifest.hooks 欄位,讓 hooks/hooks.json 只透過標準
自動載入機制載入一次;同步升版三份 manifest 以觸發各 CLI 的
plugin update,並以 python3 -m json.tool 驗證三份 JSON 格式正確。
Who(影響哪個功能/使用者):
影響 jsc-hooks 外掛的所有使用者。修正後外掛可在 claude CLI 正常
載入,STE100 語言強制、工時計時、技能用量記錄等 hooks 恢復生效。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 08:31:12 +00:00 |
|
 jiantw83andClaude Fable 5
|
805befc13c
|
chore(hooks): 加入統一 jsc marketplace 副本(與正本一致,任一 repo 可作註冊入口)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 14:37:47 +08:00 |
|
 jiantw83andClaude Fable 5
|
4ffc8459e1
|
style(hooks): 中文並列改頓號
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 14:29:45 +08:00 |
|
 jiantw83andClaude Fable 5
|
f395c1c2cb
|
docs(hooks): translate SKILL.md into English per guidelines
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 14:29:45 +08:00 |
|
 jiantw83andClaude Fable 5
|
58265e83e8
|
feat(hooks): ste100-guard 注入文字改為擬人台灣感版(台灣用語、全形標點、去 AI 味)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 14:13:27 +08:00 |
|
 jiantw83andClaude Fable 5
|
de3c53f1df
|
docs(hooks): README 安裝/更新/移除改為每指令一行(五個 CLI)並為相關 domain 加上 repo 連結
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 14:03:36 +08:00 |
|
 jiantw83andClaude Fable 5
|
c628361f52
|
chore(hooks): 版本號改為 0.0.1 並移除個別 marketplace(統一為 jsc)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 14:03:36 +08:00 |
|
 jiantw83andClaude Fable 5
|
9854c05a72
|
docs(hooks): 以統一格式改寫繁體中文 README 與 AGENTS
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 13:08:43 +08:00 |
|
 jiantw83andClaude Fable 5
|
b774df23ae
|
feat(hooks): 匯入 jsc-hooks 技能組
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 13:08:43 +08:00 |
|
 jiantw83andClaude Fable 5
|
18a22ce640
|
chore(hooks): 修正範本 manifest 與移除 hello 範例符合 hooks 領域
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 13:08:18 +08:00 |
|
jiantw83
|
57c7191108
|
Initial commit
|
2026-08-21 04:42:09 +00:00 |
|