Makoto's post in Why is \IPS\File\FileSystem being called on S3 storage? was marked as the answer
Wow. Someone smack me.
$file = \IPS\File::get('gallery_Image', $this->original_file_name); It's gallery_Images, not gallery_Image.
It seems File::get does not throw any kind of error or exception if you provide an invalid storage extension, and this results in it sometimes "just working" if you're not using a custom setup.
@Ryan Ashbrook is there a chance we can have a check performed here to prevent hard to debug issues like this in the future?
Makoto's post in Elasticsearch improvements was marked as the answer
I've got a simple application written up that patches in a few of the changes mentioned above, but I need to make sure it's okay to post with Daniel due to the nature of the application (it completely replaces the existing search method and re-uses a lot of existing IPS code) before submitting it to the marketplace.
Makoto's post in \IPS\Helpers\Table\Db and filters with zero results was marked as the answer
My bad, this is why I shouldn't report bugs after 24 hours with no sleep.
It was a third-party issue. Wasn't the foreach throwing the exception, was a call to first() in a custom table helper class I was working on that I.. just happened to fix at the same time, so I thought that was the issue. Should have tested further.
Sorry for wasting your time >_>