Commit Graph
89 Commits
Author SHA1 Message Date
jiantw83 15fdb7e140 docs(skills): 五支技能與盤點技能的目錄頁呼叫敘述同步條列版面
What
- `skills/skill-new`、`skills/skill-update`、`skills/skill-delete`、`skills/skillset-update`、`skills/skill-check`:目錄頁寫入步驟的呼叫從「單列 upsert」改成單一 H2 區塊 upsert,鍵補上內容頁頁名這個引數,並註明第四個引數是區塊檔而不是列檔。
- `skills/tooling-guide`:盤點結果寫回目錄頁的敘述照同一套改寫,並寫明鍵是內容頁頁名。
- `references/behaviors.md`:六支技能的關鍵步驟、外部呼叫與可驗證跡象三列同步,跡象從「留下自己那一列」改成留下自己那一個 H2 區塊,區塊內的連結寫成一條欄位。

Why
- 範本與準則已經改成條列版面,技能內文還寫著「那一列」,執行時就會照舊敘述組出表格列,跟工具的區塊 upsert 對不上。
- 呼叫少帶鍵這個引數,工具無從判斷要換掉哪一個區塊,同一筆會被當成新的附加上去。
- 行為清單是稽核與驗證的比對基準,敘述沒跟上,稽核會拿舊描述判合規。

How
- 六支技能的呼叫一律寫成 `wiki-contents.sh upsert {TYPE} {鍵欄} "{內容頁頁名}" {區塊檔} [{範本}]`,並在旁邊點明目錄頁一律大標題加條列。
- 完成條件與可驗證跡象改用區塊的說法,連結範例改成 `- {欄位名}:[{頁名}]({連結})` 的形態。
- 只改敘述,不動任何腳本;轉檔與 upsert 的實作在別的存取庫。

Who
- 本存取庫六支會寫目錄頁的技能。
- 稽核與驗證流程改拿新的行為清單比對。
2026-09-02 17:21:02 +08:00
jiantw83 5541a41ff7 docs(guidelines): 新增目錄頁條列與內容頁圖表優先的區分準則
What
- 「目錄頁專用存取庫」從四條規則擴成五條,新增的第 5 條把版面判準定下來:目錄頁一律大標題加條列,內容頁才維持圖表優先。
- 第 5 條裡另立一段講 `<key-col>` 怎麼決定:那是舊表格裡持有內容頁連結那一欄的序號,只在自動轉檔時用得到,序號一律照線上那一頁實際的欄位排法填。
- 目錄頁與內容頁的對照表多一列「版面」。
- 稽核檢查清單新增兩項,一項查目錄頁版面與範本是否照第 5 條,一項查 `<key-col>` 的填法。
- `MAINTAIN` 沒有內容頁那一段,說法從「寫在表格裡」改成「寫在條列區塊上,一個專案一個 H2 區塊」。
- 跨存取庫沒有原子性那一段,回報對象從「未寫入的目錄列」改成「沒寫進去的目錄頁區塊」。

Why
- 這條區分是整組技能之後寫 wiki 的判準。準則裡沒有正本,每支技能各自解讀,改完的範本過一輪又會長回表格。
- `<key-col>` 填錯的後果是靜默的:標題會轉成那一欄的純文字、跟鍵對不上,既有那一筆被當成新的附加到頁尾,同一筆變成兩個區塊,舊區塊從此再也更新不到,而且不會有任何錯誤訊息。這一輪稽核就抓到六個頁型填錯。
- 範本的欄位順序與線上那一頁常常不一樣,而自動轉檔跑的是線上那一頁,所以序號不能照範本推。
- 檢查清單沒有對應項,這條準則就只剩內文約束,沒有稽核時的把關。

How
- 第 5 條寫明目錄頁的三段版面、H2 標題就是鍵且寫成內容頁頁名、欄位格式 `- {欄位名}:{值}`、頁上不留 markdown 表格也不放 mermaid,舊表格頁由工具讀到就自動轉寫回、不另跑批次搬移也不得手工搬。
- `<key-col>` 那一段要求先把線上那一頁讀回來確認連結落在第幾欄再填,並寫明填錯的靜默後果;線上是空頁、沒有舊表格要轉時照範本填即可。
- 補上「為什麼分兩種」的理由:目錄頁是索引,只給人挑一筆點進去,條列式壞也只壞一塊;內容頁一頁講一件事的全貌,流程與比較拿圖表最省讀者的力氣。

Who
- 全部十四種頁型的目錄頁與寫這些頁的每支技能都受這條準則約束。
- 稽核技能多兩項要判的檢查項。
2026-09-02 17:21:02 +08:00
jiantw83 5db1d8a608 docs(templates): 兩個目錄頁範本改成大標題加條列
What
- `templates/skillset-contents.md`:`SKILLSET_CONTENTS` 的版面從 markdown 表格改成一筆一個 H2 區塊,標題寫成該筆對應內容頁的實際頁名,欄位改成標題底下的一層條列。
- `templates/tooling-contents.md`:同樣轉條列,原本說明用的 `## ` 區段併進 `>` 引言,正式頁上才不會被讀成一筆假紀錄。
- `templates/skillset-page.md`、`templates/tooling-page.md`:引言補上目錄頁與內容頁的版面差別,內容頁本身維持圖表優先、不改版面。
- `README.md`:兩份目錄頁範本的說明同步改寫,兩份 `TOOLING` 範本語意相反那一段補上「版面也相反」。

Why
- 目錄頁是全部使用者共用的索引。表格一寬就得橫向捲、欄位一多就對不上表頭,而且併行寫入時只要有人少打一根豎線,整張表就散掉,別人那一筆跟著看不見。
- 條列式一筆一個區塊,寫入端只換自己那一塊,壞掉也只壞自己那一塊。
- 三個範本原本除了示範區塊之外還留著說明用的 `## ` 區段,轉條列後那種區段會在正式頁上被當成一筆紀錄讀進去。

How
- 一頁固定三段:H1 頁名、`>` 引言、然後每一筆一個 H2 區塊;區塊之間空一行,H2 與第一條之間空一行。
- 欄位在標題底下一行一條,格式 `- {欄位名}:{值}`,全形冒號,順序照原本的欄位從左到右,鍵那一欄照樣留一條。
- 寫入示例改成 `wiki-contents.sh upsert {TYPE} {鍵欄} "{內容頁頁名}" {區塊檔}`,並註明鍵欄是舊表格裡持有內容頁連結那一欄的序號、只供自動轉檔用、要照線上那一頁實際的欄位排法填。
- 頁上不留任何 markdown 表格,也不放 mermaid。

Who
- 影響照這兩個範本寫目錄頁的技能:`skill-new`、`skill-update`、`skill-delete`、`skillset-update`、`skill-check` 與 `tooling-guide`。
- 舊頁的轉檔與單一區塊 upsert 的實作不在本存取庫,本存取庫只提供範本與說明。
2026-09-02 17:21:02 +08:00
jiantw83 2fa8d86045 chore(plugin 版本): 三份 manifest 升版至 0.3.0 2026-09-02 16:01:16 +08:00
jiantw83 b87dbb12cd feat(狀態回報): 收尾寫一筆 skill-end 事件
現行紀錄只記「被叫用」,沒有成敗也沒有結束碼。跑完整輪的技能與開場就
中止的技能,在紀錄裡長得一模一樣。

start 由技能用量 hook 順手發,不必改技能文件。end 只能由技能自己在收尾
步驟寫——hook 接在技能工具呼叫上,而實際工作發生在之後的模型輪次,它在
原理上看不到成敗。有 start 沒有配對的 end,就是那一輪中止了。

status 五選一,每支技能各自寫明什麼情況選哪一個。找不到回報腳本就安靜
跳過,回報失敗一律不改變技能自己的結論。
2026-09-02 16:01:16 +08:00
jiantw83 c987d237e4 chore(plugin 版本): 三份 manifest 升版至 0.2.9 2026-09-02 14:27:18 +08:00
jiantw83 651ddb3a6f feat(link): 連結一律寫成 [文字](絕對網址),寫入前先驗證連得到
取消 [[頁名]] 與 [[顯示文字|頁名]] 兩種同 wiki 寫法,不再分「同存取庫」與
「跨存取庫」兩條規則。那種寫法只在自己那個 wiki 內解析,寫錯不報錯,畫面上
看起來像普通文字或死連結,巡不到也修不了。

