Change record status: 
Introduced in branch: 
3.1.x
Introduced in version: 
3.1.7
Description: 

ECA used to ship a class_alias() in
eca_content.module that made
Drupal\eca_content\Plugin\Action\FieldUpdateActionBase available
under the name Drupal\Core\Field\FieldUpdateActionBase whenever
core did not provide that class itself. That file has been deleted, and the
alias is gone.

What replaced it

Action plugins built on core's
Drupal\Core\Field\FieldUpdateActionBase are unsafe inside an ECA
context for two reasons: execute() ends in
$entity->save(), which must not happen in a
content_entity:presave model, and access()
dereferences the given object without a guard, which raises an
\Error when ECA has no entity to offer.

Instead of aliasing the class away, ECA now remaps those plugins.
hook_action_info_alter() in
Drupal\eca_content\Hook\PluginHooks rewrites the definition of
every action plugin whose class extends core's base class, so that
Drupal\eca_content\Plugin\Action\CoreFieldUpdateAction is
instantiated instead. The original class name is preserved in the definition
under the new key eca_original_class, and the replacement reads the
field map from it.

The remap keys on the subclass relation rather than on a hardcoded list of
plugin IDs, so contrib actions extending core's base class are covered as well,
now and in the future.

What you need to do

If you referenced the aliased class name. Any code that
relied on Drupal\Core\Field\FieldUpdateActionBase resolving to
ECA's class must now use the real name,
Drupal\eca_content\Plugin\Action\FieldUpdateActionBase. On Drupal
versions that ship the core class, your reference now resolves to core's class
rather than to ECA's.

If you wrote an action extending core's base class. Nothing
to do. Your plugin is remapped automatically and gains ECA's save semantics. Be
aware that your own execute() and access()
implementations are no longer called; only the field map returned by
getFieldsToUpdate() is used.

If you subclassed ECA's base class by its real name. Nothing
to do. Such plugins implement ECA's ActionInterface and are skipped
by the remap, which also makes the remap idempotent.

Impacts: 
Module developers