Unexpected steps execution order in mutations
<!-- Before opening an issue: if you use `npm` try running `yarn` instead; if
      you run `yarn`, please try running `npx yarn-deduplicate && yarn`. -->

### Summary

When running a step inside a mutation, before the mutation plan itself, the expected behavior is that all other steps
should be executed before the mutation step as discussed [here](https://discord.com/channels/489127045289476126/498852330754801666/1316777903706472469). But the actual behavior
is that mutation is executed before the other steps if they are not marked as `hasSideEffect=true`.

<!-- A brief summary of the problem. -->

### Steps to reproduce

[Attached in the above message.](https://github.com/hos/ouch-my-finger/commit/9c290e390724529211a09e4310fe549bf49669b3#diff-65616fb782e48437945ccfb2521aa98fb88850bb3db13fbd0aa473555c4682b8R18-R20)

### Expected results

The valueBefore plan to have result of the value before, without adding `hasSideEffect = true` on the $valueBefore step.

### Actual results

The valueBefore contains the value of the resource after execution of the mutation step.

### Additional context

<!-- Please provide additional context such as environment versions (including
      operating system, Node, PostgreSQL, Redis, etc. as relevant), software
      versions (from `yarn.lock`) or similar, plugins in use, database schema
      if relevant, bundler (if any). -->

### Possible Solution

Set `hasSideEffect=true` on the `$valueBefore` step.
