Releases: ElliotDrel/Universal-Spell-Check
Releases · ElliotDrel/Universal-Spell-Check
Universal Spell Check v0.4.0
docs: align overlay docs with per-phase status and Done-before-restore The loading overlay docs still described the old SetBusy(bool) contract. Updated for the SetPhase pipeline shipped in 9f95eb1 and 1f125ea: 1. architecture.md — pipeline steps now show the three SetPhase milestones (Copying at run start, Sending before the request, Receiving after the response) and that Done fires in RunAsync before the clipboard restore; the overlay section documents the per-phase text, the sized-to-widest-string/no-wrap layout, and the OverlayHost STA thread (which the section had never caught up with). 2. watchlist.md — Loading overlay marshalling entry rewritten for OverlayHost BeginInvoke queueing, plus the phase-to-visibility contract and a warning that hiding after the clipboard restore re-introduces the stuck-overlay-after-failure bug. 3. conventions.md, NATIVE_APP_FUTURE_TODO.md — SetBusy references renamed; the stuck-overlay troubleshooting note now points at Done-before-restore. 4. src/CLAUDE.md — manual check 5 verifies all three phase texts and that the label is always a single line. 5. overview.md — file-map line mentions the per-phase status text. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Universal Spell Check v0.3.1
fix: prevent replacements from cascading onto their own output "Burton Morgan Comp" was a case-sensitive prefix of its own canonical "Burton Morgan Competition", causing it to fire on already-correct text and produce "Competitionetition". Two fixes: 1. Remove "Burton Morgan Comp" from variants — it was the unsafe entry. 2. Rewrite ApplyReplacements to use a left-to-right positional scan that advances past the consumed variant, making cascading fires impossible. 3. Add load-time validation that detects and skips any variant that is a substring of its own canonical, logging replacements_variant_unsafe. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Universal Spell Check v0.3.0
docs: add clipboard-history exclusion step to pipeline description architecture.md's pipeline list omitted the new post-capture step and didn't note that the corrected paste write is left untagged so it stays in Win+V history. Bring it in line with the shipped flow. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Universal Spell Check v0.2.0
docs: align activity feed docs with shipped UI Update design and architecture docs to match the flat Activity feed, all-time stats bar, inline diff interactions, and paginated infinite scroll behavior. Also refresh UI runbook guidance and remaining native-path references. Co-authored-by: Cursor <cursoragent@cursor.com>
Universal Spell Check v0.1.7
fix: harden clipboard operations against transient lock contention Recent prod failures in Slack, Codex, and Chrome all collapsed to the same root cause: the clipboard path assumed every Clipboard.* call would succeed immediately. Under transient Windows clipboard contention that turned a recoverable lock into a hard capture or paste failure.\n\nThis change adds bounded retry around the clipboard operations that matter on the hot path: backup, sentinel write, capture polling reads, corrected-text publish, and restore. The behavior stays clipboard-first with the same Ctrl+V replacement model, but transient ExternalException cases now wait briefly and succeed instead of aborting the run.\n\nDocs were updated to match the actual dev app version stamping behavior in logs so channel and build attribution stays clear during prod/dev verification.
Universal Spell Check v0.1.6
fix: correct MSBuild target hook so Dev version actually embeds
SetDevVersionFromGit was running BeforeTargets="GenerateAssemblyInfo",
which fires after GetAssemblyAttributes has already created the
AssemblyAttribute items from InformationalVersion. The property was
being set correctly but the items were stale, so GenerateAssemblyInfo
wrote the old 1.0.0+{hash} value.
Fix: run AfterTargets="AddSourceRevisionToInformationalVersion"
BeforeTargets="GetAssemblyAttributes" so the override lands before
the items are created.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Universal Spell Check v0.1.4
Universal Spell Check v0.1.4
Universal Spell Check v0.1.3
v0.1.3 - hot-path speed optimization
Universal Spell Check v0.1.2
docs: add MIT license Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Universal Spell Check v0.1.1
feat: launch on Windows startup by default, toggleable in Settings Velopack does not register a login auto-start hook and our code didn't either, so v0.1.0 only ran when launched manually. The app is meant to be ambient — you press Ctrl+Alt+U and it Just Works — which only holds if it's already running. Default to enabled, but let users opt out from the dashboard. New StartupRegistration writes HKCU\...\Run\<MutexName> pointing at the running exe (the channel-specific mutex name keeps Prod and Dev from clobbering each other). On first launch after install, SpellCheckAppContext calls EnsureFirstRunRegistered which registers the entry and drops a startup.initialized flag in the per-channel AppData folder. The flag is what stops us from re-enabling the entry on every launch after a user has explicitly disabled it. The Settings page already had a Startup card with a disabled checkbox. Wire it up: the checkbox now reflects IsRegistered() on load and toggling it calls Register/Unregister. In Dev the checkbox is disabled with a tooltip explaining that dev builds are launched manually via dotnet run, since the dev exe path moves with each publish anyway. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>