)]}'
{
  "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",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9ea3b7e46ed1935fa2084b93ab256b17044307db",
      "old_mode": 33188,
      "old_path": "FASSUNGEN.txt",
      "new_id": "a1361f45dcfc9fc9fedc49887b30d9268a1dc633",
      "new_mode": 33188,
      "new_path": "FASSUNGEN.txt"
    },
    {
      "type": "modify",
      "old_id": "1ba43438b924bc86b684064a7448037d6555fa57",
      "old_mode": 33188,
      "old_path": "README.adoc",
      "new_id": "d7853713e35b9ae7ca7b90a0a2d7ac5dd52950c3",
      "new_mode": 33188,
      "new_path": "README.adoc"
    },
    {
      "type": "modify",
      "old_id": "f7e6bf7db2f76469f730de48c0a7f47f047fdadf",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/AendGgner.java",
      "new_id": "e647b75f6b63a8f3cbde75b2f19af349f6afb9ac",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/AendGgner.java"
    },
    {
      "type": "modify",
      "old_id": "d35fc5bd4c7e719cae2423f19aaf458da129940a",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/Aenderungsbefehl.java",
      "new_id": "897f02c860d0d1e1941332d77d19a5741b7afd77",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/Aenderungsbefehl.java"
    },
    {
      "type": "modify",
      "old_id": "ababf639f805b4274096be32f42301f6c8be3382",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/Stelle.java",
      "new_id": "1c63a5fac9adbafdeb0e3e5a0902b03c68077e95",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/Stelle.java"
    },
    {
      "type": "modify",
      "old_id": "1b7979475df1a6136ff6cba00349c98597277fa5",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/AenderungsgesetzParser.java",
      "new_id": "976cd5e6185a29e8ac48da683371887ba02a0a16",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/AenderungsgesetzParser.java"
    },
    {
      "type": "modify",
      "old_id": "9cb4701b41a185e6d552fa7da51e4c68ca7d53d6",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/BefehlErkenner.java",
      "new_id": "edbe742d79bfbf6fdd3b7afbe43324b2cf25dae6",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/BefehlErkenner.java"
    },
    {
      "type": "modify",
      "old_id": "964d856d15897e3d99d3a0760a87ad5a26377308",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/FontgroessenFilter.java",
      "new_id": "26589b3141c52fdc962cb0766505c3d5dfe7923c",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/FontgroessenFilter.java"
    },
    {
      "type": "modify",
      "old_id": "9112cb69939061c0716d93b9bd862c8a40e951e3",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/PatchTextExtraktor.java",
      "new_id": "c9fde3666af45c5a4bf9ebf46fd41e783b9a0543",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/PatchTextExtraktor.java"
    },
    {
      "type": "modify",
      "old_id": "78a815b4bc804e70974f04a719713be2503afac2",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/StellenParser.java",
      "new_id": "473eb1484f2fbe0ccb3a290cce7a391de50eff8a",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/StellenParser.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "36f6338308fd8677bd81d7e00fbf2c06aca7933d",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/SuperskriptModus.java"
    },
    {
      "type": "modify",
      "old_id": "8a7b6ae701289a848570cbf833f35e881eb7a09a",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/TextBereiniger.java",
      "new_id": "40162565ac54ded23377b7f38e146937f8bb2b14",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/TextBereiniger.java"
    },
    {
      "type": "modify",
      "old_id": "c24a1dc823bf9db937cf50402f9f802a5e5a9fbb",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/ZitatExtraktor.java",
      "new_id": "e116056a6586b82d42daca21625805fd7c3c1b5a",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/ZitatExtraktor.java"
    },
    {
      "type": "modify",
      "old_id": "ac4dbf238b27ee31523227c374b97b54d29f6127",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/anwendung/BefehlAnwender.java",
      "new_id": "b6bee1b737cc5d2f9ba002942a9c302232ea2e02",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/anwendung/BefehlAnwender.java"
    },
    {
      "type": "modify",
      "old_id": "4fb91b0b0619bd57065f652c0cdad2bae63925e9",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/anwendung/InhaltsuebersichtAnwender.java",
      "new_id": "e9f84b6331eb1d931a0f8ca05cdeda82d751c32a",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/anwendung/InhaltsuebersichtAnwender.java"
    },
    {
      "type": "modify",
      "old_id": "a15aafae625aa3885e6f80257cb9ab0e1341fc1b",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/anwendung/SatzTeiler.java",
      "new_id": "6df6ea5bfbda1f6086fba2c24442d5be4056c2b7",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/anwendung/SatzTeiler.java"
    },
    {
      "type": "modify",
      "old_id": "9501f24adfdb19ba8bd960d752503ac7117fddb1",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/anwendung/StellenAufloeser.java",
      "new_id": "dd8409e8481c8ed2b286f10eb4079ea80037a388",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/anwendung/StellenAufloeser.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "777fe35d5653e2887b872ace088ffb7e8af418c3",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/gesetz/Superskript.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4150af4a54064a292a589b521bca9a9fd9e22dd0",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/gesetz/bayern/BayRechtLoader.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0744086bfa736fe5c0fc59df0c86e0ab6b376d98",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/gesetz/bayern/BayRechtTextParser.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "de2ed2e358d0f77a942c5822d201a38d0fa74fa8",
      "new_mode": 33188,
      "new_path": "src/main/resources/sampledata/BayJG/BayJG-alt.txt"
    },
    {
      "type": "modify",
      "old_id": "cff1afef091bef9318ec6980fb5dc6d1b210a410",
      "old_mode": 33188,
      "old_path": "src/main/resources/sampledata/BayJG/SOURCES",
      "new_id": "964ecc4f99233d4500812cadc05e433e16fcb7d3",
      "new_mode": 33188,
      "new_path": "src/main/resources/sampledata/BayJG/SOURCES"
    },
    {
      "type": "modify",
      "old_id": "0b7820da0e836abfec55cb2c568a4ab4bd00e716",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/EndToEndTest.java",
      "new_id": "2e190903b6a8b4032b2d6accbc2bbd65d08922c9",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/EndToEndTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a8ec3aa2df2acca123f5cdab5eb41b95ef9bd6a0",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/AenderungsgesetzParserTest.java"
    },
    {
      "type": "modify",
      "old_id": "f8cfe829ec81ad0c6e5cd77348bad34cd44b1c9e",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java",
      "new_id": "8cf9eeadebd3028d1a1a735354d7d65c2658ca5e",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java"
    },
    {
      "type": "modify",
      "old_id": "9389534d6f670e34f09bbade71ace5566e962338",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/StellenParserTest.java",
      "new_id": "f15b98fbde439fe31f733651f64a44e877b18514",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/StellenParserTest.java"
    },
    {
      "type": "modify",
      "old_id": "8a7cf12b2738d0b4aebfa039795789d0e7fcb8ad",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java",
      "new_id": "755db4650d42fc26f97bb05827705be1d3febe43",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java"
    },
    {
      "type": "modify",
      "old_id": "aa658ddf62eadbe219aae4ac24c109373e59d027",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/anwendung/BefehlAnwenderTest.java",
      "new_id": "a23f444e815d9dee0cfc4fd3dee87e76ab0de933",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/anwendung/BefehlAnwenderTest.java"
    },
    {
      "type": "modify",
      "old_id": "7df8f3776c09a0159a43952fd8b27f54921ee73a",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/anwendung/SatzTeilerTest.java",
      "new_id": "a97fc032fd33bd3d30118867bcc015f8953663e7",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/anwendung/SatzTeilerTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a5fc67a210050e599366249b3a480c1435185294",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/gesetz/bayern/BayRechtTextParserTest.java"
    }
  ]
}
