jim800121chen c54f16fca0 Initial commit: visionA monorepo with local-tool subproject
local-tool/: visionA-local desktop app
- M1: Wails shell + Go server + Next.js UI + Mock mode (macOS dmg ready)
- M2: i18n (zh-TW/en) + Settings 4-tab refactor
- M3: Embedded Python 3.12 runtime (python-build-standalone) + KneronPLUS wheels
- M4: Windows Inno Setup script (build on Windows runner)
- M5: Linux AppImage script + udev rule (build on Linux runner)
- M6: ffmpeg (GPL, pending legal review) + yt-dlp bundled
- Lifecycle: watchServer health check, fatal native dialog,
            Wails IPC raise endpoint, stale process cleanup

.autoflow/: full PRD / Design Spec / Architecture / Testing docs
            (4 rounds tri-party discussion + cross review)
.github/workflows/: macOS / Windows / Linux build CI

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:10:38 +08:00

9.5 KiB
Raw Permalink Blame History

6. 非功能需求與驗收標準

6.1 效能需求(量化)

指標 目標值 上限值 測量方法
安裝時間(下載完成 → app 首屏) ≤ 3 分鐘 ≤ 5 分鐘(硬性上限) 全新機器 + SSD + 一般規格 CPU計時從雙擊安裝檔到 Dashboard 顯示。第四輪 R4-4 決策:上限放寬至 5 分鐘(原 3 分鐘僅為目標值,考量到 Python runtime 解壓 + 5 個 wheel 離線 install 的實測預算)。
首次推論時間 — 首次安裝後第一次啟動app 首次開啟 → Mock 第一幀) ≤ 20 秒 ≤ 30 秒 首次啟動需觸發 Python sidecar 冷啟動、wheel 載入、模型 warmup。第四輪 R4-7 決策:首次推論拆為兩級目標。
首次推論時間 — 回訪(第 2 次以後)app 啟動 → Mock 第一幀) ≤ 10 秒 ≤ 15 秒 無需再解壓依賴,僅 Python sidecar + 模型載入。第四輪 R4-7 決策:回訪目標較首次嚴格。
實機接入時間(插 USB → connect 成功) ≤ 5 秒 ≤ 10 秒 計時從 USB 插入到 Devices 頁顯示「Connected」
攝影機串流啟動時間(按 Start → 第一幀) ≤ 2 秒 ≤ 3 秒 計時從 Start 按鈕點擊到第一幀畫面
Mock 模式 idle CPU 占用 ≤ 3% ≤ 5% Mock 模式下 60 秒平均值Mock 模式不 spawn Python sidecar,僅前端 state + Go server
Mock 模式 idle RAM 占用 ≤ 500 MB ≤ 600 MB Mock 模式下 60 秒平均值。第四輪 R4-4 決策:原 400/500MB 放寬至 500/600MBWails + WebView2/WKWebView + Go server 基底已約 350-450MB扣掉 Python 後空間有限)。注意Mock 模式不 spawn Python sidecar因此不計入 Python runtime 的 ~150MB。
真實推論 RAM 占用 ≤ 1 GB ≤ 1.5 GB 跑一個分類 + 一個偵測模型(含 Python sidecar
攝影機串流延遲 — 首次啟動串流capture → UI 顯示) ≤ 200 ms ≤ 250 ms MJPEG 時間戳比對;首次啟動 MJPEG pipeline warmup 較慢。第四輪 R4-2 決策
攝影機串流延遲 — 穩定後capture → UI 顯示) ≤ 120 ms ≤ 150 ms MJPEG 時間戳比對;啟動 5 秒後的穩定值。第四輪 R4-2 決策MJPEG 瀏覽器端 decode 不可能做到 100ms 以下,務實值為 150ms。

6.2 安裝檔大小需求

