An interrupted atomic write can leave a player file truncated (0 bytes).
JSON.parse of such a file threw SyntaxError, which was unhandled and
crashed the whole presence process (cursors/Yjs/cookies all share it),
putting the canary into a crash loop.
Add tryReadJsonFile() that treats ENOENT and invalid JSON the same way
(as absent) and route readPlayerRecord, getLeaderboard and
sumAllBalances through it. A corrupt file is rebuilt on next access.
Add a regression test covering a truncated player file.
- Add translate feature (LibreTranslate integration) with preview dialog
in RoomInput and per-message translate action
- Add remote cursor pointers rendering in presence layer
- Add point-grid and plasma background options for start page
- Add BotsuLinks component and update nav layout
- Update settings state and General settings panel for new options
- Update tests for cursor-publisher, cursor-state, layout, background-options
Add a client document sync bridge on the authenticated presence websocket, with snapshot/patch handling, revisioned update publishing, conflict/gap resubscribe, and stale transport guards.
Wire shared BOTSU documents into the editor after import while preserving local recovery drafts.
Add authenticated document objects persisted on the BOTSU drive, opaque shared references for local drafts, and websocket document snapshots/patches.
Add synchronized cookie counter API/client slice and keep the canary UI icon updates covered by BOTSU tests.
Add a bounded accent-insensitive local search helper and expose a search field on the Documents list so local drafts can be found by title or document identifier.
Use the Matrix room name as the initial local BOTSU document title when creating a document from the workspace d+ control. Keep the title bounded and preserve immediate document links in the saved workspace summary.
Allow the room workspace editor to create a local BOTSU document and attach it as a valid Document tab in one action. Prevent orphan draft creation when the workspace tab limit is reached.
Add a strict local draft update helper and wire the document editor to auto-save changes on this device. Keep the UI honest about local-only persistence while adding editor coverage to test:botsu.
Restore the BOTSU left page panel, add the global BOTSU logo and panel icons, compact presence avatars, and make the conversation workspace bar button-only and visually discreet.
Add app-wide font selection, corner radius, custom accent color, extra themes, and bundled BOTSU display fonts through the existing Appearance settings surface.
Move /home/ to the community canvas surface and simplify the /botsu/ portal around the clock/search experience. Keep drawing explicitly toggleable while preserving the shared pixel canvas.