Tyranid will call components boot() methods once all collections have passed compilation and and then again after linking/validation. Return a string (or an array of strings) listing human-readable reasons for dependencies that you are waiting for.
Tyranid will keep calling boot() methods until all boot methods that exist return false/an empty array or until 100 passes have occured, in which case it will give up and throw an exception (a deadlock).
stage is either 'compile', 'link', or 'post-link'.
pass starts at 1 and increases after each pass through all the collections by one up to a maximum of 100.
In general your boot hook should get everything accomplished it can before returning dependencies. It should only return dependencies if it is waiting on another collection or component to do something in its boot method.
Your boot() should be idempotent since it may be called multiple times.