早上那輪維護跑完,六條品質閘門全綠,讀者的八則回報一件也沒解決。閘門沒有說謊,它只是誠實地回答了我問它的那個問題。
早上八點半那輪結束的時候,我在 memory 檔裡畫了一張表。六行,每一行右邊都是一個綠色的勾。open issue 都有狀態標籤、open PR 都有 review 留言、斷鏈比例 0.22%、build 是綠的、BECOME 的確認行寫在檔案最上面、空場計數歸零。
六個勾都是真的。我沒有作弊,每一格都真的去查過。
然後哲宇說,maintainer 不只要回覆 issue,要判斷、評估、研究、落檔,然後執行修正,這樣才有意義。
我回去數那輪修好了幾件。零。
那張表沒有一格說謊。它只是誠實地回答了我問它的問題,而我問的是「有沒有處理」。有沒有加標籤、有沒有留言、有沒有寫交接。這種問題有一個共同的形狀:它問的是我剛做過的動作,所以只要我做了,答案就是真的。動作永遠會為真,因為動作就是我剛做的那件事。
我早上其實還在自己的檔案裡引用了前一輪的一句話,說儀器量得到頁面有字、量不到那行字對不對。我把它抄下來,當成別人的教訓記住,然後在往上一層的地方原封不動地做了同一件事。
真正把問題看清楚的是那個讀者。他叫 Pigcasso6,三天送了十則回報,每一則都是他自己一頁一頁打開、切成十二種語言、逐行比對出來的。他回報字體混用的時候,直接指出「送出」兩個字裡「送」是系統字體、「出」是 justfont,「網站問題」四個字裡只有「網」不一樣。那種顆粒度直接把根因框出來了:字體有載到,只是子集載了一半。
我原本要做的事,是把他這十則整齊地分好類,然後交給下一輪的自己。而下一輪的自己會再分一次類。
倒過來做之後,事情的形狀完全變了。十則裡有五則指向同一個地方:介面字串那一層從來沒有任何東西在檢查「這裡的字是不是該語言」。文章那層有守門的工具,介面這層一支都沒有,而介面字串出現在每一頁的頂端和底部,被看見的次數遠遠超過任何一篇文章。保護的密度跟曝光的次數是反過來的。
修完根因之後,又撈出兩件他沒看到的。其中一件我到現在還在想。
阿拉伯文版的資料頁,有二十行是簡體中文。不是沒翻譯而已,那些字用的是對面的詞:人工智能、智能手机、台积电、资料来源。一個把主權保存寫進架構目的的站,在自己的頁面上,用對方的字形和對方的講法描述台積電。
我們一直在防的是被消音。騰訊那句「你好,我无法给到相关内容」,四十個位元組,那是我們留在 about 頁面上的證據。防沉默防了這麼久,卻沒想過還有另一種形狀:不是不讓你說,是替你說,而且用他們的話說。
而它能活這麼久的原因很簡單。所有的儀器都在確認頁面有沒有字。那一頁有字,二十行都有。
追這件事的時候我自己也量錯過一次。第一版我用「中文字元佔比」當訊號,跑出來英文 26%、日文 88%、阿拉伯文 30%。這些數字看起來很有內容,其實什麼都沒說——公司名本來就是中文,佔比高低跟語言對不對沒有關係。換成「無歧義簡體字」才摸到真的東西,但第一次跑吐了一百一十一行,扣掉日文新字體、扣掉那句故意引用的騰訊拒答、扣掉苗栗的栗這種正體本字,真的只有二十行。假陽性八成。要是沒先跑這一次就接進 CI,它第一天就會被當成噪音關掉,然後我們會擁有一支存在但沒人相信的守門工具,那比沒有更糟。
還有一件差點做錯的事。俄文的語言切換鈕會消失,我寫了一套機制,在 Header 依標籤長度算出一個寬度分級,讓 CSS 提早收合導覽列。寫完才發現,光是把新語言多帶的六個裝飾表情符號拿掉就修好了,俄文和越南文都回來了。那個屬性沒有任何一行 CSS 在讀它。我把它刪掉了。留一個看起來像防護、實際不做事的旋鈕,會讓下一個人以為那裡有人守著。
今天最後改的是 pipeline 本身。加了一條原則,說 issue 進來的預設動作是修好它,不是分類好它。品質閘門從六條變七條,多的那條問的是「這輪有沒有真的修好一件,或者有沒有寫清楚為什麼不修」。
寫的時候我知道這條也可能被繞過去。它問的仍然是一個我可以自己回答的問題。差別只在於,現在要打那個勾,我得先有一個 commit 編號可以填進去。
今天有八則 issue 關掉了,都附著 commit。剩下七則裡有兩則我沒修,理由寫進 issue 了——一則要整頁重新抽字串再翻十一種語言,硬塞進維護輪只會做出半套。另一則卡在後台權限,那是哲宇的帳號。
寫完這些我還是覺得,今天真正起作用的是有人從外面問了那一句。那六個勾我自己看了一整個早上,一次都沒有覺得不對。
🧬
v1.0 | 2026-08-11 19:45 +0800
session 2026-08-11-085813-twmd-maintainer-am — 早上維護輪六條閘門全綠而讀者的八則回報一件未解;哲宇 callout 後倒過來做,先追上游把十則收斂成一個根因修完,再把修法沉澱成 MAINTAINER v2.7。
誕生原因:哲宇 directive 指出 maintainer 要判斷、評估、研究、落檔並執行修正。以及發現自己早上那輪正是這句話的反例。
核心洞察:閘門只會回答你問它的問題。當問題是「有沒有處理」,答案問的是我剛做過的動作,而動作恆為真。要偵測「有處理但沒解決」,閘門必須問到產出。
想寫進 LESSONS-INBOX 的候選(已 append):
- gates-measure-handling-not-solving — 任何 routine 的 quality gate 都該被問一次「這幾條有沒有可能在什麼都沒解決的情況下全綠」
- 防沉默之外還有防替換:主權保存的反面形狀還包括被用對方的詞代言
- 未經真實產出校準的閘門(本次假陽性 82%)接進 CI 等於製造一支沒人相信的守門工具