Confused about the new Workflow Versioning with Build Ids

  1. The docs say “Workflow Versioning is largely concerned with helping to manage nondeterministic changes to those definitions.”. Does this mean we should be using a different versioning strategy for deterministic changes? What exactly is a nondeterministic change to a workflow? When I hear “nondeterminism” I keep thinking of the sort of nondeterminism we need to avoid inside of workflow definitions (e.g. don’t use Unleash feature flags in workflows; use Unleash inside activities).

  2. What exactly is the advantage of this new versioning over using Task Queue versioning? Can I see a specific example of a scenario that the new versioning handles better?

  3. Is there any reason to use the old Task Queue versioning now that this new versioning exists?

  4. “You can decommission old Workers after you archive all open Workflows using their version.” Is there a way to do this automatically, or will I have to manually close old Workers after every deployment that uses a new Workflow Versioning build ID?