)]}'
{
  "commit": "6311227992ba509b5e5e3256504980bf4632742d",
  "tree": "db8c65cf47c22c761f20f2a78fd548fced6858bd",
  "parents": [
    "b7e9f0f4756bf87ef98500d5fd0ce87d2916c3c4"
  ],
  "author": {
    "name": "Matthias Andreas Benkard",
    "email": "code@mail.matthias.benkard.de",
    "time": "Fri Jul 17 05:10:53 2026 +0200"
  },
  "committer": {
    "name": "Matthias Andreas Benkard",
    "email": "code@mail.matthias.benkard.de",
    "time": "Fri Jul 17 05:10:53 2026 +0200"
  },
  "message": "Fix markerless line-break join gluing whole words without a space\n\nTextBereiniger.verbindeUmbrueche assumed any letter-ending, no-trailing-space\nline followed by a lowercase continuation was a hyphen-less mid-word split\n(PDF extraction artifact) and joined it with zero separator. That assumption\nbreaks for deliberate word-boundary breaks, e.g. the short-label/hanging-\nindent definition format in the UWG Anhang (\"...Nachhaltigkeitssiegels\" +\n\"das Anbringen...\"), producing glued words in the rendered synopsis.\n\nGate the markerless join on the candidate line reaching a locally-typical\n\"full column width\" (90th percentile in a ±20-line window), since automatic\nwraps always land near the column edge while deliberate breaks don\u0027t. The\nwindow is local rather than document-wide because some source PDFs mix\ncolumn widths within one document (narrower Regelungstext vs. wider\nBegründung), which a global statistic would otherwise penalize.\n\nAlso route the single-unit Neufassung fallback through the existing\nnormalisiereZitatText normalization, matching its sibling code paths, so\nthat internal line breaks now more often preserved by the fix above don\u0027t\nleak into the HTML output as spurious line breaks instead.\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I0a79f22f9286cd4a90eea32bad9b54cb4a082cf4\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "71ffaaf9ddce6228dfeecc2d6130d12e386ba7d6",
      "old_mode": 33188,
      "old_path": "FASSUNGEN.txt",
      "new_id": "c8e4d19fb8096b48dc32773dc0e405c924357678",
      "new_mode": 33188,
      "new_path": "FASSUNGEN.txt"
    },
    {
      "type": "modify",
      "old_id": "6fb511dc4af5c0f9d47fa969cd9b170f4b222313",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/TextBereiniger.java",
      "new_id": "d9ecf8aeeac4700cc638d85e60f487a752c42b33",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/TextBereiniger.java"
    },
    {
      "type": "modify",
      "old_id": "4140357c164ae1cf571bf081db7150896f4486b5",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/anwendung/BefehlAnwender.java",
      "new_id": "68fe2b8c3075bc4b76525d022287f5f8dbefec69",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/anwendung/BefehlAnwender.java"
    },
    {
      "type": "modify",
      "old_id": "d4b0b175500e1708235809e15d31fb9638756b0e",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/EndToEndTest.java",
      "new_id": "a395fa19a8f7e10bfff31dcf621f800c64c62dd0",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/EndToEndTest.java"
    },
    {
      "type": "modify",
      "old_id": "98dc1d3000c8a8215d72b1e9325a03f15d33fbe0",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java",
      "new_id": "4ca86cf8eac2f05519a4a0e922741eb98e78038f",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java"
    }
  ]
}
