Handlebars subprograms have depths associated with them, which is how the contexts are resolved. Templates that only access the direct context, i.e. `{{foo}}` are depth 0 and can safely be restored via the template's child API. Templates that access `{{../foo}}` have depth one or higher, depending on the number of `../` entries there are. Due to the way that these are bound at runtime we are not able to safely restore these so we have to invalidate and rerender so we can get a safe program reference for subsequent renders on the client side.

I'll add a comment to try to explain this.