I think I'm making progress.
my current approach: when making a negative edge (block) from A to B, first collect the set that are "downstream" from B. to get this, traverse the graph starting from B, and collect all nodes that are reachable from B, and have a higher distance than B. (also, take into account that an edge from a->b has distance[b] == distance[a]+edge.value
. These are the nodes who's distance may be altered by removing A->B.
Then, collect all the nodes which edges into this set (to make this fast, we keep a copy of the graph with all edges reversed). This is the set of possible sources, from which you may still be able to reach into the modified set. Delete all recorded distances for the modified set. Load the source set into dijkstra's algorithm and run it again.
Still some edge cases it seems though...