<!-- Testrunde 2, 31.07.2026, zehn neue Personas der Zielgruppe.
     Durchschnitt 4.2/10 (Runde 1: 3.8).
     Vertraulichkeit [3.5, 6.5, 4, 5, 3, 5], Tempo [4, 4, 4, 3].
     ja 0 / vielleicht 1 / nein 9.
     Getestet gegen den lokalen Stand, weil Cloudflare gestoert war. -->

# CloakDrop — Urteil aus Testrunde 2

*Hinweis zur Datenlage: Von den zehn Protokollen lagen mir sechs vollständig vor (alle sechs aus dem Segment Vertraulichkeit) plus eines angeschnitten (Immobilienfotografin, Tempo). Drei Protokolle aus dem Tempo-Segment (Noten 4, 4, 3) fehlen im Text. Alle Nennungszählungen unten beziehen sich auf die sieben vorliegenden Protokolle — die echten Zahlen liegen also eher höher, nicht niedriger. Fünf der zentralen Funde habe ich im Repo selbst gegengeprüft; das ist jeweils markiert.*

---

## 1. Die Note

| | Runde 1 | Runde 2 | Differenz |
|---|---|---|---|
| **Gesamt** | 3,80 | **4,20** | +0,40 |
| Vertraulichkeit (6 P.) | 4,08 | **4,50** | +0,42 |
| Tempo (4 P.) | 3,38 | **3,75** | +0,37 |
| "würde nutzen: ja" | 0 von 10 | **0 von 10** | ±0 |
| "vielleicht" | 0 | **1** | +1 |

Spanne Runde 2: **3,0 bis 6,5**. Acht der zehn Noten liegen zwischen 3 und 5. Der Ausreißer nach oben (6,5) kommt vom Penetrationstester — dem einzigen Teilnehmer, der keine Datei zu verschicken hatte und deshalb fast nur Handwerk bewertet hat. Sein eigener Satz dazu: *"Handwerk 9, Produkt 3."*

**Deutlich gesagt: es hat sich fast nichts bewegt.** +0,40 bei neun umgesetzten Änderungen. Der Grund steht in Runde 1 schon wörtlich drin und wiederholt sich in Runde 2 in sieben von sieben Protokollen: das Produkt verschickt nichts. Neun der zehn Testerinnen und Tester nennen das ausdrücklich als Blocker, sechs von sieben vorliegenden Protokollen setzen es an Position 1 der Blockerliste. Solange der Link nur im erzeugenden Browser öffnet, ist die Note eine Funktion davon, wie viel Gewicht jemand nachprüfbarer Kryptografie beimisst — nicht davon, wie gut die letzten neun Änderungen waren.

Bemerkenswert ist trotzdem: **die Streuung nach oben ist neu.** In Runde 1 gab es keine 6. Wer nur das Gebaute bewertet, kommt inzwischen bei 6,5 und "vielleicht" heraus. Das ist ein echtes Signal.

---

## 2. Was die neun Änderungen gebracht haben

Ich gehe die Liste einzeln durch. Die Spalte "bemerkt" zählt nur die sieben vorliegenden Protokolle.

| Änderung | bemerkt | Befund |
|---|---|---|
| Manipuliertes Chiffrat scheitert sichtbar | **6/7** | Volltreffer. Meistgelobte Einzeländerung. |
| Unvollständige Links melden das | **6/7** | Angenommen, aber eine Lücke gefunden. |
| Abgelaufene Drops werden beim Start gelöscht | **7/7** | Volltreffer — aber unvollständig. |
| Schlüssel raus aus der Adresszeile | **5/7** | Halb umgesetzt, dadurch neue Schwäche. |
| Übersicht der gespeicherten Drops | **6/7** | **Netto negativ.** Mehr Kritik als Lob. |
| Vorgabe 24 h statt 7 Tage | **0/7 als Verbesserung** | Nicht bemerkt. |
| Browser-Hinweis vor dem Klick | **7/7** | Gelesen — und trotzdem wirkungslos. |
| Dezimale Größen | **1/7** | Halb erledigt, Rest-Widerspruch offen. |
| Textwidersprüche beseitigt | — | Es wurden sechs neue/verbliebene gefunden. |

