# 暫停交接:全項完成與 Bug 修復(2026-09-11) **使用者要求:剩餘使用量約 10%,先整理收尾,等待使用量恢復後再繼續。停止新增工作,不自動擴展下一個實作。全案未完成,也未宣稱零 Bug。** ## 文件入口 - 原始完整範圍:[啟動指令](plan/LAZYBOY_CODING_AGENT_START_HERE_V3.md)、[主計劃](plan/LAZYBOY_AGENT_COMPUTER_IMPLEMENTATION_PLAN_V3.md)、[48 項清單](plan/LAZYBOY_OPTIMIZATION_CHECKLIST_V3.md)。使用者要求 P0~P3 全做,優先於文件原本允許延期的文字。 - [逐項稽核](agent-computer-audit-2026-09-10.md):O01~O48、T01~T64 的證據與缺項。VERIFIED 只涵蓋該列明示範圍,不能推論全案完成。 - [累積實作紀錄](agent-computer-progress.md):每批修改、測試、風險、回滾與接續步驟。 - 本文件為最新暫停入口;舊報告中的早期缺項可能已由後續進度補上,續作時以程式與最新驗證為準。 ## 已實作並取得驗證的範圍 以下是完成的子範圍,不表示對應 O/T 整列全部驗收: | 範圍 | 已有成果 | 主要檔案 | |---|---|---| | 截圖與雙模式 | 截圖交付契約修復、native 不必啟桌面;保留 Team/Dedicated | control/controller.rs、api/computer.rs(均位於 crates) | | Native jobs | Computer root SQLite、PTY、stdin/resize、有界輸出、重連、pidfd 取消、outbox、scope pause 基礎與終態 TTL | crates/supervisor/src/runner_jobs.py;crates/control/src/jobs.rs | | 檔案 | descriptor-relative 操作、binary/range、CAS write/patch/move、原子 journal/receipt/outbox、immutable artifact、歷史讀取與明確恢復 | crates/supervisor/src/computer_files.py、runner_files.py;crates/api/src/file_*.rs | | 重建恢復 | 正式 destroy acknowledgement、簽章退役 proof、真實 Dedicated 重建/Team cold boot/warm reuse,lost reply 不重做/不覆蓋人類修改 | crates/api/src/file_recovery_e2e.rs;scripts/test-runner-jobs.py | | MCP 基礎 | Computer-local HTTP/stdio、受限 archive、per-binding UID、版本 pin、更新/rollback/撤銷、root receipt 與 UI/API | crates/controld/src/mcp_client.rs;crates/supervisor/src/runner_packages.py;crates/api/src/package_transitions.rs | | readiness | Runner/browser/desktop/viewer 分層,真實 X/WM/CDP/WebSocket-RFB;兩 display 七種故障修復與 peer 不受影響 | crates/supervisor/src/runtime_probe.py;image/computer/lazyboy-screen;scripts/test-runtime-gui.py | | GUI 授權發布 | 持久 display epoch、pause 同交易 bump、root 簽章 publication、中央 durable intent/ack/retry、原 owner/Computer authority 核對、過時 backlog 排除 | migrations/039–043;crates/api/src/gui_publications.rs;crates/supervisor/src/runner_gui_fences.py | | GUI routing | act/browser/recording/observe/health 的 target 一致性、非法 display/重複 header 拒絕;實際 controld 39 cases | crates/control/src/screen.rs;crates/controld/src/main.rs;crates/supervisor/src/main.rs;tests/gui-targets.test.py | | Cua 未明結果 | 取消/timeout 保留本地 unresolved、拒絕自動重開 session、未知 outcome 不 delivery retry;本次補 cursor configuration 未明即停 | crates/control/src/cua/client.rs | | 量測 | native shared 60/private 30 樣本與環境記錄 | docs/benchmarks/;scripts/bench-agent-computer.py | ## O01~O48 目前標記 以下逐項保留原稽核狀態;「部分完成」與「未開始」全部仍在使用者要求範圍內。 | ID | 項目 | 優先級 | 狀態 | |---|---|---|---| | O01 | 修正新圖交付 | P0/必做 | 已驗證(限稽核所列範圍) | | O02 | 原生 exec | P1/必做 | 部分完成 | | O03 | 原生 files | P1/必做 | 部分完成 | | O04 | 持續 jobs 與 PTY | P1/必做 | 部分完成 | | O05 | 批次程序/form macro | P1/必做 | 部分完成 | | O06 | 套件/連線常駐 | P1/必做 | 部分完成 | | O07 | 穩定 Runner transport | P2/量測 | 未開始 | | O08 | readiness 分層 | P1/必做 | 部分完成 | | O09 | 按能力路由 | P1/必做 | 部分完成 | | O10 | 工具 schema 按需載入 | P1/必做 | 部分完成 | | O11 | 簡單任務不加 planner | P1/必做 | 已驗證(限稽核所列範圍) | | O12 | 條件等待 | P1/必做 | 部分完成 | | O13 | DOM snapshot 限量與增量 | P2/量測 | 未開始 | | O14 | agent 圖片和 viewer 串流分離 | P1/必做 | 已驗證(限稽核所列範圍) | | O15 | 既有 browser/session 穩定 attach | P1/必做 | 部分完成 | | O16 | 驗證、有限恢復與模型升級 | P1/必做 | 部分完成 | | O17 | Xvfb+x11vnc → TigerVNC Xvnc | P2/必做候選測試 | 部分完成 | | O18 | Xvfb+x0vncserver 備選 | P3/保留替代 | 未開始 | | O19 | 檢查 -noxdamage | P2/對照 | 未開始 | | O20 | noVNC/websockify 與畫質檔 | P2/調校 | 部分完成 | | O21 | 精簡桌面而非先換 OS | P2/調校 | 已驗證(限稽核所列範圍) | | O22 | Selkies 替代 viewer | P3/可選 | 未開始 | | O23 | Xpra 替代 viewer | P3/可選 | 未開始 | | O24 | Wayland/全面換桌面 | P3/延後 | 未開始 | | O25 | 雙模式正式保留 | P0/必做 | 部分完成 | | O26 | 按 display/檔案/account 鎖 | P1/必做 | 部分完成 | | O27 | scope-aware pause | P1/必做 | 部分完成 | | O28 | 共享 lifecycle/single-flight | P1/必做 | 部分完成 | | O29 | 程式共享與帳號授權分離 | P0/必做 | 部分完成 | | O30 | 公平排程與總配額 | P1/必做 | 部分完成 | | O31 | Chromium /dev/shm 與程序回收 | P2/量測 | 未開始 | | O32 | X11/DBus/profile 權限與 session | P1/必做 | 部分完成 | | O33 | Tool Manager 安裝入口 | P1/必做 | 部分完成 | | O34 | 來源版本與完整性 | P1/必做 | 部分完成 | | O35 | 安裝/啟動/認證/授權分開 | P1/必做 | 部分完成 | | O36 | 熱啟用與 registry 更新 | P1/必做 | 部分完成 | | O37 | 版本更新/回滾/移除 | P1/必做 | 部分完成 | | O38 | OAuth/token broker | P1/必做 | 未開始 | | O39 | Outlook Graph 外掛 | P1/必做驗收 | 部分完成 | | O40 | Outlook 批次/增量同步 | P1/P2 | 部分完成 | | O41 | operation journal/outbox | P0/P1 | 部分完成 | | O42 | 活動紀錄串流而非桌面演出 | P1/必做 | 部分完成 | | O43 | artifact 存 Computer+脫敏 | P1/必做 | 部分完成 | | O44 | Task 驗證與郵件分類品質 | P1/必做 | 部分完成 | | O45 | 衝突與冪等/未知效果 | P1/必做 | 部分完成 | | O46 | 部件健康與版本相容矩陣 | P1/P2 | 部分完成 | | O47 | 已驗證 skill/流程重用 | P2/後續 | 未開始 | | O48 | 端到端+viewer 雙 benchmark | P1/必做 | 部分完成 | ## 尚待完成的實作與驗收 1. **GUI 執行邊界**:實際 executor 接 root durable admission、整個 operation deadline/可信 quiescence、未知結果可信恢復;pause/takeover 等待 root acknowledgement。現在 publication/store 已有,實際 GUI 操作尚未全接入。 2. **服務與 OS 隔離**:controld/Cua 的可信身分和 credential 通道、boot/service/X session epoch;任意同 UID shell 仍可繞過 GUI 路徑,需實際 namespaces/cgroup/fs/network/syscall/process-tree 保護。不可把 HTTP 200/CLI exit 當可信 GUI 完成。 3. **所有輸入同一授權**:Cua、DOM、人類 noVNC input/clipboard/resize、profile 排他、inode/symlink alias、stale refs、AT-SPI 語意恢复與整台 Computer barrier。 4. **Native/files/artifacts 補齊**:完整 signal/cancel race 與 API restart;其餘寫入路徑接 journal;大附件 upload/download 全串流、所有工具輸出 artifact、完整 quota/retention/GC、大量歷史首次掃描公平性。 5. **資源協調**:per-agent/Computer 的 CPU/RAM/disk/requests 配額與公平排程;完整 lifecycle 活性聚合及壓測。 6. **Tool Manager 完整契約**:完整 V1/nested manifest、catalog/受控 URL/上傳、審核 hooks/deps、真實第三方 MCP、常駐 pool/legacy SSE、registry/grant 熱更新與活動 run 撤銷。 7. **OAuth/郵件**:受保護 token broker、refresh single-flight、Google/Microsoft 安裝型 adapter、fake HTTP 分頁/429/Graph 20 batch/delta/ImmutableId、unknown readback/conflict-aware undo、分類品質資料集。真實外部 OAuth 帳號可另列 BLOCKED_EXTERNAL,不能因此跳過本地實作與 fixtures。 8. **執行策略**:完整 capability dispatcher、verifier/milestone、有限恢復/模型升級、form macro 每步 checks、event wait、增量 DOM revision/ref invalidation、已驗證流程重用。 9. **P2/P3 顯示替代與量測**:UDS/HTTP transport 分解;TigerVNC 建置與對照、x0vncserver、XDamage、noVNC FPS/壓縮/延遲、桌面 autostart、Selkies、Xpra、Wayland 可選實作與實測、Chromium shm/OOM。仍保留原 X11 rollback。 10. **完整 E2E/benchmark**:公開 login/model/run→Computer→GUI/viewer 全流程、雙模式所有 T01–T64 故障條件、冷暖各 30 次的完整模型/工具/queue/snapshot/viewer/CPU/RAM/可讀性量測。現有 native benchmark 不等於完成此項。 ## 暫停時工作樹與續作規則 - 工作目錄 `/root/lazyBoy`,HEAD `80fe9a8`;大量累積修改及未追蹤檔案尚未提交。保留整個工作目錄,**不要 reset/clean 或只保留 tracked diff**。未部署、未推送,未動正式 migration/使用者資料。 - migration 024~043 是累積變更的一部分;SQLx 測試使用 disposable PostgreSQL,不代表正式資料庫已升級。 - 目前測試資料庫:`postgres://lazyboy:lazyboy@127.0.0.1:5434/lazyboy`,容器 `lazyboy-test-pg`。Computer fixture image `lazyboy/computer:local`,controld fixture `lazyboy/controld:plan-test`。 - 續作先讀本文件、progress 最後兩節與 audit,再確認 git status、既有程序與測試結果。未收到使用者恢復指令前,不新增實作或啟動整批測試。 - 恢復後第一個主要工作:設計並接好可信 root GUI executor 邊界(見待辦 1~3),不要把目前 instance 記憶體 guard 說成 durable 完成。再依主計劃 DAG 收斂其餘全部項目。 - 常用驗證:`cargo test -p lazyboy-control -p lazyboy-controld`;`CARGO_INCREMENTAL=0 cargo clippy -p lazyboy-control -p lazyboy-controld --all-targets -- -D warnings`;`DATABASE_URL=postgres://lazyboy:lazyboy@127.0.0.1:5434/lazyboy python3 scripts/test-runner-jobs.py`。 - controld/control runtime 改動後完整 gate 必須重建 fixture binary;不可用 host glibc binary 取代 Bookworm image 內 binary。僅在 runtime 完全未變時才考慮 `LAZYBOY_TEST_MCP_IMAGE` 重用。 ## 本次收尾驗證 - 最終 Control **165 passed**、controld **2 passed**,`/tmp/lazyboy-cua-motion-tests-final.log`。 - 最終 affected all-targets Clippy `-D warnings` 通過,`/tmp/lazyboy-cua-motion-clippy-final.log`;最初 collapsible-if 已修正並重新驗證。 - 完整 Runner gate 通過,`/tmp/lazyboy-cua-motion-gate.log`,包含實際 controld 39 個 target 案例、Supervisor HTTP 4.19 秒、API 真實恢復整合 26.82 秒、native/files/MCP/publication retry 與重建回歸。 - gate 的 Bookworm runtime snapshot 在純語法 let-chain 整理前建置;語意相同,最終 host 測試及 Clippy 覆蓋整理後 source。 - 本次 fixture prefix `lazyboy-plan-runner-test-811691d312ee`;自有容器與 network 已清除。既有測試 PostgreSQL/base images 保留,不刪使用者或其他資料。 - 本次所有測試程序已結束,沒有待接手的測試 handle。`git diff --check` 通過。測試日誌位於 `/tmp`,可能隨環境清理消失;本文件保留結果摘要。 - **已依使用者要求暫停;等使用者明確恢復後再開工。**