)]}'
{
  "commit": "c28c01b5034eb361ce3dd9e1a054afd9427dea00",
  "tree": "b4380666259c55230a0ba105c3e4fcb2589aaea1",
  "parents": [
    "41637c307ff042e668182e4d89aaa1f0ed608655"
  ],
  "author": {
    "name": "Marc Kupietz",
    "email": "kupietz@ids-mannheim.de",
    "time": "Fri Jun 19 16:24:08 2026 +0200"
  },
  "committer": {
    "name": "Marc Kupietz",
    "email": "kupietz@ids-mannheim.de",
    "time": "Fri Jun 19 19:37:27 2026 +0200"
  },
  "message": "Pass I5 xenoData metadata blocks to Krill output (issue #54)\n\nI5 \u003cxenoData\u003e blocks carry corpus-provided metadata (e.g. the RPK\ndenomination) that previously never reached Krill, so it was neither\ndisplayed nor searchable. Mirror KorAP-XML-Krill\u0027s KorAP::XML::Meta::I5\nhandling (commit 24ad3c0): parse each \u003cmeta\u003e into a typed Krill field,\nmapping the meta type to the field type (string/keyword/text/date -\u003e\ntype:string/keywords/text/date; attachment/uri -\u003e type:attachement) and\nderiving the key as \u003cproject\u003e.\u003cname\u003e. For doc/corpus headers the name is\nlevel-prefixed (docRcpnt/corpusRcpnt) so the same meta stays distinct per\nlevel; repeated keywords accumulate, repeated scalars keep the last value.\n\nFields are collected per level and inherited corpus -\u003e doc -\u003e text, then\nattached to each text\u0027s Krill stand-off fields (Krill-only by construction).\n\nTests: parseXenoData unit coverage for the type/key mapping and edge cases\n(text/date metas, empty/unknown-type skipping, doc/corpus prefixing), plus\na full-pipeline test over a new ked_sample.zip fixture (packaged from\nKorAP-XML-Krill t/real/corpus/KED) that mirrors the Perl ked.t assertions.\n\nResolves #54\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n\nChange-Id: I2d895bbc05cfe203a6e47ad4932c9ea1eb6fd0a2\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c0e90740b1c25c9df0668083697eb5adaa8d8eae",
      "old_mode": 33188,
      "old_path": "app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt",
      "new_id": "739f8c79a6b9c806d792d09a1c89b1a10b77df57",
      "new_mode": 33188,
      "new_path": "app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt"
    },
    {
      "type": "modify",
      "old_id": "cd86b760c6301348544d1fc64ecdb1299b79dbb1",
      "old_mode": 33188,
      "old_path": "app/src/main/kotlin/de/ids_mannheim/korapxmltools/StandoffMetadata.kt",
      "new_id": "9ff23931ce71ef8b324f5ce1c5b1cb70307e7d1b",
      "new_mode": 33188,
      "new_path": "app/src/main/kotlin/de/ids_mannheim/korapxmltools/StandoffMetadata.kt"
    },
    {
      "type": "modify",
      "old_id": "89f229bd483170a4817c2d23bf93f302bc2596be",
      "old_mode": 33188,
      "old_path": "app/src/test/kotlin/de/ids_mannheim/korapxmltools/KrillJsonGeneratorTest.kt",
      "new_id": "aec8a926cd59e16e90cf4f033924773c42f6201d",
      "new_mode": 33188,
      "new_path": "app/src/test/kotlin/de/ids_mannheim/korapxmltools/KrillJsonGeneratorTest.kt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bd8f7837dc8e227f7004fcc330b662c51e1eb400",
      "new_mode": 33188,
      "new_path": "app/src/test/resources/ked_sample.zip"
    }
  ]
}
