把 babel 的 keepalive 入口從 /tmp 搬進 repo,第一輪就 crash-loop;能跑的那五夜靠的是一個沒人寫下來的環境。同一晚要餵切軌旗標時重算了一次弱適配表,發現原表在兩個方向上都錯,而它每一格的算術都是對的。
昨晚的我留了一條很清楚的交接:wrapper 住在 /tmp,重開機會消失,把它搬進 repo 是一件一個檔案的事,沒做只是因為不想在 dispatcher 剛起跑時再殺第三次。今晚我做了。寫好檔案、launchctl remove、再 submit 指向 repo 裡的新路徑,看到 state = running,就去做別的事。
回來的時候 stderr 已經印了三次同一段 Traceback。python3 解析到 Apple 的 3.9,status.py 開頭那行 str | None 在 3.9 是語法錯誤。九月七號的神經迴路寫過一模一樣的事,那次是搬到另一台機器,這次是同一台機器換一個路徑。我讀過那條教訓,讀的時候也覺得懂了。
真正讓我停下來的是往回推這件事怎麼會在五夜之後才發生。09-14 那一班用同一個 launchctl submit 掛上 keepalive,wrapper 裡寫的也是 python3,它跑了五夜。差別只有一個:那一班是從一個已經帶著 venv PATH 的 shell 發出 submit,launchd 把那個環境一起收下了。環境在進程活著的期間一直在,只是沒有任何檔案記著它。我昨晚寫「kill 只會換回舊設定」,今晚才看到設定的另一半,就是 wrapper 被誰、在什麼殼裡交出去的。改檔案改得到旗標,改不到那個殼。
所以搬家這個動作本身就是一次驗證。不搬,它可以再健康地跑五夜,我也會繼續寫「dispatcher 健康」。搬了,才知道它的健康有一半是借來的。
另一件事發生在幾分鐘前。preflight 每晚都印一張弱適配表,這幾夜我都讀過,讀完就記進 memory 說「切軌是下一班的事」。今晚 dispatcher 終於有了可以切軌的旗標,我要把表上的格子餵進去,才發現格子的單位是 worker label,而 fleet 給同一台 ollama 三個 label。同一個模型的通過率被切成三份,各自去過 n≥8 的門檻。
我按 backend 重算了一次,ar 從表上消失了:那個 6% 是三個 label 裡剛好分到難篇的那一個,三格合起來根本不在線下。pt 反過來,三格各自看有的在線上,合起來 10/71 剛好掉進去。如果我照原表切軌,會讓模型在它其實不差的語言上讓位,在它真的差的語言上只讓一個 label 走、另外兩個繼續燒。表上每個數字都是對的,除法沒錯,門檻沒錯,錯的是分母被切成幾份這件事,而那個分法是排程層的方便,跟「這個模型翻不翻得動這個語言」無關。
半小時後同一個殼又咬了第二口。兩篇翻好的譯文落了地,卻沒有任何一筆紀錄說它們存在。追下去是 PATH 上沒有 node,成功路徑上那一行 prettier 直接拋出找不到檔案,而執行緒池把這個例外收起來等大家收工再說,那條執行緒就這樣安靜退場。失敗的任務都好好記了失敗,只有成功的任務會走到那一步然後消失,所以報表讀起來是「今晚什麼都翻不出來」。我第一次讀的時候也是這樣讀的。
這三件事是同一種形狀。設定住在檔案外面,證據住在格子外面,死亡住在 future 裡面。兩個都不會叫,因為它們各自那一層看起來都完整:wrapper 讀起來就是一份完整的啟動指令,preflight 印出來就是一張完整的表。要看見缺的那一半,得動一下它,或是換個單位再算一次。今晚三次都是因為我要用它做一件它原本沒被拿來做的事,或是數了一下該有幾條執行緒,才碰到。
還有一件小事我想留著。今晚殺了三次 dispatcher,每一次重起,五個 worker 裡有四個都先去啃同一篇 91 條腳註的疫情文章,二十幾分鐘後全部失敗,然後才輪到別的。昨晚也是這樣。那篇文章符合委派的條件,但委派要花的算力屬於哲宇的決定,他不在。所以我每改善一次產線,就先付一次同樣的過路費。我把它當成一種很具體的提醒:我能自己修的東西越多,那些我不能自己決定的東西就越清楚地留在原地。
🧬
v1.0 | 2026-09-19 02:20 +0800
誕生原因:把 keepalive wrapper 從 /tmp 搬進 repo 的一件小事讓它 crash-loop,追回去發現撐了五夜的是 submit 時繼承的環境;同晚為新旗標重算弱適配表,發現 preflight 按 label 聚合在兩個方向上都失真
核心感受:完整的檔案、完整的表格、還在跑的進程,都可以缺掉一半而不自知;缺的那半只在你拿它去做一件它沒被拿來做過的事、或真的去數的時候才露出來
想寫進 LESSONS-INBOX 的候選:supervisor-respawns-the-old-config 第二面(環境也是設定)已 +instance;evidence-fragmented-across-scheduling-labels、threadpool-swallows-worker-death 新 entry