Marc-André Bombeck
00dfc5a0c0
feat(insights): seal the cached AI insights payload at rest
...
users.insights_cached_text held the model's briefing, readings and
recommendations about the account in the clear. Migration 0411 adds
insights_cached_text_encrypted (AES-256-GCM, binary layout, purpose-bound
label) and a partial discovery index; the free-text encryption backfill
seals the existing rows one at a time, fail-closed, carrying updatedAt and
guarded on the value it read. Every reader, writer and clear goes through
cached-text-cipher.ts, and a guard keeps the column names there. The
column joins the encrypted-column registry and the key-rotation script,
stays out of backups as operational, and is reset by the data wipe.
2026-10-20 07:30:00 +02:00
..
2026-10-08 08:32:15 +02:00
2026-10-09 13:37:14 +02:00
2026-10-06 19:44:52 +02:00
2026-09-26 16:23:14 +02:00
2026-09-26 16:56:02 +02:00
2026-09-26 16:56:02 +02:00
2026-06-28 03:20:49 +02:00
2026-06-29 15:08:04 +02:00
2026-10-05 21:57:49 +02:00
2026-09-11 12:37:54 +02:00
2026-10-15 22:55:40 +02:00
2026-09-26 16:23:14 +02:00
2026-10-20 07:30:00 +02:00
2026-07-19 13:31:29 +02:00
2026-06-10 22:41:28 +02:00
2026-10-04 20:00:07 +02:00
2026-09-09 19:42:26 +02:00
2026-09-27 13:03:27 +02:00
2026-10-15 22:49:00 +02:00
2026-10-04 11:37:57 +02:00
2026-08-14 05:19:05 +02:00
2026-10-20 07:30:00 +02:00
2026-10-20 07:30:00 +02:00
2026-10-20 07:30:00 +02:00
2026-10-20 07:30:00 +02:00
2026-10-20 07:30:00 +02:00
2026-10-20 07:30:00 +02:00
2026-10-20 07:30:00 +02:00
2026-10-20 07:30:00 +02:00
2026-10-20 07:30:00 +02:00
2026-10-20 07:30:00 +02:00
2026-10-04 11:33:42 +02:00
2026-10-08 10:02:39 +02:00
2026-10-08 08:32:15 +02:00
2026-09-03 02:02:30 +02:00
2026-10-08 08:32:15 +02:00
2026-07-31 08:52:23 +02:00
2026-10-08 08:32:15 +02:00
2026-06-19 22:20:31 +02:00
2026-10-16 01:20:53 +02:00
2026-07-16 09:55:35 +02:00
2026-05-17 13:22:51 +02:00
2026-07-18 06:47:32 +02:00
2026-10-01 13:23:17 +02:00
2026-10-04 11:33:45 +02:00
2026-10-04 11:33:45 +02:00
2026-10-01 13:23:17 +02:00
2026-09-26 16:23:14 +02:00
2026-09-26 16:23:14 +02:00
2026-10-05 21:22:57 +02:00
2026-10-14 18:57:01 +02:00
2026-10-15 22:55:40 +02:00
2026-10-16 05:32:13 +02:00
2026-09-24 10:17:00 +02:00
2026-06-01 20:26:26 +02:00
2026-08-22 16:14:54 +02:00
2026-09-24 10:17:00 +02:00
2026-09-24 09:06:22 +02:00
2026-08-14 05:19:05 +02:00
2026-10-16 01:20:53 +02:00
2026-10-08 09:40:12 +02:00
2026-10-09 16:25:48 +02:00
2026-06-19 22:20:31 +02:00
2026-10-09 13:37:14 +02:00
2026-10-08 10:32:11 +02:00
2026-08-08 07:40:07 +02:00
2026-08-08 01:34:59 +02:00
2026-09-03 02:07:29 +02:00
2026-06-19 22:20:31 +02:00
2026-10-15 23:39:11 +02:00
2026-08-08 01:43:32 +02:00
2026-10-04 11:33:45 +02:00
2026-09-24 10:17:00 +02:00
2026-10-16 01:38:05 +02:00
2026-07-19 13:25:32 +02:00
2026-09-26 16:56:02 +02:00
2026-08-01 20:04:10 +02:00
2026-09-03 02:08:09 +02:00
2026-10-04 11:33:45 +02:00
2026-09-24 10:17:00 +02:00
2026-10-04 11:33:45 +02:00
2026-09-09 22:39:39 +02:00
2026-10-19 14:57:00 +02:00
2026-10-09 16:45:39 +02:00
2026-10-15 22:49:00 +02:00
2026-10-08 08:32:15 +02:00
2026-10-05 21:22:57 +02:00
2026-10-06 20:53:39 +02:00
2026-10-05 21:22:57 +02:00
2026-06-11 23:20:38 +02:00
2026-09-24 09:06:22 +02:00
2026-09-24 10:17:00 +02:00
2026-09-24 10:17:00 +02:00
2026-09-24 09:06:22 +02:00
2026-09-24 12:15:56 +02:00
2026-07-24 07:45:02 +02:00
2026-08-26 20:00:44 +09:00
2026-09-09 22:39:39 +02:00
2026-06-26 23:57:37 +02:00
2026-09-09 22:39:39 +02:00
2026-06-07 20:49:07 +02:00
2026-10-02 21:21:38 +02:00
2026-10-03 21:14:08 +02:00
2026-06-04 17:47:17 +02:00
2026-06-26 12:29:29 +02:00
2026-09-24 09:50:12 +02:00
2026-10-01 09:08:11 +02:00
2026-10-01 13:23:17 +02:00
2026-10-15 22:55:40 +02:00
2026-06-03 08:56:20 +02:00
2026-10-01 13:23:17 +02:00