visionA/local-tool/.autoflow/02-prd/pm-cross-review.md
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

8.7 KiB
Raw Permalink Blame History

PM 交叉審閱報告

審閱者PM Agent 日期2026-04-11 審閱對象Design 第三輪修訂版 + Architect 第三輪修訂版 基準PRD v1.1(含第三輪決策 Q-A / Q-B / Q-C / Q-E1/E2/E3


對齊的項目

  • 6 個核心 User StoryUS-1US-5、US-7US-9Design 的 First-Runspec/04、Wireframesspec/03、狀態設計spec/08與 Architect 的 API 清單、依賴打包、lifecycle 章節皆能找到對應落地。US-6tray已在 PRD v1.1 標註移除,兩端同步刪除。
  • IA 與 Settings 四分頁Design IA4 主區 + 一般/硬體/模型/進階)與 PRD feature-inventory 4.2 完全一致Workspace 升一級、外觀分頁取消並把語言併入一般分頁都正確落地。
  • 資料目錄macOS ~/Library/Application Support/visionA-local/PRD、Design First-Run、Architect TDD §6Log 路徑、lifecycle §2single-instance lock、api-endpoints §3IPC port 檔案)全部一致,未見 ~/.visiona-local/ 殘留。
  • 非功能需求落地Architect 的 packaging.md 預估 ~195-210MBPRD 上限 300MB、目標 ≤ 220MB 內、Python runtime 雙策略PRD 6.3 的零預裝)、離線 wheel 安裝PRD 6.4)、只 bind 127.0.0.1PRD 6.6)、中英雙語 + 跟隨系統主題PRD 6.8)皆完整對應。
  • 三平台、x86_64、無簽章Architect D3/D4、packaging §1 與 PRD 6.5、release-strategy 一致。R3/R5 Gatekeeper / SmartScreen 的 workaround 已寫進 Design First-Run 歡迎頁 + SignatureWarningNotice 元件 + Architect packaging §2.5。
  • M1 一次清乾淨前端 cluster/relay UIQ-CArchitect design-doc §5 M1-7 已明確列為 M1 必做,且 Design 02-pages-diff 的刪除清單一致。
  • Tray 整條已砍Q-ADesign 05-tray.md 確認刪除、Architect tray-and-lifecycle.md 只保留 lifecycle 內容並加註、server/internal/tray/ 列入 removed-code。

⚠️ 發現的問題

對 Design 的問題

  • D-01 [🟡 需修] sidebar 一級入口數量描述不一致PRD feature-inventory 4.3 寫「sidebar 為 5 項一級入口Dashboard / Devices / Models / Workspace / Settings」但 Design spec/01-IA §1.2 明確把 Settings 放在 sidebar 最下方並用 divider 與主導航區隔= 4 主 + Settings 特殊位置)。兩端語意其實一致,但字面上會引起工程師混淆。建議 PM 端把 PRD 4.3 改為「4 個主導航 + Settings底部獨立區」與 Design 對齊(由 PM 自行修)。

  • D-02 [🟡 需修] Mock 切換入口驗收條件未覆蓋 AC-2.4PRD AC-2.4 要求「Mock 與真實模式可隨時在 Settings 切換,切換不需重啟 app」。Design design-spec.md §「待確認 #4」列出切換入口為 Settings > 硬體 + Devices 頁右上 pill + First-Run Step 2Wireframe 3.3 Devices 頁也有 pill沒有明確說「切換不需重啟」 這個非功能條件。建議 Design 在 spec/08-states §8.7 的「切換 Mock/Real 模式」補一句:「切換透過 /api/system/restart 或純前端 state無需關閉 app」並與 Architect 確認該 API 行為。

  • D-03 [🟢 建議] US-3AC-3.5 Windows UAC 說明 / AC-3.6 Linux udev 說明對話框)只散落在 First-Run Step 3 Phase 2B 的排錯清單PRD 明確要求「顯示說明對話框」Design 只把這兩項做成「可點擊展開的排錯項目」。建議強化成 OS 偵測後的主動 modal至少首次 connect 失敗時觸發一次),與 US-3 的 AC 更精準對齊。不做不至於違反 AC 文字,但體驗上可再好一點。

  • D-04 [🟢 建議] Workspace wireframe 缺少 AC-5.4「即時 FPS / 延遲 / CPU / RAM 占用」的明確位置spec/03-wireframes §3.4 Control 區只畫了 Perf: FPS 24 / Latency: 42ms,沒畫 CPU / RAM。建議在 Control Panel 下補一個小型資源監視區塊,或直接把 performance-metrics 元件畫進 wireframe避免開發階段漏做。

