)]}'
{
  "log": [
    {
      "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": "d1e2facd01c88dbd4758fbc2a64bf9e01abca4e7",
      "tree": "05984a493b1a583543068be368aeb191ccd01d79",
      "parents": [
        "1b9bfb1bfed11593e08cde8bb072dbfb5980b740"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Jul 13 07:09:04 2026 +0200"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Jul 13 07:09:04 2026 +0200"
      },
      "message": "Implement the synopsis pipeline for amendment acts.\n\nAdd the full vertical slice from input files to a two-column HTML\nsynopsis:\n\n* gesetz, gesetz.gii: immutable law model (Gesetz/Norm/Absatz) and an\n  offline loader for the gii-norm XML format of gesetze-im-internet.de,\n  flattening DL enumerations, tables, and pre blocks.\n* aenderung: amendment command model as a sealed interface with records\n  (Ersetzung, Neufassung, Einfuegung, Anfuegung, Aufhebung, Streichung,\n  Umnummerierung), including UnbekannterBefehl as the mandatory\n  fallback -- unrecognized commands are reported, never dropped.\n* aenderung.parse: text extraction (PDFBox in content-stream order for\n  two-column BGBl PDFs, plain text as escape hatch), BGBl header and\n  hyphenation cleanup, quote extraction with placeholder substitution\n  (quoted blocks cannot confuse the command regexes; unbalanced quotes\n  -- which occur in real BGBl documents -- become warnings), outline\n  scanning with successor-validated markers (1., a), aa), aa1)), and\n  the command recognizer with context-frame stacking.\n* anwendung: sequential command application with a per-command protocol\n  (ANGEWANDT / MANUELL_PRUEFEN plus reason), scope resolution down to\n  sentence/enumeration ranges via a German sentence splitter.\n* synopse: norm pairing, word-level diff via java-diff-utils, and a\n  self-contained HTML renderer with a Manuell-pruefen section.\n\nThe CLI gains -o/--output, --vollstaendig, --artikel, --extract-only,\nand hidden debug flags (--dump-gesetz, --dump-befehle).\n\nOn the IfSG sample (Drittes Bevoelkerungsschutzgesetz, BGBl. I 2020\nS. 2397), 63 of 75 commands in Artikel 1 and 2 parse into typed\ncommands; the remainder are ranges and compound commands that are\ndeliberately out of scope for v1.\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I93ef8ba300f1cac70916722f23c0cefc5f62da2b\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"
    },
    {
      "commit": "1d92ac8fbb6c5c3a3be7bf477fef9251dcd3dfe2",
      "tree": "95739626bbdc8727618e751cadeb30d0a18b8ec4",
      "parents": [
        "c7f1136da4b0acf11e784397e4c46278706dc84f"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Nov 23 06:31:43 2020 +0100"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Nov 23 06:36:04 2020 +0100"
      },
      "message": "Add Apache Tika, remove iText7.\n\nChange-Id: I9736779cf57050a1dfd43d18625eb464a7179a9f\n"
    },
    {
      "commit": "c7f1136da4b0acf11e784397e4c46278706dc84f",
      "tree": "5957fae9c9da5d1a558845720c4c8ebae69f6bf9",
      "parents": [
        "d9f32a8a04152f9028a436be1deabe8f908b5ca4"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sun Nov 22 15:01:07 2020 +0100"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Mon Nov 23 06:36:04 2020 +0100"
      },
      "message": "Modularize, avoid shade plugin by default.\n\nChange-Id: I704d78b7553f057f73e1387078623d8fe5d0b154\n"
    },
    {
      "commit": "d9f32a8a04152f9028a436be1deabe8f908b5ca4",
      "tree": "e4bccf342381e0f01f5f77a9af408faa08bbebfa",
      "parents": [
        "31a2c505ff035c1cdcefdef17d900acb76919695"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sun Nov 22 14:36:59 2020 +0100"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sun Nov 22 14:42:35 2020 +0100"
      },
      "message": "Define CLI arguments.\n\nChange-Id: I37d6cbb000df63013277fe4628cdb6570d68101a\n"
    },
    {
      "commit": "b291c363badec283553d8e013c5fa912a930e764",
      "tree": "bfc5a298b720c72901a650e28929c61ae4e7e1d7",
      "parents": [
        "4562aed1971ca9cd401cd649d23333a84a20658e"
      ],
      "author": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sun Nov 22 10:22:27 2020 +0100"
      },
      "committer": {
        "name": "Matthias Andreas Benkard",
        "email": "code@mail.matthias.benkard.de",
        "time": "Sun Nov 22 14:36:08 2020 +0100"
      },
      "message": "Project skeleton\n\nChange-Id: I5609adfca13ffad643a3db93e848fc01636b066a\n"
    }
  ]
}
