feat(git-safety,model): 分支一律先確認、模型 id 改以 transcript 實際值為準

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-24 17:24:45 +08:00
co-authored by Claude Opus 5
parent ca53be3011
commit 20cc363c23
2 changed files with 38 additions and 3 deletions
+21 -1
View File
@@ -40,6 +40,20 @@ description: JSC plugins 共用「取得可用模型並加上標籤」規範:
同一任務有多個候選都滿足必要標籤時,優先挑加分標籤命中較多者;仍並列則挑 `verified_at`(見〔四、快取設計〕)較新者。
### 與 SDLC 閘門標籤的對應
`jsc-cli/references/model-tags.md` 另有一組供程式判定用的英文標籤(機器可讀,`model-tags.sh` 與 `sdlc-gate.sh` 直接比對字面)。兩組標籤的對應如下,**新增或改名任一邊都要同步另一邊**:
| 本規範標籤 | model-tags.md 標籤 |
| --- | --- |
| `#深度推理`(頂級一階) | `reasoning-max` |
| `#深度推理`(可判讀規格) | `reasoning-high` |
| `#均衡實作` | `coding` |
| `#輕量快速` | `fast`、`cheap` |
| `#長上下文` | `long-context` |
SDLC 各階段的放行判定一律以 `model-tags.md` 的英文標籤為準;本節的中文標籤用於選型說明與人讀敘述。
## 三、取得清單的權威來源優先序
依序取得可用模型清單與其中繼資料(id/定價/上下文長度),**前一項可取得就不往下**:
@@ -87,7 +101,13 @@ description: JSC plugins 共用「取得可用模型並加上標籤」規範:
請執行 /model <alias> 切換後重新載入,本次不進行任何修改。
```
- **限制**:Claude Code **沒有環境變數可讀取當前模型 id**,只能以 agent 對自己當下模型的自我回報為準;自我回報不確定時,請使用者執行 `/status` 確認目前模型後再繼續判斷,不得用猜測代替確認。
- **取得當前模型 id 的優先序**(前一項可取得就不往下):
1. **transcript 記錄的實際值**——hook 收到的 stdin JSON 有 `transcript_path`,該 jsonl 每筆 assistant 訊息都帶 `model` 欄位;取尾端最後一筆即為實際使用的模型。實作見 `jsc-hooks/hooks/lib.sh` 的 `transcript_model`。**這是唯一可驗證的來源**,SDLC 階段閘門(`jsc-hooks/hooks/sdlc-gate.sh`)一律以它為準。
2. stdin JSON 的 `model` 欄位、環境變數 `JSC_MODEL`、`~/.claude/settings.json` 的 `model`——都是宣告值,未必等於實際跑的模型。
3. **agent 自我回報**——只在以上都取不到時當最後手段。自我回報無法驗證:模型可以宣稱自己具備某標籤而沒有任何東西擋得住,**因此不得作為放行依據**。不確定時請使用者執行 `/status` 確認,不得用猜測代替確認。
- **強制力落在程式層**:任何「必須用某能力的模型才能執行」的規則,判定都要由腳本做完並以 exit code 表態;只把要求寫在 skill 內文、交給模型自我檢查,等於沒有閘門。
## 六、讀到帶 `model:` frontmatter 的清單檔時的檢查義務