refetch method
Runs this query again whatever the cache holds. Fails when nothing
tracks key, and while the cache is changing principal.
The value it completes with is the cache's own: live and unbounded, the
same as the app's refetch. A caller that hands it to a panel passes it
through bounded() first. A refetch started before a principal change
can still complete, for the caller that started it, with the previous
principal's value.
Implementation
Future<Object?> refetch(String key) async {
_ready();
final found = _find(key);
if (found == null) throw StateError('[forge] nothing is tracking $key');
_record(ActionKind.refetch, key);
// The cache's own refetch: a REST response never writes an owned record,
// so this cannot move a sync source's replica.
return _cache.cache.refetch(found.meta, found.args);
}