連結寫進頁面前先過 jsc-gitea 的 link-check.sh,結束碼 0 才寫。驗證一律走 API,
不看網頁狀態碼:私有存取庫的網頁網址對未登入請求一律回 404,拿狀態碼判會把
好連結判成壞的。認證失敗回 7,與死連結的 1 分開,免得金鑰一過期就把還在的頁
整批判死。
2026-09-02 14:27:18 +08:00
jiantw83 f13724cb79 feat(wiki): 目錄頁專用存取庫入準則,skill-check 加入優化建議流程
What:準則的環境變數表與命名總表加入 JSC_WIKI_REPO_CONTENTS 與目錄頁專用存取庫
一節,HASH 規則改為完整 40 碼。skill-check 的 Group 3 先讀上一輪決議,建議表加上
決議與決議日期兩欄,新增步驟 8 把稽核結果寫進 SKILLSET 頁。新增 check-page-name.sh
與兩份 SKILLSET 範本。

Why:優化建議原本每輪產出後就散掉,決議為延後的項目下一輪會重新掃、重新問一次,
正是 skill-check 自己第三個面向點名的毛病。SKILLSET_CONTENTS 是 14 個目錄頁裡
唯一沒有範本的,四支技能都被要求寫它,卻沒有欄位定義可套。

How:Group 1 補進三支現成但沒人呼叫的檢查腳本——ste100-lint.sh、check-wiki-rules.sh
與新增的 check-page-name.sh。讀不到上一輪決議時只停掉 Group 3,不再中止整輪:那兩組
完全不碰 wiki,金鑰失效就會鎖死整組技能唯一的稽核路徑。另外四支 meta 技能原本把目錄頁
寫進 SKILLSET 存取庫,一併改走 CONTENTS。
2026-09-02 11:02:48 +08:00
jiantw83 7b6b9076ea docs(guidelines): 補上助理運行閘門與 fail-closed 閘門的專屬規則
What:
- 新增「助理運行閘門」一節:規格表、心跳判定的六碼處置、豁免清單十一支。
- 節內另立「fail-closed 閘門的專屬規則」四條,那是準則現在完全沒有的東西。
- 環境變數表補上閘門開關與心跳門檻兩列。
- 三份 manifest 的版本一起提升。

Why:
- 整組 hook 的通則是資料不足就放行,這一道相反。例外不點名,後來的人會以為可以隨便再開一道 fail-closed 的閘門,而那種閘門開錯就是整組技能鎖死。
- 豁免清單與腳本檔頭是同一件事實。準則沒有那張表,兩邊就會各走各的,改一支忘了另一支。

How:
- 四條專屬規則裡有兩條是這一輪實作時才想清楚的。逃生門的判斷要擺在載入共用函式庫之前——函式庫讀不到時 sh 會就地結束並回擋人的那個碼,逃生門也跟著跑不到,人就繞不過去;這一條只對 fail-closed 成立。豁免清單只收解鎖路徑,方向與重啟閘門相反,那一道解鎖靠閘門外的動作,這一道解鎖靠跑一支技能。
- 「清單認技能名不認呼叫鏈」那一條補了一個更狠的實例:巡檢要先把結果寫上監控頁才寫心跳,只豁免助理自己會做出自咬環。所以新增豁免技能時不只要想它會呼叫誰,還要想那條呼叫鏈上有沒有一步是解鎖條件本身的前置。
- 心跳判定回「檔案系統問不出來」時放行不擋,理由與代價都寫進去了。那一碼與「時間戳壞掉」的差別在有沒有出路。

Who:
助理閘門實作完之後,把當中的判斷收進準則,讓下一道同類閘門有依據。
2026-09-01 15:27:06 +08:00
jiantw83 06f530d589 chore(marketplace): 把 jsc-assist 登錄進統一 marketplace
What:
- 兩份 marketplace 檔各加一個 jsc-assist 條目,來源網址指向 assist 存放庫。

Why:
- 準則要求每個 domain 存放庫都帶同一份 marketplace 檔,任何一個存放庫都能當註冊入口。副本之間只要有一份沒跟上,稽核就會報出不一致。
- 正本少了這個條目,各 CLI 的安裝指令就找不到 jsc-assist,這個 domain 等於發佈不出去。

How:
- 條目由 meta 的 sync-marketplace.sh 產生,同時寫進正本與每個 domain 存放庫的副本,寫完逐檔比對位元組。這一支存放庫的兩份副本就是那一輪的產物。
- 條目依名稱排序,縮排與非 ASCII 描述的處理都交給同一支腳本,不手改 JSON。
- 這一批是從最新的預設分支重新產生的。前一輪的分支基底早於監控頁型別那批改動,直接合併會把那些改動回退掉,所以整批重做而不是解衝突。

Who:
助理 domain 落地的註冊步驟在這個存放庫的同步。
2026-09-01 12:50:04 +08:00
jiantw83 970b7a4f71 docs(guidelines): 命名總表加入 MONITOR 頁型別
What:
- Wiki 頁命名總表新增 MONITOR 一列,擁有者是技能助理。
- 表下補三段說明:雜湊來源、為什麼不帶工具名稱、寫入語意。
- CHECK 那一段拿掉「是唯一例外」的斷言,改成指向新的機器層規則。
- 三份 manifest 的版本一起提升。

Why:
- 總表是所有 wiki 頁命名的唯一來源。新型別沒登錄進來,各技能就沒有依據,只能各自猜。
- CHECK 原本寫著「是唯一例外」,指的是雜湊來源取主機名與帳號而不是存放庫。加了第二個同樣取法的型別之後,這句話就不成立了,留著會讓讀的人以為只有一個。

How:
- MONITOR 的雜湊來源比照 CHECK,取主機名與登入帳號。助理巡檢的是一台機器,不是一個存放庫。
- 刻意不帶工具名稱,這一點與 TOOLING 相反。TOOLING 一支 CLI 一頁,因為每支 CLI 各有自己的已安裝 plugin 與 hook 接線;助理看的是整台機器一份心跳、一本待辦簿,不分 CLI。
- 監控頁一律附加,不覆寫。助理的寫入是背景行為,覆寫錯了沒人在現場。TOOLING 內容頁是每次盤點覆寫整頁,兩者語意相反,所以各自寫明白。
- 只動總表那一節,其餘章節不碰。