對 Architect 的問題

  • A-01 [🔴 阻斷] R9 Plan BKneron 授權不過 → 首次啟動線上下載)沒有落地設計risks-and-mitigations R9 把 Plan B 寫成「改為首次啟動線上下載」,但 Architect 的 dependency-bundling.mdpackaging.mdbuild-pipeline.md 完全沒有 設計對應流程(例如:下載進度 UI、URL 設定、斷線重試、完整性 checksum、AppData 內的模型資料夾結構、跟 First-Run Step 1 的整合點)。這會讓「開發到一半才發現授權不過」變成架構重做的風險。建議 Architect 補一份極簡的 R9 Plan B TDD(不用實作,但要描述資料流與 fallback 時機),並且與 Design 討論 First-Run 要不要插入「下載模型」步驟(會影響 4.4 現有流程圖)。這一項直接影響能否安心進入開發。

  • A-02 [🟡 需修] Settings 頁 Server Port 改動缺 API 支援Design spec/03-wireframes §3.5「硬體」分頁有 Server Port預設 3721衝突時可改,但 Architect 的 api-endpoints.md 保留的 /api/system/* 並沒有「變更 port」的 endpointpackaging / lifecycle 也沒說明變更 port 之後 Wails 殼要怎麼重新連 WebView因為 WebView URL 寫死在 lifecycle §1。建議(a) 增加 POST /api/system/config 或明確說明「port 只能從 Wails menu 改,改完要重啟 server」(b) 在 TDD 補一段說明 port 衝突錯誤流程PRD 5.4.1 有定義但 TDD 未對應)。

  • A-03 [🟡 需修] i18n 範圍未涵蓋 Wails 安裝精靈PRD 6.8.1 + Design spec/10 要求「所有 UI 字串、錯誤訊息、First-Run 文案都需雙語」Architect i18n.md §1 雖然有寫「Wails app安裝精靈、錯誤對話框Go 端 i18n map」但 §2 之後只展開前端 locale 檔結構,Go 端 i18n map 的具體實作未展開(沒有檔案路徑、沒有 key 清單、沒有語系偵測方式)。建議補 §3「Go 端 i18n 實作」,至少說明:檔案位置、語系偵測 API、key 命名慣例。

  • A-04 [🟡 需修] idle 資源目標在 TDD 與 PRD 不一致PRD 6.1 要求 Mock idle CPU ≤ 3%(上限 5%、RAM ≤ 400MB上限 500MBArchitect TDD §5 只寫「CPU < 5%、RAM < 500MB」——這是上限而非目標。會導致開發時只盯上限。建議 TDD §5 補上「目標值 / 上限值」兩欄與 PRD 對齊。

  • A-05 [🟢 建議] 安裝時間目標PRD 6.1 ≤ 3 分鐘 / 上限 5 分鐘)在 TDD 沒有對應的技術預算拆解Architect dependency-bundling / packaging 完全沒有「解壓 90MB python + pip install 5 個 wheel 要花多久」的估算。如果最後超過 5 分鐘PRD 的北極星指標「5 分鐘內跑出第一次推論 ≥ 95%」會直接破功。建議 Architect 在 dependency-bundling.md 補一張「各步驟時間預算表」(解壓 / venv / pip install / 啟動 server / WebView load即使是估算也好。


需要使用者或三方討論的問題

  1. R9 Plan B 什麼時候要做決定:目前 R9 標為 P1 release blocker但若等到 M6 才確認 Kneron 授權,屆時才發現要做 Plan B可能要延宕 1-2 個月。建議 Orchestrator 在進入 M1 前就請使用者 / Kneron 業務啟動授權溝通,平行進行,不要等。
  2. port 衝突 UX 決策歸屬PRD 5.4.1 + Design 8.2 都畫了「更改 Port」按鈕但 Architect 沒有對應 API。三方需要決定(a) 做到底(加 API + 重啟流程);(b) 簡化為「請使用者關閉占用程式後重啟」砍掉按鈕。Design / Architect 需同步。
  3. M1 端到端 smoke test 的驗收定義Architect M1-13 寫「Mock 模式看到 3 台假裝置跑推論,且 UI 完全沒有 cluster / relay / tunnel 入口」。建議使用者 / PM 確認這個就是 M1 的 Definition of Done以免 M1 延伸到「連真實裝置也要通」。

結論

是否可以進入開發階段?有條件是

條件清單(照順序處理)

  1. [阻斷] A-01Architect 補 R9 Plan B 的簡版設計(資料流 + First-Run 整合點),否則開發到後期有架構重做風險。
  2. [需修] D-02 / A-02Mock 切換與 Server Port 變更的 API / 重啟行為要三方對齊,否則 Wireframe 按鈕會變成空按鈕。
  3. [需修] A-03 / A-04Architect 補 Go 端 i18n 實作章節、TDD §5 效能目標對齊 PRD。
  4. [需修] D-01PM 自行把 PRD 4.3 sidebar 描述對齊 Design IA5 項 → 4 主 + Settings
  5. [討論] Q1 Kneron 授權Orchestrator 在 M1 啟動前協助使用者聯繫 Kneron 平行確認,不要等到 M6。

以上條件完成後,三方文件可視為 ready進入 Reviewer 審查 + 開發M1階段。其餘 🟢 建議項目可在 M1 / M2 迭代時處理,不作為開發阻斷。