v0.3.0 — Readable progress, honest file states, no overlapping operations
A UX pass over the editor window and settings page, plus a correctness fix for operations that could run twice.
✨ What's new
📊 Progress that stays readable during parallel transfers
The gauge used to jump around because every worker reported its own view: a stale snapshot of the done counter, its own file name as the label, and its own byte fraction. Progress is now aggregated in one place — phases occupy fixed slices of a single 0→100% run, in-flight bytes are summed rather than overwritten, weighting is by size instead of file count (a 4 KB and a 4 GB file no longer move the bar equally), the label sticks to the longest-running file, and the reported value can never run backwards. The bar also stays live through the status re-check that follows a Push or Pull instead of parking at 100%.
🔵 New "not pushed" file state
The list only ever compared files against the manifest, which says nothing about whether a blob was uploaded — Track writes the hash immediately, so a file that had never left your disk showed as up to date. Blobs now get recorded as confirmed-in-storage when a Push uploads them (or finds them already there), a Pull downloads them, or Verify checks them, and the list gains a fourth not pushed state.
No network calls: the record lives under Library/UniLFS/ and is scoped per storage location, so repointing the project at another bucket does not inherit the old bucket's confirmations. Safe to delete — files fall back to not pushed until the next Push or Pull confirms them again.
🔐 A visible sign-in path
The sign-in button was buried in Project Settings, so an unconfigured project announced itself as a failed Push. UniLFS now asks once per editor session when a project tracks files but the provider is not ready, offering to sign in directly (Google Drive) or open the settings — silent when nothing is tracked, never shown in batch mode, and mutable per project. The UniLFS window shows the same thing as a banner with a direct sign-in button.
🐛 Fixes
- Operations can no longer run twice. The window and Auto Pull/Push each guarded only themselves, so a manual Push racing an Auto Push meant whichever saved the manifest last silently discarded the other's entries. Push / Pull / Restore / Track / Untrack / Status now share a process-wide lock.
- Project Settings layout — page padding and label width match built-in settings pages,
Secret Access KeyandClient Secret (project)no longer clip, wrapped help text is no longer cut to a single line, and the Google Drive account and folder rows line up with the fields above them. - Credentials are written on focus-out, not per keystroke. Saving user settings also rewrites the managed
.gitignoreblock, so typing a secret did that once per typed character. - Connection test failures are shown as errors, and each provider lists what is still missing before Push/Pull can work.
📦 Install / upgrade
https://github.com/Plumvery/UniLFS.git#v0.3.0
Full changelog: v0.2.0...v0.3.0