@@ -117,6 +117,7 @@ def __post_init__(self) -> None:
117117 if type (self .bindings ) is not tuple or not all (isinstance (item , VNextIdentityBinding ) for item in self .bindings ):
118118 raise _error ("index_invalid" )
119119 _validate_index (self .bindings )
120+ object .__setattr__ (self , "bindings" , tuple (sorted (self .bindings , key = _binding_sort_key )))
120121
121122
122123def _validate_binding (binding : VNextIdentityBinding ) -> None :
@@ -169,7 +170,7 @@ def _validate_index(bindings: tuple[VNextIdentityBinding, ...]) -> None:
169170 canonical_periods : set [str ] = set ()
170171 names : set [str ] = set ()
171172 artifact_identities : set [tuple [str , str , str , str , str , str , str ]] = set ()
172- digest_periods : dict [str , tuple [ str , str , str ]] = {}
173+ artifact_digests : set [str ] = set ()
173174 display : dict [str , tuple [bool , set [int ]]] = {}
174175 for binding in bindings :
175176 _validate_binding (binding )
@@ -195,11 +196,9 @@ def _validate_index(bindings: tuple[VNextIdentityBinding, ...]) -> None:
195196 if name in names :
196197 raise _error ("target_collision" )
197198 names .add (name )
198- period = (binding .period_key , binding .as_of , binding .cadence )
199- previous = digest_periods .get (binding .artifact_integrity_digest )
200- if previous is not None and previous != period :
199+ if binding .artifact_integrity_digest in artifact_digests :
201200 raise _error ("artifact_digest_conflict" )
202- digest_periods [ binding .artifact_integrity_digest ] = period
201+ artifact_digests . add ( binding .artifact_integrity_digest )
203202 if {item .period_key for item in bindings } - canonical_periods :
204203 raise _error ("canonical_missing" )
205204
0 commit comments