)]}'
{
  "commit": "06da70ec389f7e241493ffad22a06f76f7507ea3",
  "tree": "669f1ede99c5db0b106234b1af5e0c0ff8ba035e",
  "parents": [
    "856c0970532c9ce61b2d535efe8a7db62b63896e"
  ],
  "author": {
    "name": "Matthias Andreas Benkard",
    "email": "code@mail.matthias.benkard.de",
    "time": "Sun Aug 16 07:34:12 2026 +0200"
  },
  "committer": {
    "name": "Matthias Andreas Benkard",
    "email": "code@mail.matthias.benkard.de",
    "time": "Sun Aug 16 07:34:12 2026 +0200"
  },
  "message": "Die Startseite führt die Neuankömmlinge ein\n\nSeit der Inbetriebnahme setzte die Startseite voraus, was gerade nicht hat, wer\nsie zum ersten Mal aufruft: geeignete Dateien. Über dem Formular stand die\nTätigkeitsbeschreibung, darunter zwei leere Dateifelder, und wer nie mit\ngii-Norm-XML oder einem BGBl-Regelungstext zu tun hatte, konnte das Werkzeug\nnicht einmal ausprobieren. Ein zugeklappter Block tritt hinzu, der zwei\ndurchgerechnete Fälle mit Verweisen auf die amtlichen Fundstellen anbietet.\nZugeklappt kostet er eine Zeile; das Formular bleibt, wo es war.\n\nAngeboten werden ein verkündetes Änderungsgesetz — das UWG nebst dem Dritten\nGesetz zu seiner Änderung (BGBl. 2026 I Nr. 43), neunzehn Befehle an sechs\nNormen ohne Rest — und ein Gesetzentwurf — das AGG nebst BT-Drs. 21/6178,\ndreiundzwanzig Befehle an vierzehn Normen, einer zur Prüfung markiert. Der\nzweite Fall war zunächst als ProdHaftG nebst BT-Drs. 21/4297 gedacht und ist\nverworfen: Die Modernisierung löst das Gesetz ab, statt es zu ändern, und ergibt\neinen einzigen Befehl an einer einzigen Norm. Ein Beispiel, das nichts zeigt,\nist keines.\n\nMitausgeliefert wird nichts, und die Seite ruft von sich aus nichts ab; sie\nverweist. Die Verweise öffnen ein eigenes Fenster, weil ein im selben Fenster\ngeöffnetes PDF die bereits gewählten Dateien aus dem Formular nähme. Das\nStilblatt bekommt .einfuehrung im Zuschnitt der übrigen Kästen und keine einzige\nneue Farbe, sodass Hell- und Dunkelfassung ohne Zutun stimmen.\n\nDabei stellte sich heraus, dass gesetze-im-internet.de das Norm-XML gar nicht\nals solches ausgibt: Es gibt allein …/\u003ckurz\u003e/xml.zip, der unmittelbare\nBJNR….xml-Pfad ist 404. Eine Einführung, die auf die Fundstelle verweist, wäre\nohne Weiteres eine Anleitung zum Entpacken von Hand gewesen. Der Ladepfad nimmt\ndas Archiv deshalb nun unmittelbar an (ZipAuspacker, vorgeschaltet in\nPipeline.ladeStammgesetz; DateiTyp kennt die Art ZIP). Die Änderungsdokumente\nbleiben unberührt — Gesetzblätter und Drucksachen kommen nirgends als Archiv.\n\nDas Format wird von Hand gelesen, und zwar aus einem Grund, der außerhalb der\nBrowserfassung sinnlos wäre: Von den Archivklassen des JDK trägt dort allein der\nInflater, den InflaterErsatz auf jzlib zurückführt; ZipInputStream, ZipFile und\nCRC32 beruhen auf nativen Bindungen, die Web Image nicht kennt. Auch die\nPrüfsumme rechnet die Klasse deshalb selbst. Gelesen wird über das\nZentralverzeichnis am Dateiende, nicht über die örtlichen Vorspanne, deren\nGrößenangaben bei nachgestellten Beschreibern erst hinter den Daten stehen.\nGewählt wird der einzige auf .xml endende Eintrag: Den Gesetzen mit Anlagen legt\ndie Fundstelle deren Bilddateien mit ins Archiv, es ist also nicht einerlei,\nwelchen man nimmt. Die ZIP-Signatur wird vor der PDF-Signatur geprüft, weil sie\nam ersten Byte verankert ist, während jene ein Vorschaufenster durchsucht — ein\nArchiv mit der Zeichenfolge „%PDF-“ in seinen gepackten Daten wäre sonst als PDF\nangesprochen worden.\n\nDie Quellenzeile der Synopse nennt weiterhin die angegebene Datei (uwg.zip),\nnicht den Eintrag; sie soll den Weg zur Fundstelle zurück beschreiben. Den\nEintragsnamen trägt die ausgepackte Quelle gleichwohl, damit Protokoll und\nLadefehler das Gesetz benennen und nicht seine Verpackung.\n\nGeprüft ist beides gegen die Fundstelle selbst, nicht nur gegen den\nBeispielkorpus: 312 Prüfungen laufen durch, darunter acht neue zum Auspacken.\nDas unmittelbar bezogene uwg.zip ergibt auf der Befehlszeile mit dem\nBGBl-Regelungstext dieselbe Ausfertigung wie die entpackte Fassung — die beiden\nunterscheiden sich allein in der Quellenzeile —, und dieselben 19/0/6 ergeben\nsich im neu gebauten Wasm-Modul im Browser, ohne eine Beanstandung in der\nKonsole. Der Block hält bei 320 Pixeln Breite ohne Überlauf.\n\nUnberührt bleiben pom.xml, deploy/webpaket.sh und die nginx-Vorlage: Da nichts\nmitausgeliefert wird, braucht es weder einen zweiten Ressourcen-Block noch neue\nMIME-Typen — deren types-Block ersetzt die Zuordnung vollständig und wäre sonst\ndie Falle gewesen.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I5f6566ca89aa5198452b0b29ac5b38da9eb26137\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ad304baa7f30b85e87fc2191d5525925562156e7",
      "old_mode": 33188,
      "old_path": "FASSUNGEN.txt",
      "new_id": "24baaf6ffde509330a8bdd614580800fbaa3c8bc",
      "new_mode": 33188,
      "new_path": "FASSUNGEN.txt"
    },
    {
      "type": "modify",
      "old_id": "3a13fd94cbaa247ca19595f3192400c2249e7e69",
      "old_mode": 33188,
      "old_path": "README.adoc",
      "new_id": "8059ea033752970fb0daf2b5067a40b91b5e52ec",
      "new_mode": 33188,
      "new_path": "README.adoc"
    },
    {
      "type": "modify",
      "old_id": "2157fc4a1c245dadc51724fb4afed4ef39889c06",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/DateiTyp.java",
      "new_id": "6e31dc1cff98cc4bd9b872f865b3f9be895c9e1d",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/DateiTyp.java"
    },
    {
      "type": "modify",
      "old_id": "4b2b7d95db4ad1de30cd9ac4aa8ee7f7b317ad86",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/Pipeline.java",
      "new_id": "16df2756049373af3a1dc2570b61b6b6d3ac4d0f",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/Pipeline.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0baeac25b6274ac5048da7e3e99a4627933bd3ed",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/ZipAuspacker.java"
    },
    {
      "type": "modify",
      "old_id": "daa72c56fcbfac5fe4fa23f39e570dffeaf7c167",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/PatchTextExtraktor.java",
      "new_id": "876f0b5856ebf250a34d30c54e704afc47dbfc9f",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/PatchTextExtraktor.java"
    },
    {
      "type": "modify",
      "old_id": "22c1e4150282edc012ec963d5a31e4d551ef77ab",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/gesetz/land/LandesRechtLoader.java",
      "new_id": "f5e777acd0d57ea541d51a74d1d3aca5e5b2d811",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/gesetz/land/LandesRechtLoader.java"
    },
    {
      "type": "modify",
      "old_id": "4bdaa052bce6c8d2aa81f44c7ba3cacfcec67904",
      "old_mode": 33188,
      "old_path": "src/main/resources/eu/mulk/aendggner/web/index.html",
      "new_id": "56fd88b59d9e70090a53b76d23bb2ed91d6dd652",
      "new_mode": 33188,
      "new_path": "src/main/resources/eu/mulk/aendggner/web/index.html"
    },
    {
      "type": "modify",
      "old_id": "ac3b8ee26ff6febdf1b4e5667df02a08f641dc32",
      "old_mode": 33188,
      "old_path": "src/main/resources/eu/mulk/aendggner/web/style.css",
      "new_id": "c9d6db169c624b41074d18b7335000631b570e30",
      "new_mode": 33188,
      "new_path": "src/main/resources/eu/mulk/aendggner/web/style.css"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5f0530d3dd8721341bdbbb10fbfdcb030d424557",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/ZipAuspackerTest.java"
    }
  ]
}
