feat(ociserve): toon de examenuitslag en lever bewijs aan tot de beoordelaar #2432

Merged
brenno merged 4 commits from feat/toets-uitslag-bewijs into main 2026-10-15 12:23:29 +00:00
Owner

Wat

Twee schakels die de cursist nog miste.

  • Mijn uitslagen (GET …/me/exam-results): onder de lijst met examens staat wat de server na vrijgave meestuurt (goed, percentage, geslaagd). Tot dan staat er alleen dat de uitslag nog komt. OciDeck rekent niets na; cijfers bij een niet-vrijgegeven poging zijn een contractbreuk.
  • Bewijs aanleveren tot het bij een beoordelaar ligt. De cursist kiest een gepubliceerde bewijssoort, levert het bestand aan, OciDeck wacht op de quarantainecontrole en maakt dan pas het bewijsstuk aan (POST …/participants/{id}/evidence-items, met Idempotency-Key). Mijn bewijs toont daarna de beoordelingsstatus en de opmerking van de beoordelaar.

Een nieuwe poging hergebruikt slot en sleutel, zodat een netwerkfout geen dubbel bewijsstuk maakt; een geweigerd slot wordt niet hergebruikt.

Afhankelijkheid

Hangt aan OciServe-PR #668. De spec-pin staat op de main-commit van die merge.

Gewijzigd naast de functie

  • Het laden van het bewijsscherm zit in OciServeEvidenceData; de cursusdialoog kwam anders boven zijn klasseplafond.
  • De knoppenrij van de aanleverdialoog wrapt, omdat Bezig met versturen… in smalle ruimte 37 px overliep.
  • 22 nieuwe teksten (elk in 30 talen) en de routes in de contractpoort.

Niet in deze PR

Badge-gereedheid per badge en het portfolio (D2) en de handmatige beoordeling door een beoordelaar in OciDeck.

Testen

  • make check-static, make l10n-check, make check-registrations, volledige suite met dekkingsvloeren.
  • Tests voor gateway, provider, de aanleverdialoog (soort verplicht, upload → controle → bewijsstuk, geweigerd, nog in controle, hergebruik van sleutel) en de statusweergave.

🤖 Generated with Claude Code

## Wat Twee schakels die de cursist nog miste. - **Mijn uitslagen** (`GET …/me/exam-results`): onder de lijst met examens staat wat de server na vrijgave meestuurt (goed, percentage, geslaagd). Tot dan staat er alleen dat de uitslag nog komt. OciDeck rekent niets na; cijfers bij een niet-vrijgegeven poging zijn een contractbreuk. - **Bewijs aanleveren tot het bij een beoordelaar ligt.** De cursist kiest een gepubliceerde bewijssoort, levert het bestand aan, OciDeck wacht op de quarantainecontrole en maakt dan pas het bewijsstuk aan (`POST …/participants/{id}/evidence-items`, met `Idempotency-Key`). *Mijn bewijs* toont daarna de beoordelingsstatus en de opmerking van de beoordelaar. Een nieuwe poging hergebruikt slot en sleutel, zodat een netwerkfout geen dubbel bewijsstuk maakt; een geweigerd slot wordt niet hergebruikt. ## Afhankelijkheid Hangt aan OciServe-PR [#668](https://pawprint.vigilis.online/brenno/OciServe/pulls/668). De spec-pin staat op de main-commit van die merge. ## Gewijzigd naast de functie - Het laden van het bewijsscherm zit in `OciServeEvidenceData`; de cursusdialoog kwam anders boven zijn klasseplafond. - De knoppenrij van de aanleverdialoog wrapt, omdat *Bezig met versturen…* in smalle ruimte 37 px overliep. - 22 nieuwe teksten (elk in 30 talen) en de routes in de contractpoort. ## Niet in deze PR Badge-gereedheid per badge en het portfolio (D2) en de handmatige beoordeling door een beoordelaar in OciDeck. ## Testen - `make check-static`, `make l10n-check`, `make check-registrations`, volledige suite met dekkingsvloeren. - Tests voor gateway, provider, de aanleverdialoog (soort verplicht, upload → controle → bewijsstuk, geweigerd, nog in controle, hergebruik van sleutel) en de statusweergave. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Reis 3: onder Mijn uitslagen staat wat de server na vrijgave meestuurt
(goed, percentage, geslaagd); OciDeck rekent niets na. Reis 2: bewijs
aanleveren kiest een gepubliceerde bewijssoort, wacht op de
quarantainecontrole en maakt dan pas het bewijsstuk aan; Mijn bewijs toont
de beoordelingsstatus en de opmerking van de beoordelaar. Een nieuwe poging
hergebruikt slot en idempotentiesleutel, een geweigerd slot niet.

