🔧 252 支 CLI 盤點 ✅ 119 支有下游消費者 🌐 13 支外部產品級 📖 gws = 全失效模式範本

🔧 CLI 艦隊保持最新與暢通

我們有 252 支內外 CLI,其中 119 支有下游消費者(死了會斷別人)。 但目前沒有任何機器在探測它們的功能死活——近三個月至少 4 起失效全是夏哥自己撞到的。 本頁以 gws 為範本:它是唯一一支把所有失效模式都踩過的 CLI, 2026-08-05 一天之內走完了認證失效、環境缺失、金鑰分裂、備份不可解、守門狗反噬、快取過期六型。 一支講完,通則就齊了。

緣起

gws 憑證 07-30 失效,08-05 才被撞到——六天無人知曉。守門狗每晚都在跑,但它自己瞎了。

點我看詳細 →

目標

所有內外 CLI 保持最新、暢通,且失效由機器發現——不是夏哥當偵測器。

點我看詳細 →

為什麼寫進 corrections 沒用

corrections.md 1,900+ 行、每 session 載入,同型錯誤一天照犯三次。散文教訓不是強制力。

點我看詳細 →

證據承諾

每一格都附當天的真實輸出:log 原文、sha256、Keychain 節錄、對照組結果、commit hash。不寫「應該」。

點我看詳細 →
邏輯型,の字序 #1→#8。⚠️ 跨模型審查判定此結構為線性流程而非閉環——缺「度量/可觀測性」與「演進回流」兩格,見 #3 證據欄。
#4 左上🔍

偵測

週期功能探測;核心指標是誰發現的——機器還是夏哥
0 支在探
#5 中上🔄

自癒

先清可重生的快取 → 才動需覆蓋的還原。② 已實證可自癒;① 未實證(唯一備份是廢的)
點格進下一層 →
#6 右上🙋

人工介入

只剩真需要人的:OAuth、付費、帳號。步驟固定不可漏
目標 1 步
#3 左中📕

失效模式圖鑑

六型:認證過期/快取失效/額度耗盡/供應商變動/環境缺失/版本 breaking。⚠️ 審查判定不互斥、至少漏 6 型
點格進下一層 →

🎯 CLI 艦隊保持暢通

機制 > 紀律 · 失效要由機器發現,不是夏哥 · 點此回頁頂

載入中…
範本:gws 一支講完六型
#7 右中🆕

保持最新

版本更新節奏 + breaking 防護 + 殭屍 routing 清除
agy 已翻案
#2 左下📏

「暢通」怎麼定義

功能探測,不是版本探測——agy --version 回 1.1.9 但功能可能是死的
可機械判定
#1 中下📋

盤點

252 支候選 / 119 支關鍵 / 13 支外部。關鍵=有下游消費者
已完成
#8 右下📖

範本:gws 走完全程

唯一一支六型全踩過的 CLI。點進去是完整事故解剖
點格進下一層 →

👈 📋 #1 盤點 · 有哪些、誰是關鍵

關鍵不靠感覺:有下游消費者(被 skill / hook / cron / launchd / 其他腳本呼叫)=死了會斷別人=值得花探測成本。

規模:252 支候選 · 119 支關鍵 · 13 支外部產品級。

資料驅動:config/cli_fleet.json 是探測器的資料源,加一支 CLI 只加一筆資料,不改程式。

已知缺口:probe 欄位全為 nullverified:false——未經實測的探測指令不寫入,寧可標明未涵蓋,不製造假健康。

👉 證據 · 2026-08-05 真實輸出

量測工具先被驗過才用。用兩個已知答案當對照組,抓到並修掉三個缺陷:

  • claude 回 79 個消費者 → 全是 .claude/ 路徑灌水
  • XX.sh 被當兩支工具
  • gws 回 197 → 實為 gws skill 綑了 190 支官方子 skill,同一套件該算 1

修正後對照組 gws=7 / claude=36 雙雙通過。

證據:commit 7eab9e6 · config/cli_fleet.json · scripts/build-cli-fleet.py

👈 📏 #2 「暢通」怎麼定義 · 功能探測不是版本探測

可機械判定的健康:實際執行功能,看它做不做得到事。

禁止用 --versioncorrections.md 2026-06-27 就寫過——agy --version 回得出版本號,但研究功能已死。版本活 ≠ 功能活。

更隱蔽的一層:連「唯讀功能通過」都不等於「寫入功能通過」。同一個 API 的讀與寫可能分屬不同狀態。

👉 證據 · 2026-08-05 真實輸出

