Files
HealthLog/prisma/migrations/0360_coach_message_results/migration.sql
T
Marc-André Bombeck a8b3e5d7f4 feat(coach): store a turn's result tables encrypted beside the message
A new nullable column, coach_messages.results_encrypted, holds the tables
of values a turn read as AES-GCM ciphertext; only their metadata rides the
plaintext provenance. readMessageResults serves them to the owner, each
table whole or withheld with a reason. The provenance restore learns the
steps, method, table metadata, chips, clarification and the forced-answer
marker, entry by entry against the wire schema.

The column is registered for key rotation, carried through both backup
formats (ciphertext in a disaster-recovery file, readable JSON in a
portable one) and goes with its row on conversation delete and wipe.
2026-09-27 10:36:27 +02:00

15 lines
763 B
SQL

-- The tables of values a Coach turn read, stored with the assistant message
-- that showed them: a JSON array of result tables, AES-256-GCM encrypted in
-- the same Bytes codec as the message body. The values are health data, so
-- they never sit in the plaintext `metric_source_json`, which carries only the
-- tables' metadata (ref, source, shape, row count).
--
-- A stored table keeps the values the answer was given with; a later edit or
-- sync does not rewrite what an earlier answer showed. The column goes with
-- its row, so deleting a conversation or wiping the account removes it by
-- the existing cascade.
--
-- Additive only: a nullable column, no table rewrite, no data change.
ALTER TABLE "coach_messages" ADD COLUMN "results_encrypted" BYTEA;