)]}'
{
  "log": [
    {
      "commit": "519c1e7b769c37769d1b5d1ffd6e13566b26c86d",
      "tree": "59c8deaa1e34c3464801e9337fc2a92a15af307d",
      "parents": [
        "43e91612875de3cc6e7466eee56023ab55cefd89"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sat Jul 25 09:11:56 2026 +0200"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sat Jul 25 09:11:56 2026 +0200"
      },
      "message": "Add Schleswig-Holstein extraction case and three cleanup fixes\n\nThe GVOBl. Schl.-H. amendment act (Kommunalrecht, 2026/27) brings three\nconventions the tool had not seen:\n\n  * a running two-line page header that sits between articles and glued\n    itself onto the following article heading,\n  * superscript footnote markers on article headings (\"Artikel 1 ¹)\"),\n    which defeated the article split, and\n  * ragged-right typesetting, where the geometric margin detection finds\n    no alignment cluster and reports full lines as hard line ends, so a\n    trailing hyphen was never joined.\n\nAll three are fixed in TextBereiniger; the hyphen rule now trusts the\nextractor\u0027s trailing-space signal over the geometric class.\n\nA full acceptance test is not possible: the Schleswig-Holstein law portal\nserves document bodies only through an authenticated API, and the last\nfreely archived consolidated Gemeindeordnung (14 Nov 2022) predates the\namended § 34a. The new test therefore covers everything up to and\nincluding command recognition; the blocker is recorded in\nLandesrecht-Beispiele.adoc.\n\n219 tests green; Bund/Bayern/Sachsen/Niedersachsen figures unchanged.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I9b3ab8a756372504b51c4d410b491fded255da96\n"
    },
    {
      "commit": "43e91612875de3cc6e7466eee56023ab55cefd89",
      "tree": "867f602cd8b00a320987cde8947778deaa7efa45",
      "parents": [
        "3f81addcfbeae7aabcdd823340397f66e394f02f"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Fri Jul 24 22:29:35 2026 +0200"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Fri Jul 24 22:29:35 2026 +0200"
      },
      "message": "Add Lower Saxony NEFG acceptance case and two parser robustness fixes\n\nSecond §-structured Landesrecht case for wave six: the Lower Saxony ELER Support\nAct (NEFG, unchanged since 2022, derived from the two-column Nds. GVBl 2022 No. 33)\nplus the amending act of 28 Jan 2026 (Nds. GVBl 2026 No. 10). Five of seven\ncommands apply — both \"erhält folgende Fassung\" re-enactments (§ 1(1), § 2), the\ncitation replacement in § 1(5), the words insertion in § 6(1), and the § 13 → § 14\nrenumbering.\n\n- LandesRechtTextParser: a norm head no longer accepts a title ending in a full\n  stop, so a cross-reference sentence at line start (\"§ 7 GAPInVeKoSG findet\n  entsprechend Anwendung.\") is not misread as a norm head \"§ 7\" (which had made the\n  monotonicity check swallow the norms in between).\n- TextBereiniger: strip the Lower Saxony GVBl running footer and publisher line.\n  The footer sat between two enumerated items and otherwise attached to the\n  preceding re-enactment quote, defeating its end-of-sentence anchor.\n- Add sampledata/Niedersachsen/NEFG-alt.txt and EndToEndTest.nefgAcceptance.\n\nTwo insertion forms remain documented residues (manuell prüfen): inserting a\n§-block with a space-separated sub-number (\"§ 2 a\") and a chapter-scoped §-block\ninsertion (\"In Kapitel 4 wird nach § 12 … angefügt\").\n\n221 tests green; federal, Bavarian and Saxon pinned numbers unchanged.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nChange-Id: Ie23eee1f596ec8eecc6a73f6ce585a22e73ec6c9\n"
    },
    {
      "commit": "3f81addcfbeae7aabcdd823340397f66e394f02f",
      "tree": "cfc08069f1da4bff2c8f1b67de85e70defad2fa2",
      "parents": [
        "c2b57decf3d57d4808dd37723c562b8e001cc342"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Fri Jul 24 05:34:32 2026 +0200"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Fri Jul 24 05:34:32 2026 +0200"
      },
      "message": "Add Saxony SächsBeamtVG acceptance case (first non-Bavarian Landesrecht)\n\nComplete the first §-structured Landesrecht acceptance case for wave six: the\nSaxon Civil Servants\u0027 Pension Act (SächsBeamtVG) in its 1 Feb 2025 version plus\nthe amending act of 13 April 2026 (SächsGVBl. S. 134). All five commands are\nrecognised and applied without residue — the amount replacements in § 47 and the\nre-enactment of § 80(1) sentence 2.\n\n- LandesRechtTextParser: recognise arabic, keyword-first structural headings\n  (\"Abschnitt 1\", \"Unterabschnitt 2\", \"Teil 3\") via GLIEDERUNG_ARABISCH, in\n  addition to Bavaria\u0027s roman \"I. Abschnitt\" form. Bavaria behaviour unchanged.\n- TextBereiniger: strip the footer of revosax full-text output (REVOSAX_FUSS,\n  \"https://…revosax… Fassung vom … Seite N von M\").\n- Add the consolidated pre-amendment stem as canonical plaintext\n  (sampledata/Sachsen/SaechsBeamtVG-alt.txt, derived from the archived revosax\n  full text) and EndToEndTest.saechsBeamtVgAcceptance (5 applied, 0 manual).\n\n220 tests green; federal and Bavarian pinned numbers unchanged.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nChange-Id: I8e878bc9506f24028cf643a873de000f3d066d64\n"
    },
    {
      "commit": "ab7ac577eedaffabf087a84786bebe9a8904c365",
      "tree": "0efb32b59b2cf6470e1d09c748ce32ff1698c79a",
      "parents": [
        "65eff08b32a0f00ff0f5e4bda3fe5793f631ed64"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sun Jul 19 09:25:55 2026 +0200"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sun Jul 19 09:25:55 2026 +0200"
      },
      "message": "Add Landesrecht amendment samples from eight further Länder\n\nCollect real amendment gazettes/ordinances from Berlin, Schleswig-Holstein,\nHessen, Niedersachsen (two hefts), Baden-Württemberg, Nordrhein-Westfalen,\nSachsen and Thüringen as candidates for a further enhancement wave, plus an\n.adoc overview. Unlike Bavaria (Art./§ inversion) these Länder use § in their\nstem laws; the new test dimensions are PDF layout (Berlin two-column, Hessen\nletter-spacing) and command idioms (\"erhält folgende Fassung\", superscript\nArtikel footnote markers, amtliche Satznummern in a § context). Only the\namendment documents are included so far; the consolidated stem versions and\nRheinland-Pfalz remain open.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nChange-Id: I0e3e761763038abda144266381cf59f8d8f3bf78\n"
    },
    {
      "commit": "65eff08b32a0f00ff0f5e4bda3fe5793f631ed64",
      "tree": "1d101859b51c80bc117ec72a871933575ed8b2f3",
      "parents": [
        "f20828ffd8ea9d554566636a9c53a3abd57507c5"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sat Jul 18 12:24:32 2026 +0200"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sun Jul 19 09:00:01 2026 +0200"
      },
      "message": "Support Bavarian state law (BayJG) with Art./§ inversion and superscripts\n\nExtend ÄndGgner from federal-only to Bavarian state law. Bavarian base\nlaws are structured in Artikel while their amending acts are structured\nin Paragraphen (inverted from the Bund); official sentence numbers and\nfootnote markers are carried as Unicode superscripts (¹²³, ⁶)).\n\n- Generalise Stelle.Paragraph to carry a sigil (\"§\" or \"Art.\") and route\n  it through recogniser, applier and resolver (bit-identical Bund output).\n- Superscript pipeline: geometric detection in FontgroessenFilter\n  (SuperskriptModus BEHALTEN), Superskript util, exact sentence splitting\n  in SatzTeiler, label-based sentence resolution.\n- BayRechtLoader/BayRechtTextParser for gesetze-bayern.de PDF/plaintext.\n- §-structured amending acts, GVBl/Landtag column titles, non-breaking\n  spaces, the GVBl continuation quote; Bavarian command forms (footnote\n  aufhebung, Satznummerierung streichung, Wortlaut forms, Halbsatz,\n  gapping chains).\n\nAcceptance (EndToEndTest.bayJgGvblAcceptance): the pre-2026 BayJG\nfassung (BayJG-alt.txt, reconstructed from Wayback single-article\nsnapshots) with GVBl 6/2026 §§ 1-2 applied — 154 commands, 0 unknown,\n149 applied automatically, 5 pinned residuals (follow-up edits inside\ntwo multi-step renumbering sequences in Art. 29a and Art. 56).\n\nApplication-side fixes surfaced by the acceptance run (all Bund-safe):\nsentence-start superscript before §; sentence boundaries \u003d {0} ∪ {each\nnumber ≥ 2}; gapping scope inheritance for bare word operations;\nfootnote definition lines hidden from word operations; absatz aufhebung\nmarks \"(weggefallen)\" keeping its number, and absatz renumbering\noverwrites an empty placeholder (weggefallen/gegenstandslos) target.\n\n211 tests green (mvnw verify); federal reference numbers unchanged.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nChange-Id: Iebae4c17ca90755c5fd36251362042f3d5796fd0\n"
    },
    {
      "commit": "91a57498aa4acf266d0ab255aa06c18527846eec",
      "tree": "5c53b08a64f87f924f9d59c6feafde500fbb9427",
      "parents": [
        "8ae49729ee18a102d503324f2be49c35694b244a"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Jul 13 21:33:09 2026 +0200"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Jul 13 21:33:09 2026 +0200"
      },
      "message": "Add AGG, BayJG, GEG, ProdHaftG, and UWG sample data.\n\nFive new datasets with provenance in SOURCES files:\n\n* UWG: 3. UWGAendG (BGBl. 2026 I Nr. 43) in the new digital BGBl\n  format, plus drafts.\n* GEG: the 2023 \"Heizungsgesetz\" (BGBl. 2023 I Nr. 280, new format)\n  and the pending GModG 2026 drafts.\n* AGG: 2. AGGAendG drafts (RefE/RegE/BT-Drs 21/6178) -- the base XML\n  predates the bill, so this dataset produces real diffs -- and the\n  official BMJV synopsis as ground truth.\n* ProdHaftG: product-liability modernization drafts (Artikel 1 is a\n  replacement act, Artikel 2 amends the old law), with official\n  synopsis.\n* BayJG: Bavarian hunting-law amendment (GVBl. 2026 S. 113) -- state\n  law is not yet supported by the tool; kept for future work.\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I8c33b6a19178f73cece9c9da99c713009016e578\n"
    },
    {
      "commit": "99962fb4aff2a11074b7179b71ed5a5f0cdbc8e4",
      "tree": "58caa90e2a27e50e9e6b6ce13488278860903b03",
      "parents": [
        "58e19982f25ae6433d7837454bb54b8edc37589c"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Jul 13 21:32:24 2026 +0200"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Jul 13 21:32:24 2026 +0200"
      },
      "message": "Add IfSG sample data.\n\nThe Infektionsschutzgesetz as gii-norm XML, EPUB, and PDF (consolidated\nas of 2020-11-20, i.e. already including the Art. 1 changes below), the\nDrittes Bevoelkerungsschutzgesetz (BGBl. I 2020 S. 2397) as published,\nand the Bundestag/Bundesrat drafting documents, with provenance URLs in\nSOURCES.  Used by the end-to-end smoke test.\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I1221734ea3e3dab705151421774151438be1b337\n"
    },
    {
      "commit": "1b9bfb1bfed11593e08cde8bb072dbfb5980b740",
      "tree": "984c268931d2d5567551a4cb1a50f9c735a2a3f1",
      "parents": [
        "545aeb6e25386121b414e6aa0cae0a96758cf3c8"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Jul 13 07:08:31 2026 +0200"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Jul 13 07:08:31 2026 +0200"
      },
      "message": "Modernize build: Java 21, Tika 3, PDFBox 3, JUnit 5.\n\nBump all dependencies and plugins to current versions.  Replace the\ntika-parsers bundle with a direct PDFBox dependency (we need\nPDFTextStripper control), add java-diff-utils for the synopsis diff,\nand add JUnit 5 with AssertJ for testing.  Drop unused dependencies\n(tess4j, Lanterna, term4j, sqlite-jdbc, imageio codecs, annotation\nlibraries) in favour of jspecify.  Regenerate the Maven wrapper with\nthe official plugin (Takari is dead) and remove the vestigial Ant\nwrapper and Tika configuration.\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I0e1813b3967027cbb0bb978591d345ce138fa0a0\n"
    },
    {
      "commit": "545aeb6e25386121b414e6aa0cae0a96758cf3c8",
      "tree": "6cb998430e9c461c283ff7d692d0b14aad2a541d",
      "parents": [
        "1d92ac8fbb6c5c3a3be7bf477fef9251dcd3dfe2"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sun Dec 06 15:16:22 2020 +0100"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sun Dec 06 19:24:02 2020 +0100"
      },
      "message": "Configure Tika correctly.\n\nWith the new configuration, Tika can now extract text from PDFs and\nXML documents.\n\nAlso configures logging for the application.\n\nChange-Id: I7a89c2b232ed4e220665dd335a5f5a0cc3ef2994\n"
    }
  ]
}
