)]}'
{
  "log": [
    {
      "commit": "2b1841e17533543d1cb15220ca86a2a37c853daf",
      "tree": "01b940cb06c5abc36704d2d4853343ee7b38ce02",
      "parents": [
        "5700bbcb89186e432c5c7dd232b61c052de8e784"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sat Aug 15 10:51:11 2026 +0200"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sat Aug 15 10:51:11 2026 +0200"
      },
      "message": "Die Web-App rechnet im Browser statt auf dem Server\n\nBisher lief die Weboberfläche auf einem JDK-HttpServer: Uploads landeten als\ntemporäre Dateien auf dem Server, die Synopse entstand dort. Das kostete\nBetrieb (systemd, Reverse Proxy, Rate-Limiting, Timeouts) und verlangte ein\nDatenschutzversprechen, das nur zusicherbar, nicht nachprüfbar war — gerade\nEntwurfstexte verließen den Rechner der Nutzer:innen.\n\nNeu übersetzt `./mvnw -Pwasm package` dieselbe Pipeline mit GraalVM Web Image\n(`native-image --tool:svm-wasm`) nach WebAssembly, PDFBox eingeschlossen.\nAusgeliefert werden nur noch statische Dateien; gerechnet wird im Browser.\nDie erzeugte Synopse ist byteweise identisch mit der der Befehlszeile\n(SHA-256 verglichen für IfSG 48/27/21 und BayJG 151/3/54).\n\nDie Befehlszeile bleibt unberührt: `./mvnw package` erzeugt unverändert das\nJAR, alle Optionen und Meldungstexte sind gleich, das Wasm-Profil ist rein\nadditiv und verlangt Oracle GraalVM 25.1+ (die CE hat kein Web Image).\n\nPortabilitätsschnitt (nützt beiden Fassungen):\n\n* `Quelle` (Name + Bytes) ersetzt `Path` in der Pipeline; nur die\n  Befehlszeile kennt noch ein Dateisystem. Der Name trägt genau den\n  bisherigen `getFileName()`-Text, damit Warnungen und Quellenzeile\n  wortgleich bleiben.\n\n* `DateiTyp` erkennt PDF/XML/Klartext an den Signaturbytes. Tika entfällt —\n  eine schwergewichtige Abhängigkeit samt ServiceLoader- und\n  XML-Konfiguration weniger, was der Wasm-Übersetzung unmittelbar zugutekommt.\n\nVier Eigenheiten von Web Image, die der Quelltext jeweils an Ort und Stelle\nvermerkt:\n\n* `java.util.zip.Inflater` ist nicht angebunden (GR-65205), ohne Inflate ist\n  kein PDF lesbar. `InflaterErsatz` substituiert ihn durch jzlib.\n\n* Typisierte JS-Felder lassen sich nicht nach `byte[]` umsetzen\n  („byteArrayHub is not defined“); der Dateiinhalt wandert als Base64.\n\n* JULs Standardformatter ruft `StackWalker`, den es dort nicht gibt.\n\n* Im Worker fehlt `document.currentScript`, worauf die Laufzeit das\n  Wasm-Modul neben `worker.js` sucht; die VM wird deshalb mit ausdrücklichem\n  Pfad ein zweites Mal gestartet.\n\nDie Reachability-Metadaten stammen aus einem Lauf des Tracing-Agents über die\nPipeline; die PDFBox- und FontBox-Ressourcen sind als Globs ergänzt, sonst\nscheitern PDFs an „Could not find referenced cmap stream Identity-H“.\n\nEntfallen: WebMain, UploadHandler, StaticHandler, Multipart und die\nsystemd-Unit. Die nginx-Vorlage liefert jetzt statische Dateien aus, und die\nDatenschutzseite sagt, was nun stimmt: Die Dateien verlassen den Rechner\nnicht.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I38faf2ac0f764d601f080d4276babe4747773683\n"
    }
  ]
}
