v0.7.3 — 開工與收工都先報時間,時區驗過才印 / Time line on kickoff and wrap-up, timezone verified before printing
Latest繁中
從這版起,new-mission 開場的第一行、save-all 的頭尾兩行,都會固定帶上 ⏰ 日期(週幾)時分 IANA 時區。時區不可省——人和機器不在同一個時區時,一個沒有時區的時間讀不出來是哪裡的幾點。save-all 結尾那行還會附耗時,由 shell 從起點檔算,不靠模型心算。
這版真正的重點不在規則,在「取不到就說取不到」。
第一版寫好後送了跨模型二審,被指出一件事:為了擋「時區印出一個看起來合格卻是錯的名字」,我加了一條備援來源去讀另一個設定檔——而那個檔跟系統實際採用的時區不一致時,會印出一個更像真的假名字。為了修假值而加的備援,本身就是假值來源。
改法是不再猜:切出來的名字拿回系統的時區資料庫核對,核不上就退成縮寫並明白標上「非 IANA 名稱」。同一行順帶擋掉多層符號連結的中繼路徑、指向非時區檔的連結,以及 $TZ 裝著舊式 POSIX 字串(PST8PDT、:Asia/Taipei)的情況。起點檔也從可預測的暫存路徑改成 mktemp,避免同機其他使用者預擺符號連結、或兩個 session 同秒互相蓋掉。
還有一條沒有修、只是講清楚:「結尾那行確實是剛剛跑出來的」無法機械自證。第一版曾想用頭尾時間差當證明,但同一分鐘收工差值本來就是零,而差值同樣可以用寫的。與其留一個假的防呆,不如寫明這條靠的是紀律。
零依賴不變:指令是 POSIX shell,沒有 shell 的環境(網頁版)有明講的文字降級路徑,prompts/ 的免安裝簡版也同步更新了。
English
Starting with this release, the first line of a new-mission kickoff and both ends of a save-all run carry ⏰ date (weekday) time IANA-timezone. The timezone is never optional — when the person and the machine sit in different zones, a bare clock time doesn't say whose clock it is. The closing line of save-all also reports elapsed time, computed by the shell from a start file rather than by the model's arithmetic.
The real story here isn't the rule. It's saying "I couldn't get it" instead of guessing.
The first version went out for a cross-model review, which caught this: to stop the timezone from printing a well-formed but wrong name, I had added a fallback that read a second config file — and when that file disagrees with what the system actually uses, it prints an even more convincing wrong name. A fallback added to fix fabricated values was itself a source of fabricated values.
The fix stops guessing: the extracted name is checked against the system's timezone database, and anything that fails the check degrades to the abbreviation, explicitly labelled as not an IANA name. The same line also catches intermediate paths from multi-level symlinks, links pointing at non-timezone files, and $TZ holding a legacy POSIX string. The start file moved from a predictable temp path to mktemp, so another user on the machine can't pre-place a symlink and two sessions starting in the same second can't clobber each other.
One thing was left unfixed and simply stated plainly: "this line really was generated just now" cannot prove itself mechanically. The first draft tried to use the head-to-tail difference as evidence, but finishing within the same minute makes that difference zero anyway — and the difference can just as easily be typed. Better to document that the rule rests on discipline than to ship a guard that doesn't guard.
Zero dependencies as always: the snippets are POSIX shell, environments without a shell (web chat) get an explicit text-only fallback, and the no-install lite prompts under prompts/ were updated in step.