Optional ReadonlycolumnsReadonlyexplainLineage per id, never hand-built. Covers every id in nodes as well as the plan's own entries, so a caller labelling a node always has a string for it.
ReadonlyfactsReadonlynodesEvery node the plan resolved, in dependency order, each with its upstream ids and whether this request pulled it — and if so, whether it was computed or served warm, and how long it took.
Two things at once, and deliberately: it is the demo's explaining
device ([PND-DEMOM1]), without which the caching is true but
invisible, and it is the pipeline's shape ([PND-DEMOM4]), which no
caller can derive because turning a spec into an id means
reimplementing specId.
ReadonlyoutputsOptional ReadonlyseriesPresent only when a columns selector asked for it, and assemble.
Readonlyskipped
The resolved columns a
columnsselector asked for, keyed by the name they carry in outputs — present whenever one did.This is the wire-shaped answer, and the one M3 settled on: a column is a
Float64Arrayplus a validity bitmap, so it encodes compactly and the consumer reassembles for free. series is the in-process convenience over the top of it.