Files
MyGoNavi/internal/app
Syngnat 663ef8259b 🐛 fix(app): 修复已存查询导入丢失 SQL 与连接配置并发写入互相覆盖
- saved_queries.Import 改为复制 file.Queries 再原地更新:原先直接引用底层数组,下标写会同时
  污染 file.Queries,使 replaceQueries 拿到的「磁盘旧快照」已含新值,比较 previous.SQL 相等
  而跳过写盘。同 ID 同名条目只改 SQL 时,元数据已更新但 .sql 文件仍是旧内容,新 SQL 永久丢失
- connections.json 增加包级互斥 savedConnectionsMu:savedConnectionRepository() 每次返回新
  实例,实例级锁无效。Save/Delete/Duplicate 与 migrateSavedConnectionSecrets 的
  load→修改→saveAll 序列纳入同一临界区,避免后写者用旧列表整体覆盖前写者导致连接静默丢失,
  以及 Delete 删除密文后被 Save 写回而产生的僵尸连接
- saveAll 改为临时文件 + Sync + 原子替换:os.WriteFile 先截断,进程在该窗口被杀会留下空的
  connections.json;原子替换后读者只会看到旧文件或完整新文件,只读路径无需加锁
- 补 4 项回归测试,均已确认在移除修复后必定失败(12 条并发保存、并发混合增删的 JSON 完整性、
  原子写无临时文件残留、同名改 SQL 的落盘)
2026-07-26 20:36:04 +08:00
..