The direct (copy / mod) column-to-column lineage the given relations’ columns sit in — the connected component around them, from the engine’s static analysis. Not their own edges, which would stop one hop out since a column trace walks transitively, and not a whole project’s, which carries model families the selection cannot reach. Several relations, answered as one union, because one selection reaches several: a script’s output column can derive from columns of several dbt models. Unpinned, the component crosses projects — a relation one project produces is another’s source — and the caller’s access is decided again for every project it reaches, so a trace ends where their grants do. A pinned answer, by version here or by job on the run route, is one project’s. Its own endpoint rather than a field on the asset graph: the graph is folder-wide and polled by a run page, while this is rendered for one selection at a time. Empty for projects that did not opt into the analysis pass (column_lineage: true), which is the ordinary case. The indirect scan kind is stored but never served: it reaches every output column of its model.