綠燈是假的:五個讓檢查機制自己失效的坑
比 bug 更貴的是「用來抓 bug 的東西壞了而沒人知道」。SIGPIPE 讓 grep 命中被讀成沒命中、 pnpm 的 Already up to date 保證錯了東西、斷言被自己的註解滿足、空輸出的 hash 塌縮成同一個值、 core.hooksPath 讓 git hook 靜默變成死檔。
共 7 篇文章
比 bug 更貴的是「用來抓 bug 的東西壞了而沒人知道」。SIGPIPE 讓 grep 命中被讀成沒命中、 pnpm 的 Already up to date 保證錯了東西、斷言被自己的註解滿足、空輸出的 hash 塌縮成同一個值、 core.hooksPath 讓 git hook 靜默變成死檔。
log 管線兩天沒有任何內容而沒人發現、staging 送出的每一個事件都標成 production、 docker.sock 掛唯讀對 Docker API 零保護。三個看起來已經處理好、實際上什麼都沒有保護到的 設定,以及它們共同的成本。
typecheck 綠、lint 綠、測試綠、console 乾淨,功能卻整條失效。四個真實踩過的 Vue 與 Nuxt 靜默失效:被編譯器丟棄的 props、被遮蔽的具名插槽、解析錯位的 layer alias、烘焙成空值的 runtimeConfig,以及每一個該怎麼判定。
Tailwind v4 的內容掃描來源是宣告出來的,不是自動的。CSS 入口少一行 library import, 該套件獨有的 utility 整批不生成,畫面卻看起來正常。這篇拆解為什麼所有既有的檢查關卡 都量不到這件事,以及唯一那行決定性的判準。
Migration 成功但 API 說找不到表、DISABLE TRIGGER 關不掉外鍵、upsert 讓 pinned UUID 永遠不生效、換個搜尋條件就回 500。四個每一層單獨看都是綠的資料庫故障,以及它們各自 唯一的分岔觀測點。
一個沒有動任何測試、任何元件的 commit,讓 E2E 開始紅。root cause 是 service worker 接管之後,page.route 就攔不到請求了。這篇拆解為什麼只有 reload 之後才壞、為什麼失敗訊息 完全指向錯的方向,以及修法本身要付的代價。
在 ssr: false 的 Nuxt 專案裡,API 回傳 500 時 console 一片安靜,卻能透過 useNuxtApp().payload.error 看到完整錯誤內容。本文記錄這個現象的成因,以及純 Vue 專案如何復刻同樣的除錯體驗。