**Die vier, die klar funktioniert haben.**

Die Fehlerzustände sind der größte Gewinn der Runde. Die Doktorandin hat Byte 100 eines Chunks gekippt und bekam die volle Fehleransicht *"This file was changed"* ohne ein einziges Byte auf der Platte. Die Betriebsratsvorsitzende, die technisch Laie ist, schreibt: *"Die Fehlermeldungen sind besser als bei fertigen Produkten. Vier verschiedene Fälle, vier verschiedene klare Sätze. Kein 'Fehler 400'."* Der Open-Source-Entwickler hat im Code sogar den Kommentar gefunden, dass das früher in einem gemeinsamen catch lag, und rechnet es an. Das Ablauf-Aufräumen ist der einzige Punkt, bei dem ein Tester seinen eigenen Verdacht ausdrücklich zurückgezogen hat: der Steuerfahnder hat fünf Altersvarianten durchgetestet und protokolliert *"Mein erster Befund war ein Fehler meiner Messung, kein Fehler der Software."*

**Die eine, die nach hinten losgegangen ist: die Drop-Übersicht.**

Das ist der wichtigste Befund dieses Abschnitts. Die neue Liste hat vier Kritikpunkte erzeugt und keinen einzigen Lobpunkt:

- Sie verrät auf einem fremdkontrollierten Rechner genau das, was die Zielgruppe verstecken will. Betriebsrätin: *"'1 drop - 1.0 MB', 'Cloaked 2026-07-31 - opens for 24 more hours'. Kein Dateiname, richtig — aber Datum, Größe und Anzahl. Meine erste Frage war 'wer sieht, DASS ich etwas verschickt habe', und die Antwort steht auf meinem eigenen Bildschirm."*
- Ihr Einstiegspunkt ist auf einem frischen Profil kaputt (siehe §6, Fund B) — drei unabhängige Nennungen.
- Sie aktualisiert sich nach "Start a new drop" nicht — zwei Nennungen.
- Sie gibt beim Platzverbrauch falsche Auskunft — der Steuerfahnder maß 1,88 GB angezeigt gegen 2.086 MB tatsächlich, und in einem zweiten Fall *"nothing stored"* bei 306 KB auf der Platte.

Eine Funktion, die für Vertraulichkeitsnutzer gebaut wurde, arbeitet gegen deren Bedrohungsmodell. Das ist keine Kleinigkeit, das ist ein Designfehler in der Zielsetzung.

**Die eine, die niemand bemerkt hat: 24 Stunden statt 7 Tage.**

Kein einziges Protokoll erwähnt das als Verbesserung. Es taucht nur als beiläufiges Beiwerk auf ("Standard 24 Stunden"). Das ist ein Befund für sich: die Voreinstellung war offenbar nie das Problem, das die Tester hatten. Die Arbeit war richtig, sie war nur unsichtbar.

**Die eine, die gemacht wurde und trotzdem nicht wirkt: der Hinweis vor dem Klick.**

Sieben von sieben haben den Hinweis gelesen. Sieben von sieben haben ihn trotzdem zu spät verstanden. Das ist die härteste Lehre der Runde, weil es eine Textänderung war und ein Typografieproblem ist:

- Steuerfahnder: *"Ich habe den Satz 'The link will open in this browser only' zweimal überlesen, weil er in derselben grauen Kleinschrift steht wie der Rest. Diese Zeile gehört nicht in eine Fußnote, die gehört fett über den Knopf."*
- Hebamme: *"Es steht da — in grauer Kleinschrift unter dem Uploadfeld, während die Überschrift darüber in Riesenlettern verspricht, der Schlüssel reite im Link mit."*
- Doktorandin: *"den ich erst für einen Cookie-Hinweis hielt und nicht für die Beschreibung des gesamten Produkts."*
- Pentester: *"Der Hinweistext sagt es an vier Stellen, aber ich musste drei Absätze lesen und es dann im zweiten Browserprofil selbst ausprobieren, bevor ich es geglaubt habe."*
- Open-Source-Entwickler: *"Die Antwort steht dreimal auf dem Bildschirm und ist trotzdem die falsche."*

