It's up to you to ensure that your tasks are idempotent. This means that running tasks repeatedly doesn't change the output. So if you run task A then task B, running task A or B again should not result in any changes. If you insist that running A again should result in changes, you do not want your tasks to be idempotent.
The reason you're seeing this behavior is that you have defined your output wrong. Two different tasks should never have the same output file because as you've discovered, this means you can't tell which one was completed. The pattern you're developing will break on larger pipelines. What happens if you schedule both Parent(1, 1) and Parent(1, 2) at the same time? The pipeline will start running both Child(1, 1) and Child(1, 2) at the same time. If both somehow manage to finish, it will now start running both Parent(1, 1) and Parent(1, 2) with the same input, which is not expected. If both are able to finish, it will also have overwritten one of their outputs.
If two different people are running these at the same time, one of them will get what they expected, and the other one will get what the first person expected. Neither will be able to tell which one they are without carefully examining the contents of the output file. If these are both scheduled by cron jobs as your operations scale, you'll spend all day just checking which jobs ran correctly and which ones need to be re-run due to getting the wrong input.
The fix here is to parameterize your output filename by both all parameters that affect its contents.