# Gateway / Shared Drive 更新後固定驗收操作順序單 > 目的:每次 `update / merge / restart / hotfix` 後,不用重新思考要先驗什麼、後驗什麼。照 **1 → 2 → 3 → 4** 跑,最快確認這次變更有沒有把綁定、長任務、email fallback、shared drive、短下載連結又弄壞。 --- ## 適用情境 以下任一情況直接跑這張,不要靠印象: - `hermes update` - merge upstream / cherry-pick / refactor - gateway / dashboard restart - LINE / Telegram / email / OpenWebUI 交付路徑有改 - managed download / shared drive / attachment / fallback 有改 --- ## Step 1:先看有沒有整片死掉(2~5 分鐘) ### 1-1. process / restart 健康 - [ ] gateway process 有起來 - [ ] dashboard / web server 可回應 - [ ] 沒有 restart loop ### 1-2. 基本介面 - [ ] 管理後台能開 - [ ] 至少一個平台狀態可讀 - [ ] 沒有整片 401 / 403 / 500 ### 1-3. 若這裡失敗 先停,不要直接猜 LINE / email 壞掉。 先翻: - `gateway-recovery-playbook.md` - `gateway-update-restart-sop.md` --- ## Step 2:先跑最小測試集(不要改完才想到) ### 2-1. delivery 最小測試集 ```bash venv/bin/pytest -q \ tests/gateway/test_line_plugin.py \ tests/gateway/test_email.py \ tests/gateway/test_approval_prompt_redaction.py \ tests/gateway/test_display_config.py \ tests/hermes_cli/test_managed_downloads.py ``` - [ ] 全數通過 ### 2-2. binding / governance 最小測試集(有碰綁定/治理時必跑) ```bash venv/bin/pytest -q \ tests/hermes_cli/test_web_verification_admin.py \ tests/gateway/test_principal_profile_routing_phase1.py \ tests/gateway/test_verified_email_handoff_guard_helpers.py ``` - [ ] 全數通過 ### 2-3. py_compile ```bash python -m py_compile \ gateway/run.py \ gateway/config.py \ gateway/authz_mixin.py \ gateway/user_verification.py \ gateway/platforms/base.py \ plugins/platforms/line/adapter.py \ plugins/platforms/email/adapter.py \ hermes_cli/managed_downloads.py \ hermes_cli/web_server.py ``` - [ ] 通過 ### 2-4. shared drive 腳本語法檢查(有碰 shared drive / download 時必跑) ```bash python3 -m py_compile \ ~/.hermes/scripts/shared_drive_index_query.py \ ~/.hermes/scripts/shared_drive_lookup.py \ ~/.hermes/scripts/shared_drive_delivery_bundle.py \ ~/.hermes/scripts/shared_drive_chat_workflow.py \ ~/.hermes/scripts/shared_drive_cleanup.py ``` - [ ] 通過 --- ## Step 3:固定跑 6 個實際 smoke case > 原則:**不能只看測試綠燈**。這 6 個是每次 update 後最容易再炸的 live 路徑。 ### 3-1. 綁定 smoke - [ ] LINE 綁定 email 正確 - [ ] Telegram 綁定 email 正確 - [ ] OpenWebUI / api_server 綁定 email 正確 - [ ] system-initiated handoff 只會寄到 live bound email ### 3-2. LINE 長任務 smoke - [ ] 觸發會超過 pending threshold 的任務 - [ ] 有 pending 流程 - [ ] `查看答案` 在 `PENDING / READY / DELIVERED` 狀態回應正確 - [ ] heartbeat / busy ack 文案不是 raw tool progress ### 3-3. LINE quota fallback → email smoke - [ ] 模擬 LINE 無法交付 - [ ] pending 只寄一次 - [ ] final 真的寄到 verified email - [ ] replay / postback 仍保留「已改寄 email」事實 ### 3-4. Telegram generic document smoke - [ ] 實際交付 `pptx/pdf/docx/xlsx/zip` - [ ] 完成訊息內含 **24h 短下載連結**(`/downloads/s-`) - [ ] 不是只有原生附件 - [ ] 訊息中沒有 `...` / `…` 截斷 token ### 3-5. email generic document smoke - [ ] 實際寄送 `pptx/pdf/docx/xlsx/zip` - [ ] 信內有 **24h 短下載連結** - [ ] 使用正式網域 - [ ] 實際可點開下載 - [ ] 若附件過大,會退成 link-only,不硬塞附件 ### 3-6. shared drive bundle smoke ```bash python3 ~/.hermes/scripts/shared_drive_chat_workflow.py bundle \ --paths /absolute/path/to/file \ --requester dk96@bremen.com.tw --format json ``` - [ ] `download_url` 為短碼型網址(例如 `/downloads/s-`) - [ ] `verification.ok = true` - [ ] generic documents 在 Telegram / email 預設交付短下載連結 - [ ] 敏感檔會自動加密 zip --- ## Step 4:最後用這個格式回報 ```md 更新後固定驗收結果: - 狀態:PASS / FAIL / PARTIAL - 類型:restart / update / merge / hotfix / refactor - 版本/變更: - Step 1 健康檢查:PASS / FAIL - Step 2 測試集:PASS / FAIL / PARTIAL - Step 3-1 綁定:PASS / FAIL - Step 3-2 LINE 長任務:PASS / FAIL - Step 3-3 LINE fallback→email:PASS / FAIL - Step 3-4 Telegram generic-doc 短連結:PASS / FAIL - Step 3-5 email generic-doc 短連結:PASS / FAIL - Step 3-6 shared drive bundle:PASS / FAIL - blocker: - 需追修: - 是否可交付 / 上線:可 / 不可 / 有條件 ``` --- ## 失敗時不要亂猜,直接對照這裡 - 綁定 / principal / email handoff:`gateway-functional-contract.md`、`gateway-recovery-playbook.md` - LINE 長任務 / replay / fallback:`gateway-regression-matrix.md`、`gateway-recovery-playbook.md` - managed download / 短碼下載:`gateway-change-impact-checklist.md`、`tests/hermes_cli/test_managed_downloads.py` - shared drive: - `docs/shared-drive-file-access/shared-drive-file-access-validation-matrix.md` - `docs/shared-drive-file-access/shared-drive-file-access-reply-formats.md` - `docs/shared-drive-file-access/shared-drive-v2-validation-template-full.md` --- ## 一句話版本 > **每次 update 後,先看活著沒 → 再跑最小測試集 → 再跑 6 個固定 smoke → 最後照模板回報。**