TL:DR
Sorry @migajek no solution found yet, but a rather extended analysis of the route handling that caused the issue.
Curious to see what was happening, I’ve just started the StackBlitz environment.
I’ve opened the developer console, and one of the things mentioned is the load → loading deprecation/advise. It’s mentioned on each followed route.
Next step was to reproduce the error, indeed, simply by clicking one of the recipes. Error was triggered.
I’ve set a breakpoint on the error handling function (createUnresolvedinstructionsError, line 8171 atm) to see the stack.
On first break, like the error mentions, there is one route left to handle.
And for the stack at that time:
Checking the stack for possible issues, the location of the 100-iterations guard actually contains several TODO’s. @ devs, might be worth checking those?
Right. This initially broke on the error, so let’s see what we can figure out between a few of the do-while runs. 
Set a new breakpoint on the first line within the do-while loop, see previous screenshot for the actual line. Rerunning the application.
While rerunning, with this breakpoint in place, I noticed that the do-while was ended because this.matchedInstructions.length became 0 (as expected).
Now, let’s try the Beef Stroganoff (getting hungry
)
So first thing is to see what scope contains. No clue yet where to look… so just a screenshot.
Interesting part (little more to the bottom), is the routerInstruction. It’s not the same in one of the trees, but slightly different
So let’s see where the loop iteration ends and see what might be causing the issue.
- local var
matchedEndpoints starts with an empty array.
clearEndpoints is empty as well
hooked is empty array, so === false check fails.
- Trying to step into the else-if actually kills the iframe! Bummer! (reproducable!) Let’s see if info can be retrieved.
- Baking a tart this time.
hooked is not true, and hooked !== this.matchedInstructions is false. So not going into the else if.
- since
this.matchedInstructions is [], the for loop is not run.
skipping and skippingWithMore are empty arrays too.
- … leading to a quite explicit Todo:
{ // TODO: !!!!!! && !foundRoute.hasRemaining))
foundRoute actually is undefined there, so might be “just” a cleanup issue?
- the next part is actually run, because the route is unrestricted (according to data)

- the
finalEndpoint() sets this.hasAllEndpoints to true, and handles some states
this.run() → this.entities is empty, this.running is set to true
this.hasAllEndpoints = true, so inside if. guardedUnload is undefined, so no promise.
- Right, reaching the end of the first iteration.
this.cancelled is false, no changedEndpoints
- Another TODO here!
TODO: Use a better solution here (by checking and waiting for relevant viewports
this.matchingInstructions is still empty, this.instructions is not. And ofc this.running still true.
- clearEndpoints is an empty array, so no change to this.instructions.
- And last line of the original do-while: changedEndpoints still not containing any data.
- In the
while check, the getInstructionsForScope(scope) still returns the original instruction.
Conclusion
Right, reaching a conclusion of this analysis 
No changes in next iterations - as expected. The instruction is still the same. Guard count ofc decreasing to 0 which in the end will trigger the error.
So, what is causing the actual issue? Some possible culprits:
- this.processedInstructions still empty
- this.matchedInstructions still empty
- since the
setNextContent is within the matchedInstructions for-loop, I think this is where the check actually fails.
- with one step earlier, the local const
clearEndpoints might also be improperly set
Without deep knowledge it is a bit hard to exactly pinpoint, or to find a solution. But I hope this analysis helps a bit.