{"groundTruth":{"name":"Maya demo — confusion labels","note":"Small hand-labeled demo set, not a benchmark. Each label is a lecture time where the student would have marked '?' in her notes. The labels are derived from the seeded Maya scenario's intended confusion moments in lib/demoScenario.ts (the file header and DEMO_TIMES), written down before looking at the detector's output: (1) 01:02 — she wrote only the outer derivative 2(3x+1) and erased it at DEMO_TIMES.breakthroughEraseMs (62000); (2) 01:40 — she wrote cos(x²) without the inner derivative and erased it at DEMO_TIMES.correctionEraseMs (100000); (3) ~04:07 — the product-vs-chain attempt x²e^{3x} starts at 246500 ms in buildMayaSession1 (slow writing, erased, never rewritten; inside DEMO_TIMES.gapFromMs..gapToMs). Session 2 is calm writing through the same material, so it carries no labels (every flag there is a false positive). A detection matches a label when it is within toleranceMs; matching is one-to-one, nearest pairs first. A hesitation spike's time is the centre of its 10 s scoring window.","toleranceMs":15000},"report":{"toleranceMs":15000,"spikeScore":0.55,"windowMs":10000,"sessionCount":2,"labelCount":3,"cases":[{"sessionId":"demo-maya-1","title":"Maya — Session 1","source":"stored","labels":[{"atMs":62000,"text":"3x+1: stopped after the outer derivative, erased 2(3x+1)","source":"DEMO_TIMES.breakthroughEraseMs"},{"atMs":100000,"text":"sin(x²): forgot the inner derivative, erased cos(x²)","source":"DEMO_TIMES.correctionEraseMs"},{"atMs":246500,"text":"x²e^{3x}: product vs chain — slow attempt, erased, never rewritten","source":"buildMayaSession1: start of the hesitant attempt (atMs 246500)"}],"spikes":{"matches":[{"label":{"atMs":246500,"text":"x²e^{3x}: product vs chain — slow attempt, erased, never rewritten","source":"buildMayaSession1: start of the hesitant attempt (atMs 246500)"},"labelIndex":2,"detection":{"atMs":255000,"ref":"window@250000","score":0.5925054492502169},"detectionIndex":0,"deltaMs":8500}],"falsePositives":[],"falseNegatives":[{"label":{"atMs":62000,"text":"3x+1: stopped after the outer derivative, erased 2(3x+1)","source":"DEMO_TIMES.breakthroughEraseMs"},"labelIndex":0},{"label":{"atMs":100000,"text":"sin(x²): forgot the inner derivative, erased cos(x²)","source":"DEMO_TIMES.correctionEraseMs"},"labelIndex":1}]},"moments":{"matches":[{"label":{"atMs":62000,"text":"3x+1: stopped after the outer derivative, erased 2(3x+1)","source":"DEMO_TIMES.breakthroughEraseMs"},"labelIndex":0,"detection":{"atMs":62000,"ref":"demo-maya-1:misconception_corrected:62000"},"detectionIndex":0,"deltaMs":0},{"label":{"atMs":100000,"text":"sin(x²): forgot the inner derivative, erased cos(x²)","source":"DEMO_TIMES.correctionEraseMs"},"labelIndex":1,"detection":{"atMs":100000,"ref":"demo-maya-1:misconception_corrected:100000"},"detectionIndex":1,"deltaMs":0},{"label":{"atMs":246500,"text":"x²e^{3x}: product vs chain — slow attempt, erased, never rewritten","source":"buildMayaSession1: start of the hesitant attempt (atMs 246500)"},"labelIndex":2,"detection":{"atMs":250000,"ref":"demo-maya-1:unresolved_gap:250000"},"detectionIndex":2,"deltaMs":3500}],"falsePositives":[],"falseNegatives":[]},"momentTypes":{"demo-maya-1:misconception_corrected:62000":"misconception_corrected","demo-maya-1:misconception_corrected:100000":"misconception_corrected","demo-maya-1:unresolved_gap:250000":"unresolved_gap"},"baseline":[{"startMs":0,"endMs":120000}]},{"sessionId":"demo-maya-2","title":"Maya — Session 2","source":"stored","labels":[],"spikes":{"matches":[],"falsePositives":[],"falseNegatives":[]},"moments":{"matches":[],"falsePositives":[],"falseNegatives":[]},"momentTypes":{},"baseline":[{"startMs":210000,"endMs":280000}]}],"spikes":{"tp":1,"fp":0,"fn":2,"precision":1,"recall":0.3333333333333333,"f1":0.5},"moments":{"tp":3,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"sweep":[{"spikeScore":0.35,"tp":1,"fp":0,"fn":2,"precision":1,"recall":0.3333333333333333,"f1":0.5},{"spikeScore":0.4,"tp":1,"fp":0,"fn":2,"precision":1,"recall":0.3333333333333333,"f1":0.5},{"spikeScore":0.45,"tp":1,"fp":0,"fn":2,"precision":1,"recall":0.3333333333333333,"f1":0.5},{"spikeScore":0.5,"tp":1,"fp":0,"fn":2,"precision":1,"recall":0.3333333333333333,"f1":0.5},{"spikeScore":0.55,"tp":1,"fp":0,"fn":2,"precision":1,"recall":0.3333333333333333,"f1":0.5},{"spikeScore":0.6,"tp":0,"fp":1,"fn":3,"precision":0,"recall":0,"f1":0},{"spikeScore":0.65,"tp":0,"fp":0,"fn":3,"precision":null,"recall":0,"f1":null},{"spikeScore":0.7,"tp":0,"fp":0,"fn":3,"precision":null,"recall":0,"f1":null},{"spikeScore":0.75,"tp":0,"fp":0,"fn":3,"precision":null,"recall":0,"f1":null},{"spikeScore":0.8,"tp":0,"fp":0,"fn":3,"precision":null,"recall":0,"f1":null}]}}