平台 目標值 上限值 組成
macOSx86_64 .dmg ≤ 220 MB ≤ 300 MB Wails shell + Go server + Next.js + Python wheels + ffmpeg + .nef + Python runtime
Windowsx86_64 .exe ≤ 200 MB ≤ 300 MB 同上 + WinUSB driver
Ubuntux86_64 .AppImage ≤ 200 MB ≤ 300 MB 同上

注意Architect Round 1 估算約 195-215 MB在目標內。主要體積來自 ffmpeg~40MB+ Python wheels~40MB+ 預置模型(~73MB

6.3 零依賴需求

核心需求:使用者機器完全不需要預先安裝以下任何項目:

  • 不需要 Python內嵌 Python runtime + fallback 至系統 Python
  • 不需要 ffmpeg內嵌靜態 binary
  • 不需要 KneronPLUS SDK內嵌 wheel
  • 不需要 Node.js前端已 embed 進 Go binary
  • 不需要 Docker
  • 不需要 git
  • 不需要任何開發工具

唯一例外

  • macOS / Linux基本系統函式庫glibc / libc 等標準元件)
  • Windows首次啟動需允許 UAC 以安裝 WinUSB driver
  • Linux首次啟動需 sudo 寫入 /etc/udev/rules.d/99-kneron.rules

6.4 離線可用需求

核心需求:除 update-check(本 MVP 已砍)之外,所有核心功能在完全斷網情況下必須正常運作,包含:

  • 安裝過程(使用內嵌 wheelspip install --no-index
  • First-Run 歡迎流程
  • 裝置偵測 / connect / 推論
  • 模型上傳 / 切換
  • 攝影機串流
  • 媒體上傳(圖片 / 影片)
  • ⚠️ /api/media/urlyt-dlp例外:需連網才能下載 YouTube 影片

6.5 相容性需求

6.5.1 作業系統Q3 決定:都最新兩版)

平台 支援版本 架構 備註
macOS 14 (Sonoma)、15 (Sequoia) x86_64 Q4 只做 x86_64Intel Mac
Windows 10、11 x86_64 Windows 10 需要 1809 以上WinUSB
Ubuntu 22.04 LTS、24.04 LTS x86_64 其他發行版不保證(用 AppImage 可能可以)

明確不支援macOS 13 以下、Windows 10 1809 以下、Ubuntu 20.04 以下、所有 ARM 架構、其他 Linux 發行版Fedora、Arch 等)。

6.5.2 Kneron 硬體

  • KL720第一優先
  • KL730
  • 未來其他 KL 系列視 KneronPLUS wheel 支援度

6.5.3 攝影機

  • macOSAVFoundation 能列到的 webcam 皆支援
  • WindowsDirectShow / Media Foundation 能列到的 webcam 皆支援
  • LinuxV4L2 能列到的 webcam 皆支援

6.6 安全性需求

內部工具,安全模型較寬鬆,但仍需滿足:

  • Server 只監聽 127.0.0.1絕對不 bind 0.0.0.0
  • 無 CORS 允許任意 origin
  • 使用者資料模型、config存在 OS 慣例目錄非系統路徑macOS~/Library/Application Support/visiona-local/Windows / Linux 依各自 OS 慣例,由 Architect TDD 定義)
  • 無需 TLSlocalhost 不需要)
  • 無需認證(單人工具)
  • 無需加密儲存(檔案系統權限足矣)
  • ⚠️ Python sidecar 的 subprocess 呼叫必須做參數 escape避免 injection

6.7 可維護性需求

  • 日誌寫入 OS 慣例資料目錄下的 logs/ 子目錄macOS~/Library/Application Support/visiona-local/logs/),滾動保留最近 7 天
  • Crash 發生時 Go server 留下 stack trace 到 log file本地不上傳
  • server 狀態面板(沿用原 server-status-dashboard)可顯示目前依賴狀態
  • 無遠端遙測 / 崩潰回報Q12
  • 無 auto-updateQ6

6.8 可用性需求UX 層級)

