文章

三週後的 Harness:從工程方法論到 AgenticOps

三週後的 Harness:從工程方法論到 AgenticOps

三週前我發表了《Harness Engineering 方法論:從 CLAUDE.md 到自進化的 AI 開發體系》,整理了我的五層架構。

文章最後列了幾個「仍在演進」的方向:Knowledge Graph MCP、自主部署驗證回滾、SBE 深化、多 Agent 協作。

今天(2026-05-04)是一個觀察自己進步的好時機。


AgenticOps:四階段持續循環

AgenticOps 的核心是一個永不停止的四階段閉環——每一輪循環結束後,系統比上一輪更聰明、更可靠。

Agentic Ops ① 計畫 Planning SBE 需求 · 知識庫查詢 假設審計 → 確認影響範圍 ② 開發 Harness + AI 自我驗證·修復·再驗證 並行 Subagent 協作 ③ 驗證 Verify E2E · 部署健康檢查 HTTP 200 ≠ 功能正確 ④ 回饋學習 Wiki · 知識閉環 Dev Diary → Ingest 失敗模式 → 防重蹈
AgenticOps 四階段持續循環——每輪結束後系統比上一輪更聰明

清點三週的進展

✅ 已落地:Knowledge Graph MCP

文章中把 Knowledge Graph MCP 列為「Phase 2(50 頁時啟動)」的計畫。

現狀:知識圖譜 MCP 容器已在生產環境跑了幾週。REST API 提供全文搜尋、概念查詢、關聯圖遍歷三個端點,每次接到新需求時的第一步就是查詢確認影響範圍。wiki 頁面突破 121 頁,實體/概念/策略/系統架構/工具等分類齊全。

今天更進一步:知識庫的 export 流水線完成最後一哩路——

前端觸發 export → API 服務送到訊息佇列 → 知識庫寫入服務消費 → 寫入 vault → git commit + push 到 GitHub

這個流水線有個有趣的故事:dispatch 端(送訊息的一端)三個月前就建好了。但消費端從來沒被部署。Queue 裡積壓了幾十條訊息,每次 export 都等滿 15 秒 timeout 才失敗。「生產者已上線、消費者未實作」 的架構缺口,在這個 session 才被補上。

教訓:API 能呼叫、200 OK、沒有錯誤訊息——不代表功能正確。


✅ 已落地:自主診斷(L3 Auto-Fix Scanner)

文章中的「自主部署-驗證-回滾」被我描述為未來方向:

AI 部署後自動查詢 Prometheus 指標。如果 CPU/memory 超過閾值,自動回滾。

今天的現實更有趣,也更務實。

三週的演化路徑是這樣的:

Phase O(5/2 完成) → 全服務對齊可觀測性全家桶(OTel + Loki + Tempo + Prometheus) → Alertmanager + Telegram 整合(不再需要人工看監控面板) L0-L1(4/7 完成) → Prometheus alert → autoheal 自動重啟 → 健康監控服務(每 5 分鐘三層掃描) L2(4/7 完成) → 健康監控服務主動偵測 + Telegram heartbeat L3 Slice 1(5/3-5/4 完成) → 三路偵測:Prometheus firing + Tempo error traces + Loki ERROR logs → 雙路 AND fusion(Tempo ∩ Loki,避免 false positive) → Dry-run fix proposal 持久化到系統狀態目錄 → 排程每 15 分鐘自動觸發

L3 Slice 1 是 dry-run 階段:它偵測、分析、產提案,但不執行任何修改。這是刻意的設計——在 ≥ 5 個提案精準度 ≥ 95% + 48-72 小時觀察期之後,才進入 Slice 2 的 production mode。

這個設計有個重要洞見:自動化信任需要被賺取,不能被假設


✅ 已落地:多 Agent 協作

文章中描述多 agent 是「當單一 agent 能力達到天花板時的下一步」。

實際上它在三週內就常態化了。今天的工作流包含:

  • 並行 subagent 執行獨立的診斷任務
  • Explore agent 用於大範圍 codebase 搜尋
  • 三方並行審核(主程序 + Sonnet + Gemini)在重大架構決策前強制執行

