jim800121chen 8cd5751ce3 feat(local-tool): M8 重構 — Wails 控制台 + 瀏覽器 Web UI(R5 決策)
依 R5 五輪決策把 visionA-local 從「Wails 內嵌 Next.js」重構為「Wails
本機伺服器控制台 + 瀏覽器 Web UI」模式(類比 Docker Desktop / Ollama)。

程式碼變動
  - M8-1 砍 yt-dlp 全套(後端 resolver / URL handler / 前端 URL tab /
    Makefile vendor / installer / bootstrap / CI workflow,-555 行)
  - M8-2 砍 Mock 模式全套(driver/mock、mock_camera、Settings runtimeMode、
    VISIONA_MOCK 環境變數,-528 行)
  - M8-3 ffmpeg 從 GPL 切換到 LGPL 混合方案:Windows/Linux 用 BtbN 現成
    LGPL binary,macOS 自 build minimal decoder-only 進 git
    (vendor/ffmpeg/macos/ffmpeg 5.7MB + ffprobe 5.6MB,比 GPL 版省 85% 空間)
  - M8-4 Wails Server Controller:state machine、log ring buffer 2000 行、
    preferences.json atomic write、boot-id、Gin SkipPaths、shutdown 7+1 秒、
    notify_*.go 三平台 OS 通知、watchServer 改 Error state 不 os.Exit
  - M8-4b 啟動階段管線 R5-E:6 階段進度 event、20s soft / 60s hard timeout、
    stage 5/6 skip 規則、sentinel file、RestartStartupSequence 5 步驟
  - M8-5 Wails 控制台 vanilla HTML/JS/CSS(9 檔 ~2012 行)取代 M7-B splash:
    state 視覺、log panel、startup progress panel、Stage 6 manual CTA
    pulse、shutdown modal、Settings、Dark Mode、i18n 中英雙語
  - M8-6 上傳影片副檔名擴充(mp4/avi/mov/mpeg/mpg)
  - M8-7 Web UI Server Offline Overlay(role=alertdialog + focus trap +
    wsEverConnected 容錯 + Page Visibility)
  - M8-8 CORS middleware(127.0.0.1/localhost only + suffix attack 防護)+
    ws/origin.go 獨立 WebSocket CheckOrigin 避 package cycle
  - MAJ-4 server:shutdown-imminent WebSocket broadcast 機制
    (/ws/system endpoint + notifyShutdownImminent helper)
  - M8-9 Boot-ID + 瀏覽器 tab 自動重連(sessionStorage loop guard)

品質
  - ~105+ 新 unit test + race detector (-count=2) 全綠
  - 10 個 milestone 全部通過 Reviewer 審查
  - 三方 v2 + v2.1 文件(PRD / Design Spec / TDD)+ 交叉互審紀錄
    收錄在 .autoflow/

交付前待處理(M8-10)
  - 重跑 make payload-macos 把舊 GPL 77MB binary 換成新 LGPL
  - 三平台 end-to-end build 驗證

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 17:57:54 +08:00

43 KiB
Raw Permalink Blame History

visionA-local — 產品需求文件PRD v2

版本:v2.12026-04-14 作者PM Agent 任務等級L 級(重構方向變更) 狀態:v2.1 補丁:吸收 R5-D1/D2/D3 + R5-E + Design 交叉審閱 4 Major / 4 Minor 前版:PRD-v2.md v2.02026-04-14/ PRD.md v1.22026-04-11


0. v2 變更摘要(和 v1.2 的差異)

本版本因應 2026-04-14 使用者提出的三項重大方向變更(介面架構、影片來源、模型管理),基於 R5 第五輪決策重新定位產品。本文件採「只更新受影響章節」策略,未影響的章節以「同 v1.2」標註並指向原子檔。

