PostEditChangeChainProperty behaviour, direct property changes in code?

Is there an explicit explanation of under what conditions PostEditChangeChainProperty etc are called?
Context:
I’m doing some DetailsCustomization work for an in-Editor graph (of vertices and edges). I have AActor-derived vertices that can be placed in scene, and a separate AActor-derived Graph class which contains a TSet of Edges. Here’s a simplified overview:

AGraph : AActor
{
    UPROPERTY()
    TSet<UEdge*> Edges;
}

UEdge: UObject
{
    UPROPERTY()
    AVertex* Origin;

    UPROPERTY()
    AVertex* Destination;

    UPROPERTY()
    bool TwoWay;
}

AVertex : AActor
{
    //other stuff
}

I’ve implemented DetailsCustomization on the AVertex so that I can directly edit UEdges from the AGraph instance in the scene, by having the Vertex’ details show the subset of edges that reference it as an origin or destination, and buttons that allow users to create new edges by picking a destination. All is well here, changing things in the Vertex’ details panel directly edits the objects in the graph’s set, and if the actor picker completes I can create a new Edge and store it in the Graph’s set.

However, the graph is also responsible for visualizing the edges, which potentially require different visualizations depending on edge type. The visualizations are editor-only, but I want them to update, for instance a line representing a simple edge between two AVertex objects should update to reflect changes to the position of either of them.

What I’d like to know, is, is PostEditChangeChainProperty viable to allow the AGraph to automatically be notified about

  1. changes to edges in the set, such as toggling the TwoWay boolean

  2. changes to the nested objects inside an Edge (primarily AVertex position but could be other things)

  3. Insertion/deletion of Edges to the set via code

The name PostEditChangeChainProperty implies a degree of ‘bubbling’ on the event up to an outer, but this isn’t the behaviour I’m getting.

If I toggle ‘TwoWay’ on a transition, either as a ‘virtual’ property on a AVertex or directly on the AGraph, the Edge gets PostEditChangeProperty and PostEditChangeChainProperty called, but nothing else does.

This is rather counterintuitive, because even if PostEditChangeChainProperty does not bubble but is called on the outer object (as alluded to elsewhere) I’d expect that it would get called on some other object - calling it on the Edge seems rather redundant.

In addition to this, if I insert or delete an Edge from the Graph’s set manually using the Graph’s details panel, I get PostEditChangeProperty and PostEditChangeChainProperty called on the Graph, but if I directly edit the TSet by inserting or removing an element via code I get no such notification.

It looks like I need to access the TSet via a UProperty or use PropertyUtilities/FNotifyHook to trigger the aforementioned events, but it isn’t clear how I could

  1. use this to insert an element, short of fetching the entire set, modifying and then passing back, or

  2. access a PropertyUtilities/FNotifyHook for the TSet seeing as it’s on another object which doesn’t have a details panel open at the time.

I understand that I could probably either do something like the editor ticking that the Navigation system uses for updates, or just have a delegate defined on the graph which any of these update events can invoke to pass ‘graph element changed’ events to the graph, and I’ll do that if I have to, but I’d like to better understand Pre/PostEdit notifications better before I end up rolling my own functionality that duplicates what already exists but isn’t well documented.