fix(88): 撤回「產生端吐裸號」的宣稱——那個 v 是版本線判別器,不能單獨拿掉
總管複驗退回一格(`inkstone/arcrun-rag#88#issuecomment-3082`),退得對。
我照他要的兩條路去查,結論是**選 B,而且原本那個改動本身有 bug**。
## 兩件事要分開講
**① 總管的事實宣稱有一處錯,但他看到的現象是真的**
「這條分支一行都沒動 daemon-version.py」— 不對,上一個 commit 動了 37 行,
含 `version = "v%d.%d.%d"` → `"%d.%d.%d"`。他跑 `daemon-version.py` 得到 `v0.18.29`
也是真的:當時的過渡規則讓「重打已發佈的版本」沿用原本寫法。
⇒ 他跑對了指令、看到真東西,只是把原因歸成「沒改」。
**② 但我的改動確實有 bug,而且比他指出的更嚴重**
`^## v` 這條判斷式有**四份各自為政的拷貝**(daemon-freshness/daemon-in-bundle-gate/
ship.mjs daemon-sync/daemon-version.py),三份只認帶 `v` 的。
產生端一旦戳出 `## 0.18.30(…)`,那三份**不會報錯**,而是往下比對到更舊的
`## v0.18.29(…)` ⇒ **打包出 0.18.30 的執行檔,manifest 卻宣稱是 v0.18.29。**
版本號說謊,靜默,21 站全綠。上一個 commit 就埋著這顆。
## 為什麼不是把三份放寬成 `v?`(我試了,當場被測試擋下)
🔴 **那個 `v` 目前身兼「哪一條版本線」的判別器。**
放寬後 daemon 的閘開始把雲端那條 `## 1.4.47(…)` 當成 daemon 版本撈走
⇒ `daemon-in-bundle-gate.test.mjs` ①⑮⑯ 轉紅,而它們釘的正是 D95 第二輪剛修好的
「出貨線指到錯的 changelog 卻安靜放行」。`daemon-notes.changelogRelFor()` 也用 `/^v/`。
⇒ 「不要 v」要落到產生端,得**先給那些閘一個替代判別器**
(建議拿 `DAEMON_LINE` 比對,例 `^## v?0\.18\.\d+(`,同時擋「錯的檔」與「錯的線」)。
那要動 `topReleasedVersion()` 等對外簽章、跨 installer/ 與 collector/,
**與正在進行的 collector 拆 repo 相衝** ⇒ 不在這條分支做。
## 這個 commit 做了什麼
- 產生端**恢復原行為**(一律吐 `v`):不留「產生端裸號+閘只認 v」那顆靜默炸彈
- 四份拷貝**收成一份**(`daemon-notes.DAEMON_RELEASED_RE`,維持嚴格版)
⇒ **零行為變更**,但哪天要改格式只需改一個地方,而不是記得改四個
- 把「為什麼還不能改裸號」釘成一支會說話的測試(`daemon-version.test.mjs` ⑤⑥)
——不是註解,是紅燈
- 兩處註解寫清楚接手要先做什麼
**上一個 commit 的另外兩格(release 掛成品、內外對應)未受影響,總管已複驗通過。**
測試:installer 252/252、collector 6/6。
This commit is contained in:
@@ -237,10 +237,28 @@ def main():
|
||||
nxt = (major, minor, 0)
|
||||
else:
|
||||
nxt = (prev[0], prev[1], prev[2] + 1)
|
||||
# 🔴 新版一律**裸號**(leo 2026-08-17「不要 v」)。這一行就是規約真的被執行的地方:
|
||||
# 往下 `heading` 寫進 changelog、`print(version)` 餵給 build-*.sh 的 `${VERSION}`,
|
||||
# 所以檔名(`Arcrun-0.18.29.dmg`)與 manifest.daemon.version 同時就跟著裸了。
|
||||
version = "%d.%d.%d" % nxt
|
||||
# 🔴 這裡**還是吐 `v`**,而 leo 2026-08-17 要的是「不要 v」。這不是漏掉,是**擋住了**:
|
||||
#
|
||||
# 這一行往下走 `heading` 寫進 changelog、`print(version)` 餵給 build-*.sh 的
|
||||
# `${VERSION}` ⇒ 檔名(`Arcrun-v0.18.x.dmg`)與 `manifest.daemon.version`
|
||||
# ⇒ `install.arcrun.dev/api/latest` 的 `daemon.version`。
|
||||
# **leo 看到並質問的那個 `v`,就是從這一行長出去的。**
|
||||
#
|
||||
# 2026-08-18 實際試著改成裸號,當場撞到:**那個 `v` 目前身兼「哪一條版本線」的
|
||||
# 判別器**。三支閘(daemon-freshness/daemon-in-bundle-gate/ship.mjs 的
|
||||
# daemon-sync)+`daemon-notes.changelogRelFor()` 都靠「有沒有 v」認出
|
||||
# 「這份 changelog 到底是不是 daemon 的」。一改裸號,daemon 的閘就開始把雲端那條
|
||||
# `## 1.4.47(…)` 當成 daemon 版本撈走 ⇒ `daemon-in-bundle-gate.test.mjs`
|
||||
# 的 ①⑮⑯ 三支轉紅,而它們釘的正是 D95 第二輪剛修好的病
|
||||
# (出貨線指到錯的 changelog 卻**安靜放行**)。
|
||||
#
|
||||
# ⇒ 要落到產生端,得**先給那三支閘一個替代判別器**(建議拿 `DAEMON_LINE`
|
||||
# 宣告的線去比對,例 `^## v?0\.18\.\d+(`——同時擋掉「錯的檔」與「錯的線」,
|
||||
# 且不依賴外觀)。那會動到 `topReleasedVersion()` 等對外簽章、要跨 installer/
|
||||
# 與 collector/ 一起改,與正在進行的 collector 拆 repo 相衝。
|
||||
# ⇒ 交接說明見 `inkstone/arcrun-rag#88`。**在那之前不要單獨把這一行改裸**,
|
||||
# 單獨改的下場是「打包出新版執行檔,manifest 卻宣稱是舊版」——靜默、且 21 站全綠。
|
||||
version = "v%d.%d.%d" % nxt
|
||||
|
||||
if stamp:
|
||||
check_or_record(version, True)
|
||||
|
||||
Reference in New Issue
Block a user