Notatki wydania

Najnowsze aktualizacje i ulepszenia Songbook Buddy.

Version 1.0.23

August 11, 2026

Pobierz

A sync-reliability release fixing a permanent resync loop and a false "library was repaired" prompt on wiped devices:

  • Uploaded rows are no longer stored as pending. The generic outbox push uploaded the full local row without stamping its sync status, so pending — the local marker for "still waiting to be pushed" — was written into the server copy and pulled straight back down. The row then looked stranded, the 1.0.21 stranded-row rescue re-queued it, and that local write scheduled the next sync: a self-sustaining loop that resynced hundreds of rows on a library nobody had touched (one report: 765 rows, four cycles in a row). Uploads now strip the server-managed columns and stamp synced at the single choke point every full-row upload passes, and pulls assert synced on every row written locally, so the wedged state cannot be represented on the device whatever arrives from the server. Existing backlogs heal on the next pull with no migration, and because the push also repairs the stored server value, devices still running an older build stop looping without updating.
  • A device with no library is not "behind a library repair". "Wipe local database" deletes the device's library-generation marker along with everything else, and reading it back defaulted to generation 1 while the account's server generation stays where an earlier repair left it. "This device has no idea which generation it is on" was therefore indistinguishable from "this device is two generations behind", so every wiped or freshly installed device on a once-repaired account took the destructive catch-up path — prompting about unsynced changes an empty device cannot have, and on a send-only device raising a hard sync block it had no way to clear. A missing marker together with an empty library and an empty outbox is now recognised as a fresh device: it adopts the server generation and lets the ordinary full pull fetch the library. A library that has rows but no marker still gets the prompt, because those rows can genuinely be pushed at the wrong generation.
  • Smaller fixes: the release publisher no longer aborts one channel's publish because a different, deliberately retired channel still lists deleted artifacts — asset checks are now scoped to the channel being published, and a channel marked unavailable is skipped entirely.

Version 1.0.22

August 11, 2026


A fix release for chord spelling, enharmonic chord diagrams, silent DMX output and a stuck macOS modifier:

  • Transposed chords keep their scale degree. The tonic moves a fixed number of letter steps and every chord moves with it, so a D in a song in E now transposes to Bb in C rather than A#. Borrowed and diatonic chords are both spelled the way a chart spells them; where the degree-correct name would need a double accidental or one of B#/E#/Cb/Fb, the song's own preference decides instead.
  • Both spellings of a note reach the same chord diagrams. Db and C#, Gb and F# were separate namespaces in the chord lookup, so one of each pair fell through to calculated shapes while 254 of 260 curated fingerings sat unused. Reads now match either spelling for guitar, ukulele, banjo and mandolin, existing user grips and synced rows are found without a rename, and duplicate twins are folded away.
  • DMX output reports when it is being dropped. When the OS refuses the app's Art-Net datagrams, the DMX sidebar now shows a warning naming the likely cause (the "Local network" permission on iOS/macOS) instead of looking healthy while nothing reaches the fixtures. The automatic socket rebind now backs off exponentially (2 s → 60 s) rather than retrying every two seconds indefinitely, and resets on recovery or a new target address.
  • macOS: a stale ⌘ modifier heals itself. A lost key-up from a native menu or sheet could leave Command permanently "held", turning every plain keystroke in the editor into its shortcut until the app was switched away and back. The keyboard state is now reconciled against the engine after native menu callbacks and after each shell shortcut fires, so at most one keystroke misfires before typing works again.
  • Smaller fixes: support reports now record which modifier keys were held when a shortcut fired; the DMX rebind log pair is throttled so it no longer crowds the rest of the support log out of the tail; two macOS marketing-capture failures (an IFS leak and a first-launch Gatekeeper timeout) fixed in the build tooling.

Version 1.0.21

August 10, 2026


A reliability release: multi-device sync integrity, uninterrupted playback, and a working update check:

  • Sync updates carry only the fields you changed. An edit on one device no longer overwrites unrelated fields edited on another — every update path in the library now reports per-field changes.
  • Conflicts resolve by edit time, not upload time. An offline edit no longer loses to an older change that happened to reach the server later.
  • Stuck syncs recover on their own. A hung network request no longer blocks sync until restart, queued changes stranded as "pending" are re-enqueued, and bulk edits carry their record IDs.
  • Stable installs see updates again. The update check followed a channel preference that could point release installs at the beta feed and report "no update"; the channel now follows the build itself and the picker is gone.
  • Playback keeps playing. Starting autoscroll no longer stops running audio, and a background plan re-check no longer tears playback down.
  • Editor & import. A typed {duration: 3:45} survives the save path; the editor honours "Move field directives into controls"; the import dialog mirrors the typed title, artist and album live into the ChordPro preview.
  • Smaller fixes: support-report logs are no longer flooded by DMX frame traffic; artist-metadata healing stays local instead of re-uploading on every open; the iOS upload's export-compliance declaration is fixed; help, manuals and screenshots refreshed across all 22 languages.

Version 1.0.20

July 23, 2026


Songbook Buddy's first public (non-beta) release: the four-plan licensing model introduced across the 1.0.19 beta line goes stable, with account-less purchasing.

  • Four plans, hierarchical. Starter (free) · Basic (€7.99 one-time) · Pro (€29.99/year) · Pro Cloud (€79.99/year); each plan includes everything below it. The upgrade screen leads with your current plan and offers only the steps above it.
  • Buy without an account. Unlock a plan with PayPal without first creating a Sync account; add an email and password afterwards to protect the purchase, restore it on another device, and turn on sync.
  • Android direct download. A sideloadable Android build (its own applicationId and songbookbuddy-direct deep-link scheme) is published from the website for the PayPal purchase path, installing alongside the Play Store build.
  • Printing. Songbook and setlist printing are Pro; single-song print stays Basic. Setlist portability: .sbbl export (Pro) and import (free, merge), from the normal Import dialog.
  • Apple font collections on macOS. The font browser lists .ttc collections (Avenir Next, Optima, Palatino …) for use in songs, print and PDF.
  • Smaller fixes: a plan change made on the server — a refund or an expiry — now reaches the running app within seconds instead of waiting for the next launch; after paying with PayPal the browser returns to the app on its own; refunds restore the year they bought, not just a pointer; every paid tier grants the permanent Basic floor; restrictions no longer fire on an unhydrated tier (no "Starter library full" flash for paying users); nine upsells no longer told paying users to buy what they already own; export/print default filenames keep non-ASCII characters; a corrupt local database self-heals on open; band-song decrypt recovery; device-identity convergence ends the solo-owner band-key ping-pong; refreshed help, manuals and screenshots in all supported languages.