Files
learnharness/src/agent/prompts/teacher/50-probing-in-brief.md
T
amosblomqvist 5653c77a29 feat: probe/teach agent split — explicit phase markers, position-only plan map
Diagnosis (2026-09-11 user testing, minimal-effort GLM): sessions stuck on
'plan' forever. Two causes: (1) the three-phase view read the stored tree's
currentNodeId, which nothing ever writes post author-once (2026-09-03) — a
structural dead seam; (2) the teacher stochastically left quiz.nodeId
untagged, and done-by-quiz-result semantics would have falsely completed
nodes anyway.

The redesign (docs/probe-teach-split.md) abolishes derived occupancy in
favor of explicit events:

- Two agents over one transcript: createProberAgent (quiz without a
  nodeId field, ask, probe_done) and createTeacherAgent (full toolset,
  plan_init onward). The chat-handler construction branch keys on a
  probe_done part in the transcript. MODELS.prober added.
- probe_done: server-side seam tool — carries the learner assessment
  (strands + free-form edge read), refuses while a question is open or
  the probe is already concluded, and queues a handoff steer through the
  generalized wake pipeline (steers now dedupe by id, not jobId; job
  finalization only for job steers). The teacher auto-wakes and authors
  the plan; the learner sees the assessment via the probe-done card.
- phases: probe ends at a concluded probe_done, plan ends at a
  successful plan_init — strictly sequential, no skipping, no legacy
  compatibility (data wiped at the pivot per doctrine).
- Plan map = position, not completion: derivePlanStatuses reads only
  tagged quiz CALLS (state/outcome feed nothing); current = latest
  tagged node with consecutive duplicates collapsed, visited = earlier
  distinct stays (a revisit stays in both — current wins at render).
  PlanTree is structure-only; currentNodeId/doneNodeIds and the dead
  mutation helpers are gone. No fallback current.
- Prompts split per agent (prompts/prober/, prompts/teacher/ over the
  trimmed shared base); graph-context injection removed entirely
  (shelved, docs/probe-teach-split.md §5); knowledge-graph context no
  longer reaches either agent.
- Plan blocks are full-only snapshots at plan_init (neighborhood
  machinery retired; the persistent DAG window is the future UI wave);
  usage capture unchanged.

Gates: tsc clean, 294/294 tests (phases/plan-tree/plan-blocks/question-
tools rewritten to the new semantics; probe-done + handoff-wake tests
added), lint, build. Live GLM smoke PASS: prober concluded with an honest
assessment, teacher auto-woke, authored a 10-node plan with the block
attached, then tagged checks on slope-instinct → secant derived current/
visited exactly as designed; grading honest both ways (driver off-by-one
proved a wrong answer grades false).
2026-09-11 06:44:20 +03:00

1.3 KiB

The probe that came before — in brief

This session's transcript opens with a probing phase, concluded by the probing agent before you took over: graded questions that bracketed his edge on every strand the lesson depends on, ending in the probe_done assessment (strand by strand: floor, ceiling, misconceptions, what to build from). Read the assessment and the probing conversation itself — the subtleties in how he answered carry signal the summary can't compress.

The probing philosophy, in brief, so you know what those floors and ceilings mean:

  • The probe located the edge of his understanding per strand — the frontier between what he reliably gets right and what runs out — by binary search: escalate hard on success, narrow in on a miss. Nothing in it was a grade for him; it was frontier-mapping for you.
  • Your map (the plan) builds from his floors, starts at his ceilings, and routes around (or repairs) his misconceptions. That is the entire point of the probe's existence.

If he answers a question mid-lesson in a way that makes you unsure where his edge actually sits on some strand, you can run a miniature probe yourself with quiz (adapt each question to the last answer; bracket floor and ceiling) — but never re-run the whole probing phase, and never re-open a concluded strand he's since demonstrated.