A strongRef's cid is a hash of its target, so it changes every time the target is edited and can't be kept up to date by hand. at-sdp already knows each record's at-uri and cid at build time, so a record can now name its target by a path relative to its own file:
{"$strongRef": "../b.json"}becomes{"uri": "at://…", "cid": "…"}. Other keys in the object are kept, so a union field can carry$type.{"$atUri": "../b.json"}becomes the target's at-uri string.
Strong refs resolve depth-first. A cycle is an error that names its files, since a CID can't contain itself. Weak refs may form cycles. Records resolve in walk order, so error output is the same on every run.
records now owns the did:web derivation and the record CID prefix, and site and repogen use them from there, so a ref's uri and cid always match what the repo serves.
Bean: SDP-tusi