主線成員由相依邊決定,不靠同名里程碑;adopt 別 repo 的票=加相依到 hub 票;帳本落在 InkStoneCo/system-dev(inkstone/ISEP#133) #151

Merged
claude-code merged 2 commits from feat/133-members-by-dependency into main 2026-09-07 10:58:58 +00:00
Member

【身份】isep-hand/inkstone/ISEP/feat/133-members-by-dependency

票:inkstone/ISEP#133 → comment 6743

改了什麼

leo 2026-09-07:「拆,誰說『同名跨 repo 是 mainline 機制的一部分』,早就定了只有一個 milestone,不同 repo 用指針」。

  • hooks/lib/mainline.pycollect_members()=hub 里程碑裡的票+hub 票,沿 /dependencies 邊(跨 repo)收下去;belongs() 要同時拿到「掛哪個 milestone」+「誰把它當相依」才准說「不屬於」,只知一半回 None(閘放行);project_roots() 給主線檔與帳本共用
  • scripts/mainlineset --hub <票>adopt 別 repo 的票 ⇒ POST 相依到 hub 票(--via 可指定成員),沒 hub 票時擋下並給兩條走得通的路,不建同名里程碑has/blocksrefresh --members 才重收成員(真 Gitea 25 張要 19 秒,SessionStart 成本不變)
  • scripts/ticketadd_dependency() 一份(subtaskadopt 共用,409 冪等);pick 主線組走成員清單、逾期組一個里程碑物件一組;claim 的主線判定改看相依
  • hooks/mainline-focus-guard.sh:新鮮查詢問 milestone+/blocks;補收出路明講不要去開同名里程碑
  • scripts/milestone-account:帳本找家用同一把尺,退回原始碼目錄只在它有 .git(plugin 快取沒有)
  • 文件:TESTING A41(新)/A31(48→53)、hooks-inventory 兩列措辭、governance 兩處「各 repo 同名」加已推翻註記、mistakes.md 一條

驗過什麼

  • bash hooks/tests/mainline-members-by-dependency.test.sh → 通過 57 條,失敗 0 條(假 Gitea 照真的回 201/409)
  • bash scripts/test-ticket-pick.sh → 通過 53 條,失敗 0 條
  • 既有 mainline-focus-guard 24/repo-mirror 17/gitea-fallback 31/idle 61/milestone-account 23+guard 22/debt-worklist 47/handoff-writeback 49/comment-carries-task 29 全綠
  • 真 Gitea 唯讀實跑(state 與鏡像指到暫存目錄,不寫 Gitea):mainline set inkstone/Arcrun#48 --hub inkstone/InkStoneCo#44 收到 25 張、5 個 repo,mira#6ISEP#130ISEP#140arcrun-rag#104 都在——不必新增任何邊;has 四張回「在」;ticket pick --all 主線組回 Arcrun#197mira#5
  • 整套離線測試另有 7 支在 main 上就紅(prod-write/stage-before-prod/main-and-prod-push×2/gitea-arm-check/make-cloud-env/ticket-api-bypass),同 rc、同 數,與本 PR 無關

寫入那半也真跑過(commit 19face1)

  • adopt inkstone/ISEP#133(hub=InkStoneCo#44,state 指暫存):POST 成功、/blocksInkStoneCo#44、清空快取後 has/blocks 判「在」
  • 重複 POST 真 Gitea 回 500(假伺服器原本猜 409 ⇒ 第二次 adopt 會炸)⇒ add_dependency() 改成先讀 /dependencies,邊在就不 POST;假伺服器改照真的回 500;A41 56→57 條
  • 測試邊已 DELETE 復原(201,/blocks 空)

版本:待總管定版(改了會被載入的 hook/scripts)。

🤖 Generated with Claude Code

https://claude.ai/code/session_0178ef1fGw3XeZtpN7LaZrm4

【身份】isep-hand/inkstone/ISEP/feat/133-members-by-dependency 票:inkstone/ISEP#133 → comment 6743 ## 改了什麼 leo 2026-09-07:「拆,誰說『同名跨 repo 是 mainline 機制的一部分』,早就定了只有一個 milestone,不同 repo 用指針」。 - `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` 的主線判定改看相依 - `hooks/mainline-focus-guard.sh`:新鮮查詢問 milestone+`/blocks`;補收出路明講不要去開同名里程碑 - `scripts/milestone-account`:帳本找家用同一把尺,退回原始碼目錄只在它有 `.git`(plugin 快取沒有) - 文件:TESTING A41(新)/A31(48→53)、hooks-inventory 兩列措辭、governance 兩處「各 repo 同名」加已推翻註記、mistakes.md 一條 ## 驗過什麼 - `bash hooks/tests/mainline-members-by-dependency.test.sh` → 通過 57 條,失敗 0 條(假 Gitea 照真的回 201/409) - `bash scripts/test-ticket-pick.sh` → 通過 53 條,失敗 0 條 - 既有 mainline-focus-guard 24/repo-mirror 17/gitea-fallback 31/idle 61/milestone-account 23+guard 22/debt-worklist 47/handoff-writeback 49/comment-carries-task 29 全綠 - 真 Gitea **唯讀**實跑(state 與鏡像指到暫存目錄,不寫 Gitea):`mainline set inkstone/Arcrun#48 --hub inkstone/InkStoneCo#44` 收到 25 張、5 個 repo,`mira#6`/`ISEP#130`/`ISEP#140`/`arcrun-rag#104` 都在——不必新增任何邊;`has` 四張回「在」;`ticket pick --all` 主線組回 `Arcrun#197`、`mira#5` - 整套離線測試另有 7 支在 **main 上就紅**(prod-write/stage-before-prod/main-and-prod-push×2/gitea-arm-check/make-cloud-env/ticket-api-bypass),同 rc、同 ❌ 數,與本 PR 無關 ## 寫入那半也真跑過(commit 19face1) - `adopt inkstone/ISEP#133`(hub=InkStoneCo#44,state 指暫存):POST 成功、`/blocks` 回 `InkStoneCo#44`、清空快取後 `has` 靠 `/blocks` 判「在」 - 重複 POST 真 Gitea 回 **500**(假伺服器原本猜 409 ⇒ 第二次 adopt 會炸)⇒ `add_dependency()` 改成先讀 `/dependencies`,邊在就不 POST;假伺服器改照真的回 500;A41 56→57 條 - 測試邊已 DELETE 復原(201,`/blocks` 空) 版本:**待總管定版**(改了會被載入的 hook/scripts)。 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_0178ef1fGw3XeZtpN7LaZrm4
claude-code added 1 commit 2026-09-07 10:41:29 +00:00
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
claude-code added 1 commit 2026-09-07 10:46:48 +00:00
真 Gitea 實跑(hub=InkStoneCo#44、子票=ISEP#133):第一次 POST 成功、/blocks 回 #44、
清空快取後 has 靠 /blocks 判「在」;第二次 POST 回 500——假伺服器原本猜 409,adopt 第二次會炸。
add_dependency() 改成先讀 parent 的 /dependencies,邊在就不 POST(判準是 Gitea 的事實,不是回應碼);
假伺服器改照真的回 500;A41 56→57 條。測完 DELETE 復原(201,/blocks 空)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178ef1fGw3XeZtpN7LaZrm4
claude-code merged commit f6791408ab into main 2026-09-07 10:58:58 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: inkstone/ISEP#151