一個 repo 只有一個資料夾:分身住 repo 裡面的 .worktrees/,收工由同一支閘收掉(inkstone/ISEP#147)
leo 2026-09-07:「一個 repo 只看得到一個資料夾」「禁止這樣產出一大堆資料夾」。 根因:line-needs-own-worktree.sh 教工人開在 repo 旁邊,「收工 remove」只寫在閘訊息裡、沒機制驗, 每條線留一份 ⇒ tech_projects/ 長出 ISEP-wt-117/InkStoneCo-wt-112…一排。規則在文字裡不在機器上。 - scripts/worktree(新):open/close/list/sweep 四個動詞。分身住 <repo>/.worktrees/<票 repo>-<N> (走 .git/info/exclude,不動被追蹤的檔);「推了沒」只有這一份判準(三態:有/沒有/問不到, 問不到不當成沒推也不收);sweep 預設只列不動,--apply 只收「推了且乾淨」,--skip 是操作者點名。 - hooks/line-needs-own-worktree.sh:擋下時印 `scripts/worktree open`(絕對路徑,貼了就跑); 同一支多掛 PostToolUse Agent|Task——從【工單】認出分身,推了收、沒推點名分支+路徑(exit 2), 不 force、不刪。+0 支、+1 條(61 支/86 條,當場數的)。 - docs/governance/worktree-placement.md(新)+ principles 一行:禁令與閘互指。 - 測試:line-needs-own-worktree.test.sh 77→110(G 群:閘印的 open 那行原樣跑、旁邊不多任何東西; H 群:PostToolUse 推了收/沒推點名/安靜的方向);scripts/test-worktree.sh 42 條(七個分身的 fixture, 名字照 leo 看到的那排)。舊閘跑新測試 90/110,紅的 20 條正是這次改到的行為。 - permissions-allow.json 加 worktree 四種形狀(出路在雲端被分類器擋就走不通)。 - README/plugin.json/hooks-inventory 的數字在這棵樹上實數:61 支、86 條、62 支腳本。 待總管定版(改了會被載入的東西)。沒碰 hooks/lib/mainline.py。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0178ef1fGw3XeZtpN7LaZrm4
This commit is contained in:
+37
-2
@@ -624,11 +624,22 @@ bash hooks/tests/parallel-lines-cap-guard.test.sh
|
||||
`PostToolUse:Agent` 在**送出後 5 秒**就觸發(不是收工);
|
||||
subagent **不是獨立行程**(`ps` 只有一個 claude-code 行程,所以數行程數不到線)。
|
||||
|
||||
### A24 — 一條線要有自己的工作目錄:77 條
|
||||
### A24 — 一條線要有自己的工作目錄:110 條
|
||||
```
|
||||
bash hooks/tests/line-needs-own-worktree.test.sh
|
||||
```
|
||||
**該看到**:`77/77 通過`。離線,每個案例自己開**兩顆**真的 git repo +一份真的 linked worktree。
|
||||
**該看到**:`110/110 通過`。離線,每個案例自己開**兩顆**真的 git repo +一份真的 linked worktree +一顆本機 bare 遠端。
|
||||
|
||||
**G/H 群在守什麼**(inkstone/ISEP#147,2026-09-07 補):**分身住 repo 裡面,收工要被收。**
|
||||
leo 在 Finder 看到 `ISEP-wt-122ship`/`ISEP-wt-117`/`ISEP-wt115`/`InkStoneCo-wt-112`…一排——舊版教「開在 repo 旁邊、
|
||||
收工 `worktree remove`」,而 remove 只寫在閘訊息裡,沒機制驗。
|
||||
G 群的測資是**閘自己印出來的 `scripts/worktree open` 那一行**((78) 擋一次、(79) 抽出、(80b) 只填票號與分支真的跑),
|
||||
然後看三件事實:分身在 `<repo>/.worktrees/` 底下、**repo 旁邊的目錄清單一個都沒多**((81))、共用目錄 `git status` 乾淨((82))。
|
||||
H 群餵的是 PostToolUse `Agent` 的 payload(派工單 `【工單】owner/repo#N`,總管 session):沒推 ⇒ exit 2 點名分支+路徑+推的指令、分身一根寒毛沒動((86)–(91));
|
||||
推了但有未追蹤檔 ⇒ exit 2((92)–(94));推了且乾淨 ⇒ exit 0、目錄與登記都沒了、**分支還在**((95)–(98));
|
||||
沒工單/沒分身/工具不是 Agent ⇒ 安靜((99)–(103),誤攔比漏擋嚴重);一單兩票各自處理((104)–(106));
|
||||
環境裡的 `WORKTREE_OK=1` 是切分支的逃生門,不影響收工((107))。
|
||||
修之前拿新測試跑舊閘(main 那份):**90/110,20 條紅**——㉖㉙㉚b㉚c(訊息還在教開在旁邊)+ G/H 全部;B/D/E/F 全綠。紅的正好是這次改到的行為。
|
||||
|
||||
**E 群在守什麼**(comment 6587,2026-09-07 補):**閘印出來的那條出路要真的走得通。**
|
||||
閘訊息教的是 `WORKTREE_OK=1 git -C … checkout …`,舊版讀的卻是 hook 自己的環境變數——PreToolUse hook
|
||||
@@ -981,6 +992,28 @@ repo 那份走 TMP 底下的假薄殼。
|
||||
⚠️ **「新開一個雲端 session、不跑任何指令、第一眼就是它」**這格要下一版裝進雲端才驗得到——
|
||||
前提是 Cloud environment 有 `GITEA_TOKEN_CLAUDE_CODE`(本 session 有),沒有就跟 0.25.0 一樣退到舊線。
|
||||
|
||||
### A40 — 一個 repo 只有一個資料夾:`scripts/worktree`(sweep 現場整理):42 條
|
||||
```
|
||||
bash scripts/test-worktree.sh
|
||||
```
|
||||
**該看到**:`通過 42 條,失敗 0 條`。全程離線:遠端是本機 bare repo,不碰任何真的 repo。
|
||||
|
||||
**它守什麼**(inkstone/ISEP#147):leo 在 Mac 上跑一次的整理工具。fixture 照他 09-07 在 Finder 看到的那排分身
|
||||
**原樣造出來**(`course_gen-ticket-3-notes`/`course_gen-ticket-4-handouts`/`ax-courses-ticket1`/`ISEP-wt-122ship`/
|
||||
`ISEP-wt-117`/`ISEP-wt115`/`InkStoneCo-wt-112`,各自處境不同:推了乾淨、沒推、髒、登記指向空氣),
|
||||
外加一份新家 `.worktrees/` 裡的與一個沒人登記的孤兒目錄。
|
||||
|
||||
- **A dry-run**((1)–(13)):每份落在對的組、沒推的印分支與推的指令、`--skip course_gen` 那兩份在「不碰」組、**目錄樹快照前後相同**。
|
||||
- **B --apply**((14)–(27)):只收「推了且乾淨」的 3 份+prune 空氣登記;沒推的、髒的、`--skip` 的、孤兒的一根寒毛沒動;收掉的分身**分支還在**;第二次冪等。
|
||||
- **C 判準是事實不是名字**((28)–(32)):不 `--skip` 時 `course_gen-*` 照 git 的事實分組;拿掉 remote ⇒ 落在「問不到遠端」、**不當成沒推、也不收**。
|
||||
- **D open/close/list**((33)–(42)):open 的路徑在 `<repo>/.worktrees/`、主 repo `git status` 乾淨、`tech_projects/` 沒多任何資料夾;close 沒推 ⇒ 2 點名,推了 ⇒ 0 目錄沒了,再 close ⇒ 0 不吵。
|
||||
|
||||
**失敗**:
|
||||
- (2)(30) 紅 ⇒ **dry-run 動了東西**——leo 跑第一次「只是看看」就已經被改了現場,那是災難。
|
||||
- (19)–(23) 任一紅 ⇒ 收錯東西:刪了沒推的 commit/動了 `--skip` 的 repo/碰了不明目錄。**不刪任何有未推 commit 的分身**是票上紅線。
|
||||
- (28)(29) 紅 ⇒ 判準滑回看名字(`course_gen` 被當關鍵字),違反本 repo 紅線。
|
||||
- (31)(32) 紅 ⇒ 把「離線」當成「沒推」——拿雜訊懲罰謹慎。
|
||||
|
||||
### A5 — 開票前的搜尋是跨 repo 的
|
||||
```
|
||||
python3 scripts/ticket where 標籤 模組化
|
||||
@@ -1253,6 +1286,8 @@ B2(信標那行)/B3(setup 輸出)/B4(閘的訊息)三個畫面
|
||||
| **A24 一條線要有自己的工作目錄** | isep-guard | ✅ 35/35(2026-08-29,inkstone/ISEP#109→5391) |
|
||||
| **A24 出路那一行原樣餵回去走得通+#125 A–F** | isep-hand | ✅ 77/77(2026-09-07,inkstone/ISEP#109→6587、#125)+真路徑實跑(薄殼 cwd、`-C ISEP`:擋→印的那行→放行)+舊閘實跑 3 條紅 |
|
||||
| **A39 D20 閘看 push 實際會推的 repo** | isep-hand | ✅ 26/26(2026-09-07,inkstone/ISEP#109→6629)+真路徑實跑(薄殼 cwd:`-C InkStoneCo` 放行、裸 `git push origin` 擋)+舊閘實跑 7 條紅(4 誤攔+3 漏擋) |
|
||||
| **A24 分身住 repo 裡面+收工被收(G/H 群)** | isep-hand | ✅ 110/110(2026-09-07,inkstone/ISEP#147)+舊閘實跑 20 條紅(訊息+G/H,B/D/E/F 全綠)+本線自己就是 dogfood(分身開在 `ISEP/.worktrees/ISEP-147`,主目錄 `git status` 乾淨) |
|
||||
| **A40 sweep 現場整理(七個分身的 fixture)** | isep-hand | ✅ 42/42(2026-09-07,inkstone/ISEP#147);**leo 的 Mac 現場**要他自己跑 `sweep ~/tech_projects`(先 dry-run)——這台機器碰不到 |
|
||||
| **A26 雲端憑證清單這台拿得到** | isep-hand | ✅ 11/11(2026-09-01,inkstone/ISEP#115→5526/5541/5542/5577)+兩條「該紅」方向實跑 |
|
||||
| **A16 放行的門真的打得開** | 總管 | ✅ 17/17(2026-08-28,inkstone/ISEP#90) |
|
||||
| **A17 未推警察不誤攔雲端分支** | 總管 | ✅ 10/10(2026-08-28,inkstone/ISEP#90) |
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
# 一個 repo 只有一個資料夾:分身住 `.worktrees/`,收工就被收(inkstone/ISEP#147)
|
||||
|
||||
> leo 2026-09-07(兩則,一字不改):
|
||||
> 「我看到的是一個 repo,你會產生大量的同一個頭不同尾巴的 repo,全部拆開就更亂了,
|
||||
> 為什麼要產出新的 repo?這個 repo 的目的就是收納所有相關的內容,這樣散開造成凌亂,
|
||||
> ISEP, Inkstoneco, Course Gen 這些都產出好多個資料夾,這要整理回去」
|
||||
> 「另外要在 ISEP 裡寫明,禁止這樣產出一大堆資料夾」
|
||||
|
||||
## 規約(三句)
|
||||
|
||||
1. 🔴 **禁止在專案目錄旁邊產出分身資料夾。** `tech_projects/` 底下一個 repo 只能有一個資料夾;
|
||||
`ISEP-wt-117`、`InkStoneCo-wt-112`、`course_gen-ticket-3-notes` 這種同頭不同尾的東西不准再長出來。
|
||||
2. **一條線要隔離工作目錄,分身住 repo 裡面**:`<repo>/.worktrees/<票的 repo 名>-<票號>`。
|
||||
Finder 看不到(點開頭)、`git status` 看不到(寫進 `.git/info/exclude`)、`git worktree list` 找得到。
|
||||
3. **分身是借的,收工要還**:分支推上遠端且工作樹乾淨 ⇒ 收掉;沒推 ⇒ 點名分支與路徑,等人決定。
|
||||
**絕不 force、絕不刪沒推的 commit。**
|
||||
|
||||
## 為什麼會長成那樣(根因,不是誰疏忽)
|
||||
|
||||
`hooks/line-needs-own-worktree.sh`(inkstone/ISEP#109,08-29 立)擋下線在共用目錄切分支,教它
|
||||
「開一份在 repo 旁邊、不要在 /tmp、收工時 `worktree remove`」。
|
||||
|
||||
那時比較的只有「旁邊 vs /tmp」——/tmp 會被系統清掉、登記簿說謊;旁邊的一份都沒掉。
|
||||
**一份都沒掉,也一份都沒收**:`remove` 那一步只寫在閘訊息裡,沒有任何機制驗。
|
||||
每個工人留一份,`tech_projects/` 就長成那排。**規則在文字裡,不在機器上**
|
||||
(同日 ISEP#109 comment 6629 是同一種病:出路寫在訊息裡,機器讀不到)。
|
||||
|
||||
## 機器上的兩端
|
||||
|
||||
| 端 | 在哪 | 做什麼 |
|
||||
|---|---|---|
|
||||
| 開 | `hooks/line-needs-own-worktree.sh`(PreToolUse Bash) | 擋下共用目錄裡的 checkout,印出 `scripts/worktree open …`(絕對路徑,貼了就能跑) |
|
||||
| 收 | **同一支閘**多掛 PostToolUse `Agent\|Task` | 從派工單 `【工單】owner/repo#N` 認出分身名字,跑 `scripts/worktree close`:推了收、沒推點名(exit 2) |
|
||||
| 工具 | `scripts/worktree` | `open`/`close`/`list`/`sweep` 四個動詞;「推了沒」只有這一份判準(三態:有/沒有/問不到,問不到不當成沒推) |
|
||||
|
||||
為什麼收的那一半不另開一支閘:教你開的和替你收的是同一件事的兩半,拆成兩支就又是「規則在兩個地方」
|
||||
(`countdown-guard.sh` 同一種形狀:注入與查核是一支閘掛兩個事件)。
|
||||
|
||||
為什麼掛 PostToolUse 不掛 SubagentStop:票號在派工單(Agent 的 `tool_input.prompt`)裡,SubagentStop 拿不到
|
||||
(`baton-handback-guard.sh` 檔頭那段實撞)。
|
||||
|
||||
## 工人怎麼用
|
||||
|
||||
```
|
||||
python3 <plugin>/scripts/worktree open inkstone/ISEP#147 --repo <repo> -b feat/147-xxx # 開
|
||||
cd <repo>/.worktrees/ISEP-147 # 在裡面做事
|
||||
python3 <plugin>/scripts/worktree close inkstone/ISEP#147 --repo <repo> # 收(推了才收得掉)
|
||||
```
|
||||
|
||||
忘了 `close` 也沒關係——線收工那一刻閘會替你跑;但**沒推的它不會替你收**,只會點名。
|
||||
不要用 `git worktree add <repo>/../<repo>-wt-…` 這條老路;閘訊息已經不印它了。
|
||||
|
||||
## leo 在 Mac 上整理現場(一次)
|
||||
|
||||
```
|
||||
python3 ~/.claude/plugins/cache/inkstone/isep/<版本>/scripts/worktree sweep ~/tech_projects # 只列,不動
|
||||
python3 ~/.claude/plugins/cache/inkstone/isep/<版本>/scripts/worktree sweep ~/tech_projects --apply --skip course_gen
|
||||
```
|
||||
|
||||
- 預設**只列不動**;`--apply` 才收,而且只收「推了且乾淨」的。
|
||||
- 沒推的、有未 commit 的、問不到遠端的、沒有任何 repo 登記它的:**全部列出來、一個都不動**,等他決定。
|
||||
- `--skip <repo 名>` 是操作者點名不碰的 repo(09-07:`course_gen` 地端正在處理,列可以、不收不動)。
|
||||
它是操作者的明示指令,不是判準——判準永遠是「這個目錄是不是某個 repo 的 worktree、分支推了沒、乾不乾淨」。
|
||||
|
||||
## 測試
|
||||
|
||||
- `hooks/tests/line-needs-own-worktree.test.sh` G 群(開在裡面、旁邊不多任何東西、閘印的那行原樣跑得動)
|
||||
與 H 群(PostToolUse:推了收掉、沒推點名、沒工單/沒分身安靜)。
|
||||
- `scripts/test-worktree.sh`:七個分身的 fixture(照 leo 09-07 看到的那排)跑 `sweep`——
|
||||
dry-run 不動任何東西;`--apply` 只收已推的、`--skip` 的一根寒毛不動、沒推的印分支與路徑。
|
||||
+10
-2
@@ -7,7 +7,7 @@
|
||||
|
||||
## 一句話結論
|
||||
|
||||
`hooks/` 底下有 **61 個 `.sh` 檔**,`hooks.json` 實際掛上 **85 條註冊**(同一支閘常被多種情境同時掛上);
|
||||
`hooks/` 底下有 **61 個 `.sh` 檔**,`hooks.json` 實際掛上 **86 條註冊**(同一支閘常被多種情境同時掛上);
|
||||
其中 **3 支檔案存在但沒被掛上**(2 支是待人填的空範本、1 支是刻意留著沒開的止血帶,見下面「未生效」表)。
|
||||
下面按「你會在什麼時候撞到它」分組,一支一行。
|
||||
|
||||
@@ -38,6 +38,14 @@
|
||||
> **61 支、85 條、60 支腳本是在這棵樹上當場數出來的**(`ls hooks/*.sh | wc -l`=61、
|
||||
> `grep -c '"command":' hooks/hooks.json`=85、`ls -p scripts | grep -v / | wc -l`=60)。
|
||||
|
||||
> 📌 **`inkstone/ISEP#147`(2026-09-07)+0 支、+1 條**:`line-needs-own-worktree.sh` 多掛 PostToolUse `Agent|Task`
|
||||
> ——教你開分身的那支閘,在線收工那一刻替你收(分支推了就 remove;沒推就點名分支與路徑,不靜默、不 force)。
|
||||
> 分身的家從「repo 旁邊」改成「repo 裡面的 `.worktrees/`」:leo 在 Finder 看到一排 `ISEP-wt-117`/`InkStoneCo-wt-112`
|
||||
> 就是第一版「收工 remove 只寫在閘訊息裡、沒機制驗」長出來的。同一支閘掛兩個事件(跟 `countdown-guard.sh` 同形狀),
|
||||
> **不另開一支**。`scripts/` +2:`worktree`(open/close/list/sweep,「推了沒」只有這一份判準)與它的測試。
|
||||
> **61 支、86 條、62 支腳本是在這棵樹上當場數出來的**(`ls hooks/*.sh | wc -l`=61、
|
||||
> `grep -c '"command":' hooks/hooks.json`=86、`ls -p scripts | grep -v / | wc -l`=62)。規約:`docs/governance/worktree-placement.md`。
|
||||
|
||||
> 📌 **`inkstone/ISEP#109` → comment 6629(2026-09-07)+0 支、+0 條**:兩支閘改判準不加閘——
|
||||
> `line-needs-own-worktree.sh` 的出路改認指令字串裡的 `WORKTREE_OK=1` 前綴(舊版讀 hook 自己的環境,
|
||||
> 出路永遠走不通);`github-contact-guard.sh` 判 push 目標改在「這條指令實際會推的那個 repo」裡解 remote
|
||||
@@ -149,7 +157,7 @@
|
||||
| `reply-identity-guard.sh` | 直接打 Gitea API 貼留言到票上時,內文第一行沒有 `【身份】`(`總管`/`subagent`/`leo`)就擋下——票上多條線並行時,看不出哪一則是誰寫的。純讀取、走 `scripts/ticket` 正門、指令裡加 `reply-identity-ok` 都放行。 | 🛑 擋 |
|
||||
| `comment-carries-task-guard.sh` | AI 要在票裡留一則「等某某上線才驗得了」這種**還沒做完的事**,卻沒有把它開成一張子票時,擋一次。留言沒人會回頭讀,票的 open/closed 撈一次就看得到。**擋下來時印的是一整塊可以直接貼著跑的指令**(腳本用絕對路徑、母票已經填好、內文草稿附在同一塊裡),那塊字是跟 `scripts/ticket usage subtask` 現要的,不是閘自己抄的一份(`inkstone/ISEP#112`)。 | 🛑 擋(同一輪只擋一次) |
|
||||
| `search-is-not-proof-guard.sh` | AI 用知識庫的**搜尋**找到一筆東西,然後把那筆東西的原始編號直接貼進票裡或派工單裡,當成「某個功能壞了」的證據——而它從沒用正規的檢索路徑去查過那筆——擋一次。你關心的是:不會再有人拿錯的方法量出一個錯的結論,然後退回一張其實已經做完的票。 | 🛑 擋(同一輪只擋一次) |
|
||||
| `line-needs-own-worktree.sh` | 一條派工線想在**大家共用的那份工作目錄**裡切分支(`git checkout`/`git switch`)就擋下,叫它先開一份自己的 worktree。你關心的是:不會再有人交回工作時把某個 repo 留在自己的分支上,而下一個人在同一個目錄跑出貨、讀到的是別人留下的 HEAD。**總管在自己的目錄裡切分支不管**(那是他的目錄);已經在自己 worktree 裡的切換全部放行;還原檔案(`git checkout -- 檔`)不管。擋下來的同時會順手把「指向空氣」的 worktree 登記清掉。出路是閘訊息印的那一行 `WORKTREE_OK=1 git -C … checkout …`——認的是**指令字串裡**的這個前綴,原樣貼回去就過(`inkstone/ISEP#109`→6587:舊版讀 hook 自己的環境變數,那行在 Claude Code 底下永遠走不通)。 | 🛑 擋 |
|
||||
| `line-needs-own-worktree.sh` | 一條派工線想在**大家共用的那份工作目錄**裡切分支(`git checkout`/`git switch`)就擋下,叫它先開一份自己的 worktree——**開在 repo 裡面的 `.worktrees/`,不是旁邊**(`scripts/worktree open`;`inkstone/ISEP#147`:leo 在 Finder 看到一排 `ISEP-wt-117`/`InkStoneCo-wt-112` 就是舊版教出來的)。同一支閘也掛在線收工那一刻(PostToolUse `Agent|Task`):從派工單的【工單】認出分身,分支推了且乾淨就收掉,沒推/有東西沒交代就點名分支與路徑——不靜默、不 force、不刪沒推的 commit。你關心的是:一個 repo 在 Finder 只有一個資料夾,而且不會再有人交回工作時把某個 repo 留在自己的分支上。**總管在自己的目錄裡切分支不管**(那是他的目錄);已經在自己 worktree 裡的切換全部放行;還原檔案(`git checkout -- 檔`)不管。擋下來的同時會順手把「指向空氣」的 worktree 登記清掉。切分支的出路是閘訊息印的那一行 `WORKTREE_OK=1 git -C … checkout …`——認的是**指令字串裡**的這個前綴,原樣貼回去就過(`inkstone/ISEP#109`→6587)。 | 🛑 擋/收工 🚨 點名 |
|
||||
| `diagnosis-evidence-guard.sh` | 你想把一段有份量的東西寫上票,而這個 session **沒派人去查過那張票**、那段話裡也**沒有任何走得過去的出處**(檔案:行號/commit/comment 號/票號/網址/貼出來的實測輸出)就擋一次——未經調查的診斷寫在票上會長得像事實,工人會照著它去驗證而不是去查。派過人查、或把出處帶上,都放行;一句短回覆不管。 | 🛑 擋 |
|
||||
## B. AI 想寫檔案/改程式碼的當下(PreToolUse / Write·Edit·MultiEdit)
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
"薄殼 repo(GitHub)要 D20 開閘才推得動 ⇒ 白名單住 ISEP,`scripts/settings-allow-sync` 開工時寫進那台機器的 ~/.claude/settings.json。",
|
||||
"以後加規則只改這個檔、出一版,雲端下一趟就有。",
|
||||
"inkstone/ISEP#137:09-07 雲端對 stage 的三種寫入(`npx wrangler secret put`/`stage-deploy-artifacts.py`/curl POST 到 arcrun-yuga3bse)全被分類器擋——複合指令與任意 curl 對不上任何一條前綴。收成 `scripts/stage`(secret/api 兩個子命令,只寫 stage、值只從環境變數名讀)四種形狀,外加 Arcrun 自己那支 `scripts/stage-deploy-artifacts.py`(它已寫死只認 youlin 帳號 ID、不收 --account/--token)從 Arcrun repo 根目錄的相對形狀。不放 `Bash(npx *)`/`Bash(wrangler *)`/`Bash(curl *)`。",
|
||||
"inkstone/ISEP#67:SessionStart 信標印的補法是 `python3 <plugin root>/scripts/release-ship vX.Y.Z`——那一行在雲端要是被分類器擋,出路就走不通(閘的價值是「擋下來+給一條走得通的路」)。release-ship 只 POST 一件事(建 release,tag 與 release 名寫死從 Gitea 讀);release-check 純讀。"
|
||||
"inkstone/ISEP#67:SessionStart 信標印的補法是 `python3 <plugin root>/scripts/release-ship vX.Y.Z`——那一行在雲端要是被分類器擋,出路就走不通(閘的價值是「擋下來+給一條走得通的路」)。release-ship 只 POST 一件事(建 release,tag 與 release 名寫死從 Gitea 讀);release-check 純讀。",
|
||||
"inkstone/ISEP#147:worktree 閘印出來的出路是 `python3 <plugin>/scripts/worktree open …`/`close …`,收工那一半也是同一支工具;出路在雲端被分類器擋就是走不通的路(閘的價值是「擋下來+給一條走得通的路」)。它只碰 git worktree,不打網路寫入。"
|
||||
],
|
||||
"_rules": [
|
||||
"開頭的 `~` 由 settings-allow-sync 換成那台機器的家目錄(本機 /Users/…、雲端 /root),其餘一字不改。",
|
||||
@@ -40,6 +41,10 @@
|
||||
"Bash(python3 ~/.claude/plugins/cache/inkstone/isep/*/scripts/release-check *)",
|
||||
"Bash(python3 \"$CLAUDE_PLUGIN_ROOT/scripts/release-check\" *)",
|
||||
"Bash(python3 \"$CLAUDE_PLUGIN_ROOT\"/scripts/release-check *)",
|
||||
"Bash(python3 scripts/release-check *)"
|
||||
"Bash(python3 scripts/release-check *)",
|
||||
"Bash(python3 ~/.claude/plugins/cache/inkstone/isep/*/scripts/worktree *)",
|
||||
"Bash(python3 \"$CLAUDE_PLUGIN_ROOT/scripts/worktree\" *)",
|
||||
"Bash(python3 \"$CLAUDE_PLUGIN_ROOT\"/scripts/worktree *)",
|
||||
"Bash(python3 scripts/worktree *)"
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user