TaskForge never overwrites a settings file it couldn't read
Shipped in version 3.0.0
TaskForge keeps your settings in a plain, readable file inside your workspace:
TaskForge/settings.json. Keeping it in the open is the point: you can edit it by
hand, keep it in version control, and sync it between machines.
That openness has a cost. A hand-edit can lose a bracket. A sync service can leave two copies behind. A file can arrive half-downloaded. This release makes TaskForge handle all three without ever destroying what you wrote.
A damaged file is kept, not replaced
Previously, if TaskForge couldn't understand your settings file, it carried on and overwrote it with whatever it had in memory the next time anything changed. If you had customized status symbols or renamed frontmatter fields, those went with it.
Now, a file TaskForge can't read is never written over. Instead it:
- stops saving settings to that workspace, so nothing can be lost;
- keeps your file exactly as it is;
- shows a banner telling you what happened and where the problem is (usually a line and column number), so you can go straight to it.
The banner gives you two ways out:
- Open the file: jump to it (or copy its location on mobile) and fix the problem yourself. As soon as it reads correctly, TaskForge picks it up and the banner disappears on its own.
- Replace with app settings: write a fresh file from the settings currently
loaded in the app. Your damaged file isn't deleted: it's kept alongside as
settings.broken-<date>.jsonso you can still recover anything from it.
It waits before deciding your file is broken
A file that hasn't finished downloading from iCloud looks exactly like a damaged one. So TaskForge doesn't take the first failed read at face value. It re-checks a few times, and only concludes something is wrong once the file has actually arrived, isn't empty, and has stopped changing.
If your workspace is just cold, or a sync is mid-flight, you'll never see a banner. It resolves itself and TaskForge carries on.
Widgets and shortcuts stop writing too
Your home screen widget, the Complete action on a notification, and the share sheet all write directly into your notes, using your workspace's conventions. If those conventions can't be read, they now refuse to write rather than guessing at the defaults. A tap gives you a brief message instead of putting the wrong text in your note. The checkbox snaps back so nothing looks like it worked when it didn't.
Command-line and AI-agent access is held back the same way, so nothing writes to your notes with settings TaskForge isn't sure about.
Conflicting copies are sorted out for you
When two devices change settings at once, sync services don't merge; they leave a
second file behind: settings 2.json, settings (conflicted copy).json, or
similar.
TaskForge now spots these on launch and keeps the most recently edited one, judged
by the timestamp written inside the file rather than the file's date on disk (sync
services rewrite that constantly). The copy that didn't win is kept as
settings.conflict-<date>.json. You get a short notice about what happened: no
dialog, nothing to dismiss before you can carry on. You didn't cause the conflict
and you shouldn't have to arbitrate it.
Old copies clean themselves up
The .broken-, .conflict- and .replaced- files are kept safely out of the way,
but they don't pile up forever. TaskForge removes them after 90 days, while always
keeping the three most recent of each kind, no matter how old, so the copy you're
most likely to need is always still there.
If the settings folder disappears
Delete the TaskForge folder while the app is running and everything keeps working
(your settings are cached in the app) and the folder comes back.
It doesn't come back instantly, and that's deliberate. Renaming the folder and deleting it look identical for the first moments, and recreating it too eagerly would leave a folder you'd just renamed stranded and invisible. TaskForge waits, then checks whether the folder simply moved. If it did, it follows it. If it's genuinely gone, it writes a fresh one.