teach/public/js/widgets
Ramon e7bb76b76d
All checks were successful
dev - build & deploy naar test / build-and-deploy (push) Successful in 1m9s
feat: klassenmanagement - niveaugroep + niveau per leerling per vakgebied (v0.4.34-beta)
- Grootste openstaande roadmap-punt. Nieuwe tabel pupil_levels
  (db/019_pupil_levels.sql, zelfde class_id/pupil_id-vorm als
  assignments) legt per vakgebied (taal/rekenen/world) een niveaugroep
  vast (groep 1-8, gebaseerd op de leerjaren van de basisschool waaraan
  de leerdoelen gekoppeld zijn) + niveau (1-3, fijnmazige verfijning
  BINNEN die groep). Klas-standaard met individuele leerling-overrides,
  net zo laagdrempelig instelbaar als de standaard - het speciaal-
  onderwijs-geval waar dat vanaf het begin de norm is.
- Server: GET/PUT/DELETE /levels/class/:id en /levels/pupil/:id
  (src/api.js) hergebruiken exact het assignments-patroon (upsert via
  partial-unique-index, pupil-eerst-dan-klas-resolutie), plus
  GET /my/level voor de leerling-kant. Zelfde permissie
  (assignments.manage) en sameSchool/teacherOnly/pupilAccessible-
  guards als de bestaande toewijzingsroutes.
- Nieuwe admin-tab "Klassenmanagement": klas + vakgebied kiezen, een
  klas-standaard instellen, en per leerling de effectieve groep/niveau
  zien (overerft van de klas tenzij een eigen afwijking is ingesteld)
  met bewerk- en terug-naar-standaard-knoppen.
- ECHTE inhoudskoppeling, niet alleen een standaardwaarde: rekenen is
  het eerste vakgebied waarvan de SLO/TULE-leerlijn direct in
  getalgrenzen te vertalen is (groep 3 t/m 20, groep 4 t/m 100, groep 5
  t/m 1000, groep 6 t/m 10.000). Nieuwe SLO_MATH_RANGES/mathRangeFor()
  in data.js; math.js's gen() gebruikt dit voor de daadwerkelijke
  getallen zodra een leerling een groep heeft (S.yearGroup), met het
  bestaande niveau 1-3 als verfijning daarbinnen. Zonder groep blijft
  het oude vaste 10/20/100-gedrag exact bestaan.
- pupil.js geeft groep/niveau door aan taal/rekenen-widgets bij het
  mounten: niveau is een standaardwaarde (een al opgeslagen bord-niveau
  blijft leidend), groep wordt voor rekenen-widgets altijd meegegeven
  (er is geen "oud" groep-concept om te respecteren). Terzijde ook de
  stille .catch() op de nieuwe async renderPupilWidgets() opgelost.
- Taal/wereldoriëntatie krijgen deze ronde nog geen eigen
  inhoudskoppeling (vraagt een eigen contentbron per groep, nog niet
  uitgezocht) - eerlijk benoemd als vervolgstap, geen loze belofte.
- Tests: test/pupil-levels.test.js (10 tests) dekt de server-routes
  (mocked-pool-patroon) én - via dezelfde vm-techniek als elders in
  test/widgets.test.js voor MONEY_LEVELS - een ECHTE (niet regex-)test
  van mathRangeFor die bevestigt dat elke groep de juiste getalgrens
  oplevert en niveau nooit boven de groep-grens uitkomt. Twee bugs
  gevonden en gefixt tijdens het schrijven van deze tests: null-yearGroup
  werd per ongeluk als groep 1 behandeld i.p.v. "geen groep", en de
  testrol had geen klas-eigenaarschap waardoor 403 in plaats van 200
  terugkwam. Volledige testsuite: 128/128.
- Live geverifieerd in de sandbox: klas-standaard + leerling-override
  instellen in de nieuwe admin-tab, en drie scenario's in de
  leerling-omgeving die bevestigen dat de daadwerkelijk gegenereerde
  sommen binnen de juiste groep-grens blijven (geen klassenmanagement →
  ongewijzigd oud gedrag; groep zonder eigen bord-niveau → volledige
  groep-grens; groep mét een al opgeslagen bord-niveau → dat niveau
  blijft leidend, geschaald naar de juiste groep-grens).
