[19.4.0] - 2026-10-29
Fixed
- Dictionary v1 queries kept every parsed query document in memory: each batch's query text is new, and both
graphql-tag's cache and Apollo Client'sQueryManager.transformCacheretained it, so a long sync's memory grew without bound. Queries are now posted as plain GraphQL over HTTP and nothing is parsed or cached (#3048) - Dictionary v1 queries threw a
TypeErroron anullbody,{data: null}orerrorsthat isn't an array, and their errors dropped the response body, so thedistinctfallback missed non-standard error responses. The error now keeps the body and includes it in its message (#3051) - A timed-out dictionary v1 query kept running in the background with its connection and response body. It is now aborted a second after the query times out (#3051)
- Rewinding a fork found while registering an unfinalized block failed the assertion
Expect best header and checking header to be at the same heightwhenever a stored block was at or below the finalized height, so the node exited instead of rewinding. A fork found while registering now only signals a rewind: the stored blocks at or below the finalized height are checked against the finalized chain as for any other block, and the highest of them that matches, or the finalized block, is the rewind target. This also stops a stored fork block being chosen as the target when the backfill reports the fork (#3052)
Changed
DictionaryV1sends queries with a protectedquery()method instead of an Apolloclient, and@apollo/clientis no longer a dependency (#3048)