最關鍵 5 點差異:

  1. 產品定位轉向從「Wails 桌面 app 內嵌 Next.js UI」改為「本機服務Wails 控制台)+ 網頁控制台(瀏覽器 Web UI競品類比從 Photo Booth 換成 Ollama / LM Studio / Docker Desktop / Stable Diffusion WebUIR5-1
  2. 砍 Mock 模式:完全刪除,沒插硬體就讓 UI 空白R5-5a。Persona P3 Solution Architect 的使用情境被迫降級US-2 整條砍掉。
  3. 砍 yt-dlp 全套 + URL 影片推論:媒體上傳只剩 camera / image / upload 影片(.mp4 / .avi / .mov / .mpeg / .mpg)。砍 35MB vendor binary。
  4. ffmpeg 授權從 GPL blocker 升級為 LGPL 方案 B 混合Windows/Linux 用 BtbN LGPL binarymacOS 自 build decoder-only~20MBcommit 到 repoR5-6 / R5-6a / R5-6b / R5-6c
  5. 啟動時自動開瀏覽器(每次啟動)Wails 控制台 server 就緒後每次啟動都自動開系統預設瀏覽器Settings 可關R5-4 / R5-D3。平台預設macOS / Windows ONLinux OFFxdg-open 在極簡 WM 行為不穩R5-D2。用於抵消「多一步摩擦」對北極星指標的傷害。

v2.1 補丁摘要(相對 v2.0

v2.1 為 Design 交叉審閱發回的小版本修正Major 13 + 4 個 Minor+ R5-D / R5-E 決策落地,未改動產品定位與核心決策,只補齊語意與驗收標準。

變更 內容 依據
M1 「首次啟動自動開」→「每次啟動自動開」(全文 replace R5-D3
M2 auto-open 平台預設差異macOS / Windows ONLinux OFF R5-D2
M3 US-7 Server 崩潰時 除控制台 banner 外仍發 OS 原生通知 R5-D1
M4 auto-open toggle 住 Wails 控制台Design 仲裁採 PRD 原案) Design review §G Major 4
R5-E 大改 AC-1.3 從「10 秒硬指標」翻轉為「60 秒 + 階段化進度 + perceived performance」 R5-E1E6
Minor 1 US-2 明確:日常啟動(非首次)同樣 auto-open Design review Minor 1
Minor 2 Offline Overlay 硬阻斷(role="alertdialog" + focus trap + 不可關閉 + 純色卡片) Design Spec v2 server-offline-overlay.md
Minor 3 Wails 控制台 Footer 持久警示取代單次 confirm / Error state 三動作按鈕Restart / View log / Report Design Spec v2 control-panel.md
Minor 4 First-Run wizard 從 3 步縮為 2 步(砍模式選擇),無硬體可按「稍後再設定」 Design Spec v2 first-run-update.md / R5-5a

行數目標v2.1 新增約 40 行、精簡約 20 行,總量仍 ≤ 500 行。

保留 vs 重寫對照表:

章節 子檔 v2 處理
1. 產品策略與定位 strategy.md 🔴 重寫(見本檔 §1
2. 目標使用者與情境 user-research.md 🔴 重寫 US見本檔 §2 / §5
3. 產品願景與非目標 vision-and-non-goals.md 🟡 修訂(見本檔 §3
4. 功能清單與 API 對照 features/feature-inventory.md 🔴 大幅修訂(見本檔 §4
5. 使用者流程 features/user-flows.md 🔴 重寫(見本檔 §5
6. 非功能需求與驗收 nonfunctional.md 🟡 修訂(見本檔 §6
7. 發佈與交付策略 release-strategy.md 🟢 同 v1.2(安裝檔數字需更新見 §6
8. 風險與相依性 risks.md 🔴 大幅修訂(見本檔 §8
4.8 第三方授權 feature-inventory.md §4.8 🔴 改寫(見本檔 §7

1. 產品策略與定位(重寫)

1.1 新定位

visionA-local 是一個本機服務 + 網頁控制台架構的 Kneron AI 邊緣推論工具:

  • Wails 桌面 app = 本機 server 控制台類比Docker Desktop 的 Dashboard、Ollama 的 tray app只負責 server 生命週期、log、版本資訊。
  • 瀏覽器 Web UI = 真正的工作區類比Stable Diffusion WebUI、LM Studio 的 web mode所有「選裝置、選模型、推論」在瀏覽器完成。
  • 兩者只在本機、只綁 127.0.0.1、不做 LAN、不做背景 daemonR5-1 / R5-2

1.2 一句話價值主張

「雙擊 app → 自動開瀏覽器 → 插 USB → 5 分鐘內跑第一次推論。熟悉的瀏覽器操作、熟悉的 devtools離線可用、零依賴。」

1.3 競品類比更新

v1.2 類比 v2.0 類比
Photo Booth、Kneron 官方 demo app Ollamaserver + web UI / CLIDocker Desktop(桌面 app 管 daemon、Dashboard 管操作)、LM Studio(桌面 app + server 模式)、Stable Diffusion WebUI(點 bat → 瀏覽器打開 127.0.0.1

1.4 北極星指標(更新)

v1.2 原指標:內部 FAE 在客戶現場首次安裝後 5 分鐘內順利跑出第一次推論的比例 ≥ 95%。

v2.0 新指標(處理「多一步開瀏覽器」紅線):

內部 FAE 在客戶現場首次安裝後 5 分鐘內,瀏覽器 Web UI 跑出第一次推論的比例 ≥ 95%。 起點雙擊安裝檔終點瀏覽器顯示第一幀推論結果。自動開瀏覽器R5-4 / R5-D3是必要條件 — 使用者不需手動點「Open in Browser」除非關過 Settings。比 v1.2 更嚴格(把瀏覽器冷啟動也納入 5 分鐘)。

1.5 策略取捨紀錄

  • 砍 Mock 模式的代價R5-5aP3 Persona Sam 的「零摩擦 demo」情境無法再被支援使用者明確接受此取捨P3 實質降級為非目標§2
  • 雙視窗的代價Wails 控制台 + 瀏覽器比 v1.2 單視窗多一層「誰是主角」的心智負擔。緩解:控制台 UI 極簡4 按鈕 + 1 log panel所有業務操作裝置、模型、Settings > 語言)強制住瀏覽器。

2. 目標使用者(修訂)

2.1 Persona 變動

  • P1 — Arthur內部 FAE:同 v1.2。核心使用情境「帶筆電到客戶現場跑 demo」在 v2.0 下多一步自動開瀏覽器,但 R5-4 / R5-D3 決定每次啟動都自動開,對 Arthur 幾乎無感。
  • P2 — Dora外部開發者:同 v1.2。她會欣賞「瀏覽器 devtools」R5-1 動機 B這是 v2.0 相對於 v1.2 的潛在加分項。
  • P3 — SamSolution Architect / PM實質降級為非目標使用者。R5-5a 砍 Mock 模式後Sam「沒硬體也能 demo」的訴求無法被滿足。保留 Persona 定義只是為了文件完整性,不再為他優化任何 MVP 功能。若未來要重新支援 Sam應提 L 級功能重新討論。

2.2 Persona 對新架構的反應PM 預測)

Persona 對「Wails 控制台 + 瀏覽器」的反應 對「砍 Mock」的反應
P1 Arthur 🟡 中性偏好(第一次會愣一下,但每次啟動自動開瀏覽器大幅緩解) 無感(他本來就帶硬體)
P2 Dora 正面(瀏覽器 devtools 正中下懷) 無感(她本來就在評估自家硬體)
P3 Sam 🟡 中性(多一步開瀏覽器) 🔴 負面(他本來就沒硬體)

3. 非目標補充(修訂)

相對於 v1.2 vision-and-non-goals.mdv2.0 明確新增以下非目標

  • Mock 模式 / 假資料 / 假裝置R5-5a。沒插硬體就讓 UI 空白。
  • 影片 URL 推論 / yt-dlp / YouTube / Vimeo / Dailymotion 整合R5 共識 2
  • Model Zoo / 遠端模型下載R5 共識 9同 v1.2 但再次確認)。
  • LAN / 區網分享 localhostR5-1使用者明確放棄動機 C/F
  • 背景 daemon / tray 常駐R5-3 維持砍 trayR5-2 維持視窗關閉=結束 server
  • 雙 Next.js build(共識 5Wails 控制台用 vanilla HTML/JS/CSS不搞兩份前端

保留的非目標(同 v1.2cluster、relay、tunnel、auto-update、程式碼簽章、telemetry、韌體燒錄、多架構、商店上架、license 啟用機制、WCAG 2.2 AA 正式合規。


4. 功能清單與 API 對照(大幅修訂)

本節列出相對於 v1.2 的變動。v2.0 完整的功能清單後續由 PM Agent 同步更新到 features/feature-inventory.md 子檔。

4.1 保留(沿用 v1.2

  • Device scan / connectGET /api/devicesPOST /api/devices/scanPOST /api/devices/:id/connect|disconnectPOST /api/devices/:id/inference/start|stop
  • 模型管理8 個預設 .nef + 使用者上傳(GET /api/modelsPOST /api/models/uploadDELETE /api/models/:idGET /api/models/:id/download
  • 批次影像上傳(POST /api/media/upload/batchR5 共識 10
  • 推論引擎camera / image / 上傳影片
  • MJPEG 串流(GET /api/camera/:id/stream
  • WebSocket 推論結果 stream/ws/devices/*/ws/server-logs
  • 系統 APIGET /api/system/health|info|deps|metricsPOST /api/system/restart
  • i18n 中英雙語(住瀏覽器 Web UI
  • Dark Mode 跟隨系統(住瀏覽器 Web UIprefers-color-scheme
  • Log 檔案持久化macOS~/Library/Application Support/visiona-local/logs/

4.2 砍除v2.0 明確刪除)

# 項目 理由 R5 依據
1 POST /api/media/url endpoint 砍 URL 推論 R5 共識 2
2 server/internal/media/url_handler.go(或類似檔案) 同上 R5 共識 2
3 yt-dlp 內嵌35MB binary + vendor/ytdlp/ + installer/payload-* 相關 stage 砍 URL 推論 R5 共識 2
4 前端「URL 貼上」tab、source-selector 中的 URL 選項 砍 URL 推論 R5 共識 2 / R5 共識 4
5 Mock 模式全部Mock 裝置資料、Mock 推論結果 mock、Mock mode 切換按鈕、Mock 視覺標記、server/internal/mock/(若存在)、前端 Mock 入口 使用者明確砍 R5-5a
6 Wails webview 載入 Next.js 前端的路由(原 server/web/out 不再被 Wails 直接 serve 作為主要 UI 轉為 server 控制台 R5-1
7 Wails tray 相關(維持 v1.2 Q-A 決策) 沒意義 R5-3
8 First-Run 流程中的「模式選擇(真實 / Mock」畫面 Mock 砍了 R5-5a
9 v1.2 US-2Mock 模式試玩)整條 user story Mock 砍了 R5-5a

4.3 新增v2.0 明確增加)

# 項目 描述 R5 依據
N1 Wails 控制台 UI vanilla HTML/JS/CSS 的獨立桌面視窗。包含Start / Stop / Restart Server 按鈕、Open in Browser 按鈕、Server 狀態指示running / stopped / error、Server port 號、資料目錄路徑、版本號、Clear log 按鈕、Log panel自動捲動 + 手動捲動解鎖、Settings menu含 auto-open toggle見 N2Footer 持久警示:右下角固定顯示 ⚠ 關閉此視窗會停止 Local Server12 px muted隨時可見取代單次 confirm dialog 作為主要提醒)。Error state 面板(對應 N6log panel 上方浮動 banner 含三個動作按鈕 Restart Server / View log / Report issue(見 Design Spec v2 v2/control-panel.md §5)。不含裝置管理、推論、模型、Settings > 語言等任何業務操作。 R5-1 / R5-5 / Design review Minor 3
N2 啟動時自動開瀏覽器(每次啟動) Wails 控制台啟動、server 就緒後,每次啟動都自動開系統預設瀏覽器到 http://127.0.0.1:{port}不是只在首次R5-D3auto-open toggle 住 Wails 控制台 的 Settings menu讀取時機在 Wails main.go 啟動階段Web UI 尚未 load已與 Design 取得共識採此位置)。平台預設macOS / Windows autoOpenBrowser = trueLinux autoOpenBrowser = false(因 xdg-open 在極簡 WM 行為不穩定R5-D2。使用者可隨時切換。 R5-4 / R5-D2 / R5-D3
N3 Web UI Server Offline Overlay 瀏覽器 Web UI 偵測 server 斷線heartbeat / WebSocket 斷)時,顯示全螢幕半透明 backdroprgba(0,0,0,0.4-0.5)+ 置中純色卡片(卡片本體不是半透明,以確保 WCAG 4.5:1 對比。卡片內訊息「Local Server 已離線」+「請回到 visionA-local 桌面視窗重新啟動 Server」+「重試連線」Primary 按鈕 +「了解更多 ↓」Ghost 按鈕。A11y 硬阻斷特性role="alertdialog" + aria-modal="true" + focus trap + 不可由使用者手動關閉(無 ✕ 按鈕,只能 retry 成功或使用者自行 ⌘W / Ctrl+W 關 tab / 重開 app 後自動恢復)。覆蓋層下方 UI 凍結不可操作。 R5-2 / Design review Minor 2
N4 server boot-id 機制 Go server 啟動時產生 UUID boot-id放進 /api/system/info 回應。瀏覽器 Web UI 連上後記下第一個 boot-id後續 poll 發現 boot-id 變了就代表 server 重啟,前端自動 reload state。Restart Server 按鈕(住 Wails 控制台)依賴此機制讓瀏覽器 tab 不用手動重載。 R5 共識 14
N5 CORS 中介層 Go server 加 CORS middlewareAccess-Control-Allow-Origin 只允許 http://127.0.0.1:* / http://localhost:*,其他 origin 一律拒絕。 R5 共識 6
N6 watchServer() 改為 Error state v1.2 watchServer 連續 3 次健檢失敗會 os.Exit(1)v2.0 改為把 Wails 控制台的 Server 狀態切為「Error」並在 log panel 顯示錯誤,不強制退出 app。Error state 面板同時顯示三個動作按鈕(見 N1 R5 共識 8
N7 Server 崩潰 OS 原生通知 watchServer() 偵測連續 3 次健檢失敗進入 Error state 時,除了控制台 Error banner 外,同步發一次 OS 原生通知macOS Notification Center / Windows Toast / Linux libnotify)。使用者可能正在使用瀏覽器 tab靠 OS 通知把他拉回控制台。去重策略(避免 Error 狀態期間重複發通知)由 Architect 在 TDD v2 決定。 R5-D1
N8 啟動階段化進度顯示6 階段) Wails 控制台在啟動過程全程顯示階段化進度:1. 初始化控制台 → 2. 檢查 Python → 3. 啟動 server → 4. 偵測裝置 → 5. 開瀏覽器 → 6. 瀏覽器就緒。每階段有編號 + 使用者可理解的動作描述 + 視覺回饋spinner / 進度條)+ 中英雙語文案。第 6 階段「ready」的偵測訊號 = Web UI 透過 WebSocket hub 建立第一個 client 連線(不做新 endpointR5-E6。階段文案由 Design Agent 最終決定R5-E5。啟動總預算見 §6.1 AC-1.3 系列。 R5-E1E6

4.4 功能對 Persona 對照表(更新)

功能 對應 Persona 住哪裡
Wails 控制台Start/Stop/Restart/Log P1, P2 Wails 桌面視窗
Device scan / connect P1, P2 瀏覽器 Web UI
模型管理 P1, P2 瀏覽器 Web UI
Workspace推論 P1, P2 瀏覽器 Web UI
Settings > 語言 / 深色模式 P1, P2 瀏覽器 Web UI
Settings > 自動開瀏覽器 P1, P2 Wails 控制台(因為它控制的是 Wails 啟動行為)
Server Offline Overlay 全體 瀏覽器 Web UI
Mock 模式 P3

5. User Stories重寫受影響的

US-1第一次安裝 → 首次看到推論 UI重寫,取代 v1.2 US-1 + 部分 US-5

身份:任意目標 Persona主力 P1 Arthur 情境:剛拿到 .dmg / .exe / .AppImage,全新機器、客戶現場 敘述

身為 FAE我希望雙擊安裝檔、按幾下「下一步」、等進度條跑完視窗自動打開Wails 控制台)、瀏覽器自動打開Web UI插上 Kneron USB 後瀏覽器立刻顯示裝置我按一下「Start」就看到第一幀推論結果。整個流程不超過 5 分鐘。

驗收標準

  • AC-1.1:下載安裝檔,無 terminal 操作可完成安裝(同 v1.2
  • AC-1.2:整個安裝過程 ≤ 3 分鐘(目標)/ ≤ 5 分鐘(上限)(同 v1.2R4-4
  • AC-1.3R5-E 改寫):安裝完成後首次啟動,從 Wails 控制台視窗出現到瀏覽器 Web UI 顯示第一幀,全程 ≤ 60 秒R5-E1原 10 秒硬指標取消)。啟動過程全程可見、不可出現白畫面或無回饋狀態 — 採 Nielsen Norman perceived performance 原則,使用者感覺進度在推進比硬時間指標重要
  • AC-1.3a(新)啟動全程顯示階段化進度6 階段,見 §4 N8每階段有編號 + 使用者可理解的動作描述 + 視覺回饋spinner 或進度條)+ 中英雙語文案。階段文案由 Design Agent 決定R5-E2 / R5-E5
  • AC-1.3b(新):任一啟動階段卡超過 20 秒UI 必須顯示「正在重試」或「這步比預期久」類提示,不可停留在白畫面或無變化狀態R5-E3
  • AC-1.3c(新):總啟動時間超過 60 秒仍未進入「就緒」狀態Wails 控制台進入 Error state顯示「Restart Server」「View log」「Report issue」三個動作按鈕對應 §4 N1 / N6與 watchServer 3 次失敗後行為一致R5-E4
  • AC-1.3d(新):「瀏覽器就緒」的定義 = Web UI 建立 WebSocket 連線到 serverhub 收到第一個 client不是瀏覽器視窗出現時。不做新 endpoint、不做固定延遲R5-E6
  • AC-1.4:瀏覽器 Web UI 首次顯示時,若沒插硬體Dashboard 顯示空白狀態 + 「請插入 Kneron 裝置」提示文字R5-5a不是 Mock 資料)。First-Run wizard 從 v1.2 的 3 步縮為 2 步砍模式選擇R5-5aStep 1 歡迎 → Step 2 硬體偵測。Step 2 在無硬體情況下可按 稍後再設定 略過,直接進 Dashboard 空白狀態Design review Minor 4
  • AC-1.5Mac 第一次開啟若出現 Gatekeeper 警告Wails 控制台和安裝說明頁提供「右鍵 → 開啟」引導(同 v1.2
  • AC-1.6auto-open 可在 Wails 控制台的 Settings menu 切換(不在 Web UI Settings見 §4 N2平台預設macOS / Windows ONLinux OFFR5-D2。關閉後下次啟動只開 Wails 控制台、不開瀏覽器使用者可手動按「Open in Browser」

US-2日常啟動新增,取代 v1.2 US-2 Mock

身份P1, P2 情境:第二次以後的日常啟動(非首次安裝,但「啟動時自動開」對首次 / 日常同樣生效R5-D3 敘述

身為日常使用者,我希望雙擊 app icon 後Wails 控制台和瀏覽器都自動開啟(除非我關過 auto-openserver 狀態顯示 running瀏覽器顯示上次的 Dashboard 狀態。

驗收標準

  • AC-2.1:日常啟動時,若 Wails 控制台 Settings autoOpenBrowser === true仍會自動開瀏覽器和首次啟動行為一致R5-D3 / Design review Minor 1。AC-1.3 系列的 60 秒預算與階段化進度在日常啟動同樣生效(通常遠低於 60 秒)
  • AC-2.2:瀏覽器 Web UI 保留上次的 i18n 語言偏好、深色模式偏好
  • AC-2.3:若使用者關過 auto-open或 Linux 平台預設 OFF 且使用者未手動開),啟動時只開 Wails 控制台使用者可點「Open in Browser」手動開

US-3連實體 Kneron 裝置(微調

身份P1, P2 敘述:同 v1.2,但 UI 住瀏覽器 驗收標準

  • AC-3.1 ~ AC-3.6:同 v1.2(插 USB → 3 秒內瀏覽器 Devices 頁顯示裝置)
  • AC-3.7):若使用者關閉瀏覽器但 Wails 控制台還在server 仍跑),插入 USB 的事件不會通知使用者(不做 toast下次使用者打開瀏覽器會看到裝置。不發原生 OS 通知(維持 v1.2 R4-8 OS 通知策略)。

US-4切換 / 上傳模型(微調

身份P1, P2 敘述:同 v1.2,但 UI 住瀏覽器 驗收標準

  • AC-4.1 ~ AC-4.4:同 v1.2
  • AC-4.5):拖放 .nef 只在瀏覽器視窗內有效,拖到 Wails 控制台視窗無反應(不處理跨視窗拖放,避免混淆)
  • AC-4.6):預設模型清單維持 8 個 .nef,使用者可上傳自己的 .nef沒有任何 Model Zoo / URL download 入口R5 共識 9

US-5跑即時攝影機推論重寫,瀏覽器情境

身份P1 敘述

身為 FAE我希望在瀏覽器 Workspace 頁選一顆 webcam、選一個模型、按 Start看到 MJPEG 即時串流和推論 overlay。

驗收標準

  • AC-5.1Workspace 頁能列出所有可用 webcam透過後端 /api/camera,而非瀏覽器 navigator.mediaDevices;這點對 Chrome / Edge / Safari 行為一致)
  • AC-5.2:選 webcam + 模型後按 Start≤ 3 秒看到第一幀
  • AC-5.3:推論 overlay方框 / 標籤 / 信心度)正確顯示
  • AC-5.4:即時 FPS / 延遲 / CPU / RAM 顯示
  • AC-5.5:按 Stop 即時停止
  • AC-5.6不使用瀏覽器 getUserMedia() API避開 Chrome/Edge/Safari 權限差異 + HTTPS 限制)。所有攝影機存取走後端 AVFoundation / DirectShow / V4L2 pipeline和 v1.2 架構相同)

US-6上傳影片推論修訂,取代 v1.2 US-7 / US-8

身份P1, P2 敘述

身為使用者,我希望能把一段 .mp4 / .avi / .mov / .mpeg / .mpg 影片拖進瀏覽器 Workspace跑離線推論、看到逐幀結果。

驗收標準

  • AC-6.1:瀏覽器 Workspace 頁支援拖放或 file picker 上傳影片
  • AC-6.2:支援副檔名:.mp4 / .avi / .mov / .mpeg / .mpgR5 共識 11
  • AC-6.3:上傳後後端走 ffmpeg decode → Kneron 推論 → 前端顯示結果
  • AC-6.4不支援 URL 推論 / YouTube / Vimeo / DailymotionR5 共識 2

US-7Server 崩潰 / 意外中斷(新增

身份P1, P2 情境Go server 子程序因某種原因崩潰OOM、panic、依賴錯誤或使用者關閉 Wails 視窗 敘述

身為使用者,我希望當 server 斷線時我在瀏覽器看到清楚的「Local Server 已離線」訊息,而不是無聲的網頁卡住。我也希望 Wails 控制台能告訴我發生什麼、我能按 Restart 重啟。

驗收標準

  • AC-7.1:瀏覽器 Web UI 偵測 server 斷線health check 失敗 or WebSocket 斷 + retry 失敗)→ 顯示全螢幕 Server Offline OverlayR5-2 / N3Overlay 無 ✕ 按鈕、不可手動關閉role="alertdialog" + focus trapDesign review Minor 2
  • AC-7.2Overlay 卡片內訊息「Local Server 已離線,請回到 visionA-local 桌面視窗重新啟動 Server」+「重試連線」Primary 按鈕 +「了解更多 ↓」Ghost 按鈕。卡片背景純色(非 backdrop 半透明),確保 WCAG 4.5:1 對比
  • AC-7.3Wails 控制台 Server 狀態顯示變為「Error」紅色log panel 上方浮現 Error banner 面板,含 三個動作按鈕Restart Server / View log / Report issue(對應 §4 N1 / N6Design Spec v2 v2/control-panel.md §5Design review Minor 3
  • AC-7.4:使用者在 Wails 控制台按 Restart Server 後server 重啟、取得新 boot-id瀏覽器 Web UI 透過 Retry 重連、偵測到新 boot-id、自動 reload stateR5 共識 14 / N4
  • AC-7.5:使用者直接關閉 Wails 視窗 → server 結束R5-2 維持 v1.2 Q7→ 瀏覽器 Web UI 顯示相同的 Offline Overlay + 提示「請重新啟動 visionA-local」
  • AC-7.6:為避免使用者誤解「關閉視窗 = 程式還在背景跑」,雙保險警示(a) Wails 控制台 Footer 右下角持久警示文字 ⚠ 關閉此視窗會停止 Local Server12 px muted始終可見§4 N1(b) 標題列 / menu bar 的「Close」按鈕 tooltip / confirm dialog 同樣寫明。(a) 是主要手段(避免使用者盲目點 confirm(b) 為輔
  • AC-7.7R5-D1 新)Server 崩潰事件watchServer 連續 3 次失敗進入 Error state 的瞬間),除控制台 Error banner 外,同步發一次 OS 原生通知macOS Notification Center / Windows Toast / Linux libnotify)。使用者可能正在使用瀏覽器 tab 而未看控制台OS 通知負責把他拉回來。去重策略Error 狀態期間避免重複發)由 Architect 在 TDD v2 決定

砍掉的 User Stories

US v1.2 標題 v2.0 處理
v1.2 US-2 Mock 模式試玩 R5-5a
v1.2 US-6 從 Tray 快速控制 維持 v1.2 已砍(第三輪 Q-A
v1.2 US-8 YouTube / URL 推論 R5 共識 2
v1.2 US-9 查看 server 日誌 升級:住 Wails 控制台成為一級功能N1

6. 非功能需求(更新)

6.1 效能指標

指標 v1.2 v2.0 變化說明
安裝時間 ≤ 3 分 / 上限 5 分 同 v1.2 R4-4 沿用
首次推論時間(首次啟動) ≤ 20s / 上限 30s至 Mock 第一幀) ≤ 20s / 上限 30s至瀏覽器第一幀 終點改為瀏覽器 Web UI 顯示第一幀真實推論結果(因 Mock 砍。R5-4 的自動開瀏覽器是達成此指標的必要條件。Architect TDD v2 需驗證預算
首次推論時間(回訪) ≤ 10s / 上限 15s 同 v1.2(但終點改為瀏覽器) 同上
實機接入時間 ≤ 5s / 上限 10s 同 v1.2
攝影機串流延遲(首次) ≤ 200ms / 上限 250ms 同 v1.2R4-2
攝影機串流延遲(穩定後) ≤ 120ms / 上限 150ms 同 v1.2R4-2
idle CPU無硬體狀態 ≤ 3% / 上限 5%Mock 模式) ≤ 3% / 上限 5%(無硬體狀態) Mock 改為「無硬體空白狀態」。CPU 估計值不變,因為 v1.2 Mock 本來就不 spawn Python
idle RAM無硬體狀態 ≤ 500 MB / 上限 600 MB ≤ 450 MB / 上限 550 MB 因無 Mock state、無 Python sidecar、無 yt-dlp 子程序,可略降。此指標不含瀏覽器 tab 記憶體(由 OS 系統瀏覽器負責,不是 Wails app 的責任範圍。Architect 實測Wails + Go server + Python 樂觀估 275405 MB達標
真實推論 RAM ≤ 1 GB / 上限 1.5 GB 同 v1.2

6.2 安裝檔大小(更新)

平台 v1.2 上限 v2.0 目標 組成變化
macOS .dmg ≤ 220 MB ≤ 185 MB(目標)/ 上限 ≤ 220 MB -35MB yt-dlp、ffmpeg 從 77MB GPL build 換成 ~20MB LGPL decoder-only = 淨 -92MB
Windows .exe ≤ 200 MB ≤ 165 MB(目標)/ 上限 ≤ 220 MB -35MB yt-dlp、ffmpeg 換 BtbN LGPL ~40MB差異較小但仍略降
Ubuntu .AppImage ≤ 200 MB ≤ 165 MB(目標)/ 上限 ≤ 220 MB 同 Windows

根據R5-6 / R5-6a / R5-6b / R5-6c ffmpeg LGPL 混合方案,砍 yt-dlp 全套。實際數字需 Architect 在 TDD v2 實測確認。

6.3 瀏覽器相容性(新)

  • 預設:開啟使用者 OS 預設瀏覽器macOSSafari/Chrome/Edge 依 OS 設定WindowsEdgeLinuxxdg-settings
  • auto-open 平台預設(見 §4 N2macOS / Windows autoOpenBrowser = trueLinux autoOpenBrowser = falsexdg-open 在極簡 WM 下行為不穩定R5-D2
  • 推薦Chrome 或 EdgeMJPEG decode 穩定性最好、devtools 最完整、WebSocket 穩定)
  • 可用但不保證SafariMJPEG decode 可能較慢;因為 US-5 AC-5.6 決定不走 getUserMediaSafari 的攝影機權限流程差異不構成問題)
  • 不支援IE、舊版 Firefox ESR< 115、行動版瀏覽器不是使用情境
  • WebSocket 就緒偵測R5-E6 / AC-1.3d):依賴瀏覽器支援 WebSocket — 所有現代瀏覽器原生支援,風險低

注意v1.2 靠 Wails webviewWebView2 / WKWebView是 Chromium/Safari 核心的一個已知固定版本v2.0 改用使用者系統瀏覽器後多了一維瀏覽器版本差異。這是 Architect TDD v2 和 Testing Agent 要接受的新測試矩陣。

6.4 安全性需求(修訂)

  • Server 只監聽 127.0.0.1絕對不 bind 0.0.0.0(同 v1.2R5 共識 7 再次確認)
  • CORS 中介層Access-Control-Allow-Origin 只允許 http://127.0.0.1:* / http://localhost:*v2.0 新增R5 共識 6
  • 使用者資料存在 OS 慣例目錄(同 v1.2
  • 無 TLSlocalhost 不需要)(同 v1.2
  • 無認證(單人工具)(同 v1.2
  • ⚠️ 瀏覽器 DevTools 暴露v2.0 使用者可以用 F12 看到所有 API 呼叫、WebSocket 流量。這不是安全問題(因為是單人本機),但要在 FAE 訓練文件提醒「不要把瀏覽器分頁截圖給外部,可能含硬體序號」

6.5 其他非功能需求

其餘章節(相容性、可維護性、可打包、可用性、日誌)同 v1.2,詳見 nonfunctional.md


7. 第三方授權宣告(大改,取代 v1.2 §4.8

7.1 依賴對照表v2.0

依賴 用途 授權 宣告要求 v1.2 → v2.0 變動
ffmpeg LGPL buildBtbN Windows / Linux 的攝影機 / 影片 decode LGPL v2.1+ 必須宣告LGPL 條文、動態連結、About 對話框列 Powered by FFmpeg (LGPL) + 連結) v1.2 是 GPL build 標 under legal review 🔴v2.0 改 LGPL 方案 B 解除 blockerR5-6
ffmpeg LGPL buildmacOS 自 build macOS 的攝影機 / 影片 decode LGPL v2.1+ 同上;額外說明「本 binary 由 Innovedus 在 macOS 上自 ffmpeg 官方 source 以 ./configure --enable-shared --disable-gpl 等 flag build 出,源碼可取得」 v2.0 新增。Decoder-only ~20MB只含 mp4/avi/mov/mpeg/mpg 五種 decoderR5-6acommit 到 vendor/ffmpeg/macos/R5-6b。ffprobe 一起包R5-6c
KneronPLUS SDKwheel 裝置 / 推論 Kneron 專有 同 v1.2(發佈前 gateR5 風險維持) 同 v1.2
Python runtimepython-build-standalone 執行 KneronPLUS PSF 2.0 同 v1.2 同 v1.2
Python wheelsnumpy / opencv / pyusb 等) 推論依賴 BSD / MIT / Apache 2.0 為主 同 v1.2 同 v1.2
Wails v2 Wails 控制台殼 MIT 同 v1.2 角色改變v1.2 是前端 shellv2.0 是控制台 shell
Next.js / React / shadcn / Radix / Tailwind / Zustand 瀏覽器 Web UI MIT 為主 同 v1.2 同 v1.2
yt-dlp URL 影片下載 Unlicense v2.0 刪除 整個 vendor 拔掉

7.2 macOS ffmpeg 自 build 的長期責任

Architect TDD v2 必須產出 scripts/build-ffmpeg-macos.sh(記錄 configure flags / source tarball URL / checksum 驗證。LGPL ffmpeg 幾乎不需更新R5-6b~20MB binary commit 到 repo 可接受2-3 年後 build 系統變化時需 ~0.5 人天重 build。

7.3 授權檔案落點

同 v1.2 <APPDATA>/licenses/,但:LICENSE-yt-dlp.txt LICENSE-ffmpeg.txt 從 GPL 換成 LGPL v2.1 + v3 新增 ffmpeg-macos-build-notes.md 說明 macOS binary 來源。


8. 風險與相依性(大幅修訂)

8.1 技術風險變動

風險 ID v1.2 狀態 v2.0 處理
R1KneronPLUS Linux wheel glibc 高可能 / 高影響 同 v1.2(不變)
R2Windows WinUSB UAC 中 / 高 同 v1.2
R3KneronPLUS macOS x86_64 中 / 高,已被 Q4 降級 同 v1.2
R4Linux venv 中 / 中 同 v1.2
R5Kneron .nef re-distribution 發佈前 gate 同 v1.2
R6ffmpeg GPL blocker 🔴 release blocker 解除R5-6 走 LGPL 方案 B
R11發佈通路 P2 追蹤 同 v1.2
R12CI runner P2 追蹤 同 v1.2

8.2 新增風險v2.0

N-R1 — 瀏覽器相容性差異(新)

項目 內容
描述 v2.0 改用使用者系統瀏覽器後MJPEG decode 效能、WebSocket 穩定性、深色模式判斷都會因瀏覽器而異。Safari 的 MJPEG 延遲可能超過 150ms 上限
可能性
影響 Safari 使用者體驗可能變差,但 P1 FAE 多用 Chrome
等級 P2 追蹤項
緩解 1) 預設推薦 Chrome / Edge2) Safari 列為「可用但不保證」3) Testing Agent 測試矩陣加 Safari4) 發佈說明寫「若遇延遲過高,請改用 Chrome / Edge」
PM 行動 Testing 階段實測 Safari若嚴重超標則在 Wails 控制台自動開瀏覽器時優先選 Chrome / Edge

N-R2 — macOS 自 build ffmpeg 的長期維護成本(新)

項目 內容
描述 macOS 上沒有現成的 LGPL decoder-only ffmpeg binary需要 Innovedus 自 buildR5-6a / R5-6b。2-3 年後若 ffmpeg build 系統變化 / configure flag 調整 / source tarball 結構變化,可能需要重新 build
可能性 中(長期)
影響 低—中
等級 P3 追蹤項(不緊急)
緩解 1) TDD v2 產出 scripts/build-ffmpeg-macos.sh,記錄完整 build 步驟2) commit 時把 source tarball checksum、configure flags、build 環境一起寫進 commit message3) 每 2 年做一次 build 演練確保 script 還能跑
PM 行動 交付時在 delivery docs 加「ffmpeg rebuild SOP」

N-R3 — 使用者誤解「關閉視窗 ≠ 結束 server」

項目 內容
描述 R5-2 決定維持「關閉 Wails 視窗 = 結束 server」但因為 v2.0 多了瀏覽器視窗這個「真正的操作介面」,使用者可能誤以為「我關掉 Wails 視窗沒關係、瀏覽器 tab 還在、應該還能用」。這種誤解會導致他在瀏覽器看到 Offline Overlay 時很困惑
可能性
影響 中(體驗面混亂,不危險)
等級 P2 追蹤項
緩解 1) Wails 控制台 Close 按鈕的 tooltip / confirm dialog 明確寫「關閉此視窗會結束 Local Server」AC-7.62) Web UI 的 Offline Overlay 文案引導「請回到 visionA-local 桌面視窗重新啟動」3) First-Run 歡迎頁加一句說明
PM 行動 Design Agent 在 Design Spec v2 確認這三處文案都到位

N-R4 — 砍 Mock 後 CI / E2E 測試困難(新)

項目 內容
描述 v1.2 有 Mock 模式CI runner 沒插硬體也能跑 E2E 測試(跑 Mock pipeline。v2.0 砍 Mock 後CI runner 要跑裝置管理 / 模型切換 / 推論 E2E 時,若沒硬體就測不了
可能性
影響 中(測試覆蓋率下降)
等級 P2 追蹤項
緩解 1) E2E 測試分層:「不需硬體的 UI 測試」載入、i18n、Settings、Offline Overlay、Wails 控制台 start/stop button可在無硬體 CI 跑;「需要硬體的測試」(裝置偵測、推論)只能在有硬體的 runner 跑2) 用 HTTP fixture mock 後端 API前端 unit 測試層級),但不碰 Go server 的推論 pipeline3) Testing Agent 在測試計畫明確區分兩層
PM 行動 與 Testing Agent / DevOps 討論是否要建「有硬體 CI runner」M5+ 規劃)

8.3 PM 需要進一步確認的事項(寫入 progress.md 未解決問題)

沿用 v1.2 三項R5 授權 / R11 發佈通路 / R12 CI runner新增 N-R1 瀏覽器相容性Testing 驗證 Safari/Chrome/Edge/Firefox MJPEG + WebSocketN-R4 CI/E2E 測試分層Testing + DevOps 於 TDD v2 提出分層方案)。


9. 策略性路線圖(更新)

  • Now本 sprint重構實作PRD v2.1 / Design Spec v2 / TDD v2 三方互審 → Architect 產 ffmpeg LGPL vendor script + Wails 控制台實作 + CORS middleware + 刪檔清單 → Design 產控制台 wireframe + Offline Overlay + source-selector 拔 URL → 拆 milestone 進開發
  • Next重構完成後M7 Windows build 重驗R5-7v1.0.0 release gateKneron re-distribution 授權R5 發佈前 gate三平台 smoke test
  • Laterv1.0.0 發佈後):視回饋決定是否放回 v1.2 功能Mock / URL 推論 / tray視需求升級 LAN 模式(重走 R5-1 動機 C

10. 變更追蹤(和 v1.2 的完整差異清單)

區域 v1.2 v2.0 R5 依據
產品定位 Wails 桌面 app 內嵌 Next.js UI 本機服務 + 網頁控制台 R5-1
競品類比 Photo Booth Ollama / Docker Desktop / LM Studio / SD WebUI R5-1
一句話價值主張 「裝起來就能跑、離線可用、零依賴」 「雙擊 → 自動開瀏覽器 → 插 USB → 5 分鐘跑第一次推論」 R5-1 / R5-4
北極星指標終點 Mock 第一幀 瀏覽器第一幀(真實硬體) R5-5a
Mock 模式 MVP 必達 R5-5a
URL 影片推論 US-8 / /api/media/url / yt-dlp 內嵌 R5 共識 2
yt-dlp vendor35MB 打包 R5 共識 2
ffmpeg GPL buildblocker 🔴 LGPL 方案 B 混合Win/Linux BtbN、macOS 自 build decoder-only ~20MB commit R5-6 / R5-6a / R5-6b / R5-6c
安裝檔大小macOS 目標) ≤ 220 MB ≤ 185 MB R5-6
idle RAM無硬體 ≤ 500 MB / 上限 600 MB ≤ 450 MB / 上限 550 MB 砍 Mock / yt-dlp
Wails 視窗關閉 結束程式 同 v1.2R5-2 復議後維持) R5-2
Tray v1.2 Q-A 同 v1.2R5-3 復議後維持) R5-3
啟動時自動開瀏覽器 新增,每次啟動都開R5-D3macOS/Win 預設 ON、Linux 預設 OFFR5-D2toggle 住 Wails 控制台 Settings已與 Design 取得共識) R5-4 / R5-D2 / R5-D3
AC-1.3 啟動預算 ≤ 60 秒(原 v2.0 草案 10 秒硬指標被 R5-E1 取代)+ 階段化進度6 階段R5-E2+ 20 秒卡住提示R5-E3+ 60 秒超時進 Error stateR5-E4+ WebSocket 就緒偵測R5-E6 R5-E1E6
Server 崩潰 OS 通知 新增(控制台 Error banner 並存R5-D1 R5-D1
First-Run wizard 步數 3 步(歡迎 / 模式選擇 / 硬體偵測) 2 步(歡迎 / 硬體偵測,砍模式選擇;無硬體可按「稍後再設定」略過) R5-5a / Design review Minor 4
Offline Overlay 硬阻斷 新增驗收特性role="alertdialog" + focus trap + 無 ✕ 按鈕 + 純色卡片) Design review Minor 2
Wails 控制台 Footer 持久警示 新增「⚠ 關閉此視窗會停止 Local Server」取代單次 confirm 作為主要提醒 Design review Minor 3
Error state 三動作按鈕 新增 Restart Server / View log / Report issueWails 控制台 Error banner 內) Design review Minor 3
Wails 控制台 webview 載 Next.js 新增 vanilla HTML/JS/CSSStart/Stop/Restart/Open Browser/log panel/status/port/dir/version R5-5 / R5 共識 5
Server Offline Overlay 新增Web UI 全螢幕覆蓋層) R5-2
CORS middleware 新增127.0.0.1 / localhost only R5 共識 6
watchServer 連 3 次失敗 os.Exit(1) 改為 Error state不退出 R5 共識 8
Server boot-id 新增(支援 Restart Server 按鈕的 tab 自動重連) R5 共識 14
US-1 3 分鐘看到 Dashboard 5 分鐘瀏覽器跑第一次推論 R5-1 / R5-4
US-2 Mock 試玩 日常啟動(取代) R5-5a
US-5 Wails webview 攝影機 瀏覽器 Workspace + 後端攝影機 pipeline不走 getUserMedia R5-1
US-7 / US-8 影片 / URL 上傳 合併為 US-6砍 URL R5 共識 2
US-9 Settings 進階分頁次要功能 升級為 Wails 控制台一級功能 R5-1 / R5-5
新 US-7server 崩潰 / 離線) 新增 R5-2
上傳影片副檔名 mp4 / avi / mov / webm瀏覽器能吃 mp4 / avi / mov / mpeg / mpg R5 共識 11
Persona P3 Sam 三順位目標 實質降級為非目標 R5-5a
新風險 N-R1 瀏覽器相容 / N-R2 macOS ffmpeg 維護 / N-R3 關窗誤解 / N-R4 CI 測試分層
解除風險 R6 ffmpeg GPL blocker 解除 R5-6

11. 給 Orchestrator / 下輪審閱的問題

# 問題 v2.1 狀態
11-1 auto-open Settings 資料落在哪Web UI 和 Wails 控制台共用同一個 config 嗎? 已解決Architect 答:preferences.json @ <dataDir>/write-rename 原子寫fallback DefaultPreferencesauto-open toggle 由 Wails 進程讀取Web UI 不碰此欄位)
11-2 US-1 AC-1.3 10 秒預算是否可達? 已解決(由 R5-E 取代) — 整個問題被重新定義為「60 秒總預算 + 階段化進度 + perceived performance」不再是硬時間指標
11-3 idle RAM ≤ 450 MB 是否可達? 已解決Architect 實測Wails + Go server + Python 275405 MB 達標;悲觀估含瀏覽器 tab ~500 MB 超 50 MB但瀏覽器 tab 不在本指標範圍內,已於 §6.1 clarify
11-4 N-R4 砍 Mock 後 CI / E2E 測試分層 懸置,交 Testing Agent 在測試計畫提出「不需硬體的 UI 測試」vs「需硬體測試」分層方案
11-5 Web UI 要不要加常駐「本機服務」徽章? 已解決:不加Design Agent 決定,改由 First-Run Step 1 歡迎頁一次性告知;見 Design review §D
11-6 Settings auto-open toggle 住哪裡? 已解決Design 仲裁採 PRD 原案:住 Wails 控制台 Settings menuDesign Spec v2 v2/settings-update.md 將同步修正)
11-7 R5-E 階段化進度 6 階段文案(中英雙語)定稿 懸置R5-E5 使用者授權 Design Agent 決定;最終在 Design Spec v2 wireframe 定版時由使用者審閱 override

變更紀錄

版本 日期 作者 變更
v2.0 2026-04-14 PM Agent 依 R5 五輪決策重寫:砍 Mock / URL 推論 / yt-dlp新增 Wails 控制台 + Server Offline Overlay + 首次自動開瀏覽器 + CORSffmpeg 從 GPL blocker 解除為 LGPL 方案 B 混合Persona P3 降級US-1/US-2/US-5/US-6/US-7 重寫;解除 R6新增 N-R1 ~ N-R4 風險。完整差異見 §10
v2.1 2026-04-14 PM Agent 吸收 Design 交叉審閱4 Major + 4 Minor+ R5-D1/D2/D3 + R5-E1E6(1) 「首次啟動自動開」→「每次啟動自動開」全文修正R5-D3(2) auto-open 平台預設 Linux OFFR5-D2(3) US-7 新增 AC-7.7 Server 崩潰時發 OS 原生通知R5-D1(4) §4 新增 N7 OS 通知、N8 啟動階段化進度6 階段);(5) AC-1.3 從 10 秒硬指標改寫為 60 秒 + perceived performance + AC-1.3a/b/c/d 四條新驗收R5-E1E6(6) US-2 明確日常啟動同樣 auto-openMinor 1(7) Offline Overlay 補齊 role="alertdialog" + focus trap + 不可關閉 + 純色卡片Minor 2(8) US-7 AC-7.3 / AC-7.6 補 Wails 控制台 Footer 持久警示 + Error state 三動作按鈕Minor 3(9) US-1 AC-1.4 補 First-Run 從 3 步縮為 2 步 + 「稍後再設定」略過Minor 4(10) §6.1 idle RAM 加不含瀏覽器 tab 註記 + Architect 實測佐證;(11) §11 懸念 5 題結案 + 新增 11-6 / 11-7保留 11-4 CI 測試分層懸置