- public/js/data.js bevatte al niet-gerelateerde, nog niet gecommitte
  wijzigingen van vóór deze sessie (extra taalthema's/woorden) - alleen
  de SLO_MATH_RANGES/mathRangeFor-hunk is hier meegenomen (git add -p),
  de rest blijft bewust ongemoeid staan, net als test/language-library.test.js.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014EPxzBVRXZZnBPvSAaPAbJ
2026-07-19 15:31:26 +02:00
..
anchor.js fix: ankerkiezer opent alleen op een bewuste tik en tekenbalk krimpt weer geminimaliseerd (v0.3.64-beta) 2026-07-16 08:09:33 +02:00
ball.js v0.3.10-beta: rapporteer widgetvoortgang vanuit leerling-speelmodus 2026-07-14 15:00:31 +02:00
birthday.js v0.3.07-beta: voeg educatieve widgets toe 2026-07-14 13:39:57 +02:00
breathe.js feat: vier sociaal-emotionele widgets, waaronder een geluidsmeter (v0.4.21-beta) 2026-07-19 00:44:39 +02:00
compliments.js feat: vier sociaal-emotionele widgets, waaronder een geluidsmeter (v0.4.21-beta) 2026-07-19 00:44:39 +02:00
dice.js feat: maak widgets speelser en kindvriendelijker (v0.3.77-beta) 2026-07-16 14:15:28 +02:00
feelings.js feat: vier sociaal-emotionele widgets, waaronder een geluidsmeter (v0.4.21-beta) 2026-07-19 00:44:39 +02:00
flits.js feat: maak widgets speelser en kindvriendelijker (v0.3.77-beta) 2026-07-16 14:15:28 +02:00
hak.js feat: maak widgets speelser en kindvriendelijker (v0.3.77-beta) 2026-07-16 14:15:28 +02:00
learning.js feat: personage-aanmoediging uitgebreid naar klok, geld, plaatswaarde en spellen (v0.4.32-beta) 2026-07-19 14:03:58 +02:00
letters.js feat: breid taalwidgets en plaatjesbibliotheek uit (v0.3.80-beta) 2026-07-16 16:27:38 +02:00
light.js feat: maak widgets speelser en kindvriendelijker (v0.3.77-beta) 2026-07-16 14:15:28 +02:00
math.js feat: klassenmanagement - niveaugroep + niveau per leerling per vakgebied (v0.4.34-beta) 2026-07-19 15:31:26 +02:00
media.js v0.1.02: opsplitsing in css/, js/core|data|board|app en js/widgets/* (geen functionele wijziging) 2026-07-09 21:56:49 +02:00
mind.js v0.1.02: opsplitsing in css/, js/core|data|board|app en js/widgets/* (geen functionele wijziging) 2026-07-09 21:56:49 +02:00
names.js feat: maak widgets speelser en kindvriendelijker (v0.3.77-beta) 2026-07-16 14:15:28 +02:00
noise.js feat: vier sociaal-emotionele widgets, waaronder een geluidsmeter (v0.4.21-beta) 2026-07-19 00:44:39 +02:00
notes.js feat: maak widgets speelser en kindvriendelijker (v0.3.77-beta) 2026-07-16 14:15:28 +02:00
numberline.js feat: maak widgets speelser en kindvriendelijker (v0.3.77-beta) 2026-07-16 14:15:28 +02:00
sentence.js feat: maak widgets speelser en kindvriendelijker (v0.3.77-beta) 2026-07-16 14:15:28 +02:00
timer.js v0.1.02: opsplitsing in css/, js/core|data|board|app en js/widgets/* (geen functionele wijziging) 2026-07-09 21:56:49 +02:00
world.js feat: personage-aanmoediging uitgebreid naar klok, geld, plaatswaarde en spellen (v0.4.32-beta) 2026-07-19 14:03:58 +02:00
write.js v0.1.02: opsplitsing in css/, js/core|data|board|app en js/widgets/* (geen functionele wijziging) 2026-07-09 21:56:49 +02:00