Leo
|
bd25efaae5
|
refactor(collector): 剪掉臍帶——collector/ 自己就算得出自己的版本號(D95 第一輪②)
leo 2026-08-17:「身為管理者,你要從頭到尾**不要有很多扭曲**,因為你根本不記得
你做的這些扭曲,**每次都要查**,很直接,源碼、產出物,從 stage 到 prod。」
`collector/` 原本要伸手到 repo 根才算得出自己的版本,共四條:
① `daemon-version.py` 讀 `docs-site/src/content/docs/help/changelog.md`
② `daemon-version.py` 讀 `ROOT/DAEMON_LINE`
③ `daemon-version.py` 的原始碼指紋從 repo 根 `git ls-files collector`
④ `changelog-section.sh` 讀 `$REPO_ROOT/docs-site/...` 並 exec
`$REPO_ROOT/installer/scripts/daemon-notes.mjs`
⑤(複驗才發現的第五條)`build-msix.sh` 用 `git rev-parse --show-toplevel`/../../.env
推 InkStoneCo 頂層拿 MS Store Identity
現在全部落在 `collector/` 內部:
· `collector/CHANGELOG.md` ← 新家。**原檔同時裝著兩條版本線**
(桌面版 `v0.18.x` + 雲端引擎 `1.4.x`),已按版號格式拆開;
雲端那 17 段原地不動留在 docs-site,桌面版這 30 段搬過來。
· `collector/DAEMON_LINE` ← 從 repo 根搬進來
· 指紋改以 `collector/` 為根算(`cwd=COLLECTOR`、pathspec `.`)
⇒ 相對路徑前綴變了、而路徑有進雜湊 ⇒ `FINGERPRINT_ALGO` 3→4,
照既有設計讓帳本自動整本作廢重記(不要手改 JSON)
· `daemon-notes.mjs` 實作搬進 `collector/cmd/arcrun-app/`,
`installer/scripts/daemon-notes.mjs` 變薄殼轉呼叫
⇒ **根可以往內伸手,collector 不可以往外伸手**,方向單向
· `build-msix.sh` 改成往上找「帶著那把鍵的 .env」,
leo 08-06「腳本自己去讀不要再問人」原樣保留,但不再綁目錄結構
驗收閘:`collector/check-standalone.sh`——不是 grep,是**行為證明**:
把 collector/ 的檔案單獨複製到 repo 之外的臨時目錄、在那裡 git init,
再跑版本計算與打包前置閘。跑得起來=真的自足。
自己發現並修掉的三件:
· `arcrun-tray/assets/store/` 與 `--setup` 其實還活著(見上一顆 commit)
· 兩支同名的 `daemon-notes.mjs` CLI 守衛比的是**檔名尾綴**
⇒ 兩支一起開火,問雲端版號時 collector 那支先 exit(1),
薄殼根本沒機會查 docs-site。改成比絕對路徑。
· `collector/CHANGELOG.md` 的「怎麼出新版」說明若照抄那行標題,
會被 `daemon-version.py` 的純字串比對當成「有待發佈內容」而誤升版
⇒ 說明裡刻意不寫成真的標題,並把這個邊角寫在檔案裡
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-18 13:05:33 +08:00 |
|
Leo
|
2bbfa453d3
|
更新畫面那一行由 changelog 機械導出,不再出貨當下手工排版
leo 2026-08-08 真機看到 v0.18.24 的更新畫面:
「不要這麼長的散文,簡短講改了什麼,細節去 docs 讀。」
畫面是一整面文字牆,`**粗體**` 還原樣露出來。
真兇不是文案,是**最後一哩沒有機制**:
- 單一真相源(changelog.md)08-06 就立好了(30f726b),
changelog-section.sh 也有 --check 閘擋「忘了寫更新內容」。
- 但它的**投影**那一段是 `tr '\n' ' '`——把整段散文壓成一坨,
而且 grep 全 repo **沒有任何東西呼叫它**(build-*.sh 只用 --check)。
- ⇒ 每次出貨都是有人臨時寫一段 python 折行塞進 manifest,
每次重寫一次、沒人檢查結果長什麼樣。
為什麼只能是一行短句(不是排版沒做好):
main.js:215 是 `<div class="d">${esc(u.notes)}</div>`
① esc() ⇒ 任何 markdown 符號都會原樣露出
② .d 沒有 white-space:pre ⇒ 塞 \n 也不會分行
改法:
- 新增 installer/scripts/daemon-notes.mjs =**唯一的投影器**:
只取 changelog 每條的粗體標題、串成一行、超長截斷並導去說明文件。
- changelog-section.sh 的投影段改成委派給它(--check 閘原樣保留),
兩邊同一份規則不會漂移。
- ship.mjs 新增 notes 步驟:每次出貨自動套用,手改過的會被改回來。
- release.mjs 的 verifyManifest 加第四條規則:notes 必須存在、無 markdown、
單行、不超長,且**等於 changelog 的機械投影**——手改一律擋下。
實測:
· v0.18.24/23/22 三版各自產出 62/51/80 字,零手工調整
· 手改成一段散文 → verify-manifest exit 1,兩條規則都抓到
· 再跑一次管線 → 自己改回正確那一行
· 用 daemon 真實 style.css + main.js 的真實 markup 渲染兩版對照並截圖:
舊 576 字(含 8 個原樣露出的 **)vs 新 62 字三行讀完
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-08 21:47:31 +08:00 |
|
Leo
|
be817b3c16
|
更新內容機械化+manifest 補上「宣告版本==產物版本」的閘+前端顯示同步器版本
回應 leo 08-06 兩問與兩項新需求。
## ①「更新內容還要寫在 docs 裡,機械化要怎麼做」
答:改的是「寫在哪」,不是「誰來寫」。
- 單一真相源=docs-site/.../help/changelog.md(本來就存在,用戶語言那份)
- 新增 changelog-section.sh:抽出某版段落(供 manifest.notes 投影用)
+ --check 模式當閘
- build-win.sh/build-mac.sh 接上閘:**changelog 找不到這版段落 ⇒ 中止打包**
⇒「忘了寫更新內容」變成不可能,而不是靠誰記得
- 已寫 v0.18.8 的用戶語言版本說明(本次五修)
## ② manifest 的閘:這次的病是從兩條規則中間的縫穿過去的
verifyManifest 對 daemon 只驗 ①version 欄在不在 ②file 指的檔存不存在。
08-06 那次**兩條都過**(宣告 v0.18.5、`-v0.18.4.zip` 檔案真的存在)⇒ 全綠放行。
新增第三條:宣告版本必須等於產物真正的版本
(a) 檔名要帶宣告的版本(光這條就足以擋下 08-06 那次)
(b) .exe 再驗一層:版本字串要真的在二進位裡(檔名可改,內嵌版本改不了)
實測(用當時的真實 manifest 值重現):
· 宣告 v0.18.5 + 檔名 -v0.18.4.zip → ❌ 擋下(mac/win 各一條)
· 檔名改成 v0.18.8 但內容是 v0.18.7 那顆 → ❌ 擋下(規則 b)
## ③ 前端顯示同步器版本+下載入口
leo:「連我都沒辦法確認,所以用戶到底是否最新版他自己也不知道」
- /api/latest 新增 daemon 欄(version/notes/downloads),由 daemonOf(env) 讀釘點
manifest——與 releaseOf 同原則同真相源,不留手抄本。
下載網址走 raw + 釘點 sha,與 selfupdate.go:158 同源(不自創第二條路)。
- rag.arcrun.dev 步驟 4 補上**真的下載按鈕**(Win/Mac)+同步器版本+
「這一版改了什麼」連結。以前這裡只有文案提到下載、沒有連結也沒有版本。
取不到就顯示「(查詢中)」並退回安裝說明頁——沿用 bf06ed7 的原則,不留手抄值。
## 驗
· node --check worker.js(installer/landing)皆 OK
· changelog 閘:v0.18.6 通過;不存在的 v0.18.7 → 退出碼 1 並印出可照抄的範本
· manifest 三條規則實測如上
· 未驗:線上畫面(要出貨後才有 daemon 欄位)⇒ ◐,不是 ✅
|
2026-08-06 13:12:48 +08:00 |
|