- When running commands the result of the command should be persistent between runs, avoiding the need to run twice if it passed - State must depend on current state of the repository, modifying a file must reset the state