6.8.1 本地化Q13 決定)

  • 中英雙語繁體中文zh-TW+ 英文en
  • 首次啟動依系統語言判斷,可在 Settings 切換
  • 所有 UI 字串、錯誤訊息、First-Run 文案都需雙語

6.8.2 主題Q15 決定)

  • 預設跟隨系統macOS appearance、Windows theme、Linux GTK theme
  • 使用者無法手動覆寫(簡化 Settings
  • 第三輪 Q-E3 決策因為沒有手動覆寫需求Settings 不設「外觀」分頁;語言偏好併入「一般」分頁

6.8.3 無障礙WCAG 2.2 AA 明確 scope 外

第四輪 R4-3 決策WCAG 2.2 AA 正式合規不是 MVP 目標。內部工具、使用者是內部 FAE使用者群體明確不需要通過政府採購或公共部門的無障礙稽核。

  • 盡力而為:繼承 shadcn/Radix 元件提供的預設無障礙屬性ARIA role、focus ring、keyboard nav
  • 盡力而為鍵盤可操作的主要流程Tab navigation 可達 First-Run、Dashboard、Devices、Workspace 的核心按鈕)
  • 不做WCAG 2.2 AA 正式稽核
  • 不做螢幕閱讀器VoiceOver / Narrator / NVDA完整測試
  • 不做色彩對比度驗證工具axe / Lighthouse A11y的正式通過
  • 不做:自訂快捷鍵衝突檢查
  • 不做:大字體 / 高對比 / 減少動態效果的偏好設定

未來升級路徑:若未來要發佈給外部客戶或政府單位,需補完整的 WCAG 2.2 AA 稽核與修正。本 MVP 不保證合規。

本條也列入非目標:見 vision-and-non-goals.md 3.2.2 生命週期 / 營運相關段落(已補)。

6.9 可打包 / 可發佈需求

  • 可從 CIGitHub Actions 或類似)一鍵產出三平台安裝檔
  • 可從單一 commit tag 觸發 release build
  • 產出的安裝檔檔名含版本號:visionA-local-1.0.0-macos.dmg
  • 發佈目標:內部 Gitea Releases 或 GitHub Releases由使用者選擇
  • 不發佈到任何商店

6.10 總體驗收標準對照表

類別 指標 目標 / 上限 來源
效能 安裝時間 目標 ≤ 3 分鐘 / 上限 ≤ 5 分鐘 6.1
效能 首次推論時間(首次啟動) 目標 ≤ 20 秒 / 上限 ≤ 30 秒 6.1
效能 首次推論時間(回訪) 目標 ≤ 10 秒 / 上限 ≤ 15 秒 6.1
效能 實機接入時間 目標 ≤ 5 秒 / 上限 ≤ 10 秒 6.1
效能 串流延遲(首次) 目標 ≤ 200 ms / 上限 ≤ 250 ms 6.1
效能 串流延遲(穩定後) 目標 ≤ 120 ms / 上限 ≤ 150 ms 6.1
體積 macOS 安裝檔 ≤ 220 MB 6.2
體積 Windows 安裝檔 ≤ 200 MB 6.2
體積 Ubuntu 安裝檔 ≤ 200 MB 6.2
資源 Mock idle CPU ≤ 3%(上限 5% 6.1
資源 Mock idle RAM ≤ 500 MB上限 600 MB 6.1
依賴 完全零預裝 必須 6.3
離線 核心功能離線可用 必須 6.4
相容 macOS 14/15 x86_64 必須 6.5
相容 Windows 10/11 x86_64 必須 6.5
相容 Ubuntu 22.04/24.04 x86_64 必須 6.5
語言 中英雙語 必須 6.8.1
主題 跟隨系統深色模式 必須 6.8.2
發佈 CI 一鍵三平台 build 必須 6.9

第一次成功率(北極星指標):內部 FAE 在客戶現場首次安裝後 5 分鐘內順利跑出第一次推論的比例 ≥ 95%。(對應安裝時間上限 5 分鐘 + 首次推論上限 30 秒,合計仍在 5 分 30 秒內。)