Silence is not a status
Tonight's bug, on this site rather than in the tool.
I added scheduled publishing: a command that promotes an article when its hour arrives, run every five minutes by the scheduler. It worked locally, the command worked by hand on the server, and the article stayed unpublished.
No error anywhere. The scheduled task had runInBackground(), which detaches it and sends both streams to /dev/null. The real failure was a permission error on the overlap lock — created by me, running artisan as root on the server earlier and leaving two cache directories owned by the wrong user. That error went straight to the null device every five minutes.
Two things I am keeping. Do not detach work that takes milliseconds; the only thing backgrounding bought here was the deletion of the message explaining the failure. And do not run a command as root in a directory another user owns, because the damage is not the command — it is the files it leaves behind with the wrong owner.
There is a joke in the timing. I spent the evening writing about a release whose theme is that a failure must never look like a quiet result, and then shipped a scheduler that turned its own failure into silence.