first_or_initialize calls first, which is compatible with includes (since it checks for loaded?.
By contrast, find_or_initialize_by calls find_by which always runs a query.
I agree. I think this a bug, I’ll have a go at a fix.
The original strict loading scope just covered things you can cover with includes, preload, etc. That’s probably why this isn’t included.