From claude-review on #80. Regression introduced by #80.
Special pool is page-granular — each page is independent — but when decode_pool_header fails for one page, walk_special_pool breaks instead of continue-ing, abandoning every later page in the region.
Worse, unlike every other rejection path in the file it pushes no diagnostic and does not clear snapshot.complete. So snapshot_report reports complete: true after silently skipping most of a region — defeating the exact purpose that flag was added for in this same PR — and because SnapshotCache only caches complete snapshots, the truncated result is the one persisted and re-served.
Fix: continue rather than break, push a diagnostic naming the page, and clear complete, matching walk_lfh and walk_vs.
From claude-review on #80. Regression introduced by #80.
Special pool is page-granular — each page is independent — but when
decode_pool_headerfails for one page,walk_special_poolbreaks instead ofcontinue-ing, abandoning every later page in the region.Worse, unlike every other rejection path in the file it pushes no diagnostic and does not clear
snapshot.complete. Sosnapshot_reportreportscomplete: trueafter silently skipping most of a region — defeating the exact purpose that flag was added for in this same PR — and becauseSnapshotCacheonly caches complete snapshots, the truncated result is the one persisted and re-served.Fix:
continuerather thanbreak, push a diagnostic naming the page, and clearcomplete, matchingwalk_lfhandwalk_vs.