身為拿到版本的人,我要知道這一版由哪幾個 repo 的哪幾版組成,我才不會退版退一半變成沒測過的組合 #84

Closed
opened 2026-08-27 14:30:57 +00:00 by claude-code · 1 comment
Member

問題

一次交貨常常同時動到好幾個 repo。但現在沒有任何地方記著「這一版 = 哪幾個 repo 的哪幾個版本」

結果是兩件事會出錯:

  • leo 拿到一個版本,但那個版本其實要配另一個 repo 的某一版才會動——沒人記得是哪一版
  • 要退版的時候,只退了其中一個 repo,剩下的還停在新版 ⇒ 變成一組從來沒測過的組合

目標

一次交貨產出一份清單,寫明這一版包含哪些 repo 的哪些版本,例如:

R-2026.08.30 = Arcrun v1.4.52 + arcrun-collector v0.18.36 + arcrun-rag v...

然後:送測、放行、出貨、退版,全部以這份清單為單位,不以單一 repo 為單位。清單一旦凍結就不再加東西,新的需求進下一版。

沒有更動的 repo 不出空版本;有更動的一定要出版本。

驗收條件

  1. 做一次跨兩個 repo 的交貨 → 要生出一份清單,而且清單上的版本號真的存在(不是寫上去而已,要抓得到那個 release)
  2. 拿清單去退版 → 兩個 repo 要一起回到上一份清單記的版本
  3. 試著只退其中一個 → 要被擋下來
  4. leo 打開那份清單 → 要看得懂「我現在手上是哪一版,它由什麼組成」

deliverable 類型

code(→ PR)


細節

這條在 SOP 裡的位置:S9-2(凍結版本清單)、S9-5(退版以 manifest 為單位)、§7(兩層版本規則)。

已經有的、不要重造release-tag-guard.sh 管的是「打 tag 那一刻版本號三處一致」(單一 repo 內)。本票是它上面那一層——跨 repo 的組合。兩層不衝突,是包含關係。

現況inkstone/arcrun-rag#88(「我看到的版本從 1.4.25 直接跳到 1.4.43」)定的是內外兩條版本號的規格,也是單 repo 的。跨 repo 組合這一層沒有任何票。

