New Survey Taking Experience. Switching language mid-survey remounts the question DOM and re-runs addOnReady. On that re-run this is a bare internal object:
[ctx] ee hasQid= undefined hasGetChoices= undefined keys= []
getInstance(QID17)= functionSo this.questionId is undefined, selectors built from it return null, and this.getChoices() throws. First pass is fine, only the translate replay is broken. Stack: onTranslate → onEntered → notify → forEach over registered custom JS.
Also: the outgoing tree is still mounted during the replay (duplicate section.question ids), and the JS source seems re-evaluated per render, so caching on the callback itself doesn't survive.
QuestionData.getInstance(qid) still works during the failing pass, so the workaround is to capture the qid on the first pass, park it outside the callback, and use getInstance() instead of this.
Scripts that only write embedded data are unaffected. Ones binding listeners or enforcing answer logic fail silently. Page looks fine, logic is gone.
What seems to have changed: these scripts ran fine for a long time, and the addOnReady re-run on language switch is longstanding behaviour I've relied on elsewhere. So the re-run itself isn't new, What looks new is the receiver: on the replay, this is no longer the QuestionData. Also seeing the outgoing and incoming trees briefly both mounted (duplicate section.question ids), though I can't say whether that part is new.
Anyone else seeing this, and does it line up with a JFE release on your side?
