• 
      

    Change deferment during action registration to only defer placement.

    Review Request #14707 — Created Nov. 24, 2025 and submitted — Latest diff uploaded

    Information

    Review Board
    release-7.1.x

    Reviewers

    When registering actions, we've historically deferred them if they
    depended on a parent that wasn't yet registered. With the new
    multi-placement actions being introduced, it's possible an action would
    be placed somewhere currently valid and somewhere that may never be
    valid (such as a legacy attachment point or one defined by an
    extension). When this happened, the action would never end up being
    registered.

    Actions are no longer ever deferred. Instead, placements depending on a
    missing parent are now deferred.

    When placing an action during registration or when resolving a deferred
    placement later, any deferred placements depending on the newly-placed
    action will be further resolved. This ensures that placements will
    always resolve once all parents have been placed, no matter when that
    occurs.

    If an action is unregistered, any actions depending on it will move back
    to a deferred state so they can be re-placed if the action comes back.
    This is important for extensions.

    Along with this, the registry has been updated to make use of
    on_item_* hooks, instead of overriding register and unregister,
    allowing the registry to manage when this logic occurs, taking advantage
    of any locks.

    All unit tests passed.

    Verified this fixed issues with in-progress changes with actions
    containing a placement that had a valid parent and a placement
    that did not.

    Commits

    Files