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:
@@ -923,7 +923,7 @@ describe("newAnswerResult two audiences", () => {
|
||||
explanation: "Mercury orbits closest.",
|
||||
createdAt: "2026-01-01T00:00:00Z",
|
||||
};
|
||||
const full = buildAnswer(qd, { values: ["mercury"], confidence: 70, note: "guessed" });
|
||||
const full = buildAnswer(qd, { values: ["mercury"], confidence: 70, thinking: "guessed" });
|
||||
const msg = newAnswerResult("call-1", "quiz", full);
|
||||
const modelSees = JSON.parse((msg.content as { type: "text"; text: string }[])[0]!.text);
|
||||
assert.deepEqual(modelSees, {
|
||||
@@ -931,7 +931,7 @@ describe("newAnswerResult two audiences", () => {
|
||||
answers: [{ index: 1, label: "Mercury" }],
|
||||
correct: true,
|
||||
confidence: 70,
|
||||
note: "guessed",
|
||||
thinking: "guessed",
|
||||
});
|
||||
assert.equal(msg.details, full, "details is the full QuestionAnswerData verbatim");
|
||||
assert.equal((msg.details as { questionText?: string }).questionText, "Which planet is closest to the Sun?");
|
||||
|
||||
Reference in New Issue
Block a user