[types] RepoState v15 with identity_resolved_at, v15 fence, ttl epoch master
repo rows get a trailing identity_resolved_at (unix secs of the doc fetch behind handle, pds and key), so the relay can trust a stored key for a ttl. it's skipped while None, so an unstamped row is byte for byte a v7 row and nothing is rewritten. v15 notes the ttl epoch in counts, and a row without a stamp reads as resolved at epoch - hash(did) % ttl, spreading the first round of refreshes over one ttl. v15 is a fence, and unlike v14 it has to fence relay-only builds too: they skip v8 for good, so their stored version stayed at 7 and an older relay build would open the db and fail on every stamped row (a v7 reader rejects the longer array, tested). once the fence is applied, markers are authoritative and the stored version is 1 + the newest applied migration, holes or not, so every later migration a relay build applies keeps the builds before it out too, and no build infers that a migration it skipped ran.