One of Vesta's key features is its guarantee of precise repeatability: any build you perform can be repeated exactly in the future. However, there are limits to this guarantee. While Vesta encapsulates all that most build procedures depend upon, it doesn't run your builds in a virtual machine. (That would make Vesta much less portable and have a significant performance cost.)

What is Guaranteed

The source versions used by a build are immutable and all references to different sources point to specific versions which cannot change over time. This is preserved by the fact that the builder will only evaluate models in immutable directories, and the import clause only allows references to specific immutable versions. So the source files used by a specific version of a build cannot be changed once that version is created.

The source files completely specify the filesystem contents and environment variables used during each build step. The SDL model code runs tools with the _run_tool primitive function which gets its filesystem from the value in ./root and environment variables from ./envVars. These can only come from immutable source files, including other immutable SDL model files, and the results produced by previous tools.

As long as tools are deterministic with respect to their inputs and only make use of file and directory contents and environment variables as inputs, then your builds should be completely repeatable.

How To Break Repeatability

There are a several things which tools can do which will not be precisely repeatable:

Tricks for Problematic Tools

You may have a tool in your build process which does something which isn't repeatable. There are some ways to deal with this: