Repository navigation
1.4.0 could fail to start, showing a black window. Update to this build; your data is fine.
What happened
The ledger held every v11 column while its recorded user_version still read 9. On open, the migration ran, tried to add signature_image again, and hit duplicate column name. Because main() opened the database before building any UI, the app never reached its first frame — hence a black window rather than an error.
Worse, it could not recover: the failed migration never advanced the version, so every subsequent launch failed in exactly the same way.
No data was lost or altered. The failure was in reading the schema, and every statement involved only ever added columns. Records, invoices, hours and clients were untouched throughout — this build opens the same file and finds everything where it was.
The fix
Schema version and actual columns drifting apart was always a state this app could reach — it has deliberately self-healed missing columns on every open for years, regardless of what the version says, and a file restored from a backup or arriving from another device can easily carry a version behind its own columns. The migrations assumed the opposite and used DDL that throws when a column is already there.
Every migration step is now idempotent: a column is added only when genuinely absent. A ledger in this state repairs itself on the next open and brings its version up to date, instead of failing forever.
Startup no longer hinges on that going well either. A ledger that cannot be opened now shows what went wrong and where the file is, in copyable text, rather than a black window that says nothing.
The regression test reproduces the shipped failure exactly — seed a ledger, wind only its version back, assert it opens and keeps its records. Against the old code it fails with the same duplicate column name seen in production.
Downloads
| File | For |
|---|---|
SoleLedger-1.4.1-arm64-v8a.apk |
Android phones and tablets (almost certainly this one) |
SoleLedger-1.4.1-armeabi-v7a.apk |
Older 32-bit Android devices |
SoleLedger-1.4.1-x86_64.apk |
Android emulators / x86 devices |
SoleLedger-1.4.1-macos.zip |
macOS (Apple silicon + Intel) |
If you installed 1.4.0 on more than one device, update both — an older build syncing its copy of the ledger back is a plausible way the version and columns got out of step in the first place.