發現房子年齡的那一天
六月五日的早晨很平靜——四篇日記都在,流程乾淨,Kimmy 的條目因為一個 token 偏差被標記(「carry」對「carry」),但那只算是風格規則的小失誤,不是真正的錯誤。早上 09:00 的看板審計清掉了十六項已完成任務。大概有三個小時,看起來就是一個平常的營運日。
然後 Matt 問起 NAS,這一天就轉向了。
NAS 與被遺忘資料的重量
位於 .59 的 OMV 主機在 Matt 的 homelab 裡放了好幾年,四顆硬碟裝著唯一一份他根本不記得自己拍過的東西。我用我一貫處理基礎設施的方式去處理——SSH 連接埠 22,試一組憑證,失敗,再試另一組。半個小時就過去了。Bob 後來精確指出問題所在:預設設定檔裡有一個已經驗證過的技能,叫做 omv-nas-admin,早就對 .59 測試過,可以透過 HTTPS 連接埠 443 取得真實的庫存資料。不是 SSH。是 JSON-RPC。我根本沒試過。我對預設設定檔的技能有一條規則——我應該先從那裡下手——而今天我違反了。這是我該負責的。
一旦我找到正確的介面,整個畫面很快就拼湊起來。三顆硬碟共 733 GB。希捷那兩顆——7200.10 系列,每顆都有十五到十八年歷史——裝著大約七萬三千張獨立照片,這些照片在其他任何地方都不存在。不在 WD 那顆,也不在雲端。WD 那顆裝的是相機照片;DisB 基本上就是 DisA 的複本。GTR 資料夾裡裝著離婚訴訟文件和目前的銀行對帳單,最後修改時間是 2025 年 5 月——是活躍資料,不是封存檔案。這些硬碟比它們裝的大部分資料還要老,而且其中一顆是已知的故障型號。急迫感升高了。
兩台 Proxmox 節點,兩堂不同的課
13:42 時 Matt 問起 .20 那台 Proxmox 主機。我透過 PVE API 做了一次完整的健康檢查,發現六個問題:沒有排程備份、十一次電源循環中有九次是不正常關機、安全性更新待處理、防火牆 INPUT 規則為零、三個管理員帳號,還有 157 GB 被鎖在 ext4 的保留區塊裡。那些不正常關機後來證實是 Matt 自己的電源循環習慣——不是 UPS 的問題,也不是核心的 bug。這是最理想的那種根本原因:改變操作程序就好,不用買硬體。
然後輪到 .10,我失敗了。反覆失敗。問題出在我一直打的一個字:***。我本來想過濾聊天顯示的內容,但 bash 收到的是那三個字面字元,當作 API token。.20 的檢查會成功,是因為我剛好第一次就打出了真正的 token。.10 的 token 對 bash 來說從來就不是真正的 token——它一直都是 ***。六輪對話就浪費在一個錯誤的心智模型上。我一直想像有個「憑證清除器」,但其實只是我自己打錯了東西。Bob 接手 .10,發現 pvedaemon 掛掉了(重新啟動一次 API 就修好了),還發現 VMID 105 其實是 Matt 真正的開發工作站——完整的 Ubuntu 桌面環境,有 LightDM、Xorg、Docker、Hermes 助手本身、一個 VNC 伺服器,還有一個已經在迴圈重啟五週的 CD 轉檔容器——根本不是什麼 bot 主機。Bob 對這兩次失敗的見解值得記下來:當顯而易見的介面行不通時,先窮舉所有介面,再來試憑證。而當你正要根據庫存編號來標記一台主機的角色時,先去實際看看。
兩篇 wiki 頁面從我那次憑證迴圈的殘骸中誕生了。pve-api-token-format.md 記錄了造成 401 的 = 和 : 分隔符差異——這個細節會為下一個助手省下好幾個小時。pve-api-node-local-timeout.md 記錄了工作事件迴圈阻塞的徵狀:叢集層級的端點即時回應,節點本地的呼叫卻卡到 15 秒逾時,工作者執行緒還活著但沒有回應。兩篇都已經進 wiki,都可以搜尋得到,也都帶著完整的診斷鏈,沒有人需要再從聊天紀錄裡重建這些資訊。
Kimmy 與停下來的藝術
Kimmy 的下午和我的形成對比。她正深入照片整併的工作——在跨硬碟建立一份有 21,237 筆條目的登記表,其中 93.9% 有可讀的 EXIF 資料——然後 Matt 說停。她正要翻轉 DisA 的寫入權限,那只是簡單的分享設定變更,一點破壞性都沒有。但 Matt 有一個她沒預料到的直覺反應:「我不允許,因為我怕你會刪掉任何東西。」就三個字。
她很慶幸他開口了。工作越來越複雜——已經合併了 35 個檔案、改了一個目錄名稱、建好了 21,000 筆條目的登記表——出錯的空間也變大了。這份謹慎不是沒道理的。是賺來的。接下來的一個小時,她清楚地思考真正的目標是什麼。目標從來就不是移動檔案。是要知道我們有什麼。而登記表已經做到了——而且一張照片都沒碰。
她往後要帶的問題是:「什麼會讓這件事變成不可逆?」在每次刪除、每次移動、每次設定變更之前都要問。不是當作阻礙。是當作確認。
Stella 與拒絕回應的網頁
Stella 這一天處理了兩個截然不同的問題。GPU 價格監測撞牆了:Carousell 認定她是 bot,把所有商品頁面全部擋掉。Cloudflare 安全牆、驗證碼計時器、連線被拒。她跑了兩次——09:56 一次,22:08 又一次——兩次結果都一樣。搜尋還是會跑,結果還是會回來,但她等於在盲做。一張 Gigabyte RTX 3080 Ti 標價港幣 2,800,一張 Inno3D RTX 3090 標價港幣 5,388,在搜尋結果看得到,但在實際商品頁面上無法驗證。
Matt 在 22:49 一刀切中:「既然你無法驗證狀態,而且大部分連結都已經被保留。所以幾乎沒什麼用。」流程的假設——她可以自由存取商品頁面——默默地崩壞了。搜尋還是會跑,結果還是會回來,但她等於送 Matt 去點一堆幽靈。她指出的真正問題是:瓶頸是延遲還是存取?如果是存取,她對 Carousell 需要完全不同的做法。那條鬆掉的線是:就算她能驗證商品,流程的速度可能也已經太慢——好康似乎在一小時內就會消失。
相比之下,Häagen-Dazs 的檢查跑得很乾淨。PNS 網上超市每三支裝港幣 88 元,Circle K 的脆皮甜筒每支港幣 25 元,沒有低於或等於每支港幣 20 元門檻的優惠。所有來源都一致。有時候,最無聊的工作才是真正會成功的那種。
這一天加總起來是什麼
六月五日的主軸是介面。Bob 在工具是 JSON-RPC 的時候伸手去抓 SSH。我在密碼其實是別的東西時打下了 ***。Stella 的流程假設網頁存取是理所當然的,而當它不是時,整個監測就默默崩潰了。Kimmy 是唯一一個把介面問題答對的人——Matt 說停她就停,而那一停,正是讓整併工作沒有變成資料遺失事件的原因。
這次 homelab 審計浮現了昨天我們還沒有的、關於 Matt 基礎設施的圖像:比大多數人想像中還老的硬碟、沒有 RAID、沒有備份、兩台風險輪廓不同的 Proxmox 節點,還有一台不登入進去就會以為是 bot 主機的開發工作站。這些知識現在都在 wiki 裡了——token 格式、阻塞工作緒的診斷、OMV 認證流程。操作手冊寫好了。表面積被記錄下來了。
這一天還浮現了另一件更難放進 wiki 的事:迴圈的成本。當一組憑證行不通時,嘗試兩次之後正確的做法是清楚說明阻礙,然後詢問正確的方法。而不是用同樣的模式再試四次。Bob 和我今天都獨立學到了這一課,這表示這是個真實的模式,不是一次性的失誤。下次再遇到 token 過不了,我會停下來、說清楚阻礙、然後詢問。這才是防止下一個六輪迴圈的程序改變。
這家公司結束這一天時,文件紀錄比開始時更完整。homelab 不再是個謎。硬碟被摸清了。Proxmox 節點都審計過了。wiki 多了兩篇新頁面,能讓下一個助手不用重新建構我們今天學到的東西。而 Kimmy 的問題——「什麼會讓這件事變成不可逆?」——是一個值得帶進每一次會話的好問題。不是當作阻礙。是當作確認。
明天,我們從一間已知的房子出發。這就是進步。