Who:
技能助理落地帶出來的頁型別需求,四個存放庫同一批改。
2026-09-01 12:10:55 +08:00
jiantw83 06fe739070 Merge pull request '收攏 frontmatter 檢查與五支 CLI 的 hook 接線準則改寫' (#51) from feat/cli-hook-rewire/main into develop 2026-09-01 00:58:42 +00:00
jiantw83 c4fdd8b2d8 Merge pull request '新增 frontmatter 解析檢查,改寫五支 CLI 的 hook 接線準則' (#50) from feat/cli-hook-rewire/frontmatter-lint-and-guidelines into feat/cli-hook-rewire/main 2026-09-01 00:56:11 +00:00
jiantw83 7894fa073e chore(manifest): 三份 manifest 版本號提升到 0.2.5
What:
- plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json 的 version 由 0.2.4 提升到 0.2.5。

Why:
- 準則要求改動連帶提升三份 manifest 的 version,README 的「Skills 目錄」與 manifest 同步。
- 版本前置檢查靠 manifest 版本判定本機載入版本有沒有落後遠端發佈版本。版本號不動,這批新增的 frontmatter 檢查與改寫過的 hook 準則就發不出去,各機器也擋不到舊版。

How:
- 由主流程的 sync-skill-manifest.sh 同步三份,只動 version 欄,其餘欄位不變。
- 三份的 name 與 description 逐位元一致,避免各 CLI 讀到不同內容。

Who:
屬 CLI hook 接線修正(jsc-hooks 0.3.4)在 meta 這一側的發版收尾。
2026-08-31 19:13:03 +08:00
jiantw83 4a741071e5 docs(frontmatter-lint): 同步 README 與行為清單的 frontmatter 檢查
What:
- README 的 skill-check 段落,第一組稽核補上 lint-frontmatter.sh。
- README 的工具表新增 tools/lint-frontmatter.sh 一列,寫明五項檢查、不相依 YAML 套件、四種結束碼、退出 3 不等於通過。
- references/behaviors.md 的 skill-check 表改寫四列:關鍵步驟、外部呼叫、完成條件、可驗證跡象。

Why:
- 準則要求該 domain 的 behaviors.md 與 skills/ 相符,check-behaviors.sh 才會退出 0;README 的「Skills 目錄」也要跟著改動同步。
- 文件沒跟上,稽核就查不到這支新腳本,也不知道退出 3 是什麼都沒掃。這支腳本擋的正是靜默失效,文件本身先靜默漏掉它,等於白做。

How:
- 照 skills/skill-check/SKILL.md 的新流程改寫,關鍵步驟寫明第一組平行跑腳本檢查、frontmatter 檢查、行為清單檢查與 hook smoke。
- 外部呼叫清單依實際呼叫順序插入 tools/lint-frontmatter.sh。
- 完成條件補上「frontmatter 檢查退出 3 是什麼都沒掃,不算通過」,可驗證跡象補上「每個 domain 的 lint-frontmatter.sh 退出 0」。
- 第二組留白項目由四項改五項,同步寫進關鍵步驟的合併說明。

Who:
屬 CLI hook 接線修正(jsc-hooks 0.3.4)在 meta 這一側的文件同步。
2026-08-31 19:13:03 +08:00
jiantw83 beede79d3a docs(guidelines): 改寫 hook 準則裡五支 CLI 的接線事實
What:
- 改寫「Hook 規則」第 3 條,寫明五支 CLI 的 hook 負載形態各不相同,沒有哪一支是基準格式。
- 新增「技能名解析與阻擋輸出的共用腳本」節,列出 skill-name.sh 與 deny.sh 的用法、各 CLI 的技能名取值來源、抽成共用腳本的理由。
- 改寫「版本前置檢查」,補上五支 CLI 的接線位置表、逐支陷阱表、未實測部分的標明規則。
- 改寫「部署後重啟閘門」,指名 restart-gate.sh,並寫明接線位置與版本前置檢查完全相同。
- 審核檢查清單新增一項:該 domain 的 lint-frontmatter.sh 要退出 0,退出 3 不算通過。

Why:
- 這一節以前寫著「只有 claude 接得上,其餘四支沒有 pre-tool hook」。那是錯的。四支全都有能阻擋的 pre-tool 事件,是我們接錯位置。
- 四個無聲失效逐一坐實了這件事:codex 的 matcher 用 Skill,但 Codex 沒有 Skill 工具,技能是模型用 Bash 讀 SKILL.md;codex 的 hooks 鍵寫成內嵌物件,實際規格是路徑字串;antigravity 的 PreToolUse 寫成 Flat,實際要 matcher 加 hooks 包一層的 Grouped;三支新接的命令沒帶 JSC_CLI={代號},閘門認不出自己跑在哪支 CLI 上,一次都擋不下來。
- 錯誤的結論被寫進準則之後就沒有人再去查。版本前置檢查與部署後重啟閘門因此在四支 CLI 上長期失效,而且失效是安靜的:hook 沒被觸發不會報錯,看起來就跟「沒有東西該擋」一樣。

How:
- 接線位置表每一列都經過執行檔抽出或本機實測,事件名、matcher、寫入檔案、阻擋方式逐欄寫死。
- verdict 據實分級:claude、codex、copilot、antigravity 寫 wired;kiro 的技能叫用走 ResolveSkill 內部請求、不走工具管線,攔不到,寫 degraded,不寫 failed。
- antigravity 與 kiro 的觸發沒有實跑驗證,另段標明,回報時不得混進已驗證的結論。
- 兩道閘門共用同一套接線,就共用同一份事實表。重啟閘門那節只指回接線位置表,不另寫一份能力描述,避免改一份、漏一份。

Who:
屬 CLI hook 接線修正(jsc-hooks 0.3.4)在 meta 這一側的規範文件。
2026-08-31 19:13:03 +08:00
jiantw83 d879e634c0 feat(frontmatter-lint): 新增 SKILL.md frontmatter 解析檢查並併入例行稽核
What:
- 新增 tools/lint-frontmatter.sh,掃一個 domain 每支 skills/*/SKILL.md 的 frontmatter,檢查分隔線成對、必要鍵齊全、未加引號的純量不含「冒號加空白」、起頭字元不是 YAML 特殊字元、加了引號的值收得起來,共五項。
- 改寫 skills/skill-check/SKILL.md 的第一組稽核,把這支腳本併進去成為第 2 步,原本的行為清單檢查、結束碼路由檢查、hook smoke 依序後移。
- 第二組留白的檢查清單項目由四項改成五項,第 3 步的合併說明、三組的完成條件、第 6 步的重驗完成條件同步改寫。

Why:
- 抓到 6 支技能的 description 是未加引號的 YAML 純量、內容含「冒號加空白」。那在 YAML 是鍵的分隔符號,整份 frontmatter 當場語法錯誤。
- Antigravity 讀到語法錯誤就靜默丟棄整支技能。磁碟上 34 支,它只認 28 支。載入器不報、CLI 不報,技能清單只是少了幾列。
- 這種缺陷唯一的發現途徑是逐檔比對磁碟數量與載入數量。人工比對 10 個 domain 每次稽核都要重做一遍,還會漏。輸入輸出固定的判定就交給程式。

How:
- 腳本用 awk 自己判定 YAML 1.2 的 plain scalar 規則,不相依 pyyaml。護欄不綁在一個不保證存在的相依上,才跑得到每一台機器。
- 單引號的跳脫是重複一次、雙引號的跳脫是反斜線,兩套規則不同,所以引號改用逐字掃描,不用正規表示式一次比對兩種。
- 結束碼分四種:0 是掃到 SKILL.md 且五項全過、1 是有不合格項目(清單走 stderr,格式 {檔案}:{鍵}:{說明})、2 是用法錯誤、3 是什麼都沒掃。
- SKILL.md 明寫退出 3 不算通過,並把「每個 domain 的 lint-frontmatter.sh 退出 0」列進第 6 步的完成條件。

Who:
屬 CLI hook 接線修正(jsc-hooks 0.3.4)在 meta 這一側的稽核工具。
2026-08-31 19:13:03 +08:00
jiantw83 1cfd727436 Merge pull request '收攏行為清單檢查腳本與準則改寫,功能主幹併回 develop' (#48) from feat/skill-behaviors-and-version-block/main into develop 2026-08-31 08:10:37 +00:00
jiantw83 9ed26de7ba Merge pull request '新增行為清單檢查腳本,改寫相依版本準則並更新 5 支技能' (#47) from feat/skill-behaviors-and-version-block/behavior-list-check-and-guidelines into feat/skill-behaviors-and-version-block/main 2026-08-31 08:09:24 +00:00
jiantw83 f5f2cb05bd chore(manifest): 同步三份 manifest 的版本到 0.2.4
What:plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json 的 version 從 0.2.3 提升到 0.2.4。

Why:這次新增了行為清單與檢查腳本,也改了五支技能的內文。版本不提升,version-guard.sh 就比不出遠端已經有新版,部署端也拿不到更新提示。

How:三份 manifest 只改 version 一個欄位,三份的值保持一致,其餘欄位原樣保留。

Who:收尾這次技能行為清單與相依版本阻擋兩件需求,對應審核檢查清單的 manifest 同步項。
2026-08-31 13:37:33 +08:00
jiantw83 651dc19be9 docs(guidelines): 改寫相依版本準則並補上技能行為清單合約
What:「Manifest 相依版本」第 5 條改成部署端照樣更新,只在回報裡寫明缺哪一版。「版本前置檢查」補上相依版本檢查三列。新增「技能行為清單」一節,訂出位置、標題、節、表格、欄位與更新時機。審核檢查清單加上行為清單這一項。README 補上 behaviors.md 與 check-behaviors.sh 兩列,並把 skill-check 段落改成三組腳本。

Why:跳過更新會讓落後的 domain 永遠更新不到。它落後所以被跳過,被跳過所以永遠落後。相依版本不符要擋的是拿舊版去跑,不是把舊版換成新版。阻擋改到技能被呼叫的當下,才擋得住真正會出事的動作。行為清單要有一份格式合約,check-behaviors.sh 才有判定依據。

How:阻擋交給 jsc-hooks/hooks/version-guard.sh。版本比對由它自己實作,不呼叫 jsc-cli/tools/check-requires.sh。hook 專屬存放於 jsc-hooks,而且 jsc-cli 已宣告相依 jsc-hooks,反向呼叫會做出循環相依。兩道檢查共用同一份豁免清單。行為清單一個 domain 一份,放進該 domain 的 references/behaviors.md,技能改動與清單改動才進得了同一個 PR。

Who:涵蓋這次兩件需求的準則與說明文件,一件是相依版本不符改為阻擋執行,一件是技能行為清單。
2026-08-31 13:37:22 +08:00
jiantw83 2e237b7674 feat(behaviors): 新增技能行為清單與檢查腳本
What:新增 references/behaviors.md,一支技能一節,共七支技能。每節五列,記下觸發時機、關鍵步驟、外部呼叫、完成條件、可驗證跡象。新增 tools/check-behaviors.sh,比對 skills/ 與這份清單。skill-new、skill-update、skill-delete、skillset-update 加上同步更新清單的步驟。skill-check 把這支腳本併進第一組稽核。

Why:技能驗證原本沒有基準,稽核只能靠眼睛比對 SKILL.md。十個 domain 每輪都要重做一遍,還會漏掉。行為清單當基準,技能改了、清單沒跟著改,就是漂移。漂移交給程式判定才穩。

How:腳本檢查節數、節名、節序、每節一張表、五個欄位齊全、內容欄非空。退出碼 0 代表相符,1 代表不符,2 代表用法錯誤,3 代表找不到清單或找不到 skills 目錄。domain 名以 plugin.json 的 name 為準,checkout 目錄名只是退路。四支異動技能在同一個 PR 內改清單,並照退出碼分流。

Who:屬於「技能行為清單」這件需求,提供技能驗證的參考基準。
2026-08-31 13:37:04 +08:00
jiantw83 66b865456c chore(manifest): 同步三份 manifest 的版本與相依範圍
這次異動用到 hook 的重啟閘門豁免清單,也用到 hook 那份簡體字表。
相依範圍沒跟著調,裝到舊版 hook 的機器會在部署之後被自己的閘門鎖住,
而且語言檢查與 hook 會各自認一份字表,判定不一致。

三份 manifest 一起把版本往上帶一號,補上 hook domain 的相依下限,
並拉高 gitea domain 的相依下限,讓版本前置檢查擋得住不相容的組合。
2026-08-31 11:11:13 +08:00
jiantw83 6d28e207c7 docs(guidelines): 修正版本閘門、重啟閘門與維護頁的準則記載
版本前置檢查的豁免表只列了四項,重啟閘門的豁免表少了 hook 修復技能。
照著這兩張表設定,hook 壞掉時唯一的修復路徑會被自己擋住,修不好也繞不過。
兩張表逐項對齊三方實作與腳本現況,補成七項與十項,
並寫明各自的唯一真實來源是哪一支 hook 腳本,兩邊以後要一起改。

Wiki 頁命名總表原本替維護類型列了內容頁。
技能與樣板都沒有產生那一頁的步驟,照著總表找,只會找到一個不存在的頁。
改成只列目錄頁,並寫清楚維護登記全寫在目錄頁的表格裡;
要補內容頁就先補技能步驟與樣板,不能只在總表上寫著。

另外登記技能盤點頁的類型、環境變數與雜湊來源,說明為什麼雜湊要帶工具名稱,
補上唯讀稽核要帶唯讀旗標、行數一律讀腳本自己印的那一行兩項檢查,
並把新增的共用說明、兩份樣板與三支工具寫進 README 的檔案一覽。
2026-08-31 11:11:12 +08:00
jiantw83 5aa4a3da57 feat(skills): 新增技能盤點頁與共用部署驗證流程,並把技能驗證移到新行程
技能盤點以前只回到對話裡,換一台機器就得重跑才知道裝了什麼。
現在新增技能盤點這個 wiki 頁類型,雜湊取「主機、工具名稱、登入帳號」三段。
每支 CLI 各有自己的 plugin 集合,也各有自己的 hook 接線,那是互相獨立的事實。
少了工具名稱那一段,同一台機器上五支 CLI 會算出同一個雜湊,五份盤點互相覆蓋,
讀的人還看不出被蓋掉。技能盤點新增寫入這兩頁的步驟,整步規定必須開 sub agent。
兩份樣板刻意分開:內容頁每次盤點覆寫整頁,目錄頁只更新自己那一列,
兩者的寫入語意剛好相反,合成一份遲早有人把別台機器的紀錄刪掉。

四支異動技能原本在部署完的同一個工作階段,就叫用剛做好的技能。
部署收尾自己立起重啟閘門,那支技能必被擋下,驗證做不完。
解法不是把它加進豁免清單。豁免擋得住閘門,擋不住「行程還載著舊版」這件事,
硬過關驗到的是舊版行為,等於假通過。所以把判路線、部署、驗證、失敗分流
抽成一份共用說明,驗證一律另開 CLI 行程執行,四支技能只留一行指標指過去。

新增腳本檢查工具,一次做完語法、執行權限與結束碼宣告三項檢查,
只被 source 的函式庫豁免後兩項,而且逐支記在錯誤輸出,不靜默略過。
新增部署路線判定工具,判定改動有沒有進存取庫的預設分支,
取代四支技能各抄一段、各自漂移的散文;判不出來就回報停下,不自己挑路線走。

同時把四支技能裡的中文段落抽到共用說明、指標改回英文,
修正六處相對路徑,把技能盤點的模糊描述改成查得出來的條件,
並讓 manifest 同步的每一個呼叫端逐碼分流。

七支技能改為併行執行:例行稽核從九步併成七步,技能盤點併成六步。
技能盤點不再重跑盤點腳本內部已經跑過的三支腳本,
而那三支原本兼作獨立交叉檢查,拿掉就少一層保護,
所以把少掉的是什麼、風險由誰擋住,明白寫進 Notes,不當作沒發生。
2026-08-31 11:11:12 +08:00
jiantw83 7dc5c32de3 fix(tools): 改用共用推導取得技能組根目錄,並補齊結束碼宣告
以 plugin 形式安裝時,腳本會落在 CLI 的 plugin 快取目錄。
六支腳本原本一律取「腳本位置的上兩層」當技能組根目錄,這時一定推錯。
這一輪例行稽核的第一步就實際踩到:不先手動設環境變數,腳本根本跑不動,
而叫用它們的技能說明也沒提要設,等於留了一個必炸的預設值。

把推導規則抽成共用腳本,依序試環境變數、從目前目錄往上找、
腳本位置的上兩層、家目錄底下的 plugins,並以 gitea.sh 在不在當判準。
marketplace 每個 domain 存取庫都帶一份,單看它會把 domain 誤判成根。
推不出來就結束並指名要設環境變數,同時列出試過的每一個候選,
呼叫端一眼看得出要設什麼。只 clone 單一存取庫的環境留了逃生門:
環境變數有設且是目錄就照用,並在錯誤輸出提醒。

順手補上語言檢查與 manifest 同步兩支腳本的結束碼宣告與環境變數說明。
沒有宣告,呼叫端只能猜;猜錯就把失敗當成功。
2026-08-31 11:11:12 +08:00
jiantw83 0669b64c5f chore(manifest): 同步更新 jsc-meta 外掛 manifest 版本。 2026-08-28 17:41:38 +08:00
jiantw83 7127999eb3 docs(skill-check): 補上成本效率稽核範圍與驗證條件。 2026-08-28 17:41:38 +08:00
jiantw83 0cf2392ae7 fix(skill-check): 納入腳本與 hook 驗證 2026-08-28 16:55:48 +08:00
jiantw83 b48665f946 feat(skill-validation): 要求 CLI Prompt 實測與修復 PR 2026-08-28 16:02:29 +08:00
jiantw83 ec35ad9a52 chore(tooling-guide): 更新 manifest 版本至 0.1.8 2026-08-28 15:33:16 +08:00
jiantw83 c593803ed5 docs(tooling-guide): 更新 README 技能與工具目錄 2026-08-28 15:33:13 +08:00
jiantw83 a88bfe3d21 feat(tooling-guide): 新增技能組工具盤點指引 2026-08-28 15:33:09 +08:00
jiantw83 771d71c28e docs(guidelines): 定義 jsc requires 相依宣告規則 2026-08-28 11:59:16 +08:00
jiantw83 32c619bfb3 feat(manifest): 宣告 meta 技能相依版本 2026-08-28 11:59:16 +08:00
jiantw83 08a7d23a12 feat(skill-check): 加入流程效率稽核 2026-08-28 09:30:27 +08:00
jiantw83 b0ea356ff5 feat(meta): 建立 PR 收尾回報單一規範 2026-08-28 09:30:23 +08:00
jiantw83 29080ca6e8 chore(meta): 三份 manifest 版本升到 0.1.5
What:`plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` 的 `version` 從 0.1.4 升到 0.1.5,三份同步,description 不動。

Why:準則改了就要讓機器上的 `jsc-meta` 換到新版,四支異動技能與 skill-check 讀的才是這一版的規則。版本不升,`version-guard.sh` 的版本前置檢查與 `jsc-cli:deploy` 的落後判定都看不出本機還是舊版,機器上就不會被提示更新。

How:只改版號一個欄位。三份必須一致:`plugin.json` 給 marketplace、`.claude-plugin` 給 claude、`.codex-plugin` 給 codex,任一份落後都會讓那一路的版本比對抓錯。這一輪只改準則正文、沒有新增或移除技能,所以走修訂號。

Who:`jsc-meta` 的三份 plugin manifest,配合這一輪準則修正發佈。
2026-08-27 18:49:59 +08:00
jiantw83 baa1f1118f docs(guidelines): 重啟閘門狀態檔規則改為一支 CLI 一份
What:`references/guidelines.md`「部署後重啟閘門」的規則表改四列——狀態檔路徑改成 `$JSC_HOME/restart-required.d/{cli}` 並標明一支 CLI 一份、清除時機標明只清自己那一份、原本的「狀態檔存在時」與「狀態檔不存在時」兩列改寫成「該 CLI 那份存在時」與「該 CLI 那份不存在時」,並寫明別支 CLI 的狀態檔不影響這一支。另外新增一段「狀態檔為什麼一支 CLI 一份」,記下 2026-08-27 部署時實測出的兩個缺陷,並把它寫成通則。

Why:準則是技能組的規則正本,`jsc-hooks` 的實作與 `jsc-cli` 的說明都對著它看。實作改成一支 CLI 一份而準則還停在單一檔案,下一次 skill-check 會判成實作違規,也可能有人照準則把實作改回去。這兩個缺陷是實測抓到的、不是推測,理由留在準則裡才擋得住下一次的簡化。

How:規則表只改該改的四列,判定位置與逃生門兩列不動。新增那段把缺陷寫清楚——並行部署互相覆蓋只留最後一支,以及任一支重啟就解除全部五支的閘門——再收成通則:跨 CLI 或跨工作階段的狀態檔,設計時先問清楚那個事實屬於誰,並指出工作包歸屬狀態檔踩過同一類錯誤。豁免清單那九支與「清單認技能名不認呼叫鏈」不動,這一輪沒有動到豁免範圍。

Who:`jsc-meta` 的技能準則,部署後重啟閘門這條規則的正本。
2026-08-27 18:49:59 +08:00
jiantw83 816fe07fbd chore(manifest): 三份 manifest 版本升到 0.1.4
What:`plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` 的 `version` 由 0.1.3 改為 0.1.4。

Why:本次準則新增 `SKILLSET` 頁型、部署後重啟閘門與流程檢查四項,`skill-check` 多了 marketplace 同步必經步驟,四支異動技能也多了收尾步驟,屬於行為變更,版本要跟著往上走,各 CLI 才知道要更新。

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

Who:`jsc-meta` 外掛的套件描述檔。
2026-08-27 16:34:16 +08:00
jiantw83 478f670d53 feat(skillset-report): 四支異動技能收尾套用到工作階段、驗證並寫異動報告
What:`skill-new`、`skill-update`、`skill-delete`、`skillset-update` 四支各新增一個收尾步驟,內含三個子步驟:把改動套用到目前工作階段、逐項驗證功能真的動得起來、把驗證結果附加到 wiki 的 `SKILLSET_{HASH}`。四支的 `description` 同步補上這段收尾。

Why:原本四支都以「開了 PR」作為收尾。PR 開完技能還沒進到任何 CLI,改動到底動不動得起來沒人驗過,壞了要等下一次有人踩到才知道。技能組的異動紀錄也一樣沒有落腳處:同一支技能改過幾次、每次改了什麼,只能翻 git 紀錄。

How:套用那一步分兩條路徑,依改動走到哪裡決定。PR 已經合併到 `master` 才走 `jsc-cli:deploy` 更新模式,並依提示重新啟動;PR 還停在 `develop` 或還在等審核,就改用工作樹驗證,報告標成「工作樹驗證、尚未部署」,並點名還沒合併的發佈 PR。分兩條路徑的理由是完成條件達不到:marketplace 與 `version-guard.sh` 都讀存取庫的預設分支,停在 `develop` 的改動 `deploy` 一定看不到,硬跑就卡在永遠達不到的完成條件上。驗證那一步要求逐項比對結束碼與實際輸出,不接受「跑完沒報錯」;對不上就回到套用那一步重跑,不往下走。報告一律附加一節、不覆蓋舊節,要看一支技能改過幾次就在同一頁上翻;寫不進去就把頁名與未寫入的內容交回使用者,這一步留著不結案。

Who:`jsc-meta` 的四支技能組異動技能,以及日後查技能組異動紀錄的人。
2026-08-27 16:34:16 +08:00
jiantw83 9a0ea8e248 feat(skill-check): 稽核加入 marketplace 同步必經步驟與流程檢查四項
What:`skills/skill-check/SKILL.md` 兩處增修。第 2 步的稽核範圍明寫要逐項涵蓋準則的流程檢查四項,四項各列一條,完成條件改成「每個 domain 的稽核結果對所有清單項目都有結論,含這四項」;新增第 5 步「同步 marketplace 正本」,四個結束碼各自寫明怎麼處理,原本的複查與開 PR 順延為第 6、7 步。

Why:`sync-marketplace.sh` 原本沒有出現在任何技能流程裡,跑不跑全憑人記得。正本在 `plugins/meta`,每個 domain 存取庫各留一份位元組完全相同的副本,稽核改完不同步,就會有存取庫註冊到過期的 plugin 清單。流程檢查四項同理:準則加了項目,稽核不點名就沒有人會查,四項等於沒加。

How:同步列為必經步驟,不是選項。呼叫時拿既有項目自己現在的值重寫一次,重寫同一筆是冪等的,所以不必先判斷哪一筆該改。四個結束碼逐一分流:3 是寫好了但有 domain 沒 clone 到本機,先跑 `sync-domains.sh` 再重跑;2 是參數個數不對;1 是缺 python3、正本讀不到或副本位元組不一致;0 才代表每份副本完全相同,而且是腳本自己驗過的。

Who:`jsc-meta:skill-check` 的例行合規稽核流程。
2026-08-27 16:34:16 +08:00
jiantw83 6447416c7b docs(guidelines): 準則新增 SKILLSET 頁型、部署後重啟閘門與流程檢查四項
What:`references/guidelines.md` 四處增修。環境變數表新增 `JSC_WIKI_REPO_SKILLSET` 與 `JSC_RESTART_GATE` 兩列;wiki 頁命名總表新增 `SKILLSET` 一列,並補上雜湊來源為被改動的 domain 存取庫 `{owner}/{repo}`、頁內累積歷次異動兩段說明;新增「部署後重啟閘門」一節,用表寫下狀態檔、清除時機、判定位置與逃生門,另附九支豁免技能的表與「清單認的是技能名,不是呼叫鏈」一段;審核檢查清單末尾新增流程檢查四項。

Why:這批規則要落到四個 domain 的腳本與技能裡,準則是它們的唯一真實來源。規則只留在各自的實作裡,改一邊忘一邊,稽核就沒有對照標準。三件事各有各的理由:`SKILLSET` 頁型讓技能組每次異動留下查得到的驗證紀錄;重啟閘門補上「部署換掉的是磁碟上的技能檔,工作階段載入的還是舊版」這段落差;流程檢查四項把過去踩過的坑寫成逐項確認得出來的項目。

How:閘門那一節刻意把每一支的「為什麼不能擋」逐支寫出來,不只列技能名——豁免清單日後要增刪,理由沒寫下來就得重新想一次。九支的理由收斂成同一件事:部署後還要寫得完技能組異動報告與工作日誌,整批擋下去「先重啟」與「先寫完報告」會互相打死,通則另外寫進流程檢查第 4 項「閘門不自鎖」。「清單認技能名不認呼叫鏈」單獨寫一段,因為後三支(`jsc-ask:ask`、`jsc-git:pr`、`jsc-git:commit`)自己不是收尾規則的主體,是為了讓前六支走得完才補進來的,日後增豁免時要一併想它會呼叫誰。流程檢查其中兩項附上踩過的實例,抽象敘述判不出來的,看實例就判得出來。

Who:`jsc-meta` 的技能準則,以及依準則稽核的 `skill-check` 與四支技能組異動技能。
2026-08-27 16:34:16 +08:00
jiantw83 47c479d65c Merge pull request 'docs(meta): 技能準則新增 PR 分支階梯與盯場輪詢間隔' (#23) from feat/sdlc-flow-rules/main into develop 2026-08-27 03:39:39 +00:00
jiantw83 02b36a315c chore(manifest): 三份 manifest 版本升到 0.1.3
What:`plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` 的 `version` 由 0.1.2 改為 0.1.3。

Why:技能準則新增了一節規則與一項稽核檢查,準則有異動就要 bump 版本,安裝端才拿得到新版。

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

Who:`jsc-meta` 外掛的套件描述檔。
2026-08-27 11:20:30 +08:00
jiantw83 769d8f3f33 docs(guidelines): 準則新增 PR 分支階梯與盯場輪詢間隔
What:`references/guidelines.md` 新增「PR 分支階梯」一節,列出兩種型別的階梯、多層子功能的組法、base 一律由 `jsc-git/tools/base-branch.sh --derive` 推導、功能主幹自動建立,以及最後一級不能省;環境變數表補上 `JSC_PR_WATCH_INTERVAL`;稽核檢查清單新增一項「PR 的 base 符合 PR 分支階梯,沒有越級」。

Why:階梯要對所有存取庫成立,就必須有一份正本。放在技能準則裡,各 domain 的 README 與參考文件才能只寫摘要並指回來,不會養出好幾份互相打架的規則;稽核清單少了這一項,越級開的 PR 也沒有任何一關會發現。

How:階梯只寫表與六條說明,不寫實作細節,推導行為的正本仍在 `jsc-git/tools/base-branch.sh`。特別寫明第 4 條「推不出唯一合法基底就中止並詢問使用者,不猜,也不退回 `develop`」與第 6 條「`develop` 併進 `master` 才會生效」——marketplace 與 `version-guard.sh` 讀的都是存取庫的預設分支,階梯最後一級省掉就等於沒有發布。

Who:所有 jsc domain 存取庫的 PR,以及跑 `jsc-meta:skill-check` 稽核的人。
2026-08-27 11:20:30 +08:00
jiantw83 69003a7d2c fix(lint): 修正簡體字並把規則實作本身加進跳過清單
What:把 sync-domains.sh 檔頭註解的簡體字「脏」改成正體「髒」;ste100-lint.sh 的
skip() 新增三個檔案:jsc-hooks 的 simplified.txt、ste100-guard.sh、lang-guard.sh。

Why:「脏」是既有的簡體字,擴充字表後才驗出來,正好證明檢查有效。另外三個檔案
裡的簡體字是被列舉、被討論的對象,不是被使用;掃它們會每次都命中卻永遠改不掉,
久了就會有人乾脆把整個檢查關掉。

How:skip() 沿用既有的 case 比對,同時吃絕對路徑與純檔名兩種寫法,並在註解裡
寫明為什麼要跳過,避免後人誤以為是漏掉。

Who:STE100 語言規則的機檢工具。
2026-08-27 09:50:42 +08:00
jiantw83 7a2544772f feat(manifest): 三份 manifest 版本升到 0.1.2
What
- `plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` 由 0.1.1 升到 0.1.2。

Why
- STE100 規則正文與機檢工具都有變更,安裝端要靠版本號才知道該更新。

How
- 跑 `sh tools/sync-skill-manifest.sh /root/plugins/meta`,三份 manifest 一起 bump,
  README 的「Skills 目錄」無增減。

Who
- 影響安裝或更新 jsc-meta 的所有 CLI。
2026-08-27 09:43:20 +08:00
jiantw83 7c963b73cf feat(lint): 機檢改讀共用簡體字表、加亂碼類別、掃描擴及程式碼檔
What
- 簡體字表改成優先讀 jsc-hooks 的 `hooks/simplified.txt`,讀不到才退回內建備援字表。
- 新增「亂碼」類別:U+FFFD 替代字元、雙重編碼的 `�`,以及 Latin-1 雙重編碼特徵。
- 掃描範圍加入程式碼檔(sh、js、ts、py、cs、java、go、rb、php、sql、yml、yaml、toml)。
- 檔頭註解補上分流理由,並把本檔自己加進跳過清單。

Why
- 字表寫死在本檔,和 hook 端的守門字表各自維護,兩邊遲早不一致;真實來源只該有一份。
- 內建備援不能拿掉:jsc-hooks 不一定裝在這台機器上,單獨 clone plugins/meta 或 CI 只取
  一個 repo 都會發生。缺基礎設施就讓簡體字檢查靜靜失效,會把「沒命中」變成假通過。
- 新規則要求所有非程式碼輸出無亂碼、無簡體字,程式碼註解也算,所以檢查得看得到程式碼檔。

How
- `simplified_file()` 的搜尋路徑比照 `jsc-hooks/hooks/lib.sh` 的 `jsc_gitea_sh()`:先環境變數
  `JSC_SIMPLIFIED_FILE`,再並排存取庫版面,最後已安裝的 plugin 快取版面取版本排序最後一份。
- 字表格式一行一個字,`#` 開頭與空行忽略,串成 grep -E 交替式。
- 分流:`.md` 與 `.json` 跑全部六項;程式碼檔只跑簡體字與亂碼。中國用語、半形標點、AI 套話、
  並列斜線這四項在程式碼裡會被英文標點、路徑、URL、正規表示式大量誤報,留著只會讓人忽略輸出。
- 亂碼樣式一律用十六進位跳脫寫,本檔才不會存進真的亂碼字元自己打自己。

Who
- 影響跑 `tools/ste100-lint.sh` 的人與 `jsc-meta:skill-check`、`jsc-meta:ste100-sync` 兩支技能。
2026-08-27 09:43:20 +08:00
jiantw83 19303ca555 feat(ste100): 語言規則納入適用範圍與編碼要求
What
- `references/ste100.md` 新增「適用範圍」與「編碼」兩節,並以表格列出各類輸出是否適用。
- 「機檢」一節補上新的類別清單與文件檔、程式碼檔的分流說明。
- `references/guidelines.md`「語言」第 1 條改寫成「所有非程式碼輸出一律繁體中文、UTF-8、
  無亂碼、無簡體字」,並以一行指引指回 `references/ste100.md`。
- 「審核檢查清單」新增一個可勾選項目,涵蓋非程式碼輸出的語言與編碼,且要求機檢全綠。

Why
- 舊條文只講「交談與輸出內容」用 STE100 繁中,沒有把程式碼註解、commit 訊息、PR 描述、
  wiki 頁這些實際會產出的東西點名,執行時容易各自解讀。
- 編碼要求原本只有基礎紀律裡的一句「UTF-8,無亂碼」,沒有說明什麼算亂碼,也沒有寫明
  不得出現簡體字,機檢與人工判讀對不上。

How
- 適用範圍用表格逐項標「是」或「否」,並明講程式碼識別字、關鍵字、API 名稱不受限,
  SKILL.md 維持整份英文。
- 編碼用表格寫要求、內容與常見違規,違規範例直接對應機檢的「亂碼」類別。
- 細節只寫在 `references/ste100.md` 一處,guidelines.md 只留摘要與指引,維持單一真實來源。

Who
- 影響所有 jsc 技能的輸出與審核;撰寫技能與跑 `jsc-meta:skill-check` 的人要照新清單檢查。
2026-08-27 09:43:20 +08:00
jiantw83 d9d1dafe6e docs(guidelines): 準則新增 CHECK 與 REPORT 兩種 wiki 頁類型
What: wiki 頁命名總表加入 CHECK(擁有者 jsc-cli)與 REPORT(擁有者 jsc-log),環境變數表加入 JSC_WIKI_REPO_CHECK 與 JSC_WIKI_REPO_REPORT,並補上兩者的雜湊來源規則。
Why: 準則是這兩張總表的唯一真實來源。新頁類型只加進程式的白名單而沒寫進準則,下一次審核就會把它們當成漏網項目。
How: CHECK 記的是一台執行環境而不是存取庫,雜湊來源改用 {主機名}/{登入帳號},是總表的唯一例外,明文寫清楚為什麼。REPORT 用既有的「加上主題字串」規則,雜湊來源為 {owner}/{repo}/{期間},年月週日各一頁。
Who: wiki 頁面命名與 wiki 存取庫解析。
2026-08-26 10:46:11 +08:00
jiantw83 fbb7004e70 fix(meta): 放寬 major 版本限制 2026-08-25 16:41:57 +08:00
jiantw83 acbbd30a0f fix(meta): 版本號改為單位數進位 2026-08-25 16:40:01 +08:00
jiantw83andClaude Opus 5 bdfea58fab chore(meta): 三份 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 073c51e145 docs(meta): 同步文件與參考資料
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 9ab5b42864 fix(meta): 補齊稽核缺失並修掉護欄失效
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 262c02e38d 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 7eb179f3a1 docs(guidelines): 新增版本前置檢查規範與豁免清單
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-25 11:52:38 +08:00
jiantw83andClaude Opus 5 3435644801 chore(plugin 版本): 三份 manifest 升版至 0.0.7
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 18:00:35 +08:00
jiantw83andClaude Opus 5 98bc02578d refactor(marketplace 正本): 正本與權威來源改為 plugins/meta,移除對 plugins/jsc 的相依
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 18:00:35 +08:00
jiantw83andClaude Opus 5 58bcaa50e5 chore(plugin 版本): 三份 manifest 升版至 0.0.6
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 17:24:45 +08:00
jiantw83andClaude Opus 5 a87946784b docs(guidelines): 新增 DELIVER 頁型與 JSC_WIKI_REPO_DELIVER 環境變數
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 17:24:45 +08:00
jiantw83 ef974b4ef5 fix(meta): 修正外掛描述標點並同步版本號至 0.0.5
什麼:將 plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json 三份 manifest 中 jsc-meta 自身的 description 由斜線「新建/更新/刪除」改為頓號「新建、更新、刪除」,並將 version 由 0.0.4 一併提升至 0.0.5。
為何:斜線列舉違反 STE100 純敘述、不用斜線分隔清單的規則,描述文字修正後三份 manifest 需要對應 bump 版本以標示這次的合規性修正。
如何:三份 manifest 同步套用相同的標點修正與版本號更新,確保 claude、codex 兩種外掛載入路徑與根目錄 plugin.json 三者版本與描述一致。
負責範圍:jsc-meta 外掛自身的合規性修正與版本標示;skill-delete、skill-update 兩支 SKILL.md 的 description 精簡改動已隨其步驟修改一併納入 Group B 的提交。
2026-08-24 14:49:37 +08:00
jiantw83 4454d62e82 feat(meta): 抽出技能目錄同步與引用查找為共用工具
什麼:新增 tools/sync-skill-manifest.sh(重建 domain README 的「Skills 目錄」區塊並將三份 plugin manifest 的版本一併 bump)與 tools/find-skill-refs.sh(掃描所有 jsc domain 存取庫,列出技能名稱或 /jsc-{domain}:{name} 指令形式的引用檔案),並更新 skill-check、skill-delete、skill-new、skill-update、skillset-update 五支 SKILL.md 改為呼叫這兩支工具。skill-delete 與 skill-update 的 frontmatter description 也一併收斂在此次改動內,配合本次流程調整精簡文字。
為何:五支技能先前各自以近乎相同的內嵌文字描述「同步 README、bump 版本」的機械流程,重複維護成本高且容易漂移;skill-delete 的引用盤點步驟先前只是一段沒有工具、也沒有標明子代理人的裸 grep 指示,稽核時難以驗證涵蓋範圍。
如何:把兩段機械流程各自抽成一支冪等 shell 工具,五支技能的對應步驟改為「子代理人只做內容判斷與修改,機械式同步與版本 bump 一律呼叫工具」;skill-delete 步驟 4 改呼叫 find-skill-refs.sh 取代裸 grep 說明。
負責範圍:jsc-meta 技能組自我管理,skill-check、skill-delete、skill-new、skill-update、skillset-update 五支技能共用的機械流程去重。
2026-08-24 14:49:23 +08:00
jiantw83 720ec6194e fix(marketplace): 同步 marketplace.json 至權威格式並修正標點
什麼:為 .agents/plugins/marketplace.json 與 .claude-plugin/marketplace.json 補齊每個 plugin 條目缺少的 description 與 marketplace 層級的 description、owner 欄位,並將 jsc-meta 條目描述中的斜線「新建/更新/刪除」改為頓號「新建、更新、刪除」以符合 STE100。
為何:兩份 marketplace.json 先前落後於 plugins/jsc 的權威版本,缺少說明文字會讓使用者在瀏覽 marketplace 時看不到各外掛用途,斜線清單也違反 STE100 純敘述、不用斜線列舉的規則。
如何:以 plugins/jsc 的 marketplace.json 為基準,逐一補上缺漏的 description 與 owner 欄位,並將受影響條目的標點改為頓號。
負責範圍:jsc-meta skill-check 例行合規稽核,marketplace 中繼資料同步項目。
2026-08-24 14:49:06 +08:00
jiantw83andClaude Fable 5 1fdfdaf15a chore(manifest): 版本號提升至 0.0.4
What:將 plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json 三份 manifest 的 version 由 0.0.3 提升至 0.0.4。

Why:guidelines.md 新增 LEARN 頁型與 JSC_WIKI_REPO_LEARN 屬於準則內容變更,需要發布新版本讓各 CLI 更新取得。

How:同步修改三份 manifest 的 version 欄位,保持三處版本號一致。

Who:jsc-meta 技能組(manifest 維護)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 11:36:59 +08:00
jiantw83andClaude Fable 5 85cfa77ed1 docs(guidelines): 新增 LEARN 頁型與 JSC_WIKI_REPO_LEARN 環境變數
What:在 references/guidelines.md 的 wiki 頁命名總表新增 LEARN 頁型(LEARN_CONTENTS 教訓目錄、LEARN_{HASH} 技能教訓頁),並在環境變數表新增 JSC_WIKI_REPO_LEARN,未設定時退回 JSC_WIKI_REPO。

Why:jsc-log 新增 learn 技能,需要在準則中收錄對應的 wiki 頁型與環境變數,讓各技能對頁面命名與 wiki 存取庫解析有一致依據。

How:比照既有 LOG/ERROR 頁型格式,於環境變數表與頁命名總表各補一列,維持表格欄位與退回規則一致。

Who:jsc-log(learn 技能)為此頁型的擁有者。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 11:36:48 +08:00
jiantw83 3c63989f80 fix(skill-check): 補強工具化與環境優先審核 2026-08-21 16:53:17 +00:00
jiantw83andClaude Fable 5 314d844325 chore(manifest): jsc-meta 版本 0.0.2 → 0.0.3
What(改了什麼):
- 三份 plugin manifest(plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json)的 version 由 0.0.2 遞增為 0.0.3。

Why(為什麼改):
- 本次變更新增技能 skill-check;依 guidelines 準則,技能異動必須同步遞增三份 manifest 的版本。

How(怎麼改):
- 各檔僅改 version 欄位一行,其餘欄位不動,三份保持一致。

Who(影響哪個功能/使用者):
- 透過 jsc marketplace 安裝或更新 jsc-meta 的所有 CLI 使用者;版本號變更讓各 CLI 能偵測到更新。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 09:25:59 +00:00
jiantw83andClaude Fable 5 ef2577c011 feat(skill-check): 新增 skill-check 技能——例行稽核整個技能組是否符合準則
What(改了什麼):
- 新增 skills/skill-check/SKILL.md:六步流程——依 Gitea 正本 marketplace 同步全部 domain repo → 每個 domain 各派一個 sub agent 對照 guidelines 審核檢查清單稽核 → 不符項目逐項走 jsc-ask:ask 決策樹確認(套用建議修正/略過/自訂修正,每個選項標明影響範圍)→ 每個受影響 repo 各派一個 sub agent 套用修正(含 README「Skills 目錄」同步與三份 manifest 版本遞增)→ 複檢至全數通過 → 逐 repo 以 jsc-git:pr 開 PR。
- README.md「Skills 目錄」新增 skill-check 條目,並標明與 skillset-update 的分工:無變更需求走 skill-check,有變更需求走 skillset-update。

Why(為什麼改):
- 既有 skillset-update 以「一份變更需求」為前提;準則本身演進後,技能組缺少「無變更需求時」的例行體檢入口,不符項目只能等到下次改動才被發現。
- 稽核與修正拆成獨立技能,可排入定期維護,讓整個技能組持續符合 guidelines.md。

How(怎麼改):
- 依 guidelines.md 準則撰寫:英文 description 含觸發與不觸發時機(套用變更需求改用 skillset-update、單一技能改用 skill-update)、Gitea 操作一律走 jsc-gitea/tools/gitea.sh、提問一律走 jsc-ask:ask、需隔離的步驟標明 MUST run as a sub agent、每步標明完成條件。
- 複檢失敗時明定回到決策樹確認步驟,直到檢查清單全數通過才開 PR。

Who(影響哪個功能/使用者):
- 負責 jsc 技能組例行維護的維護者;一般技能新增、更新、刪除的使用者不受影響(仍走 skill-new/skill-update/skill-delete)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 09:25:59 +00:00
jiantw83andClaude Fable 5 24b350880c chore(manifest): jsc-meta 版本 0.0.1 → 0.0.2
What(改了什麼):
- 三份 plugin manifest(plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json)的 version 由 0.0.1 遞增為 0.0.2。

Why(為什麼改):
- 本次變更含技能流程更新(skill-update/skill-delete/skill-new)與新技能 skillset-update;依 guidelines 準則,技能異動必須同步遞增三份 manifest 的版本。

How(怎麼改):
- 各檔僅改 version 欄位一行,其餘欄位不動,三份保持一致。

Who(影響哪個功能/使用者):
- 透過 jsc marketplace 安裝或更新 jsc-meta 的所有 CLI 使用者;版本號變更讓各 CLI 能偵測到更新。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 08:23:53 +00:00
jiantw83andClaude Fable 5 dd04781058 docs(guidelines): 補記 gitea.sh 的 tea 登入金鑰備援機制
What(改了什麼):
- 「技能設計」第 2 條補充:gitea.sh 在 token 未設定或收到 401/403 時,會自動改用 tea 的登入金鑰重試一次。
- 環境變數表 GITEA_TOKEN 的「未設定時」欄位由「詢問使用者」改為「改用 tea 登入金鑰(tea login list);tea 也沒有才詢問使用者」。

Why(為什麼改):
- gitea.sh 已實作 tea token 備援,但準則文件未記載;技能作者與審核者依文件行事,文件落後會導致誤判認證失敗的處理方式。

How(怎麼改):
- 僅更新 references/guidelines.md 兩處文字,與 jsc-gitea/tools/gitea.sh 的實際行為對齊,不動任何流程或工具。

Who(影響哪個功能/使用者):
- 所有依 guidelines.md 撰寫或審核 jsc 技能的維護者;使用 gitea.sh 的技能在 token 失效時的預期行為自此有文件依據。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 08:23:53 +00:00
jiantw83andClaude Fable 5 30687d5eea feat(skillset-update): 新增 skillset-update 技能——一份變更需求批次套用到整個技能組
What(改了什麼):
- 新增 skills/skillset-update/SKILL.md:五步流程——決策樹確認變更範圍 → 依 Gitea 正本 marketplace 同步全部 domain repo → 每個受影響 domain 各派一個 sub agent 套用變更(含 README「Skills 目錄」同步與三份 manifest 版本遞增)→ 逐技能過 guidelines 審核檢查清單 → 每個受影響 repo 各開一個 PR。
- README.md「Skills 目錄」新增 skillset-update 條目,並同步更新 skill-update 與 skill-delete 的流程描述(marketplace 先行、補 clone、深度刪除驗證)。

Why(為什麼改):
- 既有 skill-update 一次只能改一個技能;跨多技能、多 domain 的規則變更(如共用流程步驟調整)需要逐 repo 重複操作,容易漏改。
- README 需與技能實際流程保持同步,此為 guidelines 審核檢查清單的必要項目。

How(怎麼改):
- 依 guidelines.md 準則撰寫:英文 description 含觸發與不觸發時機(單一技能改用 skill-update)、Gitea 操作一律走 jsc-gitea/tools/gitea.sh、提問一律走 jsc-ask:ask、需隔離的步驟標明 MUST run as a sub agent、每步標明完成條件。
- README 條目與各技能一節的敘述對齊 SKILL.md 的實際流程。
- 註:README.md 的三處變更位於同一個 diff hunk、無法乾淨拆分,故整檔併入本群組(本群組為最後一個觸及 README 的 feature 群組)。

Who(影響哪個功能/使用者):
- 需要對整個 jsc 技能組做橫向規則變更的維護者;單一技能更新的使用者不受影響(仍走 skill-update)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 08:23:53 +00:00
jiantw83andClaude Fable 5 b7287239cc feat(skill-ops): 技能管理流程改以 Gitea 正本 marketplace 為準並新增深度刪除驗證
What(改了什麼):
- skill-update:流程改為先呼叫 gitea.sh 取得 plugins/jsc marketplace.json 的 domain 清單,缺少的 domain repo 先 clone 再列出技能;原 6 步改為 7 步,description 同步更新。
- skill-delete:同樣先查 marketplace 並補 clone 缺少的 repo;刪除後新增第 7 步「深度刪除驗證」——由 sub agent 透過 detect-clis.sh 實地檢查每個已安裝 CLI 的技能與 hook 保存位置(如 Claude 的 ~/.claude/plugins/cache/ 與 settings 內的 hook 設定),確認無殘留,有殘留就手動清除並複查。
- skill-new:domain 在 Gitea 已存在但工作目錄缺少時,改為 clone 既有 repo 後直接進入第 3 步,不再重建。

Why(為什麼改):
- 只掃本機 jsc-*/skills 會漏掉尚未 clone 的 domain,技能清單不完整;正本 marketplace 才是權威來源。
- 刪除技能後各 CLI 的快取與 hook 設定可能殘留,僅執行原生刪除指令不足以保證乾淨。
- domain repo 已存在卻重建會蓋掉既有內容。

How(怎麼改):
- 三個 SKILL.md 的 Flow 前段統一加入「gitea.sh api GET /repos/plugins/jsc/raw/.claude-plugin/marketplace.json 取得 domain 清單 → gitea.sh clone-url 補 clone → 重掃」步驟,並標明完成條件。
- skill-delete 新增 MUST run as a sub agent 的深度驗證步驟,涵蓋 claude / codex / copilot / antigravity / kiro 的對應保存位置。
- 後續步驟編號與回跳目標(如「回到步驟 5.2」)同步修正。

Who(影響哪個功能/使用者):
- 使用 jsc-meta:skill-update、skill-delete、skill-new 的所有使用者;技能清單自此涵蓋全部 marketplace domain,刪除技能後保證各 CLI 無殘留。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 08:23:53 +00:00
jiantw83andClaude Fable 5 a2057ad3e4 feat(meta): 準則改為每個存取庫都帶統一 marketplace 副本並同步
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:37:49 +08:00
jiantw83andClaude Fable 5 2602e86514 chore(meta): 加入統一 jsc marketplace 副本(與正本一致,任一 repo 可作註冊入口)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:37:49 +08:00
jiantw83andClaude Fable 5 7283fea040 docs(meta): translate SKILL.md into English per guidelines
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:28:37 +08:00
jiantw83andClaude Fable 5 526c6c2b93 feat(meta): 新增 ste100-sync 技能——同步上游 speak-human-tw 並釘住版本 v1.4.0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:27:39 +08:00
jiantw83andClaude Fable 5 e2248493bb feat(meta): 準則改為技能文件整份英文,並明定中文並列用頓號
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:25:24 +08:00
jiantw83andClaude Fable 5 f1f7e6163a feat(meta): 新增 tools/ste100-lint.sh 語言機檢工具並補列參考表
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:18:42 +08:00
jiantw83andClaude Fable 5 9e9db57f7a style(meta): 依 STE100 擬人台灣感規則改寫語感
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:16:43 +08:00
jiantw83andClaude Fable 5 93b7f52ca9 feat(meta): STE100 擬人台灣感規則——新增 references/ste100.md(改寫自 speak-human-tw,MIT)並更新準則語言節
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:13:27 +08:00
jiantw83andClaude Fable 5 66fa5e4aad docs(meta): README 安裝/更新/移除改為每指令一行(五個 CLI)並為相關 domain 加上 repo 連結
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:03:37 +08:00
jiantw83andClaude Fable 5 5695e3fe06 feat(meta): 準則改為統一 marketplace jsc 與版本 0.0.1 起算
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:03:37 +08:00
jiantw83andClaude Fable 5 eb7e33fbf1 chore(meta): 版本號改為 0.0.1 並移除個別 marketplace(統一為 jsc)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 14:03:37 +08:00
jiantw83andClaude Fable 5 b6a3ef1f26 docs(meta): 以統一格式改寫繁體中文 README 與 AGENTS
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 13:08:43 +08:00
jiantw83andClaude Fable 5 6be3e7fc77 feat(meta): 匯入 jsc-meta 技能組
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 13:08:43 +08:00
jiantw83andClaude Fable 5 12a90e5f58 chore(meta): 修正範本 manifest 與移除 hello 範例符合 meta 領域
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 13:08:18 +08:00
jiantw83 d759ea9208 Initial commit 2026-08-21 04:44:34 +00:00