SetCore items are not guaranteed to be available within a certain time frame, or ever, for that matter.
You can find the source code of the corescripts here:
Now keep in mind that just because something seems to be immediately available in those scripts right now (i.e. no yielding before the point at which a thing is registered), that doesn’t mean they will be in the future. If they add something to the core scripts that needs to perform a web request first, for example, it could be that SetCore items that are almost immediately available now will take longer to become available in the future.
This should not be a problem in your code, because the guarantee that they are available immediately was never given. If you are assuming that right now, that’s your mistake because you assumed wrongly, not the mistake of the implementation.
(And refer back to the post above on why they can’t make the core scripts fully initialize first)