Child discovery now pages through the whole session list, so one pull can take longer than the 15s watchdog interval. Two overlapping pulls each read the store before either commits, so both appended the same newly found child and the directory store ended up with duplicate rows. Keep one pull per directory in flight, mirroring the status-poll guard.