重要的是:多 agent 協作不是「大任務時才用的特殊模式」,而是日常工作流的一部分。


📈 比預期走更遠:L3 的設計哲學演化

文章的「自主部署-驗證-回滾」隱含了一個假設:發現問題 → 自動修復

但三週的實踐揭示了一個更微妙的問題:什麼叫做「問題」?

L3 scanner 的雙路 AND fusion rule 是這樣設計的:

有效 incident = Tempo error trace ∩ Loki ERROR log(同 TraceId)

今天 Tempo 出現了若干 HTTP 錯誤 traces,但 Loki 一條對應 ERROR log 都沒有。這些是 HTTP 4xx responses,是 expected behavior,不是 incident。

如果用單路偵測,會產生多個 false positive proposals。雙路 AND 過濾後,0 proposals,靜默釋放。

這個設計決策背後的思考是:過度告警的 self-healing 系統是有害的,因為它會被人類忽略。就像每次都報假警的火警系統,大家開始習慣不理它。

真正有用的自愈系統,必須「沉默時讓人信任它,發聲時讓人重視它」。

L3 Auto-Fix Scanner:三路偵測 × 雙路 AND Fusion Prometheus Metrics / Alerts Tempo Error Traces Loki ERROR Logs AND Fusion Tempo ∩ Loki 同一 TraceId Prometheus 獨立標記 有效 事件? 靜默釋放 避免警報疲勞 Dry-run 提案產生 觀察期 精準度 ≥ 95% 執行 Slice 2 未來 「自動化信任需要被賺取,不能被假設」— 沉默時可信,發聲時被重視
L3 三路偵測架構:雙路 AND Fusion 過濾雜訊,確保每個告警都值得被處理

一個沒有預見到的新模式

文章描述的五層架構,有個隱含的假設:Harness 是靜態的。 它是固定的規則、固定的工作流、固定的知識結構。

三週後我發現,最有趣的演化不在任何一層,而是在層與層之間的動態連結

今天的一個例子:

  1. 使用者回報「均值回歸策略的交易標的範圍設定看起來沒有生效」(Telegram)
  2. 診斷路徑:查日誌 → 發現個股訊號穿透到限定標的帳戶 → grep 程式碼 → 找到自動交易處理器模組缺少帳戶層的標的範圍過濾
  3. 修復部署
  4. 使用者確認行為預期,反問停損模式
  5. 分析停損根因(修復前的舊倉 + 市場分歧,非程式碼問題)
  6. 發現部位大小計算器以「當前淨值」而非「初始資金」作為建倉基準
  7. 使用者確認設計意圖,修復

整個流程大約 90 分鐘,橫跨了:Telegram 指令 → Loki 日誌診斷 → 程式碼 grep → 設計決策確認 → 修復部署 → 使用者驗證 → 繼續診斷 → 再修復。

這不是 skill 執行,不是 hook 觸發,也不是 wiki 查詢——它是整個系統動態協作的結果。

這讓我想到一個新定義:

Harness 的成熟標誌,不是單個機制有多強大,而是這些機制在真實問題面前能多流暢地組合在一起。


量化:今日的修復清單

以下是今天這個 session 完成的工作,可以對照文章中的原始 baseline:

問題類型描述
隱性業務規則結算日假日往後順延邏輯錯誤,補假後的結算日不被識別
可觀測性基礎Tracing 系統達到容量上限,全服務 trace 匯出失敗
Dead config field帳戶層的交易標的範圍設定存在但未接線到執行路徑
設計意圖偏差部位大小計算器使用動態淨值而非固定初始資金作為基準
架構缺口知識庫寫入服務從未部署,訊息佇列積壓數十條
L3 噪音過濾Phase 1B 裸 HTTP 方法 trace 過濾規則

六個不同類型的 bug,在同一個 session 內全部診斷並修復——這是 harness 成熟的直接體現:每個工具發揮它該發揮的角色,組合在一起才有這樣的效率。


最大的反思:「衡量」的層次升級