Mehr Wiederholungen desselben Satzes in derselben grauen 12-Punkt-Schrift ändern nichts. Die Aussage muss visuelles Gewicht bekommen, das ihrer Tragweite entspricht — sie ist die wichtigste Information auf der Seite und sieht aus wie das Impressum.

---

## 3. Die Vertrauensfrage

**Geprüft wurde ernsthaft.** Alle sieben haben Netzwerkmitschnitte gemacht, sechs haben IndexedDB gedumpt, vier haben den Quelltext nach Netzwerk-APIs durchsucht, drei haben aktiv manipuliert (Byte-Flip, Zeitstempel-Manipulation, Quota-Erschöpfung).

**Befund gegen den Anbieter: sauber. Kein einziger Fund.**

Der zentrale Punkt wurde siebenmal unabhängig bestätigt und zweifach belegt — einmal durch Abwesenheit von Code, einmal durch die CSP:

> *"Waehrend eines kompletten Drops kam genau 1 Request zustande (die Seite selbst). In keiner einzigen HTML-Datei steht fetch(, XMLHttpRequest, WebSocket, EventSource oder sendBeacon — und die ausgelieferte CSP setzt zusätzlich connect-src 'none'. Die App KANN strukturell nicht senden, sie verspricht es nicht nur."* (Open-Source-Entwickler)

Die Betriebsrätin, die kein Wort Code liest, formuliert dieselbe Sache als das, was sie ist: *"Das ist die einzige Zusage auf dieser Seite, die ich nicht glauben muss."* Das ist die stärkste Eigenschaft des Produkts und sie ist nicht kleinzureden.

**Krypto-Löcher: keine.** Zwei Fachleute haben unabhängig die IV-Konstruktion auseinandergenommen, weil sie dort ihren Standardfund erwarteten. Doktorandin: *"Genau hier erwarte ich normalerweise den Fehler (Manifest und erster Chunk beide auf Zähler 0), und genau hier ist er nicht."* Der Pentester bestätigt es separat. Beide loben zusätzlich, dass die IV die Chunk-Position bindet, das Manifest selbst authentifiziert ist und Umsortieren/Abschneiden dadurch auffallen. Der Schlüsselimport mit `extractable:false` und `['decrypt']` wurde zweimal gefunden und zweimal positiv erwähnt.

**Ein echtes Loch — aber nicht in der Kryptografie.** Der Steuerfahnder hat als Einziger das Speicherkontingent volllaufen lassen. Ergebnis: 241 Sekunden stillstehender Fortschrittsbalken bei 44 %, keine Fehlermeldung, kein Konsoleneintrag, und danach 49 Chunks (~205 MB) ohne Elterndatensatz, die die Aufräumroutine per Konstruktion nie erreicht, weil sie über `storage.alleDrops()` iteriert. Zusammen mit der falschen Auskunft *"nothing stored"* ergibt das die einzige Stelle in der ganzen Runde, an der die App etwas über gelöschte Daten behauptet, das nicht stimmt. Sein Urteil dazu ist fair und deshalb schwer: *"Lesbar ist davon nichts. Chiffrat ohne Schlüssel bleibt Chiffrat. Aber ich muss in meinem Beruf eine vollständige Löschung belegen können."*

**Die realen Leckkanäle, die alle nennen**, liegen außerhalb der Krypto: der Link ist der Schlüssel, ohne Passwort und ohne zweiten Faktor. Die Doktorandin hat zwei Kanäle ergänzt, die in eurer sonst pedantischen Aufzählung fehlen: Windows-Zwischenablageverlauf (Win+V, teils mit Cloud-Sync) und Chrome-Tab-Synchronisation, die die offene URL samt Fragment mitnimmt.

