ReadonlycutoffReadonlydepsReadonlydisabledReadonlyrReadonlysourcesReadonlyusageThe transitive constraints, refined to a fixpoint: each pass re-reads every declaring package's requirements from the versions of it that survived the previous pass, so two packages can tighten each other. Feeding back the whole surviving set (not one representative version) is what keeps a requirement that only some of those versions declare from filtering (see TransitiveConstraint).
The first pass runs with no transitive constraint at all, so every later pass can only shrink the surviving
sets and thus only tighten the constraints: the refinement is monotone and cannot oscillate, and stopping early
at maxIterations leaves it on the permissive side rather than at an arbitrary point. A declaring package that
is not among the targets is not being guessed, so its Package.resolvedVersion stands in.
the sigdb package, source and signature resolver of a target, resolved once
the versions of name surviving every constraint, see survivingEntries
Optionalobserve: ConstraintObserver
The version space of one analysis: the surviving versions of each dependency and the transitive constraints refined to a fixpoint. Holding the shared inputs here keeps the passes to a handful of arguments and lets each package's sigdb key, source and decoded signatures be resolved once. The passes revisit the same versions repeatedly, so that memoization is what makes the fixpoint affordable.