two questions per teaching unit: predict → teach → check (owner 2026-10-03)
The teaching cycle gains its motivation question. The teach quiz schema now carries a REQUIRED type field — predict (posed before the teaching, arrives open, the learner predicts the next step) or check (posed after, arrives collapsed behind the reveal). The prober's quiz stays role-less. - core: quizInputObject.type union + normalizeQuizType + the reveal law as pure quizNeedsReveal; QuestionData.questionType; note → thinking rename (legacy reads fold back); readingThinking channel on answers; compactAnswerForModel emits thinking / thinkingWhileReading - tools: descriptions stripped to mechanics — QUIZ_OPTION_CRAFT and EXPLAIN_DOCTRINE deleted, doctrine moved to the prompt layer (reverses the 2026-09-27 placement, owner 2026-10-03); shared quizDescription/explainDescription builders differ only in deltas - prompts: shared/20-question-tools.md rewritten (option craft, transcribed-speech leniency, the two thinking channels); new teacher/28-predictions.md (cycle, roles, skip rule, resolution law); 20-teaching + 30-question-principles scoped to the new taxonomy - UI: predictions render open with a Prediction eyebrow, verdict shows but the explanation tucks behind a toggle; the reading-thinking field mounts while a check waits (dictation claims it until reveal); answered card separates thinking vs thinking-while-reading blocks
This commit is contained in:
@@ -29,6 +29,7 @@ const TEACHER_QUIZ = {
|
||||
],
|
||||
correctAnswer: "truth",
|
||||
explanation: "Convention-T schematizes truth for the object language.",
|
||||
type: "check", // teach-only role field — the display parse KEEPS it (the dock gates by it)
|
||||
nodeId: "convention-t", // teacher-only field — the display parse must accept and strip it
|
||||
};
|
||||
|
||||
@@ -55,6 +56,7 @@ describe("parseQuizInput", () => {
|
||||
assert.ok(parsed);
|
||||
assert.equal(parsed.question, TEACHER_QUIZ.question);
|
||||
assert.equal((parsed as Record<string, unknown>).nodeId, undefined, "unknown keys are stripped, not trusted");
|
||||
assert.equal((parsed as { type?: unknown }).type, "check", "the role field survives the display parse (owner 2026-10-03)");
|
||||
});
|
||||
|
||||
it("parses a boundary-valid PROBER quiz (no nodeId at all)", () => {
|
||||
|
||||
Reference in New Issue
Block a user