Filesystem-backed FactExternalFetcher.
Resolves file:<shard>/<rest> external URLs against a configured
facts directory. The URL shape is the canonical relative-path scheme:
2 hex chars for the shard subdir + 62 hex chars for the rest of the
blake3 hash (64 hex chars total). Files live at
<facts_dir>/<shard>/<rest> after the writer atomically temp+renames
them in.
Pre-filter regex: ^file:[0-9a-f]{2}/[0-9a-f]{62}$. A ..
segment can't match (. isn't in [0-9a-f]); neither can absolute
paths, query strings, or any non-hex character. Defense-in-depth in
front of path.join — the fetcher never trusts the URL came from a
fact row, even though it always does in practice.
The fetcher does NOT verify hash content — PgFactStore.get calls
fact_hash_verify(hash, bytes) after the fetch and returns null on
mismatch.
Runtime: uses node:fs/promises + node:fs createReadStream so
the same code works under Deno (via node compat) and vitest.