mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-10 13:22:14 +00:00
A lab note or a biomarker context written under a key this instance no longer holds came out of a portable export as `null` — byte-identical to a column that was never written. The restore importer then wrote nothing, so the text was gone and nothing said it had ever been there. The whole loss fit inside a fail-soft `catch` written for a list view, where returning null is the right answer. Both now export a short marker naming what happened, and the marker survives a restore. The Coach transcript already did this with a placeholder sentence and the doctor report with a rendered flag; the marker is now one constant the transcript shares, and its comment says why an empty string will not do. The unit test that required `note: null` here pinned the loss. It keeps the half that matters — one bad row must never abort the export — and asserts the marker instead. The round trip is proven end to end against a real restore.
20 lines
1.0 KiB
TypeScript
20 lines
1.0 KiB
TypeScript
/**
|
|
* What an export writes where a row could not be decrypted.
|
|
*
|
|
* A portable export carries plaintext, so an encrypted column that this
|
|
* instance can no longer read has to become something. The fail-soft decrypt
|
|
* helpers answer `null`, which in an export file is indistinguishable from a
|
|
* column that was never written — and a restore then writes nothing, so the
|
|
* loss is complete and silent. It is not: the ciphertext was there, and the
|
|
* person is entitled to know a key gap ate it rather than to find a note they
|
|
* remember writing simply gone.
|
|
*
|
|
* The marker is a sentence, not an empty string, for the same reason the Coach
|
|
* transcript's placeholder is: an empty string reads as "there was nothing
|
|
* here", and that is not what happened. It survives a round trip through the
|
|
* restore importer like any other text, so the gap stays visible in the
|
|
* restored account instead of closing over.
|
|
*/
|
|
export const UNREADABLE_EXPORT_MARKER =
|
|
"[unreadable: encrypted with a key this instance no longer holds]";
|