• v2026.6.28 3a1de067aa

    v2026.6.28
    All checks were successful
    CI / pre-commit (pull_request) Successful in 1m19s
    CI / release-scripts (pull_request) Successful in 11s
    security-scan / Python SCA (pip-audit) (pull_request) Successful in 1m2s
    security-scan / Python SAST (bandit) (pull_request) Successful in 42s
    security-scan / JS SCA (npm audit) (pull_request) Successful in 48s
    security-scan / Filesystem scan (trivy fs) (pull_request) Successful in 25s
    CI / frontend-test (pull_request) Successful in 4m39s
    security-scan / SBOM (trivy) (pull_request) Successful in 20s
    test-build / build (backend) (pull_request) Successful in 2m12s
    test-build / build (pull_request) Successful in 0s
    test-build / build (frontend) (pull_request) Successful in 2m36s
    CI / backend-test (pull_request) Successful in 8m14s
    CI / backend-test-postgres (pull_request) Successful in 9m17s
    CI / pre-commit (push) Successful in 1m17s
    CI / e2e (pull_request) Successful in 5m55s
    CI / release-scripts (push) Successful in 11s
    publish-main / build (backend) (push) Successful in 2m24s
    CI / frontend-test (push) Successful in 4m52s
    security-scan / Python SCA (pip-audit) (push) Successful in 1m3s
    security-scan / SBOM (trivy) (push) Successful in 17s
    CI / backend-test-postgres (push) Successful in 9m27s
    publish-main / build (frontend) (push) Successful in 2m45s
    publish-main / build (push) Successful in 0s
    security-scan / Python SAST (bandit) (push) Successful in 42s
    security-scan / Filesystem scan (trivy fs) (push) Successful in 25s
    security-scan / JS SCA (npm audit) (push) Successful in 43s
    CI / backend-test (push) Successful in 8m31s
    release-and-deploy / release (push) Successful in 35s
    release-and-deploy / pre-commit (push) Successful in 1m19s
    release-and-deploy / build (backend) (push) Successful in 2m28s
    release-and-deploy / build (frontend) (push) Successful in 2m40s
    release-and-deploy / build (push) Successful in 0s
    release-and-deploy / release-scripts (push) Successful in 11s
    release-and-deploy / frontend-test (push) Successful in 5m23s
    release-and-deploy / backend-test (push) Successful in 9m32s
    CI / e2e (push) Successful in 8m28s
    release-and-deploy / backend-test-postgres (push) Successful in 9m54s
    release-and-deploy / e2e (push) Successful in 5m42s
    release-and-deploy / ci (push) Successful in 0s
    release-and-deploy / deploy (push) Successful in 2m4s
    Stable

    robbertbos released this 2026-06-28 21:39:44 +00:00 | 93 commits to main since this release

    Verbeteringen aan de editor

    • De antwoord-composer en notities-editor heeft nu een opmaak-werkbalk. De basis
      bestaat uit een Paragraaf/Kop 1-6-dropdown, vet, cursief, doorhalen, code,
      opsomming, genummerde lijst, citaat en codeblok en links.
      Voor de antwoord-composer aanvullend nog een bijlage- en emoji-knop. Voor de
      notities-editor een onderstrepen, takenlijst en highlight opties.
    • Ctrl/Cmd+K opent een inline link-balk: typ of plak een URL voor de selectie,
      of pas een bestaande link aan / verwijder 'm. Geen window.prompt meer; de
      sneltoets-hint toont platform-bewust (Cmd op Mac, Ctrl elders).
    • Strakkere horizontale marges zodat de editor de beschikbare breedte beter
      benut.

    Reacties en custom emojis

    • Hover of focus op een emoji-reactie toont nu wie er reageerden (avatar +
      naam), met "Jij" bovenaan voor je eigen reactie.
    • Eigen Mattermost-emoji (custom emoticons) worden nu als afbeelding getoond, zowel
      in reacties als in berichttekst; onbekende codes vallen terug op :naam:.

    Verbeterd

    • Importeren: het bestand kies je nu via een gestylede sleepzone (slepen of
      klikken) die de gekozen bestandsnaam toont en een ongeldig bestand duidelijk
      als fout markeert, in plaats van de kale native bestand-knop.
    • Home/End springen nu naar de eerste/laatste kaart binnen een sectie (Focus en
      leeslijst), als aanvulling op de pijltjestoetsen.

    Opgelost

    • Een geopende kaart-modal (en de afbeelding-lightbox) vergrendelt nu de
      achtergrond-scroll, zodat de pagina eronder niet meer wegscrolt.
    • Verzonden/getoonde berichten gebruiken nu dezelfde rustige koppen-schaal als de
      editor (Kop 1 bescheiden, Kop 5/6 niet kleiner dan bodytekst) i.p.v. de grote
      browser-default.
    • Een getypte markdown-link [tekst](url) werd ontsnapt verstuurd
      (\[tekst\](url)) en kwam in Mattermost als platte tekst aan; nu wordt het
      bij het typen een echte link en als schone markdown verstuurd.
    • Afbeelding-previews in de Inbox- en leeslijst-stream worden weer getoond.
    • De bubble-up-popover opende buiten beeld bij een gescrolde pagina (o.a. een
      lange kaart in de modal); staat nu correct boven de knop.

    Design-system opfrissing

    • De reageerders- en mention-profiel-popovers zijn herbouwd op het
      NLDD-popover-component (consistente styling, top-layer-positionering en
      light-dismiss); de reageerders-lijst opent links onder de badge.
    • Statuslabels (concept/ingepland, de "Wacht op verzending"-telling, "Bubbled
      up", "Verschijnt over ...") gebruiken nu de design-system-tag: beter leesbaar,
      AA-contrast in licht en donker, geen HOOFDLETTERS meer.
    • Im-/export tonen een laad-indicator over het paneel bij acties langer dan een
      seconde; de invoer is dan vergrendeld. Korte acties tonen niets.
    • Een thread laden toont nu een laad-animatie naast de tekst.
    • De "/"-zoeksneltoets staat als toetsenbord-hint in het menu (verborgen op
      apparaten zonder toetsenbord).
    • Op smalle schermen klapt de bron-breadcrumb op een kaart in tot … > kanaal;
      de opent server + team in een dropdown. Lange kanaalnamen kappen af met
      een ellipsis, zodat de kaart-acties niet meer buiten de kaart vallen.
    • De geplande/mislukte-berichten-lijst stapelt op smalle schermen in één kolom
      (tijd, bericht, acties onder elkaar) i.p.v. een vaste 3-koloms-grid die de
      inhoud buiten de kaart duwde.

    Onder de motorkap

    • ZAD-productie wordt automatisch (her)deployed bij een CalVer-tag via
      release-and-deploy.yaml (build -> release -> deploy; deploy draait alleen na
      een geslaagde release). PR's draaien test-build (build + scan, geen push),
      main pusht :latest via publish-main; de container-build zelf is een
      herbruikbare workflow (_container-build). De ZAD-deploymentnaam is
      configureerbaar via ZAD_DEPLOYMENT_NAME i.p.v. vast in de workflow, en de
      ZAD-deploy-action staat op v4.0.6.
    • package-lock.json opnieuw gegenereerd met npm 11 (de versie in de
      CI-container) zodat verplichte peer-packages - emojibase en
      vue-eslint-parser - weer in de lockfile staan. Een eerdere herberekening
      onder oudere npm liet ze vallen, waardoor npm ci in de frontend-image en
      de ESLint-stap braken. vue-eslint-parser is bovendien expliciet als
      devDependency vastgelegd.
    • NLDD design-system 0.8.56 -> 0.8.63. Statuslabels en laad-indicatoren
      gebruiken nu nldd-tag / nldd-activity-indicator en de button-variant
      neutral-base; de dark-mode tag-fix komt mee.
    • Afhankelijkheids- en digest-bumps: renovate-image -> 43.245.0, Node
      24.16.0 -> 24.18.0, TipTap 3.26.0 -> 3.27.1, @axe-core/cli 4.11.3 ->
      4.12.1, uv -> 0.11.25, actions/cache v5 -> v6 plus digest-bumps voor
      dev-Keycloak 26.6 en Postgres 17.
    • Release-notes bevatten nu per service een klikbare link naar de
      container-image (image-ref als linktekst naar de package-pagina).
    • Renovate bundelt updates in logische lanes: naast npm / npm-dev / Python /
      nldd nu ook een container images-lane (postgres, keycloak, node, nginx) en
      trivy/uv terug bij de CI-lane. prHourlyLimit 2 -> 5. Security, digest-
      rebuilds en majors blijven losse PR's.
    • Markdown-sanitisatietests draaien onder jsdom i.p.v. happy-dom; happy-dom
      past DOMPurify's allow-lists vanaf 3.4.11 verkeerd toe (blok-tags ontwrapt,
      class= lekt door). Test-only, geen browser-regressie; deblokkeert de
      dompurify security-bump.
    • Renovate bumpt Postgres niet meer voorbij major 17 (allowedVersions <18):
      ZAD draait op 17, dev-compose blijft gelijk tot ZAD meegaat.
    • Security-bumps tegen gepubliceerde advisories, zodat de fail-closed
      pip-/npm-audit-stappen groen blijven. Backend: msgpack 1.1.2 -> 1.2.1
      (GHSA-6v7p-g79w-8964), pydantic-settings 2.13.1 -> 2.14.2
      (GHSA-4xgf-cpjx-pc3j) en joserfc 1.6.5 -> 1.7.1 (CVE-2026-48990).
      Frontend: dompurify 3.4.1 -> 3.4.11 (GHSA-cmwh-pvxp-8882), vite 8.0.10 ->
      8.0.16 (CVE-2026-53571) en via npm-overrides linkify-it 5.0.0 -> 5.0.1
      (GHSA-22p9-wv53-3rq4) + markdown-it 14.1.1 -> 14.2.0 (GHSA-6v5v-wf23-fmfq).

    Container images