Linus Rath
0ed5fb148c
fix: never write telemetry defaults over a state file that can't be read #1066
2026-11-01 00:03:34 +01:00
Linus Rath
79e678716e
fix: stop running the background jobs while the shared store has lost its data #1066
2026-11-01 00:02:35 +01:00
Linus Rath
48ac0d9196
fix: keep the stored heartbeat schedule when the setup wizard sets telemetry consent #1066
2026-11-01 00:01:14 +01:00
Linus Rath
a87a9a5f6a
fix: flush account archives to disk before they replace the old file again #1066
2026-10-31 23:59:43 +01:00
Linus Rath
37696f9cf7
fix: answer 503 on the update status routes while the shared store is down #1066
2026-10-31 23:58:21 +01:00
Linus Rath
6d22814e5f
fix: move settings and plugin credentials that no longer decrypt aside instead of refusing every save #1066
...
The earlier fix answered 503 to every read and write of a settings file
or plugin vault that doesn't decrypt, so a rotated SESSION_SECRET left
the user with no way out: even disconnecting a plugin failed. Now such a
document reads as nothing stored, and the next write first moves it
aside, then saves as usual. The bytes are kept unchanged, so the data can
be restored with the old secret:
- local mode renames the file to `<file>.unreadable-<time>` next to it
- shared mode copies the document to `<id>.unreadable-<time>`, then
deletes the original only if it is still the same document
A settings file too short to hold anything reads as nothing stored and
is written over, as before 585e10041 . The 503 is now only for a shared
store that can't be reached or a file that can't be read at all.
Credentials the admin set up for a plugin no longer read the user's
vault, so they keep working when it can't be read, and the credential
list still reports their status.
2026-10-31 23:57:08 +01:00
Linus Rath
2130716d83
fix: keep the day's heartbeat when its payload can't be built and never report zero accounts while the store is down #1066
2026-10-31 23:51:19 +01:00
Linus Rath
63f4af27f5
fix: send one heartbeat when the scheduler lead moves after a stall or a crash #1066
2026-10-31 23:50:07 +01:00
Linus Rath
d425a873e2
fix: keep a replica that lost the scheduler lead from rearming the heartbeat or update check #1066
2026-10-31 23:47:31 +01:00
Linus Rath
ff6116e991
refactor: recognise a store outage with the shared-store helper in user data routes
2026-10-31 23:44:26 +01:00
Linus Rath
8b9df1b633
Merge branch 'feat/multi-instance' into feat/multi-instance-data
2026-10-31 23:43:48 +01:00
Linus Rath
9e2b59847f
refactor: recognise a shared-store outage by name, so every bundle's module copy sees it
2026-10-31 23:31:02 +01:00
Linus Rath
e8be930984
feat: import settings, plugin credentials, archives and telemetry state into the shared store #1066
2026-10-31 23:26:53 +01:00
Linus Rath
a0af628a6a
feat: run the telemetry heartbeat and update check on one instance of the deployment #1066
2026-10-31 23:25:12 +01:00
Linus Rath
fd1d90dc3a
fix: stop the old telemetry timer when an admin changes consent, so one heartbeat runs #1066
2026-10-31 23:11:48 +01:00
Linus Rath
eb0005f3ef
feat: share telemetry and update-check state across instances, with one instance id and login count #1066
2026-10-31 23:10:30 +01:00
Linus Rath
a1ce0d7ec8
fix: keep telemetry consent when its state file can't be read #1066
2026-10-31 23:05:14 +01:00
Linus Rath
7148dd2ded
feat: keep account archives in the shared store #1066
2026-10-31 23:04:02 +01:00
Linus Rath
741983c53c
feat: keep users' plugin credentials in the shared store without losing a concurrent save #1066
2026-10-31 23:00:42 +01:00
Linus Rath
9651098634
fix: keep both templates when two settings saves arrive at once #1066
2026-10-31 22:58:14 +01:00
Linus Rath
79d74d4900
feat: keep synced settings in the shared store so every instance serves the same ones #1066
2026-10-31 22:56:56 +01:00
Linus Rath
585e10041e
fix: refuse to save over stored settings or plugin credentials that no longer decrypt #1066
2026-10-31 22:54:35 +01:00
Linus Rath
fd4a319eae
feat: show the storage and how many instances checked in on the admin overview #1066
2026-10-31 22:46:08 +01:00
Linus Rath
c20ecd4b1a
refactor: let each store bring its own step for the shared-store import
2026-10-31 22:42:14 +01:00
Linus Rath
1b2d81be27
feat: hold each instance back until it has loaded from the shared store and add a readiness check #1066
2026-10-31 22:40:51 +01:00
Linus Rath
df90492258
feat: add a shared store that keeps today's files by default and can use a redis-protocol server #1066
2026-10-31 22:40:44 +01:00
Linus Rath
0571b8f2ec
fix: show pictures apple mail sends inline as attachments #1478
2026-10-31 22:08:56 +01:00
Linus Rath
35508913ac
feat: show marketplace screenshots above the versions and open them large on click
2026-10-31 18:55:05 +01:00
Linus Rath
5b8cf60bd9
ci: run the integration suite in the playwright image that matches the installed version
2026-10-31 18:53:00 +01:00
Linus Rath
521b0aedab
fix: stop naming a jmap metadata property in the demo client
2026-10-31 18:52:29 +01:00
Linus Rath
088a982218
test: expect 30 locales now that vietnamese is in
2026-10-31 18:50:55 +01:00
Linus Rath
1918d1010f
fix: word the vietnamese settings discard dialog like calendar and contacts
2026-10-31 18:50:29 +01:00
Linus Rath
d23a2869d1
Merge remote-tracking branch 'origin/main' into fix/found-fix-server
...
# Conflicts:
# Dockerfile
# docker-compose.yml
2026-10-31 18:17:39 +01:00
Linus Rath
f884ffe441
Merge branch 'fix/found-fix-ui' into fix/found-fix-server
2026-10-31 18:17:13 +01:00
Linus Rath
5fe7d1a65a
fix: keep existing compose volumes and add the two that were missing
2026-10-31 18:12:00 +01:00
Linus Rath
f6eb34c909
fix: remove the admin switch for user theme uploads, which users can't do
2026-10-31 18:10:03 +01:00
Linus Rath
136e6be8fd
refactor: drop the unused draft autosave interval setting
2026-10-31 18:07:16 +01:00
Linus Rath
fa9aad95b4
docs: describe where the push relay sends the account label
2026-10-31 18:06:08 +01:00
Linus Rath
9f0413d50b
docs: say in the Lite readme that sign-in with SSO works when Stalwart serves Lite
2026-10-31 18:04:57 +01:00
Linus Rath
88351b2333
fix: point the outgoing hosts list at the current usage stats and updates pages
2026-10-31 18:02:01 +01:00
Linus Rath
65015e1630
fix: describe when the unified mailbox section appears instead of the old empty header
2026-10-31 18:00:56 +01:00
Linus Rath
6fc3994aac
fix: keep plugin credentials and update-check state across container recreates
2026-10-31 18:00:13 +01:00
Linus Rath
100f6db309
fix: skip the setup wizard in demo mode without a mail server
2026-10-31 18:00:13 +01:00
Linus Rath
ae96b9e0aa
fix: say what the setup wizard's stalwart features switch turns on
2026-10-31 17:58:34 +01:00
Linus Rath
485e48648e
fix: stop promising offline support in the install prompt
2026-10-31 17:57:38 +01:00
Linus Rath
6a1da49f52
fix: let accessibility reset bring back the organisation's defaults and cover every option
2026-10-31 17:57:20 +01:00
Linus Rath
ddc24e4fc7
fix: let a browser an admin signed in from before past the shared admin login limit
2026-10-31 17:55:29 +01:00
Linus Rath
e15c335bec
fix: pick up admin changes saved by another replica without a restart
2026-10-31 17:54:40 +01:00
Linus Rath
48c8d37e37
fix: hide subscribe to calendar in lite, which can't fetch feeds
2026-10-31 17:52:28 +01:00
Linus Rath
825d6e76f8
fix: let admins switch off usage stats by clearing the collector address
2026-10-31 17:51:09 +01:00