serve-membrane: project the frame time the signer RECORDED, not one derived from the rev
projectFirehose recomputed each #commit frame's `time` from the rev (revTime) so that
every device projected a byte-identical frame. That was sound while revs were wall-clock
TIDs. Revs are now a deterministic prev+1us chain, so a derived time is PINNED at the
chain's origin and recedes from reality forever — measured: a chain whose head was minted
30 days ago still derives a time 30 days stale after five further commits.
Relays read `time` as liveness metadata, and this fleet already fights non-archival relays
dropping accounts that look stale, so a permanently-receding timestamp is a federation
risk rather than a cosmetic one.
Read the time the SIGNER recorded into the shared __commit__ log instead: real AND
identical on every device, because they all replicate and read one stored fact rather than
each deriving it — so the cross-device frame identity that motivated revTime is preserved.
Frames predating the field fall back to revTime, which is correct for them since their revs
WERE wall-clock TIDs. `time` is frame metadata only, never part of the signed commit
(atproto-store firehose.js:37).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
116892bd1fcadfb79cb005439fa36637ec842e67
by plankatron <fleeky@gmail.com> · 2026-07-25T00:46:32.000Z