_RESOURCE_CACHE (download.py:17) memoizes each fetched URL's full HTML-to-markdown body
keyed by URL, and is written on every successful (or errored) download (download.py:66,78,81).
Nothing ever evicts it, so a process serving many research sessions grows in memory unbounded —
the brain documents it as an in-process cache that "dies with the process," which is fine for a
demo but is a slow leak under sustained use. Bound it (LRU with a max entry count, or a TTL) if
this ever runs as a persistent service. Low priority for the example app; noted so the assumption
is explicit.
Second reader since the 2026-07-27 refresh: fact_check_node now reads the same cache via
get_resource rather than re-fetching, so the cache is load-bearing for correctness of the
fact-check pass, not just a speed-up. Any eviction policy must not silently drop a resource the
report still cites — evict by size/age, and treat a miss as "re-download", never as "unsupported
claim".