See it as a diagram
Everything below, as a diagram you can edit. Describe yours and see it in seconds.
No account needed · Editable canvas, not a picture
Discipline is not the fix, placement is
Documentation goes stale when nothing in the change process points at it. An engineer renaming a column touches the model, the tests, and a pull request. If the lineage map is not in any of those three places, keeping it current depends on someone remembering, and remembering is not a control.
So the useful question is not how to make people update the map, it is which artifact sits close enough to the change to be updated as a side effect of doing the work. Everything that cannot be moved there needs an owner and a review date instead, and needs to be honest about it.
This is also why maps grow stale unevenly. The parts derived from code stay right for free. The parts declared in YAML stay right if reviewers care. The parts drawn by hand for systems outside git decay fastest and are usually the most business-critical hops on the picture.
Three tiers of freshness
Tier one, generated from code. Anything whose definition lives in a repository can be regenerated instead of maintained. Connect the repo to Datadef read-only on GitHub, GitLab, or Azure DevOps, pick a branch or tag, and a daily sweep regenerates the diagram and an architecture.md, a link falling due 23 hours after its last sync. Before generating anything the sync hashes what actually feeds the diagram, and an unchanged hash skips generation outright, so a commit touching a README, a test, or a comment costs nothing and redraws nothing. A sync can also be triggered on demand, from the UI or from an MCP client with repo_refresh when your coding agent finishes a change.
Tier two, declared next to code. Consumers, owners, and boundary hops that no parser can infer belong in files that live with the project, such as dbt exposures or a small YAML file listing external consumers. They stay current because changing them is part of the pull request, and reviewers see them.
Tier three, hand drawn. Legacy systems, vendor tools, and manual processes have no source to parse. These hops need a named owner and a review cadence tied to something real, such as a quarterly close or a release train, and they need the review date shown on the artifact.
<!-- README.md: the diagram updates with the canvas, no re-upload -->  Last structural change: see the sync date on the diagram page. Hand-drawn hops (SFTP export, finance macro): reviewed quarterly by Finance Data.
Make the age visible
A diagram with no date is assumed current, and that assumption is the actual danger. Anyone reading a picture with a visible last-updated date applies the right discount to it, and a stale date is a prompt rather than a trap.
The strongest version of this is an artifact whose age is structural rather than typed: a live embed that renders the current canvas, so the README, the Notion page, and the Confluence page cannot show a different version from each other. Nobody re-exports an image, so nobody forgets to, and viewers need no account to see it.
Pair that with a freshness expectation per tier. Generated hops are current by construction. Declared hops are current as of the last merge. Hand-drawn hops are current as of their review date. Three sentences on the page, and readers stop treating the whole map with the same trust or the same suspicion.
Regeneration keeps your layout
What a regeneration is allowed to change
The reason teams stop regenerating diagrams is rarely accuracy. It is churn: yesterday the map had four zones, today it has six with different names, and the reader has to learn it again. Three rules keep a re-sync a delta rather than a new drawing.
Identity first. Every node carries a source id, derived from the Terraform address or reused from the previous run, and anything that still exists in the source keeps its id, its label, its type, and its zone. The previous diagram is handed back to the generator as an explicit instruction to reuse what survives and to mint a new id only for something genuinely new, with up to sixty existing nodes listed by name.
Then geometry. Positions you set by hand are pinned. The sync records where it left each node, compares against the canvas on the next run, and treats a difference of more than twelve pixels as a deliberate move, restoring exactly those coordinates after the new layout runs. A diagram nobody touched stays free to re-lay out; a diagram somebody arranged for a review holds still.
And what you added yourself survives. Nodes on the canvas with no source id are treated as work a person did by hand and kept, so annotating a generated map does not mean losing the annotation tomorrow.
# what the daily sweep writes to the log [reposync] daily sweep: 12 due, 3 regenerated, 9 skipped, 0 failed # the nine skipped had an unchanged structure hash: # READMEs, tests, comments, formatting -> no redraw # for the three that changed, the sync also records how much # of the previous diagram survived, so a small source change # that returns a low ratio is visible as a problem.
FAQ
How often should data lineage be regenerated?
What if part of my pipeline is not in git?
Does regenerating a diagram destroy manual layout work?
How do I tell whether a lineage map is stale?
Who should own keeping lineage current?