# #037 Zwei Nachzügler aus der Durchsicht von Phase 2 **Status:** offen **Im Tracker:** – **Meilenstein:** v0.3.0 **Labels:** phase-2, backend, test **Geschätzt:** 2 h **Tatsächlich:** – ## Ziel Zwei Befunde aus [#036](036-reviewbefunde-phase-2.md), die mehr sind als eine Korrektur: beide verlangen einen Umbau, und beide sind heute kein Schaden, sondern eine offene Flanke. ## 1. `anhaengeDesLaufs` ist ein Lesemodell am falschen Ort `anhaengeDesLaufs(laufId)` liegt in `src/server/services/anhaenge.ts`, nimmt nur eine Lauf-Kennung und wendet **weder Rollen- noch Mandantensicht** an. Beide Aufrufer (`src/app/(app)/laeufe/[id]/page.tsx` und `src/server/queries/druck.ts`) prüfen den Lauf vorher, und die Kommentare sagen das auch — es ist also heute kein Fehler. Es steht aber gegen die Regel aus `CLAUDE.md` und `docs/architektur.md` §2: Lesemodelle liegen in `queries/*` und **wenden ihre Sicht selbst an, damit kein Aufrufer sie vergessen kann**. Zwei Aufrufer in zwei Schichten gibt es schon; der dritte ist der, der es vergisst — und er wird nicht auffallen, weil die zwei bestehenden korrekt sind. - [ ] Nach `src/server/queries/anhaenge.ts` ziehen, mit `HandelnderBenutzer` als Parameter - [ ] Mandanten- und Rollensicht dort anwenden, nicht beim Aufrufer - [ ] Test: ein Benutzer, der auf andere Kunden beschränkt ist, bekommt eine leere Liste — **ohne** dass der Aufrufer vorher geprüft hat - [ ] Gegenprobe: die Sicht entfernen, der Test muss rot werden ## 2. `/meine-geraete` fehlt in der 390-px-Prüfung Die Seite ist das Ergebnis von #035 und ausdrücklich mit „am Handy kein horizontales Scrollen“ abgenommen — von Hand. In `tests/e2e/mobil.spec.ts` steht sie nicht, und sie kann dort nicht einfach ergänzt werden: sie verlangt das Recht `selbstauskunft`, und das hat nur `MITARBEITER`. Der Ablauf meldet sich als Admin an und würde die Verweigerungsseite messen — die scrollt garantiert nicht. - [ ] Ein `MITARBEITER`-Konto für die Abläufe: lokales Passwort, verknüpft mit einer `Mitarbeiter`-Zeile (der CHECK `Benutzer_mitarbeiter_nur_bei_rolle` verlangt die Verknüpfung) - [ ] Im Seed oder im E2E-Vorlauf? **Im Vorlauf**, denn ein Konto mit bekanntem Passwort gehört nicht in einen Seed, der auch produktiv läuft - [ ] `/meine-geraete` in die Seitenliste von `mobil.spec.ts` - [ ] Dabei prüfen, was ein `MITARBEITER` auf den **anderen** Seiten sieht: die Rollenmatrix ist in Vitest vollständig, aber kein Ablauf klickt sie durch ## Akzeptanzkriterien - [ ] `anhaengeDesLaufs` liegt in `queries/`, und ein Test belegt die Sicht ohne Vorprüfung des Aufrufers - [ ] `/meine-geraete` wird bei 390 px gemessen, mit einem echten `MITARBEITER` - [ ] Beide Gegenproben werden rot