When %remove-nodes is sent as an update, it may refer to a parent node,
in which case the deletion of all the parent's children is implied. If
we hold onto references to nodes outside of graph-store, we are unable
to tell which of our references were affected, other than iterating over
every reference to check if one of the deleted indices is a prefix of
the reference. This is obviously undesirable, so we emit all of the
nodes we deleted, including the nodes deleted implicitly.
Creates a noun poke %fix-dangling, which iterates through the unreads
and dismiss those which refer to nodes which no longer exist.
Additionally, adds a migration which runs this poke.
We can't molt until clay has gotten its pork or else we'll build the old
app against the new kernel. This ignores vegas, since we should get a
notification from clay on /sys/lyv.
When we changed wires from /a/foo to /ames/foo, our sorting function
started sorting by last character instead of first character, so breach
notifications were given to gall before ames. This made gall try to
resubscribe before ames cleared its state, so the message would be lost.
Fixes#4177
This lets applications suggest to the client that they should gracefully
unsubscribe from the session.
Arguably this might be accomplished by %kick-ing the client and then
crashing on their subsequent resubscribe, but this requires tracking
their sole session id and has less semantic clarity on what's happening.
The added logic also happens in +se-drop, which will get called by
+se-abet if we did unlink an application. But +se-agon depends on the
index being sane, and may be called between +se-klin and +se-abet.
tapping an ordered map returns a list with the smallest keys first.
However, graph-store's update-log is defined backwards, such that the
list will have the most recent updates in the front of the list. We
therefore flop the update log before iterating over it, in order to
process the updates in the order they occurred