主線成員改由相依邊決定,不靠同名里程碑;adopt 別 repo 的票=加相依到 hub 票;帳本落在 InkStoneCo/system-dev(inkstone/ISEP#133 → 6743)
leo 2026-09-07:「拆,誰說『同名跨 repo 是 mainline 機制的一部分』,早就定了只有一個 milestone,不同 repo 用指針」。上一版 scripts/mainline 檔頭把現場的樣子(5 個同名)寫成 「既有做法」,成員也照標題跨 repo 收;總管照它做、抄進 ops-facts、還在 arcrun-rag 補建了一個同名的。 改了什麼(判準全部是 Gitea 欄位,沒有標題比對): - hooks/lib/mainline.py:collect_members()=hub 里程碑裡的票+hub 票,沿 /dependencies 邊 (跨 repo)收下去;belongs() 要同時拿到「掛哪個 milestone」+「誰把它當相依」才准說「不屬於」, 只知一半回 None(閘放行);project_roots() 給主線檔與帳本共用 - scripts/mainline:set --hub <票>、adopt 別 repo ⇒ POST 相依到 hub 票(--via 可指定成員), 沒 hub 票時擋下並給兩條走得通的路,不建同名里程碑;has 查 /blocks; refresh --members 才重收(真 Gitea 25 張要 19 秒,SessionStart 成本不變) - scripts/ticket:add_dependency() 一份(subtask 與 adopt 共用,409 冪等);pick 主線組走成員清單, 逾期組一個里程碑物件一組;claim 的主線判定改看相依;pickable(None) 給靠邊進來的票 - hooks/mainline-focus-guard.sh:新鮮查詢問 milestone+/blocks,補收出路明講不要開同名里程碑 - scripts/milestone-account:帳本找家用同一把尺,退回原始碼目錄只在它有 .git(plugin 快取沒有) 測試:新 hooks/tests/mainline-members-by-dependency.test.sh 56 條(假 Gitea 照真的回 201/409); scripts/test-ticket-pick.sh 48→53 條(池子改用相依邊,補「同名沒邊 ⇒ 不抓」); 既有 mainline-focus-guard/repo-mirror/gitea-fallback/idle/milestone-account/debt-worklist/ handoff-writeback 全綠。真 Gitea 唯讀實跑:set --hub inkstone/InkStoneCo#44 收到 25 張、5 個 repo, mira#6/ISEP#130/ISEP#140/arcrun-rag#104 都在,不必新增任何邊。 版本:待總管定版(改了會被載入的 hook/scripts)。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0178ef1fGw3XeZtpN7LaZrm4
This commit is contained in:
@@ -441,3 +441,33 @@ leo 當場:「**這些為什麼不寫到票裡?**」
|
||||
📌 推廣:**一道閘若教人做一件「之後要還」的事(開 worktree、蓋戳記、借共用目錄),
|
||||
「還」那一步也要長在某個事件上**,不然它必然被留下。收工的事件是 PostToolUse(Agent|Task),
|
||||
票號就在那裡(`baton-handback-guard.sh`/`issue-status-autoflip.sh` 都站在同一個位置)。
|
||||
|
||||
## ⚠️ MISTAKE: 工具檔頭把「現場的樣子」寫成「既有做法」,於是它變成了規則
|
||||
|
||||
票: `inkstone/ISEP#133`(→ comment 6743)
|
||||
日期: 2026-09-07
|
||||
|
||||
症狀: `scripts/mainline` 與 `hooks/lib/mainline.py` 檔頭寫「跨 repo 同名是既有做法,不動它」,
|
||||
成員判定=「票所屬 milestone 的標題與主線相同(不分 repo)」。總管早上照它做,把那句
|
||||
抄進 InkStoneCo 的 ops-facts(「同名里程碑跨 repo 是 mainline 機制的一部分」),
|
||||
還在 arcrun-rag 補建了一個同名的(#61)。leo:「**拆,誰說『同名跨 repo 是 mainline
|
||||
機制的一部分』,早就定了只有一個 milestone,不同 repo 用指針**」。
|
||||
規則其實早就寫在票上:`inkstone/ISEP#30`(08-20)、`inkstone/InkStoneCo#44`(08-27)。
|
||||
|
||||
原因: ISEP#82 那天現場真的有 5 個同名的「Mira 現代化」,工具作者把「現場如此」記成
|
||||
「既有做法」——而讀檔頭的人分不出「作者觀察到的」與「leo 定的」。
|
||||
**工具是會被抄的文件**:它說什麼是規則,做的人就照什麼做;寫錯的方向會被放大成動作
|
||||
(多建一個里程碑),不是只停在一句話。
|
||||
同款:帳本路徑退到「原始碼所在 repo 的 system-dev/」——本機是真 checkout 所以對,
|
||||
雲端的原始碼在 plugin 快取,那天記的 5 筆帳下一個 session 就不見。判準寫成
|
||||
「原始碼在哪」而不是「哪裡會被 clone 走」,換一台機器就錯。
|
||||
|
||||
正確做法:
|
||||
- 檔頭只准寫**規則與出處**(票號/leo 原話),不准把「現場現在長這樣」寫成「既有做法」。
|
||||
要記現場,寫「2026-xx-xx 實查現場是 X」,並註明它不是判準。
|
||||
- 判準用 Gitea 的欄位:成員=hub 里程碑裡的票 + hub 票 + 沿 `/dependencies` 收到的(跨 repo);
|
||||
`belongs()` 要同時拿到「掛哪個 milestone」與「誰把它當相依」才准說「不屬於」,只知一半回 None。
|
||||
- 帳本這種「隨 repo 走的狀態」找家用同一把尺(`mainline.py::project_roots()`),
|
||||
退回原始碼目錄只在它有 `.git`(真的 checkout)時;plugin 快取沒有 `.git`。
|
||||
- 驗法要驗「關掉同名里程碑之後成員還在不在」(A41 ㉛–㉞),不是「同名時列得出來」。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user