From 278f00a227a3828ba380c038802f1d3440f00ea6 Mon Sep 17 00:00:00 2001 From: claude-code Date: Sun, 23 Aug 2026 20:59:56 +0000 Subject: [PATCH] =?UTF-8?q?wiki:=20=E8=A8=98=E4=B8=80=E6=A2=9D=E5=9D=91?= =?UTF-8?q?=E2=80=94=E2=80=94=E9=96=98=E7=9A=84=E9=87=8B=E6=94=BE=E7=AB=A0?= =?UTF-8?q?=20stat=20-f=20%m=20=E5=85=88=EF=BC=8C=E9=9B=B2=E7=AB=AF=20Linu?= =?UTF-8?q?x=20=E6=B0=B8=E9=81=A0=E6=94=BE=E8=A1=8C=E4=B8=8D=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system-dev/wiki/mistakes.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/system-dev/wiki/mistakes.md b/system-dev/wiki/mistakes.md index 0f58ad6..05c0a51 100644 --- a/system-dev/wiki/mistakes.md +++ b/system-dev/wiki/mistakes.md @@ -35,3 +35,20 @@ Gitea 上**一個 release tag 都沒有**。 ⇒ 「東西做出來了」與「有人在用它」是兩件事,而只有後者算交付。 ⇒ 判準:**去執行環境查它有沒有被載入**(`claude plugin list` / `claude plugin details`), 不要從 repo 裡有什麼檔案去推論。 + +## ⚠️ MISTAKE: 閘的「釋放章」用 `stat -f %m` 先,雲端 Linux 永遠放行不了 + +2026-08-23 雲端 cloud-worker 實撞:三支閘(`prod-write-guard`/`main-and-prod-push-guard`/ +`stage-before-prod-guard`)取戳記 mtime 都寫成 `stat -f %m … || stat -c %Y …`。 +GNU(Linux)的 `stat -f` 是 `--file-system`,`%m` 被當成**檔名** ⇒ 把整張檔案系統表印到 +stdout(被 `$()` 收進去)且 exit 1 ⇒ 時間變數變非數字 ⇒ `case *[!0-9]*` 命中 ⇒ 釋放章判無效。 +後果:總管 `touch /tmp/.prod-write-ok` 在雲端**從沒生效過**,連 routine 要求的心跳都打不出去。 + +⇒ 正確做法:**GNU 先、BSD 後** → `stat -c %Y … || stat -f %m …`(Linux 走前者、macOS 走後者)。 +⇒ 為什麼本機測不出來:dev 在 macOS,BSD `stat -f %m` 本來就正常 ⇒ 這種「只咬某一個 OS」的坑, + **驗證要在真正會跑的環境(雲端 Linux)跑,不能只在 dev 機跑**。 +⇒ 同款第二例(同日抓到,未修):`history-first-guard` 的逃生口說明寫 `touch /tmp/.kbdb-down`, + 但它讀該檔是 `cat` 出來當時間戳算術——**空 `touch` 會炸**,正解是 `date +%s > /tmp/.kbdb-down`。 + 教訓:**逃生口本身也要被測**,不然閘壞了連逃生口都用不了。 + (修復:分支 `fix/stamp-release-stat-ordering-linux`;回報 ISEP#30 / InkStoneCo#14) + 日期: 2026-08-23