visionA/local-tool/.autoflow/02-prd/release-strategy.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

5.1 KiB
Raw Permalink Blame History

7. 發佈與交付策略

7.1 發佈通路Q 決定:內部 Gitea / GitHub Releases

決策

  • 內部 Gitea Releases(首選)
  • GitHub Releases(備援 / 合作夥伴用)
  • 不上 Mac App Store、Microsoft Store、Snap Store、Flatpak

理由

  • 內部工具性質,不需要商店觸達
  • 商店上架需要 sandboxApp Store、開發者帳號 / 簽章(所有商店),均已被 Q2 排除
  • Gitea / GitHub Releases 提供版本管理與下載追蹤即可

7.2 發佈頻率

類型 頻率 觸發
主版本1.0、2.0 1-2 次/年 重大功能加減
次版本1.1、1.2 1 次/月 新功能 / 重大改進
修補版本1.0.1 隨時 Bug fix / 安全性

7.3 發佈產出物

每個 release 包含以下檔案:

檔名 平台 格式 預計大小
visionA-local-{version}-macos-x64.dmg macOS 14/15 x86_64 .dmg ~220 MB
visionA-local-{version}-windows-x64.exe Windows 10/11 x86_64 Inno Setup .exe ~200 MB
visionA-local-{version}-linux-x64.AppImage Ubuntu 22.04/24.04 x86_64 .AppImage ~200 MB
visionA-local-{version}-checksums.txt 全平台 文字 < 1 KBSHA256
RELEASE_NOTES.md 全平台 Markdown 依版本而異

注意:不提供 ARM 架構、不提供 .deb / .rpm / .pkg

7.4 發佈前檢查清單Launch Checklist

每次 release 前必須通過:

功能面

  • 三平台安裝檔可於對應 OS 成功安裝(手動測試)
  • 三平台首次啟動可完成 First-Run 流程
  • 三平台均可接 Kneron USB 並 connect 成功
  • 三平台 Mock 模式可啟動並顯示假推論結果
  • 三平台攝影機串流正常
  • 三平台前端 cluster / relay / tray UI 已完全清除(第三輪 Q-C 決策M1 必達)

效能面

  • 安裝時間 ≤ 3 分鐘(測試機 SSD
  • 首次推論時間 ≤ 15 秒
  • Mock idle CPU ≤ 3%、RAM ≤ 400 MB
  • 安裝檔大小符合 6.2 節上限

相容性

  • macOS 14 + 15 各測試一次
  • Windows 10 + 11 各測試一次
  • Ubuntu 22.04 + 24.04 各測試一次

文件

  • RELEASE_NOTES.md 已撰寫
  • 安裝指南更新(含 Gatekeeper / SmartScreen 警告處理)
  • 內部 Wiki / Slack 通知已準備好

非需要項目(明確不做)

  • 程式碼簽章Q2
  • notarizationQ2
  • 法律文件Terms / Privacy(內部工具)
  • 商店審核
  • auto-update 清單Q6

7.5 發佈流程

1. 開發完成 → 合併到 main branch
2. 打 taggit tag v1.0.0 && git push --tags
3. CI 觸發 → 三平台 buildGitHub Actions 或 self-hosted runner
   ├─ macOS runnerwails build -platform darwin/amd64 → .dmg
   ├─ Windows runnerwails build -platform windows/amd64 → Inno Setup → .exe
   └─ Linux runnerwails build -platform linux/amd64 → appimagetool → .AppImage
4. 產生 checksums.txt
5. 人工執行 Launch Checklist
6. 上傳到 Gitea / GitHub Releases
7. 內部公告Slack channel / Email
   - 新版本號
   - 主要變更
   - 下載連結
   - 升級說明(因為沒 auto-update需手動下載

7.6 使用者升級路徑

因為 Q6 決定不做 auto-update

1. 使用者從 Slack / Email 得知有新版
2. 手動到 Gitea / GitHub Releases 下載新版安裝檔
3. 安裝新版(舊版 config / 模型資料保留在 OS 慣例資料目錄macOS`~/Library/Application Support/visiona-local/`
4. 首次啟動新版會自動讀取舊 config

舊版本相容性

  • config.json 結構必須向後相容(加欄位可以、改語意要寫 migration
  • 模型檔案格式不變(.nef 為 Kneron 標準)
  • logs 目錄結構不變

7.7 Rollback 策略

若新版本爆出重大問題:

  1. 在 Gitea / GitHub Releases 將該版本標記為 pre-release 或刪除
  2. 內部通知:「請暫停升級 vX.Y.Z改用 vX.Y.Z-1」
  3. 使用者已升級者手動下載舊版重裝config 資料保留)

因為無 auto-updaterollback 成本相對低。

7.8 支援與回報

  • Bug 回報通路:內部 Slack channel / Gitea Issues
  • Feature Request:同上
  • 文件:內部 Wiki
  • SLAbest-effort 支援

7.9 長期維護策略

visionA-local 的維護預算應與 edge-ai-platform 主線共用:

  • 核心業務邏輯device / model / inference / camera的修改同步從 edge-ai-platform cherry-pick
  • visionA-local 特有的部分installer、payload、tray、wails shell獨立維護
  • 目標visionA-local 的獨有程式碼 < 30%,其餘都能與 edge-ai-platform 共享

7.10 非目標再次確認(發佈相關)

本章節再次強調發佈相關的非目標:

  • 不上任何商店Mac App Store / Microsoft Store / Snap Store 等)
  • 不做程式碼簽章macOS Developer ID / Windows EV cert
  • 不做 notarization
  • 不做 auto-update
  • 不做 telemetry / crash report
  • 不做 license key
  • 不做法律文件Terms / Privacy Policy— 因為是內部工具
  • 不支援 ARM 架構(未來再評估)