閘教的那條出路要真的走得通(inkstone/ISEP#112)
comment-carries-task-guard 擋下留言時教人跑 `scripts/ticket subtask …`,
而那一行跑不動。兩個獨立的原因,各自都足以害死它:
① 相對路徑對「貼上去那個人的 cwd」解析。總管的 cwd 是 InkStoneCo/,
那裡的 scripts/ticket 是停在 08-27 之前的舊複本(grep -c subtask → 0),
照著貼只印出它「四個動詞」的說明然後 exit 0。
② 用法是手抄的第二份,而它已經漂了:寫了 --assign 卻沒有 --next,
正本會因為「指派了人卻沒寫 --next」直接擋下(exit 2,在打 API 之前)。
修法是拿掉可以漂的那一格,不是把兩份對齊一次:
- 路徑 scripts/ticket 的 self_path()(__file__ 的絕對路徑)
⇒ 印指令的人與跑指令的人是同一個檔案
- 用法 USAGE / usage_text() 一份,閘去 `ticket usage subtask --example` 現要
- 內文模板 body_template() 由 REQUIRED_SECTIONS 現生,跟檢查同源
新增動詞 `ticket usage <verb> [--example] [--parent] [--draft]`。
閘的訊息改成整塊可貼可跑:腳本絕對路徑、母票已填、內文草稿附在同一塊裡,
只剩標題/目標/驗收條件三格是機器不可能知道的。
正本叫不動時 fail-open 的只有「訊息內容」(只指路,不補一份手抄用法),
擋不擋不受影響。
測試 scripts/test-comment-carries-task-guard.sh 22 → 29 條。
新增的 ⑮–㉑ 驗的是「出路走不走得通」,不是「有沒有擋」——
⑱ 把閘 stderr 裡那塊指令原樣抽出來、只填三格、真的執行一次,
離開碼必須是 1(走到網路才停);是 2 就代表這個病復發。
六個變異全部驗過會紅(相對路徑/閘自己抄用法/--assign 沒配 --next/
模板寫死少一段/fallback 補回手抄用法)。
版本:待總管定版(plugin update 比的是版本號不是內容)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SP7DiGMfSkWjZ15CHMbPFE
This commit is contained in:
+20
-3
@@ -71,15 +71,32 @@ bash scripts/test-ticket-where-seen-guard.sh
|
||||
人就學會忽略它
|
||||
- 最後那組 `fd_is_devnull` 紅 ⇒ 判準從「fstat 問得出來的事實」滑回猜文字
|
||||
|
||||
### A11 — 討論串裡的任務要長成子票:22 條
|
||||
### A11 — 討論串裡的任務要長成子票:29 條
|
||||
```
|
||||
bash scripts/test-comment-carries-task-guard.sh
|
||||
```
|
||||
**該看到**:`22/22 通過`。
|
||||
**該看到**:`29/29 通過`。全程離線(`TICKET_HOST` 指到連不上的位址),不開任何測試票。
|
||||
**失敗**:
|
||||
- 「該擋」6 條任一紅 ⇒ 08-26 那則真的掉了的留言形狀(「等雲端那半出貨才驗得了」)會漏抓
|
||||
- 「不該擋」10 條任一紅 ⇒ **誤攔,這比漏擋嚴重**——每次留言都被擋,人就學會忽略它
|
||||
- 最後兩條(`-F <檔>`)紅 ⇒ 內文放在檔案裡時閘看不到,等於走 `ticket say` 就自動繞過
|
||||
- `-F <檔>` 那兩條紅 ⇒ 內文放在檔案裡時閘看不到,等於走 `ticket say` 就自動繞過
|
||||
- **⑮~⑳(`inkstone/ISEP#112`)**:這一組驗的不是「有沒有擋」,是**擋下來之後教的那條路走不走得通**。
|
||||
- ⑮⑯ 紅 ⇒ 訊息又印出相對路徑的 `scripts/ticket`。相對路徑是對**貼上去那個人的 cwd**
|
||||
解析的,而 `InkStoneCo/scripts/ticket` 是舊複本(`grep -c subtask` → 0)
|
||||
⇒ 照著貼會印出它「四個動詞」的說明然後什麼都沒發生。
|
||||
- ⑰ 紅 ⇒ 閘又自己抄了一份用法(它應該去 `ticket usage subtask` 現要)。
|
||||
- **⑱ 紅 ⇒ 最嚴重**:把訊息裡那塊指令原樣抽出來、只填標題/目標/驗收條件三格,
|
||||
**真的執行**,離開碼必須是 1(走到網路才停)。是 2 就表示又被某道閘擋下,
|
||||
這張票的病復發了。
|
||||
- ⑲ 是 ⑱ 的鑑別力對照(把閘原本那組 `--assign` 沒配 `--next` 接回去,必須紅);
|
||||
⑲ 綠不了就代表 ⑱ 那條綠燈沒有意義。
|
||||
- ⑳ 紅 ⇒ 內文草稿模板跟 `REQUIRED_SECTIONS` 分家了,會生出「照著貼卻過不了自己那道閘」的票。
|
||||
- ㉑ 紅 ⇒ 正本叫不動時(雲端裝壞、路徑不對)閘不是不擋了,就是**又在訊息裡補了一份手抄用法**。
|
||||
fail-open 的只准是「訊息內容」,不准是「擋不擋」;而補一份副本就是把這張票拔掉的東西裝回去。
|
||||
|
||||
> 🔴 **這一組刻意驗訊息內容,不是只驗離開碼。** `system-dev/wiki/mistakes.md`
|
||||
> 記過:訊息壞掉時閘照樣 `exit 2`,只看離開碼完全看不出來——
|
||||
> 而這張票(`inkstone/ISEP#112`)就是那個形狀的極端版:**閘擋對了,但它教的解法根本不存在。**
|
||||
|
||||
### A12 — 收工要把棒子交回來:10 條
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user