Linus Rath
4fd82437ad
fix: keep attachments alive through a flush and never destroy a copy that isn't ours
...
Review of the offline drafts found these.
- Every new message gets new part ids and old ones die with it, so an
open composer failed with `blobNotFound` after a flush. The client and
the flush re-read the draft and re-point parts once. The fake now
gives new part ids, which is why `drafts.test.ts` and
`drafts-client.test.ts` compare file contents instead of blob ids.
- A Message-ID alone could destroy another client's message. A copy now
has to be solely in Drafts, with `$draft`, close to the attempt, with
the same subject and size, and what the lookup saw is the destroy's
base. Ghosts ride on the replacing row and only queue once it's up.
`drafts.created` no longer queues a copy that arrived for a replaced
row, so its test now expects the next flush to do it.
- Turning offline off asks about device-only drafts too.
- A kept file can't read back empty: chunks of a kept file are left
alone, and `keptBlob` and `heldFile` refuse pieces that don't add up.
- A flush stopped by a passing failure tries again, the banner shows
waiting drafts, and under the flush lock a `sending` row counts as
left by a dead tab at once. A lookup refused for good no longer stops
the outbox.
- `FetchTransport` streams downloads and reports a broken transfer as
interrupted, so one bad file doesn't end the pass.
- Raw messages come after every file, only into free room, and a file
needing room pushes them out first.
- An old version in another login stays until the new one is up. An
online send of an unflushed stand-in still removes its submission.
2026-11-03 10:06:17 +01:00
..
2026-11-03 07:30:08 +01:00
2026-11-02 19:46:01 +01:00
2026-11-02 23:40:32 +01:00
2026-11-01 03:49:53 +01:00
2026-10-30 00:12:24 +01:00
2026-11-02 20:01:22 +01:00
2026-11-01 07:14:10 +01:00
2026-10-20 15:16:05 +02:00
2026-10-28 06:28:02 +01:00
2026-11-03 00:17:46 +01:00
2026-11-01 13:50:22 +01:00
2026-10-29 12:26:04 +01:00
2026-11-03 06:16:45 +01:00
2026-11-01 02:59:40 +01:00
2026-11-01 00:07:41 +01:00
2026-11-03 10:06:17 +01:00
2026-11-02 19:46:00 +01:00
2026-11-01 08:52:34 +01:00
2026-11-01 07:11:41 +01:00
2026-11-01 03:49:54 +01:00
2026-11-01 02:59:40 +01:00
2026-11-03 10:06:17 +01:00
2026-11-01 06:42:46 +01:00
2026-11-02 20:14:49 +01:00
2026-11-03 02:46:51 +01:00
2026-11-01 13:46:59 +01:00
2026-11-02 20:46:06 +01:00
2026-11-03 07:08:38 +01:00
2026-11-03 06:28:04 +01:00
2026-11-01 17:25:23 +01:00
2026-11-01 06:35:56 +01:00
2026-11-01 14:19:54 +01:00
2026-11-01 19:25:13 +01:00
2026-11-03 02:35:42 +01:00
2026-10-31 17:45:26 +01:00
2026-11-01 03:25:28 +01:00
2026-11-03 10:06:17 +01:00
2026-10-30 05:42:47 +01:00
2026-11-01 12:55:58 +01:00
2026-10-29 17:53:44 +01:00
2026-11-01 03:49:54 +01:00
2026-10-31 23:47:31 +01:00
2026-08-25 19:16:20 +02:00
2026-11-01 02:59:40 +01:00
2026-10-29 17:53:32 +01:00
2026-10-29 17:53:32 +01:00
2026-10-18 14:39:59 +02:00
2026-10-31 23:59:43 +01:00
2026-10-16 05:46:46 +02:00
2026-10-05 10:36:20 +02:00
2026-10-27 10:31:54 +01:00
2026-10-31 01:37:06 +01:00
2026-10-15 00:12:59 +02:00
2026-10-29 17:53:57 +01:00
2026-10-29 18:58:11 +01:00
2026-10-28 12:34:27 +01:00
2026-11-01 12:56:28 +01:00
2026-10-16 20:48:28 +02:00
2026-10-31 01:50:03 +01:00
2026-10-31 01:50:03 +01:00
2026-10-19 01:32:30 +02:00
2026-06-19 12:31:07 +02:00
2026-09-19 00:53:53 +02:00
2026-10-29 19:38:45 +01:00
2026-11-03 05:41:35 +01:00
2026-10-29 20:24:27 +01:00
2026-08-16 21:18:57 +02:00
2026-11-01 06:00:43 +01:00
2026-11-02 22:52:04 +01:00
2026-10-02 22:56:16 +02:00
2026-11-02 22:52:04 +01:00
2026-09-03 22:12:15 -07:00
2026-11-03 05:41:35 +01:00
2026-10-26 15:15:58 +01:00
2026-11-02 22:52:04 +01:00
2026-10-29 14:20:44 +01:00
2026-10-12 08:35:08 +02:00
2026-10-28 21:08:20 +01:00
2026-11-02 23:29:43 +01:00
2026-09-09 18:27:01 +02:00
2026-10-29 17:53:34 +01:00
2026-10-15 22:31:07 +02:00
2026-10-15 23:54:37 +02:00
2026-09-26 20:47:13 +02:00
2026-11-03 05:41:35 +01:00
2026-09-25 19:41:00 +02:00
2026-10-25 02:09:37 +02:00
2026-10-29 19:38:45 +01:00
2026-10-28 02:00:31 +01:00
2026-10-31 22:17:39 +01:00
2026-11-01 06:44:57 +01:00
2026-10-28 03:53:56 +01:00
2026-11-01 02:50:19 +01:00
2026-10-28 04:28:09 +01:00
2026-09-25 20:05:19 +02:00
2026-09-25 20:05:19 +02:00
2026-10-29 17:53:51 +01:00
2026-09-25 17:35:56 +02:00
2026-04-12 01:10:28 +02:00
2026-09-25 22:16:19 +02:00
2026-11-03 05:26:43 +01:00
2026-11-01 18:41:36 +01:00
2026-11-01 09:47:28 +01:00
2026-11-01 09:42:19 +01:00
2026-10-13 13:36:51 +02:00
2026-11-01 08:52:34 +01:00
2026-09-26 04:32:25 +02:00
2026-10-29 17:53:47 +01:00
2026-11-02 22:52:03 +01:00
2026-11-02 22:52:04 +01:00
2026-10-25 12:39:28 +01:00
2026-08-25 19:36:04 +02:00
2026-09-23 19:41:44 +02:00
2026-10-31 16:21:35 +01:00
2026-10-19 00:54:24 +02:00
2026-10-30 11:14:22 +01:00
2026-10-15 01:17:39 +02:00
2026-10-29 17:53:56 +01:00
2026-09-25 19:24:30 +02:00
2026-05-06 20:07:36 +02:00
2026-11-01 07:05:02 +01:00
2026-09-24 10:00:01 +02:00
2026-11-03 00:45:56 +01:00
2026-10-19 01:04:45 +02:00
2026-11-02 21:15:56 +01:00
2026-10-28 08:07:55 +01:00
2026-08-20 16:49:31 +02:00
2026-09-25 22:16:19 +02:00
2026-09-25 18:37:41 +02:00
2026-10-26 11:22:10 +01:00
2026-11-03 00:17:45 +01:00
2026-10-28 03:51:27 +01:00
2026-10-28 03:35:46 +01:00
2026-11-01 08:52:34 +01:00
2026-11-01 04:47:05 +01:00
2026-10-17 19:18:16 +02:00
2026-10-15 01:03:02 +02:00
2026-08-20 14:21:41 +02:00
2026-10-15 14:50:31 +08:00
2026-11-01 06:57:24 +01:00
2026-10-29 18:28:06 +01:00
2026-10-29 17:53:57 +01:00
2026-11-02 22:52:03 +01:00
2026-09-25 19:30:58 +02:00
2026-09-24 21:15:22 +02:00
2026-05-18 16:01:29 +02:00
2026-11-03 00:42:53 +01:00
2026-11-03 00:42:53 +01:00
2026-10-13 14:53:23 +02:00
2026-10-13 13:36:51 +02:00
2026-10-29 17:53:35 +01:00
2026-08-06 18:44:14 +02:00
2026-07-29 17:18:38 +02:00
2026-09-25 19:24:30 +02:00
2026-11-03 07:08:38 +01:00
2026-10-28 12:50:59 +01:00
2026-09-26 20:24:23 +02:00
2026-10-31 16:14:35 +01:00
2026-09-18 22:16:57 +02:00
2026-09-19 00:53:53 +02:00
2026-09-17 23:54:33 +02:00
2026-09-19 00:53:53 +02:00
2026-11-01 02:50:19 +01:00
2026-10-29 17:53:54 +01:00
2026-10-26 20:35:53 +01:00
2026-10-29 17:53:59 +01:00
2026-10-29 17:53:48 +01:00
2026-06-24 19:32:13 +02:00
2026-11-03 00:29:02 +01:00
2026-10-17 21:01:34 +02:00
2026-11-01 05:02:32 +01:00
2026-09-25 18:37:41 +02:00
2026-10-12 08:35:08 +02:00
2026-10-17 19:18:23 +02:00
2026-10-31 01:16:34 +01:00
2026-10-17 19:18:20 +02:00
2026-10-15 21:50:08 +02:00
2026-10-31 01:21:02 +01:00
2026-10-29 17:53:37 +01:00
2026-11-01 09:39:36 +01:00
2026-11-01 08:02:39 +01:00
2026-11-01 08:39:35 +01:00
2026-08-29 18:11:50 +02:00
2026-11-01 07:14:10 +01:00
2026-11-01 07:07:30 +01:00
2026-11-01 07:07:30 +01:00
2026-11-01 07:07:30 +01:00
2026-10-27 23:03:41 +01:00
2026-11-01 11:46:11 +01:00
2026-10-14 04:05:43 +02:00
2026-10-14 03:50:55 +02:00
2026-11-02 20:17:11 +01:00
2026-11-01 09:51:00 +01:00
2026-11-01 20:06:38 +01:00
2026-10-25 02:24:08 +01:00
2026-10-17 19:18:25 +02:00
2026-10-14 03:04:17 +02:00
2026-11-03 01:48:30 +01:00
2026-10-29 14:11:34 +01:00
2026-11-01 10:02:58 +01:00
2026-10-14 02:21:45 +02:00
2026-11-03 01:35:57 +01:00
2026-10-25 02:18:18 +02:00
2026-10-14 03:39:13 +02:00
2026-11-03 01:35:57 +01:00
2026-10-14 01:47:58 +02:00
2026-10-22 04:14:54 +03:00
2026-10-28 09:48:49 +01:00
2026-10-26 20:35:52 +01:00
2026-10-20 12:23:55 +02:00
2026-10-28 02:19:06 +01:00
2026-10-15 14:31:09 +02:00
2026-10-31 16:21:37 +01:00
2026-06-25 00:25:28 +02:00
2026-10-29 17:53:58 +01:00
2026-04-09 22:13:08 +02:00
2026-10-29 17:53:38 +01:00
2026-10-18 18:23:45 +02:00
2026-11-03 05:42:01 +01:00
2026-11-03 05:42:01 +01:00
2026-09-23 13:40:01 +02:00
2026-09-26 00:25:27 +02:00
2026-11-03 06:32:53 +01:00
2026-10-29 19:38:45 +01:00
2026-10-19 00:07:04 +02:00
2026-10-31 16:55:10 +01:00
2026-10-17 20:31:25 +02:00
2026-08-06 19:19:18 +02:00
2026-10-30 00:12:24 +01:00
2026-11-01 17:40:33 +01:00
2026-10-29 14:34:00 +01:00
2026-10-11 19:50:40 +02:00
2026-11-01 00:02:35 +01:00
2026-11-01 17:43:51 +01:00
2026-11-01 17:43:51 +01:00
2026-10-16 01:41:48 +02:00
2026-08-25 20:09:18 +02:00
2026-10-28 10:35:53 +01:00
2026-10-13 13:36:51 +02:00
2026-10-25 02:15:13 +02:00
2026-11-03 02:35:01 +01:00
2026-11-03 00:29:56 +01:00
2026-10-31 23:57:08 +01:00
2026-11-01 18:41:36 +01:00
2026-10-29 14:35:22 +01:00
2026-10-13 15:55:54 +02:00
2026-10-28 08:58:11 +01:00
2026-10-28 02:00:31 +01:00
2026-09-19 13:32:41 +02:00
2026-11-03 07:30:08 +01:00
2026-10-11 19:41:48 +02:00
2026-10-28 04:00:25 +01:00
2026-10-29 17:53:34 +01:00
2026-11-01 08:52:34 +01:00
2026-09-26 15:31:05 +02:00
2026-10-31 23:44:26 +01:00
2026-10-31 23:57:08 +01:00
2026-10-30 04:41:29 +01:00
2026-05-06 20:07:36 +02:00
2026-10-30 04:41:29 +01:00
2026-10-07 08:26:51 +03:00
2026-10-28 06:13:47 +01:00
2026-10-19 18:41:44 +02:00
2026-11-02 22:52:03 +01:00
2026-08-06 18:23:21 +02:00
2026-09-26 14:36:02 +02:00
2026-10-30 00:40:05 +01:00
2026-11-01 18:41:58 +01:00
2026-10-28 04:30:32 +01:00
2026-08-16 02:19:04 +02:00
2026-10-26 12:26:58 +01:00
2026-10-26 10:14:12 +01:00
2026-10-29 17:53:49 +01:00
2026-09-26 14:15:10 +02:00
2026-10-29 17:53:45 +01:00
2026-10-15 00:41:07 +02:00
2026-10-06 23:29:42 +02:00
2026-10-29 17:53:46 +01:00
2026-10-26 10:14:12 +01:00
2026-10-31 00:37:05 +01:00
2026-08-23 19:44:56 +06:00
2026-10-25 02:09:37 +02:00
2026-11-01 13:33:42 +01:00
2026-11-01 08:02:39 +01:00
2026-09-26 14:41:14 +02:00
2026-11-01 00:41:21 +01:00
2026-10-19 00:54:24 +02:00
2026-05-21 23:35:58 +02:00
2026-11-01 08:52:34 +01:00
2026-11-01 11:13:31 +01:00