Sink
One line call's state: the buffer and the ancestors on the way down — one lifetime, so they travel as fields rather than through every signature.
Properties
Functions
v is on the chain for the duration of body. A walk that repaired nothing stands where it already reads as v.toString() (SELF_RENDERING), and is rolled back for v's own format everywhere else. Removed on the way out: the same list twice as SIBLINGS is not a cycle. Depth is measured here rather than per element, since only a container can be descended into — a scalar sitting at the limit is a leaf, and reads as itself.
owner is what joins the chain; items is what gets rendered — the same object for a collection, an array view for an array, its components for a tuple. Its [a, b] is AbstractCollection's and its (a, b) the tuples', to the character: SELF_RENDERING lets an unchanged walk stand on that.
AbstractMap's own {k=v, k2=v2}, so a walked map reads the same as an unwalked one — and SELF_RENDERING counts on it: change the format and an unchanged walk no longer IS toString().