1 min to read
Everything Returned True: Debugging Silent Failures in an AI Chatbot Feature
Six bugs from a day shipping form-panel editing — and the pattern they share.
The most dangerous bug is the one that doesn’t crash.
Today I shipped a form-panel editing feature for a forecasting chatbot. Users can now edit time slots directly from the UI without typing natural language commands — the feature routes all edits through a new /update-slots command that reuses the same validation guards as the chat path.
What shipped: run_slot_update() extracted as a shared function, UpdateSlotsCommand with 12/12 tests green, and a WebSocket handler refactored from 218 down to 132 lines with _handle_form_edit deleted entirely.
At every step, bugs that didn’t fail loudly. They just quietly did nothing, returned the wrong thing, or stored data in a format that looked fine until you looked closely.
Here are six of them.