為什麼是真問題不是理論:D95 拆 arcrun-collector 出去之後,daemon 和雲端零件包變成兩條獨立版本線(arcrun-rag#47 milestone 描述裡寫著「與雲端零件包同日出,但版本線獨立」)。兩條線獨立之後,「哪兩版是一組」就沒有地方記了。

單 repo 的情況:清單退化成一個版本號,規則不變,不必特例。


🔎 為什麼另開一張票而不是貼進既有的(開票時聲明):arcrun-rag#88 定單一 repo 的內外兩條版本號,release-tag-guard 管單 repo 打 tag 三處一致。本票是跨 repo 組合清單,D95 拆出 arcrun-collector 後才出現。
當時搜尋:manifest 跨 repo 版本清單 退版 → 命中 68 張。

## 問題 一次交貨常常同時動到好幾個 repo。但現在**沒有任何地方記著「這一版 = 哪幾個 repo 的哪幾個版本」**。 結果是兩件事會出錯: - leo 拿到一個版本,但那個版本其實要配另一個 repo 的某一版才會動——沒人記得是哪一版 - 要退版的時候,只退了其中一個 repo,剩下的還停在新版 ⇒ **變成一組從來沒測過的組合** ## 目標 一次交貨產出一份清單,寫明這一版包含哪些 repo 的哪些版本,例如: ``` R-2026.08.30 = Arcrun v1.4.52 + arcrun-collector v0.18.36 + arcrun-rag v... ``` 然後:**送測、放行、出貨、退版,全部以這份清單為單位**,不以單一 repo 為單位。清單一旦凍結就不再加東西,新的需求進下一版。 沒有更動的 repo 不出空版本;有更動的一定要出版本。 ## 驗收條件 1. 做一次跨兩個 repo 的交貨 → **要生出一份清單,而且清單上的版本號真的存在**(不是寫上去而已,要抓得到那個 release) 2. 拿清單去退版 → **兩個 repo 要一起回到上一份清單記的版本** 3. 試著只退其中一個 → **要被擋下來** 4. leo 打開那份清單 → 要看得懂「我現在手上是哪一版,它由什麼組成」 ## deliverable 類型 code(→ PR) --- <details><summary>細節</summary> **這條在 SOP 裡的位置**:S9-2(凍結版本清單)、S9-5(退版以 manifest 為單位)、§7(兩層版本規則)。 **已經有的、不要重造**:`release-tag-guard.sh` 管的是「打 tag 那一刻版本號三處一致」(單一 repo 內)。本票是它上面那一層——**跨 repo 的組合**。兩層不衝突,是包含關係。 **現況**:`inkstone/arcrun-rag#88`(「我看到的版本從 1.4.25 直接跳到 1.4.43」)定的是**內外兩條版本號**的規格,也是單 repo 的。跨 repo 組合這一層沒有任何票。 **為什麼是真問題不是理論**:D95 拆 `arcrun-collector` 出去之後,daemon 和雲端零件包變成兩條獨立版本線(`arcrun-rag#47` milestone 描述裡寫著「與雲端零件包同日出,但版本線獨立」)。兩條線獨立之後,「哪兩版是一組」就沒有地方記了。 **單 repo 的情況**:清單退化成一個版本號,規則不變,不必特例。 </details> --- > 🔎 **為什麼另開一張票而不是貼進既有的**(開票時聲明):arcrun-rag#88 定單一 repo 的內外兩條版本號,release-tag-guard 管單 repo 打 tag 三處一致。本票是跨 repo 組合清單,D95 拆出 arcrun-collector 後才出現。 > 當時搜尋:`manifest 跨 repo 版本清單 退版` → 命中 68 張。
claude-code added this to the SOP 變成閘 milestone 2026-08-27 14:32:29 +00:00
claude-code added the
s
todo
type
governance
labels 2026-08-27 14:32:30 +00:00
Author
Member

【subagent】PR inkstone/ISEP#103 已開,等總管給結論。
分支 feat/release-manifest-and-milestone-account(與 inkstone/ISEP#85 同一條,兩張票共用檔案)。

交的是 scripts/release-manifest(freeze/verify/show/list/current/diff/rollback)。四條驗收:

  1. 清單上的版本號真的存在freeze 前每一格都去 Gitea 抓過,抓不到不給凍結。
    真實唯讀重演:inkstone/ISEP@v0.11.0inkstone/arcrun-rag@1.4.60 兩格都抓到真的 release;
    換成 v99.0.0 當場被擋。
  2. 拿清單去退版,兩個 repo 一起回到上一份清單記的版本rollback 吐出整份的每一格,
    含「已經在目標版本、不必動」那幾格(列出來才證明沒有一格被漏掉)。
  3. 只退其中一個要被擋下來--only <某個 repo> 直接拒絕,訊息把整份清單列給你看。
  4. leo 打開看得懂releases/INDEX.md 自動重寫,最上面那份標「← 現在手上的這一版」。

離線測試 scripts/test-release-manifest.sh通過 21 條,失敗 0 條(不打 Gitea、不建任何真的 release)。

📌 我自己裁的兩件,寫在 PR 內文裡等你打回:① 沒有配 PreToolUse 閘(誤攔風險 > 漏擋代價,工具本身就是唯一的門,同 pr-verdict 的形狀);② 清單寫在專案根的 releases/ 而不是 plugin 目錄(plugin update 會把 plugin 目錄整個換掉)。

【subagent】**PR `inkstone/ISEP#103` 已開,等總管給結論。** 分支 `feat/release-manifest-and-milestone-account`(與 `inkstone/ISEP#85` 同一條,兩張票共用檔案)。 交的是 `scripts/release-manifest`(freeze/verify/show/list/current/diff/rollback)。四條驗收: 1. **清單上的版本號真的存在** — `freeze` 前每一格都去 Gitea 抓過,抓不到不給凍結。 真實唯讀重演:`inkstone/ISEP@v0.11.0` + `inkstone/arcrun-rag@1.4.60` 兩格都抓到真的 release; 換成 `v99.0.0` 當場被擋。 2. **拿清單去退版,兩個 repo 一起回到上一份清單記的版本** — `rollback` 吐出整份的每一格, 含「已經在目標版本、不必動」那幾格(列出來才證明沒有一格被漏掉)。 3. **只退其中一個要被擋下來** — `--only <某個 repo>` 直接拒絕,訊息把整份清單列給你看。 4. **leo 打開看得懂** — `releases/INDEX.md` 自動重寫,最上面那份標「← 現在手上的這一版」。 離線測試 `scripts/test-release-manifest.sh` → **通過 21 條,失敗 0 條**(不打 Gitea、不建任何真的 release)。 📌 我自己裁的兩件,寫在 PR 內文裡等你打回:① 沒有配 PreToolUse 閘(誤攔風險 > 漏擋代價,工具本身就是唯一的門,同 `pr-verdict` 的形狀);② 清單寫在**專案根的 `releases/`** 而不是 plugin 目錄(`plugin update` 會把 plugin 目錄整個換掉)。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: inkstone/ISEP#84