每棒追加一個 block,既有 block 不改。發現舊 block 有誤,在新 block 的「推翻了什麼」寫明。
做了什麼
agent-bundles/<版>/(更新中心預先下載後落地,旁有 .sha256 與簽章清單)但人拿不到;更新站預簽網址寫死 15 分鐘、客戶主機多無外網;既有短效簽章票(軸⑤)ttl 是驗證參數;FE navigator.clipboard 在 http+IP 不存在。feature/FR-172 HEAD、禁改檔零異動、BE 141 條與 FE 136 條測試綠;DEV 放測試包 1.5.0 實打十四項全過(細節在 FINAL-SPEC §4.2)。commits(BE,feature/FR-172)
79e58a387 design D1~D10、README、STATE、FR 登記、FR-172 補註1d1c9b105 design D11 與 §6 避撞;STATE 同步關鍵決策
<版>:<kind>,時限不寫進票、由驗票當下設定決定(調整時限立刻影響已發連結,接受這個副作用,換來不用另立 token 表)。推翻了什麼
agent_overview() 加 bundle_link_ttl_minutes」與「新增事件碼 6252」被 FR-188 避撞段推翻,改獨立端點與 reuse 6251。AgentRolloutPanel.vue 只加兩行」實作為三行(動作列包在 canWrite && !updating 的 v-if 內,唯讀管理員會看不到鈕,另加一行 v-else);首腦接受。踩到的坑
send_file 預設 direct_passthrough,call_on_close 不會被叫,名額放不回去;開發伺服器在客戶端中途斷線時也跳過 close。修法是串流包一層 generator 在 finally 釋放,並補「中途斷線」測試。單元測試原本假綠。InputNumber 先 emit blur 才寫回 v-model,blur 當下讀到上一個值,要 await nextTick();也不能設 min/max,會在 blur 時把 0 夾成 1 默默送出。expires_at,使用者電腦時鐘快了就一拿到就過期。username 不是 login_name;FE dev server 在 5180 不是 5173。!,zsh 在 -a 參數會吃掉,用 REDISCLI_AUTH 環境變數。docs/features/index.html),我的 design 改動退出暫存區等它收完再 commit。DEV 環境留下的東西
.env 末尾新增 GUIDANT_UPGRADE_DIR=~/guidant-dev/upgrade、GUIDANT_RELEASE_KEYS_DIR=~/guidant-dev/release-keys(路徑,非憑證),備份 .env.bak-20261110102535。~/guidant-dev/upgrade/agent-bundles/1.5.0/ 三個檔與 ~/guidant-dev/release-keys/eb5eb520d9c608cb.pub,來源 test/fixtures/agent_release/。要清就連目錄刪掉並把 .env 兩行拿掉。下一棒接手要知道
發生什麼
推翻了什麼
做了什麼
/v1/download-url 只認 artifact=ops 且 Agent 不准帶;預簽時限常數 15 分鐘;R2 上 Agent 1.7.4 的包、.sha256、release.json 都在;更新站後台有 Access 保護、無設定表;主系統 update_site_client.download_url() 有 R2 主機白名單;AgentReleaseService.check() 會寫 agent_last_check。design-v2.0.md(D1~D10+與 v1.0 的異動表),design.md 加「已被推翻」提示。.env 兩行與 ~/guidant-dev/ 測試包,重啟 BE。教訓
做了什麼
推翻了什麼
坑/打折
做了什麼
ws-CM-3761、未合回;試合併三 repo 無衝突;舊 v1 程式拿乾淨;BE 376/FE 145/更新站 187+101 條測試綠;DEV agent_last_check 未被動到、稽核 6251 有一筆 source=r2。端到端實打採信 CM-3801 回寫(同環境,未重做)。merge --no-ff ws-CM-3761 無衝突;重啟 DEV 後端,實打新端點回 412001(DEV 沒設更新站,預期)、兩支舊端點 404。a8583fe29(重產出貨基線補 FR-190 能力點,決策者裁示),確認 FR-191 合回 commit 在內。查到的事
artifact=sha256 都還沒上線。決策者裁不另部署 dev Worker、隨下一次上 PRD。test_module_boundaries.py 的紅與 FR-191 無關:主線兩支是 FR-190 能力點未進出貨基線(已被 a8583fe29 補上),工作坊分支多一支是落後主線、對不上新釘的 jedi-agent-protocol 0.6.0。上 PRD 的陷阱
0007_site_settings.sql 再部署 Worker,否則讀設定時表不存在,所有下載網址(含主系統升級包)都會 500。做了什麼
docs/system-design/update-center/04-作業程序.md:正式 D1 先套 0007_site_settings.sql,再 npm run deploy。部署前用真 R2 金鑰簽帶 response-content-disposition 的網址實打 R2,確認接受、續傳正常(這是唯一會影響主系統升級包下載的改動)。exclude 蓋掉預設排除,掃進工作坊 .worktrees/ 各自的 node_modules,434 檔 6006 條、72 條失敗。update-center 9ed50a1 加排除 .worktrees/** 後 187+101 條綠,重新部署成功(版本 80ccaecb)。0.0.0 回 none。3dd1547de 抽常數 NO_AGENT_BASE = "1.0.0" 三處共用,正式站用主系統真程式碼實打通過,push,DEV 重啟,卡改修正待驗證。踩到的坑
min_base_version 由更新站補成 <主版>.0.0;零 Agent 時報 0.0.0 會被 planPath 濾光。DEV fixture 的 min_base 是 0.0.0,四棒驗收都假綠。教訓:版本路徑類邏輯要拿正式站真資料驗一次。exclude 會蓋掉 vitest 預設排除清單;工作坊在 repo 內開工作區後才會踩到。f2ef9354…),本機是 67ac366f…,正式站也不認 DEV 金鑰。走方案 A:本機起 wrangler dev 模擬更新站(灌正式站 Agent 1.7.4 的真清單與簽章、模擬 R2 放真 .sha256 與佔位包);用本機 DEV 授權中心私鑰簽一張綁本機的身分票(不寫 LC 資料庫),只替換 DEV 授權列的 update_ticket 一欄;.env 加 UPDATE_SITE_URL 與 GUIDANT_RELEASE_KEYS_DIR(後者指 repo 內附公鑰,.env.sample 明載開發機這樣設)。後端 API 與無頭瀏覽器都打通。.env 兩行拿掉(與加入前逐字相同)、wrangler 程序強制結束(一般 kill 沒收掉 npm exec 父程序)、暫存票檔刪除、後端重啟。CM-3819 與母卡 Done。踩到的坑
.env 根本沒有 UPDATE_SITE_URL 行,不是空值;改 .env 前的檢查要分「缺行」與「空值」。update_ticket 是 JSON 信封,payload 為 zlib 壓縮的 base64,不是 armor 格式。/users/me/capabilities 回來;整頁 reload 會掉登入態。npm exec wrangler dev 的父程序不吃 SIGTERM,要對確切 PID 補 SIGKILL。決策者「要收尾了,文件都有做了嗎」。逐類開檔核對,補了五處:
mkdocs build --strict 通過。核對過不用改的:手冊 03 章 3.2、04 章 4.1、快速版第 3 步已是 v2 說法;07 章 7.8「Agent 只從主系統下載」講的是 Agent 升級,屬事實。
踩到的坑
fix_anchor_ids.py 會順手改別人的頁(這次在 FR-190 的 agent-console.md 補一個 id,因為被本案跨頁連結到);spec-site site/ 產物有其他 session 改 md 沒 build 的殘留,只收本案頁面的產物。git add 要用 status --porcelain -z。