`update-file` deleted the file-summary cache key with a synchronous
redis `DEL` on the request thread, inside the database transaction and
holding the file lock. A slow redis added up to the 2s command timeout
to every save, and any error other than a command timeout (a refused
connection, for example) rolled the whole transaction back and lost the
change batch.
Hand the deletion to the worker executor with `px/exec`, keep nothing
but the redis pool in the task, and swallow every failure there with a
WARN that carries the file id. The save no longer waits for the cache
and can not fail because of it; a lost invalidation only leaves a stale
summary until its TTL expires.
Closes#12495
AI-assisted-by: deepseek-v4.1-flash