核心矛盾:測什麼?
Skill 主體是給 LLM 看的文件。「測試一個 skill」必須分層:
| 層級 | 測什麼 | 成本 |
|---|---|---|
| Static | frontmatter 完整、必要章節存在、無 TODO 殘留 | 毫秒,無 API |
| Behavioral | 內附 scripts/ 能正常退出 | 秒,無 API |
| LLM-driven | trigger prompt 能否正確觸發 | 慢、貴、flaky(延後) |
MVP 選 Static + Behavioral:cheap、deterministic、能在 sgov bump
前自動跑、能抓 90% 退化。LLM 層留給 Phase 3.1。
三維治理
| 維度 | 機制 |
|---|---|
| Version | SemVer + tar.gz 快照 + Changelog + 鎖定快照 |
| Audit | Hook + JSONL + SQLite + sgov audit,新調用即時記錄 |
| Maintainability | 14 個 rules + default suite + custom spec + bump regression gate |
Baseline Sweep 揪出的真問題
1,290 個測試案例,99.77% 通過(1,287/1,290)。
失敗的那幾個正是價值所在:skill-stocktake frontmatter 缺
name:(list 看不出,因為 scan 用目錄名 fallback);
perl-testing 內文還有未完成的 TODO:。
關鍵教訓
default spec 自動套用:215 個 skill 不可能逐一手寫 spec。預設套件讓 sgov test all 第一天就有用。
規則用裝飾器註冊:@rule("name") 一行加一個規則;class 階層對 14 個簡單規則太重。維持 stdlib-only。
逃生口要可稽核:bump gate 允許 --skip-tests,但 audit log 會記錄這個規避事件。
一個壞規則不該炸掉整個 sweep:每個規則包 try/except,crash 視為 fail 並繼續。
來源:個人開發日誌 2026-05-15(Phase 1a–3 + baseline fixes)· v1.0.0 · 3,000+ 行 Python · 215 skills 入冊