It is expected that the Constraint component processes its dependencies in topological order when there are no cycles in the dependency graph. However, it seems that VRC Constraints cannot correctly handle changes in dependencies caused by toggling components, leading to cases where it fails to derive a consistent solution even when one exists.
In the sample avatar, there are four objects: Source, X, Y, and Z, all existing flatly. Source, X, and Z each have a child cube. Source is animated to be at X=-1 on even frames and at X=1 on odd frames. Each object has a Constraint component attached, and these components are controlled via animation so that the dependency changes as shown in the left diagram for the first two seconds after loading, and then to the right diagram thereafter.
Neither of these dependency sets contains cycles, and by processing them in topological order, all constraints can be satisfied (i.e., all cubes are positioned at the same location as Source). However, if the processing order is incorrect, one of the cubes may reference the previous frame's position, resulting in it being displayed at a different position from the other cubes.
In the sample avatar with automatic conversion, everything works as expected before switching dependencies, but after the switch, it seems that the correct order is not being maintained.
Unfortunately, Unity Constraints also exhibit a similar (but different a bit) issue, where the processing order is incorrect before the dependency switch but correct after the switch.
If accurate conversion from Unity Constraints is a priority, it would be beneficial to make VRC Constraints behave similarly to Unity Constraints. Otherwise, it would be ideal to process the dependencies in the correct order derived from the dependency graph. Could you please consider addressing this issue?
Sample Avatar: avtr_afc5ee48-560c-4ebf-8316-c74bc109e1a3