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.