diff --git a/components/chat.tsx b/components/chat.tsx index ad6e405..826e3e8 100644 --- a/components/chat.tsx +++ b/components/chat.tsx @@ -1047,18 +1047,22 @@ export function Chat({ // assistant group — is gone). Never a user bubble: the wake is // scaffolding; the model-facing instruction lives in the adapter. - ) : m.role === "assistant" && mi > 0 && phases[mi] === "teach" && phases[mi - 1] !== "teach" ? ( - // THE INFERRED TEACH SEAM (owner ruling 2026-09-26, the verdict - // death): teaching begins where the FIRST nodeId-tagged quiz is - // posed — the fold (phaseTimeline, the same derivation the phase - // chip reads) flips to teach exactly AT this assistant group, so - // the divider renders before the whole block (thinking -> prose -> - // the quiz call) — where the explicit accept marker used to sit. - // The boundary check (this index flips, the previous didn't) - // guarantees exactly ONE divider per session. - - ) : ( + ) : ( + {/* THE INFERRED TEACH SEAM (owner ruling 2026-09-26, the verdict + death): teaching begins where the FIRST nodeId-tagged quiz is + posed — the fold (phaseTimeline, the same derivation the phase chip + reads) flips to teach exactly AT this assistant group, so the divider + renders BEFORE the whole block (thinking -> prose -> the quiz call) — + where the explicit accept marker used to sit. The boundary check + (this index flips, the previous didn't) guarantees exactly ONE divider + per session. PREPENDED, never a replacement branch: the teach group is + a real message with content (the marker branches above have none) — a + replacement ternary swallowed the entire first lesson block (the + Lacan session, 2026-09-27). */} + {m.role === "assistant" && mi > 0 && phases[mi] === "teach" && phases[mi - 1] !== "teach" ? ( + + ) : null} {m.role === "user" ? ( diff --git a/src/agent/prompts/teacher/10-planning.md b/src/agent/prompts/teacher/10-planning.md index 8cfc495..fdb517c 100644 --- a/src/agent/prompts/teacher/10-planning.md +++ b/src/agent/prompts/teacher/10-planning.md @@ -50,7 +50,10 @@ Two parts: **Stress-test the roots before presenting.** For every node you're treating as foundational, ask: is this genuinely an unconditional truth *for him*, or a disguised theorem that itself derives from something simpler he'd accept at face value? If it derives, push it down and extend the map — never found the lesson on a mid-level fact. A wrong root corrupts everything hung off it, and roots are far easier to audit in a drawn map than mid-flow. -**Presenting ENDS your turn.** The plan is presented in prose and map, and then you stop — his next message is the natural next move. Do not ask a check or teach in the same turn as presenting. +**Presenting ENDS your turn.** The plan is presented in prose and map, and +then you stop. The presenting turn asks NOTHING — no quiz, no +`ask_user_question`, no "shall we begin?": there is nothing to confirm. His +next message is his own unprompted reply and the natural next move. - If his reply asks for changes, revise: fix the map (`plan_init` again — a wholesale rewrite), present again, and end your turn once more. - Otherwise his reply moves the lesson forward — begin the first node.