fix: verdict death — plan→teach seam inferred from first nodeId-tagged quiz
The Accept/Decline verdict gate is gone (owner ruling 2026-09-26): presenting the plan ends the teacher's turn; the learner's next message is a natural reply. Teaching begins at the first quiz call tagged with a nodeId (probe quizzes carry none) — both folds (view phaseAt3, native phaseAt3Lh) advance on the call itself, and the teach divider renders before that whole assistant block. No backwards compat: verdict markers, the verdict input event, optimistic appends, composer buttons, and projection all deleted; prompts and docs rewritten to the natural flow.
This commit is contained in:
@@ -19,7 +19,6 @@ import {
|
||||
needsContinuation,
|
||||
newAnswerResult,
|
||||
newUserMessage,
|
||||
newVerdictMessage,
|
||||
projectView,
|
||||
type ChatInput,
|
||||
type LhMessage,
|
||||
@@ -133,16 +132,6 @@ export function absorbed(m: LhMessage, record: readonly LhMessage[]): boolean {
|
||||
(r as ToolResultMessage).toolCallId === toolCallId,
|
||||
);
|
||||
}
|
||||
if (role === "custom") {
|
||||
const marker = m as { customType?: string; details?: { accepted?: unknown } };
|
||||
if (marker.customType !== "verdict") return false;
|
||||
return record.some(
|
||||
(r) =>
|
||||
(r as { role?: string }).role === "custom" &&
|
||||
(r as { customType?: string }).customType === "verdict" &&
|
||||
(r as { details?: { accepted?: unknown } }).details?.accepted === marker.details?.accepted,
|
||||
);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -465,12 +454,6 @@ export class SessionModel {
|
||||
else if (input.type === "answer") {
|
||||
const tool = pendingCallTool([...this.base, ...this.tail], input.toolCallId) ?? "quiz";
|
||||
optimistic.push({ ...newAnswerResult(input.toolCallId, tool, input.answer), id: localId() });
|
||||
} else if (input.type === "verdict") {
|
||||
if (input.note) optimistic.push({ ...newUserMessage(input.note), id: localId() });
|
||||
optimistic.push({
|
||||
...newVerdictMessage(input.accepted, new Date().toISOString()),
|
||||
id: localId(),
|
||||
});
|
||||
}
|
||||
if (optimistic.length > 0) this.mutate(() => {
|
||||
this.tail = [...this.tail, ...optimistic];
|
||||
|
||||
Reference in New Issue
Block a user