Repository navigation
TUFF v4.1.1
I audited the settings and SwiftUI binding paths after the feedback on Reddit. There was a real observation bug when editing a model that wasn't selected, along with some unnecessary binding glue.
- Settings for every model now update observable state immediately, including the memory estimates. Slider and text edits share the same coalesced persistence path.
- General settings and updater preferences use direct bindings. Custom bindings remain where they validate a model switch, preserve manual memory settings, or convert editor state.
- Pending settings survive changing the model directory or deleting the selected chat. Failed writes for non-selected profiles retain their retry state.
- GPU argmax helpers now ignore non-finite logits consistently and return token 0 when none are valid, instead of an invalid token ID.
- Removed a server concurrency warning by installing the idle handler on its channel event loop.
The repository includes the audit findings and the remaining coverage limits in docs/SETTINGS_AND_BINDING_AUDIT.md. Speculative decoding is still opt-in; this release makes no new performance claim.
Validation: 1,503 tests in 241 suites passed with the serial test runner. The release package is signature-checked and tested after ZIP extraction.
Requires Apple Silicon and macOS 15 or newer. Download the ZIP below and move TUFF.app to Applications. The app is ad-hoc signed, not notarized. The checksum and signed Sparkle update feed are attached.