票上回碼解的保險寫回專案根,出貨線讀得到(inkstone/ISEP#156)

gitea-arm-to-github-armed.sh 原本用腳本自己的上一層決定 .github-armed 寫在哪;
plugin 發佈後那是 ~/.claude/plugins/cache/inkstone/isep/<ver>/,
於是保險寫進快取、印「已解」、ship.mjs 與各閘讀不到(arcrun-rag#202 c7598)。

改寫到 gitea_arm_proj_dir(${CLAUDE_PROJECT_DIR:-$(pwd)}),與
main-and-prod-push-guard/github-contact-guard/stage-before-prod-guard 讀的位置、
以及 check 自己讀 token/待核請求的位置一致。擋下時印的 request 路徑改絕對路徑。

測試:hooks/tests/gitea-arm-to-github-armed.test.sh 18/18;修之前 11 條紅。
TESTING.md 補 A42。版本待總管定。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-17 19:58:50 +08:00
parent ee4af97765
commit 5d938f5d3a
3 changed files with 179 additions and 4 deletions
+28
View File
@@ -1252,6 +1252,33 @@ bash scripts/test-isep-doctor-live.sh # 實機:真的 CLI 與 Desktop 內
- ⑨ 紅 ⇒ Desktop 版本用字串排序,`2.1.99` 會被當成比 `2.1.266`
- 實機測試印 SKIP ⇒ 這台的版本不是 2.1.220/2.1.266,行為可能不同,那一格**沒驗過**
### A42 — 票上回碼解的保險,寫在出貨線讀得到的地方:18 條
```
bash hooks/tests/gitea-arm-to-github-armed.test.sh .
```
**該看到**`通過 18 條,失敗 0 條`。**全程離線**:在 `mktemp` 裡造一個長得像
`~/.claude/plugins/cache/inkstone/isep/<ver>/` 的安裝位置與一個假的專案根,
「leo 已核准」由 stub 扮演;fail-closed 那組用**真的** `gitea-arm-check.sh`(沒有待核請求 → 本地就擋)。
**不碰真 InkStoneCo、不寫真的 `.github-armed`、不打 Gitea。**
(②a 會去讀 `InkStoneCo/products/arcrun-rag/installer/scripts/d20-guard.mjs``checkArmed`
找不到那個檔或沒有 node 時印 `⏭️ SKIP`,不算失敗,也不算驗過。)
**它在守什麼**`inkstone/ISEP#156`09-17 實撞於 `inkstone/arcrun-rag#202` c7598):
舊版用 `ROOT=$(dirname $0)/..` 決定保險寫在哪。plugin 發佈後腳本住在 plugin 快取裡
⇒ 保險寫進快取、腳本照印「✅ 保險已解」、出貨線讀 `InkStoneCo/.github-armed` 讀不到
⇒ leo 回了碼,出貨照樣卡住,總管手動搬檔才通。
現在寫在 `${CLAUDE_PROJECT_DIR:-$(pwd)}`——**跟每一個讀它的人同一個位置**。
📌 拿修之前的腳本跑是 **11 條紅**2026-09-17 實跑),不是換了寫法就會綠的測試。
**失敗**
- ① 的兩條 ★ 紅 ⇒ 保險又寫回腳本自己的位置(09-17 那個病)
- ② 任一 ★ 紅 ⇒ 檔案寫對地方了,但**讀的人不認得**(格式或位置跟出貨線/閘又分家了);
它們的「對照」紅 ⇒ ★ 那條沒有鑑別力
- ③ 紅 ⇒ 終端機(沒有 `CLAUDE_PROJECT_DIR`)時跟閘的退回規則不一致
- ④ 前兩條紅 ⇒ **沒拿到核准也寫了保險**——這是 D20 等級的洞,最嚴重
- ④ ★ 紅 ⇒ 擋下之後教的指令又印回相對路徑(站在 InkStoneCo 會叫到舊複本,`inkstone/ISEP#112` 同病)
---
## B. 只有 leo 能跑的(雲端)
@@ -1381,6 +1408,7 @@ B2(信標那行)/B3(setup 輸出)/B4(閘的訊息)三個畫面
| **A39 D20 閘看 push 實際會推的 repo** | isep-hand | ✅ 26/262026-09-07inkstone/ISEP#109→6629)+真路徑實跑(薄殼 cwd:`-C InkStoneCo` 放行、裸 `git push origin` 擋)+舊閘實跑 7 條紅(4 誤攔+3 漏擋) |
| **A24 分身住 repo 裡面+收工被收(G/H 群)** | isep-hand | ✅ 110/1102026-09-07inkstone/ISEP#147)+舊閘實跑 20 條紅(訊息+G/H,B/D/E/F 全綠)+本線自己就是 dogfood(分身開在 `ISEP/.worktrees/ISEP-147`,主目錄 `git status` 乾淨) |
| **A40 sweep 現場整理(七個分身的 fixture)** | isep-hand | ✅ 42/422026-09-07inkstone/ISEP#147);**leo 的 Mac 現場**要他自己跑 `sweep ~/tech_projects`(先 dry-run)——這台機器碰不到 |
| **A42 票上回碼的保險寫在出貨線讀得到的地方** | isep-hand | ✅ 18/182026-09-17inkstone/ISEP#156);修之前的腳本 11 條紅 |
| **A26 雲端憑證清單這台拿得到** | isep-hand | ✅ 11/112026-09-01inkstone/ISEP#115→5526554155425577)+兩條「該紅」方向實跑 |
| **A16 放行的門真的打得開** | 總管 | ✅ 17/172026-08-28inkstone/ISEP#90 |
| **A17 未推警察不誤攔雲端分支** | 總管 | ✅ 10/102026-08-28inkstone/ISEP#90 |