2.1→3.1 upgrade aborts non-gracefully when a model references a removed plugin

Problem/Motivation

Comprehensive ECA 3.1.x code review found the upgrade path (eca.post_update.php) only guards the missing modeler and missing owner cases. The per-model work $eca->save() (eca.post_update.php:176) is not wrapped. Eca::preSave() instantiates every event/condition/action plugin; a legacy 2.x model referencing a plugin removed/renamed in 3.1 throws PluginException (and calculateDependencies() can throw on token-scanned deps). Neither is converted to the retry-safe UpdateException the rest of the function uses.

Behavior affected

A direct 2.1→3.1 upgrade aborts with an uncaught fatal; models after the failing one are silently not migrated and the operator gets no actionable message matching the documented retry contract.

Proposed resolution

Wrap per-model parseData/set*/$eca->save() in try/catch (\Throwable); on failure record the id and keep the update pending with an actionable UpdateException (or continue and report the failed ids), so the documented "run again once the reported cause is resolved" holds universally.