empty middle page: complete; end_of_collection; tasks=A,B; requests=3
budget reached: partial; page_budget; tasks=A; requests=2
repeated token: partial; token_loop; tasks=A; requests=2
changed snapshot: partial; snapshot_changed; tasks=A; requests=2
tool failed: partial; tool_error; tasks=A; requests=2
conflicting duplicate: partial; conflicting_duplicate; tasks=A; requests=3
source warning: partial; source_incomplete; tasks=A; requests=1
estimated total: complete; end_of_collection; tasks=A,B; requests=1
PASS: bounded exhaustive read, fixed context, partial reports, duplicate checks
