jim800121chen
d7cddf364b
fix(local-tool): 拆 built-in / user data dir — 修預設模型永遠載入 0 個
M8-10a smoke test 抓到 M1 就潛藏的 P0 latent bug:server 預設 dataDir =
<binary>/data,bundle 內解析成 Contents/Resources/bin/data/(空目錄),
實際 models.json + 8 個 .nef 住在 Contents/Resources/data/(上一層)。
Wails 又傳 --data-dir 成 user home(writable),同樣沒 models.json。
結果任何正式啟動路徑下 /api/models 都回 total: 0,M1-M7 smoke 從沒
跑過這個 endpoint 才漏抓。
修法:把「read-only bundle 內資料」和「writable user 資料」語意拆開。
- 新增 findFirstExisting(candidates, sentinel) helper
- 新增 resolveBuiltInDataDir:①VISIONA_BUNDLE_LIB_DIR/data(AppImage)
②<base>/data ③<base>/../data ④<base>/../Resources/data
⑤<base>/../lib/visiona-local/data(Linux FHS)。命中條件是
models.json 存在為 regular file,避開 Wails build artifact 留下的
空 data/ 目錄
- main() 拆 builtInDataDir(modelRepo + flash.Service 用)與 dataDir
(custom-models / sentinel / logs 用),職責分明
- flash.NewService 改吃 builtInDataDir — 它要解析 models.json 裡的
相對路徑 "data/nef/kl520/xxx.nef",來源是 bundle 不是 user home
- resolveBridgeScript 同步修(同樣的技術債一起清),候選 env var 優先
+ FHS fallback,避免 Linux AppImage 上 kneron_bridge.py 也找不到
- fallback 全 filepath.Abs 化,log.Printf 印嘗試過的路徑清單便於除錯
驗證(build / vet / test + smoke)全綠:
- macOS bundle:/api/models → 15 models ✅
- dev mode(server/ 下 go run):15 models ✅
- Linux AppImage 模擬 + env var:命中候選 1 ✅
- Linux AppImage 模擬 + 無 env var:命中候選 5(FHS)✅
- 全不命中:log 印完整 tried 清單 + server 不 crash ✅
Reviewer 兩輪通過。第一輪抓到 Linux AppImage 未覆蓋(Major-1)+ 2 Minor
+ 2 Suggestion;第二輪確認全部處理到位、新發現兩項非阻擋風格建議列為
技術債。報告見 .autoflow/05-implementation/reviews/review-m8-10a-*.md。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>