хорошо, в общем ситуация такая, если кратко - когда включен debug и если нет обработчика ошибок соответствующего, то не выполнится ctx.pop() который запускает функции зарегистрированные с помощью teardown_appcontext (ну и остается не закрытой транзакция)
https://github.com/pallets/flask/blob/44bc286c03ff3f8e783b4f79f75eb3a464940ca0/src/flask/ctx.py#L453
вот в этом методе есть self.app.preserve_context_on_exception - который при дебаге = True
cделано это нарочно, чтоб когда перехватывает werkzeug дебаг - не происх pop контекста