jmoore-skild
be8e8d545f
fix(backup): don't let an old backup commit blank an archive's owner ( #2656 )
...
`created_by_id` and `deleted_at` both went into the archive `fields` dict
unconditionally, via `entry.get(...)`. A backup commit taken before the
collector wrote those keys carries neither, so `.get` yielded None for both
and the overwrite branch — a blanket `setattr` over every key — wrote NULL
over a live owner.
That is exactly the failure carrying `created_by_id` was added to fix, only
now inflicted on rows that were fine: `_ensure_archive_visible` fails closed
on a NULL owner, so the archive 404s for the person who owns it. It emitted
no note either, because `archivesOwnerCleared` only fires for an id that
isn't in `valid_users`, not for an absent key — and the row still counted as
restored. `deleted_at` had the mirror problem: an old commit silently
un-deleted, since `archivesUndeleted` reads the same absent value.
Absent is not the same as explicitly null. Both keys now only enter `fields`
when the entry actually carries them, so an old commit leaves the column
alone on overwrite and a current one can still say "this archive has no
owner" or "this archive is live". Same shape as the tag-column rule: don't
clear what the backup doesn't know about.
Behaviour change to an existing test, called out deliberately:
`test_overwrite_undeletes_a_locally_deleted_archive_and_says_so` now has to
put `deleted_at: None` in the entry to mean it.
Tests: 2 regression (owner and deleted_at both left alone by a key-less
entry) + 2 controls (an explicit null is still honoured, with its note).
Both regressions confirmed failing against the pre-fix service.
2026-08-04 08:57:34 -04:00
..
2026-06-06 10:41:28 +02:00
2026-08-04 12:38:36 +02:00
2026-07-01 09:50:30 +02:00
2026-07-29 08:40:42 +02:00
2026-07-22 09:57:27 +02:00
2026-06-04 11:30:26 +02:00
2026-07-18 08:11:44 +02:00
2026-07-18 13:06:01 +02:00
2026-07-29 11:51:30 +02:00
2026-07-19 09:29:54 +02:00
2026-06-03 10:14:57 +02:00
2026-07-21 08:46:02 +02:00
2026-05-30 13:49:09 +02:00
2026-06-20 12:07:20 +02:00
2026-07-16 15:21:47 +02:00
2026-07-30 10:31:22 +02:00
2026-05-22 10:02:41 +02:00
2026-07-30 12:52:11 +02:00
2026-07-30 12:35:27 +02:00
2026-07-30 10:31:22 +02:00
2026-06-06 13:40:56 +02:00
2026-08-03 08:52:23 +02:00
2026-06-25 09:00:57 +02:00
2026-07-21 07:26:19 +02:00
2026-07-28 15:05:28 +02:00
2026-05-24 12:51:24 +02:00
2026-08-03 15:12:02 +02:00
2026-07-30 16:31:09 +02:00
2026-07-31 14:28:17 +02:00
2026-05-15 15:43:37 +02:00
2026-07-18 16:15:09 +02:00
2026-05-08 11:52:42 +02:00
2026-07-18 13:48:14 +02:00
2026-07-28 14:49:50 +02:00
2026-05-24 10:16:30 +02:00
2026-07-30 16:31:09 +02:00
2026-07-30 16:31:09 +02:00
2026-07-30 13:05:15 +02:00
2026-06-05 13:53:26 +02:00
2026-05-29 10:55:41 +02:00
2026-05-24 08:49:21 +02:00
2026-06-09 07:38:59 +02:00
2026-07-18 16:15:09 +02:00
2026-05-28 08:40:43 +02:00
2026-07-31 09:30:06 +02:00
2026-07-31 12:55:05 +02:00
2026-06-06 13:30:13 +02:00
2026-07-13 09:18:17 +02:00
2026-06-19 11:29:07 +02:00
2026-08-04 08:57:34 -04:00
2026-07-27 12:53:43 +02:00
2026-07-31 16:59:33 +02:00
2026-08-04 08:57:34 -04:00
2026-05-08 14:06:40 +02:00
2026-06-20 12:07:20 +02:00
2026-07-18 13:48:14 +02:00
2026-07-24 11:17:19 +02:00
2026-07-30 17:34:13 +01:00
2026-06-02 14:51:08 +02:00
2026-06-02 14:51:08 +02:00
2026-05-22 10:22:14 +02:00
2026-07-12 08:44:53 +02:00
2026-06-22 14:23:30 +02:00
2026-06-17 11:33:23 +02:00
2026-06-17 11:33:23 +02:00
2026-08-02 11:17:49 +02:00
2026-07-14 11:29:56 +02:00
2026-07-14 11:29:56 +02:00
2026-07-14 10:35:58 +02:00
2026-06-02 10:02:17 +02:00
2026-06-02 10:02:17 +02:00
2026-06-02 12:42:16 +02:00
2026-06-20 08:28:44 +02:00
2026-07-31 13:39:17 +02:00
2026-07-28 21:05:29 +00:00
2026-07-28 21:05:29 +00:00
2026-08-01 11:37:01 +02:00
2026-05-15 08:50:37 +02:00
2026-05-15 08:50:37 +02:00
2026-05-15 08:50:37 +02:00
2026-05-15 08:50:37 +02:00
2026-05-08 11:52:42 +02:00
2026-07-31 16:59:33 +02:00
2026-06-25 14:54:27 +02:00
2026-08-02 11:09:32 +02:00
2026-07-29 11:33:09 -05:00
2026-07-11 14:22:31 +02:00
2026-07-30 16:31:09 +02:00
2026-05-17 09:30:02 +02:00
2026-08-03 14:53:21 +02:00
2026-05-20 08:12:17 +02:00
2026-06-09 09:16:36 +02:00
2026-07-28 11:16:22 -05:00
2026-08-01 10:35:22 +02:00
2026-08-02 10:23:09 +02:00
2026-05-21 08:30:17 +02:00
2026-06-20 12:55:24 +02:00
2026-05-04 10:34:36 +02:00
2026-07-17 10:02:19 +02:00
2026-06-08 08:18:13 +02:00
2026-06-11 09:23:03 +02:00
2026-06-25 11:07:29 +02:00
2026-07-18 13:06:01 +02:00
2026-05-05 16:00:22 +02:00
2026-06-22 14:13:44 +02:00
2026-07-20 11:52:18 +02:00
2026-07-20 11:52:18 +02:00
2026-05-25 09:04:47 +02:00
2026-06-02 12:12:54 +02:00
2026-07-07 12:17:46 +02:00
2026-07-05 09:32:02 +02:00
2026-07-07 12:17:46 +02:00
2026-07-18 16:41:15 +02:00
2026-07-20 17:55:56 +02:00
2026-07-28 12:46:31 +02:00
2026-07-07 10:07:47 +02:00
2026-07-19 08:34:38 +02:00
2026-08-03 11:10:11 +02:00
2026-06-09 10:43:07 +02:00
2026-07-24 13:13:04 +02:00
2026-05-24 09:18:38 +02:00
2026-07-17 06:51:51 +02:00
2026-07-20 17:55:56 +02:00
2026-07-22 09:57:27 +02:00
2026-07-18 16:15:09 +02:00
2026-07-20 12:30:39 +02:00
2026-07-18 16:15:09 +02:00
2026-08-04 08:49:49 +02:00
2026-06-17 12:04:57 +02:00
2026-07-02 11:32:22 +02:00
2026-05-14 15:28:41 +02:00
2026-08-03 14:10:02 +02:00
2026-07-22 10:44:05 +02:00
2026-07-31 15:14:01 +02:00
2026-07-22 09:57:27 +02:00
2026-06-28 13:52:05 +02:00
2026-05-12 16:02:24 +02:00
2026-05-08 11:52:42 +02:00
2026-05-08 14:28:41 +02:00
2026-05-08 11:52:42 +02:00
2026-05-18 08:51:27 +02:00
2026-06-17 11:33:23 +02:00
2026-06-25 10:46:57 +02:00
2026-07-30 13:52:56 +02:00
2026-05-12 08:48:30 +02:00
2026-05-20 11:00:54 +02:00
2026-07-15 07:29:16 +02:00
2026-05-08 11:52:42 +02:00
2026-05-22 09:05:25 +02:00
2026-07-14 10:35:58 +02:00
2026-07-31 15:32:08 +02:00
2026-07-24 11:17:19 +02:00
2026-07-29 14:10:38 +02:00
2026-08-03 08:52:23 +02:00
2026-07-31 12:55:05 +02:00
2026-05-24 12:30:12 +02:00
2026-05-12 09:20:53 +02:00
2026-07-29 11:51:30 +02:00
2026-06-27 11:28:00 +02:00
2026-05-15 08:50:37 +02:00
2026-07-15 07:29:16 +02:00
2026-07-18 13:18:59 +02:00
2026-06-22 11:15:39 +02:00
2026-08-03 10:17:28 +02:00
2026-06-05 17:19:16 +02:00
2026-05-30 13:34:10 +02:00
2026-05-30 13:34:10 +02:00
2026-07-05 10:32:13 +02:00
2026-06-02 14:33:20 +02:00
2026-07-29 08:40:42 +02:00
2026-07-02 10:13:01 +02:00
2026-06-03 10:04:37 +02:00
2026-06-11 13:35:20 +02:00
2026-06-27 11:28:00 +02:00