一條線一份自己的工作目錄,同時跑的線有上限(inkstone/ISEP#109 → comment 5391)
兩支新閘,兩個方向的測試都有:
line-needs-own-worktree.sh(PreToolUse: Bash,35 條測試)— 治本那半
一條線想在共用的工作目錄裡切分支就擋,叫它開自己的 worktree。
判準是 git 自己回答的兩個問題(會不會動 HEAD/是不是主工作目錄),
不靠任何人登記。擋下來時順手 prune 掉指向空氣的登記。
實測:products/arcrun-rag 清掉 4 筆、ISEP 清掉 13 筆,
還在的 worktree 與分支一根寒毛都沒動。
parallel-lines-cap-guard.sh(PreToolUse: Agent|Task,33 條測試)— 治標那半
同時在跑的線超過上限(預設 3)就派不出下一條,訊息列出現在有哪幾條。
條數是從 harness 自己寫的 subagents/*.meta.json + 主 transcript 的完工通知
數出來的,不是計數器 —— 沒有任何東西要人去減,所以不會永久卡死。
三個機械前提是實測的,不是推測的:
· SubagentStop 在實測 session 裡一次都沒觸發(不能拿它當減法)
· PostToolUse:Agent 在送出後 5 秒就觸發(不是收工)
· subagent 不是獨立行程(ps 只有一個 claude-code 行程)
· Agent 的原生 isolation:"worktree" 只做頂層 repo,
而 products/ matrix/ 是 gitignore 掉的子 repo,worktree 裡根本沒有它們
⇒ 原生那條路解不了這張票的問題
盤點數字在自己的樹上重數:62 支 / 85 條(main 上的 60/82 沒算到這兩支)。
🔴 版本沒動 = 沒有人吃得到。這條分支沒有定版,
plugin.json 仍是 0.16.1(版本一致性檢查要求它等於最新 tag)。
合併時要跟著一個新版本號,不然這兩支閘到不了任何人手上。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -470,6 +470,45 @@ python3 scripts/wiki-compress bench /tmp/w/mistakes.md.before-compress /tmp/w/m
|
||||
```
|
||||
|
||||
|
||||
### A23 — 同時跑的線有上限:33 條
|
||||
```
|
||||
bash hooks/tests/parallel-lines-cap-guard.test.sh
|
||||
```
|
||||
**該看到**:`33/33 通過`。**離線、不打網路、不花錢**——每個案例自己搭一份假的 harness 佈局
|
||||
(`<sid>.jsonl` + `<sid>/subagents/agent-*.meta.json`),判準只有檔案的存在與 mtime,沒有語意判官。
|
||||
|
||||
**它在守什麼**(inkstone/ISEP#109,2026-08-29 實撞):總管同時開七條線,8 GB 的 Mac 重開機;
|
||||
同一天還派錯線 1 次、量錯東西 6 次、停掉正確的工作 1 次。leo:「**跑 2-3 條應該是極限了**」。
|
||||
|
||||
**失敗**:
|
||||
- A 群 14 條任一紅 ⇒ **誤攔**。這比漏擋嚴重——④⑤紅代表「收工了還在擋」,
|
||||
那會變成**整台機器永遠派不了工**
|
||||
- ⑬⑭ 紅 ⇒ fail-open 壞了。這支刻意選「算不出來就放行、但出聲」:
|
||||
算不出來就擋會卡死所有派工,那是比漏擋貴得多的失敗
|
||||
- ㉒ 紅 ⇒ 安靜窗的邊界算錯了,那是唯一擋著「永久卡死」的保險
|
||||
|
||||
📌 **這支閘的三個機械前提是實測出來的,不是推測的**(改它之前先重測這三件):
|
||||
`SubagentStop` 在實測的 session 裡**一次都沒觸發**(所以不能拿它當減法);
|
||||
`PostToolUse:Agent` 在**送出後 5 秒**就觸發(不是收工);
|
||||
subagent **不是獨立行程**(`ps` 只有一個 claude-code 行程,所以數行程數不到線)。
|
||||
|
||||
### A24 — 一條線要有自己的工作目錄:35 條
|
||||
```
|
||||
bash hooks/tests/line-needs-own-worktree.test.sh
|
||||
```
|
||||
**該看到**:`35/35 通過`。離線,每個案例自己開一顆真的 git repo +一份真的 linked worktree。
|
||||
|
||||
**它在守什麼**(inkstone/ISEP#109 → comment 5391,2026-08-29 實撞):
|
||||
每個 repo 只有**一份**工作目錄,所有線共用。`arcrun-rag#163` 切到自己的分支、交回時沒切回來,
|
||||
總管後來在同一個目錄跑 `ship.mjs`,**讀到的是別人留下的 HEAD**。
|
||||
🔴 票號說得出「這是哪個任務」,**沒有任何東西說得出「這個目錄現在是誰留下的狀態」**。
|
||||
|
||||
**失敗**:
|
||||
- A 群 16 條任一紅 ⇒ **誤攔**。特別是⑤⑥⑦(還原檔案)與⑨(已經在自己的 worktree 裡)——
|
||||
擋掉它們等於線動不了工
|
||||
- ① 紅 ⇒ 連總管在自己的目錄裡切分支都被擋。那不是嚴格,那是把共用目錄的主人趕出去
|
||||
- ㉞㉟ 紅 ⇒ `prune` 做錯了。㉞是沒清掉說謊的登記;**㉟是把還在的 worktree 也弄掉了,那是災難**
|
||||
|
||||
### A5 — 開票前的搜尋是跨 repo 的
|
||||
```
|
||||
python3 scripts/ticket where 標籤 模組化
|
||||
@@ -736,6 +775,8 @@ B2(信標那行)/B3(setup 輸出)/B4(閘的訊息)三個畫面
|
||||
| **A17 未經調查不寫診斷(ISEP#87)** | 總管 | ✅ 26/26(2026-08-28) |
|
||||
| **A11 派工單只剩票號** | 總管 | ✅ 19/19(2026-08-27) |
|
||||
| **A12 留言身份欄(兩道門)** | 總管 | ✅ 11/11(2026-08-27) |
|
||||
| **A23 同時跑的線有上限** | isep-guard | ✅ 33/33(2026-08-29,inkstone/ISEP#109) |
|
||||
| **A24 一條線要有自己的工作目錄** | isep-guard | ✅ 35/35(2026-08-29,inkstone/ISEP#109→5391) |
|
||||
| **A16 放行的門真的打得開** | 總管 | ✅ 17/17(2026-08-28,inkstone/ISEP#90) |
|
||||
| **A17 未推警察不誤攔雲端分支** | 總管 | ✅ 10/10(2026-08-28,inkstone/ISEP#90) |
|
||||
| **A18 信標會報雲端接線缺陷** | 總管 | ✅ 14/14(2026-08-28,inkstone/ISEP#90) |
|
||||
|
||||
Reference in New Issue
Block a user