Grow the directory, keep the entries
A conventional hash-table resize redistributes entries across a new bucket array. Split ordering keeps entries in one sorted linked list and treats buckets as entry points into that list. Reversing key bits gives the list an order that remains useful as the bucket count changes.
Growth changes the bucket count with compare-and-swap. Bucket sentinels are initialized lazily, so existing data nodes do not need to move during a resize.
Deletion needs more than an unlink
The implementation follows Harris's two-phase deletion: mark a node logically deleted, then unlink it. Traversal revalidates links as concurrent operations modify the list. That puts the reasoning at individual atomic operations and their linearization points.
The algorithm's progress guarantee is lock-free rather than wait-free. A particular operation may retry while other operations make progress.
Testing concurrent operations
The study included concurrent tests under Go's race detector and comparisons with sync.Map and mutex-based maps. The benchmark suite and raw measurements are private.
The part I want to carry forward is the method: identify the operation's linearization point, understand what a competing operation can change, and examine growth and deletion as carefully as steady-state reads.