Reproducibility
The guarantee: the same configuration and the same seed produce byte-identical output.
Not the same seed. The configuration too. This page explains why, because the difference catches people out.
Why the seed alone is not enough
Each column has its own seed, and it depends on the column's id as well as the global seed. Ids are stable and stored in the configuration file, which has three consequences worth knowing:
- Column order does not matter. Moving a column does not change what it produces, and adding one does not disturb the others.
- Renaming a column does not change its data, because the id is what identifies it.
- Retyping a schema by hand produces different data, even with the same seed, because the new columns get new ids.
So sharing a dataset means sharing the .yaml. Quoting a seed number to a colleague will not reproduce anything.
What else is pinned
- Row order. A row's values do not depend on when it was produced or on what else was being produced at the time, so the output is identical however the work is scheduled.
- Number and date formatting. Every value is written through one invariant path, so a machine with a decimal comma produces the same file as one with a decimal point.
- Uniqueness. Unique columns are stable too: asking for the same distinct values twice gives them in the same order.
The one exception
A file-backed column reads a spreadsheet at generation time. For a schema using one, the rule becomes:
The same configuration, the same seed, and the same source files.
Change a value in that spreadsheet and the output changes, with nothing to warn you - the file is outside the configuration. That is what bundles are for: a bundle seals the sources in alongside the schema, so the whole thing is pinned again.
What is not pinned
- Line endings. Generated CSV and JSON use the platform's line ending, so the same schema gives CRLF on Windows and LF on Linux. The values are identical; only the terminator differs.
- Output across versions. Below 1.0, a release may change what a generator produces. It will never do so silently: every such change appears under its own heading in the release notes.