"Run if previous Step failed" doesn't seem to mean really "previous" Step

Sure, it’s definitely planned (stage like concept), please vote & comment at: Parallel Builds: Seperate stacks for seperate workflows + trigger multiple workflows (builds) at the same time

In the meantime, in this specific case I’d suggest you to simply check the report before uploading it, whether it exists at the path. Mark the “Jacoco report upload” step with is_always_run: true and simply check whether the report is available at the path. If no other step is marked with is_always_run then if Package would fail the report will not be generated, and so the report uploader step will simply terminate due to the lack of report file to upload. If “Package” step succeeds then the process will continue with the unit test step. If that fails indeed this will skip the VDT step but the report will still be uploaded by the uploader step.

Depends on the details of course, whether you actually need to run the VDT step if the Unit Test step fails, otherwise this should provide the functionality you described.