Hello Kareem. Since you are calling LCM Provisioning as a subprocess, the parent waits for it to return before running the next step (Advanced Workflow Topics). Sequencing is already guaranteed regardless of foregroundProvisioning, so you don’t need true for it.
That makes foregroundProvisioning=false the better fit for the QuickLink case: it allows the workflow to suspend and resume in a background task thread, so the browser session isn’t held on a long leaver (reference), while the subprocess wait still keeps your post-leaver steps in order. true only matters if you want it fully synchronous in the session, like testing or an event-trigger run where nothing’s waiting at a browser.
The subprocess returning doesn’t mean every target is finished. Direct read-write connectors apply immediately, but Integration Executors can stay queued and unmanaged requests become work items (Processing Provisioning Requests).
project isn’t passed up automatically. Return it from the subprocess step and declare it in the parent:
<Return name="project" to="project"/> <!-- on the subprocess step -->
<Variable name="project"/> <!-- in the parent workflow -->
Your transition can then read project.getErrorMessages() and gate on it, treating a clean result as “no hard errors,” not “every async target done” (Editing Workflow XML).