Short answer is that the backend shortcuts it when the Workflow is called from another Workflow! I wouldn't worry about the call stack - Workflows are orchestrated with Temporal, so there's essentially a queueing system built in that should handle the load. Also just wanted to confirm that these Workflows aren't running on the client, so there shouldn't be anything to worry about from the browser perspective.
You definitely could stick the whole workflow in a loop block (or in a JS loop) and accomplish the same thing - that would work fine too, this was just the method that I chose here.
Indeed - my saveState
subflow could have been handled by a single block. There is no reason that it needs to be this case, it was just that while building this, I was preemptively encapsulating that functionality because I assumed I'd need multi-step logic there.