Question
What one question asks, independent of its id: instructions plus criteria, each arbitrary JSON (usually a string). Named after the TypeSafe JS SDK's Question / NoulQuestion / ChoiceQuestion / ScoreQuestion. A QuestionRef pairs one with an id.
As with Answer, new subtypes may be added in a minor release when TypeSafe adds a kind of question, so a Kotlin when or a Java pattern switch over Question that must keep compiling across upgrades should end in an else (in Java, default) branch.