)]}'
{
  "commit": "ef5b7c1b03f9e83b0d6ef9a4f10d56d4e1a44c5d",
  "tree": "f3ba890b684e12eba03776fe47806facc8667312",
  "parents": [
    "ae4079aee782740315e3c8d7cb6f19dbe1f73df8"
  ],
  "author": {
    "name": "Marc Kupietz",
    "email": "kupietz@ids-mannheim.de",
    "time": "Tue Sep 01 07:24:43 2026 +0200"
  },
  "committer": {
    "name": "Marc Kupietz",
    "email": "kupietz@ids-mannheim.de",
    "time": "Tue Sep 01 07:24:43 2026 +0200"
  },
  "message": "Drop the PTXQC dependency and bump to 1.3.0.9000\n\nPTXQC was imported for exactly two small string functions, lcpCount()\nand lcsCount(), both used only by queryStringToLabel(). It brought\nrmzqc, jsonvalidate, seqinr and V8 with it, and V8 was the only\ndependency in the whole tree that required a libv8 installation, which\nmade it by far the most expensive part of installing RKorAPClient on\nLinux. The recursive dependency closure shrinks from 128 to 90 packages.\n\nBoth functions are pure R in PTXQC, so reimplementing them costs no\ncompiled code. The replacements determine the length of the common\nprefix and suffix by binary search over vectorized startsWith() and\nendsWith() calls, instead of comparing character by character (and, for\nthe suffix, reversing every string with strsplit/rev/paste first). That\nmakes them 10 to 65 times faster, depending on the number and length of\nthe strings:\n\n                                      PTXQC      here\n  10 query strings, 37 chars   prefix   183 us    16 us\n                               suffix   127 us    13 us\n  121 vcs, 42 chars            prefix   413 us    29 us\n                               suffix  1029 us    26 us\n  50 strings, 563 chars        prefix  1405 us    64 us\n                               suffix  4362 us    67 us\n\nResults are unchanged: the two functions were compared against their\nPTXQC counterparts over 3020 inputs, and queryStringToLabel() over 8044\ninput/argument combinations, without a single difference. Empty vectors,\nempty strings and the single string case (where a string is its own\nprefix and suffix) behave exactly as before. The only deviation is for\nNA input, where PTXQC\u0027s lcsCount() silently treats NA as the literal\nstring \"NA\"; queryStringToLabel() never reaches it in that case, because\nthe prefix function errors on NA in both implementations.\n\nSince V8 is gone, and keyring no longer needs sodium either, libv8-dev\nand libsodium-dev can be dropped from the Linux installation\ninstructions in the Readme.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: Icad4bc76b773b1586922dd05458b82409d112932\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "839de68e594854b69f4571f3f2adc5915130b521",
      "old_mode": 33188,
      "old_path": "DESCRIPTION",
      "new_id": "107d1567f2f9e9b0c6b5e813808a1e6ae779563f",
      "new_mode": 33188,
      "new_path": "DESCRIPTION"
    },
    {
      "type": "modify",
      "old_id": "880f99995d2fca4b26c06d8a5111c07e2b710c28",
      "old_mode": 33188,
      "old_path": "NAMESPACE",
      "new_id": "2fd3705cd5f661553954c9aff21cc0899049ffd2",
      "new_mode": 33188,
      "new_path": "NAMESPACE"
    },
    {
      "type": "modify",
      "old_id": "6d84c25f7eecced5a3897d99d2ac5d8353fc118e",
      "old_mode": 33188,
      "old_path": "NEWS.md",
      "new_id": "732f8959d8dea670b431d8d7c3da63df6c8dec60",
      "new_mode": 33188,
      "new_path": "NEWS.md"
    },
    {
      "type": "modify",
      "old_id": "ac70f47530d8a36dc50608637cd72ba1942626b5",
      "old_mode": 33188,
      "old_path": "R/misc.R",
      "new_id": "6e7340fb294a6789a3f403bd09efa54411ecf1d4",
      "new_mode": 33188,
      "new_path": "R/misc.R"
    },
    {
      "type": "modify",
      "old_id": "8a9e19d5783feedd86f55c7e46365072e8c090d2",
      "old_mode": 33188,
      "old_path": "Readme.md",
      "new_id": "34ad1007693011580ec68753f93937766de8ceca",
      "new_mode": 33188,
      "new_path": "Readme.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0314864504827279862612c0076e6ab10de8d174",
      "new_mode": 33188,
      "new_path": "tests/testthat/test-common-affixes.R"
    }
  ]
}
