/geteilt — Mit mir geteilt

Hinweis: Rahmen: 00-rahmen.md. Code: packages/frontend/src/components/screens/Briefkastenschirm.tsx · handlers/requests/sharingHandler.ts (fetchEingang) · packages/backend/src/routes/api/sharing.ts (/shares/eingang) · database/controllers/sharingController.ts (getEingang) · database/access/sharing.ts (listEingang) · Test Briefkastenschirm.test.tsx · Nachweis npm run verify:sharing. Entscheidungen N310, N365, N366 (NB10).

Wofür

Der Briefkasten. Bis zum 27.09.2026 erfuhr niemand, dass ihm etwas freigegeben worden war. Eine geteilte Seite tauchte irgendwann in der Seitenleiste auf, ein geteiltes Modul in der Modulliste — wer nicht zufällig hinsah, sah es nie, und wer hinsah, wusste nicht, von wem es kam. Hier steht alles, was andere dem Konto freigegeben haben, an einem Ort: was, von wem, seit wann, mit welcher Rolle, und ein Weg dorthin.

Weg und Rahmen

Route/geteilt — seit dem 28.09.2026 ein Werkzeug des Raums Ablage in Leiste und Schublade (NV08, Schnitt 3; vorher ohne Leisteneintrag, N366)
Gefunden überSchnellsuche → Befehl „Mit mir geteilt" (auch unter „Freigabe", „Freigegeben", „Briefkasten", „Eingang", „shared"); seit dem 28.09.2026 in Leiste und Schublade als Werkzeug des Raums Ablage (NV08, Schnitt 1 und 3, 00-rahmen.md §1); der vierte Kopf der Seitenleiste in den Dokumenten; im Studium eine Zeile unter der Tabelle, sobald dort eine fremde Zeile steht
Merkmalkeines — der Briefkasten gehört zum Gerüst und ist nicht abschaltbar
Zimmerkeines: Rückfall außerhalb jedes Bereichs (Ortwort „Plattform", Anwendungsfarbe)
EndpunktSHARE_EINGANG (POST /api/shares/eingang, schreibt: false)
MCPmir_freigegeben

Er liegt im Kern und in keinem Plugin: Freigaben gibt es in vier Bereichen (Dokumente, Studium, Karteikarten, LaTeX), und ein Bereich, dem der Briefkasten gehörte, müsste die anderen beim Namen nennen. Zu den Karteikarten zählen Kategorien und einzelne Karten; einen eigenen Teilen-Knopf haben die Karteikarten nicht — Kategorien teilt man im Studium, neben Semestern, Modulen und Themen. Karten, Prüfungen und Übungsaufgaben kennt der Server als Arten, einen Knopf dafür hat die Oberfläche nicht. Die Arten sind Tabellennamen aus @shared/types/sharingTypes, die Ziele Wege aus frontendPaths — wie in der Schnellsuche.

Was man sieht

Oben ein Satz: „Nimmt jemand eine Freigabe zurück, verschwindet sie hier." Er steht nur, wenn es Zeilen gibt.

Darunter eine Liste, neueste zuerst (höchstens 200 Zeilen). Je Zeile:

Ist nichts da, steht statt Satz und Liste der Leerzustand „Dir hat noch niemand etwas freigegeben."

Was nicht hier steht — und zwar weil der Server es nicht schickt:

Was man tun kann

ElementWas passiert
Namespringt auf den Schirm, der die Zeile zeigt: eine Seite in den Editor (/documents/editor/<id>), Semester, Modul, Thema, Kategorie, Karte und Prüfung in den passenden Abschnitt des Studiums (/study?a=…), eine Übungsaufgabe in den Tutor, ein LaTeX-Text auf die Startseite des Bereichs (/latex), nicht in seinen Editor

Was man hier nicht kann: eine Freigabe annehmen, ablehnen oder zurückgeben. Zurücknehmen kann nur, wer sie gegeben hat — der Knopf dafür steht im Teilen-Dialog am Ding selbst, beim LaTeX-Text in seinen Einstellungen unter „Freigaben". Dort gibt der Besitzer den genauen Benutzernamen ein und wählt „lesen" oder „schreiben"; die Liste darüber zeigt je Freigabe Benutzername und Stufe mit „Freigabe zurücknehmen". Ein Knopf „Ablehnen" hier wäre ein zweiter Weg zu einer Handlung, die es nicht gibt.

Woher die Daten kommen

Der Schirm ruft einen Weg: SHARE_EINGANG (POST /api/shares/eingang, schreibt: false, ohneRecht: 'quer'), im Frontend fetchEingang in sharingHandler.ts. Die Route steht in packages/backend/src/routes/api/sharing.ts und läuft durch die AES-Strecke (registerEncryptedRoute). getEingang im sharingController.ts lädt zuerst die wirksamen Rechte des Kontos und behält nur die Arten, deren Bereich das Konto hat (bereichssperre); danach fragt es listEingang in database/access/sharing.ts, hinter withUserScope, mit user_id = $1 des Empfängers.

Die Zeilen kommen aus auth.resource_shares, verbunden mit auth.users für den Geber (granted_by_id). Den Namen holt eine Unterabfrage je Art aus der Tabelle der Sache selbst: personal.documents, study.semesters, study.modules, study.topics, study.categories, study.flashcards, study.exams, study.exercises und personal.latex_texte. Eine Zeile ohne Namen fällt heraus (gelöschte Seiten und Texte, deleted_at IS NOT NULL); sortiert wird nach Freigabedatum, neueste zuerst, die Grenze steht in EINGANG_GRENZE (200).

Verschlüsselt ist der Weg; Namen und Rollen liegen in den Tabellen im Klartext. Der Geber, der Name und die Rolle kommen in jeder Antwort neu aus der Datenbank, der Schirm hält nichts vor. Der MCP-Weg (mir_freigegeben) liest dieselbe Antwort.

Was fehlt

  1. Der Sprung trifft den Abschnitt, nicht die Zeile. Ein geteiltes Modul öffnet die Modulliste; dort steht es zwischen den eigenen, mit dem Fremd-Zeichen. Ein Parameter, der eine Zeile hervorhebt, fehlt für Freigaben noch.
  2. Keine Benachrichtigung. Der Briefkasten sagt nicht von selbst, dass etwas Neues da ist — kein Zähler, keine Zeile im Briefing.
  3. Keine Freigabe ablehnen. Wer etwas nicht sehen will, muss den Geber bitten, sie zurückzunehmen.
  4. Keine Filter. Nach Art oder Geber sortieren oder filtern kann man nicht; die Liste steht nur nach Datum.
  5. Freigaben aus anderen Bereichen fehlen. Der Kalender teilt Kategorien über einen eigenen Weg (kalender_kategorie_freigeben); sie stehen nicht in auth.resource_shares und deshalb nicht hier.
  6. Kein Blättern. Nach 200 Zeilen ist Schluss, und ältere Freigaben fehlen ohne einen Satz, der es sagt.
  7. Der Geber steht da, der Eigentümer nicht. Hat ein Mitverwalter eine Seite weitergegeben, steht sein Name an der Zeile; wem die Seite gehört, sagt erst der Editor.
  8. Kein Verweis aus den Karteikarten und dem Tutor. N366 nennt nur Dokumente und Studium; wer in den Karteikarten eine geteilte Karte sieht, findet den Briefkasten nur über die Schnellsuche.
  9. Ein geteilter LaTeX-Text öffnet nicht sich selbst. Der Sprung führt auf /latex, obwohl es seit LX11 den Editor unter /latex/texte/:id gibt; zielFuer in Briefkastenschirm.tsx setzt die Kennung nicht ein.
  10. Die Semesterart steht roh da. Der Name eines Semesters kommt aus listEingang als number || ' · ' || kind, also „3 · winter" oder „2 · sommer" — klein und ungeprüft, während das Studium dieselbe Spalte mit SEMESTER_KIND_WOERTER übersetzt.