It looks like the circular dependency is happening because of how the applications are linked together:
Application Y depends on Application X.
Application Z depends on Application Y.
Now you’re trying to make Z also depend on X.
This as a loop because Z is already indirectly depending on X through Y, and adding a direct link to X creates a cycle: Z → Y → X → Z, which triggers the circular dependency
Quick Fix:
You might not need to add X as a direct dependency for Z, since Z already gets it through Y.
Or, if possible, try flattening the structure a bit. Instead of chaining the apps, you could make X a shared dependency for both Y and Z separately.
I think it’s better to use a rule to populate the values. Instead of relying on a static dependency chain, you could use a rule to populate X for Z when Y is selected. This avoids having to directly link X to Z in the provisioning policies and helps SailPoint understand the context without creating a circular dependency.
Even though Z → Y → X looks straightforward, SailPoint might be recognizing that Application Z now has two paths to X: one through Y and one directly from Z. This dual path can cause confusion and be flagged as a circular dependency.