Where a release stands, derived from observed state: the plan made with
what the registry shows (generate_publishing_plan's registry option)
and each repo's readiness. gitops_release derives it each time it runs,
applies the rewrites, and names the packages to publish, so a release
proceeds in steps with no state of its own between them.
A dependency is released when it has nothing left to publish and the
registry shows its current version: dependents' ranges can move to it now,
and their installs will find it. A package publishes now when it's in
the plan's first wave, depends (prod/peer) on no package still awaiting the
registry, and its repo is ready.
The plan reads every repo as it sits, so a repo that isn't ready — behind
origin, off its branch, dirty — may hide a changeset, and what it says of
its package can't be trusted. Its dependents are held too: a rewrite to its
version, and the publish of every package depending on it for prod or peer,
however deep.
Pure — the plan, the repos, and their readiness in; the step out.