/documents und /documents/editor/:id — Dokumente

Hinweis: Rahmen: 00-rahmen.md. Code: packages/plugins/src/documents/ (9064 Zeilen — der größte Bereich) · Nachweis npm run verify:dokumente.

Wofür

Das Archiv: Regale, Papier, Ordnung. Ein Block-Editor wie in Notion — der Block ist die Einheit, nicht die Seite.

Zwei Schirme:

Weg und Rahmen

Route/documents, /documents/editor/:documentId, ?neu legt an, ?block=<block> rollt zu einem Block (Abschnittschip, WI-261015-abschnittschips-reste)
MerkmalDOCUMENTS
ZimmerArchiv · Lautstärke 2 · #00b8a9

Was man sieht

Die Übersicht

Karten mit Symbol, Titel und Weg. Bis zum 09.09.2026 stand hier eine Tabelle mit sechs Spalten, darunter „Zugriff: OWNERSHIP" — kein Wissen, sondern ein Aufzählungswert. Danach zwei Listen (zuletzt geöffnet, zuletzt geändert): die Fragen stimmten, die Form nicht.

Der Weg ist die Angabe, die wirklich fehlt — nicht wann, sondern wo: drei Seiten können „Zusammenfassung" heißen; welche gemeint ist, sagt der Weg dorthin.

Zeitangaben stehen in Worten: „vor 3 Tagen" beantwortet die Frage, die man hat; „08.09.26" muss man erst gegen heute rechnen.

Ohne Seiten steht der Horizont (seit 28.09.2026, RL02): ein Satz in der Lesetinte über den Leerzustand-Baustein statt eines blassen Hinweises. Die Karten stehen als Spalte — Symbol, Titel, Weg; als Knopf hatte das Blatt sie vorher in eine Zeile geschoben.

Der Kopf trägt das Zimmer (seit 30.09.2026, E18, N457): der Titel „Dokumente“ in Newsreader, rechts „Neue Seite“ und daneben „Neue Mindmap“ (seit 20.10.2026, NB-261019-mindmap-als; Zeichen `baum`). Beide Knöpfe stehen als Gruppe und brechen gemeinsam um — am Telefon in eine eigene Zeile unter dem Titel. „Neue Mindmap“ legt eine Mindmap mit diesem Titel an und öffnet sie mit der Wurzel im Schreibfeld; dasselbe tut `?a=mindmap&neu` und „Mindmap“ unter „Neu“ im Kopf. Das Ortwort „Archiv“ darüber ist seit ES-261009 (10.10.2026) entfallen; das Motiv (Regal) zeichnet sich bei Lautstärke 2 nicht. Vorher stand der Titel allein in der Grotesk — der einzige Bereichsschirm ohne Ort. Die offene Seite im Editor trägt kein Zimmer; sie ist Papier (Guide §12).

Ein Dokument ist ein Blatt (Guide §6): scharfe Ecken (seit dem 10.10.2026 wirklich null; vorher rundete der Werkstoff papier sie leicht, ES-261009-listen-flaechen-statt), Papier als Werkstoff, oben rechts ein Eselsohr in Bereichsfarbe. Kein Glas — Glas ist für das, was schwebt.

Mögliche Dubletten (seit 30.09.2026, E08, N453): Tragen zwei Seiten außerhalb des Papierkorbs denselben Titel — Groß- und Kleinschreibung, Leerzeichen und Satzzeichen zählen nicht, das Symbol davor auch nicht —, steht unter dem Kopf „„Analysis“ gibt es zweimal — zusammenführen?“ mit dem Titel des Paares (seit 10.10.2026, ES-261009-oberflaechentexte-ohne; bis dahin nur „Eine mögliche Dublette“) bzw. „2 mögliche Dubletten zusammenführen?“. Der Knopf öffnet ein Fenster mit den Paaren; „Verschmelzen“ stellt beide Seiten nebeneinander, mit Datum und Verknüpfungen je Art, und lässt wählen, welche bleibt (N349). Danach steht in derselben Zeile eine Meldung mit „Wieder trennen“. Ohne Paare steht nichts da. Zwei Seiten, die gewollt gleich heißen, merkt „Sind verschieden“ je Konto (seit 01.10.2026, E29, N466); sie stehen dann nicht mehr im Hinweis. Unter der Liste holt „{n} als verschieden gemerkt“ sie mit „Wieder anbieten“ zurück; sind alle Paare gemerkt, verschwindet die Zeile, und zurückgeholt wird mit dem MCP-Werkzeug dublette_verschieden (N469). Der Baustein gehört dem Gerüst links (Dublettenhinweis), die Form steht im Guide §15.3. Im Fenster stehen die Paare seit dem 10.10.2026 als Zeilen mit Haarlinien statt als Karten aus Karton — das Fenster ist schon die Fläche (ES-261010-restliche-kartenraster); dasselbe gilt in den Aufgaben.

Das Raster der Blätter bleibt (geprüft am 10.10.2026, ES-261010-restliche-kartenraster): „Zuletzt geöffnet“ und „Zuletzt geändert“ stehen weiter als Blätter nebeneinander (Guide §6). Ob ein Raster aus Blättern eine Liste sein sollte, ist offen.

Die Seitenleiste

Der Baum zeigt ausschließlich eigene, freigegebene und öffentliche Seiten. Die frühere Verwaltungsumschaltung „alle zeigen“ ist seit D34 entfernt; auch ein Administratorkonto bekommt hier keine Titelliste fremder Konten. Für begründete Einsicht bleibt nur der protokollierte Identitätswechsel.

ElementWas es tut
Seiten durchsuchen…filtert den Baum
BaumSeiten und Unterseiten, aufklappbar
Unterseite anlegenam Elternteil
In den Papierkorbdreistufiges Löschen, erste Stufe. Seit dem 23.09.2026 zwei Klicks (Q09, N165): Der Mülleimer an der Zeile wird zu „ja, weg" und „doch nicht", erst „ja, weg" legt die Seite samt Unterseiten in den Papierkorb — dreißig Tage zurückzuholen. Vorher genügte ein Klick. Ist die Seite gerade offen, geht der Editor zur Übersicht, aber nur, wenn der Server zugestimmt hat
Wiederherstellenholt aus dem Papierkorb
Endgültig löschenletzte Stufe. Seit dem 23.09.2026 zwei Klicks (Q09, N165): „ja, endgültig" / „doch nicht" an derselben Stelle; bis dahin löschte ein Klick die Seite samt Unterseiten und Blöcken. Seit demselben Tag über den Papierkorb (F75): Der Klick geht an PAPIERKORB_ENDGUELTIG mit der Art dokument, wie jede andere Art — nur, was dort liegt, und nur vom Besitzer. Die Freigaben der Seite und ihrer Unterseiten gehen mit (Wanderung 108). Den eigenen Weg /api/documents/delete gibt es nicht mehr: Er fragte nicht nach dem Papierkorb, ließ eine Freigabe mit Löschrecht genügen und ließ die Freigaben der Unterseiten stehen
FavoritSterne oben
VerschiebenZiehen im Baum
Mit mir geteiltvierter Kopf, unter dem Papierkorb: führt in den Briefkasten /geteilt (geteilt.md, N366)

Tastatur und Daumen (seit 28.09.2026, RL02; Baum seit 30.09.2026, RL16): Der Baum ist ein role="tree" mit einem einzigen Tabulatorhalt, der mitwandert — Tab führt hinein und wieder hinaus. Pfeil hoch und runter gehen durch die sichtbaren Zeilen, rechts klappt auf oder geht zum ersten Kind, links klappt zu oder geht zum Elternteil, Pos1 und Ende an Anfang und Schluss; Enter und Leertaste öffnen die Seite. Die Zeilen tragen aria-level, aria-setsize und aria-posinset. Die Griffe (Stern, Unterseite, Papierkorb) erreicht Tab nur in der Zeile mit dem Halt, die Klappe gar nicht. Favoriten bleiben einzelne Halte. Ohne Zeiger (hover: none) sind Stern und Griffe immer sichtbar, am Daumen messen Köpfe, Klappen und Griffe vierzig Bildpunkte. Das Suchfeld erscheint erst, wenn es Seiten gibt.

Bewegung (seit 07.10.2026, BW-261007-listen): Der Baum zeichnet seine sichtbaren Zeilen flach, und jede ist ein Eintrag der Form zeile. Beim Aufklappen, Anlegen, Verschieben und Löschen kommen und gehen die Zeilen einzeln in der Höhe, die übrigen gleiten an ihren neuen Platz. Die Bewegung liegt in einer Hülle um die Zeile, damit das Ziehen zwischen Seiten (HTML-Ziehen) unberührt bleibt.

Fremde Seiten tragen ein Zeichen (seit 27.09.2026, NB10). Eine Seite, die einem anderen Konto gehört und diesem freigegeben ist, trägt im Baum und unter „Favoriten" hinter dem Titel das Zeichen „geteilt" — knapp, ohne Namen, weil in der schmalen Leiste jeder Buchstabe dem Titel fehlt. Wem sie gehört, sagen Zeigerhinweis und Vorlesetext („Geteilt von Ada"). Woher: Die Seitenliste kennt je Eintrag viaShare und den Anzeigenamen des Eigentümers; useDocumentTree macht daraus fremdVon an der Zeile.

Der Baum überlebt einen Ausfall (seit 27.09.2026, L03, Grundsatz 33). Bis dahin setzte ein Fehlschlag beim Laden die Liste auf leer, und die Leiste sah aus wie „keine Seiten". Jetzt liegt der Baum — Titel, Zeichen, Ordnung, Stern — unter denotato.rueckfall.documents.baum (beim Abmelden weg). Antwortet der Server nicht, bleibt der Baum vom letzten Mal stehen, und über Leiste und Inhalt steht die Marke „Der Server antwortet gerade nicht — Stand von …". Sie steht über der ganzen Fläche, weil Übersicht und Leiste aus demselben Baum lesen. Der Inhalt der Seiten wird nicht aufgehoben: Wer ohne Netz eine Seite öffnet, bekommt die Fehlermeldung des Editors. Der Papierkorb hat keinen Rückfall.

Teams (seit 18.10.2026, NB-261018-teams-schirm)

In der Leiste steht unter den eigenen Seiten der Abschnitt „Teams“. Er zeigt jedes Team, in dem man Mitglied ist, mit seinem eigenen Seitenbaum. Das Plus neben der Überschrift legt ein Team an: Man gibt einen Namen ein, und man ist dann sein Verwalter. Jede Teamzeile hat zwei Griffe: Der eine legt eine neue Seite im Team an, der andere öffnet die Verwaltung. Im Baum legt der Griff an einer Seite eine Unterseite an. Die eigenen Seiten in einem Team stehen nur dort und nicht noch einmal unter den eigenen Seiten.

Eine Seite, deren Verfasser das Team verlassen hat, trägt den Hinweis „ehemaliges Mitglied“. Die Seite bleibt im Team.

/documents/teams/:teamId — die Verwaltung. Die Seite zeigt Leiste und Inhalt wie die Übersicht. Jedes Mitglied sieht die Mitglieder mit Rolle und Beitrittsdatum und kann das Team verlassen. Dafür gibt es eine Rückfrage. Das letzte Mitglied kann nicht gehen: Statt des Knopfs steht dort „Du bist das letzte Mitglied. Wer gehen will, lädt erst jemanden ein.“, und der Server lehnt es ebenso ab (seit NB-261018-teams-nachprobe). So bleibt kein Team mit Seiten, aber ohne Mitglieder zurück. Ein Verwalter kann außerdem:

Ein neuer Link ist nur in dem Moment zu sehen, in dem er angelegt wird. Danach führt die Liste der offenen Links nur noch ihr Ablaufdatum. Den letzten Verwalter lehnt der Server ab, wenn er gehen oder entfernt werden soll.

/documents/teams/join#… — der Beitritt. Der Link trägt das Zeichen hinter #. Der Browser schickt diesen Teil nicht, also sieht ihn weder der Server-Log noch ein Referrer. Der Schirm nennt das Team und wer eingeladen hat. Er sagt auch, dass die Mitglieder den eigenen Namen sehen. Erst „Beitreten“ tritt bei. Wer schon Mitglied ist, bekommt „Zum Team“. Ein abgelaufener oder zurückgezogener Link zeigt „Dieser Link gilt nicht mehr“. Nach dem Beitritt ersetzt die Verwaltung den Link im Verlauf. So zeigt „Zurück“ ihn nicht noch einmal.

Die Suche findet die Seiten der eigenen Teams nach Titel und Text; wer nicht Mitglied ist, findet sie nicht. Die eigene Zeile in der Mitgliederliste bietet kein „Aus dem Team nehmen“, denn dafür ist „Team verlassen“ da. Noch offen: Löscht das letzte Mitglied sein Konto, bleibt das Team ohne Mitglieder; ein Team mit seinen Seiten aufzulösen gibt es nicht.

Der Editor

Die Brotkrume

Über der Seite steht, wo sie liegt — der ganze Weg, nicht nur eine Stufe. „Dokumente › Studium › Analysis › Folgen": vorn die Übersicht, dann jede Elternseite bis hinunter zur geöffneten, jede mit ihrem Symbol vor dem Titel. Gebaut in Editorschirm.tsx (Brotkrumen, ein <nav> mit dem Namen „Wo diese Seite liegt"), der Weg kommt aus pfadZu() in @shared/handlers/documents/seitenbaum.ts.

