)]}'
{
  "commit": "5f30f566873c313b554f087c0f7e132efa54d64a",
  "tree": "4f6c33a0a1e9a6b2b1ad29bffef4defd0990fef2",
  "parents": [
    "79b88e0a8cb4dfc9c33fe219045f3da7f64256c4"
  ],
  "author": {
    "name": "Matthias Andreas Benkard",
    "email": "code@mail.matthias.benkard.de",
    "time": "Tue Jul 28 06:00:16 2026 +0200"
  },
  "committer": {
    "name": "Matthias Andreas Benkard",
    "email": "code@mail.matthias.benkard.de",
    "time": "Tue Jul 28 06:00:16 2026 +0200"
  },
  "message": "Recognise word-anchored insertions; close quotes at the next item\n\nThe documented next step was the word-anchored structural insertion\n(\"Vor den Wörtern „Aus dem Bereich Verkehr:“ wird folgender Absatz 5\neingefügt\", Berlin Artikel 1 Nr. 2 b) bb)). StrukturEinfuegung now\ncarries an optional WortAnker, the recogniser has a pattern for the form\n— placed before STRUKTUR_EINFUEGUNG, which bails out of recognition\nentirely when the StellenParser cannot read \"den Wörtern «0»\" — and the\napplier positions the new unit at the anchor line instead of a structural\nboundary.\n\nTwo blockers turned up next to it, both measured on the corpus rather\nthan assumed:\n\nThe command was not cleanly recognisable at all. Its closing quotation\nmark is missing in the official text, so the quote swallowed items cc)\nand c); an anchor alone would have made the command look applicable with\na huge foreign quote as its payload. The docs called a boundary at\nenumeration markers impossible, and that holds for the unguarded form: a\nquoted amendment provision carries command language itself. Guarded by\nfour conditions together — the article\u0027s quotation marks demonstrably do\nnot balance, the next line\u0027s marker is at the same or a shallower level\nthan the one the quote opened on, that line carries command language, and\nclosing here leaves the rest of the article balanced — it fires exactly\ntwice in the whole sample corpus, both times where the missing mark\nbelongs: Berlin before cc), and GV. NRW. Artikel 2 before 12. Without the\nguards it also fires inside quoted amendment provisions in the BayJG and\nGModG documents; the balance gate rules those out.\n\nThe GV.-NRW. gazette encodes part of its umlauts decomposed (u + U+0308,\n79 places, dozens of them \"eingefügt:\"/\"angefügt:\"). Invisible in the\ntext, but a different word to every command pattern, so those commands\ncould never match. TextBereiniger now normalises to NFC first — not\nNFKC, which would flatten the official sentence numbers ¹²³ and take\nSatzTeiler and Superskript their basis. Every other sample document,\nevery gii-XML stem and every hand-kept plain-text stem is already NFC, so\nthe pinned figures stay bit-identical.\n\nBerlin Artikel 1 is thereby fully recognised (6 of 6 commands, none\nunknown). One pinned statement changed for a stated reason: the NRW\nacceptance test asserted the article-heading warning, which is now\npreempted by the item boundary inside Artikel 2 — Nr. 12 survives\ninstead of being swallowed. 241 tests green.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: Ic579bec6fecc2495a61b3dcf87c9ad71b42f34ae\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d3a8eb5828fcc9d5e3370416e89ce372be8b2064",
      "old_mode": 33188,
      "old_path": "README.adoc",
      "new_id": "dc1893dd603aca80a41d95a49d61da08f510807e",
      "new_mode": 33188,
      "new_path": "README.adoc"
    },
    {
      "type": "modify",
      "old_id": "897f02c860d0d1e1941332d77d19a5741b7afd77",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/Aenderungsbefehl.java",
      "new_id": "606383f244106060ce541e1c32d37c686d3d1616",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/Aenderungsbefehl.java"
    },
    {
      "type": "modify",
      "old_id": "80206f6ba8d9f23c187b67ed66824d916c714131",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/BefehlErkenner.java",
      "new_id": "dc5a54ee7d311c31a29b54360f5f195629174ba4",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/BefehlErkenner.java"
    },
    {
      "type": "modify",
      "old_id": "fc545543b9414d4ede80fd95f23b75bc433485ef",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/TextBereiniger.java",
      "new_id": "3945df9052724e8b7b561805cd2cd6071f238a6a",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/TextBereiniger.java"
    },
    {
      "type": "modify",
      "old_id": "dc7dac86919b9eac36c234362c0a5036246e872f",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/ZitatExtraktor.java",
      "new_id": "d4df1764ba6d00f12fbbc954e67af94d11d462ec",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/aenderung/parse/ZitatExtraktor.java"
    },
    {
      "type": "modify",
      "old_id": "b2e855d848d03e53f5431f36429a19975b39a250",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/anwendung/BefehlAnwender.java",
      "new_id": "66ea9b3c18d16afbcd56c50813c9fcc4a552a2ec",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/anwendung/BefehlAnwender.java"
    },
    {
      "type": "modify",
      "old_id": "6bd72ce8f5a9e7a1937b273032c4f766c6e9e7f1",
      "old_mode": 33188,
      "old_path": "src/main/java/eu/mulk/aendggner/gesetz/land/LandesRechtLoader.java",
      "new_id": "ecb10f8648dc24b82ad0aecdb5e9b537ec028618",
      "new_mode": 33188,
      "new_path": "src/main/java/eu/mulk/aendggner/gesetz/land/LandesRechtLoader.java"
    },
    {
      "type": "modify",
      "old_id": "dbfe8b7d789c738f7e2232feb26b61017816b9ab",
      "old_mode": 33188,
      "old_path": "src/main/resources/sampledata/Landesrecht-Beispiele.adoc",
      "new_id": "9a661f35ce67c9657f80c0bca35b25155302ba6c",
      "new_mode": 33188,
      "new_path": "src/main/resources/sampledata/Landesrecht-Beispiele.adoc"
    },
    {
      "type": "modify",
      "old_id": "b3bea0837590deef76d5d959c6d1dbf472deaa76",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/EndToEndTest.java",
      "new_id": "c4ba8948e22aa4b8596284349074d8b2230c7c6e",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/EndToEndTest.java"
    },
    {
      "type": "modify",
      "old_id": "52130305e76f5ffdb2603b24beaed6bba297ffad",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java",
      "new_id": "95d15e1484fdcc43bdbbcd82c991ba92dc87a034",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java"
    },
    {
      "type": "modify",
      "old_id": "5b7e850dbfd0e08bca843e8f700e6573859eaa9a",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java",
      "new_id": "284c50638f469e7984aedd840214545bb8516d74",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java"
    },
    {
      "type": "modify",
      "old_id": "618d07890b5003a11e76659d37cacf9b10bfecf5",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/ZitatExtraktorTest.java",
      "new_id": "5b39857c555401e125eeadde94989ce4e293926c",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/aenderung/parse/ZitatExtraktorTest.java"
    },
    {
      "type": "modify",
      "old_id": "a8f3daa1a49ac30109bcfcca4ef42b2080c7ee58",
      "old_mode": 33188,
      "old_path": "src/test/java/eu/mulk/aendggner/anwendung/BefehlAnwenderTest.java",
      "new_id": "2706ac8c7eac1eeeba7635a07bffba50b3aac42c",
      "new_mode": 33188,
      "new_path": "src/test/java/eu/mulk/aendggner/anwendung/BefehlAnwenderTest.java"
    }
  ]
}