---

## 4. Der Aufwand

Hier ist das Produkt unangefochten gut, und zwar über beide Segmente hinweg.

**Klicks bis zum fertigen Link:** 3 bis 5. Mit Kopieren 4 bis 5.
**Seitenladezeit:** 0,19 – 0,21 s.
**Durchsatz (gemessen, sieben unabhängige Messungen):** 103 – 188 MB/s. Konkret: 4 MB in 0,29 s · 50 MB in 0,49 s · 160 MB (40 Fotos) in 1,07 s · 250 MB in 1,7 s · 300 MB in 1,6 s · 400 MB in 2,2 s · 470 MB in 5,3 s.

Sätze, die ihr euch aufheben solltet: *"Das ist schneller als mein Faxgerät die Nummer wählt."* (Hebamme) · *"bei WeTransfer bin ich noch nicht durch die Zwischenseite durch."* (Betriebsrätin) · *"Outlook hätte den Anhang in der Zeit nicht mal angenommen."* (Fotografin) · *"der Fortschrittsbalken ist bei normalen Dateien praktisch Dekoration."* (Pentester)

**Wo gezögert wurde, nach Häufigkeit:**

1. **Die Browser-Bindung nicht geglaubt — 7 von 7.** Längste Pause bei fast allen. Mehrere haben es erst im zweiten Profil geglaubt.
2. **Der nackte "Manage"-Knopf — 4 Nennungen.** Doktorandin: *"ich dachte, ich hätte etwas kaputtgemacht."* Pentester hielt ihn für ein Rendering-Überbleibsel.
3. **Das Wort "Cloak" — 3 Nennungen.** Zweimal Glossarbesuch. Betriebsrätin: *"In meiner Welt heißt so etwas 'verschlüsseln'."* Die Hebamme nennt zusätzlich "Drop" und "Relay": *"ich weiß bis heute nicht, was ein Relay ist, und ich sollte dafür kein Glossar brauchen."*
4. **Das Hilfe-Center als Sackgasse — 2+ Nennungen.** Beide haben dort die Suche abgebrochen.
5. **Läuft die Frist ab Erstellen oder ab erstem Öffnen? — 2 Nennungen.** Die Antwort steht auf limits.html, aber nicht an der Stelle, an der die Frage entsteht.
6. **Der Zwei-Klick-Löschknopf — geteilt.** Der Pentester nennt ihn ausdrücklich die bessere Lösung als ein Dialog. Der Open-Source-Entwickler hielt Löschen deshalb zwei Testläufe lang für kaputt: *"wer nur einmal klickt und wegschaut, denkt, er hätte gelöscht."* Beides ist wahr; das Muster ist richtig, die Rückmeldung nach dem ersten Klick reicht nicht.

Der Pentester hat außerdem den Reiter "Open a link" im ersten Durchgang komplett übersehen.

---

## 5. Wahrheitsprüfung

**Was gehalten hat (jeweils mehrfach unabhängig nachgemessen):**

- *"Nothing is uploaded — you will see no request at all."* — 7/7 bestätigt. Die am besten belegte Aussage des Projekts.
- *"Filenames encrypted inside the manifest."* — bestätigt. Die Betriebsrätin hat gezielt nach `Kuendigungsliste_Standort_Nord.pdf` im Speicher gesucht: kein Treffer.
- *"GCM authentication rejects any modified byte."* — bestätigt, auch bei aktivem Byte-Flip.
- *"4 MB chunks — plaintext plus a 16-byte tag."* — auf das Byte bestätigt: 5.400 → 5.416.
- *"Delete removes the record and every encrypted piece in one transaction."* — mehrfach bestätigt.
- *"An 8-byte random prefix plus a counter guarantees no IV ever repeats."* — bestätigt, mit dem seltenen Zusatz der Doktorandin, dass *"guarantees"* hier *"ausnahmsweise korrekt ist statt Marketing"*.