Nur, was im eigenen Baum steht. Der Weg wird aus dem Seitenbaum der Seitenleiste gerechnet. Eine Seite, die dort nicht steht, hat keinen Weg, und dann steht keine Brotkrume da, statt einer halben. Ein Kreis in den Elternverweisen bricht ab, statt die Seite hängen zu lassen.

Die vollständigere der beiden Brotkrumen in Denotato. Material und Studium benutzen den gemeinsamen Baustein components/menus/shell/Brotkrume.tsx mit zwei Stufen (herkunft › hier); nur der Editor zeigt den ganzen Pfad. Welche Bereiche überhaupt eine haben, steht in 00-rahmen.md unter den Befunden zur Navigation.

Der Seitenkopf

Symbol · Titel · eine Zeile darunter. Kein Kasten, kein Rahmen: wer in einer Notion-Seite schreibt, schreibt in den Text, nicht in ein Formular. Der Titel wächst mit.

Das Symbol hat drei Formen (WI-261008-eigene-seitensymbole, 08.10.2026), alle im Feld icon (seit Wanderung 271 bis 64 Zeichen):

FormGeschriebenBeispiel
Emojidas Emoji selbst, höchstens 16 Zeichen📚
Zeichenzeichen:<name> oder zeichen:<name>:<farbe>zeichen:buch:orchidee
Bilddatei:<kennung> einer Datei aus der Ablagedatei:0b9c…

Die Zeichen sind Denotatos eigener Satz (@shared/config/zeichensatz.ts), aus dem auch die Bereiche ihr Zeichen nehmen. Die Farben sind die 13 Bereichsfarben des Styleguides (§3.2) beim Namen — gespeichert wird der Name, nie der Farbwert; ohne Farbe trägt das Zeichen die des Bereichs. Ein Bild ist PNG, JPEG, GIF oder WebP bis 512 KB; SVG nicht, weil ein SVG Skript tragen kann (A42).

Wer ein Bild setzen darf. Auf einer eigenen oder geteilten Seite muss die Datei dem Besitzer der Seite gehören. Im Wiki muss sie dem gehören, der das Symbol setzt, und öffentlich sein — sonst sähen Leser sie nicht. Der Server prüft beides beim Setzen (files/server/symboldatei.ts) und weist ab mit document_icon_file_error; die Form prüft pruefeSeitensymbol aus @shared/handlers/documents/seitensymbol.ts (document_icon_invalid_error). Weist der Server ab, nimmt der Editor das Symbol im Kopf zurück.

Gezeichnet wird jedes Seitensymbol von einer Komponente, frontend/src/components/zeichen/Seitensymbol.tsx: im Baum, in der Brotkrume, im Kopf, auf den Karten der Übersicht, im Seitenverweis und in der eingebetteten Seite, in der Schnellsuche, in der Wikileiste und auf der Vorschaukarte. Alle drei Formen stehen im selben Quadrat aus theme.layout.seitensymbol (Zeile 16, Liste 20, Kopf 40 px); ein Bild, das noch lädt, hält den Platz. Was sich nicht zeigen lässt — ein Zeichen, das es nicht gibt, ein Bild, das fehlt oder das der Leser nicht laden darf — zeigt das Blatt in Nebentext, nie das rote Kästchen und nie den Wert als Text.

Die Zeile darunter beantwortet ungefragt, was man wissen will: wie viele Wörter · wie lange man daran liest · ob alles gesichert ist („Sichert …", „Gleich gesichert", „Gesichert 21:47", „Nicht gesichert"). Auf der leeren Seite steht die Lesezeit schon da, unsichtbar und für Vorleser stumm, am Ende der Zeile; mit dem ersten Wort rückt sie hinter die Wortzahl. So bricht die Zeile am Telefon nicht erst beim Tippen um und schiebt nichts nach unten (F-261008-messwerkzeug-nennt, vorher 0,08 Layout-Verschiebung).

Vor dem Sicherungsstand steht seit dem 23.09.2026 ein Zeichen, und das Zeichen trägt die Farbe (N134): warnung in Rot bei „Nicht gesichert", laeuft bei „Sichert …", zeit (die Sanduhr) bei „Gleich gesichert", haken in Grün bei „Gesichert". Die beiden mittleren tragen die Bereichsfarbe — sie sind ein Vorgang und kein Urteil. Das Wort bleibt grau. Vorher war bei einem Fehler nur das Wort rot, und die Farbe trug den Unterschied allein.

Scheitert das Laden oder Sichern, hängt keine Anzeige mehr fest (F28b, 23.09.2026): Wirft das Laden der Seite, verschwindet „Dokument wird geladen …" trotzdem — der Ladezustand hängt in Editorschirm an einem Abbruch-Merker des Effekts und wird in einem try/finally zurückgesetzt. Beim Sichern selbst wäre useBusyLock falsch, weil useDokumentbloecke absichtlich auch überlappend sichert (Zeitgeber, Verlassen der Seite, Kartenübernahme) und ein verworfener zweiter Aufruf Änderungen verschluckte; ein try/finally gibt „Sichert …" deshalb ebenso zuverlässig frei, statt bei einem geworfenen Fehler stehen zu bleiben.

Enter im Titel springt in den Text — ein Zeilenumbruch im Titel wäre in Seitenleiste, Suche und Kalender ein Titel mit einem Umbruch darin, und der Rest fiele weg. Auf einer leeren Seite legt Enter den ersten Absatz an und setzt den Zeiger hinein, ebenso „Hier anfangen zu schreiben“ (F-261005-fokus-neue-seite; vorher stand der Absatz da, und man musste hineinklicken).

Eine neue Seite beginnt im Titel (F-261005-fokus-neue-seite): ohne Titel und ohne Block steht der Zeiger nach dem Laden im Titelfeld, auf welchem Weg die Seite auch entstanden ist — Seitenleiste, Übersicht, „Neu anlegen“, Palette, Schnellnotiz. Einmal je Seite; wer danach woanders hinklickt, bekommt ihn nicht zurückgerissen.

„Teilen" steht seit dem 24.09.2026 in der Fußzeile, hinter „als Markdown" (W21, N214) — und nur für den, der die Seite verwalten darf: Eigentümer und Mitverwalter. Christian sprach vom „Seitenmenü"; ein solches gibt es nicht, und die Fußzeile ist die Stelle, an der schon steht, was man mit der ganzen Seite tut. Ob der Eintrag erscheint, entscheidet allein die Antwort auf LIST_DOCUMENT_SHARES: Gibt der Server die Liste heraus, steht „Teilen" da, sonst nicht — eine zweite Regel im Client gibt es nicht. Ist die Seite geteilt, heißt der Eintrag „mit 2 geteilt“ und trägt davor das Zeichen geteilt (seit 30.09.2026, E18, N454): Geteilt ist ein Merkmal der Seite, und ein Merkmal steht nie als Wort allein (N134). „Teilen“ bleibt ohne Zeichen — es ist ein Handgriff. Die Zahl kommt mit derselben Anfrage. Kommt die Antwort für eine vorige Seite zu spät an, zeigt der Kopf kein „Teilen" statt eines falschen.

