rcourtman
a0170d3252
Block silent downgrades on apply and give the updater a sanctioned rollback path
...
The in-app updater validated download URL and channel but never compared
the target against the running version, so any valid older release asset
URL installed silently while the UI presented it as an update. ApplyUpdate
now rejects targets at or below the running version on both the community
and Pro broker paths before any history entry or download, with an explicit
allowDowngrade opt-in on POST /api/updates/apply for sanctioned cases.
The rollback half already existed but nothing reached it: createBackup
retains three backups, restoreBackup works, and history records BackupPath,
yet no endpoint or UI called restoreBackup. RollbackToBackup restores the
retained backup recorded on a history entry after re-validating the path
against the managed backup roots, shares the update-in-flight slot with
ApplyUpdate, records an Action rollback history entry linked to the source
update, marks that update rolled_back, streams a restoring stage through
the existing status/SSE machinery, and restarts via the exit-for-systemd
path. POST /api/updates/rollback carries it with the same RequireAdmin plus
settings:write gating as apply. Rollback is purely local, so the Pro
edition gate never applies to it.
Settings now has the update history surface that was missing entirely:
nothing called /api/updates/history before. The Updates panel lists recent
updates with a Roll back action on successful entries whose backup is still
retained, behind a confirmation dialog naming the restore version, and the
rollback rides updateStore's shared pending-apply marker for the
post-restart toast. restoreBackup also honors PULSE_INSTALL_DIR now instead
of hardcoding /opt/pulse, matching createBackup.
Contract deltas ride along: api-contracts picks up the rollback transport
and downgrade-conflict semantics, agent-lifecycle and storage-recovery pin
rollback as server self-update plumbing, ai-runtime and cloud-paid pin the
update watcher stage vocabulary as non-assistant non-paid shell chrome, and
frontend-primitives adds UpdateHistorySection as the history/rollback
presentation owner with matching architecture proofs.
2026-07-10 01:46:08 +01:00
..
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-07-09 19:46:40 +01:00
2026-06-13 14:11:32 +01:00
2026-05-13 14:04:14 +01:00
2026-06-23 17:26:15 +01:00
2026-05-28 13:44:20 +01:00
2026-04-22 00:05:57 +01:00
2026-04-22 00:05:57 +01:00
2026-04-22 00:05:57 +01:00
2026-02-04 14:24:42 +00:00
2026-06-23 17:26:15 +01:00
2026-07-10 00:14:01 +01:00
2026-07-03 17:07:41 +01:00
2026-06-23 17:26:15 +01:00
2026-05-12 12:06:27 +01:00
2026-06-23 17:26:15 +01:00
2026-06-23 17:26:15 +01:00
2026-06-09 17:55:09 +01:00
2026-06-29 18:03:46 +01:00
2026-06-29 18:03:46 +01:00
2026-07-02 23:27:49 +01:00
2026-07-05 17:21:34 +01:00
2026-06-12 10:46:38 +01:00
2026-06-12 10:46:38 +01:00
2026-02-04 13:43:28 +00:00
2026-06-23 17:26:15 +01:00
2026-06-23 17:26:15 +01:00
2026-06-23 17:26:15 +01:00
2026-07-10 00:29:10 +01:00
2026-07-10 00:14:01 +01:00
2026-06-23 17:26:15 +01:00
2026-04-22 22:57:08 +01:00
2026-03-24 23:59:52 +00:00
2026-03-27 08:39:59 +00:00
2026-06-23 17:26:15 +01:00
2026-06-04 11:23:05 +01:00
2026-06-23 19:38:22 +01:00
2026-03-18 16:06:30 +00:00
2026-06-23 17:26:15 +01:00
2026-03-18 16:06:30 +00:00
2026-01-25 21:08:44 +00:00
2026-06-09 21:42:21 +01:00
2026-06-23 17:26:15 +01:00
2026-03-19 04:04:14 +00:00
2026-06-23 17:26:15 +01:00
2026-04-09 20:15:17 +01:00
2026-04-11 16:47:37 +01:00
2026-06-23 17:26:15 +01:00
2026-06-25 08:49:29 +01:00
2026-03-18 16:06:30 +00:00
2026-05-15 22:45:48 +01:00
2026-03-18 16:06:30 +00:00
2026-06-07 00:06:34 +01:00
2026-07-01 10:38:57 +01:00
2026-07-01 10:38:57 +01:00
2026-04-28 15:49:18 +01:00
2026-06-03 12:29:37 +01:00
2026-03-26 17:12:27 +00:00
2026-04-11 16:47:37 +01:00
2026-03-18 16:06:30 +00:00
2026-06-27 14:43:09 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-28 15:10:39 +01:00
2026-06-27 14:43:09 +01:00
2026-01-25 21:08:44 +00:00
2026-05-08 02:21:31 +01:00
2026-06-30 10:37:54 +01:00
2026-06-23 17:26:15 +01:00
2026-03-18 16:06:30 +00:00
2026-06-29 22:27:01 +01:00
2026-07-02 23:27:49 +01:00
2026-03-28 21:14:54 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-07-09 19:46:40 +01:00
2026-07-07 20:37:18 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-11 16:47:37 +01:00
2026-03-25 00:36:47 +00:00
2026-01-24 22:42:23 +00:00
2026-07-09 20:10:08 +01:00
2026-05-28 14:49:20 +01:00
2026-05-04 00:16:31 +01:00
2026-05-04 00:16:31 +01:00
2026-02-04 09:52:32 +00:00
2026-03-24 23:59:52 +00:00
2026-07-09 20:10:08 +01:00
2026-03-18 16:06:30 +00:00
2026-06-10 11:37:39 +01:00
2026-06-10 11:37:39 +01:00
2026-03-18 16:06:30 +00:00
2026-06-29 22:43:13 +01:00
2026-06-26 22:52:28 +01:00
2026-03-18 16:06:30 +00:00
2026-05-05 12:59:59 +01:00
2026-05-03 12:25:56 +01:00
2026-05-03 12:25:56 +01:00
2026-04-01 01:04:06 +01:00
2026-02-02 18:59:44 +00:00
2026-06-23 17:26:15 +01:00
2026-06-23 17:26:15 +01:00
2026-06-02 12:45:48 +01:00
2026-06-02 17:34:10 +01:00
2026-07-09 20:10:08 +01:00
2026-03-26 20:51:29 +00:00
2026-05-04 09:47:54 +01:00
2026-07-09 20:10:08 +01:00
2026-05-04 23:16:15 +01:00
2026-03-18 16:06:30 +00:00
2026-06-10 17:48:11 +01:00
2026-03-18 16:06:30 +00:00
2026-04-22 01:03:10 +01:00
2026-04-09 20:15:17 +01:00
2026-06-04 14:07:14 +01:00
2026-03-18 16:06:30 +00:00
2025-12-01 23:50:10 +00:00
2026-06-12 12:10:54 +01:00
2026-06-03 22:40:30 +01:00
2026-06-09 21:42:21 +01:00
2025-12-01 14:46:00 +00:00
2026-03-18 16:06:30 +00:00
2026-04-19 20:42:22 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2025-12-02 17:21:48 +00:00
2026-04-22 20:26:15 +01:00
2026-03-18 16:06:30 +00:00
2026-07-07 10:10:16 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-28 20:35:10 +00:00
2026-03-18 16:06:30 +00:00
2026-07-07 09:49:26 +01:00
2026-07-07 09:49:26 +01:00
2026-06-09 21:42:21 +01:00
2026-07-07 09:49:26 +01:00
2026-01-25 21:08:44 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-07-09 09:56:04 +01:00
2026-07-09 09:56:04 +01:00
2026-04-10 12:33:57 +01:00
2026-03-18 16:06:30 +00:00
2026-07-09 23:20:35 +01:00
2026-07-09 23:20:35 +01:00
2026-07-06 10:08:36 +01:00
2026-05-14 00:22:18 +01:00
2026-05-14 00:22:18 +01:00
2026-05-25 18:20:11 +01:00
2026-05-06 14:25:36 +01:00
2026-05-25 18:20:11 +01:00
2026-07-09 19:46:40 +01:00
2026-07-09 19:46:40 +01:00
2026-07-09 23:20:35 +01:00
2026-07-10 01:28:33 +01:00
2026-03-18 16:06:30 +00:00
2026-04-26 15:27:10 +01:00
2026-04-26 15:27:10 +01:00
2026-05-04 09:14:09 +01:00
2026-04-11 17:20:58 +01:00
2026-05-05 12:59:59 +01:00
2026-06-03 12:29:37 +01:00
2026-05-04 09:14:09 +01:00
2026-05-04 09:14:09 +01:00
2026-05-05 12:59:59 +01:00
2026-07-09 19:46:40 +01:00
2026-03-18 16:06:30 +00:00
2026-07-07 10:10:16 +01:00
2026-06-23 17:26:15 +01:00
2026-04-30 09:23:40 +01:00
2026-07-07 10:10:16 +01:00
2026-07-07 10:10:16 +01:00
2026-03-18 16:06:30 +00:00
2026-05-20 14:54:19 +01:00
2026-06-05 09:21:53 +01:00
2026-03-24 16:05:19 +00:00
2026-06-02 23:54:48 +01:00
2026-03-18 16:06:30 +00:00
2026-06-02 23:54:48 +01:00
2025-11-29 17:06:18 +00:00
2026-06-10 10:52:05 +01:00
2026-06-13 11:50:09 +01:00
2026-06-13 14:11:32 +01:00
2026-04-30 09:13:04 +01:00
2026-06-10 10:52:05 +01:00
2026-03-28 20:35:10 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-25 23:40:22 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-06-03 12:29:37 +01:00
2026-04-22 04:23:23 +01:00
2026-05-13 00:28:24 +01:00
2026-05-13 00:28:24 +01:00
2026-03-18 16:06:30 +00:00
2026-07-07 09:54:14 +01:00
2026-07-08 14:36:55 +01:00
2026-01-25 21:08:44 +00:00
2026-06-10 10:52:05 +01:00
2026-03-18 16:06:30 +00:00
2026-06-02 17:34:10 +01:00
2026-04-05 13:18:30 +01:00
2026-04-28 15:49:18 +01:00
2026-04-28 15:49:18 +01:00
2026-04-28 16:36:09 +01:00
2026-03-18 16:06:30 +00:00
2026-05-04 09:33:19 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-10 12:54:12 +01:00
2026-07-07 16:35:07 +01:00
2026-07-07 22:04:46 +01:00
2026-03-18 16:06:30 +00:00
2026-05-05 12:59:59 +01:00
2026-03-18 16:06:30 +00:00
2026-06-10 10:52:05 +01:00
2026-04-28 19:12:21 +01:00
2026-04-11 16:47:37 +01:00
2026-07-04 22:44:43 +01:00
2026-06-26 13:00:42 +01:00
2026-05-05 12:59:59 +01:00
2026-04-28 19:12:21 +01:00
2026-07-10 00:14:01 +01:00
2026-07-07 21:46:07 +01:00
2026-04-16 10:17:37 +01:00
2026-07-07 21:46:07 +01:00
2026-07-07 21:46:07 +01:00
2026-06-11 08:44:35 +01:00
2026-06-11 13:12:59 +01:00
2026-06-11 13:10:16 +01:00
2026-03-18 16:06:30 +00:00
2026-02-02 22:02:22 +00:00
2025-12-12 11:05:24 +00:00
2026-04-22 00:39:53 +01:00
2026-05-04 22:43:35 +01:00
2026-07-09 20:10:08 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-15 13:40:24 +01:00
2026-05-12 21:10:58 +01:00
2026-05-12 21:10:58 +01:00
2026-06-09 21:42:21 +01:00
2026-06-10 10:52:05 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-01-19 19:26:18 +00:00
2025-12-10 00:29:07 +00:00
2026-06-09 21:42:21 +01:00
2026-07-07 20:37:18 +01:00
2026-05-10 22:59:23 +01:00
2026-06-03 12:29:37 +01:00
2026-06-23 17:26:15 +01:00
2026-03-18 16:06:30 +00:00
2026-06-03 12:29:37 +01:00
2026-03-18 16:06:30 +00:00
2026-06-23 17:26:15 +01:00
2026-04-22 05:42:45 +01:00
2026-04-22 05:42:45 +01:00
2026-03-18 16:06:30 +00:00
2026-04-11 16:47:37 +01:00
2026-04-11 16:47:37 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-06-09 21:42:21 +01:00
2026-06-03 12:29:37 +01:00
2026-06-03 12:29:37 +01:00
2026-06-03 12:29:37 +01:00
2026-04-23 23:04:03 +01:00
2026-06-11 13:12:59 +01:00
2026-03-18 16:06:30 +00:00
2026-01-25 21:08:44 +00:00
2026-02-02 22:02:22 +00:00
2025-12-02 16:47:13 +00:00
2026-02-04 15:10:02 +00:00
2026-06-10 10:53:57 +01:00
2026-06-10 10:53:57 +01:00
2026-03-18 16:06:30 +00:00
2026-07-07 09:54:14 +01:00
2026-04-29 16:25:09 +01:00
2026-07-09 09:52:59 +01:00
2026-07-09 09:52:59 +01:00
2026-04-22 05:42:45 +01:00
2026-04-01 16:36:44 +01:00
2026-04-22 05:42:45 +01:00
2026-03-18 16:06:30 +00:00
2026-07-07 15:12:59 +01:00
2026-07-07 15:12:59 +01:00
2026-05-25 09:25:03 +01:00
2026-05-25 09:25:03 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-05 12:59:59 +01:00
2026-05-25 21:47:12 +01:00
2026-05-25 21:47:12 +01:00
2026-04-22 00:39:53 +01:00
2026-06-10 10:52:05 +01:00
2026-05-25 21:38:43 +01:00
2026-05-21 15:15:23 +01:00
2026-05-21 15:15:23 +01:00
2026-06-23 17:26:15 +01:00
2026-01-19 19:26:18 +00:00
2026-06-23 17:26:15 +01:00
2026-06-13 14:11:32 +01:00
2026-06-13 14:11:32 +01:00
2026-03-18 16:06:30 +00:00
2026-02-04 14:35:08 +00:00
2026-05-04 09:33:19 +01:00
2026-04-08 20:42:36 +01:00
2026-06-10 10:52:05 +01:00
2026-05-16 13:57:53 +01:00
2026-03-18 16:06:30 +00:00
2026-03-26 20:51:29 +00:00
2026-03-26 20:51:29 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-06-03 23:14:25 +01:00
2026-03-27 12:04:44 +00:00
2026-04-22 00:39:53 +01:00
2026-03-18 16:06:30 +00:00
2026-02-02 18:59:44 +00:00
2026-02-02 23:01:29 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-07-07 20:37:18 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-26 17:26:16 +01:00
2026-01-22 00:30:15 +00:00
2026-06-09 21:42:21 +01:00
2026-06-10 10:52:05 +01:00
2026-02-04 15:01:09 +00:00
2026-04-22 00:39:53 +01:00
2026-05-01 21:36:28 +01:00
2026-07-02 22:34:37 +01:00
2026-07-01 10:38:57 +01:00
2026-06-06 18:32:21 +01:00
2026-06-06 18:32:21 +01:00
2026-04-30 12:53:29 +01:00
2026-04-11 16:47:37 +01:00
2026-04-11 16:47:37 +01:00
2026-05-16 13:57:53 +01:00
2026-07-09 17:22:29 +01:00
2026-07-09 17:22:29 +01:00
2026-06-10 17:48:11 +01:00
2026-06-10 17:48:11 +01:00
2026-03-25 22:27:35 +00:00
2026-06-10 17:10:30 +01:00
2026-03-26 09:15:15 +00:00
2026-03-26 22:58:27 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-02-04 10:28:41 +00:00
2026-06-25 20:20:35 +01:00
2026-03-18 16:06:30 +00:00
2026-05-13 14:19:59 +01:00
2026-06-23 17:26:15 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-06-04 21:56:36 +01:00
2026-06-25 20:20:35 +01:00
2026-07-10 01:46:08 +01:00
2026-03-18 16:06:30 +00:00
2026-04-26 17:26:16 +01:00
2026-03-18 16:06:30 +00:00
2026-04-26 15:27:10 +01:00
2026-04-28 16:36:09 +01:00
2026-03-26 17:12:27 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-22 01:18:33 +01:00
2026-04-18 00:06:50 +01:00
2026-04-23 23:04:03 +01:00
2026-04-23 23:04:03 +01:00
2026-06-09 21:42:21 +01:00
2026-05-03 12:25:56 +01:00
2026-03-18 16:06:30 +00:00
2026-07-07 16:35:07 +01:00
2026-06-09 21:42:21 +01:00
2026-02-04 10:28:41 +00:00
2026-02-04 10:28:41 +00:00
2026-05-09 23:04:22 +01:00
2026-02-04 10:28:41 +00:00
2026-04-22 00:39:53 +01:00
2026-06-07 18:01:55 +01:00
2026-03-26 21:43:30 +00:00
2026-04-26 17:26:16 +01:00
2026-03-26 21:43:30 +00:00
2026-03-26 21:43:30 +00:00
2026-06-23 17:26:15 +01:00
2026-05-07 21:58:06 +01:00
2026-05-07 21:58:06 +01:00
2026-03-18 16:06:30 +00:00
2026-07-10 01:28:33 +01:00
2026-03-18 16:06:30 +00:00
2026-04-28 16:36:09 +01:00
2026-04-26 17:26:16 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-07-07 20:37:18 +01:00
2026-07-03 17:07:41 +01:00
2026-07-10 01:46:08 +01:00
2026-06-29 17:39:11 +01:00
2026-03-18 16:06:30 +00:00
2026-06-03 14:42:43 +01:00
2026-06-26 22:15:48 +01:00
2026-03-18 16:06:30 +00:00
2026-07-09 20:10:08 +01:00
2026-07-07 16:35:07 +01:00
2026-05-21 16:26:00 +01:00
2026-05-03 13:19:51 +01:00
2026-07-09 20:10:08 +01:00
2026-05-03 12:48:01 +01:00
2026-04-29 16:25:09 +01:00
2026-04-01 12:00:31 +01:00
2026-05-21 16:15:53 +01:00
2026-07-09 19:46:40 +01:00
2026-07-10 01:28:33 +01:00
2026-03-30 09:52:07 +01:00
2026-07-10 01:28:33 +01:00
2026-05-04 00:50:14 +01:00
2026-07-10 01:28:33 +01:00
2026-07-10 01:28:33 +01:00
2026-07-10 01:28:33 +01:00
2026-06-03 12:29:37 +01:00
2026-07-01 09:55:35 +01:00
2026-03-24 23:59:52 +00:00
2026-03-18 16:06:30 +00:00
2026-05-04 00:50:14 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-04 00:50:14 +01:00
2026-07-09 20:10:08 +01:00
2026-07-07 16:35:07 +01:00
2026-07-07 16:35:07 +01:00
2026-07-07 16:35:07 +01:00
2026-07-07 10:10:16 +01:00
2026-06-11 13:12:59 +01:00
2026-04-11 14:51:10 +01:00
2026-05-03 12:48:01 +01:00
2026-07-07 22:04:46 +01:00
2026-04-01 16:36:44 +01:00
2026-07-09 19:46:40 +01:00
2026-07-09 19:46:40 +01:00
2026-03-18 16:06:30 +00:00
2026-06-04 14:07:14 +01:00
2026-05-05 12:59:59 +01:00
2026-05-05 12:59:59 +01:00
2026-06-03 12:29:37 +01:00
2026-04-07 10:24:53 +01:00
2026-03-18 16:06:30 +00:00
2026-06-03 12:29:37 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-06-09 21:42:21 +01:00
2026-04-26 17:26:16 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-06-10 11:37:39 +01:00
2026-06-23 17:26:15 +01:00
2026-07-02 11:50:03 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-02-04 14:48:03 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-04 23:16:15 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-28 16:36:09 +01:00
2026-03-29 19:50:31 +01:00
2026-03-29 20:36:43 +01:00
2026-03-29 20:13:39 +01:00
2026-06-09 21:42:21 +01:00
2026-06-10 10:52:05 +01:00
2026-03-18 16:06:30 +00:00
2026-06-03 14:42:43 +01:00
2026-06-04 11:49:17 +01:00
2026-03-18 16:06:30 +00:00
2026-06-04 14:07:14 +01:00
2026-07-05 17:21:34 +01:00
2026-06-02 10:15:35 +01:00
2026-06-04 08:39:31 +01:00
2026-05-29 14:51:18 +01:00
2026-05-29 14:19:04 +01:00
2026-03-18 16:06:30 +00:00
2026-06-03 12:29:37 +01:00
2026-03-18 16:06:30 +00:00
2026-06-02 23:54:48 +01:00
2026-06-03 09:18:07 +01:00
2026-06-03 09:18:07 +01:00
2026-07-10 01:46:08 +01:00
2026-07-10 01:46:08 +01:00
2026-03-18 16:06:30 +00:00
2026-04-22 03:06:22 +01:00
2026-06-09 21:42:21 +01:00
2026-06-10 10:52:05 +01:00
2026-06-03 12:29:37 +01:00
2026-04-22 04:46:13 +01:00