當天兩個實例,都是版本/唯讀層騙人:

  • agy --version1.1.9(看似健康)
    agy -p "…"Error: Individual quota reached. Resets in 24h24m39s.
  • gws calendar calendarList list → 回 15 個行事曆 ✅
    gws calendar events insert403 insufficient authentication scopes

若只驗唯讀就宣稱「Calendar 好了」,會漏掉三重寫入其實只成 2/3。

證據:cacoch-cal todo 端到端測試印出 event=⚠️FAILtask=Y1NU…——寫入失敗是它抓到的

👈 📕 #3 失效模式圖鑑 · 六型

① 認證過期② 快取失效③ 額度耗盡④ 供應商變動或退訂⑤ 環境缺 PATH/USER⑥ 版本 breaking

①② 可自癒(機器修得動);③④ 必須告警(要人或要錢);⑤ 由腳本自保環境直接消滅

最危險的是誤導性:每一型都會偽裝成別型。

👉 證據 · 2026-08-05 真實輸出

🔍 跨模型審查(GLM-5.1 + Gemma 4,2026-08-05)判定本分類有缺陷:

不互斥:①認證過期與②快取失效在症狀層幾乎一致(都是 401/403),本次事故正是②引發①的症狀。

至少漏 6 型(兩家各提 3 型,無重疊):

  • 局部降級/分裂腦——同一憑證對 Drive 有效、對 Calendar 失效。這正是本次事故的精華,而六型全是「全有或全無」模型,裝不下它
  • 工具自毀——gws 找不到 USER 時自行刪除憑證,這是客戶端防禦性設計失敗,不屬任何一型
  • 併發競爭——cron 與人工修復同時操作 credentials.enc
  • 網路/連通性——DNS、proxy、防火牆,不屬環境變數問題
  • 權限降級——憑證有效但雲端取消了某資源存取權;清快取完全無效
  • 速率限制——短時高頻,與③額度耗盡不同;此時觸發還原可能引發供應商安全封鎖

未逕自改寫分類——這 6 型我尚未實測,照抄評審結論當事實會重蹈今天的覆轍。列為待驗。

當天六型全數現形:

  • ② 快取失效 偽裝成 ④ scope 不足 → 害我誤判一輪
  • ③ 額度耗盡 被誤判成 功能死亡(agy,誤判持續兩個月)
  • ⑤ 環境缺 USER → gws 用 unknown-user 生第二把金鑰 → 自己刪掉憑證
  • ⑤ 環境缺 PATH → 守門狗 exit 127,把「找不到指令」誤判成「憑證壞了」
證據:gws-auth-heal.log 08-01/02/03 三晚全是 gws: command not found (exit=127)

👈 🔍 #4 偵測 · 核心指標是誰發現的

週期性功能探測,全綠靜默、紅才推播。

唯一該看的指標:失效是機器發現的,還是夏哥發現的。只要是夏哥先撞到,就證明該處監測缺位——那當下必須補一個會主動告警的機制,不是補一句道歉。

目前狀態:0 支 CLI 有功能探測。這一格是整個系統最大的洞。

👉 證據 · 2026-08-05 真實輸出

近三個月至少 4 起失效,全部由夏哥發現:

  • agy 功能被判死(實為額度)
  • Copilot 退訂後 routing 沒更新
  • gws 憑證失效 6 天(07-30 → 08-05)
  • KOL streams 分頁漏抓

而 gws 這六天裡,守門狗每晚都在跑——它只是自己瞎了,還把告警用 7 天去重壓掉。

證據:corrections.md 2026-06-27 早就寫下結論「CTO 該有免額度的工具健康探測,探 function 不是探 --version」——從沒建

👈 🔄 #5 自癒 · 順序錯就是破壞

順序鐵律:先動可重生的(清快取、換 key、重啟)→ 才動需覆蓋的(還原備份)。

禁區:本機憑證狀態健康時,禁止還原備份。那不可能修好任何東西,只可能用舊憑證覆蓋好憑證——純破壞。

備份不驗=沒有備份。備份必須實測可還原,否則需要用時才發現是廢的。

👉 證據 · 2026-08-05 真實輸出

🔍 跨模型審查抓到的措辭缺陷(已核實後接受):

原本把閘二描述成「一個檔都不動」不精確——閘二禁的是「用備份覆蓋 credentials.enc」,而閘三接著就會移開 token_cache.json。兩個不同檔案,但那句話會讓人以為完全不動。已更正為:閘二不動 credentials.enc,閘三只動可重生的快取

評審另一項指控經核實為誤:GLM 指閘三違反閘二。實際程式碼中兩者作用於不同檔案(ENC_CRED vs TOKEN_CACHE),同分支先後執行不衝突。不因為是跨模型審查就照單全收。