**Was nicht gehalten hat:**

1. **help.html: "16 articles · four topics" und "Short answers".** Es gibt null Artikel; 16 Links auf 4 Anker. Zwei vollständige Protokolle mit Beweis, beide nennen es den schwersten Textfehler der Seite. Am schlimmsten: *"Can I put a password on a drop?"* führt auf `index.html#security`, wo das Wort "password" genau einmal vorkommt — im Nebensatz *"the same primitive password managers rely on"*. Die Hebamme, die diese Frage beruflich stellen muss: *"Ich habe genau danach gesucht. Da habe ich aufgehört zu suchen."* Die Suche indiziert zusätzlich nur Titel: `delete` → *"Nothing matches"*.
2. **verify.html Prüfung 4, Aufzählung des gespeicherten Records.** Vier unabhängige Finder. Es fehlen `expires` und das Klartextfeld `bytes`. Pentester: *"ausgerechnet die Seite, die zum Nachprüfen des Records existiert, ist die ungenaueste."*
3. **limits.html: "500 MB ... the same number the app enforces".** Der Pentester hat `disabled` entfernt und 525 MB durchlaufen lassen. **Gegengeprüft und bestätigt:** `MAX_TOTAL` wird in index.html nur in Zeile 2544/2545 für den Knopfzustand benutzt, `cloakAndStore()` prüft nichts. Wichtig: zwei andere Tester haben die Grenze als "hart durchgesetzt" gelobt — sie haben nur den Knopf getestet, nicht ihn umgangen. Sicherheitsrelevant ist es nicht, aber es ist eine unwahre Aussage.
4. **limits.html: "Extend a link — Not possible".** Der Open-Source-Entwickler hat aus 1 Stunde 30 Tage gemacht und bekam *"OPENS FOR 30 MORE DAYS"* plus die Datei.
5. **limits.html: "Number of drops — Unlimited".** Der Steuerfahnder ist bei 2.088 MB Kontingent nach vier Drops in einen stillen Hänger gelaufen. **Gegengeprüft:** limits.html Zeile 1860, 1904 und 1951 behaupten das dreimal.

**Widersprüche zwischen Seiten — gesondert, weil sie schwerer wiegen:**

| Seite A | Seite B | Finder |
|---|---|---|
| limits: *"Account or sign-in — Never"* / index: *"No accounts, anywhere"* | about *"In progress: ... real accounts ... the sign-in that comes with it"* — und about widerspricht sich selbst mit *"There are no accounts"* | Betriebsrätin |
| limits: *"Number of drops — Unlimited"* | index: *"As many drops as this browser has room for"* | Steuerfahnder, Hebamme |
| limits-Tabelle: *"Extend a link — Not possible"* | limits-FAQ zwei Absätze tiefer: *"anyone who can open your browser profile can edit it"* | Open-Source-Entwickler |
| verify + about: Record-Aufzählung | index: *"ciphertext, sizes, and a timestamp"* (korrekt) | 4 Finder |
| index + verify: *"4 MB chunks"* | glossary: *"4 MiB"* (real 4.194.304) | Steuerfahnder |

Der Konten-Widerspruch wiegt für die Betriebsrätin am schwersten, und ihre Begründung ist keine Wortklauberei: *"ob ich mich eines Tages anmelden muss, entscheidet darüber, ob jemand weiß, DASS ich etwas verschickt habe. Genau das ist meine Ausgangsfrage."*

**Ein Dissens, den ihr kennen solltet:** Die Betriebsrätin nennt *"Status page — coming soon"* auf einer existierenden Statusseite einen Fehler (*"Ich habe zweimal geklickt, weil ich dachte, ich sei falsch gelandet"*). Der Pentester hält ausdrücklich dagegen: *"kein Widerspruch — status.html erklärt selbst, dass die echte Messung noch fehlt, statt einen grünen Haken zu zeigen, den niemand gemessen hat."* Inhaltlich hat der Pentester recht, der Linktext ist trotzdem irreführend. Das ist ein Beschriftungsproblem, kein Konzeptproblem.

