「待修項目」表原本由 doctor 與 setup 各寫一次。同一套合併與排序規則寫在 兩個地方,遲早各自漂移:一邊改了排序,另一邊漏掉一整類項目,而且沒有 任何地方看得出來。現在規則只留一份,兩支技能都呼叫它。輸入與輸出都是 TSV,一項都沒有時照樣印一列,呼叫端永遠有東西可以呈現。 doctor 的四項檢查彼此不共用資料,排成一列跑只是把等待時間乘上四倍, 現在同時啟動。doctor 呼叫接線腳本一律帶唯讀旗標,把「打錯一個子命令就 改到或刪掉檔案」的風險移進程式層,不再只靠指令打對。 deploy 的 CLI 偵測、版本結論與 marketplace 清單同樣互不相干,改成併行 取得。版本結論改讀版本守門腳本的單行結論,不再自己從表格推導。setup 把 已經確認過的模式與版本報告直接交給 deploy,操作者不必再答一次同樣的問題。 deploy、doctor、models 都補上結束碼分流:腳本回什麼碼就走哪條路,不再從 輸出內容猜。體檢目錄頁改成先讀回再更新自己那一列,整頁覆蓋會把別台機器 的紀錄一次抹掉。設定規格表補上技能盤點頁要用的環境變數,盤點頁才有地方 可寫。
8.0 KiB
8.0 KiB
| 1 | # config-spec.tsv — jsc 技能組的設定規格表。體檢(/jsc-cli:doctor)與設定(/jsc-cli:setup)共用這一份。 | |||||||
|---|---|---|---|---|---|---|---|---|
| 2 | # | |||||||
| 3 | # 這張表是「必要或選擇」的唯一判準。掃描原始碼分不出必要與選擇,也分不出哪些是執行期內部 | |||||||
| 4 | # 變數,所以判準用手寫規格表,掃描只負責抓出漏登錄的項目(scan-config.sh orphans)。 | |||||||
| 5 | # 新增環境變數或設定檔時,同時補一列進來,體檢才看得到它。 | |||||||
| 6 | # | |||||||
| 7 | # 欄位:key<TAB>kind<TAB>scope<TAB>required<TAB>default<TAB>verify<TAB>fix<TAB>desc | |||||||
| 8 | # kind env=環境變數 file=檔案或目錄 internal=執行期內部變數(體檢略過,只為登錄而存在) | |||||||
| 9 | # scope global=整台機器 project=當前工作目錄 runtime=hook 執行當下才存在 | |||||||
| 10 | # required yes=缺了就有技能跑不動 no=選擇性,缺了走預設或降級 | |||||||
| 11 | # default 未設定時的實際值;沒有預設寫 - | |||||||
| 12 | # verify set=有值即可 dir=目錄要在 file=檔案要在 gitea-api=站台連得上 | |||||||
| 13 | # gitea-auth=認證過得了 wiki-repo=值可解析成 {owner}/{repo} none=不驗 | |||||||
| 14 | # fix auto=工具算得出,可直接寫入 ask=值要人給,問完才寫 manual=只能人手動處理 -=不需修 | |||||||
| 15 | # desc 一句繁中說明,直接印給使用者看 | |||||||
| 16 | # | |||||||
| 17 | GITEA_HOST | env | global | yes | - | gitea-api | ask | Gitea 站台位址,所有 wiki 與 PR 操作的去處 |
| 18 | GITEA_TOKEN | env | global | yes | - | gitea-auth | ask | Gitea API token;未設定時退回 tea CLI 的登入金鑰 |
| 19 | JSC_HOME | env | global | no | ~/.jsc | dir | auto | hook 資料目錄,放工作階段計時、用量統計、版本快取 |
| 20 | JSC_WIKI_REPO | env | global | no | - | wiki-repo | ask | 未逐類設定時的共用 wiki {owner}/{repo} |
| 21 | JSC_WIKI_REPO_QUESTION | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | QUESTION_CONTENTS、QUESTION_{HASH} 所在存取庫 |
| 22 | JSC_WIKI_REPO_PLAN | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | PLAN_CONTENTS、PLAN_{HASH} 所在存取庫 |
| 23 | JSC_WIKI_REPO_ANALYZE | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | ANALYZE_CONTENTS、ANALYZE_{HASH} 所在存取庫 |
| 24 | JSC_WIKI_REPO_DELIVER | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | DELIVER_CONTENTS、DELIVER_{HASH} 所在存取庫 |
| 25 | JSC_WIKI_REPO_MAINTAIN | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | MAINTAIN_CONTENTS、MAINTAIN_{HASH} 所在存取庫 |
| 26 | JSC_WIKI_REPO_REPO | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | REPO_CONTENTS、REPO_{HASH} 所在存取庫 |
| 27 | JSC_WIKI_REPO_LOG | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | LOG_CONTENTS、LOG_{HASH} 所在存取庫 |
| 28 | JSC_WIKI_REPO_LEARN | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | LEARN_CONTENTS、LEARN_{HASH} 所在存取庫 |
| 29 | JSC_WIKI_REPO_ERROR | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | ERROR_CONTENTS、ERROR_{HASH} 所在存取庫 |
| 30 | JSC_WIKI_REPO_CHECK | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | CHECK_CONTENTS、CHECK_{HASH} 所在存取庫,體檢紀錄寫在這裡 |
| 31 | JSC_WIKI_REPO_REPORT | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | REPORT_CONTENTS、REPORT_{HASH} 所在存取庫,年月週日報表寫在這裡 |
| 32 | JSC_VERSION_GUARD | env | global | no | on | set | ask | 設成 off 可完全略過版本前置檢查,離線工作時用 |
| 33 | JSC_VERSION_TTL | env | global | no | 600 | set | ask | 版本查詢快取秒數 |
| 34 | JSC_RESTART_GATE | env | global | no | on | set | ask | 設成 off 可略過部署後的重啟提示閘門,判讀在 jsc-hooks |
| 35 | JSC_WIKI_REPO_SKILLSET | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | SKILLSET_CONTENTS、SKILLSET_{HASH} 所在的 {owner}/{repo},技能組異動報告寫在這裡 |
| 36 | JSC_WIKI_REPO_TOOLING | env | global | no | JSC_WIKI_REPO | wiki-repo | ask | TOOLING_CONTENTS、TOOLING_{HASH} 所在的 {owner}/{repo},技能盤點寫在這裡 |
| 37 | JSC_LANG_GUARD | env | global | no | on | set | ask | 設成 off 可關閉繁中編碼與簡體字守門,誤判時用 |
| 38 | JSC_COMMENT_SCOPE | env | global | no | on | set | ask | 設成 off 可關閉註解夾帶文件編號的守門,誤判時用 |
| 39 | JSC_CHANGED_FILE | internal | runtime | no | - | none | - | 非 Claude CLI 傳入的變更檔路徑,註解範圍與繁中編碼守門讀它 |
| 40 | JSC_SIMPLIFIED_FILE | internal | runtime | no | - | none | - | 自訂簡體字表路徑,ste100-lint.sh 讀它取代內建字表 |
| 41 | JSC_PR_WATCH_INTERVAL | env | global | no | 60 | set | ask | pr-watch.sh 輪詢 PR 狀態的間隔秒數,實作在 jsc-gitea/tools/pr-watch.sh |
| 42 | JSC_LOCAL_PLUGINS | env | global | no | $JSC_HOME/plugins | dir | auto | antigravity 安裝來源的本地 plugin 目錄 |
| 43 | JSC_PLUGINS_ROOT | env | global | no | - | dir | ask | 技能組工作目錄根位置,jsc-meta 的工具用它找各 domain |
| 44 | JSC_CLAUDE_SETTINGS_DIR | env | global | no | ~/.claude | dir | ask | claude 使用者層設定檔目錄,測試 purge 時才需覆寫 |
| 45 | JSC_COPILOT_INSTRUCTIONS | env | global | no | ~/.config/copilot/copilot-instructions.md | file | ask | copilot 指引檔位置,STE100 規則段落寫在這裡 |
| 46 | JSC_ANTIGRAVITY_RULES | env | global | no | ~/.antigravity/AGENTS.md | file | ask | antigravity 全域規則檔位置 |
| 47 | JSC_KIRO_SKILLS | env | global | no | - | dir | ask | kiro 技能目錄,接線與部署都會用到 |
| 48 | JSC_GITEA_TOOLS | env | global | no | - | dir | ask | jsc-gitea/tools 的位置,跨 domain 呼叫 gitea.sh 時用 |
| 49 | $JSC_HOME/model-tags.tsv | file | global | yes | - | file | auto | SDLC 階段閘門讀的能力標籤表,由 /jsc-cli:models 產生 |
| 50 | $JSC_HOME/models.conf | file | global | no | - | file | ask | 各 SDLC 階段的偏好模型鏈,專案 .jsc/models 可覆寫 |
| 51 | $JSC_HOME/html-styles.conf | file | global | no | - | file | ask | 各類頁面的 HTML 匯出版型與樣式,專案 .jsc/html-styles 可覆寫 |
| 52 | $JSC_HOME/update-guide.md | file | global | no | - | file | manual | 這台機器的更新指引,由 jsc-cli/tools/write-guides.sh 產生;缺了就重跑 /jsc-cli:deploy |
| 53 | $JSC_HOME/remove-guide.md | file | global | no | - | file | manual | 這台機器的移除指引,由 jsc-cli/tools/write-guides.sh 產生;缺了就重跑 /jsc-cli:deploy |
| 54 | $JSC_HOME/restart-required.d | file | global | no | - | none | - | 部署收尾寫下的重啟狀態檔目錄,一支 CLI 一份,執行期暫態;該 CLI 那份不存在代表這支沒有待重啟的部署,jsc-hooks 讀它提示重啟 |
| 55 | .jsc/models | file | project | no | - | file | ask | 本專案的 SDLC 偏好模型鏈,覆寫 $JSC_HOME/models.conf |
| 56 | .jsc/html-styles | file | project | no | - | file | ask | 本專案的 HTML 匯出版型與樣式,覆寫 $JSC_HOME/html-styles.conf |
| 57 | .claude/settings.json | file | project | no | - | file | manual | claude 的專案層設定;jsc hook 由 plugin 的 hooks.json 接線,這裡不該有 jsc 殘留接線 |
| 58 | AGENTS.md | file | project | no | - | file | manual | codex 與 antigravity 讀的專案層指引檔 |
| 59 | .env | file | project | no | - | none | manual | 專案層環境變數;覆寫全域設定時,體檢會標出實際生效值 |
| 60 | .envrc | file | project | no | - | none | manual | direnv 設定檔;覆寫全域設定時,體檢會標出實際生效值 |
| 61 | JSC_CLI | internal | runtime | no | - | none | - | 接線時帶入的 CLI 代號,hook 用來分辨宿主 |
| 62 | JSC_SKILL | internal | runtime | no | - | none | - | 目前呼叫的技能名,版本前置檢查與用量統計用 |
| 63 | JSC_SESSION_ID | internal | runtime | no | - | none | - | 工作階段代號,計時與 token 統計用 |
| 64 | JSC_TOOL_NAME | internal | runtime | no | - | none | - | 目前的工具名,PreToolUse hook 用來比對 matcher |
| 65 | JSC_SCRIPT_DIR | internal | runtime | no | - | none | - | 呼叫端腳本所在目錄,由 lib.sh 算出 |
| 66 | JSC_HOOKS_DIR | internal | runtime | no | - | none | - | hooks 目錄位置,包裝啟動器用 |
| 67 | JSC_MODEL | internal | runtime | no | - | none | - | 目前模型 id,SDLC 閘門用來比對能力標籤 |
| 68 | JSC_GITEA_OWNER | internal | runtime | no | - | none | - | 批次同步存取庫時鎖定的 owner |
| 69 | JSC_DEPLOY_DRYRUN | internal | runtime | no | - | none | - | 部署試跑旗標,只印指令不執行 |
| 70 | JSC_WP_GATE | internal | runtime | no | - | none | - | 工作包閘門的逃生門,實作在 jsc-sdlc/tools/wp-gate.sh |
| 71 | JSC_CONFIG_SPEC | internal | runtime | no | - | none | - | 改讀別份設定規格表,測試 scan-config.sh 時用 |
| 72 | JSC_SYNC_DRY_RUN | internal | runtime | no | - | none | - | 同步 domain 存取庫的試跑旗標,只印不動檔案 |
| 73 | JSC_MK_DOMAIN | internal | runtime | no | - | none | - | sync-marketplace.sh 傳給 python 的 domain 名 |
| 74 | JSC_MK_URL | internal | runtime | no | - | none | - | sync-marketplace.sh 傳給 python 的存取庫網址 |
| 75 | JSC_MK_DESC | internal | runtime | no | - | none | - | sync-marketplace.sh 傳給 python 的 plugin 描述 |
| 76 | JSC_MK_IN | internal | runtime | no | - | none | - | sync-marketplace.sh 讀入的 marketplace 檔路徑 |
| 77 | JSC_MK_OUT | internal | runtime | no | - | none | - | sync-marketplace.sh 寫出的 marketplace 檔路徑 |