Ein Klick öffnet den Dialog „„Analysis“ teilen“: oben die Personensuche („Nutzer suchen …", ab zwei Zeichen, Benutzer- oder Anzeigename von vorn, höchstens zehn Treffer, das eigene Konto nie) und daneben die Rolle für neue Freigaben; ein Treffer ist ein Knopf, ein Klick teilt. Darunter „Bereits geteilt": je Person das Profilbild mit dem gezeigten Rang (seit dem 28.09.2026, E22, N367; dasselbe an jedem Treffer der Suche), der Anzeigename, @benutzer, die Rolle als Auswahl und „Zugriff entziehen" (bis zum 26.09.2026 „Zurücknehmen", das auf Englisch zu „Undo" geworden wäre — I07, N308). Rolle und Knopf stehen beisammen; am Telefon stehen beide als Paar bündig unter dem Namen, statt zu schrumpfen (E27; Christian am 13.10.2026: „unter den Namen“). Eine Haarlinie trennt nur die Zeilen voneinander, unter der letzten steht keine. Suchfeld und Rollenwahl, Rolle und Knopf sind je Reihe gleich hoch und gleich groß beschriftet (13.10.2026). Die drei Rollen sind Namen für die Stufen, die eine Seitenfreigabe schon trägt — kein neues Feld:

RolleStufedarf
Betrachterreaddie Seite lesen
Bearbeiterwritemitschreiben, Titel und Symbol ändern
Mitverwaltermanageweiter teilen, zurücknehmen, die Seite öffentlich oder per Link lesbar machen, die Karten der Seite anlegen und nachführen

Woher eine Freigabe kommt (A-261007-teilen-rechtebaum, Zuschnitt A, Christian am 14.10.2026). Zwei Stellen entscheiden, nacheinander. Erst der Rechtebaum: Hat das Konto den Bereich der Seite nicht, gibt es die Seite für dieses Konto nicht (404; abgeschaltet 403) — auch keine geteilte. Dann die Stufe am Gegenstand: Eigentümer dürfen alles, eine geöffnete Seite (link, public) darf jeder lesen, sonst gilt die Zeile in auth.resource_shares mit ihrem Wort aus der einen Leiter read < add < write < manage (ACCESS_LADDER in @shared/types/resourceAccessTypes, dieselben Worte wie in SQL). Beides fragt checkDocumentAccess in session/server/helfer.ts. Wegwerfen darf eine Seite nur ihr Eigentümer, keine Freigabe reicht dafür, auch manage nicht. Die Wege unter /api/shares tragen das Recht des Bereichs, dessen Art sie teilen; Suche und Eingang verlangen einen der teilenden Bereiche. Bis zum 15.10.2026 hieß die Stufe AccessType, eine Zahl von 0 bis 8; das Feld heißt seither access statt accessType.

Wer die Öffentlichkeit ändern darf (D40, N278, 24.09.2026): nur Eigentümer und Mitverwalter. CHANGE_DOCUMENT verlangt manage, sobald publicness mitkommt — link und public machen die Seite samt allen Blöcken für jedes Konto lesbar, das ist Verwalten wie das Teilen an Personen. Ein Bearbeiter bekommt no_access_error (403), und die Seite bleibt ganz, wie sie war, auch ein im selben Aufruf geschickter Titel. Titel und Symbol allein ändert er weiter. verify:dokumente prüft beide Seiten.

Eine Rolle umzustellen ist ein Aufruf von SHARE_DOCUMENT mit der neuen Stufe; der Server überschreibt die Freigabe, statt eine zweite anzulegen, und die Person ist zwischendurch nicht ausgesperrt. Sagt er nein, steht der Grund unter der Liste („Teilen nicht möglich — darfst du diese Seite noch verwalten?"), und die Liste bleibt, wie sie war. Die Namen stehen einmal in ROLLENNAMEN (@shared/types/sharingTypes), das Fenster einmal in components/sharing/Freigabefenster.tsx — derselbe Dialog wie am Studienknopf, der von den drei Rollen die zwei zeigt, die das Studium kennt.

Freunde zur Wahl (NB-261017-freunde-teilen, 19.10.2026). Solange das Suchfeld leer ist, steht unter ihm „Freunde“: die Freunde des Kontos als dieselben Treffer, die die Suche liefert. Ein Klick gibt frei wie an jede andere Person, mit der gewählten Rolle und demselben SHARE_DOCUMENT; wer schon geteilt ist, steht ausgegraut da. Die Liste kommt über den Anschluss freunde aus dem Bereich Freunde; ist er abgeschaltet, bleibt nur die Suche. Eine Freundschaft gibt kein Recht, und wird sie gelöst, bleibt jede Freigabe, wie sie war — /api/friends/remove zählt in sharesKept, was das lösende Konto der anderen Seite freigegeben hat, und „Freunde“ sagt es in einem Satz. Dasselbe gilt im Fenster am Studienknopf und in der Postfachpflege, die dasselbe Fenster zeigen.

Nach der Sichtprüfung vom 24.09.2026 (E18, erledigt am 30.09.2026): Das Kreuz sitzt auf der Mitte der Titelzeile — es teilt mit ihr die Höhe von 28 px und beginnt beim selben Innenabstand; vorher lag es am Rechner rund 11 px zu hoch, am Telefon rund 4. Der Pfeil der Rollenauswahl steht mittig zur Schrift. Auf einem Berührungsgerät bekommt beim Öffnen das Fenster den Fokus und nicht das Suchfeld, damit keine Tastatur „Bereits geteilt“ zudeckt; am Rechner steht der Fokus weiter im Suchfeld. Vor der Rolle steht kein „als“, und ohne Freigaben steht ein Satz („Noch niemandem freigegeben.“) statt des Horizonts (N454).

Die Blöcke

24 Typen: Text · Überschrift (1–6, zuklappbar) · Aufzählung · Nummerierung · Aufgabe · Aufklappbar · Trennlinie · Spaltensatz · Tabelle · Formel (LaTeX) · Code · Diagramm · Hinweiskasten · LaTeX-Text · Bild · Datei · Weblink · Seitenverweis · Knopf · Ansicht · Karteikarte (Frage · Hinweis · Antwort).

Code und Hinweiskasten gibt es seit dem 24.09.2026 (WI08), für alle Seiten, nicht nur fürs Wiki; die Datenbank kennt sie ab Wanderung 134.

Unter dem Adressfeld von Weblink, Bild und Datei steht ein Satz mit Warnzeichen, sobald die Adresse nicht gesichert würde: „Diese Adresse wird nicht gesichert — erlaubt sind http://, https:// und Pfade in Denotato." Der Verweis „öffnen" erscheint dann nicht, ein Bild wird nicht geladen, und eine Trennlinie mit fremdem Stil wird durchgezogen gezeichnet — auch bei Zeilen, die vor der Prüfung geschrieben wurden. Die Sicherung schickt einen solchen Inhalt nicht und stellt ihn nicht wieder an; der Kopf zeigt den Fehler (D26).

Der Knopf ist seit dem 21.09.2026 zurückgezogen. Er steht nicht mehr im Schrägstrichmenü — neu einfügen kann man ihn nicht. Ein Knopf, der in einer Seite steht, bleibt stehen, sagt an Ort und Stelle, dass er nichts auslöst, und lässt sich über den Griff in Text umwandeln; die Beschriftung geht dabei mit. Wie viele das sind, ist nachgezählt: am 21.09.2026 keiner — personal.blocks führt keine Zeile mit block_type = 'button'. Der Weg hinaus ist für den Fall gebaut, nicht für einen Bestand.

Das Textfeld sieht nicht aus wie ein Eingabefeld, und das ist der ganze Punkt. Kein Rahmen, kein eigener Grund, keine feste Höhe. Der Platzhalter steht nur im Absatz, in dem man gerade ist — stünden auf einer leeren Seite zehn Platzhalter gleichzeitig, wäre sie voller grauer Sätze, die niemand geschrieben hat.

Die Maße des Textfelds stehen seit dem 07.10.2026 in @/theme/satz (SCHRIFTGROESSEN, ZEILENHOEHEN, feldartFuer, dazu Ton und Zeichen der Hinweiskästen; KI-261007-antworten-dialekt): Überschriften 30/24/20/17 px, Text 16 px. Dieselben Werte liest Blocksatz, mit dem der Begleiter seine Antworten wie eine Seite setzt; documents/client/zeichen.ts reicht Ton und Zeichen weiter, damit das Plugin dieselben Namen behält.

Tastatur und Kürzel

EingabeWas daraus wird
# … ###### Überschrift 1–6
#> , ##> , ###> (auch ># , >## )zuklappbare Überschrift
- , * , + Aufzählung
[] , [ ] Aufgabe
> Aufklappbar
--- Trennlinie — dieselbe, die „Trennlinie" im Schrägstrichmenü gibt (seit 21.09.2026, F14)
$$ Formel
```Code — auf deutschen Tastaturen ist der Backtick eine Tottaste, das Schrägstrichmenü („Code“) ist dort der bequemere Weg
>! Hinweiskasten
7. Nummerierung, die ab hier bei 7 weiterzählt
/das Blockmenü
TasteWirkung
Enterneuer Block darunter
Backspace am AnfangBlock auflösen / mit dem darüber verschmelzen
Tab / ⇧ Tabeinrücken / ausrücken — eingerückt wird nur unter einen Vorgänger, der diesen Block nimmt (kindPasst, F27): kein Absatz unter eine Tabelle. In Frage, Hinweis und Antwort einer Karteikarte und in Tabellenzellen geht Tab zum nächsten Feld weiter, von der Antwort zu „Als Karte anlegen“ (F-261005-fokus-neue-seite)
Strg ⇧ ↑ / ↓Block verschieben
↑ ↓ ← →zwischen Blöcken wandern
Strg + Fdie Suche in dieser Seite
Strg ⇧ HAuswahl markieren (Textmarker) oder die Markierung entfernen
EscapeMenü schließen; die Suche, solange der Zeiger im Suchfeld liegt; im Text sonst: den eigenen Block wählen

Blöcke wählen (S-261007-bloecke-waehlen, 07.10.2026)

Mehrere Blöcke lassen sich wie in Notion auf einmal wählen und dann gemeinsam kopieren, ausschneiden, löschen, einrücken, verschieben oder duplizieren. Der reine Kern (Bereich, Erweitern, Umschalten, Wurzeln, Teilbäume, Tastenbefehle) liegt in @shared/handlers/documents/blockauswahl, die Gesten im Hook useBlockauswahl des Gerüsts, die Anbindung an den Editor in editor/Editorauswahl.tsx.

Verschlüsselte Seiten gehen dieselben Wege wie das Löschen und Kopieren einzelner Blöcke; die Auswahl kennt nur Kennungen und liest den Inhalt aus dem entschlüsselten Stand des Editors.

Der Weg in eine Seite und zurück (seit 07.10.2026, BW-261007-schirmwechsel)

Eine Karte unter „Zuletzt geöffnet“ oder „Zuletzt geändert“ gibt ihren Titel mit: Er fliegt in den Titel des Seitenkopfs, die Liste und der Editor blenden darum ineinander (Guide §11.2). Ein Eintrag im Seitenbaum hat kein Gegenstück und lässt den Editor in Laufrichtung kommen — von rechts, eine Stufe tiefer; die Brotkrume „Dokumente“ führt von links zurück.

Am Telefon schließt das Fach mit dem Seitenbaum erst mit der neuen Seite (F-261007-layout-springt). Es liegt dort im Fluss über dem Inhalt; schloss es schon beim Tippen, rutschte die alte Übersicht um die Höhe des Fachs nach oben, bevor der Editor kam (0,35 Layout-Verschiebung, danach 0,03 bis 0,07). Das Offensein hängt an der Seite, bei der es geöffnet wurde (DocumentWorkspace.test.tsx).

Bewegung (seit 07.10.2026, BW-261007-editor)

Der Editor bewegt nur, was die Hand mit dem Zeiger auslöst; was die Tastatur tut, steht sofort da.

Weitere Teile

Scheitert das Ablegen eines Bildes oder einer Datei, bleibt der Knopf bedienbar (F28b, 23.09.2026): Die Ablage hinter „Bild auswählen"/„Datei auswählen" läuft jetzt über useBusyLock, das den Laufmerker in einem try/finally freigibt, statt ihn nach einem geworfenen Fehler gesperrt zu lassen.

Die Zeichen (N134, 23.09.2026)

Christian am 23.09.2026: „Das mit den Icons funktioniert übrigens super und ich will, dass das überall in Denotato so umgesetzt wird." Im Bereich Dokumente heißt das: was die Registry mit derselben Bedeutung führt, kommt aus der Registry; was sie nicht führt, bleibt gezeichnet wie bisher. Welche Stelle welches Zeichen trägt, steht als Daten in client/zeichen.ts und wird in client/zeichen.test.ts gegen die Registry geprüft. Seit E12 (30.09.2026) hat jede Stelle ihr Registry-Zeichen; die Stellen ohne Zeichen mit ihren Wunschnamen, die es bis dahin gab, sind alle gezeichnet.

Was bewusst bleibt: der Haken in der Aufgaben-Checkbox (er ist der Zustand des Kästchens, Guide §7.2), die Aufzählungszeichen • ▪ ◆ – (sie sind Inhalt), die Seitensymbole im Symbolwähler (die wählt der Mensch), die Buchstaben F K U D und „Aa", „ab|" (Schrift für Schrift) und das › zwischen den Stufen eines Weges (ein Trennzeichen, kein weiter).

Hängt zusammen mit … (Q02, 21.09.2026)

Unter dem Editor steht eine Zeile mit Chips: woran diese Seite hängt. Ein Chip trägt das Zeichen und die Farbe des Bereichs, zu dem das andere Ende gehört, davor das Wort („To-Do", „Modul"), dahinter den Titel. Ein Klick springt dorthin; das × daneben löst die Verbindung — beide Sachen bleiben, weg ist nur die Aussage, dass sie zusammengehören.

Der Knopf „Verknüpfen" öffnet ein Suchfeld. Es sucht in allen mitmachenden Bereichen auf einmal (Dokumente, To-Dos, Module); vor der ersten Eingabe stehen die zuletzt angefassten Einträge da. Ein Klick auf einen Treffer legt die Verbindung an — es gibt keine Kennung einzutippen und keinen Bereich vorher auszuwählen.

Die Verbindung gilt in beide Richtungen und wird einmal gespeichert. Wer sie hier anlegt, findet sie am anderen Ende wieder, ohne dort etwas getan zu haben.

Ein abgeschalteter Bereich hinterlässt kein Loch: Fehlt study, steht am Dokument kein „Modul: (Fehler)", sondern gar nichts — die Kanten bleiben liegen und kommen zurück, sobald der Bereich wieder an ist.

Aufgegangen in diesem Eintrag (E28, N489, 15.10.2026)

Darunter steht, welche Seiten in diese aufgegangen sind und noch nicht wieder getrennt wurden: Titel mit Symbol, Datum der Verschmelzung und „Wieder trennen“, das die Seite mit ihren Absätzen, Unterseiten und Verknüpfungen zurückholt. Ohne Verschmelzung steht nichts da. Der Titel kommt aus dem Abbild der Verschmelzung (titelAusAbbild in documents/server/verschmelzung.ts), denn die aufgegangene Seite liegt im Papierkorb; Weg VERSCHMELZUNGEN mit art und id.

Was man tun kann

ElementWoWas passiert
Karte anklickenÜbersichtöffnet die Seite im Editor; ein Dokument anderen Typs, etwa ein LaTeX-Text, öffnet seinen eigenen Editor. Dasselbe gilt im Seitenbaum, im Briefkasten und für eine Adresse /documents/editor/:id, die zu einem solchen Kopf führt (NB-261019-dokumenttyp)
„Dokumente" in der Brotkrumeüber der Seitezurück zur Übersicht
Zwischenstufe der Brotkrumeüber der Seiteöffnet diese Elternseite im Editor
Neue SeiteÜbersicht (neben der Überschrift), Seitenbaum im Editor, ?neu, Strg+Keinmal je Schirm: Seit dem 15.10.2026 (KN-261015-neue-seite-einmal, Befund B13) fehlt der allgemeine Knopf im Seitenbaum auf der Übersicht, weil dort die Überschrift ihn trägt, auch am Telefon; im Editor steht er nur im Baum, das Plus am Eintrag für eine Unterseite bleibt überall. Legt an und öffnet; der Titel bleibt leer und heißt überall „Ohne Titel“, bis man einen vergibt (seit 28.09.2026, RL14 — vorher gespeichert „New Document“)
Seiten durchsuchen…Seitenleistefiltert den Baum
Unterseite anlegenSeitenleisteam angeklickten Elternteil
ZiehenSeitenleisteverschiebt eine Seite im Baum
FavoritSeitenleistehängt die Seite oben an
In den PapierkorbSeitenleisteerste Löschstufe; zwei Klicks, „ja, weg" (seit 23.09.2026, Q09)
Wiederherstellen / Endgültig löschenPapierkorbzurück oder weg; „Endgültig löschen" mit zwei Klicks, „ja, endgültig" (seit 23.09.2026, Q09), nur der Besitzer, samt Freigaben (F75)
LöschenBlockmenüohne Frage; sechs Sekunden „Block gelöscht · Zurücknehmen" (seit 23.09.2026, Q09)
Symbol ändernSeitenkopfEmoji, Zeichen in einer Farbe oder eigenes Bild; der Fokus bleibt in der Blase, Escape schließt sie von jeder Stelle (Q08)
Titel schreibenSeitenkopfwächst mit; Enter springt in den Text
/im Textöffnet das Blockmenü
Eintrag im Schrägstrichmenüim Textin einer leeren Zeile wird der Block umgewandelt, sonst ein neuer darunter angelegt; der Zeiger steht danach im neuen Block, bei einer Karteikarte in ihrer Frage
Typ ändernBlockmenüwandelt den Block um; der Klartext geht mit, die Auszeichnung nicht
Griff linksam Blockziehen zum Verschieben, klicken wählt den Block und öffnet das Menü — die Ablagelinie steht nur dort, wo der Server den Block annimmt (F27)
Umschalt-/Strg-Klick auf den Griffam Blockerweitert die Blockauswahl bzw. nimmt einen Block hinzu oder heraus; siehe „Blöcke wählen“
Aufziehen im Randneben den Blöckenwählt alle berührten Blöcke
Auswahlleisteunten, am TelefonKopieren, Ausschneiden, Löschen, Fertig für die gewählten Blöcke
Block darunter einfügenam Blockneuer Block
Einfügen mit Gliederung (Strg+V)in Absatz, Überschrift, Listenpunkt, Aufgabe, Aufklappblockmehrzeiliges Markdown (auch die kopierte Begleiter-Antwort) oder HTML aus der Zwischenablage wird zu Blöcken hinter dem aktuellen Block — Überschriften, Listen, Tabellen, Code, Formeln; ein leerer Absatz wird ersetzt. Der Klartext gilt zuerst, wenn er Gliederung trägt; HTML liest nur der Wandler (htmlToMarkdown), nie das DOM. Eine Zeile, Code- und Formelfelder und jede Tabellenzelle nehmen den Text wie bisher. Strg+Z nimmt das ganze Einfügen in einem Schritt zurück (seit 07.10.2026, KI-261007-antworten-als-bloecke)
Gliederungrechtsspringt zu einer Überschrift
Strg+Fim Editoröffnet die Suche in dieser Seite; noch einmal gedrückt holt es den Zeiger zurück ins Suchfeld
Eingabe / Umschalt+Eingabein der Suchenächste / vorige Fundstelle, im Kreis
Fundstelle anklickenin der Suchesetzt den Schreibzeiger auf das Wort
Als Karteikarteam Blockerzeugt eine Karte aus dem Block
Als Karte anlegen / Karte nachführenunten rechts im Rahmen der Karteikarteübernimmt Frage und Antwort als Lernkarte oder schreibt sie nach; nur für den, der die Karten der Seite pflegen darf (W21). Der Knopf steht seit dem 05.10.2026 unter den Teilen statt im Kopf, damit Tab ihn nach der Antwort erreicht (F-261005-fokus-neue-seite). Der Knopf sperrt sich während der Übernahme und nimmt den Zeiger mit; danach steht er wieder in der Frage der Karte, sofern er nicht inzwischen woanders steht (NV-261007-kernaufgaben)
als MarkdownFußzeile des Seitenkopfslädt die Seite als .md herunter — Überschriften, Listen, Aufgaben, Formeln, Aufklappblöcke in ihrer Reihenfolge; Code als umzäunter Block mit Sprache, der Hinweiskasten als Zitat mit Kennzeichen (> **Warnung:** …); seit WI02 auch Tabellen (erste Zeile als Kopf), eingerückte Kinder eines Listenpunkts und harte Zeilenumbrüche; seit dem 07.10.2026 jeder Block ohne Markdown-Form (Karteikarte, Spalten, Knopf, Formel im Text …) als Blockzaun ```denotato <typ> mit dem Inhalt als JSON, den ausMarkdown (@shared/handlers/documents/einleser) verlustfrei wieder einliest — dieselbe Sprache, in der der Begleiter antwortet
Teilen / mit 2 geteiltFußzeile des Seitenkopfsöffnet den Teilen-Dialog; nur für Eigentümer und Mitverwalter (W21)
Foto anhängenFußzeile des Seitenkopfs, nur an der Seite einer MitschriftDateiwahl für Bilder ohne capture (Kamera oder Fotos); das Foto kommt in die eigene Ablage und als Bildblock ans Ende der Seite. Ob die Seite eine Mitschrift ist, sagt der Klientanschluss material (KN-261014-foto-handschrift-seite)
Nutzer suchenTeilen-Dialogab zwei Zeichen; ein Klick auf den Treffer teilt mit der Rolle daneben
RolleTeilen-DialogBetrachter · Bearbeiter · Mitverwalter; umstellen ändert die Freigabe, ohne sie zurückzunehmen
Zugriff entziehenTeilen-Dialognimmt die Freigabe dieser Person zurück; derselbe Knopf im Freigabefenster am Studium (I07, N308)
Tastenim Textsiehe die Tabelle unter „Tastatur und Kürzel"
Verknüpfenunter dem EditorSuchfeld über alle Bereiche; ein Klick verbindet
× am Chipunter dem Editorlöst die Verknüpfung; beide Sachen bleiben
Chip anklickenunter dem Editorspringt zum anderen Ende

Woher die Daten kommen

34 Endpunkte (15 in routen.ts, 19 in bloeckeRouten.ts), darunter GET_DOCUMENTS · CREATE_DOCUMENT · CHANGE_DOCUMENT · DOCUMENT_MOVE · DOCUMENT_TRASH · DOCUMENT_RESTORE · DOCUMENT_FAVORITE · ADD_BLOCK · EDIT_BLOCK · CHANGE_BLOCK_TYPE · DELETE_BLOCK · BLOCK_COLLAPSE_SET · BLOCK_FLASHCARD_SYNC · SEITENSYMBOLE (die Formen, Zeichennamen und Farben für MCP; seit 08.10.2026). Die eigenen Bilder des Symbolwählers kommen aus FILES_LIST der Ablage, gefiltert auf Typ und Größe (ladeSymbolbilder). Der Dublettenhinweis der Übersicht ruft Wege des Gerüsts links: VERSCHMELZUNG_DUBLETTEN, VERSCHMELZEN, VERSCHMELZUNG_ZURUECKNEHMEN (E08) und VERSCHMELZUNG_VERSCHIEDEN (E29); die Seiten dafür liefert documents/server/verschmelzung.ts (kandidaten). Endgültig gelöscht wird nicht hier, sondern über den Papierkorb (PAPIERKORB_ENDGUELTIG, F75, 23.09.2026). Den eigenen Weg /api/documents/delete gibt es nicht mehr.

Der LaTeX-Block (LX17, 12.10.2026) liest über BLOCK_LATEX_LESEN (/api/blocks/latex/lesen) — einen Weg der Dokumente, ohne das Tor des Bereichs LaTeX. Recht gibt allein die Seite: Die Zeilensicherheit lässt den Zustand nur zu, wenn das Konto die Seite lesen darf, und den Text nur über die Einbindung in genau diesen Block. Den Inhalt liefert der Bereich über den Anschluss latex.leseBlock (latex/server/einbindung.ts): den Zustand (leer, lesbar, geloescht, entzogen), Titel, das gespeicherte PDF aus personal.latex_satzstaende (Migration 299), ob es veraltet ist, und seiteSchreibbar, ob das Konto hier einbinden und lösen darf. Eingebunden, gelöst und gesetzt wird über die Wege des Bereichs (LATEX_TEXTE_EINBINDEN, LATEX_TEXTE_LOESEN, LATEX_TEXTE_SETZEN). Im Markdown steht der Block als Blockzaun mit seiner Kennung; die HTML-Ausgabe lässt ihn aus (beides seit LX09). Eine Mindmap als Block (NB-261019-dokumenttypen-als, 20.10.2026) ist dagegen ein embedded_document mit { document_id, document_type } (Migration 374): Der Block zeigt die ganze Ansicht nur lesend, „Bearbeiten“ öffnet den Editor des Typs, gelesen wird über mindmap/get mit dem eigenen Recht — ohne Leserecht steht nur ein ruhiger Hinweis —, und ein weiterer Typ kommt mit einer Zeile in client/einbindung/register.ts dazu.

Aufgaben aus Seiten (KI-261007-planen-vorschlaege, 07.10.2026). Jedes gelungene Schreiben über diese Wege geht durch mitRaumfassung; dort merkt documents/server/seitenaufgaben.ts die betroffene Seite vor. Ruht sie drei Minuten, geht sie als Text (Titel und Blöcke als Markdown) über den Anschluss aufgabentexte an die To-dos, die mit dem Modell nach Aufgaben mit Frist suchen und eine Karte vorschlagen (docs/seiten/tasks.md). Gemeldet wird nur eine eigene Seite außerhalb eines Raums, nicht weggeworfen, mit mindestens einem Block — eine Wiki-Seite gehört allen, eine fremde Seite, auf der jemand über eine Freigabe schreibt, hat ihre Aufgaben nicht bei ihm. Ein Neustart vergisst die Vormerkung; das nächste Speichern merkt neu. Der Editor zeigt davon nichts; die Karte erscheint an der Eule und im Begleiter. Nachweis: verify:seitenaufgaben.

Seit dem 23.09.2026 (D33) fragt jeder dieser Wege zuerst den Bereich: Ist er nicht gewährt, antwortet er mit 404; ist er in den Einstellungen ausgeschaltet, mit 403 und der Meldung „Bereich ist ausgeschaltet". Der Editor zeigt dann diese Meldung und darunter die Zeile „Diese Seite lässt sich nicht öffnen …", Übersicht und Seitenleiste „Noch keine Seite." — eine eigene Anzeige für den abgeschalteten Bereich fehlt noch.

BLOCK_FLASHCARD_SYNC fragt danach ein zweites Tor (N140, 23.09.2026): den Bereich Karteikarten, weil der Weg eine Lernkarte anlegt. Wer Dokumente hat, aber keine Karteikarten, bekommt bei der Karteikarten-Brücke dieselbe Regel — 404 nicht gewährt, 403 ausgeschaltet —, und es entsteht keine Karte. BLOCK_FLASHCARD_LIST fragt seit N143 dasselbe zweite Tor, weil er Lernstand und Fälligkeit aus den Karteikarten liest. Der Editor schweigt dazu: Fehlt die Auskunft, steht an jedem Karteikarten-Block „noch keine Karte" — auch an einem, der eine ist. Eine eigene Anzeige „Karteikarten sind ausgeschaltet" fehlt.

Aus einem Block eine Karte machen dürfen der Eigentümer der Seite und ihre Mitverwalter (F76, N195; seit dem 24.09.2026 W21, N214). Die Karte gehört dem Eigentümer (N159), auch wenn ein Mitverwalter sie anlegt oder nachführt; wer gehandelt hat, steht in created_by_id und updated_by_id. Betrachter und Bearbeiter bekommen 403 (flashcard_block_owner_only_error), und der Editor zeigt ihnen den Knopf gar nicht: BLOCK_FLASHCARD_LIST sagt mit darfPflegen, ob er wirkt. Seiten eines Raums haben keinen Eigentümer und bekommen weiter keine Karte. Möglich macht es Wanderung 113 — zwei Richtlinien auf personal.block_flashcards, ohne SECURITY DEFINER: Lesen darf die Verknüpfung auch, wem die Seite oder die Karte freigegeben ist, schreiben, wer die Seite verwaltet, und nur auf den Namen des Eigentümers.

Geteilt wird über drei Wege (W21): SHARE_DOCUMENT legt eine Freigabe an oder überschreibt ihre Stufe, REVOKE_DOCUMENT_SHARE nimmt sie zurück, LIST_DOCUMENT_SHARES zeigt sie mit Benutzer- und Anzeigename — alle drei nur für Eigentümer und Mitverwalter; wer die Liste nicht bekommt, bekommt 403. Die Personensuche SHARE_USERS liegt im Gerüst (sharingController.ts) und steht seit W21 jedem offen, der Studium oder Dokumente hat; vorher hing sie am Studium, und wer nur Dokumente hatte, fand niemanden. Sie gibt nicht mehr preis als vorher: höchstens zehn Treffer, Benutzer- und Anzeigename. Die MCP-Werkzeuge dazu: dokument_freigaben, dokument_teilen, dokument_freigabe_zuruecknehmen und nutzer_suchen.

Blöcke löschen und verschieben geht auch über MCP (WI-261008-block-loeschen, 08.10.2026): block_loeschen ruft DELETE_BLOCK, bloecke_wiederherstellen RESTORE_BLOCKS und block_verschieben MOVE_BLOCK — dieselben Wege wie Löschleiste, „Zurücknehmen" und Ziehen im Editor, mit demselben Tor und denselben Rechten. Ein Block geht samt allem darunter und wird nur weggelegt; die Antwort deletedBlockIds ist die Liste, mit der er zurückkommt. Anders als der Weg verlangt block_verschieben newParentId und insertBeforeId ausdrücklich, auch als null: Fehlt newParentId, setzt MOVE_BLOCK den Block auf die oberste Ebene, und ein Modell, das nur umordnen wollte, risse ihn aus seinem Aufklappblock.

Die Karten einer Seite im Papierkorb ruhen (F77), und seit dem 24.09.2026 auch die eines im Editor gelöschten Blocks (F82): Sie fehlen in Warteschlange, Kartenstand, Übersicht und Briefing, in der Kartenzahl je Kategorie, in den Kartenzahlen der Prüfungen und in der Suche. Sie kommen samt Lernstand zurück — mit der Seite aus dem Papierkorb oder mit dem Block, wenn „Zurücknehmen" in der Löschleiste ihn wiederholt. Gefragt wird an einer Stelle (documents/server/kartenruhe.ts, über ANSCHLUESSE.dokumente); die Kartenverwaltung zeigt ruhende Karten bewusst weiter, dort verwaltet man sie. Wird die Seite endgültig gelöscht, werden ihre Karten ausgesetzt, nicht gelöscht (N195, Wanderung 104).

Dasselbe gilt für die Wege der Verknüpfungen, die über den Anschluss in die Seiten greifen: Die Verknüpfungssuche bietet bei abgeschaltetem Bereich keine Seite an, und Verschmelzen wie Zurücknehmen zweier Seiten antworten mit 404 („unbekannter Ressourcentyp") — auch dann, wenn der Bereich nur ausgeschaltet ist, weil der Anschluss keine dritte Antwort kennt. Die Titel bestehender Verknüpfungen erscheinen weiter; fehlte der Titel, räumten die Verknüpfungen die Kante weg.

CHANGE_BLOCK_TYPE hat seit dem 22.09.2026 zwei Ausgänge statt einem: Wer ihn ohne content ruft und der Block trägt Text, den der neue Typ nicht führen kann, bekommt eine Absage (409, „Der Typwechsel würde den geschriebenen Text verwerfen") und der Block bleibt stehen. Mit content geht derselbe Wechsel durch — dann hat der Aufrufer gesagt, was werden soll. Der Editor schickt immer Inhalt mit und sieht die Absage deshalb nie; sie gilt dem Aufruf von Hand, dem Einlesen und einem künftigen MCP-Werkzeug. Und: Ein Wechsel nach Tabelle oder Karteikarte baut jetzt dasselbe Gerüst, das ADD_BLOCK baut — zwei Zeilen zu zwei Spalten, beziehungsweise Frage und Antwort.

Seit der zweiten Messung am 22.09.2026 gibt es einen dritten Ausgang, und er gilt auch mit content: Ein Wechsel, unter dem ein Gerüst stünde, das der neue Typ nicht tragen kann, wird abgelehnt (400, „Block-Verschiebung ist nicht erlaubt") — es sei denn, in dem Gerüst steht nichts. Dann wird es weggeräumt, in den Papierkorb, und der Wechsel geht durch. Die Regel dahinter heißt kindPasst und steht seit dem 23.09.2026 (F27) einmal in @shared/handlers/documents/blockbaum, zusammen mit ihrer Tabelle ERLAUBTE_KINDER: Die fünf geführten Typen — Tabellenzeile, Tabellenspalte, Frage, Hinweis, Antwort — dürfen nur unter einen Block, der sie beim Namen nennt, und nicht auf die oberste Ebene der Seite. Das ist dieselbe Liste, die die Oberfläche in istFrei liest. Dieselbe Funktion fragen der Typwechsel, der Umzug (MOVE_BLOCK), die Tabulatortaste (einrueckenZiel) und die Ablagelinie beim Ziehen (darfDorthin).

Seit dem 23.09.2026 (D26) prüft EDIT_BLOCK — und CHANGE_BLOCK_TYPE mit content — auch die Werte, nicht nur die Schlüssel. Eine Trennlinie nimmt nur solid, dotted oder dashed, Aufzählungen nur Werte aus ihren Enums, Zahlen haben Grenzen, Texte eine Höchstlänge. link und source_link nehmen nur http:, https: oder einen relativen Pfad; der Platzhalter https:// geht durch, mailto:, data: und javascript: nicht. Ein falscher Wert kommt als 400 mit „Ein Wert im Block ist nicht erlaubt …" (content_value_invalid) zurück, der Schlüssel steht in details; ein Schlüssel zu viel geht weiter durch. Die Regeln stehen einmal in shared/blockinhalte.ts (inhaltsfehler), die Adressprüfung in @shared/utils/adresse.ts. STYLE_BLOCK nimmt Farben nur als #rgb oder #rrggbb an, schon am Umschlag.

Dazu die vier Wege der Verknüpfungen: LINKS · LINKS_SUCHE · LINKS_ANLEGEN · LINKS_LOESEN. Sie gehören keinem Bereich — sie liegen im Gerüst (packages/plugins/src/links/), weil eine Kante keinem ihrer beiden Enden gehört.

Für die Eule (KI21) nennt der Bereich über seinen Klientanschluss die offene Seite aus der Adresse /documents/editor/<id> (client/knoten.ts, gegenstandsleser). Der Leser documents/server/angebote.ts gibt „Die Seite zusammenfassen“ und „Karten aus dieser Seite“ nur eine eigene, nicht gelöschte Seite als Markdown mit, höchstens 12 000 Zeichen; jede andere Kennung wird abgewiesen. Die Karten kommen seit KI42 (04.10.2026) als Einträge mit „Übernehmen“. Seit KI62 (N515, 05.10.2026) öffnet der Knopf den Entwurf mit Modulwahl wie „Als Karteikarte“ im Begleiter, die Frage zugleich als Titel; erst „Karte anlegen“ schreibt über den Anschluss des Kartenbereichs (study/client/kartenanschluss.ts).

Ablagevorschläge (KI-261007-ablage-vorschlaege)

Speichert jemand eine Seite — anlegen, umbenennen oder einen Block schreiben —, meldet documents/server/speichermeldung.ts sie dem Begleiter; das Speichern wartet nicht. Der Begleiter fragt dann die Erzeuger in documents/server/ablagekarten.ts, gedrosselt auf einmal je Minute für dieselbe Seite und denselben Titel:

Alle drei bieten „Immer so“ an; jeder Schritt hat seinen Gegenzug. Eine Seite aus ausMarkdown meldet sich nicht: Sie entsteht mitten in einer Karte, deren Verknüpfungen erst danach folgen.

Als Baustein im Wiki (WI-261008-bausteine-artikel)

Stumm und mit festen Beispieldaten; Form und Wortlaut stehen in wiki.md unter „Bausteine im Artikel“. Zwei Bausteine: der Knopf „Neue Seite“ (documents.new-page, im Satz) und eine Seitenkarte der Übersicht (documents.page-card, Block). Beide stehen dafür seit dem 08.10.2026 in dokumente/Seitenkarte.tsx; die Übersicht zeigt dieselben Bauteile wie vorher.

Was fehlt

  1. Keine Wort-Formatierung — gebaut am 20.09.2026 (C13, N85). Ein Wort markieren, dann Strg+B — oder einen der fünf Knöpfe in der Leiste, die über der Auswahl erscheint (Fett, Kursiv, Unterstrichen, Durchgestrichen und seit dem 24.09.2026 Code </> mit Strg+E, jeweils mit ihrem Kürzel daneben; WI03). Inline-Code steht in der Zahlenschrift auf Papier mit feinem Rand und im Markdown als `Code`. Seit dem 07.10.2026 (KI-261007-markierung-begleiter) gibt es als sechsten Knopf Markieren mit Strg+Umschalt+H: die Auswahl liegt dann auf der Anwendungsfarbe zu einem knappen Viertel, die Schrift bleibt im Ton text, hell wie dunkel; im Markdown ==so==. Das Blockmenü bietet die Markierung nicht an — es wirkt auf ganze Blöcke, und ein ganzer markierter Block hebt nichts mehr hervor. Der Inhalt eines Blocks trägt dafür segments: [{ text, marks }]; text steht daneben und ist der Klartext, den der Server aus den Abschnitten setzt. Das Textfeld ist deshalb kein <textarea> mehr, sondern ein contentEditable — ein Textfeld kann seinen Inhalt nicht teilweise fett zeigen. Was fehlt: (a) Ein Blocktypwechsel („aus Absatz mach Überschrift") nimmt den Text mit, aber nicht die Auszeichnung — uebernimmInhalt baut frischen Inhalt. (b) Verweise innerhalb eines Absatzes — seit dem 24.09.2026 (WI03, N282): ein Abschnitt trägt dafür verweis: { art, ziel } und wird zum Chip. Gezeigt, gesetzt („@") und angeklickt wird er aber nur, wo der Editor eine Verweisquelle bekommt — heute im Wiki (docs/seiten/wiki.md). Hier in /documents bleibt ein Chip schlichter Text; er geht beim Schreiben nicht verloren, solange man ihn nicht anfasst. (c) Farbe und Hintergrund je Wort gibt es nicht — der Block als Ganzes hat beides.
  2. Kein Export — Markdown gibt es seit dem 17.09.2026. „als Markdown" in der Fußzeile des Seitenkopfs, DOCUMENT_MARKDOWN als Endpunkt, dokument_markdown als MCP-Werkzeug. Die Umwandlung steht in @shared mit vierzehn Zusicherungen; acht weitere prüfen den Endpunkt, darunter die, dass eine fremde Seite nicht herauskommt. Was fehlt: PDF, ein Export des ganzen Baums auf einmal, und die Dateien — Bilder stehen als Adresse darin, nicht als Inhalt. Das sagt der erzeugte Text auch selbst.
  3. Keine Versionen. Was gestern dastand, ist weg.
  4. Keine Zusammenarbeit. Zwei Fenster auf derselben Seite überschreiben sich.
  5. Kein Kommentar am Block.
  6. Keine Verlinkung rückwärts. Ein Seitenverweis zeigt hin, nicht zurück (Richtung G1).
  7. Keine Vorlagen. Jede Seite fängt leer an.
  8. Keine Suche im Dokument (Strg+F). — gebaut am 21.09.2026 (S-documents). Strg+F öffnet eine Leiste aus Glas oben rechts: Suchwort, Zähler, zwei Pfeile, ein Kreuz, darunter die Fundstellen mit dem Text darum. Gesucht wird über flachlegen(baum), also über alle Blöcke der Seite — auch die unter einer zugeklappten Überschrift. Das Rechnen steht in client/dokumente/editor/suche.ts und ist ohne Schirm prüfbar (suche.test.ts, elf Zusicherungen); die Leiste in Suchleiste.tsx. Was fehlt: siehe 21 — über die Seite hinaus sucht sie nicht. Die Punkte 17 bis 20 sind am 22.09.2026 abgetragen: verdeckte Treffer, die beiden Schalter, der Seitentitel und die Höhe des Kopfbands.
  9. Kein Bild-Upload im Block — gebaut am 17.09.2026. Bild- und Dateiblock legen eine Datei in Denotatos eigener Ablage ab („Bild auswählen" / „Datei auswählen"); die Kennung steht als file_id im Blockinhalt, die Adresse von draußen bleibt als Ausnahme daneben. Was noch fehlt: Ziehen und Fallenlassen, Einfügen eines Bildes aus der Zwischenablage (Text mit Gliederung wird seit dem 07.10.2026 zu Blöcken), und eine Größenangabe am Bild.
  10. Tabellen sind starr. Keine Sortierung, keine Formel, keine Verknüpfung zu Daten.
  11. Der Knopf-Block tut nichts. — zurückgezogen am 21.09.2026 (S-documents). Seit dem 17.09.2026 sagte er es immerhin selbst; das half nicht, denn einfügen konnte man ihn weiter, und ein Blocktyp, den man einfügt und der nichts tut, sieht aus wie ein Fehler in Denotato. Zwischen „bauen" und „entfernen" war nur eines möglich: ActionType kennt genau einen Wert (open_menu), alle übrigen stehen auskommentiert daneben, und der Aufzählungstyp liegt in @shared — eine Wirkung wäre keine Änderung an den Dokumenten, sondern eine am Inhaltsformat. Also steht der Knopf nicht mehr in ANGEBOT: das Schrägstrichmenü bietet ihn nicht an. Der Katalogeintrag bleibt, weil er Name und Zeichen für die Knöpfe trägt, die in Seiten schon stehen — und die sitzen nicht fest: istUmwandelbar nennt den Knopf seit heute als Ausgangspunkt, „Umwandeln in" steht an seinem Griff, und uebernimmInhalt trägt die Beschriftung nach text hinüber.
  12. Keine Verschlagwortung.
  13. Kein Papierkorb-Ablauf. — behoben am 21.09.2026 (B20). Die Seiten sind jetzt eine Art im gemeinsamen Papierkorb, also nimmt raeumeAb sie nach dreißig Tagen mit wie alles andere. Das ist eine Änderung am Verhalten, und sie geht in die scharfe Richtung: Wer eine Seite wegtut, hat ab jetzt dreißig Tage und nicht mehr ewig. Am 21.09.2026 lag nichts im Papierkorb, als es umgestellt wurde.
  14. Die Auszeichnung überlebt keinen Typwechsel. Wer einen Absatz mit einem fetten Wort zur Überschrift macht, bekommt die Überschrift ohne das fette Wort: uebernimmInhalt in plugins/src/documents/shared/blockinhalte.ts baut den Inhalt des neuen Typs frisch aus dem Klartext (bis zum 21.09.2026 tat es standardInhalt, mit demselben Ergebnis). Beim Teilen und Zusammenziehen ist es anders — mitText zieht die Abschnitte seit dem 20.09.2026 mit. Der Klartext selbst überlebt seit dem 21.09.2026 auch dann, wenn niemand ihn mitschickt (A11): migrateContent im Server überführt ihn in das Feld, das der neue Typ dafür führt — body bei der Formel, name bei der Datei, sonst text —, und ein Typ ohne Textfeld bekommt keines angehängt. Im Editor merkt man davon nichts, denn er schickt den Inhalt selbst mit; wer /api/blocks/changeType ohne content ruft, bekam vorher eine leere Überschrift. Und seit dem 22.09.2026 verschwindet der Klartext auch dann nicht still, wenn der neue Typ ihn gar nicht führen kann (F14). Gemessen am laufenden Dienst: ein Absatz mit „Wichtiger Satz, den niemand verlieren will" wurde zur Tabelle, die Antwort hieß block_updated, und der Satz war weg. Jetzt lehnt der Server ab (409), solange niemand content mitschickt — von den drei möglichen Ausgängen (mitnehmen, erkennbar lassen, ablehnen) ist stilles Wegwerfen der schlechteste, und „erkennbar lassen" ginge nur als Feld an einem Typ, der es nicht kennt. Im Browser trifft das niemanden: „Umwandeln in" bietet nur textführende Ziele an, und über den Schrägstrich wird nur eine leere Zeile gewandelt.
  15. Ein leerer Block lässt sich nicht in jeden Typ wandeln — behoben am 21.09.2026 (F14). Im Katalog (/) wird ein leerer Block umgewandelt statt ein neuer angelegt, und der Editor baute den neuen Inhalt mit standardInhalt: die kannte sieben Typen und gab für alle übrigen { text, styling, alignment } zurück. Wer „Tabelle", „Bild", „Datei", „Weblink", „Seitenverweis" oder „Knopf" wählte, schickte das an einen Typ, der thickness, scale oder link erwartet; contentFitsBlockType lehnte mit „Der Inhalt passt nicht zum Blocktyp" ab. Jetzt baut uebernimmInhalt aus plugins/src/documents/shared/blockinhalte.ts den Inhalt — aus derselben Liste, gegen die der Server prüft; alle sechzehn Einträge des Schrägstrichmenüs kommen durch, nachgewiesen in typwechsel.test.tsx. Der zweite Weg ist seit dem 21.09.2026 mit geheilt. Wer --- tippt, läuft nicht über den Katalog, sondern über kuerzelErkennen, und das baut seinen Inhalt mit standardInhalt — der zweiten Liste. Sie war bereits abgewichen: --- gab eine Trennlinie mit thickness: 1, / eine mit 3. Jetzt nimmt der Editor vom Treffer nur noch die Wahl des Kürzels — Typ, Text, Stufe, zuklappbar, Startwert — und baut den Rest mit kuerzelinhalt aus derselben Liste wie das Schrägstrichmenü. Beide Wege geben dieselbe Trennlinie, und ein Kürzel für einen Typ, den standardInhalt nicht kennt, bekommt trotzdem den richtigen Inhalt. Nachgewiesen in kuerzelinhalt.test.ts (63 Zusicherungen) und in verify:dokumente (vier davon, als Teil der Kette). Die zweite Liste gibt es seit dem 22.09.2026 nicht mehr. standardInhalt in @shared/handlers/documents/blockbaum.ts ist abgeschafft; kuerzelErkennen gibt jetzt den Wunsch zurück — Typ, Text, Stufe, zuklappbar, Startwert — und wer einen Inhalt braucht, baut ihn mit kuerzelinhalt aus defaultBlockContents. Damit steht die Liste der Vorgabeinhalte an einer Stelle im Baum, und der zweite Satz von „Fertig, wenn" stimmt ganz und nicht nur dort, wo es auffiel. Und die Tabelle aus dem Schrägstrich ist jetzt dieselbe wie die aus dem Anlegefach. Gemessen: blocks/add mit blockType: table gab zwei Zeilen, blocks/changeType nach table null — derselbe Menüpunkt „Tabelle" gab also einen leeren Rahmen, wenn die Zeile leer war (dann wird gewandelt), und eine Tabelle mit zwei Zeilen, wenn etwas darin stand (dann wird angelegt). Der Typwechsel baut das Gerüst jetzt mit, für Tabelle und Karteikarte, und nur dann, wenn der Block noch keine Kinder hat. Und seit dem 22.09.2026 bleibt beim Wechsel kein Kind hängen. Gemessen am laufenden Dienst: Eine Tabelle samt ihren zwei Zeilen ließ sich in acht Zieltypen wandeln — Überschrift, Aufklappbar, Spaltensatz, Aufzählung, Nummerierung, Aufgabe, Tabellenspalte, Absatz —, die Antwort hieß jedes Mal block_updated, und die beiden table_row standen danach unter dem neuen Block (kinder 2->2 [table_row,table_row]). Sie waren dort nicht nur falsch, sondern fest: Eine Tabellenzeile ist kein freier Block, ihr Menü am Griff bietet weder Löschen noch Verschieben noch Umwandeln an, weil sie ihrer Tabelle gehört — und die gab es nicht mehr. Der Grund war eine zu großzügige Lesart: allowedBlockChildren (heute ERLAUBTE_KINDER im Blockbaum) sagt bei acht Typen true, und true hieß „jedes Kind". Jetzt heißt es „jeder freie Block". Geräumt wird, was leer ist, abgelehnt, woran etwas hängt. Sonst wäre die Absage schärfer als der Fehler: Strg+Z nach „/ → Tabelle" wandelt zurück zum Absatz und lief gegen die zwei Zeilen, die der Server gerade selbst gebaut hatte. Und die Karteikarte war, von einundzwanzig Ausgangstypen, der einzige, bei dem ein Wechsel auf die Tabelle scheiterte — an Frage und Antwort, in die niemand etwas geschrieben hatte. Beide gehen jetzt; eine Tabelle mit einer ausgefüllten Zelle bleibt stehen. Nachgewiesen mit fünf weiteren Zusicherungen in verify:dokumente, gegengeprüft durch Stilllegen beider Zweige. Was noch fehlt: Im Browser nachgesehen hat es niemand — gemessen ist der Weg dahinter (verify:dokumente, vierzehn Zusicherungen am laufenden Dienst), nicht der Klick.
  16. Die Leiste kennt keine Berührung. Sie erscheint auf mouseup und keyup; wer am Telefon ein Wort markiert, bekommt sie nicht. selectionchange am Dokument wäre der Weg, und er ist teurer — er feuert bei jeder Zeigerbewegung.
  17. Ein Treffer unter einer zugeklappten Überschrift lässt sich nicht anspringen. — behoben am 22.09.2026 (S-documents). Die Liste zeigte ihn samt Ausschnitt, der Klick tat nichts: felder führt die Schreibfelder der gezeichneten Blöcke, und einen verdeckten zeichnet niemand — es gab kein Feld, in das der Zeiger dürfte, und aus Sicht des Lesers klemmte die Liste. Jetzt wird der Weg dorthin erst gerechnet und dann in einem Zug gegangen. Verdeckt sein kann ein Block auf zwei Arten, und beide liegen übereinander: ein zugeklappter Elternblock gibt seine Kinder nicht heraus, und eine zuklappbare Überschrift verdeckt ihre Geschwister bis zur nächsten gleicher oder höherer Stufe (N65). aufdeckplan in plugins/src/documents/shared/aufdecken.ts gibt beides als Liste von Kennungen zurück — erst klappe für die Blöcke, dann klappeUeberschrift für die Überschriften, und in dieser Reihenfolge mit Absicht: Welche Überschrift eine Zeile verdeckt, hängt daran, wo die Zeile in der sichtbaren Reihe steht, und die ändert sich, sobald ein Elternblock seine Kinder wieder herausgibt. Der Sprung selbst kommt eine Bildwiederholung später, über denselben Griff wie der Fokuswunsch: Der Wunsch bleibt liegen, bis es das Feld gibt. Zwei Entscheidungen stecken darin. Geschrieben wird nichts — der Klappknopf am Block legt auch open in den Inhalt, das Aufdecken nicht, sonst änderte bloßes Suchen das „zuletzt geändert" der Seite (beim Laden ist ohnehin alles offen). Und aufgeklappt wird nur, wer danach fragt: beim Blättern mit den Pfeilen und beim Klick auf eine Zeile, nicht beim Tippen — sonst klappte sich die Seite Buchstabe für Buchstabe von selbst auseinander. Ohne Schirm prüfbar (Grundsatz 59): aufdecken.test.ts, zwölf Zusicherungen, darunter die verschachtelten Überschriften, an denen ein einzelner Deckel scheitert.
  18. Die Suche kennt keine Schalter. — zwei davon gebaut am 22.09.2026 (S-documents). In der Leiste stehen jetzt „Aa" (Groß- und Kleinschreibung beachten) und „ab|" (nur ganze Wörter), beide aus wie vorher — wer „haus" tippt, meint weiterhin auch „Haus". Das Rechnen nimmt die Wahl als Suchwahl entgegen (suche.ts), die Leiste meldet sie mit aria-pressed. Ein Wortzeichen ist Buchstabe, Ziffer oder Unterstrich — geprüft ohne \w und ohne \p{L}: \w ist ASCII und hätte „Straße" nach „Stra" enden lassen, \p{L} braucht die Marke u, und die Oberfläche wird nach ES5 übersetzt. Stattdessen die Probe, die ohne Marke auskommt: ein Buchstabe ist, was sich groß und klein schreiben lässt. Dazu ein Fehler, der dabei auffiel: Ein verworfener Treffer schob um die Länge des Suchworts weiter statt um ein Zeichen — wer „ei" als ganzes Wort in „eineiig ei" sucht, hätte das zweite verloren. Nachgewiesen in suche.test.ts. Was nicht kommt: regulärer Ausdruck und Ersetzen. Der erste wäre eine eigene Sprache im Suchfeld, das zweite schreibt in die Seite und gehört nicht in eine Leiste, die nur liest.
  19. Der Seitentitel wird nicht mitgesucht. — behoben am 22.09.2026 (S-documents). Er steht jetzt als erste Zeile in der Suche, unter dem Namen „Titel" und mit der Kennung @titel — ein Klammeraffe kommt in keiner Blockkennung vor, wer ihn sieht, weiß, dass der Zeiger in den Kopf gehört. Das Titelfeld liegt dabei neben felder und nicht darin: An felder hängt mehr als der Fokus, die Pfeiltasten wandern darüber von Zeile zu Zeile und Backspace sucht darin den Vorgänger — legte man den Titel hinein, wäre er plötzlich ein Ziel für all das. Nebenbei trägt eine Fundstelle jetzt den Namen ihrer Quelle („Absatz", „Überschrift", „Titel") statt des Blocktyps; das Rechnen in suche.ts kennt damit weder Katalog noch Übersetzung.
  20. Die Suchleiste sitzt an einer festen Stelle (88 px von oben, am Telefon 72) — behoben am 22.09.2026 (S-documents). Sie misst nicht selbst, sondern liest --denotato-leistenhoehe: Die Leiste oben schreibt ihre Höhe über einen ResizeObserver an die Wurzel des Dokuments, und GeneralMenu rechnet längst damit. Die Suchleiste setzt ihren Abstand jetzt auf calc(var(--denotato-leistenhoehe, 52px) + <Abstand>) — mit demselben Rückfallwert wie überall, falls die Variable einmal nicht dasteht. Das Kopfband ist damit an einer Stelle gemessen, und die Leiste musste dafür nicht angefasst werden.
  21. Die Suche geht nicht über die Seite hinaus. Unterseiten sucht sie nicht mit, obwohl der Baum danebensteht. Das wäre ein Endpunkt über mehrere Seiten und keine Sache des Editors mehr.
  22. ANGEBOT und KATALOG laufen seit dem 21.09.2026 auseinander. — behoben am 22.09.2026 (S-documents). Der Rückzug des Knopfes bestand darin, dass er in ANGEBOT nicht mehr aufgezählt stand; eine Liste, aus der jemand einen Eintrag herausgenommen hat, sieht aber genauso aus wie eine, in die ihn jemand einzutragen vergessen hat. Jetzt trägt der Katalogeintrag den Grund (zurueckgezogen: string | null), ANGEBOT rechnet sich daraus, und der Knopf steht wieder in der Reihenfolge — mit dem Satz, warum er nicht angeboten wird. Dazu katalogluecken(): Es nennt jeden freien Blocktyp (istFrei), den die Reihenfolge nicht kennt — den umgekehrten Fehler, bei dem ein neuer Typ nie im Schrägstrichmenü auftaucht und das niemandem auffällt. Nachgewiesen in blockKatalog.test.ts mit acht Zusicherungen, darunter die Gegenprobe, dass aus der Rechnung genau die fünfzehn Einträge herauskommen, die das Menü am 21.09.2026 von Hand aufzählte — seit WI08 dazu Code und Hinweiskasten.
  23. BlockType.BUTTON und ActionType bleiben stehen. Der Rückzug ist eine Sache der Oberfläche; die Spalte block_type kennt button weiter, und ActionType hat weiterhin einen Wert und dreizehn auskommentierte daneben. Aufräumen wäre eine Migration und damit eine eigene Entscheidung.
  24. MOVE_BLOCK fragt die Regel nicht. — behoben am 23.09.2026 (F27). Gemessen am 22.09.2026 hängte /api/blocks/move eine Tabellenzeile klaglos unter einen Absatz (status=200 block_moved); der Endpunkt prüfte nur die Seite und den Kreis. Den Server allein zu schärfen hätte geheißen, dass eine angebotene Taste eine Fehlermeldung gibt: Die Tabulatortaste fragte nimmtKinder — nimmt der Vorgänger überhaupt Kinder —, und darunter fiel auch die Tabelle. Deshalb beides zugleich: Die Regel steht jetzt einmal in @shared (ERLAUBTE_KINDER, kindPasst), moveBlock fragt sie vor dem Umhängen und antwortet sonst mit BLOCK_MOVE_NOT_ALLOWED, und Tabulatortaste und Ablagelinie bieten nur an, was durchkommt. blockMoveAllowed, das niemand rief, ist entfallen. verify:dokumente misst am laufenden Dienst: keine Tabellenzeile unter einen Absatz und keine auf die oberste Ebene, wohl aber unter ihre eigene Tabelle; kein Absatz in die Tabelle. Was bleibt: Zeilen, die schon vorher falsch umgezogen wurden, räumt niemand auf — das wäre eine Wanderung und eine eigene Entscheidung. Und im Browser nachgesehen hat es niemand (Punkt 25).
  25. Im Browser nachgesehen hat es niemand. Suche und Rückzug sind gegen Typen, Lint und Nachweise geprüft, nicht gegen ein Fenster: In der Nacht zum 21.09.2026 lief die API nicht (gemessen — https://127.0.0.1:5443/api/ping gab „Connection refused"). Was das Rollen, die Auswahl im contentEditable und Strg+F am Telefon wirklich tun, steht noch aus.
  26. Der Editor ist nicht übersetzt. Zehn der zwölf Bauteile unter client/dokumente/editor/ tragen ihre deutschen Sätze roh im Code — „Auf dieser Seite steht das nicht.", „Umwandeln in", „Suchen", „Groß- und Kleinschreibung beachten". Nur blockKatalog.tsx geht über satz(), und deshalb sind die Blocknamen englisch zu bekommen und der Rest der Oberfläche nicht. Wer das nachzieht, fasst packages/shared/src/languages/*.json an — eine geteilte Datei —, und sollte es in einem Zug für den ganzen Editor tun, nicht Schirm für Schirm: ein halb übersetzter Editor liest sich schlechter als ein ganz deutscher.
  27. Die Trefferliste sagt nicht, dass ein Treffer verdeckt ist. Seit dem 22.09.2026 klappt der Sprung die Seite auf, damit man hinkommt (Punkt 17) — angekündigt wird das nicht. Wer auf eine Zeile klickt, sieht plötzlich drei Abschnitte offen, die er selbst zugeklappt hatte, und weiß nicht, welche. Ein Zeichen an der Zeile („liegt unter einer zugeklappten Überschrift") wäre der ehrlichere Weg, und aufdeckplan weiß es bereits; es fehlt nur der Aufruf beim Zeichnen der Liste und ein Platz dafür in der Zeile.
  28. Was die Suche aufgeklappt hat, klappt niemand wieder zu. Der Zustand bleibt, auch wenn die Leiste geschlossen wird — die Seite sieht nach einer Suche anders aus als davor. Zurücknehmen wäre falsch, solange der Zeiger noch in dem Block steht, den man gesucht hat; richtig wäre, es sich beim Schließen zu merken und nur das zuzuklappen, was der Leser nicht selbst angefasst hat. Das ist eine Buchhaltung über drei Zustände und keine fünf Zeilen.
  29. Der Favorit trägt ein Zeichen, das etwas anderes heißt. — geklärt am 30.09.2026 (E12): Der Favorit bleibt der stern. Seit N379 heftet der Stern in der Adresszeile eine Seite an (Christians „Anheften-Stern"); der Favorit ist dieselbe Geste, und zwei Zeichen für sie wären zwei Sprachen. Der alte Befund: Die Registry meint mit stern den Himmel („kein Stern, der heißt Himmel" steht an wunsch); die Seitenleiste nimmt ihn für den Favoriten, und die Wörter folgen ihm — „Stern wegnehmen", „Mit Stern". Seit N134 steht die Stelle in SEITENLEISTENZEICHEN als vorläufig. Zwei Wege: ein eigenes favorit in der Registry, oder anheften („hängt die Seite oben an" sagt diese Datei selbst) — dann ändern sich auch die Wörter. Das ist eine Entscheidung. Daran hängt auch, dass von den drei Abschnittsköpfen der Leiste nur der Papierkorb ein Zeichen trägt (Guide §7.3). Seit der Nachbesserung vom 23.09.2026 tragen alle drei Köpfe eines; der Kopf „Favoriten" nimmt dabei denselben stern (SEITENABSCHNITTSZEICHEN in zeichen.ts).
  30. Das Blockmenü wartet auf drei Zeichen. — behoben am 30.09.2026 (E12): kopieren, einruecken, ausruecken und die drei Ausrichtungen stehen in der Registry, das Menü zieht als Ganzes um. Der alte Befund: Duplizieren, Einrücken und Ausrücken haben keine Entsprechung in der Registry. Ihre Linien stehen neben hoch, runter und loeschen und sind dünner als diese. Seit der Nachbesserung vom 23.09.2026 bleiben deshalb alle sechs Handlungen gezeichnet, auch die drei, für die es ein Registry-Zeichen gäbe — eine Liste, eine Zeichensprache. Wunschnamen kopieren, einruecken, ausruecken; sind sie da, schaltet ein Eintrag in BLOCKAKTIONSZEICHEN die ganze Liste um. Dazu ausrichtung_links, ausrichtung_mitte, ausrichtung_rechts für ⇤ ↔ ⇥.
  31. Die Blocktypen zeichnen sich selbst. — behoben am 30.09.2026 (E13, N452): Jede Blockart nennt im Katalog ein Zeichen der Registry, das wie sie heißt; vierzehn sind neu gezeichnet, acht gab es schon (aufgabe, tabelle, formel, datei, weblink, karte, frage, hinweis). blockKatalog.test.ts hält, dass keine zwei Blockarten ein Zeichen teilen. Gesehen hat sie noch niemand; der Blick steht in E27. Vorher: blockKatalog.tsx führte für alle 19 Typen eine eigene Zeichnung (zeichne(…)), die im Schrägstrichmenü und unter „Umwandeln in" steht — Text, Überschrift, Aufzählung, Nummerierung, Aufgabe, Aufklappbar, Trennlinie, Formel, Tabelle, Spaltensatz, Bild, Datei, Weblink, Seitenverweis, Knopf, Karteikarte, Frage, Hinweis, Antwort. Die Registry hat davon höchstens Verwandte (blatt, karte, frage, hinweis), aber mit anderer Bedeutung. Am Block selbst trugen Datei und Weblink dasselbe Schicksal, bis E12 datei und weblink zeichnete (30.09.2026); die neunzehn Blocktypen stehen in E13.
  32. „Durchgestrichen" hat zwei Buchstaben. Im Blockmenü steht D, in der Leiste über der Auswahl S — derselbe Knopf, zwei Gestalten. Welcher gilt, ist nicht eindeutig (D ist deutsch, S die Gewohnheit aus fremden Programmen); geändert hat N134 deshalb keinen.
  33. Die neuen Zeichen sind dunkler als ihre Vorgänger. Unter 20 px zeichnet Zeichen den Strich immer in Textfarbe und nur die Fläche in der Farbe des Knopfs. Die Griffe links an der Zeile, der Klappwinkel und die Knöpfe der Suchleiste waren ganz in tertiary gezeichnet und sind jetzt kräftiger; der Klappwinkel ist von 10 auf 12 px gewachsen (wie in der Seitenleiste), die Menüzeichen von 15 auf 16 px. Die Größen sind seit der Nachbesserung vom 23.09.2026 wieder die alten: Klappwinkel 10 px, Blockmenü 15 px (und dort ganz gezeichnet, Punkt 30). Gesehen hat das niemand im Browser (Punkt 25).
  34. „Gesichert" mit Haken, obwohl nichts gesichert wurde. Behoben am 23.09.2026. Scheitert das Anlegen eines neuen Blocks, zählt sichereJetzt seinen Inhalt jetzt als Fehler: der Kopf zeigt „Nicht gesichert" mit warnung, und der Hinweis beim Überfahren sagt, dass ein neuer Block sich nicht anlegen ließ. Vorher übersprang es ihn still und meldete „Gesichert" mit grünem Haken (editor/sicherung.test.tsx, mit Gegenprobe). Was bleibt: Der Inhalt selbst ist verloren — es gibt keine Kennung, unter der ein zweiter Versuch landen könnte. Ihn in einen neuen Anlegeversuch zu retten, wäre der nächste Schritt.
  35. Der Hinweis auf der leeren Übersicht spricht noch vom +. „über das + neben einer Zeile in der Leiste" — dort steht seit N134 das gezeichnete anlegen. Die Form ist dieselbe, der Satz stimmt; ein Zeichen im Satz wäre ehrlicher, braucht aber ein Wort für den Bildschirmleser.
  36. Zwei stille Sätze am Block tragen kein Zeichen. Der Knopf-Block sagt „Zurückgezogen — der Knopf löst nichts aus" ohne hinweis, und der Kopf der Karteikarte trägt kein karte. Beides wäre richtig, aber es sind Aussagen über den Block und keine Meldungen; ob ein Zeichen dort die Lautstärke 2 des Archivs sprengt, ist nicht gemessen.
  37. Derselbe Klappwinkel in zwei Größen. Am Block steht ausklappen 10 px groß, vor den Abschnittsköpfen der Seitenleiste 12 px. Beim Umzug in die Registry (N134) war der Winkel am Block kurz auf 12 px gewachsen und wurde auf die alte Größe zurückgesetzt, weil eine neue Größe eine Gestaltungsentscheidung ist und kein Ersatz. Ob beide Stellen eine Größe bekommen — und welche —, steht offen.
  38. Die Abschnittsköpfe der Leiste stehen nicht bündig. „Favoriten" und „Papierkorb" beginnen mit dem Klappwinkel, „Seiten" nicht, weil der Abschnitt nicht zuklappt. Seit alle drei Köpfe ein Zeichen tragen (23.09.2026), fällt der Versatz stärker auf: der stern und der Mülleimer stehen eine Winkelbreite weiter rechts als das blatt. Ein Platzhalter von der Breite des Winkels vor „Seiten" würde es richten.
  39. Ein abgeschalteter Bereich hat keine eigene Anzeige. Seit D33 (23.09.2026) antwortet der Server mit 403 „Bereich ist ausgeschaltet"; der Editor zeigt die Meldung über der Zeile „Diese Seite lässt sich nicht öffnen …", Übersicht und Seitenleiste sagen „Noch keine Seite." — als gäbe es keine. Wer über ein Lesezeichen kommt, erfährt nicht, dass die Seiten noch da sind und wo man den Bereich wieder einschaltet. Dazu kommt, dass die Verknüpfungen für einen nur ausgeschalteten Bereich 404 „unbekannter Ressourcentyp" sagen statt 403: Der Anschluss kennt nur ja oder nein.
  40. Eine abgewiesene Adresse hält die Beschriftung mit fest. Der Editor schickt immer den ganzen Inhalt; solange die Adresse eines Weblinks nicht erlaubt ist, wird auch seine Beschriftung nicht gesichert. Das Feld sagt es, getrennt sichern lässt sich der Rest nicht (D26).
  41. mailto: ist am Weblink nicht erlaubt — eine Annahme in der Nacht zum 23.09.2026, nicht Christians Entscheidung (D26). Ein Verweis auf eine Postadresse wird abgewiesen.
  42. Ausgeschaltete Karteikarten sehen aus wie fehlende Karten. Seit N143 fragt BLOCK_FLASHCARD_LIST das zweite Tor über FLASHCARDS. Wer den Bereich ausgeschaltet hat, sieht an jedem Karteikarten-Block „noch keine Karte" — auch an einem, der im Lernsystem längst eine Karte hat —, und die Brücke antwortet beim Klick mit „Bereich ist ausgeschaltet". Was fehlt: ein Satz am Block, dass die Karteikarten aus sind, statt einer Aussage, die nicht stimmt.
  43. Code und Hinweiskasten (WI08) — was noch fehlt. Der Knopf „Kopieren“ hat kein Zeichen, weil die Zeichenliste keines für Kopieren kennt; er steht als Wort da. In der Leseansicht rollt ein Code-Block mit langen Zeilen nur mit Maus oder Finger, nicht mit der Tastatur. Im Markdown-Export fehlt zwischen einer Liste und dem Absatz direkt danach die Leerzeile — steht seit WI02 (24.09.2026) da. Und das Kürzel ``` ist auf deutschen Tastaturen umständlich (siehe „Tastatur und Kürzel“).
  44. Bewegung im Editor — was noch fehlt (BW-261007-editor). Dass beim Tippen in einen langen Block keine Animation läuft, ist im Test belegt, aber nicht gemessen; die Messung gehört BW-261007-nachmessen. Ein Block, der beim Ziehen über anderen schwebt, folgt dem Zeiger noch als Bild des Browsers (HTML5-Ziehen), nicht als Feder.
  45. Formelfenster der Karte (LX23) — was noch fehlt. Es öffnet nur ein Klick in eine geschlossene Formel; mit den Pfeiltasten oder beim Tippen des schließenden $ geht es nicht auf, und ob es eingebettet statt schwebend stehen soll, ist offen (N444). Im Absatz, in der Liste und im Hinweiskasten gibt es das Fenster nicht, nur in der Karte.
  46. LaTeX-Text im Dokument (LX17) — was noch fehlt. Der Name im Schrägstrichmenü ist fest, bis Admins Namen im Blockkatalog stellen können. Auf der Seite der LaTeX-Texte gibt es noch keinen Knopf „In ein Dokument einbinden“; eingebunden wird nur vom Block aus. Das PDF zeigt den letzten Satz eines Schreibenden — wer nur liest, wartet, bis jemand setzt. Die HTML-Ausgabe zeigt vom Block nichts, nicht einmal seinen Titel.

Kürzel beim schnellen Tippen (RL13, 28.09.2026). Wer „- Einkaufen“ ohne Pause tippte, verlor den Text hinter dem Kürzel: Der Absatzinhalt vom „-“ ging nach dem Typwechsel noch hinaus, kam mit 400 content_does_not_fit_block_type zurück und stellte sich über den getippten Listenpunkt. Seitdem wartet die Sicherung auf einen laufenden Typwechsel, überspringt überholte Inhalte und verdrängt keinen neueren (editor/kuerzelsicherung.test.tsx).

Lesbare Wertflächen (F21, 25.09.2026). Das Häkchen eines erledigten Blocks liest alternative.on statt eines gemeinsamen Statustons. Seit dem 09.10.2026 ist es unbunt: Fläche neutral.text, Zeichen neutral.papier — erledigt ist ein Zustand, keine Handlung (ES-261009-akzentfarbe-fester).

Kartenruhe über Lernsammlungen (F91, 25.09.2026). Liegt eine Seite im Papierkorb, ruhen ihre Karten auch für Mitlernende, die sie über ein freigegebenes Modul oder eine freigegebene Kategorie sehen. Öffentliche Sichtbarkeit allein gibt weiterhin keinen Blick auf die Blockverknüpfung (N264).