雲端工人抓票規則做成 ticket pick/claim,規則本體是一支純函式(inkstone/ISEP#131)

- scripts/ticket 多兩個動詞:pick(給定主線檔回一張可抓的票,主線抓盡才抓逾期里程碑,
  不抓 backlog/沒里程碑)與 claim(指派+s/doing+【身份】留言,一個動作;規則在寫入前再驗一次)
- 規則全是 Gitea 欄位:s/* 恰好是 {s/todo}+沒 assignee+沒 Human/human/*+不是 hub+里程碑=主線
  · 「恰好」而非「有 s/todo」:09-07 實查 mira#6 同時掛 s/doing+s/todo
  · hub 排除:09-07 實查 ISEP#31–35 五張 hub 掛在逾期里程碑、s/todo、沒人,但容器不是任務
- 離開碼分三種:0 有票/1 真的沒有/2 讀不到或沒主線(讀不到 ≠ 沒有)
- scripts/test-ticket-pick.sh 48 條全離線;README/plugin.json 腳本數 49→50 在本樹實數
- 版本號待總管定版(scripts/ticket 會被 plugin 載入)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DTZ9QtvjY7MNxjfQbexAm7
This commit is contained in:
Claude
2026-09-07 01:05:30 +00:00
parent 605f1fe5a6
commit 354480901a
5 changed files with 603 additions and 3 deletions
+42
View File
@@ -419,6 +419,47 @@ bash hooks/tests/gitea-arm-check.test.sh .
- ①③⑤⑥ 任一紅 ⇒ 收手收得太晚,暫存區已經開始長東西(磁碟風險回來了)
- ② 紅 ⇒ 訊息沒給出走得通的那一行(本票整張票在講的就是這件事)
- ⑧⑨⑩ 任一紅 ⇒ **誤攔/複製錯**:正常用法被弄壞,或複本裡混進了 `hooks/` 以外的東西
### A31 — 雲端工人抓票的規則是機械可判的:48 條
```
bash scripts/test-ticket-pick.sh
```
**該看到**`通過 48 條,失敗 0 條`。**全程離線**:假池子(3 個 repo、3 個 open milestone、
11 張票)餵給換掉的 `api()`,時鐘走 `ISEP_COUNTDOWN_NOW``TICKET_HOST` 指到連不上的位址
——任何一條真的走到網路會當場炸,不會靜靜變成假綠。**不開票、不改票、不留任何東西在 Gitea 上。**
**它在守什麼**`inkstone/ISEP#131`):Routine 08-06 起讀 `journeys.md` 本 sprint 段,
08-19 到期沒續,**連續兩週讀到殘骸只能空轉**。09-07 把 `cloud-worker.md` 步驟 1 改成從
Gitea 主線里程碑抓票(`inkstone/InkStoneCo#118`),但那是一段給人讀的字。
這一支把規則做成 `scripts/ticket pick``claim` 兩個動詞,規則本體在 `pickable()` 一支純函式:
```
可抓 s/* 恰好是 {s/todo} 沒有 assignee 沒有 Humanhuman/* 不是 hub 里程碑=主線
主線抓盡才抓「逾期的 open 里程碑」;backlog/沒里程碑一律不抓
認領 claim 指派 + s/doing + 第一行【身份】的留言,一個動作
完成 handback --label s/review(本來就有的那半,不重做)
```
**失敗**
- ①「★」那四條任一紅 ⇒ 票上驗收第 1 條破了:Human/有 assigneebacklog 有一種會被抓走
- ①「s/todos/doing 同時掛著」紅 ⇒ 會把別人正在做的票抓走(09-07 實查 `inkstone/mira#6`
就是這個形狀——exclusive 只擋 UI 不擋 API
- ②「主線抓盡 → 才輪到逾期」那兩條紅 ⇒ 順序壞了:要嘛主線還有票就去抓逾期的,
要嘛抓盡了還回 `Arcrun#8`(既不是主線也沒逾期)
- ②「離開碼 1」紅 ⇒ 「真的沒有票」與「讀不到」被講成同一句——後者要離開碼 2
- ②「沒有主線 → 離開碼 2 且一通 API 都沒打」紅 ⇒ 沒主線時去抓了別的
- ③「該擋」六條任一紅 ⇒ 規則只長在 `pick` 這端,手動 `claim` 一張 Human 的票照樣過
- ③「身份名不在名單上 → 一通都沒打」紅 ⇒ 名單以外的名字碰到了 Gitea
- ④ 第一條紅 ⇒ 連不上 Gitea 時回了離開碼 1,雲端會把「斷線」當「沒票」收工
📌 **真實 Gitea 唯讀實跑**2026-09-07isep-hand,不改任何票):
`ticket pick --mainline InkStoneCo/system-dev/mainline.json --all` 在主線
「AI 問一次就看得到全部」回 `ISEP#130``ISEP#131` 兩張(`Arcrun#175/176` 已有 assignee、
`Arcrun#86` 是 s/doing、`mira#6` s/todos/doing 都沒被抓);逾期里程碑組把 `ISEP#3135`
五張 `hub` 排除後剩 `Arcrun#83``mira#5``arcrun-rag#14/27/37`
**寫入那半**用 `claim inkstone/ISEP#131 --name isep-hand` 真的認領過一次:
assignee`claude-code`、標籤 `s/todo → s/doing`、留言 6325 第一行【身份】——
之後再 `pick` 就不再回 #131(票上驗收第 2 條的 log 在票的留言裡)。
### A19 — 下游做完時頂層跟著關:49 條
```
bash scripts/test-ticket-handoff-writeback.sh
@@ -953,6 +994,7 @@ B2(信標那行)/B3(setup 輸出)/B4(閘的訊息)三個畫面
| **A17 未推警察不誤攔雲端分支** | 總管 | ✅ 10/102026-08-28inkstone/ISEP#90 |
| **A18 信標會報雲端接線缺陷** | 總管 | ✅ 14/142026-08-28inkstone/ISEP#90 |
| **A19 下游做完頂層跟著關** | 總管 | ✅ 49/492026-08-28inkstone/ISEP#92 |
| **A31 雲端工人抓票規則機械可判** | isep-hand | ✅ 48/482026-09-07inkstone/ISEP#131)+真實 Gitea 唯讀實跑+一次真認領 |
| **A20 舊票有固定管道被撈** | 總管 | ✅ 47/472026-08-28inkstone/ISEP#83)+真實 229 張唯讀實跑 |
| A7 plugin 裝得起來 | 總管 | ✅ |
| **A8 新 session 閘會觸發** | 總管 | 見本版 release note |