文章中的第三個核心洞見是「衡量改變了一切」,那時的衡量是手動的 friction 矩陣——每週回顧 Insights 報告,統計各類問題發生次數。

三週後,衡量本身也自動化了。

L3 scanner 每 15 分鐘做的事,本質上是:系統在衡量自己的健康狀態。Prometheus 記錄指標,Loki 收集日誌,Tempo 追蹤 error,L3 的 dual AND fusion 判斷什麼是真實問題、什麼是噪音。

從「人工定期看儀表板」到「系統持續自我觀察」,衡量的角色從被動記錄變成了主動監控

這個轉變帶來了一個新問題:如果系統能觀察自己,下一步是什麼?

答案在 L3 Slice 2 的路線圖裡。但更重要的是,這個問題本身揭示了一個方向:Harness Engineering 正在演化成 AgenticOps——不只是讓 AI 可靠運作的工程體系,而是讓 AI 系統能自我維護的運營體系。


一個尚待突破的盲點:E2E 測試覆蓋率

在整理這些進展的同時,我注意到一個缺口:

SBE 覆蓋了需求理解,但尚未覆蓋 E2E 測試覆蓋率。

4/12 文章中提到 SBE 可以擴展到 Performance SBE、Observability SBE、Contract SBE。我們在 L3 的 Observability SBE 方向走得很深。但最近觀察到一個趨勢——許多開源 AI Coding Agent 相關專案開始強調的不只是「讓 AI 寫測試」,而是「E2E 測試對程式碼變更的覆蓋率」。

傳統的 unit test coverage 衡量「測試覆蓋了多少程式碼行」。但在 AI-assisted 開發中,這個指標有個盲點:AI 同時寫測試和實作,覆蓋率可以很高,但測試可能只是在驗證 AI 自己的假設,不是在驗證真實的業務行為。

E2E 覆蓋率的方向更有趣:

SBE 定義的例子 → 自動化 E2E 場景(Given/When/Then → Playwright / API test) → 每次程式碼變更驗證 E2E 通過 → 追蹤「哪些 SBE 例子目前有 E2E 覆蓋,哪些沒有」

這不是「測試覆蓋率」,而是「需求覆蓋率」——有多少 SBE 例子被 E2E 自動化保護。

目前我還沒有看到成熟的框架將 SBE 例子和 E2E 自動化場景自動關聯、追蹤覆蓋率。這可能是 AI-assisted 開發工具鏈的下一個演化點。

E2E 活規格文件:需求覆蓋率自我增長循環 SBE 需求例子 Given/When/Then 業務行為定義 E2E 自動化 Playwright Golden Path 每次部署自動跑 需求覆蓋率 Coverage Tracking 哪些例子有 E2E 保護 哪些尚未覆蓋 系統演進 新功能部署 迴歸檢測 設計變更 SBE 例子隨系統演進自我增長 目標:E2E 測試不只是「測試」,而是永遠準確反映業務規格的活文件
E2E 活規格文件演化:需求覆蓋率追蹤讓測試套件隨系統自我增長

下一步

從今天的工作可以看出一些未完成的方向:

L3 Slice 2:dry-run 提案的精準度觀察期需要達到 ≥ 5 個有效提案 + 精準度 ≥ 95%。目前只有 1 個提案(近期的 Redis 重載事件)。

知識庫寫入服務的權限問題:容器以特權身份建立的檔案需要手動調整擁有者。改為非特權用戶執行可以根本解決。

L3 Slice 2 的自動執行:當觀察期結束,下一步是讓 L3 真正執行修復——而不是只寫 dry-run proposal。這是從「自我觀察」到「自我修復」的關鍵一步。

SBE + E2E 覆蓋率:將 SBE 例子和 E2E 自動化場景建立系統性關聯,追蹤「需求覆蓋率」而非只是程式碼行覆蓋率。


三週前的文章結尾說:「能衡量自己的 harness,才是能改善的 harness。」

今天的補充是:能觀察自己的系統,才是能進化的系統。

使用 Claude Code 建構與實踐。

本文章以 CC BY 4.0 授權