experiments in a post-browser web

feat(desktop): separate a push a retry can fix from one it cannot master

A run logged six item failures carrying "content is required for type 'text'". Those six will fail identically on every future run, since the server rejects a text item with no content, but the log read the same as a timeout — so a permanently stuck item was indistinguishable from a transient blip. A 4xx names the item as unacceptable as-sent and now logs as such; anything else logs as retrying next run. Event chunks split the same way. Nothing about retry behaviour changes: a rejected item stays pending and goes out again, exactly as before. Only the log now says which kind of failure it is. The id cap rose from five to twenty, because the run that prompted this listed no ids at all — six failures exceeded a cap of five, and a handful of failures is precisely the case someone goes looking for the rows behind it. The cap still exists because a full re-push can fail on thousands and the log renders in the settings panel.


+186 -9
2 changed files