**Und ein Fehlalarm, den ich beim Gegenprüfen gefunden habe:** Die Doktorandin meldet, der Fließtext auf der Fertigseite nenne fest "24 hours" neben dem korrekten `#done-exp`. Das stimmt nicht. In index.html Zeile 1986 steht "24 hours" ausschließlich *innerhalb* des `<span id="done-exp">`, und Zeile 2647 überschreibt ihn korrekt mit der Auswahl. Sie hat den statischen Quelltext gelesen, nicht das gerenderte DOM. Diesen Fund könnt ihr streichen — er ist der einzige der Runde, der beim Nachprüfen zerfällt.

---

## 6. Neue Fehler, die mehrere unabhängig gefunden haben

Scharf getrennt: das hier sind reproduzierbare Defekte mit Beweis, keine Geschmacksfragen.

**A. Der Schlüssel bleibt auf jedem Fehlerpfad in der Adresszeile — 2 unabhängige Finder, beide mit `location.href`-Beleg.**
Ort: index.html, Empfänger-Flow. **Gegengeprüft und bestätigt:** `showState('st-receive')` steht in Zeile 2997, `history.replaceState` erst in Zeile 3005 — alle `showError`-Zweige kehren vorher mit `return` zurück.
Warum das schwer wiegt: Die Logik ist genau verkehrt herum. Aufgeräumt wird dort, wo man die Daten ohnehin schon hat. Stehen bleibt der Schlüssel dort, wo er im Verlauf eines fremden Rechners landet. Und da heute *jeder* weitergeleitete Link auf einer Fehlerseite landet, ist der aufgeräumte Fall der einzige, der praktisch nie eintritt. Betriebsrätin: *"jeder Empfänger sammelt meinen Schlüssel im Verlauf ein."* Aufwand für den Fix: eine verschobene Zeile.

**B. `.storeline` lässt sich nicht verstecken — 3 unabhängige Finder.**
Ort: index.html Zeile 1633 (`.storeline { display: flex }`) gegen das `hidden`-Attribut im Markup Zeile 1920. **Gegengeprüft:** Es existieren genau drei `.storeline`-Regeln (1633, 1638, 1644), eine `.storeline[hidden] { display: none }` ist nicht darunter — bei `.drop-card[hidden]`, `.state[hidden]`, `.auth-section[hidden]` und `.cookie-prefs[hidden]` ist sie vorhanden.
Folge: Ein neuer Besucher ohne einen einzigen Drop sieht auf dem ersten Bildschirm einen anklickbaren "Manage"-Knopf ohne Beschriftung daneben. Belegt mit `getComputedStyle` (`display:'flex'`, 24 px hoch, `hasAttribute('hidden')===true`) und Screenshot. Der Kommentar über der Regel sagt laut Pentester wörtlich *"erscheint nur, wenn wirklich etwas liegt"* — der Code tut das Gegenteil. Aufwand: eine Zeile CSS.

**C. Die Speicherzeile wird nach "Start a new drop" nicht neu berechnet — 2 Finder.**
Ort: index.html, `#new-btn`-Handler. Er setzt `pending=[]` und `showState('st-idle')`, ruft aber `speicherZeile()` nicht auf. Der `#drops-back`-Handler macht es richtig. Zusammen mit Fund B steht danach eine leere Zeile mit blankem Knopf da, obwohl gerade ein Drop angelegt wurde. Erst `reload()` füllt sie. Aufwand: eine Zeile.

**D. HSTS `max-age=86400` — 6 unabhängige Nennungen, das meistgenannte Einzelthema der Runde.**
**Gegengeprüft:** `_headers` Zeile 5, kein `includeSubDomains`, kein `preload`.
Die Begründung des Pentesters ist die, die zählt: *"Bei einem Produkt, dessen Schlüssel in der URL reist, ist der Erstkontakt der kritische Moment: wer dort per SSL-Strip einen veränderten Client ausliefert, bekommt den Schlüssel frei Haus, und die eigene CSP hilft nicht, weil der Angreifer sie mitschreibt."* Aufwand: eine Zeile. Sechs Nennungen für eine Zeile — das ist das beste Aufwand-Wirkung-Verhältnis der gesamten Runde.

