CODE-061: perma follow: timestamp-ordered history and a blind foreign fallthrough

Now
OPEN
Sev
LOW
Rep
///bee
Ask
gritzko
Rev
///bee#8cb69a0
See
BEE-070

Input

Context

index/perma.js:112:Ab,122,295 earliest, historyOf and deleterOf order and filter by AUTHOR TIMESTAMP over the path's whole rev graph on every indexed branch, not by ancestry (deleterOf keeps any commit with ts >= anchor.ts), so rebases, cherry-picks and skewed clocks can attribute the anchor or the "deleted in" note to a sibling branch. :356,360: a path that resolves locally but whose blob mismatches falls through to foreignFollow, which can land in another repo's same-named file on as little as a 12-bit hashlet, and the whole follow body sits in catch (e) { return null; }, so a real failure reads as a quiet miss. Found in the 2026-09-18 index review.

Goals

Order by rev (the index's own counter) restricted to the tip's ancestry; fan out only when the PATH missed; log the swallowed error.

WIP

TODOs

Design decisions

The ancestry mask is rev space, not commit space: repsOf for the tip, revAncestors over the REV-PARS edges, one span read already paid for by pathRevs. It answers null when the tip names no rev of the path, so an index behind HEAD degrades to the whole span rather than to no anchor at all.

historyOf keeps its author-date sort. After CODE-077 it serves only the ODB fallback, where the path has no rev to order by; and it also feeds blobHistory, the hashlet mint scope, which LITE-026 scopes to the file's blobs, not to one branch's — narrowing it would break mint/follow symmetry.

A blob that misses at a path this repo spells is now a plain null. Only a PATH miss fans out, which is the same gate CODE-059's goneFollow sits behind.

Outcome