I'm using EXT v6.7 Classic, and I came across this when testing a change I made to an operation. I wanted to quickly 'fake a failure' to ensure my failure processing worked correctly. To do this, I simply shut my server down (e.g. apachectl stop). And when I went to save, my 'failure' callback was not called. I then added a 'callback' listener and noticed that the 'success' parameter was 'true'. Walking back through the debugger, it appears as though there is a 'special case' handled in the 'onComplete' method of the Ext.data.request.Ajax class:

if (result.success) {
// This is quite difficult to reproduce, however if we abort a request
// just before it returns from the server, occasionally the status will be
// returned correctly but the request is still yet to be complete.
result.success = xhr.readyState === 4;
}
I wrote a fiddle here that reproduces the problem (you need to give it a few seconds before the call times out). Why would the success be 'true' if the call failed?