quick-fixes round: quiz-only teach-check reveal, ESC-abort confirm popup + question dismissal, confidence prompt diet
- requiresReveal gates on pending.tool === 'quiz' (owner: only graded quizzes arrive collapsed; ask/explain always open) - ESC-abort chain opens AbortTurnDialog everywhere (owner ruling); from a pending question abort IS dismissal — dismissedAnswer rides the answer path, the teacher acknowledges the skip in its next turn; popup-Esc is claimed via the state gate (two window listeners fire per Esc) - 25-confidence.md: stripped the slider/JSON/calibration mechanics — pure reading doctrine remains - toolQuestionKind named once in core (dock parity), dock switched to it
This commit is contained in:
@@ -615,6 +615,23 @@ export function buildAnswer(qd: QuestionData, req: AnswerRequest): QuestionAnswe
|
||||
* note. The full graded QuestionAnswerData rides `details` for the record
|
||||
* and the UI; this is the JSON the agent actually reads.
|
||||
*/
|
||||
/** The dismissal record (ESC-abort from a pending question, owner
|
||||
* 2026-10-02): the minimum honest answer. The model sees
|
||||
* {kind, dismissed:true} via compactAnswerForModel; the answered card
|
||||
* renders the question text + "skipped". Rides the same answer path —
|
||||
* the teacher acknowledges the skip in its next turn, exactly like any
|
||||
* answer. */
|
||||
export function dismissedAnswer(kind: QuestionKind, questionText: string): QuestionAnswerData {
|
||||
return {
|
||||
kind,
|
||||
questionText,
|
||||
dontKnow: false,
|
||||
answers: [],
|
||||
dismissed: true,
|
||||
answeredAt: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
export function compactAnswerForModel(ad: QuestionAnswerData): Record<string, unknown> {
|
||||
if (ad.dismissed) return { kind: ad.kind, dismissed: true };
|
||||
const out: Record<string, unknown> = { kind: ad.kind };
|
||||
|
||||
Reference in New Issue
Block a user