)]}'
{
  "commit": "6f317a90d71d61df065c7a02edf602c857cec26a",
  "tree": "4b4742756cd78b51c23fb015158b1e5d0fb5e7d4",
  "parents": [
    "d6a163cbe4dbebef25202bbf71fd29b190215e60"
  ],
  "author": {
    "name": "Marc Kupietz",
    "email": "kupietz@ids-mannheim.de",
    "time": "Thu Jul 30 15:09:54 2026 +0900"
  },
  "committer": {
    "name": "Marc Kupietz",
    "email": "kupietz@ids-mannheim.de",
    "time": "Thu Jul 30 15:09:54 2026 +0900"
  },
  "message": "Fix collocator lookups for merged models and guard word ranks\n\nw2v.merge was unusable: the server died at startup with \"Undefined subroutine\n\u0026main::mergeVectors\", because mergeVectors was not exported.\n\nWith that fixed, count based collocators and precomputed profiles were looked\nup with unshifted ranks. The collocator db and the profiles belong to the\nprimary model, which mergeVectors puts at [merged_end, words), so its ranks\nhave to be shifted back. The adjustment existed but was dead code, as it read\n$IDS::DeReKoVecs::Read::mergedEnd while the value was assigned to\n$main::mergedEnd. Instead of wiring a second copy of the value, the merge\noffset is now read from the C layer, which is the only place that knows it.\n\nOut of range ranks reach libcollocatordb straight from the request and crash\nthe process there, so a single GET /getClassicCollocators?w\u003d\u003cbeyond vocabulary\u003e\nwas enough to kill a worker. Ranks are validated before use now, both for the\ncollocator db and for the model matrix in getVecs, and out of range ids yield\nan empty result.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I26ef508e3682cbe00df27d4de5588d1f1493c701\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "33d14e0cd12999b6f641ee78d09a6a9d842d2ba5",
      "old_mode": 33188,
      "old_path": "Changelog.md",
      "new_id": "9602eaf85e413085d09b317a88677433dedb3216",
      "new_mode": 33188,
      "new_path": "Changelog.md"
    },
    {
      "type": "modify",
      "old_id": "0da0cf4681c0733d48abfcfe1e50415b89a218e2",
      "old_mode": 33188,
      "old_path": "lib/IDS/DeReKoVecs/Read.pm",
      "new_id": "f75ca905d1985dbe53f059a3569124a82309c977",
      "new_mode": 33188,
      "new_path": "lib/IDS/DeReKoVecs/Read.pm"
    },
    {
      "type": "modify",
      "old_id": "9d073a4cddd1df92a152b5d41b5549038a19c3ca",
      "old_mode": 33188,
      "old_path": "lib/IDS/DeReKoVecs/derekovecs-server.c",
      "new_id": "56e037c8745d4bf74cbbbb36bc8d52d4d347399e",
      "new_mode": 33188,
      "new_path": "lib/IDS/DeReKoVecs/derekovecs-server.c"
    }
  ]
}
