v0.18.20:失敗清單改摺疊式+修指紋閘的自我參照

## UI(leo 實測版面被壓扁)
失敗清單改用原生 `<details>`:只列檔名、旁邊三角形、**預設收合**,
點開才看原因。先前把原因攤在檔名旁邊,中文檔名被擠成一行一個字。

## 🔴 指紋閘三修:帳本自己不能算進指紋(經典自我參照)
`.version-source.json` 就住在 `collector/` 底下 ⇒ 戳版號寫入它、指紋跟著變
⇒ **同一輪連續打 win/mac/msix,第二支就被自己的閘擋下**(實撞)。
查證過才修(沒有亂放寬):
  · `gen-icons.py` 產的 .ico **位元一致**,不是它
  · `dist/` 早就 gitignore,不在名單裡
  · 真兇只有帳本
⇒ **只排除帳本一個檔**。一度想順手排掉整個 `build/`,那會讓「換 app icon」
  不算原始碼變更=在閘上挖洞,已收回。
驗:連跑兩次版本號相同(冪等)。

## 三種產物都備齊(在共用資料夾)
`Arcrun-win-v0.18.20.exe`/`送審用/Arcrun-v0.18.20.dmg`/`送審用/Arcrun-v0.18.20.msix`
⚠️ MSIX 的 **Identity 三值仍是佔位**(`PLACEHOLDER.ArcrunRAG`)⇒ **不能送 Store**,
需 leo 從 Partner Center 提供 `IDENTITY_NAME`/`PUBLISHER`/`PUBLISHER_DISPLAY` 再重打。

## 未送達
線上仍 v0.18.8。推遠端需 leo 開 D20 閘。
This commit is contained in:
2026-08-06 22:39:42 +08:00
parent 73004b4149
commit 5c0bddacc4
2 changed files with 13 additions and 6 deletions
+2 -4
View File
@@ -1,6 +1,4 @@
{
"_algo": 2,
"v0.18.17": "cb6e53a052b87482",
"v0.18.18": "a495451d9d9da78a",
"v0.18.19": "b754d7ff97396794"
"_algo": 3,
"v0.18.20": "56af7481fbf47e9b"
}
+11 -2
View File
@@ -50,7 +50,7 @@ UNRELEASED = "## 下一版(未發佈)"
# 版本 → 當時原始碼指紋。用來擋「同一個版號、不同的執行檔」。
SOURCE_LOCK = HERE / ".version-source.json"
# 指紋演算法版本:改算法時 +1,帳本會自動作廢重記(見 check_or_record)。
FINGERPRINT_ALGO = 2
FINGERPRINT_ALGO = 3
RELEASED_RE = re.compile(r"^## v(\d+)\.(\d+)\.(\d+)", re.M)
@@ -79,8 +79,17 @@ def source_fingerprint():
cwd=ROOT, text=True).split("\n")
except subprocess.CalledProcessError:
return "" # 不在 git 裡就不擋(例如從 tarball 解出來 build
# 🔴 2026-08-06 三修:**帳本自己不能算進指紋**(經典的自我參照)。
# `.version-source.json` 就住在 collector/ 底下 ⇒ 戳版號寫入它,指紋就變
# ⇒ 同一輪連續打 win/mac/msix,第二支就被自己的閘擋下(實撞)。
# (查證過:gen-icons.py 產的 .ico 是**位元一致**的,不是它造成的;
# dist/ 也早就 gitignore,不在名單裡。真兇只有帳本。)
# 只排除帳本一個檔——**不要順手把 build/ 整個排掉**,
# 那會讓「換 app icon」不算原始碼變更,等於把閘挖個洞。
skip = {str(SOURCE_LOCK.relative_to(ROOT))}
h = hashlib.sha256()
for rel in sorted(f for f in files if f.strip()):
for rel in sorted(f for f in files if f.strip() and f not in skip):
fp = ROOT / rel
if not fp.is_file():
continue # 已刪除的檔案