)]}'
{
  "log": [
    {
      "commit": "ca7510fe2dc04e383beea46d86f644d7c9658b74",
      "tree": "1796b87796de05133bf29aaa1943d48c589471e6",
      "parents": [
        "28f05d1e8639b16845d54ec9379fd116d5e66be3"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Sep 04 17:53:57 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Sep 04 19:42:38 2026 +0200"
      },
      "message": "Scale the whole log-likelihood table with the window size\n\nca_ll() multiplied only its row total by the window size, leaving cells\nthat do not add up to one sample: the row was counted in window\npositions, the column and the sample size 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 * f1 * f2\n/ n either way, which is why pmi, md, lfmd and npmi never depended on\nthis, and why it stayed unnoticed: only llr needs the rest of the table.\nThere the values differ, by 0.1% for a frequent collocate up to well\nover 100% for a frequent node in a wide window. Results with a window of\none position are unchanged, the two being identical there.\n\nIt also removes a pathology instead of guarding against it: n -\nwindow_size * f1 could turn negative, at which point the score became\nNaN. window_size * (n - f1) cannot. In this database the case was out of\nreach anyway, needing a word covering more than a tenth of the corpus,\nbut the same table is used elsewhere with freely chosen window sizes.\n\nReported-by: Tim Feldmüller \u003chttps://github.com/feldmueller\u003e\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: Ic396d586da7f6a68b2c911d871ff58032b554d1f\n"
    },
    {
      "commit": "e510854f04aac8099102172a39970471d8b369e0",
      "tree": "ed383baf8d9183a70a226e26810c0916f19e4bfe",
      "parents": [
        "0fec0bee779435957d92730316376657f0456463"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Sep 04 15:29:52 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Sep 04 19:42:38 2026 +0200"
      },
      "message": "Score the first collocate of a query with the right window size\n\ntrue_window_size counts the positions a pair was observed in and is\npassed on as the window size of the expected frequency. It started at\none, but the first key of the iteration takes the same branch as any\nfurther key of the same collocate, which increments it. The first\ncollocate of every query was therefore scored with a window one position\ntoo wide, so that its expected frequency came out too high and its pmi,\nnpmi, md, lfmd and llr too low.\n\nThe test data shows this: for \"Aluminium\" and \"Anwendungstechnologie\",\nln_count is 16 and rn_count 0, so all 16 co-occurrences sit in the single\nposition left of the node, and the aggregate pmi has to be the pmi of\nthat position. It was 8.4592 while ln_pmi was 9.4592, exactly log2(2)\napart. They now agree, and npmi, md, lfmd and llr change accordingly,\neach matching an independent calculation with a window of one.\n\nCounting up from zero fixes it. Note that md_nws is unaffected, as it\ndeliberately uses the nominal window size, and logDice no longer takes a\nwindow size at all.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I58c26bcdf273e320442be5abb5728219682ac951\n"
    },
    {
      "commit": "0fec0bee779435957d92730316376657f0456463",
      "tree": "bdd5dbd99a1eb1c098ed1d933a8f0b5d32b98a1e",
      "parents": [
        "92f779d03ee09c543434432d222d4267fc286784"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Sep 04 19:42:38 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Sep 04 19:42:38 2026 +0200"
      },
      "message": "Compute logDice as defined by Rychly, and split off the auto focus score\n\nca_logdice() and ca_dice() multiplied the node frequency by the window\nsize, while the citation right above ca_logdice() and the tooltip in the\nDeReKoVecs web UI both give Rychly\u0027s (2008) definition,\n14 + log2(2*f12/(f1+f2)).\n\nThe window size does not belong there. It is correct in the expected\nfrequency of the other measures, where f1 * window_size counts the\npositions a collocate can occupy, but the Dice coefficient relates the\nco-occurrence frequency to how often the two words occur at all, so its\ndenominator sums marginal frequencies. Adding f1 * window_size, a count\nof window positions, to f2, a count of word tokens, mixes units, and it\nmade the coefficient asymmetric: swapping node and collocate changed the\nscore, 0.64 against 3.96 for Grund and triftiger from the same counts.\n\nBecause f1 * window_size dominated the denominator for a frequent node,\nrare collocates were penalised. Among the collocates of \"Grund\" in a 5+5\nwindow, \"triftiger\" scored 0.64, below \"Berlin\" at 2.03, although Berlin\nco-occurs with Grund less often than chance predicts. They are now 3.96\nand 3.84, and comparable with other tools such as Sketch Engine.\n\nThe auto focus score, reported as LDaf, keeps that factor and moves into\nits own function, ca_focus_score(). It is Dice-like but not logDice, and\nthe two are deliberately not on a common scale: the penalty on wide\nwindows is what makes it sensitive to how concentrated a pair is, which\nis what tells actual collocations from words that merely share contexts,\nand is why LDaf orders collocates well enough to be the default order.\nIts values are unchanged, bit-identical for all 504 collocates of the\nfive nodes checked against the state before this change, as are the\nselected windows.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I72bd69d4d2a74127ca87bf20d94f9ffafda6c191\n"
    },
    {
      "commit": "122ba3c50576182bff1bcc27a2e32a3e6d16e0f2",
      "tree": "b7d35939c63bdadaf5370b17f751cfcebb5c773c",
      "parents": [
        "d885c242e973e29c5604c04c08f07f58c6102cf0"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Aug 09 17:13:24 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Aug 09 17:13:24 2026 +0200"
      },
      "message": "Batch merges into one rocksdb write per batch\n\nInstead of one rocksdb write per increment, the increments of the indexing\nthreads are collected in a WriteBatch and written once per batch. The batch\nsize can be set with COLLOCATORDB_BATCH_SIZE (default 65536).\n\nThe batch is swapped out under the lock and written without it, so the other\nthreads keep counting while the write is in flight. With the lock held across\nthe write, an indexer with several threads was slower than with one, because\nthe threads queued up on the lock and rocksdb never saw concurrent writers\nto batch into one.\n\nA read writes out what is still in the batch first, so it sees every\nincrement that came before it. A cancelled write is repeated as before.\n\nChange-Id: Id534c541a23dfc5b74435c6a88cc001ab6d842b9\n"
    },
    {
      "commit": "2f65bcf4181630bd55ddc8123579df3ea0c0afd5",
      "tree": "51a901b5519cd2bb84d621b9fcf119dd56e8935b",
      "parents": [
        "1d76ed9ffa72aaffb0608b31651d793ea56dd51c"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Aug 02 14:04:37 2026 +0200"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Aug 02 14:04:37 2026 +0200"
      },
      "message": "Do not lose increments\n\nIndexing threw counts away in two ways, both without a word.\n\nrocksdb was asked to write with low_pri and no_slowdown, which means \"cancel\nthis write when compaction is behind\" and \"do not wait, report it instead\", and\nthe reported status was discarded in both inc() overloads. Measured with 3\nmillion increments against small write buffers: 2,253,066 arrived, 746,934 were\ngone, a quarter of them. The writer no longer deprioritises itself and waits\nwhen it has to, and merge_one() repeats a cancelled write in any case. A\ncancelled write was not applied, so repeating it cannot count twice.\n\nThe second one is the end of a run. The database has no write ahead log, and\nnothing ever closed it, so everything still in a write buffer was lost when the\nindexer ended: of 2 million increments in a process that just exited, none were\nreadable afterwards. close_collocatordb() writes them and closes the database,\nand the destructor does the same.\n\nWhile testing this, two more:\n\n- get_collocators() and get_collocation_scores() finish a collocate when the\n  next one starts, so the last one was never returned. Every word was missing\n  a collocate, in the API and in the JSON.\n- the array both of them return was allocated with c.size() + sizeof c[0]\n  instead of c.size() * sizeof c[0], far too small for more than one entry.\n  Callers reading beyond the first entry read whatever was behind it. It is\n  terminated with an empty entry now, so that they can tell where it ends.\n\nThe settings are aimed at what indexing does, a long stream of merge operands\nfor the same keys: bigger write buffers, several of them combined before they\nare written, which collapses the operands early, and compaction that is allowed\nto keep up. All of it can be set from the environment, to be able to tune a run\nof several days without recompiling. It also explains why more indexing threads\nstop helping: rocksdb inserts merge operands one writer at a time.\n\nThe test that found all of this is part of the suite now. The expectations of\nthe writing test were corrected, they described the missing collocate.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I283b073b7f3fd36aa3ce960978e82105b1e44355\n"
    },
    {
      "commit": "65d4479113439e58d8b53d9a1f2cfb14fcdfab81",
      "tree": "0520bdabbd4a30f8018a39b8eb0182c70ad0543b",
      "parents": [
        "023d4591630964633a5547c0f086109948e36927"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Jul 31 09:46:34 2026 +0900"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Jul 31 09:46:34 2026 +0900"
      },
      "message": "Support rocksdb 11\n\nrocksdb 11 needs C++20 for its headers and hands the database back from\nDB::Open() and DB::OpenForReadOnly() as a unique_ptr instead of a raw pointer.\nThe newest standard the compiler knows is used now, and the two open calls go\nthrough a macro that adapts to the rocksdb version, so 7, 10 and 11 all build.\n\nVerified with rocksdb 7.8.3 (debian), 10.2.1 (fedora) and 11.0.4 (alpine,\nmusl): no warnings, ctest passes, and reading a database written by rocksdb\n5.11 still gives identical results for 251 word ids.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: If16e6aa2fbe8478f3260e358dce53b2dc5144d9d\n"
    },
    {
      "commit": "aa354d8fba290e526c084ff49a8a226aa260f9af",
      "tree": "2dd3bcb6ed29c405d3f6fcf56adce6daae2bdfab",
      "parents": [
        "b61a72a726f10b555057f4ffd6173ddb32e560e0"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Jul 31 09:17:57 2026 +0900"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Jul 31 09:17:57 2026 +0900"
      },
      "message": "Fix two memory leaks in the collocator lookup\n\nEvery collocator lookup leaked a rocksdb iterator and 80 bytes of window sums:\n\nCollocatorIterator takes the iterator that SeekIterator() gets from\nDB::NewIterator(), but had no destructor, so the compiler generated one that\ndoes not touch the raw pointer. The wrapper was deleted by its unique_ptr, the\niterator it wrapped was not, together with everything it pins.\n\nget_collocators() allocated its fixed size sumWindow array with malloc() and\nnever freed it. It is a fixed size, so it lives on the stack now.\n\nMeasured with 20000 calls of get_collocators_as_json() on the test database:\n3.63 kB per call before, no measurable growth at all afterwards. The 80 bytes\nwere per call regardless of the result size, which is what gave them away.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I1b1148ada81bd821784b8e327334fc3bafe29e1b\n"
    },
    {
      "commit": "b61a72a726f10b555057f4ffd6173ddb32e560e0",
      "tree": "edd090cd346f2953e43178f092d379d12329b29a",
      "parents": [
        "0fde12e5004192bf6e07a33ddb347164f3aff9f1"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Feb 10 15:48:41 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Feb 10 15:48:41 2025 +0100"
      },
      "message": "Revert \"Increase compaction limits\"\n\nToo good to be true\n\nThis reverts commit 0fde12e5004192bf6e07a33ddb347164f3aff9f1.\n"
    },
    {
      "commit": "0fde12e5004192bf6e07a33ddb347164f3aff9f1",
      "tree": "ae580d31d4ae1b537984ef606f9dd02195c6bde0",
      "parents": [
        "c630c15e676b91c53c3cadeb2ee87055077859bb"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Jan 23 12:32:32 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Jan 23 12:36:54 2025 +0100"
      },
      "message": "Increase compaction limits\n\nIncreases write throughput by factor 10 on compute2\n\nCreating the full collocation db for DeReKo-2025-I only takes less then\none day, now.\n\nThanks @benhur1999\n\nChange-Id: I68eb18eab2358432aceacc98acbf930a19e76b90\n"
    },
    {
      "commit": "c630c15e676b91c53c3cadeb2ee87055077859bb",
      "tree": "edd090cd346f2953e43178f092d379d12329b29a",
      "parents": [
        "21b964cba850116ee4bfe99950dff28f5c51cf6d"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Jan 23 11:17:47 2025 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Jan 23 12:03:50 2025 +0100"
      },
      "message": "Increase writing performance\n\nIncreases write throughput\n\nfrom 350kb/s to 550kb/s on compute2 and\nfrom 560kb/s to 760kb/s on my office computer\n\nboth writing to ssd.\n\ncompute: \t\t 635kb/s\nkorap-worker-08: 590kb/s\n\nChange-Id: I7c8f6c7777c811bf18b5fffdd12d1bd862107ebb\n"
    },
    {
      "commit": "21b964cba850116ee4bfe99950dff28f5c51cf6d",
      "tree": "eb99ec170ac714c0e5c5ec4231f44834536c9f79",
      "parents": [
        "d26b105331ccab37288bfafe80cbb67bc7c99a3d"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Dec 10 17:10:50 2024 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Dec 10 17:10:50 2024 +0100"
      },
      "message": "Add get_word_frequency function\n\nChange-Id: Idef55f5a8f84c4bcba0a1bfdbe563eb74f26857a\n"
    },
    {
      "commit": "d26b105331ccab37288bfafe80cbb67bc7c99a3d",
      "tree": "c29b01622de564840770e65297502ace9e28d417",
      "parents": [
        "fa73154586cd642ee019afd58e8a8eb67f9a444a"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Dec 10 16:56:39 2024 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Tue Dec 10 16:56:39 2024 +0100"
      },
      "message": "Add get_corpus_size function\n\nChange-Id: Ie95b0f14bb8784006e9dc788d02042b6b5b9485a\n"
    },
    {
      "commit": "e889cec5dd3a1b39ede361ac1e7cdd73ccb258f3",
      "tree": "0a81f43e18838f99d9e9cf9c7ecea7b4b1739b76",
      "parents": [
        "b4ade0f87d230ed6eaeff56afc9c2c0dd9fed033"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Nov 23 12:08:42 2024 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Nov 23 12:08:42 2024 +0100"
      },
      "message": "Add `md_nws` MI² score based on nominal window size (\u003d10)\n\nChange-Id: I5e431a8ba0f863191f378d447621f3a10039d122\n"
    },
    {
      "commit": "39887082c445671ea721745d5d306f8946420580",
      "tree": "fe106a29269f150a9c0ff7db6fc30e55c113a668",
      "parents": [
        "0347ad6201d8d84eaff9d1ccd40146910e044739"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Nov 22 18:06:20 2024 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Nov 22 18:21:10 2024 +0100"
      },
      "message": "clean up code clang style\n\nChange-Id: Ib8c2960f276107f7fe5dbf1699ff5b20f1315166\n"
    },
    {
      "commit": "979580e1c2eb917e8e8010941c50c2a4ff97b36e",
      "tree": "a712b0e6fa903137f79ca1d072651f74ec266050",
      "parents": [
        "f08631e680931eeafd340369cfee7fb7a5e360dc"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Nov 21 18:05:07 2024 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Nov 21 18:05:07 2024 +0100"
      },
      "message": "Add get_word_id(char* word) method to library\n\nChange-Id: Idf0701248ccdf0ecc1c2265d215fbe582510ea96\n"
    },
    {
      "commit": "75d35d27d07fc065d72cc8e85aef84f49f0852fd",
      "tree": "b85007cc2348f5f852dcc7638b30efb17ace0123",
      "parents": [
        "9ac200953ac6e60651fdac0022822e3a27cbb343"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Nov 21 14:31:44 2024 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Nov 21 14:39:43 2024 +0100"
      },
      "message": "Fix include file for c++\n\nChange-Id: Ib8c2960f276107f7fe5dbf1699ff5b20f1315166\n"
    },
    {
      "commit": "b91d5325b0952eb91df2071d35ff411bc999ee9a",
      "tree": "3f76a3165df5a815fec707e13c006a09f9befed5",
      "parents": [
        "ce2d005b371bfdeca816c7797f48c509f3753df4"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Nov 15 16:04:32 2024 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Nov 15 16:04:32 2024 +0100"
      },
      "message": "add missing config.h.in\n\nChange-Id: I7f294d3a0ce1acb961c49a8a9bee0f3e8e2824eb\n"
    },
    {
      "commit": "6208fd77e556fdc9219868002589b79b616e476e",
      "tree": "5bb582ff22617cd4babee90dc374e7a274bd46a9",
      "parents": [
        "5ffc474b237885bf81026c63a9a89683691fd5d9"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Nov 15 15:46:19 2024 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Nov 15 15:53:31 2024 +0100"
      },
      "message": "add get_version function\n\nChange-Id: I7f294d3a0ce1acb961c49a8a9bee0f3e8e2824eb\n"
    },
    {
      "commit": "5ffc474b237885bf81026c63a9a89683691fd5d9",
      "tree": "9d3450127e825f5806ba4066d613e6681a3bf68f",
      "parents": [
        "0a3a09ad479b9aa06a9ac09c57b8896d46ee8f97"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Nov 15 15:45:12 2024 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Fri Nov 15 15:52:11 2024 +0100"
      },
      "message": "code clean up\n\nChange-Id: I6109c795a6734b040a034e4b5ee6a62cdb56310e\n"
    },
    {
      "commit": "2441f7c09b781efd7393c7209103a2012796ffba",
      "tree": "17752dd136c76bad4bf55ebde97b7b838d117912",
      "parents": [
        "442292368bedc801988a57d2c60d0369f7066e26"
      ],
      "author": {
        "name": "„feldmueller“",
        "email": "„feldmueller@posteo.de“",
        "time": "Thu Nov 14 16:31:30 2024 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Thu Nov 14 17:22:06 2024 +0100"
      },
      "message": "Fix calculation of total token count\n\nChange-Id: Ib8c2960f276107f7fe5dbf1699ff5b20f1315166\n"
    },
    {
      "commit": "442292368bedc801988a57d2c60d0369f7066e26",
      "tree": "2e90ddad91d3fc7765de603c5fbad38387b8919d",
      "parents": [
        "13f4f1b6446bc1bf0efe2a972b3b6db536a94810"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Mon Aug 05 15:00:20 2024 +0200"
      },
      "committer": {
        "name": "„feldmueller“",
        "email": "„feldmueller@posteo.de“",
        "time": "Thu Aug 08 10:20:50 2024 +0200"
      },
      "message": "Improve MacOS support\n\nChange-Id: Id54a73c025d01ee37d2373a62506eb52a4f75d35\n"
    },
    {
      "commit": "6663f11ebcbc2b676eba5cf6060af959cdebc0bb",
      "tree": "e63c7ec18e42d5a12b26718c3b446331c9054acc",
      "parents": [
        "b4a683c0e64ca17c1a20cff91427b35a1d1ca533"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Mar 14 09:20:59 2021 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Mar 14 14:44:28 2021 +0100"
      },
      "message": "Add first tests\n\nChange-Id: I7ef95cef912feb2b997e1c7da5eb5a369cbe56b1\n"
    },
    {
      "commit": "b4a683c0e64ca17c1a20cff91427b35a1d1ca533",
      "tree": "9326620af9d79ba5e5653425fc9aab39e255ff38",
      "parents": [
        "97f433b24b9051a436c614b8dc6d7c421828f41d"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Mar 14 09:19:44 2021 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sun Mar 14 09:19:44 2021 +0100"
      },
      "message": "Extend API\n\nChange-Id: I326b2074645f43f81b68cd39eacfe7e247138b41\n"
    },
    {
      "commit": "97f433b24b9051a436c614b8dc6d7c421828f41d",
      "tree": "e47097b805dbe42c9512d34598b47003cc8d25d0",
      "parents": [
        "12af019e9e068e2150128b523f2c7f9bc330ebe0"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Mar 13 18:10:52 2021 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Mar 13 18:10:52 2021 +0100"
      },
      "message": "Rename some identifiers in json result to avoid misunderstandings\n\nChange-Id: Ie5b39f5de7279643668a4b27da258b3aad0a6924\n"
    },
    {
      "commit": "12af019e9e068e2150128b523f2c7f9bc330ebe0",
      "tree": "e13b3753f4da597e064568a0c94089f059fee7a4",
      "parents": [
        "7042bd31e4ebc70b927add24848dba4ef8ceba49"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Mar 13 18:05:14 2021 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Mar 13 18:05:14 2021 +0100"
      },
      "message": "Reformat code\n\nChange-Id: Id0ea8ec518278984697b6a3b087c532d1704184b\n"
    },
    {
      "commit": "c2e43215a6916610288aa0b9c7fd800683ef37e5",
      "tree": "6567a65ac486b43d20d5116de9d47ecced7d5ac6",
      "parents": [
        "0bffe807bf3e6bc8ce570967e222bb3e45db33db"
      ],
      "author": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Mar 13 18:05:14 2021 +0100"
      },
      "committer": {
        "name": "Marc Kupietz",
        "email": "kupietz@ids-mannheim.de",
        "time": "Sat Mar 13 18:05:14 2021 +0100"
      },
      "message": "Add some directory structure\n\nChange-Id: I052849c6aff9fd0f311984de67c35a306735c9a9\n"
    }
  ]
}
