)]}'
{
  "log": [
    {
      "commit": "c6e77367a80526b44304365b815eb80a698cd9a4",
      "tree": "161b166cb180a82652ce764650fb1072569a2ce6",
      "parents": [
        "afac51424c6bc4d86449e863641a36067a22cd18"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 14:07:49 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 16:02:38 2026 +0200"
      },
      "message": "Add blessCacheAs() to vouch for a file an older version wrote\n\nFiles from the 1.3.0.9000 development cycle already hold correctly\ncomputed scores - the corrections landed there, before the release was\ncut - but they say nothing about what wrote them, so the check added for\n1.4.0 recomputes them. That is right in general and wrong for exactly\nthe files whose owners know better, and a collocation analysis they would\nhave to sit through again runs for hours.\n\nblessCacheAs() records that a file holds what this version would compute.\nWhat actually produced it is left as it stands and the blessing noted\nbeside it, so cacheAsInfo() goes on saying where the numbers come from\nrather than claiming a provenance the file does not have.\n\nA file recording no parameters, as those written before 1.3.0.9000 do,\nhas nothing left to compare against a call once blessed, and is reused\nfor any call naming it. Blessing one says so.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I0c46322154441b11547da205b2aa0fb5cf98371d\n"
    },
    {
      "commit": "afac51424c6bc4d86449e863641a36067a22cd18",
      "tree": "c9732ec35c51a070771f4612f6d6a6601b10302c",
      "parents": [
        "a3a8cd90cdae30bcb9505e0adc24fd7c45022115"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 10:37:42 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 16:02:35 2026 +0200"
      },
      "message": "Add cacheAsInfo() to read back what produced a cache file\n\nA cacheAs file records the parameters of the call, the KorAP instance,\nthe index revision that instance\u0027s corpus had at the time and the version\nof RKorAPClient that wrote it - which is what makes such a file worth\nkeeping next to a document, and until now there was no documented way of\ngetting at it. cacheAsInfo() returns the record, or NULL for a file\nwritten before 1.4.0, which holds none.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: If39a8e331a008529fda06d91862e1c498534d78a\n"
    },
    {
      "commit": "a3a8cd90cdae30bcb9505e0adc24fd7c45022115",
      "tree": "7948d0d9a4fcc532cff79315920363e9975ebe3b",
      "parents": [
        "f632fe353ab3845b7bcce48ab95444e8ef474c8a"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 07:59:04 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 16:02:32 2026 +0200"
      },
      "message": "Offer cacheAs on the other query functions as well\n\nfrequencyQuery(), corpusStats(), collocationScoreQuery() and\ntextMetadata() take a cacheAs file too now, not because they are slow -\nthey are not, next to a collocation analysis running for hours - but\nbecause a file of one\u0027s own is what keeps an analysis reproducible. KorAP\ncorpora grow, so the same query returns different numbers next year, and\nthe scores computed from them may change with the package; a result kept\nnext to the script stays what it was, and the script runs without a\nserver at all.\n\nThe parameter is documented as what it is, next to the connection\u0027s\ncache, which is a transparent speed-up one can throw away.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I9bac8931e7a38a91adcbfe58ef4cb5bcdaaf3c47\n"
    },
    {
      "commit": "f632fe353ab3845b7bcce48ab95444e8ef474c8a",
      "tree": "cd56ea116cdd537cc30dc9f6f9dbada256071abc",
      "parents": [
        "c902c23dda52cf9b15e3c9bd37ed752e23af6989"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 07:58:46 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 16:02:30 2026 +0200"
      },
      "message": "Label virtual corpora by the names they were given\n\nPassing c(before \u003d ..., since \u003d ...) said what the two corpora are to be\ncalled, and only collocationAnalysis() listened. frequencyQuery() dropped\nthe names in the expand_grid() it builds its queries from and returned no\nlabel at all; corpusStats() let them become row names, which the first\nbind_rows() throws away; collocationScoreQuery() ignored them and derived\na label from the corpus definitions instead, so that the pair above came\nout as \"1990 \u0026 pubDat...\" and \"2010\".\n\nAll three now prefer the names, falling back to queryStringToLabel()\nwhere a vector is named only in part, as collocationAnalysis() has been\ndoing. A vector without names is left alone: no label column appears\nwhere there is nothing to put in it.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I72c7c8d5f14b649df853cae94a4d90c0be19d1f4\n"
    },
    {
      "commit": "c902c23dda52cf9b15e3c9bd37ed752e23af6989",
      "tree": "7873da65ecf85ce1c165a6192b7f78b18853423d",
      "parents": [
        "245813a01a48cefcaf18a10d4f9fe516d21dd73b"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 07:58:01 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 08 16:02:26 2026 +0200"
      },
      "message": "Refuse cacheAs files written before the scores were corrected\n\nA cacheAs file holds a finished analysis, association scores included,\nand 1.4.0 computes those differently. A file written by 1.3.0 would\ntherefore be handed back with numbers that would not be arrived at again,\nand the comparison of parameters added during this cycle cannot notice\nit: the parameters did not change, the formula did. The version that\nwrote a file is now recorded in it, and one from before 1.4.0 is\nrecomputed and overwritten, with a warning saying why.\n\nThe machinery moves to a file of its own on the way, since it is no\nlonger about collocation analysis alone, and verbose drops out of what a\nfile records: how loud a query is does not change what it returns.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I8af9eac21ae53fe5d583578c3689b37d140a4af4\n"
    },
    {
      "commit": "c38d8fb443384a6febac1508c3fea5b24ecb810e",
      "tree": "a8d0c8a98843e5dc112e7f297a3033d64ed2fc20",
      "parents": [
        "d4a7b306b2ea21b18e65ac211ca358d8d9f501a5"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Sep 04 17:51:58 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Sep 04 17:57:58 2026 +0200"
      },
      "message": "Scale the whole log-likelihood table with the window size\n\nca_ll\u0027s contingency table multiplied only its row total by the window\nsize, leaving cells that do not add up to one sample: the row was\ncounted in window positions while the column and the sample size were\ncounted in corpus tokens.\n\nFollowing Evert (2004), which the function cites, the sample consists of\nco-occurrence tokens rather than corpus tokens. With a window of\nwindow_size positions, every occurrence of either word takes part in\nthat many pairs, so the sample size and both marginals scale with it.\n\nThe expected co-occurrence frequency comes out as window_size * O1 * O2\n/ N either way, which is why pmi, mi2 and mi3 never depended on this and\nwhy it went unnoticed for so long. Only ll needs the rest of the table,\nand there the values differ, by 0.1% for a frequent collocate up to well\nover 100% for a frequent node in a wide window. The ll column of the\ncollocationScoreQuery example in the Readme was recomputed accordingly.\nThe light verb construction table is unaffected, its total window size\nbeing 1, where the two formulations are identical.\n\nIt also removes a pathology rather than papering over it: N -\nwindow_size * O1 could turn negative, at which point the score became\nNaN through a log of a negative number. window_size * (N - O1) cannot,\nso the warning added earlier in this development version is dropped\nagain - it treated a symptom of exactly this inconsistency.\n\nReported-by: Tim Feldmüller \u003chttps://github.com/feldmueller\u003e\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I8b912c5bd870a0c9913d019043b2447f951f1891\n"
    },
    {
      "commit": "1d400f6a1c37ae095eb9ed3613236c766f191c93",
      "tree": "4c104f08038e061e3ff876691b6ca536be6d50b2",
      "parents": [
        "b6416be4b6192a6f498acca1e4fc3b05127c7dd6"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Sep 03 14:46:16 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Sep 03 14:46:16 2026 +0200"
      },
      "message": "CA: drop collocates occurring less often than expected by default\n\ncollocationAnalysis() ranks and thresholds by logDice, which expresses\nhow salient a pair is rather than how surprising it is. A frequent word\ncan therefore appear among the top collocates although the node does not\nattract it at all: among the collocates of Grund in a 5+5 window,\n\"Berlin\" reaches a logDice of 3.84, close to \"triftiger\" at 3.96, while\nco-occurring 1.74 bits less often than expected.\n\nFiltering these out was documented as a recipe, dplyr::filter(O \u003e E),\nbut a default that quietly rewards frequent, unattracted collocates is a\ntrap for exactly those users who do not know the measure well enough to\napply the recipe. The new minObservedExpectedRatio parameter therefore\ndefaults to 1, keeping only collocates that occur at least as often as\nexpected, which corresponds to a non-negative pmi. It can be raised to\ndemand a stronger contrast, or set to 0 for the unfiltered result of\nearlier versions, e.g. in order to study repulsion.\n\nThe filter is applied wherever minOccur is, so it also governs which\ncollocates are recursed into, and it is passed on to the per virtual\ncorpus analyses. Rows without an expected frequency are kept rather than\nsilently dropped. collocationScoreQuery() is deliberately left alone:\nthere the pairs to score are given explicitly, so filtering them would\nthrow away the answer that was asked for.\n\nBeing collected from the call frame rather than from a list, the cacheAs\nparameter check picked the new parameter up by itself, so a cache file\nwritten with a different ratio is recomputed.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I98328a8766847b4c95363211a939403b1912e9b7\n"
    },
    {
      "commit": "b6416be4b6192a6f498acca1e4fc3b05127c7dd6",
      "tree": "38ea04c1560562af4a4a75ad8754dd9ecd36dcf6",
      "parents": [
        "bccdf70f626be8d0efb3b63701caf2e789fe8dbf"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Sep 03 14:37:37 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Sep 03 14:37:37 2026 +0200"
      },
      "message": "Document that logDice measures salience, not surprise\n\nA collocate that co-occurs less often than expected can still reach a\nlogDice close to that of a strongly attracted one, which is puzzling\nuntil one sees that logDice never compares against an expected\nfrequency. Since it only puts O into the numerator of the Dice\ncoefficient, the difference between the score of a pair and the score it\nwould get if it co-occurred exactly as often as expected is precisely\nthe pointwise mutual information:\n\n  logDice(O) - logDice(E) \u003d log2(O / E) \u003d pmi\n\nThe level a pair starts from thus depends on the marginal frequencies\nalone. Among the collocates of Grund in a 5+5 window, the rare\n\"triftiger\" starts at -4.60 and reaches 3.96, exceeding what is expected\nby a pmi of 8.57, while the frequent \"Berlin\" starts at 5.58 and still\nreaches 3.84 while co-occurring 1.74 bits less often than expected.\n\nThis is a property of the measure rather than a defect: logDice was\ndesigned to be corpus size independent and comparable across corpora,\nnot to express surprise. But since collocationAnalysis() ranks and\nthresholds by it, users should know to drop pairs that are not attested\nmore often than expected, with dplyr::filter(O \u003e E) or a minimum pmi or\nll. This is now explained in a section of the association score\ndocumentation, referred to from the thresholdScore parameter where the\ndefault takes effect, and summarized in the Readme.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I9059cd064e2a612d9327cc009da0b4856612e41d\n"
    },
    {
      "commit": "8bacebb64a582d71eee5005a2de377fb1027da69",
      "tree": "82d0cb70ae7ca471f2dd268d395a199c91ad80ae",
      "parents": [
        "1e9f79174b3cb0b5983ab321db0c9e34d0f781ce"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Sep 03 14:26:36 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Sep 03 14:26:36 2026 +0200"
      },
      "message": "Compute logDice as defined by Rychly, comparable to other tools\n\nlogDice was computed as 14 + log2(2 * O / (w * O1 + O2)), multiplying\nthe node frequency by the window size, while the documentation cites\nRychly (2008), who defines it as 14 + log2(2 * O / (O1 + O2)).\n\nThe window size factor does not belong here. It is correct in the\nexpected frequency E, where w * O1 counts the positions in which a\ncollocate can occur, and the other scores take the window into account\nthrough E alone. The Dice coefficient, however, relates the\nco-occurrence frequency to how often the two words occur at all, so its\ndenominator sums marginal frequencies. Adding w * O1, a count of window\npositions, to O2, a count of word tokens, mixes units, and it makes the\ncoefficient asymmetric: for Grund/triftiger it gave 0.64, for\ntriftiger/Grund 3.96, from the same counts.\n\nThe practical effect was that a frequent node made w * O1 dominate the\ndenominator - for Grund and triftiger in a 5+5 window, O2 contributed\n0.006% of it - so that rare collocates were penalised. triftiger scored\n0.64, below Berlin at 2.03, although Berlin co-occurs with Grund less\noften than chance predicts (pmi -1.74). They are now 3.96 and 3.84.\n\nScores rise by up to log2(w), so up to 3.32 for the default context of\n5 left and 5 right, which makes collocationAnalysis() somewhat more\npermissive when recursing with the default thresholdScore \u003d \"logDice\"\nand threshold \u003d 2. Results computed with a total window size of 1 are\nunaffected, the two formulas being identical there, which is why the\nlight verb construction table in the Readme stays as it is, while the\ncollocationScoreQuery example, which uses the default window, was rerun.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I190fd65d0c53517df74c26c007a6440d974f700c\n"
    },
    {
      "commit": "37f96075e1fdcab348c358be3ce2820eb5ac0a50",
      "tree": "d46205219fa10a6373ca793dbdbefbc8ccf96fc1",
      "parents": [
        "ef5b7c1b03f9e83b0d6ef9a4f10d56d4e1a44c5d"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Sep 03 07:18:11 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Sep 03 07:18:11 2026 +0200"
      },
      "message": "CA: check the parameters a cacheAs file was created with\n\nUntil now, a cacheAs file was used whenever it existed. Changing a\nparameter and forgetting to delete the file therefore silently returned\nan analysis computed with the old parameters. Inferring the parameters\nfrom the cached data frame would not help much: of the 23 parameters\nthat affect the result, only node, vc, leftContextSize and\nrightContextSize are recoverable from it, which leaves out exactly the\nones that are typically tuned between runs, such as minOccur,\ntopCollocatesLimit, searchHitsSampleLimit, exactFrequencies, stopwords\nand threshold.\n\nThe parameters are therefore recorded when the file is written, and\ncompared on the next call. They are collected from the call frame rather\nthan listed explicitly, so that parameters added later are covered\nwithout having to remember to register them. Also recorded is the API\nURL, since reusing one cache file for two KorAP instances is a mistake\nworth catching, and, for reference only, the index revision: corpus\nupdates should not invalidate an analysis that was deliberately kept.\n\nIf parameters differ, the analysis is recomputed and the file\noverwritten, with a warning naming the differing parameters. That is\npreferred over an error: it never returns results that disagree with the\nrequested parameters, and never breaks a long pipeline. Users who want\nto keep an old analysis can pass a different cacheAs file name.\n\nThe parameters are stored in an attribute, so the file stays a plain\ndata frame for anyone reading it with readRDS(), and the attribute is\nstripped when loading, so the returned value is the same whether it came\nfrom the cache or not. Cache files written by 1.3.0 carry no attribute\nand are used as they are.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: Ib21aa93fa3c2bf1cd42dd07dbfcbd2970841a412\n"
    },
    {
      "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"
    },
    {
      "commit": "6a16d7d95259a25874f6dd6f37ae709325229a16",
      "tree": "e5fcf010d0c8deb3ba9437a43e4c7ce2676a1576",
      "parents": [
        "6a0bad4e589d158c409b50238f51c4d6868bc230"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 21:36:01 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 21:36:03 2026 +0200"
      },
      "message": "Document KorAPConnection() as a function to fix CRAN Rd NOTE\n\nCRAN\u0027s r-devel-linux-x86_64-debian-gcc and -clang checks report\n\n  Rd files without \\usage:\n    \u0027KorAPConnection-class.Rd\u0027\n  \\arguments should not be documented without \\usage.\n\nbecause the user facing documentation, with one @param per constructor\nargument, was attached to the setClass() call. The object exported under\nthe name KorAPConnection was the class generator, whose formals are just\n`function(...)`, so roxygen2 could not derive a \\usage section from it\nand the documented arguments ended up in an Rd file without one. Adding\na hand written \\usage is not an option either: it contradicts the\ngenerator\u0027s `...` signature and turns the NOTE into a much worse\n\"code/documentation mismatches\" WARNING.\n\nReplace the generator with a real KorAPConnection() function that\nforwards its arguments to new(\"KorAPConnection\", ...) and attach the\ndocumentation to it. roxygen2 now derives \\usage from the actual\nformals, so the manual page states how the constructor is really called,\nand the NOTE is gone.\n\nThe constructor forwards supplied arguments only, so that the defaults\nand the missing() based KORAP_VERBOSE / rkorap.verbose overrides of the\ninitialize method keep working unchanged. Its own defaults merely mirror\nthose of the initialize method in order to document them; the new tests\nasserts that the documented defaults are the ones a connection actually\nends up with, so that the two cannot drift apart silently. The KORAP_URL\ndefault is now shared by both signatures as defaultKorAPUrl().\n\nNAMESPACE is unchanged: KorAPConnection remains both an exported\nfunction and an exported S4 class, and new(\"KorAPConnection\", ...) keeps\nworking.\n\nR CMD check --as-cran: Status OK, and no Rd file in man/ has \\arguments\nwithout \\usage any more.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I789d42c01e1be98a989f8f4d9a5b14865ca48daa\n"
    },
    {
      "commit": "7b7a73b665502e82133329d873d1d9800884a0f6",
      "tree": "100bf8e6c281f489376fd4bf2f0d489441101e56",
      "parents": [
        "bceeb05254bec96f54236e92c7da40a65a09927e"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 10:31:27 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 10:31:27 2026 +0200"
      },
      "message": "CA: warn when duplicate rows are dropped from multi-VC comparisons\n\nThe pivots in add_multi_vc_comparisons() use values_fn \u003d dplyr::first, so\nrepeated node/collocate/label rows -- as produced when the same collocate is\nfound at several context positions -- were silently reduced to their first\noccurrence. Warn instead, naming mergeDuplicateCollocates() as the way to\ncombine those rows before comparing.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\nChange-Id: I832ea9a2bc0d28256bba5a37e8b94721809f3a68\n"
    },
    {
      "commit": "ba15cffd49405e1ecf9b56ea6832a670f372b3a3",
      "tree": "c74eeaa69334bff5b8011599750ed172596d6ef4",
      "parents": [
        "424cb78ed98fa885704bba4cdddf52e7d6f7962c"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 10:19:56 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 10:19:56 2026 +0200"
      },
      "message": "CA: mark multi-VC comparison columns as experimental\n\nThe comparison column layout is still settling. Badge the section\nexperimental and say plainly that names and semantics may change without a\ndeprecation cycle, so that shipping it does not lock the current column\nnames in place.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\nChange-Id: I75c0042607cc9ae61ce9b1a904982509276e00eb\n"
    },
    {
      "commit": "424cb78ed98fa885704bba4cdddf52e7d6f7962c",
      "tree": "abaaa79316bdbd2e1a20fdfe966f02349f13902f",
      "parents": [
        "9525334f18cff3af96782cdf92c3f8dc0b84d2ad"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 10:19:29 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 10:19:29 2026 +0200"
      },
      "message": "CA: report imputation in multi-VC comparisons when verbose\n\nImputation was silent, so a result whose top max_delta rows are entirely\npresence/absence artifacts looked no different from one built on observed\nscores throughout. Pass the connection\u0027s verbosity into\nadd_multi_vc_comparisons() and report how many node/collocate combinations\nand label cells were imputed, pointing at the `imputed` column and\nqueryMissingScores.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\nChange-Id: I5159483452595f38d09f06411b64a7327814977f\n"
    },
    {
      "commit": "9525334f18cff3af96782cdf92c3f8dc0b84d2ad",
      "tree": "d4c5a45efa5e0bdabfb3d5b48d93c2e12a6ffe4c",
      "parents": [
        "d7bb5cb7154a01e7493369ccb929aa2a3f237748"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 10:18:43 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 10:18:43 2026 +0200"
      },
      "message": "CA: document how to read multi-VC comparison columns\n\nAdd a \"Interpreting multi-VC comparisons\" section spelling out the three\nproperties that are easy to misread: deltas involving imputed cells describe\npresence/absence rather than contrast, imputed values are relative to the\nresult set they were computed from and so are not comparable across calls,\nand winner/loser columns order point estimates without any notion of\nuncertainty (unlike ci()). Also note that ranks and percentile ranks are\ncomputed within each label over candidate sets of differing size.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\nChange-Id: I4744d4d9742c7a46dcdb5b4bca9138190f6b73d2\n"
    },
    {
      "commit": "d7bb5cb7154a01e7493369ccb929aa2a3f237748",
      "tree": "9736188bd65f1107c2223bccc02da677f2bbc516",
      "parents": [
        "3b091c002f69701cfa4b40434dc3a9408d155493"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 10:18:02 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 31 10:18:02 2026 +0200"
      },
      "message": "CA: flag imputed cells in multi-VC comparisons\n\nWhen a collocate is attested in one virtual corpus but not in another,\nadd_multi_vc_comparisons() imputes the missing scores from a pooled floor.\nThe resulting delta/winner/loser columns then describe presence vs. absence\nrather than a measured contrast, and nothing in the output said so.\n\nRecord the missingness pattern before imputation and expose it as\n`imputed_\u003clabel\u003e` (per label), `n_imputed` (count) and `imputed` (any), so\nthat `filter(!imputed)` keeps only collocates attested in every compared\nvirtual corpus.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\nChange-Id: I25fb0196f1b75519c126130fc19bc62d40675e17\n"
    },
    {
      "commit": "9c53e4171317c646bacdfe8d73b1ab128635700a",
      "tree": "90b09d08c51d63a81248703053fe3c313459c24b",
      "parents": [
        "9db18916673b89e148edd7090480ece1a304c0fa"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Jun 21 12:13:44 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Jun 21 12:15:17 2026 +0200"
      },
      "message": "Make collocationScoreQuery() accept a vector of collocates\n\nChange-Id: I719c7577393f352fcfebe740a13fbf0daf790d3c\n"
    },
    {
      "commit": "09b1c086fba9f2b0dc7b41caec65b7c2c3010403",
      "tree": "e2a4a13c01e092a7a24dfded5da35b09992f754e",
      "parents": [
        "325a3ab7a5889d700bf002714ae27c28c6339147"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 01 14:45:47 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 01 15:48:45 2026 +0200"
      },
      "message": "Add winner and loser URLs to multi-VC collocation comparisons\n\nChange-Id: Ia3bea5f400713c6b513e1cc1033c9c5c869d957f\n"
    },
    {
      "commit": "db2fabd236f9a6cd9f8e5c835939e4fb9dc1275f",
      "tree": "00851274b27bbd69a55e33dcbf456b76940053b2",
      "parents": [
        "9ab905857faf08727edad6940ce27fca663f46ad"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Apr 27 15:01:37 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 01 13:34:36 2026 +0200"
      },
      "message": "feat(collocationAnalysis): add cacheAs parameter for result caching\n\nAdd a `cacheAs` parameter that accepts a file path (with automatic\n`.rds` extension if omitted). If the file exists, the cached result\nis returned immediately without contacting the server. Otherwise the\nanalysis runs normally and the result is saved to the file.\n\nCo-authored-by: Copilot \u003ccopilot@github.com\u003e\nChange-Id: I60f73a5a824e637d572a7b21b6ea80868a31b4d4\n"
    },
    {
      "commit": "2b0b0a18a6539813e9ff807c31c72171539fe0bf",
      "tree": "01f09118f6165ad7579edb9f88a01c391d93ad97",
      "parents": [
        "0a29263ffc80e12affaa0de9ef87b5af37d66d0b"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 14:49:14 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 15:02:21 2025 +0200"
      },
      "message": "CA: fix score threshold in recursive CA\n\nChange-Id: I439a29559fab741bbb80c23591d1c64e99d1b0b6\n"
    },
    {
      "commit": "0a29263ffc80e12affaa0de9ef87b5af37d66d0b",
      "tree": "7aafb8e96897645d9789ceafb65f1a46f8a7a13f",
      "parents": [
        "c79155bca7cd0732c0bcb2557c288626f0ca4539"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 14:04:36 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 15:02:21 2025 +0200"
      },
      "message": "CA: Inject focus into to result webUIRequestUrls\n\nif appropriate to improve the immediate visibility of the actual\ncollocations.\n\nChange-Id: I728e61701bf4fc620b40077da54a11506e6e941c\n"
    },
    {
      "commit": "c79155bca7cd0732c0bcb2557c288626f0ca4539",
      "tree": "3383d26d0a0b07b543a64076862a697f76abb84c",
      "parents": [
        "de679ea56c5092bd984d091afb62c2c630f473b5"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 13:42:55 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 15:02:21 2025 +0200"
      },
      "message": "Ignore first letter case in stopwords\n\nChange-Id: Ibe0301e89c2602bd59b4a6d91de3437e413e9c3f\n"
    },
    {
      "commit": "de679ea56c5092bd984d091afb62c2c630f473b5",
      "tree": "b50df090b7365662e2e246851a845835d6c190f8",
      "parents": [
        "4cbb547fd9e924a2c566f166924590189e75f7ed"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 13:14:51 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 15:02:21 2025 +0200"
      },
      "message": "CA: add queryMissingScores parameter\n\nIf TRUE, attempt to retrieve corpus-based association scores for\nvc/collocate combinations that would otherwise be imputed, by\nre-querying the KorAP backend without applying the collocate frequency\nthreshold.\n\nChange-Id: I7d2707e16d6efab3515e4cebef4985e8b780a116\n"
    },
    {
      "commit": "4cbb547fd9e924a2c566f166924590189e75f7ed",
      "tree": "e563439ab3c6b979e1e5b571bc30e45bedd0319a",
      "parents": [
        "91f35179c7604d541f3a9907eeb553b9f37043b5"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 12:15:25 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 15:02:21 2025 +0200"
      },
      "message": "CA: add some more info on how missing values are imputed\n\nChange-Id: I0268e5ad26d91300e425588c9f07eb32d45171d1\n"
    },
    {
      "commit": "77852b2af68bdb578421aea4efb97ef2fa51320d",
      "tree": "63a2852821497543071202e6e4a65431b0809934",
      "parents": [
        "130a2a29eb3b593878dc2ac410e8a2b716d64e01"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 11:35:34 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 15:02:21 2025 +0200"
      },
      "message": "Remove redundant thresholdScore parameter from add_multi_vc_comparisons function\n\nChange-Id: I3a0077497f52d94e0b63d90bca0812c7e3d0c9d6\n"
    },
    {
      "commit": "130a2a29eb3b593878dc2ac410e8a2b716d64e01",
      "tree": "3a50e5d226336ac30a7011ceec44a0e74e543919",
      "parents": [
        "9894a37ab8a660bca79e94c5480da5428e357e4f"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Oct 18 16:09:23 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 15:02:21 2025 +0200"
      },
      "message": "CA: add percentile ranks and documentation\n\nChange-Id: I3a0c6aab970db5f4685b03164b20e0489e03799f\n"
    },
    {
      "commit": "9894a37ab8a660bca79e94c5480da5428e357e4f",
      "tree": "6ce7350d737c086589cbf2c37d97645896180cec",
      "parents": [
        "28a29845b877fb28ee76196b67f585fd89344877"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Oct 18 14:51:29 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Oct 19 15:01:19 2025 +0200"
      },
      "message": "CA: replace NA dampening factor with missingScoreQuantile\n\nBetter use distributional priors instead of raw minima.\n\nChange-Id: I85d77a63c1bc06c8f6398ddac75deec52f1ca96a\n"
    },
    {
      "commit": "28a29845b877fb28ee76196b67f585fd89344877",
      "tree": "3e0b032275070a5fe2cfccc40a6ee04da49fa0f2",
      "parents": [
        "b2862d4cd478b6ec38f89cb38472dd4b416b3224"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Oct 18 12:25:09 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Oct 18 14:07:27 2025 +0200"
      },
      "message": "CA: add measure based ranks\n\nChange-Id: I84dacfe9f61e9b65268b241bc8adf82c4cc4adc3\n"
    },
    {
      "commit": "b2862d4cd478b6ec38f89cb38472dd4b416b3224",
      "tree": "b89753066c8baaa626421fc1097a19a9e60374b9",
      "parents": [
        "5e35d7a5e7713a91fe8672cf9d30402298a20a72"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Oct 18 10:17:49 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Oct 18 10:17:49 2025 +0200"
      },
      "message": "CA: introduce max_delta_\u003cscore\u003e\n\nChange-Id: I4c3ccf374017c46051bec11cf2a836df511ea586\n"
    },
    {
      "commit": "5e35d7a5e7713a91fe8672cf9d30402298a20a72",
      "tree": "c7a905d394c324cc5f7a61c4206e6e0b5ac6e319",
      "parents": [
        "e34a8be915170d1cc1bc61b63369d3e562ab3694"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Oct 17 21:21:22 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Oct 18 09:39:38 2025 +0200"
      },
      "message": "CA: add winner columns\n\nChange-Id: Ia6ec4821d08352f2044e8a7101880d75419d995d\n"
    },
    {
      "commit": "e34a8be915170d1cc1bc61b63369d3e562ab3694",
      "tree": "f17d8a4185aba582c01b0f0b58c9e857707b3e4e",
      "parents": [
        "e31322eb3446a24a30fb091b92ffe8ffd0c06d09"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Oct 17 20:13:42 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Oct 17 20:51:30 2025 +0200"
      },
      "message": "CA: support named vc list and vcLabel parameter to specify labels\n\nChange-Id: I983e589e9231f678141e8798effcfcc652ca63f5\n"
    },
    {
      "commit": "e31322eb3446a24a30fb091b92ffe8ffd0c06d09",
      "tree": "6f4b68ece27f7aebdeeb937deddf917ffc6acd8e",
      "parents": [
        "c4540a2d80f127afc94ec61c3a336fa7f79cb35e"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Oct 17 18:55:36 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Oct 17 18:55:36 2025 +0200"
      },
      "message": "Fix label issue in multi-vc CA\n\nChange-Id: I9df9c648851cd65812aec509a4ed9abe5c1691ba\n"
    },
    {
      "commit": "c4540a2d80f127afc94ec61c3a336fa7f79cb35e",
      "tree": "11308627deb705b1b68a098f4527dabbe73c93bb",
      "parents": [
        "a25fbd999afde4045580182feeca23ad719c1378"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Oct 14 17:39:53 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Oct 14 17:39:53 2025 +0200"
      },
      "message": "Add delta columns for CA with multiple VCs\n\nChange-Id: Ie7d7bbfec226277f07e0f089e8ed6e847ca048f2\n"
    },
    {
      "commit": "a25fbd999afde4045580182feeca23ad719c1378",
      "tree": "b8d933890c957563b387996c8368f71530d985aa",
      "parents": [
        "4a2fee0fc96d8913cb02026b37cc671f526a2f6d"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Oct 14 17:38:09 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Oct 14 17:38:09 2025 +0200"
      },
      "message": "Get rid of empty sequence warning in CA\n\nChange-Id: I39d239f1a49871e975b9f60db434c68703cd84fd\n"
    },
    {
      "commit": "4a2fee0fc96d8913cb02026b37cc671f526a2f6d",
      "tree": "f39f1275c6dd331632569ce6b6310d9bfeb83cd9",
      "parents": [
        "d9aa0637236840fc6220b5a47c2a643172ba435c"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Oct 13 13:27:09 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Oct 13 13:27:09 2025 +0200"
      },
      "message": "Add labels in collocationAnalysis when called with vectors\n\nChange-Id: I78f4e6a1eeb59302416d38d160b29267666d50b1\n"
    },
    {
      "commit": "41420074bc26a3effcd7f574377df774274b8732",
      "tree": "344cbd7e9c19d311a1e3db00b45cd6e0d981f21c",
      "parents": [
        "bdedd0227361999a3c456de06a23988cf32c9744"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Oct 09 15:13:40 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Oct 09 15:16:52 2025 +0200"
      },
      "message": "Revert \"warn on rewrites\"\n\nThis reverts commit 336c85d5c1d3986e1846c2b7e5dee6a4c40192e9.\n\nChange-Id: I1948894db742a6dfbb81a2c6cc82dd012330081f\n"
    },
    {
      "commit": "bdedd0227361999a3c456de06a23988cf32c9744",
      "tree": "5e4038d30e6bc6e88bcbf0de9de4664d0f24bcf2",
      "parents": [
        "cd4521884fd23558757338fcbbf6e67702f9a780"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Oct 09 14:14:15 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Oct 09 14:53:00 2025 +0200"
      },
      "message": "Switch all annotation parsing to xml2\n\nChange-Id: I047b6ce1debb88ff20912c60743221fe33f70b7d\n"
    },
    {
      "commit": "cd4521884fd23558757338fcbbf6e67702f9a780",
      "tree": "db32df9430c4d52b629dbe9368782d8174f8a9b0",
      "parents": [
        "336c85d5c1d3986e1846c2b7e5dee6a4c40192e9"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Oct 09 13:28:41 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Oct 09 14:53:00 2025 +0200"
      },
      "message": "Fix fetchAnnotations getting all morph values\n\nNow using xml2 package to properly parse the query result\n\nresolves #30\n\nChange-Id: I827cae94791f14ce0955352fd64fd7e5683a92e6\n"
    },
    {
      "commit": "336c85d5c1d3986e1846c2b7e5dee6a4c40192e9",
      "tree": "06fbc56972df571c21f37751257dec3882783c54",
      "parents": [
        "a02f1935f26b9440a748a41feecac1c676e98c37"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Jul 24 13:52:03 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Oct 09 14:42:38 2025 +0200"
      },
      "message": "warn on rewrites\n\nChange-Id: Ib7f86993eb3febaaaeeb25b0672e4f3ab91cba1c\n"
    },
    {
      "commit": "a02f1935f26b9440a748a41feecac1c676e98c37",
      "tree": "4495bb52d8a941b138648a68e0ad9672b17023dc",
      "parents": [
        "d617979cdcfbf445db94a8646ca70032908b419e"
      ],
      "author": {
        "name": "feldmueller",
        "email": "feldmueller@posteo.de",
        "time": "Mon Sep 15 16:38:06 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Oct 09 14:41:53 2025 +0200"
      },
      "message": "change format of annotation_snippet column for compatibility with Python client\n\nChange-Id: Id6bd21cf45fe01d4646495e9d7a3ffde11f13d14\n"
    },
    {
      "commit": "39da9dcff91c473fbf9211e18d821ba62ccb1d2c",
      "tree": "923ba6d5b0918ef75661852730dc2770d117ad50",
      "parents": [
        "1a295ad676d3e47ca4098f19af6b0a6ab00bb6f1"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Sep 10 13:54:40 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Sep 10 13:54:40 2025 +0200"
      },
      "message": "Allow overriding verbosity default via env var KORAP_VERBOSE\n\nChange-Id: I8a2e32f24c22f2039b335cd000c610ba5ff3da08\n"
    },
    {
      "commit": "0af7593c5168aae13fad77846ced142bb93118a3",
      "tree": "a5c074d6e8335e042266fc36c3611e1f782ea58e",
      "parents": [
        "6aa5a0d81be19ede35ca1edbd3f663aef6f3ec75"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 09 18:14:16 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Sep 09 18:55:45 2025 +0200"
      },
      "message": "Fix fetchAnnotations documentation mismatches\n\nChange-Id: I2dc7bc69ce64492780ee1f67fea03e00bbc034ba\n"
    },
    {
      "commit": "6aa5a0d81be19ede35ca1edbd3f663aef6f3ec75",
      "tree": "94c1008a180b7ace1b0642bf543d9ed3a38230b6",
      "parents": [
        "0a726303ec556e738b401074e65ed29b8defa08b"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Sep 08 17:51:47 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Sep 08 17:51:47 2025 +0200"
      },
      "message": "Fix some CRAN policy issues\n\nChange-Id: I6862ea1bfbadbaf5d6090b6655c21ecf66650c16\n"
    },
    {
      "commit": "2baf5c53cdb431735ce4006182344d817f6fa4dd",
      "tree": "f8df273f2ba60514760ae9b3614486c7e334a321",
      "parents": [
        "93787d52e349fae2d6b1a9e2a2ca07bf1ad5dd60"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Sep 05 16:41:11 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Sep 05 16:41:11 2025 +0200"
      },
      "message": "Increase fetchAnnotation test coverage according to codecov\n\nChange-Id: I0c8c0f0e7196082ddb42a37001f62a2958ea13e1\n"
    },
    {
      "commit": "93787d52e349fae2d6b1a9e2a2ca07bf1ad5dd60",
      "tree": "d42eabe0fd2b40c13e21cc31cebae12c301315d4",
      "parents": [
        "560b591ea7e4acefff9892d2a1f10cda0d139340"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Sep 03 13:33:25 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Sep 03 13:33:25 2025 +0200"
      },
      "message": "Add overwrite parameter to fetchAnnotations\n\nChange-Id: I395dbcb44a18e04679232bdc65b4e2912836e4fa\n"
    },
    {
      "commit": "560b591ea7e4acefff9892d2a1f10cda0d139340",
      "tree": "d0516854094348a767048130e087f6f105e6e497",
      "parents": [
        "705b9494b570e9142d2210290286cf0e0e97eb54"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Sep 01 17:36:13 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Sep 01 17:36:13 2025 +0200"
      },
      "message": "Fix annotation parsing in fetchAnnotations\n\nResolves #27\n\nChange-Id: Id0fc0cc99835926f75e2679ce10c407763bf7dc3\n"
    },
    {
      "commit": "03d2b1ad05277194feb2ce38fac7ed66d13de24b",
      "tree": "d3c80922f9749cae738c69e4b9497c39cc4aa67c",
      "parents": [
        "89f796e283aaa69be35c2bb12cc401651fb6ed69"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Jul 19 09:14:45 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Jul 21 11:39:30 2025 +0200"
      },
      "message": "Simplify initializations\n\nChange-Id: I3516bd79b688c05613ea1122c904b7d9056bd0b0\n"
    },
    {
      "commit": "89f796e283aaa69be35c2bb12cc401651fb6ed69",
      "tree": "e81cddaba34292302b8f1d8fbf6841fb0469aa79",
      "parents": [
        "2512130a6ab9ff98fa8f8c067a3074285e50f2cc"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Jul 19 09:05:06 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Jul 21 11:39:30 2025 +0200"
      },
      "message": "Improve documentation\n\nChange-Id: Id98ea59ddde769bf88ed13e3e9f2303abd2b7259\n"
    },
    {
      "commit": "2512130a6ab9ff98fa8f8c067a3074285e50f2cc",
      "tree": "076a76e4594831fe44421cd8bf189850d32baabc",
      "parents": [
        "e8c0fef18f7b333b8d554589d372eefcbea7abb0"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Jul 19 08:45:43 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Jul 21 11:39:30 2025 +0200"
      },
      "message": "fetchAnnotations: Avoid the scientific notation problem\n\nChange-Id: I7b7f914a1a05d0180563e851e912bb7a8f43361c\n"
    },
    {
      "commit": "e8c0fef18f7b333b8d554589d372eefcbea7abb0",
      "tree": "b32c22a104b4ada0b9fcac748761ae055f6a97ad",
      "parents": [
        "7ff770ec53764d305a3691efc87136523cbae27b"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Jul 18 19:59:04 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Jul 21 11:39:30 2025 +0200"
      },
      "message": "Add ETA for  fetchAnnotations\n\nChange-Id: I7e0bc3c92309fc2713c46b3a5807f3fedce8dddd\n"
    },
    {
      "commit": "7ff770ec53764d305a3691efc87136523cbae27b",
      "tree": "0384d51e335ae5a3410bd63c726c9b3548493c0f",
      "parents": [
        "c643a12688aa6713772dba72e788c7cd22230240"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Jul 18 19:07:10 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Jul 21 11:39:30 2025 +0200"
      },
      "message": "Handle multiple morpho annotations\n\nChange-Id: I8afb7acd389639499b9da9d3ffa17ee09f4fe954\n"
    },
    {
      "commit": "c643a12688aa6713772dba72e788c7cd22230240",
      "tree": "da47a594858f6d65472e78e8bfb7cf2b8f38eefa",
      "parents": [
        "a29f3d4e72815d0e896ee9a65b3482fd9c6d08a7"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Jul 18 18:18:36 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Jul 21 11:39:30 2025 +0200"
      },
      "message": "Remove debug output\n\nChange-Id: Ib67a9b92a4ca0f1af8716762312a7314595a00bf\n"
    },
    {
      "commit": "a29f3d4e72815d0e896ee9a65b3482fd9c6d08a7",
      "tree": "146be7e57fd831dc030b209f92277b70d7c8faea",
      "parents": [
        "ff712a997522ed17f9a5d4d1dec94873a497ce07"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Jul 18 10:14:43 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Jul 21 11:39:30 2025 +0200"
      },
      "message": "Parse annotations into lists of vectors\n\nChange-Id: I9ee3a5c10ff997380b9661dd603f8ec83c6a91a8\n"
    },
    {
      "commit": "ff712a997522ed17f9a5d4d1dec94873a497ce07",
      "tree": "073436897213bd85013de37f1022292859b34ec5",
      "parents": [
        "e52b29514e823a54fe5ac0ae7637f6392f0e2fb3"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Jul 18 09:07:23 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Jul 21 11:39:30 2025 +0200"
      },
      "message": "fetchAnnotations: use matchID if present\n\nChange-Id: I147eb05cca958ffe5bd0189b7a239163cfe57a28\n"
    },
    {
      "commit": "e52b29514e823a54fe5ac0ae7637f6392f0e2fb3",
      "tree": "1889e86a5f157f9d919986bc9826ce13e7c142ea",
      "parents": [
        "49b8fc9d0882c36230f8b88f35c4910605337486"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Jul 17 16:53:02 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Jul 21 11:39:30 2025 +0200"
      },
      "message": "Add fetchAnnotations method to KorAPQuery\n\nResolves #26\n\nChange-Id: Ie6234e471216941148304d42cf70c7cc509ceb41\n"
    },
    {
      "commit": "a267c4278415adb7a1ee35f7ecd11ca6a24f679e",
      "tree": "23ed6defa17fd533c8d6ead101cecd8909b82154",
      "parents": [
        "ea34b815e3fce34e2d98735cc96c9b242f2931c6"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Jun 26 10:16:20 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Jun 26 10:16:20 2025 +0200"
      },
      "message": "Update textMetadata documentation\n\nChange-Id: I469d3c954688efd078ba3cb442a18891fa3ea36f\n"
    },
    {
      "commit": "ea34b815e3fce34e2d98735cc96c9b242f2931c6",
      "tree": "dae510b499c850be9c4a61840316d74b8057071c",
      "parents": [
        "365660ee9a1faef2cecf899c38bc2bbd57c5226c"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 15:49:00 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 16:53:18 2025 +0200"
      },
      "message": "Fix ci compatibility and error in as.alternative cospusQuery\n\nChange-Id: I45817afd9bbf57f72bfbcd9c638a9d40b8e79055\n"
    },
    {
      "commit": "365660ee9a1faef2cecf899c38bc2bbd57c5226c",
      "tree": "fc7a47914e203909f7f9b84eb489d09af6359073",
      "parents": [
        "ec1bfc8c8ad417b5a08bb973bf94c1d24760b79b"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 15:09:55 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 15:09:55 2025 +0200"
      },
      "message": "Harmonize ETA logging\n\nChange-Id: I64e330f2e80cfdc21699f790877af21fdd23f7f2\n"
    },
    {
      "commit": "ec1bfc8c8ad417b5a08bb973bf94c1d24760b79b",
      "tree": "1038b92fa05e9d85db7637836b739d036f091cdf",
      "parents": [
        "24799fdd4200210250c61b448b0b5bd36d6797fc"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 14:28:33 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 14:28:33 2025 +0200"
      },
      "message": "auth and hc_freq_by_year_ci are no longer experimental\n\nChange-Id: Ib3d87f7aef2162c6b2fc094820d2211876e8aba9\n"
    },
    {
      "commit": "24799fdd4200210250c61b448b0b5bd36d6797fc",
      "tree": "5430d65c2dca69a97ef75360c3f1bb199872c46c",
      "parents": [
        "36117de1521c110e084ffa41cccae8daf013806b"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 14:15:36 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 14:15:36 2025 +0200"
      },
      "message": "Use calculate_eta function in fetchNext\n\nChange-Id: I210a51fc4415cfbd36f721fc0c95585ec0be531c\n"
    },
    {
      "commit": "36117de1521c110e084ffa41cccae8daf013806b",
      "tree": "c8b374282cff2ad525ec955ea2627b098c68925e",
      "parents": [
        "f9914bb78145665abb1d6909d08ad1fbafbf27a1"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 12:46:10 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 14:13:24 2025 +0200"
      },
      "message": "Remove redundant documentation in KorAPConnection\n\nChange-Id: Ia07147d07b402ec0521ef22aadaedcce392cf5e7\n"
    },
    {
      "commit": "f9914bb78145665abb1d6909d08ad1fbafbf27a1",
      "tree": "ab0acdd8a3ce81f30199dea378f03b4e371a5896",
      "parents": [
        "d352642bb34e1e7c45a8ece8c8811ca74596d3ec"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 09:57:55 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 09:58:15 2025 +0200"
      },
      "message": "Bring back documentation for KorAPConnection params\n\nChange-Id: I8c1ada656d6a0372967911776240862d414eb039\n"
    },
    {
      "commit": "d352642bb34e1e7c45a8ece8c8811ca74596d3ec",
      "tree": "c4192753ecafc7c8e3fc56d5954116bdae3d44de",
      "parents": [
        "dc880aca3e2757b4a46391af91fea95205aaf894"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 09:16:15 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 25 09:16:15 2025 +0200"
      },
      "message": "Switch examples to native pipe operator\n\nChange-Id: I7a76e91c690f072a6c176842433e92e83c63b985\n"
    },
    {
      "commit": "dc880aca3e2757b4a46391af91fea95205aaf894",
      "tree": "7490b59da6db7dae65dde25596d1f69f2fb60544",
      "parents": [
        "b7a3805feea1a5a969293b4273fc828c19bf80fb"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 20:34:43 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 20:37:40 2025 +0200"
      },
      "message": "Add missing documentation\n\nChange-Id: I7ee4b4fa6f23c0ad93e29d4dc52e8430e5f6373f\n"
    },
    {
      "commit": "b7a3805feea1a5a969293b4273fc828c19bf80fb",
      "tree": "be3562e7c720aba7287bb29218266ae831a9df18",
      "parents": [
        "e53d282006f158cf65355d28b7141ae8d31a7f45"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 16:53:22 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 16:53:22 2025 +0200"
      },
      "message": "Simplify package documentation\n\nChange-Id: Ib00464ed762cc229e6bf6f000da88092ce0a6281\n"
    },
    {
      "commit": "1623fe8c03fcb2c7bc62c370d41145ae6c665d53",
      "tree": "e61388c8d69fbf294b377ef1075e40eca7c54747",
      "parents": [
        "c61609899c74a3c23a748517bc75e7533f32d135"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 16:31:46 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 16:31:46 2025 +0200"
      },
      "message": "Add fields parameter documentation in corpusQuery\n\nChange-Id: I0d2e01874dc6184d8554643f0dbf0823196ee234\n"
    },
    {
      "commit": "2abb946c657cc8f8d1e34eddd26eaa0c01bf0e55",
      "tree": "37970b9a7b76758bb49aa02bacb36fde30c0c9e5",
      "parents": [
        "a8c40f4b619f055cf5862f320612f0994434f6ef"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 15:56:01 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 15:56:01 2025 +0200"
      },
      "message": "Add documentation to corpusStats result\n\nChange-Id: I3819d2d2b28267624d4494e16aeb84834d9198a1\n"
    },
    {
      "commit": "a8c40f4b619f055cf5862f320612f0994434f6ef",
      "tree": "d4dbbb452adfd5e94b5635d22d64bda3620b1da8",
      "parents": [
        "ecc8670b4a21250cc53e21b87c7885783471c6bc"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 15:49:52 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 15:49:52 2025 +0200"
      },
      "message": "Make documentation less class centric\n\nand more beginner user friendly\n\nChange-Id: Icaca61c3d6f71bc8bd76c0507499b662df39be7a\n"
    },
    {
      "commit": "ecc8670b4a21250cc53e21b87c7885783471c6bc",
      "tree": "151a33022c141019f8bd41366063b3000af01128",
      "parents": [
        "17efa59b5b5d4cd965779d803c7b17cb995982ce"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 12:12:51 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 24 13:04:23 2025 +0200"
      },
      "message": "Add example for querying metadata of text within a vc\n\nChange-Id: If2cd08c87374dff690e24ee4498e640fe2e3a2b8\n"
    },
    {
      "commit": "e8c8e1a59aeb89b5b94c0c00ad6bf2f9c6b546fa",
      "tree": "22a59888762c9d3c20b37d80803a4801bb347940",
      "parents": [
        "4152c84e27ca389a9e46957eb87640513cafe025"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Jun 19 17:37:59 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Jun 19 17:37:59 2025 +0200"
      },
      "message": "Centralize ETA logging\n\nChange-Id: If3661c8a9be059325d9cb86ddf4421e05ce72931\n"
    },
    {
      "commit": "021663df75bbe685ce5e4d5a2a9814b4c365223c",
      "tree": "a5ce0890fcff8d8dd67e8dd41555032489043b8a",
      "parents": [
        "ef0e939028bebedb31e86c627c90aee6b5bc4ca9"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 18 17:49:22 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 18 17:49:22 2025 +0200"
      },
      "message": "Fix ETA and and page log for offset or maxFetch \u003e\u003e 0\n\nChange-Id: I4e5c4be09065d63df98f3c95fc9bbec545d4ce00\n"
    },
    {
      "commit": "ef0e939028bebedb31e86c627c90aee6b5bc4ca9",
      "tree": "ea8b74332acce7844091e5ca80eda0083d98d1e7",
      "parents": [
        "1087dcf9f38e7b5ca1339ecdccbb646e9c824a88"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 18 12:21:49 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 18 15:25:38 2025 +0200"
      },
      "message": "Build fetch API URL using httr2\n\nThis also prevents errors with numbers getting converted to scientific\nnotation via paste0.\n\nResolves #25\n\nChange-Id: I92d94fa27119471d5659ac4db9a34e4571794489\n"
    },
    {
      "commit": "e9e18bd9d801298b94773367f1f199fb237be325",
      "tree": "67a7f33d690546975802a5418fbe3438c0646cdb",
      "parents": [
        "319e74659c66d809cf6081c549a8290b6562c8f4"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 04 17:15:02 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 04 17:15:02 2025 +0200"
      },
      "message": "Fix minOccur filter with base pipe in collocation analysis\n\nChange-Id: I6a74525de4fa08e0770966e3a8dba1a6de263b21\n"
    },
    {
      "commit": "319e74659c66d809cf6081c549a8290b6562c8f4",
      "tree": "cddd3cfed1784f1ec500d207e4130cf937508670",
      "parents": [
        "3b3e7cd32955a7bfd0dae03a340620d0b916309e"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 04 17:14:03 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Jun 04 17:14:03 2025 +0200"
      },
      "message": "Keep row order constant in ci function\n\nChange-Id: I46f6509a1f4b3defb62ef8c42653f6e1f76e10be\n"
    },
    {
      "commit": "6dfeed9bd68d0b36be2c47718c1b29a17c8c2d1a",
      "tree": "ede04b9396f6b33babf58668d041c96b81957b22",
      "parents": [
        "71c30d80c6334c8c7a4b772485ca281e4664a5f3"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 03 11:58:06 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Jun 03 11:58:06 2025 +0200"
      },
      "message": "Factor out ETA logging\n\nChange-Id: Ic8b1600395018aa79701e29a38c4ec22d598337a\n"
    },
    {
      "commit": "71c30d80c6334c8c7a4b772485ca281e4664a5f3",
      "tree": "10a99ea817464dfe02d4062ba827b8cdaa67f692",
      "parents": [
        "6ef61a8d76c42dd79c4ec0b109330813a62c36a3"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat May 31 16:27:53 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat May 31 21:57:43 2025 +0200"
      },
      "message": "Add ETA log to corpusStats\n\nChange-Id: I1f2b511c489e1ab6770e742baf9f76e5300a29f7\n"
    },
    {
      "commit": "6ef61a8d76c42dd79c4ec0b109330813a62c36a3",
      "tree": "4e6a2266544c998623e9f73b08a65a257c944d62",
      "parents": [
        "7638ca4e6534700ae1236b2808ed8d71d32ea251"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu May 29 16:07:03 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 30 15:14:47 2025 +0200"
      },
      "message": "Add ETA logging also for corpus/frequency query\n\nChange-Id: I6bc9b65db23c1e35a0764053c2e28faa1f442655\n"
    },
    {
      "commit": "7638ca4e6534700ae1236b2808ed8d71d32ea251",
      "tree": "bf512ac3d61cc4c9c7aa97d341c1ff4a72a01125",
      "parents": [
        "623d7128f89a24954bac5fcf18185af70e3e778c"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun May 25 13:18:16 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun May 25 13:32:03 2025 +0200"
      },
      "message": "Round benchmark also in freqQuery log\n\nChange-Id: I3ccc833367e7f29e4fb0948b782ca0a6a49d1916\n"
    },
    {
      "commit": "623d7128f89a24954bac5fcf18185af70e3e778c",
      "tree": "b631b3f510fddec1f595e41a9954d242fe0a5636",
      "parents": [
        "16b54485c1f3941c26325a80baf44d880442f69c"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun May 25 12:46:12 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun May 25 13:01:29 2025 +0200"
      },
      "message": "Fix ETA logging in fetchNext\n\nChange-Id: I8fc6047f3b5c53f00c9da61641e0983cbf24f70d\n"
    },
    {
      "commit": "669114ba7f6a523ed4954bbd69c60df2ae6247b7",
      "tree": "092066b0e1327a5ace846f3771fc4fbb159a66c5",
      "parents": [
        "d36ee55eb874431ea95d2b15dbb6ed217956b7c7"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 02 22:02:20 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 02 22:02:20 2025 +0200"
      },
      "message": "Improve log formatting\n\nChange-Id: Ideecbd8784d975cd66b47e172786311dbd298718\n"
    },
    {
      "commit": "d36ee55eb874431ea95d2b15dbb6ed217956b7c7",
      "tree": "c5043c94fd1e6744dff604ff5cfecea4e841e964",
      "parents": [
        "ae9b6178b9e56f1f6b7620e79d536159436f22b3"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 02 20:42:50 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 02 21:28:31 2025 +0200"
      },
      "message": "Handle request errors as late as possible but not later\n\nChange-Id: I2ea54b1fa898330c0b6ecd2db40dbca3035146f8\n"
    },
    {
      "commit": "ae9b6178b9e56f1f6b7620e79d536159436f22b3",
      "tree": "3c7af0d8ecb6f919c4558df9f4abc1088b997652",
      "parents": [
        "a824d501960c7b57fa75791233d52d05b65c9016"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 02 15:50:01 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 02 15:50:01 2025 +0200"
      },
      "message": "Fix logging warnings when no benchmark is returned\n\nChange-Id: I2b67ed6c90fe79e65c6abd4c61793d64b1d73ff7\n"
    },
    {
      "commit": "a824d501960c7b57fa75791233d52d05b65c9016",
      "tree": "604ca5fd6b7affb91ed0394bc3917320b787f25e",
      "parents": [
        "03402e7fa840d1eba7d2bf23d66f373f338250e2"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 02 15:40:23 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 02 15:41:56 2025 +0200"
      },
      "message": "KorAPConnection: improve source code formatting\n\nChange-Id: I8efaf5f6cd485ddb190cc4a7a1752c0f149def31\n"
    },
    {
      "commit": "03402e7fa840d1eba7d2bf23d66f373f338250e2",
      "tree": "f32512709dba9d7d437e13f2df98efd0e80cfb2a",
      "parents": [
        "d885122b40547ef8dab5fd88e3e9315c1a4e146a"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 02 15:39:40 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri May 02 15:39:40 2025 +0200"
      },
      "message": "Do not cache timed out api results\n\nResolves #7\n\nChange-Id: I7473dabc45f0e469aa75486a73af8823a56c41f8\n"
    },
    {
      "commit": "d885122b40547ef8dab5fd88e3e9315c1a4e146a",
      "tree": "411983c1cf631b7ac9de7733ca5add1d1476c237",
      "parents": [
        "acbaab058f8b8ca1943716f962282282a638a908"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu May 01 10:57:19 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu May 01 16:32:06 2025 +0200"
      },
      "message": "Improve code style in KorAPQuery\n\nChange-Id: I76463748ce4eb61b55e1cb6d6729460a7ae51079\n"
    },
    {
      "commit": "acbaab058f8b8ca1943716f962282282a638a908",
      "tree": "14821aab5fac268108775c6d6108b6e2a9588bb0",
      "parents": [
        "c6acf59bdb872db795571174a75478439e0626d3"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu May 01 10:56:35 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu May 01 16:32:03 2025 +0200"
      },
      "message": "Log ETA and [cached] in fetch*\n\nChange-Id: Iecab43a5b1c049809d8f33beb4092c3da29793ea\n"
    },
    {
      "commit": "dad343d2cdb9fd63bf5ee24e423728849b7988d4",
      "tree": "027312a4d898f34f22dee870f0e771633344e089",
      "parents": [
        "5057f50fb67cdca38c23a04e7fc91f6e0ce2d637"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Apr 06 18:22:45 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Apr 06 18:22:45 2025 +0200"
      },
      "message": "Fix no visible binding ...\n\nChange-Id: Iee3007045391d91f3240caed2e141d5922cc159f\n"
    },
    {
      "commit": "ad8d2ed99508f416ebfbd104b1b029d8ff794fd4",
      "tree": "1772178346304d5a24eb92032b00b5838e4a2563",
      "parents": [
        "b79fd44513afd0e2f5ebc58f3d3f77673663e185"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Apr 05 15:37:38 2025 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Apr 06 17:58:49 2025 +0200"
      },
      "message": "Update and separate frequencyQuery documentation\n\nChange-Id: I2fc31fd0e4d49001a739bcee63e30dac4a608e82\n"
    },
    {
      "commit": "b79fd44513afd0e2f5ebc58f3d3f77673663e185",
      "tree": "1f352988418ceceb810163abaa934ff4a4d54e60",
      "parents": [
        "463bb16122c123470c83a084aef840544c2f729c"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Mar 26 10:25:03 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Apr 06 17:58:49 2025 +0200"
      },
      "message": "Introduce env variable KORAP_URL to use as default if set\n\nChange-Id: I8f9d77723c5b56ba154a21429236c7501195d54a\n"
    },
    {
      "commit": "f5a3701756846fb01b1c9627515cd3636ca20bec",
      "tree": "18f8de668d71eaf6783d9c9fc0c74560e79b6dc5",
      "parents": [
        "4cd066d7370f3e708169e8229d96258823e4202d"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Feb 28 15:48:23 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Apr 06 17:58:49 2025 +0200"
      },
      "message": "💄 Start switching to base R pipe\n\nChange-Id: I9a7cadb089e150deb1e58f33b8944ea789cd612f\n"
    },
    {
      "commit": "4cd066d7370f3e708169e8229d96258823e4202d",
      "tree": "6d4cd1e56d011f4850b73006458ab04927464518",
      "parents": [
        "617266df8d100c6d6d79701291c4565e7e8ef333"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Feb 28 15:48:23 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Mar 01 15:31:29 2025 +0100"
      },
      "message": "💄 Start switching to base R pipe\n\nChange-Id: I9a7cadb089e150deb1e58f33b8944ea789cd612f\n"
    },
    {
      "commit": "617266df8d100c6d6d79701291c4565e7e8ef333",
      "tree": "3c91f968c7ca163f924635d4dafb3969e82ca17f",
      "parents": [
        "d5823b00016fd04e6d5f64d850c532f51b3e5c0b"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Feb 27 10:43:07 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Feb 27 11:45:23 2025 +0100"
      },
      "message": "♻️💄 simplify KorAPConnection class instantiations to modern syntax\n\nUpdate all class instantiations from `new(\"KorAPConnection\")` to `KorAPConnection()`.\nThis is possible with R \u003e\u003d 4.0.\n\nChange-Id: I01131fb32045e084cafbb9e05cd8ba99f8f20f1b\n"
    },
    {
      "commit": "ef1ef4a97ffafa4d5252e3aee5b632b2739b44a4",
      "tree": "5c781f405279c200bbd98b5c9c0b14d59df86cbd",
      "parents": [
        "e7f0d689918f4ef2c35b8ed228ffcbd107467d31"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Feb 19 12:12:40 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Feb 19 12:12:40 2025 +0100"
      },
      "message": "Remove redundant R version checks\n\nChange-Id: I51009d002e943aa4187cd7105b7a6935368d6b60\n"
    },
    {
      "commit": "e7f0d689918f4ef2c35b8ed228ffcbd107467d31",
      "tree": "5b793e6b1da7269121b6222207aa4ae4fd87a69e",
      "parents": [
        "dbdbb1fb9d0e93412521b8d64db496ae530483c3"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Feb 19 10:50:59 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Feb 19 10:50:59 2025 +0100"
      },
      "message": "Update tokenization note in collocationAnalysis function\n\nChange-Id: If375acab2e022eb9e4e54b784154bb6b4195217b\n"
    },
    {
      "commit": "dbdbb1fb9d0e93412521b8d64db496ae530483c3",
      "tree": "96b1c37b42e639e78fcb080fe0a476cabeaa1e03",
      "parents": [
        "62625dddc01b194ca5a3e9e5d209408cab7a1038"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Feb 19 10:33:06 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Wed Feb 19 10:42:42 2025 +0100"
      },
      "message": "Subtract redundant smoothing constants in mergeDuplicateCollocates\n\nChange-Id: I1b042974735c4b2e9a664e21d1eb87cf0794d5c4\n"
    },
    {
      "commit": "62625dddc01b194ca5a3e9e5d209408cab7a1038",
      "tree": "df354d5e3d4803d6ec69ffa43d6852398865cd12",
      "parents": [
        "fabc239ec6ae13d6569f81a176948a25f5871be4"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Feb 18 17:11:03 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Feb 18 17:11:03 2025 +0100"
      },
      "message": "Fix url build in mergeDuplicateCollocates\n\nChange-Id: I29bed7930066bd794359f60cb4a27198134c3c20\n"
    },
    {
      "commit": "80dc643321625204dd234198596c1efc85a9a0a7",
      "tree": "26e9e8bcbc91dbee4e550c647fb808ea0644d4af",
      "parents": [
        "6184c42068ba9b69d1ad166e126498b53778e6a6"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Feb 07 16:57:40 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Feb 07 16:57:40 2025 +0100"
      },
      "message": "Always select textSigle in corpus queries\n\nResolves #24\n\nChange-Id: Iba859868b3e21ad3fb3d840f92441e65369a2f86\n"
    },
    {
      "commit": "1b53047e077aed30f0ce0ffa612af2c23d874e81",
      "tree": "d542c0c5cda2318b29c33e3beeb03dd1550f8542",
      "parents": [
        "62b1789aad816ea37777a66508b1713ec756a2c3"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Feb 04 10:46:49 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Feb 04 10:48:17 2025 +0100"
      },
      "message": "Make sure http fails are always handled gracefully\n\nhttr2: :req_error does not catch timeouts, and maybe more. So wrap req_perform in tryCatch to be on the safe side.\nChange-Id: I913ea571e5fcbf2aa5adf1a455bfdfed487af05e\n"
    },
    {
      "commit": "62b1789aad816ea37777a66508b1713ec756a2c3",
      "tree": "094c0dd19347968eb51dc5018ac87837249139e4",
      "parents": [
        "471d90a71becb2504059eab5eba67daac82d6c2a"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Feb 01 18:26:45 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Feb 02 15:33:53 2025 +0100"
      },
      "message": "Check if authorization is supported\n\nChange-Id: If2dd75b629a0ae958d98ae220ec90a78decd0e95\n"
    }
  ],
  "next": "471d90a71becb2504059eab5eba67daac82d6c2a"
}
