The watched mark is no longer ours alone

This engine has written `seen` into the shared shape all along, on the
grounds that the iPhone had no unread mark on a story. That turned out to
be wrong in a way worth recording: the iPhone HAS the mark and was not
writing it, locally or to a backup, so the ring around every contact
relit at each launch and a restore through it lost the lot.

The iPhone writes it now, so the comment claiming the field is ours alone
is false and is replaced, and `stories[].seen` moves out of the vector's
divergence list and into the canonical set.

No behaviour change here. The code was already right; only what it said
about the other engine was not.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Paul Hitt
2026-09-16 16:17:32 -04:00
co-authored by Claude Opus 5
parent 3607a85459
commit ca6265e7a6
@@ -280,9 +280,12 @@ object BackupPayload {
s.optString("key").ifEmpty { s.optString("id") }.ifEmpty { s.optLong("at").toString() },
)
s.optJSONObject("set")?.let { out.put("set", it) }
// The iPhone has no unread mark on a story, so this is ours alone. It
// travels anyway: coming back here it is the difference between a strip
// that remembers what you watched and one that shows everything as new.
// Whether the strip has been watched. This used to be ours alone and
// travelled anyway, on the grounds that it was the difference between a
// strip remembering what you watched and one showing everything as new.
// The iPhone turned out to HAVE the mark and not to be writing it, so
// it relit every ring at each launch; both engines carry it now and it
// is in the canonical set rather than a divergence.
if (s.optBoolean("seen", false)) out.put("seen", true)
return out
}