Document server
- Bundle Euro-Office DocumentServer v9.3.4-hotfix.1 instead of ONLYOFFICE DocumentServer (still builds against upstream with ds_repo/ds_version)
- Fix blank PDF export — bundled font paths were absolute build-machine paths (#371, #251, #287)
- Verify the sha256 of the downloaded document server package, and stop extracting it world-writable
Saving
- Write documents back to Nextcloud while they are being edited, without waiting for cron (autosave_interval, 60s default, 0 to disable) (#100)
- Save the document immediately when the last editor leaves, instead of waiting for the background job (#100)
- Stop documentserver:flush and the cleanup job from consuming a live document's change list or deleting its folder under an open session
- Fix an off-by-one in the change index that could delete a live change on a deleteIndex-only save
- Fix co-authoring saves failing for the rest of the request after two editors collide on a change index (#392)
- documentserver:flush: exit 0 on success, keep going past a document that will not assemble, and add --snapshot
Editor features
- Make the editor's chat panel work (messages were dropped)
- Make the Save button work — "keep intermediate versions when editing" sent a command nothing handled
- Stop overwriting the admin's format settings on every page s instead of a stale list of 12, and re-seed existing installs
on upgrade (#387) - Fix live co-authoring dropping to no-updates when a second
Security
- Fetch imported images through Nextcloud's HTTP client, blocinternal addresses
- Cap the length of a stored chat message
- Rate limit the session-close endpoint and stop the page sen
Fixes and internals
- Fix the memcache IPC backend losing an in-flight message an
- Drop database indexes duplicated by a wider one (#353)
- Reorder the change-index unique constraint so MAX(change_ina scan
- Declare Change::$changeIndex — PHP 8.4 dynamic property dep
- Resolve command handlers through the app container instead r->query()
- Leave expired sessions out of a document's participant coun
- Answer 404 instead of an empty 200 for an api.js that was n
- Fix documentserver:fonts returning the opposite exit code
- Add a browser-driven regression test rig, run it plus unit