- Roadmap-punt "de voortgangen werken niet" onderzocht (niet blind
herbouwd - eerst gediagnosticeerd via de code en git-geschiedenis).
- Gevonden: pupil.js zette sinds v0.3.15-beta (toen kijken/werken-modus
werd toegevoegd) readonly:true in BEIDE takken van de modus-keuze -
een kopieerfout, want de hele reden voor die commit was net dat
"werken" de leerling wél moet laten werken. In "werken"-modus hoort
er geen readonly-vlag te staan; "kijken" (blijft ongewijzigd) is de
enige modus die dat nodig heeft.
- Concreet effect: de twee widgets die opts.readonly daadwerkelijk
lezen (letters.js/anchor.js) verborgen voor leerlingen in
werken-modus onterecht hun eigen bewerk-gereedschap (woordenlijst-
editor, opslaan/bibliotheek) - gereedschap dat een leerling in
werken-modus wél hoort te zien. De kernoefening zelf (spellen,
slepen) werd hierdoor niet geblokkeerd, dus dit verklaart niet de
volledige klacht - overige widgets negeren opts.readonly toch al.
- Tegelijk de stille `.catch(()=>{})` op het voortgang-loggen vervangen
door `console.warn` bij een mislukte POST /my/progress: een mislukte
log (verlopen sessie, weggehaalde toewijzing, servergolf) verdween
eerder spoorloos, wat een "werkt niet"-klacht onmogelijk te
onderzoeken maakte.
- Nieuwe test/progress-logging.test.js dekt het serverpad dat nog
helemaal geen tests had: leerling-eigen toewijzing wint van
klasbrede, thuiskind-zonder-school valt terug op de gekoppelde
ouder, geen-toewijzing geeft 400 zonder insert, niet-leerling geeft
403, ongeldige widgetId/widgetType geeft 400 - alle zes bevestigen
dat de SQL/toewijzingslogica zelf klopt, wat het probleem verder
vernauwt tot de nu twee gefixte punten hierboven of iets dat alleen
in de echte omgeving van de gebruiker reproduceerbaar is.
- Live geverifieerd: werken-modus toont nu het bewerk-gereedschap in
letters.js (voorheen verborgen), kijken-modus blijft exact
ongewijzigd (overlay + verborgen gereedschap). Volledige testsuite:
118/118.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014EPxzBVRXZZnBPvSAaPAbJ