出貨鏈三站上 main:tag → release → 開場覆核,release-ship 前置①改看 tag 的樹(inkstone/ISEP#67) #141

Merged
claude-code merged 3 commits from feat/67-release-chain-on-main into main 2026-09-07 05:59:41 +00:00
Member

inkstone/ISEP#67 → comment 6574 的派工:讓出貨鏈「tag → release → 開場覆核」三站都在 main 上、隨 plugin 出貨。

改了什麼

  • hooks/lib/release_chain.py(新):問 Gitea「tag/release 在不在、某個 tag 的樹裡 plugin.json 是幾版、兩個 tag 之間有哪些 commit」——一份判準,release-ship/release-check/SessionStart 信標三處共用。全部匿名讀(D20)。
  • scripts/release-ship前置①改成比「要建的那個 tag 的樹」裡的 plugin.json,不比工作樹、不比「最新的 tag」(總管 09-07 在 v0.23.0 的 checkout 被擋的情境,現在放行)。note 從 Gitea compare 生(從 plugin 快取目錄跑也行,旁邊沒有 git repo 也沒關係)。送完覆核改跑 release-check <那個 tag>
  • scripts/release-check [vX.Y.Z]:可指定版本;v0.19/0.20/0.21 依裁決①標「⏭ 裁定不補」不再黃字(指定它來問仍照擋);補法印正本絕對路徑。
  • hooks/lib/beacon_report.py ④:SessionStart 報「打了 tag 卻沒 release」(Gitea 最新 tag 沒 release)或「定版了沒打 tag」(main 版本比最新 tag 新)——一行:缺哪一站+可以貼著跑的補法。兩者都在時一個字不說。只快取「都在」6 小時,缺件不快取。載入的那一份還沒有 release-ship 時,補法先教 plugin update,不印不存在的路徑。
  • 測試:test-release-ship.sh 14/test-release-check.sh 14/信標 26→33。docs:TESTING A37/A38、盤點表、README 腳本數 60、permissions-allow.json 加 release-ship/release-check 四種形狀(信標印的那條出路在雲端才不會被分類器擋)、mistakes 一條。

驗過(全部在「分支 ⊕ main」這棵樹上)

  • test-release-ship.sh 共 14 項 14;test-release-check.sh 共 14 項 14;isep-presence-beacon.test.sh 通過 33 條,失敗 0 條。
  • 全部 scripts/test-*.shhooks/tests/*.test.sh(不含 live):跟 main 基準線同一組 8 支紅(test-make-cloud-env/ticket-api-bypass 的網路條/dispatch-format/gitea-arm-check 要參數/main-and-prod-push-guard 兩支要參數/prod-write/stage-before-prod——都是這台環境的既有紅,diff 為空),沒有新紅
  • scripts/check-version-consistency.sh✅ 版本一致:plugin.json=0.24.0,最新 tag=v0.24.0claude plugin validate . → Validation passed。
  • 真 Gitea 唯讀:release-ship v0.23.0 --dry-run(工作樹 0.24.0)→ 前置①②、本來就在、覆核 v0.23.0 ✅✅✅ ←、exit 0;release-ship v0.3.4 --dry-run 走到「要建」那條路不 POST;信標打真 Gitea → 安靜。

紅線

沒推 main、沒打 tag、沒建/沒改任何 live release(v0.23.0/v0.24.0 一個 byte 沒動)、沒改 plugin.json 版本號。

待總管定版hooks/lib/beacon_report.py 是會被載入的檔 ⇒ 要升版才到得了任何人手上;plugin.json 的描述欄「56 支腳本」實數是 60,定版時一起改(我沒碰 plugin.json)。

🤖 Generated with Claude Code

https://claude.ai/code/session_0178ef1fGw3XeZtpN7LaZrm4

inkstone/ISEP#67 → comment 6574 的派工:讓出貨鏈「tag → release → 開場覆核」三站都在 main 上、隨 plugin 出貨。 ## 改了什麼 - `hooks/lib/release_chain.py`(新):問 Gitea「tag/release 在不在、某個 tag 的樹裡 plugin.json 是幾版、兩個 tag 之間有哪些 commit」——一份判準,release-ship/release-check/SessionStart 信標三處共用。全部匿名讀(D20)。 - `scripts/release-ship`:**前置①改成比「要建的那個 tag 的樹」裡的 plugin.json**,不比工作樹、不比「最新的 tag」(總管 09-07 在 v0.23.0 的 checkout 被擋的情境,現在放行)。note 從 Gitea compare 生(從 plugin 快取目錄跑也行,旁邊沒有 git repo 也沒關係)。送完覆核改跑 `release-check <那個 tag>`。 - `scripts/release-check [vX.Y.Z]`:可指定版本;v0.19/0.20/0.21 依裁決①標「⏭ 裁定不補」不再黃字(指定它來問仍照擋);補法印正本絕對路徑。 - `hooks/lib/beacon_report.py` ④:SessionStart 報「打了 tag 卻沒 release」(Gitea 最新 tag 沒 release)或「定版了沒打 tag」(main 版本比最新 tag 新)——一行:缺哪一站+可以貼著跑的補法。兩者都在時一個字不說。只快取「都在」6 小時,缺件不快取。載入的那一份還沒有 release-ship 時,補法先教 plugin update,不印不存在的路徑。 - 測試:`test-release-ship.sh` 14/`test-release-check.sh` 14/信標 26→33。docs:TESTING A37/A38、盤點表、README 腳本數 60、`permissions-allow.json` 加 release-ship/release-check 四種形狀(信標印的那條出路在雲端才不會被分類器擋)、mistakes 一條。 ## 驗過(全部在「分支 ⊕ main」這棵樹上) - `test-release-ship.sh` 共 14 項 ✅14;`test-release-check.sh` 共 14 項 ✅14;`isep-presence-beacon.test.sh` 通過 33 條,失敗 0 條。 - 全部 `scripts/test-*.sh` + `hooks/tests/*.test.sh`(不含 live):跟 main 基準線**同一組 8 支紅**(test-make-cloud-env/ticket-api-bypass 的網路條/dispatch-format/gitea-arm-check 要參數/main-and-prod-push-guard 兩支要參數/prod-write/stage-before-prod——都是這台環境的既有紅,diff 為空),**沒有新紅**。 - `scripts/check-version-consistency.sh` → `✅ 版本一致:plugin.json=0.24.0,最新 tag=v0.24.0`。`claude plugin validate .` → Validation passed。 - 真 Gitea 唯讀:`release-ship v0.23.0 --dry-run`(工作樹 0.24.0)→ 前置①②✅、本來就在、覆核 `v0.23.0 ✅✅✅ ←`、exit 0;`release-ship v0.3.4 --dry-run` 走到「要建」那條路不 POST;信標打真 Gitea → 安靜。 ## 紅線 沒推 main、沒打 tag、沒建/沒改任何 live release(v0.23.0/v0.24.0 一個 byte 沒動)、沒改 plugin.json 版本號。 **待總管定版**:`hooks/lib/beacon_report.py` 是會被載入的檔 ⇒ 要升版才到得了任何人手上;`plugin.json` 的描述欄「56 支腳本」實數是 60,定版時一起改(我沒碰 plugin.json)。 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_0178ef1fGw3XeZtpN7LaZrm4
claude-code added 3 commits 2026-09-07 05:53:46 +00:00
工單的斷點是「沒有任何東西會建 release」——v0.22.0 tag 早推了,
Gitea Releases 頁卻停在 v0.18.0,對 leo 等於這一版不存在。

新增兩支獨立的站(不改任何既有閘,只補送貨鏈缺的那兩段):

- scripts/release-ship(= arcrun-rag 的 release-record 站)
  把「已推的 tag」變成「leo 看得到的 release」。三個前置條件「必須在場」才放行:
  ①版本一致(重用 check-version-consistency.sh,不另立判準)②tag 真的在 Gitea
  ③release note 有內容(沒給就從 git log 自動生事實清單)。冪等;建完回頭跑
  release-check 拿收貨端覆核——送的人說成功不算。

- scripts/release-check(= release-check 站)
  回頭問每一段「到了嗎」,而且**問的是收貨端**(Gitea tags/releases、這個 session
  載到的 plugin.json),不聽送的人說。現行版本缺 tag 或缺 release ⇒ exit 2 並指名
  缺哪一站+怎麼補(工單驗收 4)。判準是結構(定版 commit / tag / release 在不在),
  不是關鍵字黑名單。

- 兩支離線測試(RELEASE_*_FIXTURE,不打 Gitea):release-check 9 項、release-ship 7 項全過。

實跑證據:release-ship v0.22.0 已在 Gitea 建起
https://git.uncle6.me/inkstone/ISEP/releases/tag/v0.22.0
release-check 覆核 v0.22.0 tag+release 都在(收貨端事實)。

版本:新增的是 scripts/(非自動載入),本身不需升版;待總管定版隨下一版一起送出。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012656SLtw96aCxTgScH5bbK
- hooks/lib/release_chain.py:問 Gitea 的判準一份三處用(匿名讀,D20)
- scripts/release-ship:前置①比「要建的那個 tag 的樹」裡的 plugin.json,不比工作樹/最新 tag
  (總管 09-07 在 v0.23.0 被擋的情境現在放行);note 從 Gitea compare 生,從 plugin 快取跑也行;
  覆核改跑 release-check <那個 tag>
- scripts/release-check [vX.Y.Z]:指定版本;v0.19/0.20/0.21 依裁決標「不補」不再黃字;補法印正本絕對路徑
- hooks/lib/beacon_report.py ④:最新 tag 沒 release/main 定版沒打 tag ⇒ 一行缺站+補法;都在安靜;
  只快取「都在」6 小時
- 測試:test-release-ship 14、test-release-check 14、信標 26→33;docs:TESTING A37/A38、盤點表、README 60 支腳本、
  白名單加 release-ship/release-check 形狀、mistakes 一條
- 沒改 plugin.json 版本號(待總管定版)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178ef1fGw3XeZtpN7LaZrm4
claude-code merged commit b4d47e94c9 into main 2026-09-07 05:59:41 +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#141