doing things "on first run" is fragile: it might be interrupted, in which case we either do it again next time (running first-run tasks more than once) or we don't do any (skipping some of them). instead, do things on demand, and keep track of which tasks have completed