**E. help.html ist eine Attrappe — mindestens 2 vollständige Nennungen mit Beweis.**
Siehe §5. Dies ist der Fund, bei dem das Vertrauen kippt, weil er das Verkaufsargument selbst trifft. Betriebsrätin: *"Auf einer Seite, die mit Ehrlichkeit wirbt, kein Schönheitsfehler, sondern derselbe Trick, den ich von den großen Anbietern kenne: eine Fassade, die nach Substanz aussieht."*

**F. Kein Herkunftscheck im Einfügefeld — 2 Finder.**
Ein Link mit fremder Domain wird stillschweigend lokal geöffnet. Heute folgenlos, weil nur das Fragment zählt. Mit Relay ist es ein Fehler mit Folgen — ein Token für Host A, eingelöst auf Host B.

**Schwere Einzelfunde, die ich trotzdem hochziehe, weil der Beweis sauber ist:**

- **Stiller Hänger bei erschöpftem Quota + Waisen-Chunks** (Steuerfahnder, §3). 241 s ohne jede Rückmeldung, 205 MB nicht entfernbare Reste, Übersicht meldet *"nothing stored"*. Ursache im Code identifiziert.
- **500 MB wird nicht im Code durchgesetzt** (Pentester, §5).
- **`"That is not a key"` prüft die Länge nie** (Doktorandin). Ein auf 16 Byte gekürzter Schlüssel ist gültiges base64 und wird von `importKey` klaglos als AES-128 akzeptiert → der Nutzer bekommt *"The key doesn't fit"*. Genau der Fall, den die Meldung beschreibt (vom Chat-Programm abgeschnittener Link), wird von ihr nicht erkannt. Aufwand: eine Längenprüfung vor `importKey`.
- **Kaputter Satz in about.html** (Hebamme): *"The glossary and the are the honest version of an origin story."*

**Nicht in dieser Liste — das ist "gefällt mir nicht", nicht "kaputt":** das Wort "Cloak", die englische Sprache, das fehlende Passwort (fehlende Funktion), das fehlende Repository (dokumentiert und eingeräumt), die fehlenden Dateinamen in der Liste (technisch zwingend), fehlende Sammellöschung, "Zero knowledge" als Wortwahl.

---

## 7. Was die Note am stärksten heben würde

Sortiert nach Wirkung, mit Nennungen und der Frage, ob es ohne Relay geht.

| # | Maßnahme | Nennungen | Ohne Relay? | Aufwand |
|---|---|---|---|---|
| 1 | **Relay** | 10/10 als Blocker | nein, per Definition | groß |
| 2 | **Passwort auf einem Drop** (Schlüssel vom Link trennen) | 5+ | **ja** | mittel |
| 3 | Schlüssel auf allen Fehlerpfaden aus der URL | 2 | **ja** | 1 Zeile |
| 4 | HSTS auf 2 Jahre + preload | 6 | **ja** | 1 Zeile |
| 5 | Browser-Bindung visuell hochziehen | 7/7 zögerten | **ja** | klein |
| 6 | `.storeline[hidden]` + `speicherZeile()` im new-btn | 4 | **ja** | 2 Zeilen |
| 7 | help.html: echte Artikel oder Zahl streichen | 2+ | **ja** | mittel |
| 8 | Die sechs Textwidersprüche | 6 Finder | **ja** | ~1 Stunde |
| 9 | Quota-Fehler abfangen + Waisen-Chunks aufräumen | 1 | **ja** | mittel |
| 10 | Repository, AGPL, reproduzierbare Builds | 3 (2× als Blocker) | **ja** | groß |
| 11 | Übergabenachweis / Download-Zähler | 2 | nein | braucht Relay |

