Supervision

Four panels, each ticking a number on its own timer. There is a text box, and a crash button on every panel.

What to do with it, in order

Watch the four numbers. They tick at different rates, and only the number that changed flashes. The flash marks the elements a patch actually touched. A panel's tick never repaints its neighbours, and never repaints the board around them.

Type something in the box.

Press crash on any panel. That actor raises and dies. Its supervisor is told, restarts it from a known state, and counts the restart. Your half-typed text, the other three counts and their timers are untouched.

The third step is the point

An error boundary replaces a subtree with a fallback and loses the state inside it. It does not restart anything.

Here the failure is a message, recovery is a handler, and the isolation is the actor itself. None of it is special machinery.

Wall >> start   = ( me monitor: panel. self ).
Wall >> down: d = self with: {
  panels: panels copyWith: (me spawn: (Panel label: d actor name)).
  restarts: restarts + 1 }.

Why the re-render does not descend

What the parent holds is a reference to the child actor. The reference did not change, so a re-render of the parent does not go into the child.

This is not the kind of optimisation you can forget to apply. It is not whether a memo was written; it is that the reference is the same one.

The markup is the designer's. The panel is one sample they left in the wall, cloned per panel.