Reads an anchor back, and follows the chain until the index is complete.
Resolving walks from an anchor to the full one behind it, then applies the deltas forward so a
newer entry wins and a recorded deletion removes the subject. Applying them the other way round
would let an old value overwrite a new one, which is the kind of mistake that only shows up as a
restore quietly writing last week's field.
The chain is bounded by the full-anchor policy, and a chain that reaches its limit without finding
a full anchor is reported rather than walked forever.
A bound, not a policy. BasePolicy decides how often a full anchor is written and keeps chains
far shorter than this; reaching it means the chain is broken or a full anchor was pruned, and
both are worth reporting rather than looping over.
When an anchor in the chain is missing or unreadable.
Returns
array, size: int}>
—
Subject path keyed to the frames that reconstruct it and its decoded size.
subjects()
subjects(string $address) : list<string>
The subjects an anchor names, without their frame maps.
Parameters
string
$address
Address of the anchor.
Throws
\RuntimeException
When an anchor in the chain is missing or unreadable.
Returns
list
—
Subject paths.
frames()
frames(string $address) : list<string>
Every frame address the chain references.
A reachability walk needs the whole chain rather than the resolved index, because a frame named
by an entry a later anchor replaced is still referenced by the anchor that named it, and an
anchor is a restore target.
Parameters
string
$address
Address of the newest anchor.
Throws
\RuntimeException
When an anchor in the chain is missing or unreadable.
Returns
list
—
Frame addresses, deduplicated.
flushCache()
flushCache() : void
Forgets what has been read.
Called by a long-running command between batches, so a resolve over a large index does not hold
every anchor it touched.