When autoship aborts on a merge conflict or merge error it turns itself off; the
chat's sidebar entry now shows an exclamation-triangle marker until the user
re-enables autoship. Unlike the shipped marker (lastEventWasAutoship), this is
sticky session state, not tied to the latest event — a failure needs attention
and shouldn't vanish the moment something else happens.
- Session + SessionSummary gain `autoShipFailed`; persisted via migration
v13-autoship-failed.
- SessionController.markAutoShipFailed() turns autoship off and sets the marker
atomically; the merge queue's conflict/failed paths now call it instead of a
plain setAutoShip(false). setAutoShip(true) clears the marker (re-opt-in). A
clean user toggle-off leaves it untouched.
- RootView.SessionRow renders the warning icon, taking precedence over the
shipped icon.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>