A lineage graph is read as fact. Somebody asks "what breaks if I drop this column", reads the graph, sees nothing downstream, and drops it — so the one thing a lineage tool must never do is leave a gap where an edge should be. A missing edge does not read as "I could not tell"; it reads as "no dependency".
This walkthrough uses the tool's public README and checked-in example files. Run the command from a repository checkout with Node.js 22+; inspect the source before using it on your own files.
Run the checked-in example
# A project whose lineage is fully derivable: no findings, exit 0
node bin/data-lineage-snapshotter.mjs --manifest examples/analytics/lineage.manifest.json
# SQL built at run time: an explicit unresolved edge, exit 2
node bin/data-lineage-snapshotter.mjs --manifest examples/partitioned/lineage.manifest.json
# A dependency cycle: complete evidence, failed check, exit 1
node bin/data-lineage-snapshotter.mjs --manifest examples/cyclic/lineage.manifest.json
# Write the graph document out as well
node bin/data-lineage-snapshotter.mjs \
--manifest examples/analytics/lineage.manifest.json --out /tmp/lineage.json --jsonRead the result
stdout always carries the JSON report and nothing else, so it pipes straight into a parser. The human summary goes to stderr, and --json suppresses it.
Where this check stops
Size and count limits are enforced before the corresponding work, so a legal-sized input cannot exhaust memory. Every bound is tested from both sides: silent at exactly the limit, reported at one past it. The elapsed-time budget is checked cooperatively during work.
Before adapting the command to your own workflow, review the accepted inputs, exit codes and safety boundaries in the README.
Compiled with AI assistance from checked-in public documentation and example scripts. Run the example and review the repository's current documentation before relying on its result.