每棒追加一個 block,寫完不改。發現舊 block 有誤,在新 block「推翻了什麼」欄寫明。現況看
FR-172-STATE.md。
角色:首腦(分析決策人員)。決策者開場五點需求+要求「爬之前留的訊息統整」「與 171 一起分析分工」。
時序
requirement-notes(原 docs/draft_requirement_spec/2026-11-01-agent-independent-update.md)、agent-rollout-spec §1/§6/§7/§11/§13、update-site-schema-spec、release-signing-spec、release-runbook Agent 段;FR-171 STATE/LOG/discussion 全文、memory feedback_no_heartbeat_piggyback_messaging。build_bundle.sh ⑧、publish_draft.sh、.gitlab-ci.yml package 段;update-center releases.ts(r2Key、releaseAdoption)、routes/client.ts 三端點;evidence-agent 無 CI、build_compose_bundle.sh 產物、update_sync.py 進度三形狀、outbox.py kind、CONSOLE_SCOPES 六項、console ops_routes.py;FE console router.js 九頁、agentRolloutState.js 八格已改讀 agent.progress。git mv 需求草稿進來、寫 discussion.md v1(§0 概述五階段、§2 現況十環節、§3 目標設計 P1~P4、§4 與 171 分工、D1~D12)、雛形十頁(抄 FR-167 雛形 v2 與 Agent 主控台版面)。config_versions」改「設定變了直推 POST /config/notify、Agent 來 GET /agents/config?versions 拉、心跳只剩存活與回執」;D9 擴大成 token 多把並存;新增 D13(備援期);§7.5 與 172 分工;§1 加 189 實證;§2.2 加 v2 裁示段;§6 相容矩陣改寫。決策(本棒提、決策者未拍板,全部進 discussion §5 D1~D12)
product 欄不另開表;Agent 章用另一個 payload_type=agent_release_manifest;相容只擋「Agent 要求的主系統最低版沒到」;Agent CI 在 188 runner、主控台前端在 node 容器 build;Agent 包帶 release-keys/;新能力點 update;本機目錄 agent-bundles/<Agent 版>/ 留兩份;失敗 detail ≤ 4 KB;Agent 區對齊成「預先下載→更新」兩步;1.28 第 7 步搬包+更新站補登 1.4.8;待辦 61/62 不併。推翻了什麼
教訓
commits:BE 本棒一個 commit(登記+172 四檔+雛形+171 v2+兩站 build)。未 push。本棒不動 Agent/jedi/FE/update-center。
交給下一棒:STATE §3——等決策者裁兩案 D 項;裁完兩份 design+cards.py+兩張母卡。
時序
handoff/cards.py(171:21 張 8 批;172:19 張 10 批;173:6 張 3 批)各跑驗批;新增 scripts/deliverables/cards_to_md.py 把表印成 design §6。決策(全部已拍板,見三份 design §1)
推翻了什麼
教訓
commits:BE 本棒第二個 commit(三 design、三 cards.py、cards_to_md.py、FR-173 資料夾、README 登記、三站 build)。未 push。
交給下一棒:三案 STATE §3——開 Notion 卡(171、172 同時;173 等收口)。
時序
.steplist、新增 ⑪⑫ FR-171 金鑰登記簿兩頁;E-5/G-3 卡 append 首腦補充(7ac0f8f1e)。feature/FR-172;決策者開工作坊 31(171)、32(172),皆 auto。開跑前首腦檢查卡片四欄、repo 登記、分支、埠、Nexus 可達;預先把 CM-3411/3412 改暫緩擋住跨案依賴(17dc14107)。project_agent_sqlite_encryption_deferred)。推翻了什麼
教訓
commits:7ac0f8f1e、17dc14107,與本棒交接 commit。全部已推。
交給下一棒:STATE §3——輔助首腦待命;唯一主動事項是 171 批 3 合回後放行 CM-3411/3412。
時序
workshop.db 的 attention 與 events:CM-3410(卡片寫改 BE 但邏輯在 jedi-detection、被不變式與約束擋)、CM-3383(小弟做完沒改狀態)兩筆,決策者 20:45 已處理;CM-3383 後來驗收通過合回。CM-3391 跑很久 → 查 session 與 worktree mtime,確認活著、正在跑全量測試。requirement-notes.md(三處阻擋帶檔案行號、A 案、被排除的 B 案、預估三張卡、兩個待確認題)、README、STATE。未寫討論稿、未開卡。教訓
attention 表的 acked_at:有值就是決策者已處理,別再重報一次。pgrep,不要只看事件時間;大卡(CM-3391)長時間沒事件是正常的。交給下一棒:STATE §3(輔助首腦待命;171 批 3 合回後放行 CM-3411/3412)。FR-174 由下一個首腦照其 STATE §3 開始討論,等決策者發令才開工。
時序
ws-<母卡> 分支,不會進 feature/FR-172,兩個工作坊互相看不到。url 欄、dev-sec 範例改隨套件帶檔、從 1.7.3b1 長)→「開吧」→ design D1~D10、cards.py 7 張 4 批、Notion CM-3422~3429、CM-3410 append 指向。略過討論稿與雛形。ws-CM-3379 ff 合進 feature/FR-172(5 commits,F-1+F-3)並推。測試:detection 251 綠、protocol 42 綠、remote-agent 450 綠 1 紅(心跳 schema 多鍵,屬 K-1b 範圍、合前就紅)。決策
推翻了什麼
ws-CM-3379 不是 feature 分支,查法改成看 Notion 狀態+事件表 card_merge。url 欄(D2)。教訓
ws-<母卡> 分支是孤島:跨案依賴的卡,前置「驗收通過」不等於「在我的工作區裡」,中間要有人把 ws 分支合進共同的 feature 分支。auto 模式下這步沒人做,下一個工作坊就會派出去撞「前置沒做」(3413/3414 實踩)。.venv 會過期(jedi-remote-agent 的缺 jedi_agent_protocol、jedi_common 新模組),30 個 collection error 不是程式壞;改用 BE venv 跑才看得到真結果。.venv/bin/python(就是 poetry 的環境)。commits:BE 70df7a26a(FR-174 設計與開卡)、本棒 STATE/LOG commit;jedi-packages a960e479(ff,已推 origin/feature/FR-172,遠端分支由本次 push 建立)。
交給下一棒:FR-172 STATE §3——等 171 批 3 四張合回 ws 後,合 BE/Agent 的 ws-CM-3379 進 feature/FR-172、跑守衛、放行 3411~3414。FR-174 等決策者開工作坊。
時序
feature/FR-172 合進 BE ws-CM-3401,解 6 處衝突;發現 E-3/E-4 缺契約 kind,補開 CM-3439 P-1(批 9,jedi-packages);七張改回 Not started;待辦併 S-4。決策
推翻了什麼
src/locales/、Agent 公鑰在 BE scripts/build/release-keys/:實際分別是 src/config/locales/i18n/ 與 scripts/installer/release-keys/(小弟照實際改,首腦確認)。EVENT_KINDS 有升級三種,否則分派器拒收。教訓
test_event_code_agent_contract。SSL_CERT_FILE=/etc/ssl/cert.pem 即可。commits:BE 367c0bde7(合 feature/FR-172 解衝突)、本棒 STATE/LOG commit。
時序
agent_release_service.py 讀完、114 測試綠、三道防線突變(相容判定、保留規則、payload_type)皆紅;更新站主鍵 migration 在舊表塞資料實跑,19 欄完整搬過、新約束擋得住;releases.ts 每條 SQL 都過濾 product;更新站 188 測試綠(兩套 vitest config);FE CSP 未放寬、/internal/agent-origins 三層防護。結論無須退回。agent-api-spec.md(照 Stripe/GitHub 寫法,每端點欄位表+範例)與 agent-api.openapi.yaml(OpenAPI 3.1,openapi-spec-validator OK)。發現指令端點錯誤格式 {error} 與他處 {error_code,msg} 不一致,記入規格。profile_cache.CACHE_ROOT 寫死 /data(Mac 寫不進)。決策者選 B 案:補開 E-1 CM-3434、A-2 CM-3435 於批 4,H-1 挪批 5、Z-1 挪批 6。工作坊派 E-1 前先撞版號衝突,輔助首腦照卡上裁示解(4fa2db4a)。174 九張全做完,實查 DEV dev-sec 兩版轉 file 型、sha 一致、Agent 快取有兩支完整解壓內容;合回四 repo。.venv 被 171 E-0b 小弟升 b3,8000 與 174 受影響 → 另開 .venv-fr174 給 174 與 8000;②171 合回後 .venv 升正式版、8000 改回 .venv;③174 Z-1 又在卡工作區 poetry update 把共用 .venv 的 detection 升到 1.8.0,174 合回後才對齊;④本機 Agent 舊程式碼不會簽 DPoP 每跳 401,主線合到 171 後重起恢復,Agent 執行環境手動裝 protocol 0.2.0。f2a4e37bb;「合回主線」要求全卡 Done,前次「現在就能合、不用等」建議錯誤,已更正並建議收尾卡另開母卡;171 首腦開 CM-3436 底下 Z-3~Z-6,工作坊 31 結案。工作坊 34 合回時 poetry.lock content-hash 衝突,提供 prompt 由 171 首腦收(b893f9a9c)。~/.claude*/jobs/*/tmp(小弟草稿紙,其中 15 個放整份 repo 副本)10/30 前已結束的 798 組刪,29 GB;③pypoetry 確定無主的 8 個環境刪;④Docker 12:28 硬碟滿時虛擬磁碟寫入中斷、引擎掛死,舊後端程式卡 2 天不退出擋住重開,決策者 kill 後恢復;清孤兒 Postgres 匿名卷 8 個(出包排練臨時庫)、build 快取、無用 image、14 個舊容器,約 26 GB。本機 DEV PostgreSQL 是 Homebrew 的,不在 Docker,未受影響。結果可用空間 3.4 → 37 GB(Docker 內部另回收 26 GB 待 Docker 自己還給 Mac)。design-v1.1.md,v1.0 原樣保留並加指向新版的一行;寫進 doc-site-build(規範全文)與 big-feature-workflow(Step 3 一行指路)兩個 skill。決策
feature/FR-172 長(因 171 批 1 套件已先合回)。.venv-fr174 作為 174 與 8000 的隔離環境(事後 174 合回、8000 改回 .venv)。推翻了什麼
教訓
.venv 是工作坊最大的環境地雷:卡工作區 symlink 到主資料夾那份,任何 poetry update 都改到所有人與 8000。今天踩兩次。git worktree add/remove(建議寫進 runner 紀律,未做)。prune 一網打盡:Docker 的「可回收」只代表沒容器掛著,E2E 黃金庫、別專案的 mongo 卷都會被算進去;要逐個指名刪。commits(BE feature/FR-172,皆未推):70df7a26a(174 設計開卡)、d16948662(jedi ws-CM-3379 先合回)、5ceb1a725(Agent API 規格)、b6b219aa5(174 補卡)、f5b043ce0(174 STATE)、本棒交接 commit。BE 卡工作區 f2a4e37bb(FR-132 站產物)、jedi 4fa2db4a(174 版號衝突)。
交給下一棒:§3——172 首腦解衝突後放行;174、171 收尾結案;出貨基線與 SPEC 等三案做完。
.venv-fr174 刪除(決策者裁):確認無程式使用、無工作區 symlink、174 工作區已收,回收 1.1 GB;8000 不受影響。closing-and-handoff skill 加「runner 環境紀律」兩條:①做改前改後比對用 git worktree add/remove,禁整份複製 repo 進 session 暫存區;②不在卡工作區跑會改共用 .venv 的指令,要換套件版本先回寫等首腦。上一個 block「教訓」裡「建議寫進 runner 紀律(未做)」即此,已完成。.claude/rules/workshop.md 由 agent-workshop 範本產生、標明勿手改,未動;若要讓所有專案的 runner 都吃到這兩條,要改 agent-workshop 的範本。367c0bde7),輔助首腦抽驗:兩個 mount 都在、未加回心跳函式、事件碼無撞號。--no-deps,8000 未重啟),BE 事件相關測試 136 綠。feature/FR-172 進 ws-CM-3401,撞 STATE/LOG:172 首腦(f09c3a13e)與輔助首腦(90e8e4e71)同一分鐘各改了一份。解法:STATE 取主線版、補進 172 首腦的批 9/.venv/§4 待辦;LOG 兩個 block 都留。教訓:同一份 STATE 兩個首腦同時寫一定撞;FR-172 的 STATE 以後只由 172 首腦寫進 ws-CM-3401,輔助首腦要記的事寫進 feature/FR-172 前先看 ws 有沒有新 commit。
時序
_next 會把批數 ≤ 已核准的卡全部同時派(每工作坊上限 4);按繼續後 P-1、E-3、E-4、E-5、G-1 一起派出,E-5/G-1 前置沒到又停(第二次)。cloud_http、update_sync.trigger 已隨 171 進來;稽核事件碼契約沒有;release-keys/ 只在安裝包、映像建完刪掉 /tmp/bundle 且 compose 沒掛,容器內讀不到;驗章 helper 只認編譯進去的 LC 公鑰。決策
/opt/guidant-agent/current/release-keys/(跟版本走),do_image_prepare 落位+Dockerfile 斷言;映像內實驗證放 S-4 開包。common/integrity/verify.py 加公鑰來源參數,三道檢查照主系統 _verified_payload。REPORTED_EVENT_CODES、不進 LEGACY_ACTIONS;BE 事件碼表與改釘由 G-2 做,.venv 首腦代換。update_event、log_file_uid(不是卡上的 log_file_id)、下載走既有 /file/download,不加 api.js 常數。推翻了什麼
3bb5b11e1 解)。教訓
approved_stage:已核准範圍內有依賴鏈的卡會同時派出,只能把卡往已核准批數之後挪。commits:本棒一個 commit(cards.py/gen_notion_cards.py/STATE 批次表/本 block)於 ws-CM-3401。Notion:CM-3441 新建;3413/3414/3415/3416/3420 改 Stage。
時序
~/.guidant-release/ 不存在)、出貨基線沒重產。停下回報。update-center 的 npm run cli -- init-keys:主力 7997f5e514258936、備用 bf821e5980c439e6。c48ba6c1f(1.28.0、三把公鑰+PROD_KIDS、product: host、鎖檔、手冊三句、FR-167 CM-3378 標取代)、Agent 2aacdcc(1.5.0、版本說明定稿)、FE be93c861(1.28.0)。scripts/init 新裝,migrate 停在 packages/jedi_detection/004-detection-profiles-seed.sql(dev-sec 兩列 file_id 為 null 撞 chk_dpv_source_exclusive);本機 wrangler dev register-draft 帶 product: host 回 201、不帶回 400。決策
PROD_KIDS=主力、備用、Vault 三把;測試章 b91819f86eb4b4f8 的 .pub 留在 release-keys/ 但不列——建議 1.28.0 用測試章簽(188/189/190 只認測試章),包內帶正式章當換鑰過渡,1.29 起改正式章或 Vault(待決策者裁)。教訓
VIRTUAL_ENV(agent-workshop 的 venv),跑 BE 的 poetry 要 env -u VIRTUAL_ENV。等誰:主首腦重產基線(主線 7 支+dev-sec 兩列 upload_files+套件 detection 014、remote-agent 017/018);決策者裁 1.28.0 用哪把章簽。基線好了之後本卡接著做:新裝重驗、H-4 兩態點畫面、188 出兩包+開包驗。
時序
feature/FR-139 換到 feature/FR-172(推 Agent 遠端分支)。2d2aadfb1)、B-3 CM-3444 測試連線更新連線欄(BE 04b2ab975)、B-4 CM-3445 單台進度條+掃描頁預覽(FE 9f90a82e)、B-6/B-7 CM-3449/3450 授權範圍 version=None 顯示未收到+立即同步(Agent 3ce8931、FE 74f7f7c8)、B-8 CM-3451 SonarQube 上傳原始碼模式(FE 7737581f)、B-9/B-10 CM-3455/3456 上次同步時間+「檔案」(Agent 1ab5e80、FE 383c40df)、B-11 CM-3457 執行中「返回」(FE 12f368e7、415bf0af)、B-12 CM-3458 授權範圍查看清單(FE edbd76ef)、B-13 CM-3459 選檔自動上傳不重傳(FE a7e98096)、B-14 CM-3460 信任錨用途中文(FE 2a269adc)、B-15 CM-3461 ZAP 每次新 session+同 Agent 一次一張(Agent 62e4769)。另開工作坊卡 P-4/E-6/B-5(CM-3446~3448)同步失敗寫稽核。twgcb-01-014.tar.gz 無原檔仍缺);123 裝 syft/trivy/grype/osv(照 tools-manifest、sha256 核過,~/guidant-agent-dev/scan-tools/bin+AGENT_SCAN_TOOLS_DIR);Mac/123 開發腳本加結束碼 75 自動重起。feature/FR-172;Agent ws-CM-3401 手動補合 ZAP(c6b88e0),三 repo ws 皆含 feature 全部。決策:13 張直接修的卡由決策者裁 Done;1.28.0 Mac 手簽先出、FR-173 跟 1.29、包內先放 Vault 公鑰(S-4 已做);123 換主控台靜態檔不必先問,重起 Agent 仍先查有無掃描在跑。
推翻了什麼:上一棒「主線之後只多 3 個文件 commit 再合不衝突」——172 首腦同時寫 STATE/LOG 已撞;「下一張 Agent 卡會自動帶 ZAP」——E-6 已先跑完,改手動補合。
教訓
approved_stage:已核准範圍內有依賴鏈的卡會同時派出空轉。交給下一棒:發版。見本 block 之後的交接提示詞(對話內給決策者);STATE 由 172 首腦/S-4 小弟寫在 ws(adf2813ec「S-4 結案進度」節)。
時序
upload_files,02/04/99 重產(142e327a4);gen_seed_sql.sh 系統檔數量檢查 10→12(不改新裝在 04 直接 RAISE)。臨時 PG16 新裝實跑 0 錯。release-keys/(285c2eb5b):PROD_KIDS 只是守門清單,出包帶走資料夾內所有 .pub。fr132 對照表補 P-5 能力點(51e6e43f4)。feature/FR-172(BE 只撞 LOG,兩邊都留)並推;188 三資料夾切 feature/FR-172。RELEASE_NOTES.md 被 S-4 取代字串吃掉 ## 1.5.0 標題、說明 0 條(6760914,壞包改名 .BAD-notes0);開機補登金鑰登記簿不在 app context、新裝第一次開機留 Traceback,smoke 擋(088ca2b75,臨時庫重現與驗修);幽靈選單比對表缺 agent-keys(96d4e23e7)。另外首腦自寫的出包腳本取 Bugsink 密碼寫錯一次。wrangler deploy。npm run deploy 的 predeploy 會掃到 .worktrees/ 與 node_modules 的測試而紅,改成排除後跑主樹測試(121+67 綠)再直接 wrangler deploy。guidantai upgrade 離線升 1.28.0(八步 0);Agent 1.4.7 對 1.28.0 心跳 401→重註冊循環,guidant-agent-compose upgrade 手動升 1.5.0 後不需重註冊即恢復。重啟 api 讓開機檢查跑:看到 1.28.1 與 Agent 1.5.1、驗章過。決策:1.28.0 測試章簽、包內只帶三把正式章;173 共用 feature/FR-172 先開卡不派;更新站照設計部署(188/189 升 1.28.0 前檢查新版會失敗);S-4 首腦接手不派回;1.5.2 等決策者主系統端測完再發。
推翻了什麼:首腦曾說「1.4.7 Agent 收得到 1.28.0 推送」——錯,1.28.0 只走 /update 直推、1.4.x 沒有這端點,每台 Agent 要手動升一次。S-4 回寫「主線待補 7 支、套件 014/017/018 要進基線」——實查 5 支,套件 migration 不進基線。
教訓
--check 一次。時序
190-test-feedback.md。ssl_client 殭屍(PID 1 是 weed 不收),1.5.0 加 pids_limit 後 3 小時撞頂——就是 compose 註解「根因未查」那個洩漏。190 當天重啟兩次(10:10、12:44)。feature/FR-172。bundle/stage/(每版 2.1 GB 從沒清)、兩邊 dist、主系統解開目錄、/home 舊檔、三版舊映像,回到 73%;各版 .tar.gz 成品都留。決策(決策者):#14 主系統成功也能下載升級 log(與 Agent 統一);#20 只指 Agent 區;Agent 區推翻 D9 改一步完成;1.5.3 先草稿;舊包照首腦建議清。
推翻了什麼:首腦先說 Agent 主機 agent-staging 4 GB 是殘留——實際是升級進行中,升完自清;#23 Agent 側沒問題。首腦先說主系統更新包升級成功後沒人用——retry(退回/跳過後重試)會用同一包,所以只在成功時刪、退回照留。
教訓
init: true,不要靠 pids_limit 救。時序
<=0 拒、主機預檢同版擋但有 --force、Agent trigger 同版當重複),開 FR-172.1 批 3 三張(CM-3477~3479)。決策者改令「不外派,首腦直接改、改完出版交接」。1f48bebc7、c72c208e5)、T-2 Agent(3a96ab5)、T-3 FE(d084f74e)寫完、測試+突變驗過、推上 feature/FR-172。沒出版(context 用盡,交下一棒)。決策:兩端各自 env 開關、預設關、不進出貨範本;主機另讀同一 guidant.env 的鍵,單上 force 單獨無效;更新站不動,重套用本機留的 release.json+以現行版重拿下載網址;Agent 不加降版閘(原本就沒有,主系統只推新版/同版);Agent 區重套不走勾選;契約不改。
推翻了什麼:卡上寫 Agent「比現行舊仍拒」——Agent trigger 本來就不判降版,那是主系統的事。
教訓
同版單會撞上「現行版=目標版就當成功」的捷徑:Agent _order_outcome 要排除同版單,否則一寫單就回報成功、主機根本沒跑。只在開關開時排除,關時行為不能變(既有 /tasks 測試靠它)。
macOS bash 3.2 set -u 下空陣列展開會炸,bats 在 Mac 跑會抓到;shell 加參數用 launch+=() 不要另開空陣列。
Agent 測試要用 protocol 0.3.2 的 venv(evidence-agent-z8S7lqoJ-py3.13),記憶裡的 knWYPLiu 是舊的。
2026-11-03 14:24:依決策者令把更新站 Agent 1.5.3 由草稿改發布(D1 UPDATE product_releases SET status='published')。190 Agent 升 1.5.3 後 SeaweedFS 殭屍行程根治,不必再定期重啟。
時序
6c06b016),三 repo 進版 1.28.3/1.5.4。AGENT_UPDATE_ALLOW_SAME_VERSION 轉進容器(Agent 9359fe6)。2260d22b5(更新中心)、e8bb97f27(主控台先下載再推、then_push 帶 actor)、3eac1d7d4(下載中再按改併入、不覆蓋,自動資安檢查抓到);FE b4463557 鎖定寬限 10 分。a51f865)。upgrade_order.sh 預檢對同版一律擋(T-2 漏改,卡上有列)。修 Agent f932701,出 1.5.5(首次 --internal-test,15 分 52 秒,比 1.5.4 快 3.6 分)上站。09308ef5d、Agent 70ec3d2)、主系統封包 pigz(BE 09308ef5d)、釘版 image 匯出檔以 image ID 快取(BE 9c1539491、Agent cd3a1f9)。查證 Nuitka 在 188 本來就沒開 LTO,--lto=no 無效。決策:同版重套開關只在 190;測試包略過 SBOM 綁在 --skip-prod-key-check/--internal-test,正式包不能單獨關掃描;主控台由主系統發動最慢 30 秒才鎖,先這樣;Nuitka 不升版、不加 --lto=no;正式版不在 1.28.x 出,跟 173 用 Vault 簽 1.29。
推翻了什麼:上一棒 F-2「沒包先下載再推」只做了「完全沒包」一種,留著舊包的機器從沒生效(CM-3469 卡上 F-5 驗收時已記,未修就出版);T-2「主機 runner 不用改 shell」錯,預檢在 runner 之前就擋。
教訓
.sh 也得出版;這類修正要算進出版時間。