0.9.4 — Separate local connection settings from learning data
Learning progress, answers, active sessions, courses, and ordinary preferences are now stored in the syncable plugin data.json without the model service address or API key. The API key and base URL are stored in the local, unencrypted config.json, which is excluded from Git and the release package.
When upgrading, Learning Coach migrates existing connection details to config.json, writes the new data format, and removes connection fields from local data backups and historical snapshots. If you synchronize plugin data between devices, keep config.json excluded and finish synchronization before switching devices; Learning Coach does not merge concurrent learning changes.
Validation
Passed: 91 automated tests, type checking and build, bundle and migration smoke checks, and 28 isolated real-Obsidian scenarios with 34 fixture HTTP requests. The release package check confirmed the archive contains only runtime files and no personal data or configuration. The Obsidian scenarios used a test vault and synthetic credentials; mobile layouts were emulated, not tested on a phone.