Het laden van het bewijsscherm zit in OciServeEvidenceData, zodat de
cursusdialoog niet verder groeit. De spec-pin volgt na de merge van de
OciServe-PR; het fixtureschema is tot dan de PR-tak.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
De bewijssoorten, het indienen met idempotentiesleutel en het lezen van de
eigen bewijsstukken kregen eerst alleen UI-tests met een nagebootste
notifier; nu toetsen gateway en provider zelf het pad, de sleutel, de body en
de weigering zonder lidmaatschap.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Vervangt de PR-tak door de merge-commit 3c7c40f van OciServe PR 668. De
spec zelf is byte-identiek aan de kopie waarop de routes zijn gebouwd.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
De ketenproef tegen een draaiende OciServe liet twee gebreken zien in het
aanleverpad. Het slot werd onthouden voordat de bytes erin stonden; faalde de
upload (geweigerd bestand, netwerkfout), dan wees elke nieuwe poging naar een
leeg slot en bleef "wordt nog gecontroleerd" staan. Nu telt het slot pas na
een geslaagde upload, en een nieuwe poging vraagt een vers slot.

Het slotverzoek stuurde ook geen participant_id mee, waardoor de upload los
van het dossier bleef en "Mijn bewijs" de bewijsstukken niet toonde.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Author
Owner

Ketenproef tegen een draaiende OciServe (3c7c40f, eigen database, de echte OciDeck-app via flutter drive). Het examen-deel werkt: afnemen, inleveren, scoren, geen cijfer vóór vrijgave, daarna "2 van 2 goed · 100% Geslaagd" en "0 van 2 goed · 0% Niet geslaagd".

Het bewijs-deel had in deze PR twee gebreken, nu hersteld in 7ecbba923:

  • Het slot werd onthouden vóór de bytes erin stonden. Na een geweigerd bestand of netwerkfout tijdens de upload wees elke nieuwe poging naar een leeg slot ("wordt nog gecontroleerd", voor altijd). Het slot telt nu pas na een geslaagde upload.
  • Het slotverzoek stuurde geen participant_id mee, waardoor de upload los van het dossier bleef en "Mijn bewijs" de bewijsstukken niet toonde.
    Beide hebben een test die zonder de reparatie faalt.

Deze PR werkt voor een echte cursist pas als OciServe POST /evidence-uploads en de content-PUT voor de deelnemer zelf openzet. Nu geeft de server een cursist daar 403 (content:create); alleen evidence-items heeft het zelfpad. Dat staat niet in deze PR en is een OciServe-wijziging; zie het verslag van de proef. Netwerkfout na indienen is wel veilig bewezen: één bewijsstuk, zelfde sleutel.

Niet gedaan: een geweigerd bestandstype (unsupported_format) en pick_failed tonen nog geen melding (bestaand gedrag in _stepFile).

🤖 Generated with Claude Code

Ketenproef tegen een draaiende OciServe (3c7c40f, eigen database, de echte OciDeck-app via `flutter drive`). Het examen-deel werkt: afnemen, inleveren, scoren, geen cijfer vóór vrijgave, daarna "2 van 2 goed · 100% Geslaagd" en "0 van 2 goed · 0% Niet geslaagd". Het bewijs-deel had in deze PR twee gebreken, nu hersteld in `7ecbba923`: - Het slot werd onthouden vóór de bytes erin stonden. Na een geweigerd bestand of netwerkfout tijdens de upload wees elke nieuwe poging naar een leeg slot ("wordt nog gecontroleerd", voor altijd). Het slot telt nu pas na een geslaagde upload. - Het slotverzoek stuurde geen `participant_id` mee, waardoor de upload los van het dossier bleef en "Mijn bewijs" de bewijsstukken niet toonde. Beide hebben een test die zonder de reparatie faalt. **Deze PR werkt voor een echte cursist pas als OciServe `POST /evidence-uploads` en de content-PUT voor de deelnemer zelf openzet.** Nu geeft de server een cursist daar 403 (`content:create`); alleen `evidence-items` heeft het zelfpad. Dat staat niet in deze PR en is een OciServe-wijziging; zie het verslag van de proef. Netwerkfout na indienen is wel veilig bewezen: één bewijsstuk, zelfde sleutel. Niet gedaan: een geweigerd bestandstype (`unsupported_format`) en `pick_failed` tonen nog geen melding (bestaand gedrag in `_stepFile`). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
brenno merged commit 04dabc54b7 into main 2026-10-15 12:23:29 +00:00
brenno deleted branch feat/toets-uitslag-bewijs 2026-10-15 12:23:30 +00:00
Sign in to join this conversation.
No description provided.