Release mvmOS 0.28.0-beta with app isolation, a Platform API and premium without a backend.
App server code now lives in apps/<id>/api.py and desktop.py beside public/, and runs confined to its own folder: open() and sqlite3.connect() reject any path outside apps/<id>/, so an app can no longer read core data.db or another app's files. What an app legitimately needs from mvmOS it asks for through the new /api/platform/ endpoints. An app folder is no longer a document root either — /apps/<id>/<file> serves apps/<id>/public/<file>, leaving data.db, db.json and the app's own server code with no URL that reaches them.
Premium builds move to apps/<id>/premium/ and no longer require an app to have a backend. Installing or updating an app now wipes any existing premium build and re-fetches it only when the installation holds a valid licence, so a lapsed subscription removes the code and a stale build can never survive an update. GET /api/platform/premium reports licence and build state for the UI.
All databases open with WAL and a busy timeout, so reads no longer block behind a write and simultaneous writes queue instead of failing. Start Menu search no longer lists core apps twice and waits for three characters before replacing the menu. WAL sidecar files are gitignored.