採納的新提案 — 閘四(防自毀):執行任何 gws 指令前對 credentials.encchflags uchg(macOS 不可刪旗標),指令結束解除。這一招若當天存在,整起憑證被毀事故不會發生。尚未實作。

這三條全是當天用血換的:守門狗跑 2 次、毀憑證 2 次,損害率 100%。

已焊三個閘(D9 故意失敗測試全過):

  • USER 硬閘:解析不出使用者名稱就 exit 78 拒跑任何 gws 指令
  • 健康狀態禁止覆蓋:sha256 未變、無 prerestore、log 明示拒絕還原
  • token cache 自癒:清快取重試,恢復就靜默,完全不驚動夏哥
證據:commit bbb65c460bfe38 · D9 四案共 14 項斷言全過

👈 🙋 #6 人工介入 · 只剩一步

機器做不到的只有一件事:瀏覽器 OAuth。那需要夏哥本人登入 Google,agent 不能代做,也不該代做。

其餘全部機器完成:清快取、備份、隔離實測還原、六項 API 驗證、三重寫入回查。

目標是人工步驟數 = 1。超過 1 就是把工程負擔轉嫁給文科 builder。

👉 證據 · 2026-08-05 真實輸出

當天實際是 3 步——超標 3 倍:

  • 授權第 1 次(被我用守門狗毀掉)
  • 授權第 2 次
  • 還被我叫去自己刪 Keychain 廢金鑰 ← 夏哥當場糾正:「你們生,叫我文科生處理?」

第 3 步是我的失職,不是必要的人工介入。已由我自己完成並回查確認。

證據:Keychain 現況只剩正常的 acct="xy2024air15";刪後六項 API 重驗全通、憑證 sha 未變

👈 🆕 #7 保持最新 · 殭屍 routing 清除

既有覆蓋:tech-freshness-watch.sh 週跑 6 個來源(claude-code npm / hermes / anthropic docs / ollama / pip / vault refs)——但不含 CLI 艦隊,且是版本級。

殭屍 routing:工具死了或退訂了,規則卻還指著它。這會讓派工靜默失敗。

反向殭屍更難察覺:工具其實活著,我們卻因為一條過時的診斷在繞開它。

👉 證據 · 2026-08-05 真實輸出

當天實測翻案一筆:

  • corrections.md 記載「agy 功能已死、不路由」,多份規則據此把它移除
  • 實測 agy --version = 1.1.9(記載的是 1.0.13,它更新過了)
  • agy -p "…"Individual quota reached——連得上服務、回得出 API 層錯誤,功能鏈是通的

agy 有 17 個下游消費者。我們一直在繞開一個能用的工具。

證據:待辦已開:修正 corrections 該條 + 檢查 soul.md / CLAUDE.md / orchestrator-baseline 的 routing

👈 📖 #8 範本:gws 走完全程

gws 是唯一一支把六型失效全踩過的 CLI,而且集中在 2026-08-05 一天之內。一支講完,通則就齊了。

它撐著什麼:cacoch-cal 三重寫入(待辦 = Calendar event + Google Task + vault note)、Calendar / Gmail / Drive 全部自動化。

最刺眼的一點:修的人(我)比原本的故障造成更多損害——兩次誤判根因,還親手毀掉夏哥剛授權好的憑證。

👉 證據 · 2026-08-05 真實輸出

當天時間軸:

  • 07-30 憑證失效 → 六天無人知曉
  • 14:54 開始核實 → 我第一次誤判(說解密失敗是舊 log)
  • 18:09 夏哥重新授權成功 → 18:10 我跑守門狗把它毀了
  • 我第二次誤判(說同意畫面沒勾 Calendar),夏哥:「太奇怪了」
  • 決定性實驗:同一份憑證放進沒有 token cache 的隔離目錄 → Calendar 全通 → 真因是過期快取
  • 六項 API 全通 · 三重寫入三個 id 由 Google 端回查確認
證據:commit 7662e81 / bbb65c4 / 60bfe38 · 憑證 sha cd870de2… 全程可追
🎯 目標 · 檢核標準 · 驗收標準(資料驅動,全站規畫 SITE-PLAN) 載入中…
🗂️ 跨專案控制台 · 全貌視圖(資料驅動,一庫多專案) 載入中…
📋 行動計畫 · 可勾選追蹤:0/0 ↺ 重置
gws.nqio.dev · CLI 艦隊保持暢通 — 以 gws 為範本 · 事故日 2026-08-05 · 證據來源:ops repo commit + 當天 runtime 輸出