This should prove once and forever that tail recursion is dangerous and does not help with real world problems. Clearly, blowing up the stack would have been the appropriate and safer response here.
If I had to implement this, I would just imagine that just taking your mapping, and for each key,value , do a title.replace(key,value). I would be a "good enough" solution , and in the worst case you still have human editors on HN.
(TBF, that is when I am a paying consumer or a paid developer. I'm upset about neither the HN badtime nor the phrase outagelet.)
Minimizes perceived downtime.
I think you should do your best to always return an appropriate HTTP status header, and in this case it is status 503 (Service Temporarily Unavailable). You really want to reserve 403's for those pesky w00t w00ts :) , ' aNd 1=1 and the likes.
Getting 403's with my personal account, but gaining (slow) access through another browser, I was convinced that the issue had to do with my account being blocked.
Often getting to the root of the problem as quickly as possible while simultaneously keeping the site up (practical) wins over always using correct HTTP response codes (pedantic).