What's Changed
🛡 Critical: Data Loss Fix
- New
StoreHardenercheckpoints any pending SwiftData-walsidecar into the main store before the app opens it. Data that would previously get stranded in the WAL across an in-app update is now merged at launch and can't be lost. - Explicit checkpoint on app termination, during in-app update install, and right after a backup restore.
- Removed the destructive auto-restore that ran when the model container failed to open. That code silently overwrote your current database with an older backup — the actual root cause of the recurring data loss reports. Open failures now fall back to a read-only in-memory session and leave your files untouched; you can still restore from Settings → Backup.
✨ New: Pre-Run Command (per task)
- A new optional "Pre-Run Command" block that executes in the same shell session as the main script. Great for
export https_proxy=…, loading environment variables, activating a Conda env, etc. - Disabled by default; flip the toggle on and a text editor appears.
🎨 Editor redesign
- The old "Script" tab is split into two cleaner tabs: Content (pre-run command + script source + validation) and Settings (shell, working directory, timeout, ignore exit code).
- 11 languages (EN / 简体 / 繁體 / 日本語 / 한국어 / Deutsch / Español / Français / Italiano / Bahasa / Русский) fully localized.
🔧 Misc
- Task duplication and JSON import/export now carry the pre-run command. Older JSON files without the field still import cleanly.
更新内容
🛡 关键:修复数据丢失问题
- 新增
StoreHardener,app 启动时先把遗留在-wal文件里的数据 checkpoint 合并进主库,确保下一步 SwiftData 打开到的是完整、自包含的数据库文件。以前在应用内更新前后,这部分 WAL 数据会被遗弃,是本次事故的直接触发源。 - 退出、应用内更新、备份恢复三条路径统一强制 checkpoint。
- 删除了打开失败时破坏性的"自动备份覆盖"逻辑——这才是反复丢数据的真正根因:容器打开一旦失败(哪怕只是临时锁冲突),旧代码会默默用备份覆盖当前文件。现在打开失败会降级到内存只读模式、保留原始文件,让你在"设置 → 备份"里自行决定是否恢复。
✨ 新功能:前置命令(每任务独立)
- "前置命令"与主脚本在同一个 Shell 会话中执行,适合
export https_proxy=…、加载环境变量、激活 Conda 环境等场景。 - 默认关闭,打开 Toggle 后才出现编辑框,不占视觉空间。
🎨 编辑器重构
- 旧的"脚本" tab 拆成两个:内容(前置命令 + 脚本源 + 校验) 和 设置(Shell、工作目录、超时、忽略退出码),布局更清爽。
- 11 种语言(EN / 简体 / 繁體 / 日本語 / 한국어 / Deutsch / Español / Français / Italiano / Bahasa / Русский)完整本地化。
🔧 其它
- 复制任务、JSON 导入导出同步带上前置命令;老版本导出的 JSON 仍可无缝导入。
Full Changelog: v1.3.7...v1.4.0