This is the single source of the tree-walk, labeling, and status logic for
timeline renderers. rtemis.server consumes it for the job.result
session slice, which the rtemislive web UI draws; pair it with
session_kind_colors() to color bars by node kind.
Nodes that never closed (status "running" or "aborted" with no end time)
are drawn up to the session finish time when known, else to the latest
recorded node start. A session that recorded no nodes, and a model that
carries no session, have a timeline of zero rows.