現在的主線是哪一個,有唯一答案(inkstone/ISEP#82) #99
Reference in New Issue
Block a user
Delete Branch "feat/mainline-milestone"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
交件
inkstone/ISEP#82。這不是新開一條線,是接在#63剛上線的那個注入點上。它解什麼
2026-08-27 實查:
GET /repos/inkstone/*/milestones?state=open回 14 個,「Mira 現代化」這個名字同時活在 5 個 repo,5 個已逾期。
⇒ SOP 說的「只做該 milestone 的事」在現場沒有指涉對象——
要注入不知道注哪一個,要擋跳線也不知道拿哪一個當基準。規則被讀到了,但機器上不存在。
不動的:跨 repo 同名 milestone 是既有做法(v0.6.0 §4/SOP S7-4),本 PR 一個字都沒改它。
改的:讓「這一刻我在做哪一條」變成一個查得到的事實。
四條驗收,逐條對應
scripts/mainline(主線住在一個檔裡,那個檔放得下一條)🎯;主線的名字同時掛在被查核的 ⏱ 那一行上hooks/mainline-focus-guard.sh(Agent+Task 兩個入口)show/注入/閘三處都講得出「現在沒有主線」,閘一律放行為什麼沒有為 🎯 再立一道會擋人的閘
⏱那一行已經有#63的 Stop 閘在查它有沒有被戴上,而主線的名字就掛在那一行裡(
⏱ 已過 …|距收工線 …|主線 SOP 變成閘 剩 …)。⇒ 主線是跟著一道已經驗過的閘到 leo 眼前的,不是靠新增一道閘。
一個回合最多該被擋一次;多要求一個標記=多一種被擋的方式,而本 repo 心法第 2 條寫死了
「永遠在響的警報等於訓練人忽略警報」。真正會擋人的地方在派工那一端,擋的是一個動作,不是一段文字。
誤攔的出口(誤攔比漏擋更該修)
no-ticket-no-dispatch的地盤,兩支閘不同時開口)沒有任何關鍵字黑名單(leo 2026-08-17 已證偽:8 次誤攔 0 次正確攔截)。
判準只有兩個查表:①【工單】欄位是哪張票(結構解析)②那張票所屬里程碑的標題等不等於主線標題(字串相等)。
驗過了
離線是真的離線:
TICKET_HOST指到http://127.0.0.1:9,任何一條真的走到網路會當場失敗,不會靜靜地變成假綠。「那張票掛在哪」用
ISEP_MAINLINE_FIXTURE定住,與
#63的ISEP_COUNTDOWN_NOW(把時鐘定住)同一個性質。打網路的那半(
list/set/adopt)不在測試裡,因為只有真的 Gitea 驗得了——實跑過:
mainline list回 15 個 open 里程碑跨 5 個 repo;mainline set inkstone/ISEP#57收到同名里程碑的票 13 張;refresh0.8 秒。驗法寫進
docs/TESTING.mdA17。盤點數字(當場數的,不是加減推的)
docs/hooks-inventory.md:53→54 支、68→71 條,並補上新閘那一列人話②「指向空氣的閘」那格寫「(無輸出)」,但
#63之後實跑會吐出countdown-milestone-refresh.sh(它在scripts/不在hooks/)——已標明那是假警報plugin.json:描述數字對齊(39→37 支腳本,是用上面那行指令數的)🔴 版本號沒有動,待總管定版(今天多線並行)。
本分支已經 rebase 到
dbd7c8c(v0.12.0 定版之後),plugin.json的version就是繼承來的0.12.0。⚠️
v0.12.0這個 tag 已經打了,所以這個 PR 併進去之後,0.12.0的內容會跟那顆 tag 不一樣 ⇒ 併的時候要一起升版,不然「ISEP 現在是哪一版」又會變成各說各話(
scripts/check-version-consistency.sh會紅)。📌 已實測:branch 落在現在的 main 上(
HEAD..gitea/main= 0 筆),Gitea 回
mergeable = true。今天 main 動了三次,這是第三次 rebase 後的狀態。怎麼用
兩個順手撞到、但不在本票射程內的閘誤攔
都只擋錯方向、不會放行不該放的,所以我一個字都沒改,留給總管決定要不要開票:
github-contact-guard.sh解 remote 時用的是 session 的 cwd,不是指令裡git -C <dir>指的那個 repo。在一個 origin 指向 GitHub 的專案底下 clone 子 repo 時,
推 Gitea 會被判成推 GitHub 而擋下(繞法:推到一個名字不叫 origin 的 remote)。
milestone-due-guard.sh的判準是「指令字串裡有milestones+ 有-X POST」,不剝 heredoc。所以開這個 PR 時,光是內文提到
milestones?state=open就被當成「在建一個沒有期限的里程碑」而擋下——
與
InkStoneCo#23/#56的根因同款(把資料當指令掃),github-contact-guard已經用lib/strip_heredoc.py修過同一個病。602500a4c7to84f146fbd314 個 open milestone 同時亮著,其中「Mira 現代化」同名活在 5 個 repo, 所以 SOP 說的「那個 active milestone」在現場沒有指涉對象。 - hooks/lib/mainline.py 主線的唯一存放處(一個檔放得下一條),從不打網路 - scripts/mainline show/list/set/clear/refresh/adopt/has - hooks/mainline-focus-guard.sh 派了不在主線上的票 ⇒ 攔一次,問補收還是跳線 - hooks/lib/countdown.py ⏱ 那一行的主線改讀「被標定的」,蓋過「期限最近」的猜測 - hooks/countdown-guard.sh 同一個注入點加第二行 🎯(ISEP#63 那半不動) - 測試 24 條(離線)+ countdown 原有 20 條仍全綠- hooks.json mainline-focus-guard 掛 Agent+Task(派工的兩個入口都要守); SessionStart 多一條 `scripts/mainline refresh`(0.8s,不輪詢) - hooks-inventory 54 支/71 條(當場數的)+補人話一列;順手修掉上一版重複的那一行, 並把「指向空氣」那格的假警報寫清楚(countdown-milestone-refresh 在 scripts/) - TESTING A16(24 條離線)+ A17(要網路的那半怎麼驗) - plugin.json 描述數字對齊;版本不動,待總管定版84f146fbd3to7871921741