**Punkt 2 ist die wichtigste Erkenntnis dieser Runde und sie ist neu gegenüber Runde 1.** Drei Testerinnen sagen ausdrücklich, dass ihnen ein fertiges Relay **allein nicht reichen würde**:

> *"Selbst mit fertigem Relay könnte ich es so nicht einsetzen."* (Betriebsrätin)
> *"Ich müsste den Link über unsere Firmen-Mail schicken — und damit der IT den Schlüssel in die Hand drücken."* (Betriebsrätin)
> *"Kein Passwort, kein zweiter Faktor. Bei Gesundheitsdaten reicht mir das nicht."* (Hebamme)

Der Vergleich, den drei unabhängig ziehen, ist Firefox Send — und alle drei nennen dieselben zwei Funktionen, die Send hatte und die hier fehlen: **optionales Passwort auf dem Drop und eine begrenzte Downloadzahl.** Die Betriebsrätin: *"Ausgerechnet die beiden Funktionen, die meinen Fall lösen würden."* Proton Drive gewinnt bei ihr genau deshalb: *"der geteilte Link lässt sich mit einem eigenen Passwort schützen, das ich dem Anwalt am Telefon durchgebe."*

Ein Passwort auf dem Drop ist **rein clientseitig baubar** — Passwortableitung, Wrapping des AES-Schlüssels, Fragment enthält dann nur noch den gewrappten Schlüssel. Kein Server nötig. Es ist die einzige Maßnahme dieser Liste, die einen Blocker aus der obersten Kategorie beseitigt, ohne dass ein Relay existiert.

**Ehrliche Einschätzung zur erreichbaren Note.** Wenn ihr Punkte 2 bis 10 vollständig abarbeitet und kein Relay baut, erwarte ich **4,7 bis 5,2** und weiterhin **kein einziges "ja"**. Der Grund ist arithmetisch: alle zehn nennen "kein Versand" als Blocker, sechs davon an Position 1. Die Bandbreite 3,0–6,5 in dieser Runde erklärt sich fast vollständig daraus, wie viel Gewicht jemand nachprüfbarem Handwerk gegenüber der eigentlichen Aufgabe gibt — nicht daraus, wie viele Mängel jemand gefunden hat. Die Doktorandin sagt die Zahl selbst: *"Wenn der Relay steht und der Quelltext öffentlich ist, will ich es wiedersehen — dann rede ich über acht."*

Punkte 3 bis 6 sind zusammen unter einer Stunde Arbeit und beseitigen vier der sechs meistgenannten Ärgernisse. Die würde ich zuerst machen, schon weil sie euch beim nächsten Durchgang die Kritikpunkte vom Tisch nehmen, die von der eigentlichen Frage ablenken.

---

## 8. Die härteste Wahrheit

Neun Änderungen haben 0,40 Punkte gebracht, weil alle neun an der Hälfte gearbeitet haben, die schon funktionierte — der Satz aus Runde 1 steht in Runde 2 wortgleich wieder da, nur mit besseren Beweisen dahinter.

Die einzige Änderung, die eine neue Oberfläche eingeführt hat, die Drop-Übersicht, arbeitet gegen die eigene Zielgruppe: sie zeigt auf einem fremdkontrollierten Rechner Anzahl, Größe, Datum und Restlaufzeit an und beantwortet damit ungefragt genau die Frage, vor der die Betriebsrätin gekommen ist — *"sieht jemand, DASS ich etwas verschickt habe"* — mit ja.

Und der teuerste Fehler der Runde ist kein Codefehler, sondern help.html: ein Produkt, dessen einziges Alleinstellungsmerkmal die nachweisbare Ehrlichkeit ist, wirbt mit sechzehn Artikeln, die es nicht gibt — und die Frage, die dahinter versteckt liegt (*"Can I put a password on a drop?"*), ist ausgerechnet die, deren Antwort drei von zehn Testern zurückgeholt hätte.