- DrainageResult now exposes flow_accumulation + max_accumulation for D-209 attractor-strength normalization. - Rewrite merge_small_basins from an O(merges x n) loop (rescanned the whole grid per merge) to an adjacency-graph + union-find pass: one grid scan, lazy merges. Cuts D8 drainage at 512x256 from ~299ms to ~45ms, meeting the D-208 ~50ms target (the module had never been run at canonical resolution before — it was orphaned). Determinism preserved (smallest by (size,id), largest neighbor by (size, lowest id)). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>