refactor(#86): centrale router + scherm-switcher #94

Closed
opened 2026-04-21 15:07:49 +02:00 by Ghost · 1 comment
Ghost commented 2026-04-21 15:07:49 +02:00 (Migrated from codeberg.org)

Part of #86 (code-audit scope 1). Zie AUDIT.md §7.

Context

Drie navigatie-systemen leven naast elkaar:

  1. `history.pushState` + `popstate` — voor back-button
  2. `?set=...`-deep-link — voor direct-start URLs
  3. Dev-menu — toggelt schermen voor debugging

Plus een 4e impliciete scherm-switcher: 4 verschillende `div-hide`-lijsten die niet overeenkomen (soms wordt `#level-select` wel/niet verborgen, afhankelijk van welk pad je volgt). Leidt tot subtiele bugs bij scherm-transitions.

5 concrete kruisingen geïdentificeerd in AUDIT.md §7.3.

Scope

  • Eén authoritative router-functie: `navigate(screen, params?)`
  • Router schrijft naar URL (pushState) + DOM (hide/show) + geeft events
  • Alle huidige `showScreen()`-calls, `location.hash`-reads, en dev-menu-toggles gaan door router
  • Populate initial state vanuit URL bij load
  • Playwright-test dekking uitbreiden: back-button + deep-link + dev-menu allemaal via één test-suite

Verificatie

  • `node test.js` groen
  • `npx playwright test` 166+ groen (nieuwe router-tests)
  • Handmatig: back-button, `?set=74`-URL, dev-menu scherm-switch geven allemaal consistente state

Effort/Impact/Risico

4 / 4 / 4 — grootste refactor, test-vangnet essentieel

Afhankelijkheid

Sprint-eigen. Niet combineren met #93 (SETS discriminated union) in dezelfde sprint.

Part of #86 (code-audit scope 1). Zie [AUDIT.md §7](../blob/dev/AUDIT.md#7-dev-menu--url-deep-link--scherm-navigatie). ## Context Drie navigatie-systemen leven naast elkaar: 1. \`history.pushState\` + \`popstate\` — voor back-button 2. \`?set=...\`-deep-link — voor direct-start URLs 3. Dev-menu — toggelt schermen voor debugging Plus een 4e impliciete scherm-switcher: 4 verschillende \`div-hide\`-lijsten die niet overeenkomen (soms wordt \`#level-select\` wel/niet verborgen, afhankelijk van welk pad je volgt). Leidt tot subtiele bugs bij scherm-transitions. 5 concrete kruisingen geïdentificeerd in AUDIT.md §7.3. ## Scope - Eén authoritative router-functie: \`navigate(screen, params?)\` - Router schrijft naar URL (pushState) + DOM (hide/show) + geeft events - Alle huidige \`showScreen()\`-calls, \`location.hash\`-reads, en dev-menu-toggles gaan door router - Populate initial state vanuit URL bij load - Playwright-test dekking uitbreiden: back-button + deep-link + dev-menu allemaal via één test-suite ## Verificatie - [ ] \`node test.js\` groen - [ ] \`npx playwright test\` 166+ groen (nieuwe router-tests) - [ ] Handmatig: back-button, \`?set=74\`-URL, dev-menu scherm-switch geven allemaal consistente state ## Effort/Impact/Risico 4 / 4 / 4 — grootste refactor, test-vangnet essentieel ## Afhankelijkheid Sprint-eigen. Niet combineren met #93 (SETS discriminated union) in dezelfde sprint.
Ghost commented 2026-04-21 19:53:04 +02:00 (Migrated from codeberg.org)

Fixed in v2.19.1 — centrale router + scherm-switcher.

Fixed in v2.19.1 — centrale router + scherm-switcher.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jelmer/topoquiz#94
No description provided.