The provenance block of a generation contract is easy to treat as documentation. It sits at the bottom of the spec, next to the field descriptions nobody reads until an incident. The cost of skipping it is not visible on day one. It shows up the first time someone asks which of the 40,000 tasks in the index were built from paragraph 12 of a policy document, and the only answer available is to regenerate everything and hope.
Teams that separate the two concepts tend to get this right. Data lineage tracks how data flows and transforms across systems, while data provenance records where it came from, who handled it and what authority it carries per Snowflake. A generated task is an output with both properties. It has a flow (which pipeline stage produced it) and a chain of custody (which source bytes it was derived from). The four fields in this article cover the chain of custody. That is the part a rebuild destroys if you did not record it.
The same split appears elsewhere: provenance answers "where did this come from, and can I trust it for the decision I'm about to make" as DataHub frames it. After a regeneration, "can I trust it" means "does this task still reflect the current source slice." Without a checksum you cannot answer that question.
There is a second reason the field set matters. Model behavior drifts. Research on long-form model responses found that most capabilities improve over time but with a step-wise evolving pattern rather than a smooth curve in the ChatLog study. If outputs shift between generator versions, you need to know which version produced which task before you can attribute a change to the model rather than the input. That is exactly what generator_version is for.



