)]}'
{
  "log": [
    {
      "commit": "7b4068860c3d50da28f3dd734e14f74cd6c5657d",
      "tree": "86ee8e338aa22e8d06d93558752e7c48e0c42420",
      "parents": [
        "3857c0cca71a9f5bd462d92e6208d0e0a1c1ac52",
        "5098a65c8c99e726e8f9a58ec23e8fff8d1a70f3"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 16 21:36:44 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 21:36:44 2026 -0700"
      },
      "message": "Merge pull request #767 from jaideeppyne/fix-kll-items-query-serialize-sorted-view-756\n\nFix KllItemsSketch sorted-view corruption after query-before-serialize"
    },
    {
      "commit": "3857c0cca71a9f5bd462d92e6208d0e0a1c1ac52",
      "tree": "3c7fcf2b9a7dd6a0b24195a6dc140cec15a77dcc",
      "parents": [
        "44c62015f3ab9a6ef35457e681dc398274b0960a",
        "9bf19ff6b18505009f7d36b2e15d17705dee0534"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 16 21:35:06 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 21:35:06 2026 -0700"
      },
      "message": "Merge pull request #769 from jaideeppyne/fix/tdigest-merge-minmax\n\nfix(tdigest): preserve stored min and max when merging"
    },
    {
      "commit": "44c62015f3ab9a6ef35457e681dc398274b0960a",
      "tree": "a5952b5d723ed9b22c9d721f0c68ec74560aa519",
      "parents": [
        "f8018f0fcba672a58b9f56a8c5a8fbc0024d8f85",
        "c20bd8031c1284ab0639419f4c6fd8db6d8717bf"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 16 21:29:36 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 21:29:36 2026 -0700"
      },
      "message": "Merge pull request #768 from jaideeppyne/bloom-difference-deprecate-invert-766\n\nDeprecate BloomFilter.invert and add difference (A NOT B)"
    },
    {
      "commit": "9bf19ff6b18505009f7d36b2e15d17705dee0534",
      "tree": "19c63e3cd4eb1c4971ccd47144d39d578005a391",
      "parents": [
        "f8018f0fcba672a58b9f56a8c5a8fbc0024d8f85"
      ],
      "author": {
        "name": "jaideeppyne",
        "email": "jaideeppyne1997@gmail.com",
        "time": "Wed Sep 16 10:41:48 2026 +0530"
      },
      "committer": {
        "name": "jaideeppyne",
        "email": "jaideeppyne1997@gmail.com",
        "time": "Wed Sep 16 10:41:48 2026 +0530"
      },
      "message": "fix(tdigest): preserve stored min and max when merging\n\nMerging a digest whose extreme centroids have weight greater than one\nre-derived min and max from those centroid means. Copy the stored extrema\nfrom the other digest first so rank and quantile tail interpolation stay\ncorrect, especially for deserialized images.\n"
    },
    {
      "commit": "c20bd8031c1284ab0639419f4c6fd8db6d8717bf",
      "tree": "a5952b5d723ed9b22c9d721f0c68ec74560aa519",
      "parents": [
        "f8018f0fcba672a58b9f56a8c5a8fbc0024d8f85"
      ],
      "author": {
        "name": "jaideeppyne",
        "email": "jaideeppyne1997@gmail.com",
        "time": "Wed Sep 16 05:06:29 2026 +0000"
      },
      "committer": {
        "name": "jaideeppyne",
        "email": "jaideeppyne1997@gmail.com",
        "time": "Wed Sep 16 05:06:29 2026 +0000"
      },
      "message": "Deprecate BloomFilter.invert and add difference (A NOT B)\n\ninvert() flips bits but has no sound set-membership reading; the only\ncomposition with a clean per-item meaning is A AND NOT B. Add\nBloomFilter.difference (bitwise AND-NOT), deprecate invert(), and mirror\nthe BitArray change as andNot. Aligns with datasketches-rust #278.\n\nFixes #766.\n"
    },
    {
      "commit": "5098a65c8c99e726e8f9a58ec23e8fff8d1a70f3",
      "tree": "2e9f8af7800a3ed592a3acaece7d0f944686bd50",
      "parents": [
        "f8018f0fcba672a58b9f56a8c5a8fbc0024d8f85"
      ],
      "author": {
        "name": "jaideeppyne",
        "email": "jaideeppyne1997@gmail.com",
        "time": "Wed Sep 16 04:59:04 2026 +0000"
      },
      "committer": {
        "name": "jaideeppyne",
        "email": "jaideeppyne1997@gmail.com",
        "time": "Wed Sep 16 04:59:04 2026 +0000"
      },
      "message": "Fix KllItemsSketch sorted-view flag after query before serialize\n\nCreateSortedView sorted a defensive copy from getTotalItemsArray() but\nstill called setLevelZeroSorted(true) on the heap sketch. Serialization\nthen claimed level-0 was sorted, so heapify/wrap skipped sorting and\nreturned a corrupted sorted view.\n\nDo not set the flag when only the copy was sorted. Doubles are unaffected\nbecause getDoubleItemsArray() returns the live array.\n\nFixes #756."
    },
    {
      "commit": "f8018f0fcba672a58b9f56a8c5a8fbc0024d8f85",
      "tree": "3c41b3763debb3e6172c8aff8195039697cdd133",
      "parents": [
        "20678c4d2f00de0ce04707f49848c609433bc525",
        "654c26bafd90c7bb3e1c9107d0b4729e8601bd27"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Sep 15 17:20:21 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:20:21 2026 -0700"
      },
      "message": "Merge pull request #765 from tisonkun/codex/tdigest-numeric-validation\n\nFix TDigest extreme means and validate serialized state"
    },
    {
      "commit": "20678c4d2f00de0ce04707f49848c609433bc525",
      "tree": "e967f7cc6abf4993a5759132de59e1da046da960",
      "parents": [
        "90319c208c99ee97b3bbfcb7e3ed911b4909884d",
        "accfafb0931306445e55de5ef9c00fa770cae204"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Sep 15 17:03:18 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:03:18 2026 -0700"
      },
      "message": "Merge pull request #762 from MaxFreedomPollard/fix-numdigits-zero-and-one\n\nFix Util.numDigits returning 0 for 0 and 1, and 18 for 1E18"
    },
    {
      "commit": "654c26bafd90c7bb3e1c9107d0b4729e8601bd27",
      "tree": "c03dd2877eb4a896203915553200dfd85408328e",
      "parents": [
        "dc0984c38e2dd762c9b8c769d91555d8ef5ef3f2"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Tue Sep 15 14:12:56 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Tue Sep 15 14:12:56 2026 +0800"
      },
      "message": "Accept TDigest images beyond local compression thresholds\n"
    },
    {
      "commit": "dc0984c38e2dd762c9b8c769d91555d8ef5ef3f2",
      "tree": "8c7c76b040df692951463a0094758864c77407a6",
      "parents": [
        "90319c208c99ee97b3bbfcb7e3ed911b4909884d"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Tue Sep 15 14:02:25 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Tue Sep 15 14:02:25 2026 +0800"
      },
      "message": "Fix TDigest extreme means and validate serialized state\n"
    },
    {
      "commit": "accfafb0931306445e55de5ef9c00fa770cae204",
      "tree": "dced3870c8280c7336c33e555bda5aaa1c1e7c9d",
      "parents": [
        "6498a90f1c4ca5e9aedf42d3b58565f1a9372216"
      ],
      "author": {
        "name": "Max Freedom Pollard",
        "email": "mfpollard@icloud.com",
        "time": "Mon Sep 14 18:15:44 2026 -0400"
      },
      "committer": {
        "name": "Max Freedom Pollard",
        "email": "mfpollard@icloud.com",
        "time": "Mon Sep 14 18:15:44 2026 -0400"
      },
      "message": "Check only the decimal-character transition points in checkNumDigits\n\nHalt the power-of-ten loop on signed overflow going negative rather than\non a maxExp constant, and drop the -1000..1000 sweep: the loop already\nvisits both sides of every transition where the character count changes.\n"
    },
    {
      "commit": "90319c208c99ee97b3bbfcb7e3ed911b4909884d",
      "tree": "d863f732175de1691edb9f60b2b5e75ed7722c4b",
      "parents": [
        "041ddb57a6c03d22d934721628375bace2bfd5cf",
        "63fcb766dcc0030e6659e81a78c8991db7ecb83e"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sat Sep 12 17:02:06 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 12 17:02:06 2026 -0700"
      },
      "message": "Merge pull request #763 from apache/theta-compact-trim\n\nAdd UpdatableThetaSketch.compactTrimmed() to compact and reduce to k in one pass"
    },
    {
      "commit": "6498a90f1c4ca5e9aedf42d3b58565f1a9372216",
      "tree": "cff6c10a2a017e4dbbf988eb905c70befc613711",
      "parents": [
        "6040f84c911aecdf5912aaf938d6db7d239d0848"
      ],
      "author": {
        "name": "Max Freedom Pollard",
        "email": "272618364+MaxFreedomPollard@users.noreply.github.com",
        "time": "Thu Sep 10 09:46:40 2026 -0400"
      },
      "committer": {
        "name": "Max Freedom Pollard",
        "email": "272618364+MaxFreedomPollard@users.noreply.github.com",
        "time": "Thu Sep 10 09:46:40 2026 -0400"
      },
      "message": "Drop the always true loop guard in checkNumDigits\n\nCodeQL flagged the power of ten loop in UtilTest.checkNumDigits as a\nuseless comparison test. The guard was (n \u003c Long.MAX_VALUE) \u0026\u0026 (n \u003e 0),\nand n \u003e 0 is always true there unless the multiply overflows, which a\nstatic analyser does not model.\n\nThe loop now counts the exponent from 0 to 18, every power of ten that\nfits in a signed long, and holds the multiply back on the last pass so\nnothing overflows. It visits the same 19 values, 1 through 1E18, and\nstill asserts numDigits(n) against String.valueOf(n).length(). The dense\nsweep from -1000 to 1000 and the two extreme values are unchanged.\n"
    },
    {
      "commit": "6040f84c911aecdf5912aaf938d6db7d239d0848",
      "tree": "1d981daa80d93ba908cd046bde3eee7c905a1637",
      "parents": [
        "bda4c332476ff6fcf4e7e6a5f3281dd3611ba882"
      ],
      "author": {
        "name": "Max Freedom Pollard",
        "email": "272618364+MaxFreedomPollard@users.noreply.github.com",
        "time": "Wed Sep 09 00:44:48 2026 -0400"
      },
      "committer": {
        "name": "Max Freedom Pollard",
        "email": "272618364+MaxFreedomPollard@users.noreply.github.com",
        "time": "Wed Sep 09 00:44:48 2026 -0400"
      },
      "message": "Make numDigits count characters including the minus sign\n\nApplied the review. numDigits now returns the minimum number of\ncharacters required to print n as a decimal, so a negative number adds\none for the minus sign character. Zero still returns 1. The javadoc now\nstates the assumed context, printing alignment of plainly expressed\ndecimal numbers with an optional minus sign and no commas, underscores\nor other special characters.\n\nThe parameter stays final, so the loop divides a local copy of n.\n\ncheckNumDigits no longer asserts hardcoded digit counts. It compares\nnumDigits(n) against String.valueOf(n).length() over -1000 to 1000,\nevery power of ten and every power of ten minus one in both signs,\nLong.MAX_VALUE and Long.MIN_VALUE.\n"
    },
    {
      "commit": "63fcb766dcc0030e6659e81a78c8991db7ecb83e",
      "tree": "d863f732175de1691edb9f60b2b5e75ed7722c4b",
      "parents": [
        "041ddb57a6c03d22d934721628375bace2bfd5cf"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Sep 07 19:35:16 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Sep 07 19:35:16 2026 -0700"
      },
      "message": "Add UpdatableThetaSketch.compactTrimmed() to compact and reduce to k in one pass\n\nAn update sketch retains more than the nominal size k between rebuilds. Callers\nwho need a result bounded by k currently have to call rebuild(), which mutates\nthe sketch and rebuilds its hash table, before compact().\n\nThis adds two concrete methods on UpdatableThetaSketch:\n\n    public CompactThetaSketch compactTrimmed()\n    public CompactThetaSketch compactTrimmed(boolean dstOrdered, MemorySegment dstWSeg)\n\nBoth are concrete on the base, so none of the subclasses change. A separate\nmethod rather than a trim flag on compact(): Java has no default parameter\nvalues, so a flag would only ever be passed true, and compact(dstOrdered,\nMemorySegment) is abstract with seven overriders, so its signature cannot grow\na parameter in any case.\n\nThe implementation gathers the valid entries into a dense array, since the\nmethod must not modify the sketch and QuickSelect.select permutes whatever\narray it is given, then selects 0-based index k. That is the same hash value\nthe (k + 1) 1-based pivot yields in rebuild(), so the two cannot drift apart,\nand a test asserts the result serializes byte-for-byte identically to\nrebuild() + compact().\n\nBecause it never mutates, this also works on a read-only sketch, where\nrebuild() throws SketchesReadOnlyException.\n\nThe Alpha family is excluded and throws UnsupportedOperationException: it\nmaintains theta by its own discipline and never needs reducing to k. The guard\nis a family denylist rather than a QuickSelect allowlist, because Theta\u0027s\nfamily names are historically fragmented and an allowlist could wrongly reject\na legitimate member.\n\nTrimming stays an explicit opt-in because it is lossy. Relative error scales\nwith 1 / sqrt(retained), so discarding entries always widens the confidence\nbounds, and a sketch in exact mode that retains more than k loses exactness and\nis returned in estimation mode. Both effects are documented and pinned by tests.\n\nThis is the Java counterpart of apache/datasketches-cpp#524.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_017EDHa7UhfW4eSj5L82panJ\n"
    },
    {
      "commit": "041ddb57a6c03d22d934721628375bace2bfd5cf",
      "tree": "3bd86d01a53a7522a714cdc5e21fe95a17a931ac",
      "parents": [
        "a5b488b560f9f1fb182aa8749d74ee4bd0f6442c",
        "9a488f9515a92aa418c45e510f1bae00bfca7108"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Sep 07 17:31:10 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 17:31:10 2026 -0700"
      },
      "message": "Merge pull request #761 from apache/hll-parity\n\nMake the deferred KxQ rebuild canonical, stop HIP drifting after a merge, set the compact flag for HLL_6/HLL_8"
    },
    {
      "commit": "a5b488b560f9f1fb182aa8749d74ee4bd0f6442c",
      "tree": "557fc2a68ce636137dbd6ceaeb133dcf9d8e44f9",
      "parents": [
        "325574e2a2ff07789ce5b8e860e7fc4d6f1a73a3",
        "1a49f80b1444d8592da87b291d6042d9f519382d"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Sep 07 17:29:51 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 17:29:51 2026 -0700"
      },
      "message": "Merge pull request #760 from permutive-engineering/fix/quickselect-sorted-input\n\nChoose the QuickSelect pivot by median of three"
    },
    {
      "commit": "325574e2a2ff07789ce5b8e860e7fc4d6f1a73a3",
      "tree": "21d857776303631768c7e2b097846c2e46ba6159",
      "parents": [
        "3a1bf7f2f22e78c0c227bbe409ce4b4f386f630c",
        "509903edef8c255e09de6b990851eb53de74ca58"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Sep 07 16:57:48 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 16:57:48 2026 -0700"
      },
      "message": "Merge pull request #759 from permutive-engineering/perf/cpc-union-memory-segment\n\nAdd CpcUnion.update(MemorySegment)"
    },
    {
      "commit": "bda4c332476ff6fcf4e7e6a5f3281dd3611ba882",
      "tree": "74d73acb8fe6c7d042e32f75442d4d19bd501695",
      "parents": [
        "3a1bf7f2f22e78c0c227bbe409ce4b4f386f630c"
      ],
      "author": {
        "name": "Max Freedom Pollard",
        "email": "272618364+MaxFreedomPollard@users.noreply.github.com",
        "time": "Mon Sep 07 09:10:12 2026 -0400"
      },
      "committer": {
        "name": "Max Freedom Pollard",
        "email": "272618364+MaxFreedomPollard@users.noreply.github.com",
        "time": "Mon Sep 07 09:10:12 2026 -0400"
      },
      "message": "Fix Util.numDigits returning 0 for 0 and 1, and 18 for 1E18\n\nnumDigits(0) and numDigits(1) both returned 0, and numDigits(1000000000000000000L) returned 18 instead of 19.\n\nUtil.java:805 nudged multiples of ten up by one and then took ceil(log(n) / log(10)). For n \u003d 0 and n \u003d 1 that is ceil(log(1) / log(10)), which is ceil(0.0), which is 0. For n \u003d 1E18 the nudged value 1000000000000000001 has no exact double, so it rounds back to 1E18 and the ratio comes out at 17.999999999999996.\n\nReplaced the floating point form with an exact integer loop, which has no representation limit anywhere in the long range. Zero and any negative now return 1, matching LongsAsOrderableStrings.digits in the test tree, which guards maxValue \u003c\u003d 0 the same way.\n\nAdded UtilTest.checkNumDigits.\n"
    },
    {
      "commit": "9a488f9515a92aa418c45e510f1bae00bfca7108",
      "tree": "2c77a76c1ccac46f1f146ddd11343da7f2f15387",
      "parents": [
        "3a1bf7f2f22e78c0c227bbe409ce4b4f386f630c"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sat Sep 05 15:16:14 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sat Sep 05 15:16:14 2026 -0700"
      },
      "message": "Make the deferred KxQ rebuild canonical, stop HIP drifting after a merge, set the compact flag for HLL_6/HLL_8\n\nFour defects in the HLL union\u0027s deferred rebuild and the flags it writes.\n\n1. checkRebuildCurMinNumKxQ stores the true minimum register value and the\ncount at that minimum, while Hll8Array.updateSlotWithKxQ maintains a different\nrepresentation, the one its own comment describes as \"interpret numAtCurMin as\nnum Zeros\", decrementing only when oldValue \u003d\u003d 0. When the merged array has no\nzero register the rebuild leaves curMin \u003e 0 and numAtCurMin is never\nmaintained again, so it freezes and drifts away from the registers. Because\nthe rebuild is triggered lazily by accessors this is directly observable:\ncalling getEstimate() changes the bytes a later getResult() produces. At\nlgMaxK 7, 8 and 9 the peeked and unpeeked images of the same content differ,\nwith the unpeeked one correct. Estimates and bounds are unaffected because\nboth consumers of numAtCurMin branch on curMin \u003d\u003d 0. Emit the canonical form\ninstead, so the rebuilt state is indistinguishable from the incrementally\nmaintained state and the timing of the rebuild is not observable.\n\n2. putOutOfOrder(true) zeroes hipAccum, but hipAndKxQIncrementalUpdate adds to\nit unconditionally, so every coupon applied after a merge keeps accumulating\ninto a field that is dead once out-of-order is set. The value reached is not a\nfunction of the content either: while the rebuild flag is pending the\nincrement is computed against the empty-sketch KxQ defaults, giving 131328 or\n396579 for the same sketch depending only on whether an estimate was read.\nThis is also what makes a union result\u0027s byte image merge-order dependent.\nGuard the accumulation on the out-of-order flag.\n\n3. HllArray.toCompactByteArray() returned toUpdatableByteArray(), so the\ncompact flag was never set for HLL_6 and HLL_8, while LIST, SET and HLL_4 all\nset it. The flag means both that the data is compacted where possible and that\nthe image is immutable; the second applies to every target type. Set it for\nthose two types as well, on the heap and direct paths, both of which operate\non a copy so a wrapped segment is never modified.\n\n4. The two relative-error constants were computed with Math.log, which is\nspecified only to within 1 ulp and may use a platform intrinsic. Pin them to\nthe literals Double.toString prints for the computed values, so neither\nimplementation computes a shared constant at runtime.\n\nThis changes serialized bytes: union results carry different curMin,\nnumAtCurMin and hipAccum, and HLL_6 and HLL_8 compact images differ by the\nflag bit. Reading is unaffected. One behavioural change beyond the bytes: a\ncompact image is treated as immutable, so writableWrap now rejects an HLL_6 or\nHLL_8 image produced by toCompactByteArray(), where it previously succeeded.\nCallers needing a writable wrap should use toUpdatableByteArray().\n\nHllSketchTest.checkCompactFlag is updated: all five modes now follow the\ntoByteArray request. Adds HllKxqRebuildTest; four of its five cases fail\nwithout this change, the fifth guards the constants against re-rounding.\n\nWith the companion datasketches-cpp changes, a 1041 record corpus spanning\nlgK 4..21, all three target types, 17 sizes across LIST/SET/HLL, round trips\nand 80 union scenarios goes from 428 differing records to 0, comparing every\nserialized byte, estimate, composite estimate and bound as raw IEEE bits.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "1a49f80b1444d8592da87b291d6042d9f519382d",
      "tree": "408c7848440ffc385e03ce1893b994ff091536ef",
      "parents": [
        "3a1bf7f2f22e78c0c227bbe409ce4b4f386f630c"
      ],
      "author": {
        "name": "David Cromberge",
        "email": "davecromberge@gmail.com",
        "time": "Thu Sep 03 14:12:36 2026 +0100"
      },
      "committer": {
        "name": "David Cromberge",
        "email": "davecromberge@gmail.com",
        "time": "Thu Sep 03 14:12:36 2026 +0100"
      },
      "message": "Choose the QuickSelect pivot by median of three\n\npartition took its pivot from a fixed position, arr[lo]. On an ordered range that\nis the smallest element, so each partition strips one element instead of about\nhalf, and select becomes quadratic. At 16k elements it costs 100,667,391\ncomparisons where 32,727 suffice.\n\nUsing the median of arr[lo], the middle and arr[hi] makes an ordered range the\nbest case rather than the worst, since the middle element of an ordered range is\nits true median. It also leaves arr[hi] \u003e\u003d the pivot, which bounds the ascending\nscan, so both scans drop their per-element bound check.\n\nNo caller reaches the quadratic case today: every one passes an array read out of\na hash table, and theta indexes slots by the low bits of the hash, which are\nindependent of its magnitude. Feeding a union gadget strictly ascending hashes\nstill yields a table whose ascending-adjacent-pair fraction is 0.51. The exposure\nis QuickSelect being public API, where ordered input is unremarkable, and a\ncompact ordered sketch\u0027s hashes are sorted.\n\nSpeed on the library\u0027s own inputs is unchanged either way, within 6% in both\ndirections depending on how full the hash table is.\n\nThe existing tests all shuffle before asserting, so ordered input was never\ncovered. They now also run ascending, descending and all-equal input, plus a\nlarge ordered array under a time limit, which is the only way the quadratic path\ncan be caught given it returns the correct value.\n"
    },
    {
      "commit": "509903edef8c255e09de6b990851eb53de74ca58",
      "tree": "4e9434eec93e7a3474266434d841532764a60098",
      "parents": [
        "d5cce9b3ad3f7c39faabcebb7f3934c4f73f14fc"
      ],
      "author": {
        "name": "David Cromberge",
        "email": "davecromberge@gmail.com",
        "time": "Wed Sep 02 13:58:53 2026 +0100"
      },
      "committer": {
        "name": "David Cromberge",
        "email": "davecromberge@gmail.com",
        "time": "Thu Sep 03 10:28:20 2026 +0100"
      },
      "message": "Add CpcUnion.update(MemorySegment)\n\nMerging a stored sketch had to uncompress it into a CpcSketch first, build that\nsketch\u0027s pair table, and then walk the table to OR its coupons into the union\u0027s\nbit matrix. Where the union already holds a bit matrix the coupons can be\ndecoded straight into it, which skips the pair table and the second walk.\n\nSparse, Hybrid and Pinned images decode directly, reusing the union\u0027s existing\norWindowIntoMatrix. Sliding partly inverts its logic, so a coupon can be\nsignalled by the absence of a pair in the surprises table; those, and unions\nstill holding a sparse accumulator, uncompress a sketch as before.\n\nuncompressTheWindow now returns the window instead of assigning it into a\ntarget sketch, matching uncompressTheSurprisingValues beside it, so both decode\nprimitives can serve either caller.\n\nMeasured with a new characterization profile that merges 32 stored sketches at\nlgK\u003d12: roughly a third less time per sketch across the range that decodes\ndirectly, and unchanged where it falls back. The profile\u0027s fallback arm runs\nidentical code in both configurations, so its spread bounds the noise at a few\npercent.\n"
    },
    {
      "commit": "3a1bf7f2f22e78c0c227bbe409ce4b4f386f630c",
      "tree": "d994682edf9fb76c6ad4faca43e45c6288d4d79a",
      "parents": [
        "936b7ce3e2f910ddcf2a39013cf9fca034b2180c",
        "a2ab8cf41e9e9e8fa2501d75da0ebb8ab6cffbc1"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 02 16:09:25 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 16:09:25 2026 -0700"
      },
      "message": "Merge pull request #755 from jaideeppyne/tdigest-rank-left-tail\n\nFix swapped interpolation weights and tail branches in TDigestDouble"
    },
    {
      "commit": "a2ab8cf41e9e9e8fa2501d75da0ebb8ab6cffbc1",
      "tree": "d994682edf9fb76c6ad4faca43e45c6288d4d79a",
      "parents": [
        "642fbdfa677e3e766afdc562ec7b4d7861272c76"
      ],
      "author": {
        "name": "jaideeppyne",
        "email": "jaideeppyne1997@gmail.com",
        "time": "Sun Aug 30 10:41:53 2026 +0530"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 02 15:47:28 2026 -0700"
      },
      "message": "Fix swapped interpolation weights and right tail in getQuantile()\n\nThe interpolation passed weightedAverage(mean[i], w1, mean[i+1], w2) where the\nreference passes the weights in the opposite order, so the estimate moved toward\nthe lower centroid as the rank rose within a bracket. This made getQuantile()\nnon-monotonic for ordinary update() sequences and cost about an order of\nmagnitude of rank accuracy.\n\nThe right tail also added the interpolated offset to maxValue_ instead of\nsubtracting it, returning quantiles above getMaxValue().\n"
    },
    {
      "commit": "642fbdfa677e3e766afdc562ec7b4d7861272c76",
      "tree": "a04d7e3c63b9a1dd71fd5834ae2d0c250307f41f",
      "parents": [
        "936b7ce3e2f910ddcf2a39013cf9fca034b2180c"
      ],
      "author": {
        "name": "jaideeppyne",
        "email": "jaideeppyne1997@gmail.com",
        "time": "Sun Aug 30 10:33:03 2026 +0530"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 02 15:47:07 2026 -0700"
      },
      "message": "Normalize the left tail of TDigestDouble.getRank()\n\nThe left tail branch returned the interpolated weight without dividing by\ncentroidsWeight_, unlike the mirror-image right tail branch and the reference\nimplementation. Reachable via heapify() when the first centroid has weight\ngreater than 1, making getRank() exceed its documented [0, 1] range.\n"
    },
    {
      "commit": "936b7ce3e2f910ddcf2a39013cf9fca034b2180c",
      "tree": "9b0ebbe3af566448300f72142b3287a43c7ec169",
      "parents": [
        "b99450364c213aee6d3fbc40d986b776d8b8e8d8",
        "7e41b3af92615c7c96edda53eabbb820cd8e4bc4"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 02 13:38:34 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 13:38:34 2026 -0700"
      },
      "message": "Merge pull request #758 from permutive-engineering/perf/theta-union-avoid-gadget-copy\n\nAvoid copying the union gadget\u0027s hash table when it will not be mutated"
    },
    {
      "commit": "b99450364c213aee6d3fbc40d986b776d8b8e8d8",
      "tree": "501f06eaf6dc80317f183f17917e5063af4d2e14",
      "parents": [
        "1034fb33b6e013334ff870f130b9c388cae5dfa9",
        "83731e61072bf900a07fc2961675d8c388e01abe"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 02 13:35:57 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 13:35:57 2026 -0700"
      },
      "message": "Merge pull request #757 from permutive-engineering/fix/cpc-wrapper-empty-sketch\n\nFix CpcWrapper throwing on empty sketches"
    },
    {
      "commit": "1034fb33b6e013334ff870f130b9c388cae5dfa9",
      "tree": "fd9a34ab15e3ef9344555d7c2ae02ece2c15a172",
      "parents": [
        "9e4ee1ac5dda7c00492763469c638418ce00bdc2",
        "212bc51814fea7751832a1322636cd86c33889dc"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 02 12:31:38 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 12:31:38 2026 -0700"
      },
      "message": "Merge pull request #740 from apache/xorfilter\n\nAdd Xor Filter to the filters package"
    },
    {
      "commit": "9e4ee1ac5dda7c00492763469c638418ce00bdc2",
      "tree": "078b6aae496cf71589465ed6a640c021afb25f16",
      "parents": [
        "d5cce9b3ad3f7c39faabcebb7f3934c4f73f14fc",
        "c7665a09bd75ea254445f2616491dbcc8b5b677f"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 02 10:27:59 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 10:27:59 2026 -0700"
      },
      "message": "Merge pull request #754 from apache/update_cross_language_testing\n\nUpdates cross-language-testing"
    },
    {
      "commit": "c7665a09bd75ea254445f2616491dbcc8b5b677f",
      "tree": "078b6aae496cf71589465ed6a640c021afb25f16",
      "parents": [
        "35286647ee9d44735422f0a2294d21809d9495b1"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 02 10:10:35 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Sep 02 10:10:35 2026 -0700"
      },
      "message": "Correct spelling of profile actions in serde-compat.yml"
    },
    {
      "commit": "7e41b3af92615c7c96edda53eabbb820cd8e4bc4",
      "tree": "d16683846f713f7e44483111671831d2789d1537",
      "parents": [
        "d5cce9b3ad3f7c39faabcebb7f3934c4f73f14fc"
      ],
      "author": {
        "name": "David Cromberge",
        "email": "davecromberge@gmail.com",
        "time": "Wed Sep 02 13:21:38 2026 +0100"
      },
      "committer": {
        "name": "David Cromberge",
        "email": "davecromberge@gmail.com",
        "time": "Wed Sep 02 13:21:38 2026 +0100"
      },
      "message": "Avoid copying the union gadget\u0027s hash table when it will not be mutated\n\nselectExcludingZeros permutes the array it is given, but it only runs when the\ngadget holds more than k. Below that, count() and compactCache() only read, so\nan on-heap gadget\u0027s table can be read in place.\n\nFor a union that ends in exact mode this removes the dominant allocation of\ngetResult(): 73,800 to 8,248 bytes per call at lgK\u003d12, and 294,984 to 32,824 at\nlgK\u003d14. Estimation mode is unchanged, since there the copy is still required.\n"
    },
    {
      "commit": "83731e61072bf900a07fc2961675d8c388e01abe",
      "tree": "ba388fb6ace425582f85f63c6c78fcbd76a18040",
      "parents": [
        "d5cce9b3ad3f7c39faabcebb7f3934c4f73f14fc"
      ],
      "author": {
        "name": "David Cromberge",
        "email": "davecromberge@gmail.com",
        "time": "Wed Sep 02 09:46:48 2026 +0100"
      },
      "committer": {
        "name": "David Cromberge",
        "email": "davecromberge@gmail.com",
        "time": "Wed Sep 02 09:46:48 2026 +0100"
      },
      "message": "Fix CpcWrapper throwing on empty sketches\n\nAn empty CPC image carries none of the high preamble fields, but getEstimate()\nand the two bound methods read them regardless, so every empty sketch throws\nSketchesStateException. Empty now reports zero coupons and a zero HIP\naccumulator, matching what CpcSketch reports.\n"
    },
    {
      "commit": "35286647ee9d44735422f0a2294d21809d9495b1",
      "tree": "0500347ddbc70db0888571573f27d96efde527ab",
      "parents": [
        "20019188582a2af44468c7c93f4e13ced90c6eb7"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Sep 01 21:12:09 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Sep 01 21:12:09 2026 -0700"
      },
      "message": "Cleaned up a confusing nasty issue with \u0027project.root\u0027"
    },
    {
      "commit": "20019188582a2af44468c7c93f4e13ced90c6eb7",
      "tree": "018578ab446bd90f89e2d125217100b04b0c5df0",
      "parents": [
        "738ea0ca0792a66e0c9974af5e72c03ad1dd8ea3"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Sep 01 15:44:27 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Sep 01 15:44:27 2026 -0700"
      },
      "message": "Enable dynamic printing of cross-language fileNames read or written from\na Maven test:\n\nmvn clean test -Pcheck_java_files -Dprint\u003dtrue\n"
    },
    {
      "commit": "738ea0ca0792a66e0c9974af5e72c03ad1dd8ea3",
      "tree": "33aed8dff08e682c3f4fa8277b89618e25e5f88b",
      "parents": [
        "0874a0c21c49c534665f880cec212a58535cf3e3"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Sep 01 14:16:33 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Sep 01 14:16:33 2026 -0700"
      },
      "message": "Corrected some missing cross-language tests."
    },
    {
      "commit": "0874a0c21c49c534665f880cec212a58535cf3e3",
      "tree": "aa7980b3406a672b113b66f0d126a2ac3a8dfb86",
      "parents": [
        "683f3ed9281358ac227b96f5960a7efb970115d3"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Aug 31 17:03:35 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Aug 31 17:03:35 2026 -0700"
      },
      "message": "Removed Checkstyle\n\nAdded better docs to mvn_clean_install_or_deploy.sh\n\nAdded files read, files written and file warnings at end of test suite."
    },
    {
      "commit": "683f3ed9281358ac227b96f5960a7efb970115d3",
      "tree": "2546330b5b0993c5b16bfd92b00d3934a5170f50",
      "parents": [
        "bb1530560085396ddb866e113d52466ba65f7129"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Aug 31 15:04:11 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Aug 31 15:04:11 2026 -0700"
      },
      "message": "Update GHA workflows with latest GitHub Actions versions"
    },
    {
      "commit": "bb1530560085396ddb866e113d52466ba65f7129",
      "tree": "b261fdff156010fd7709cd80cf91e598b19cd5be",
      "parents": [
        "91d8d2026f7167b70986e82fdb3b900ca5c055dc"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Aug 31 14:28:27 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Aug 31 14:28:27 2026 -0700"
      },
      "message": "Update serde-compat.yml to manual trigger only."
    },
    {
      "commit": "91d8d2026f7167b70986e82fdb3b900ca5c055dc",
      "tree": "14ae3d54c9e9723fbbaeaf6cbbb8c49c4977c960",
      "parents": [
        "9b1d44a28e2aeb26e56d1526d39eebaac87aa673"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sun Aug 30 13:40:03 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sun Aug 30 13:40:03 2026 -0700"
      },
      "message": "Reworked the two BoundsOnRatios*SketchedSets."
    },
    {
      "commit": "9b1d44a28e2aeb26e56d1526d39eebaac87aa673",
      "tree": "33312ed1c2d144a6b390785de1082afbc021e6c1",
      "parents": [
        "d4d0ca0cf165579ff1dfac03ace541f933329bc0"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sat Aug 29 17:17:26 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sat Aug 29 17:30:10 2026 -0700"
      },
      "message": "Claude helped me fix some problems that Gemini could not figure out.\n\n1. Running tests with just the jars works, including finding or\nspecifying the root of the \u0027serialization_test_data\u0027 directory.\n\n2. Fixed some subtle javadoc typos and misstatements\n\n3. Added DocLint testing at two levels of the code."
    },
    {
      "commit": "d4d0ca0cf165579ff1dfac03ace541f933329bc0",
      "tree": "588e9c24554c79d632b0bcc98b76deefac8504dd",
      "parents": [
        "d5cce9b3ad3f7c39faabcebb7f3934c4f73f14fc"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Aug 26 17:46:04 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Aug 26 17:46:04 2026 -0700"
      },
      "message": "Updates cross-language-testing"
    },
    {
      "commit": "d5cce9b3ad3f7c39faabcebb7f3934c4f73f14fc",
      "tree": "4802d04a8b8f730934443f20e1a6036e944d6c94",
      "parents": [
        "72b04b04ff26701a3daf421d22371337176f0694",
        "a035f41e98e39ce74d4742d664901ec02b543a1d"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Thu Aug 13 11:07:30 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 11:07:30 2026 -0700"
      },
      "message": "Merge pull request #753 from apache/codex/download-tck-snapshots\n\nDownload SerDe snapshots from datasketches-tck"
    },
    {
      "commit": "a035f41e98e39ce74d4742d664901ec02b543a1d",
      "tree": "4802d04a8b8f730934443f20e1a6036e944d6c94",
      "parents": [
        "9944956217506e4115dbcb3f3be72d7bf3e43dff"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Aug 13 22:55:03 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Aug 13 22:55:03 2026 +0800"
      },
      "message": "ci: extract TCK snapshots in one pass\n"
    },
    {
      "commit": "9944956217506e4115dbcb3f3be72d7bf3e43dff",
      "tree": "2a30139225292f053c95c2617b80e2ed2f3d2192",
      "parents": [
        "c778535215ffb6bcbee14a26c4da75710f787b48"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Aug 13 22:51:30 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Aug 13 22:51:30 2026 +0800"
      },
      "message": "ci: use shell for SerDe snapshot setup\n"
    },
    {
      "commit": "c778535215ffb6bcbee14a26c4da75710f787b48",
      "tree": "f59b84c758519bda01e7194a0b029ff3d353cee5",
      "parents": [
        "72b04b04ff26701a3daf421d22371337176f0694"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Aug 13 22:27:36 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Aug 13 22:27:36 2026 +0800"
      },
      "message": "ci: download snapshots from datasketches-tck\n"
    },
    {
      "commit": "72b04b04ff26701a3daf421d22371337176f0694",
      "tree": "72024c1978b90babf87d7943fec72b949807944a",
      "parents": [
        "8cbe9874d295773abe4bbffe621b34c8c4baf7e9",
        "a46ba846cc14cddbec10f88144dbdde2ced69525"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Aug 11 17:58:54 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 17:58:54 2026 -0700"
      },
      "message": "Merge pull request #752 from apache/update_main\n\nFix some minor issues prior to potential release."
    },
    {
      "commit": "a46ba846cc14cddbec10f88144dbdde2ced69525",
      "tree": "72024c1978b90babf87d7943fec72b949807944a",
      "parents": [
        "8cbe9874d295773abe4bbffe621b34c8c4baf7e9"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Aug 11 13:49:55 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Aug 11 13:49:55 2026 -0700"
      },
      "message": "Fix some minor issues prior to potential release.\n"
    },
    {
      "commit": "8cbe9874d295773abe4bbffe621b34c8c4baf7e9",
      "tree": "3e0de1a86934e08416f23e9c42bf80760f9ecc34",
      "parents": [
        "4067ffefabbcd03944dc3617ff2948ab760f3b75",
        "c0b2e3273cd8d39f480be3d71a00c86f4bdbbe4e"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Aug 11 10:41:59 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 10:41:59 2026 -0700"
      },
      "message": "Merge pull request #751 from apache/refactor_pom\n\nUpdate POM."
    },
    {
      "commit": "c0b2e3273cd8d39f480be3d71a00c86f4bdbbe4e",
      "tree": "3e0de1a86934e08416f23e9c42bf80760f9ecc34",
      "parents": [
        "0073fb1dbf1c57a7b010b840a545951fd260c15f"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Aug 10 13:24:50 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Aug 10 13:24:50 2026 -0700"
      },
      "message": "Removed git-commit-tag because it is not reliable and unnecessary"
    },
    {
      "commit": "0073fb1dbf1c57a7b010b840a545951fd260c15f",
      "tree": "4aef5431b70282d5f76e7ede9673adfb79ca06a7",
      "parents": [
        "4067ffefabbcd03944dc3617ff2948ab760f3b75"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Aug 10 12:59:49 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Aug 10 13:16:01 2026 -0700"
      },
      "message": "Update POM.\n\nPerforming an install or deploy is now performed by\ntools/mvn_clean_install_or_deploy.sh. This script will add to the jar\nmanifests 4 useful values from git (if present) branch, commit-id,\ncommit-time and commit-user-email. If git is not present these values\nwill appear as \"unknown\".\n\nInstall and deploy will also create the source zip file into .m2 ready\nfor uploading to Apache /dist/.\n\nAll artifacts will be signed by GPG, but the user will still need to\ncreate the sha512 checksums."
    },
    {
      "commit": "4067ffefabbcd03944dc3617ff2948ab760f3b75",
      "tree": "159d50f4dadbfb4cf9dee9282565f1125b22b005",
      "parents": [
        "73689aa7b950f053c4f0d781cbea32b0267a0bbc",
        "1158cc3c16bbdc2b70126af3520d124f01440830"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sun Aug 02 14:12:23 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 02 14:12:23 2026 -0700"
      },
      "message": "Merge pull request #750 from apache/update_main_get_resource_file_bytes\n\nCleans up the org.apache.datasketches.common.Util.java class."
    },
    {
      "commit": "1158cc3c16bbdc2b70126af3520d124f01440830",
      "tree": "159d50f4dadbfb4cf9dee9282565f1125b22b005",
      "parents": [
        "3c90d175a9e9f4ef8f10c7c05c78bb0de7010d83"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Sun Aug 02 14:08:00 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Sun Aug 02 14:08:00 2026 -0700"
      },
      "message": "Fix permissions issue and missed exception."
    },
    {
      "commit": "3c90d175a9e9f4ef8f10c7c05c78bb0de7010d83",
      "tree": "b325bca48456a9e18090a8599cf7d08a09d6509f",
      "parents": [
        "73689aa7b950f053c4f0d781cbea32b0267a0bbc"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Sun Aug 02 13:17:57 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Sun Aug 02 13:22:27 2026 -0700"
      },
      "message": "Cleans up the org.apache.datasketches.common.Util.java class.\n\nAdds getFile functions that are Posix, Windows and Jar friendly.\n\nFixes a typo in the pom.xml."
    },
    {
      "commit": "73689aa7b950f053c4f0d781cbea32b0267a0bbc",
      "tree": "2933eb63d563ab22533f126eda585afd34f2082d",
      "parents": [
        "56fc75e1cd5fbbdcbce25c465b28ae545ac1d786",
        "1793a5775910292f373f56c33d1b9a8589ebf8dc"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Jul 27 18:28:21 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 18:28:21 2026 -0700"
      },
      "message": "Merge pull request #749 from apache/minor_updates_to_main\n\nUpdate maven.config and ManualJavadocsDeploy.sh."
    },
    {
      "commit": "1793a5775910292f373f56c33d1b9a8589ebf8dc",
      "tree": "2933eb63d563ab22533f126eda585afd34f2082d",
      "parents": [
        "56fc75e1cd5fbbdcbce25c465b28ae545ac1d786"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 27 14:57:07 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 27 15:11:51 2026 -0700"
      },
      "message": "Update maven.config and ManualJavadocsDeploy.sh.\nRemove tools/FindBugsExcludeFilter.xml it is not used."
    },
    {
      "commit": "56fc75e1cd5fbbdcbce25c465b28ae545ac1d786",
      "tree": "b2a6107884c3b8de4392e061f2ba34ff5c427c34",
      "parents": [
        "dfecca54979e3fade264c41f8182fe955eb2e7d0",
        "1501de3834cffa2f0b8b6ab3aea19508dc63c273"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Jul 22 22:19:51 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 22:19:51 2026 -0700"
      },
      "message": "Merge pull request #748 from apache/update_cpp-serde-compat-yml\n\nUpdate workflow cpp-serde-compat-yml"
    },
    {
      "commit": "1501de3834cffa2f0b8b6ab3aea19508dc63c273",
      "tree": "b2a6107884c3b8de4392e061f2ba34ff5c427c34",
      "parents": [
        "1795c642567fc9a85476372b81e5db8e402dd91f"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Wed Jul 22 17:54:08 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Wed Jul 22 17:54:08 2026 -0700"
      },
      "message": "Update actions/upload-artifact from v4 to v7"
    },
    {
      "commit": "1795c642567fc9a85476372b81e5db8e402dd91f",
      "tree": "1a80b7ece6ebf077491e40fde75429b545f9737c",
      "parents": [
        "05188b2fc90e5eaaf84d637a3704b850208edc81"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Wed Jul 22 17:36:35 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Wed Jul 22 17:36:35 2026 -0700"
      },
      "message": "Minor name change to match the actual directory name"
    },
    {
      "commit": "05188b2fc90e5eaaf84d637a3704b850208edc81",
      "tree": "696ef434c1650725b382e981c76128e2ec620ec9",
      "parents": [
        "dfecca54979e3fade264c41f8182fe955eb2e7d0"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Wed Jul 22 16:57:20 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Wed Jul 22 16:57:20 2026 -0700"
      },
      "message": "Update workflow cpp-serde-compat-yml"
    },
    {
      "commit": "dfecca54979e3fade264c41f8182fe955eb2e7d0",
      "tree": "14e11662f26891fd0dd69098a360f04e84ac7fb3",
      "parents": [
        "439af89c7b9103c2633edc77eb506c4cffcacafa",
        "30c7b2fb5898f23725efc0d9c034923f062de90f"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Jul 22 15:22:04 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 15:22:04 2026 -0700"
      },
      "message": "Merge pull request #747 from apache/fix_typo_on_javadoc-yml\n\nFix typo on javadoc.yml"
    },
    {
      "commit": "30c7b2fb5898f23725efc0d9c034923f062de90f",
      "tree": "14e11662f26891fd0dd69098a360f04e84ac7fb3",
      "parents": [
        "439af89c7b9103c2633edc77eb506c4cffcacafa"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Wed Jul 22 14:31:37 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Wed Jul 22 14:31:37 2026 -0700"
      },
      "message": "Fix typo on javadoc.yml"
    },
    {
      "commit": "439af89c7b9103c2633edc77eb506c4cffcacafa",
      "tree": "a0af15416992809b49368997cc079dd0b27c7196",
      "parents": [
        "c2ea76dad07879e9c60c6b1cccc7a0914c938868",
        "d66b0d347d78dd75e4b9d3ddec7dc411dffae619"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Jul 21 17:42:13 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 17:42:13 2026 -0700"
      },
      "message": "Merge pull request #746 from apache/update_javadoc-yml\n\nupdate javadoc.yml"
    },
    {
      "commit": "d66b0d347d78dd75e4b9d3ddec7dc411dffae619",
      "tree": "a0af15416992809b49368997cc079dd0b27c7196",
      "parents": [
        "c2ea76dad07879e9c60c6b1cccc7a0914c938868"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Tue Jul 21 16:59:12 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Tue Jul 21 16:59:12 2026 -0700"
      },
      "message": "update javadoc.yml"
    },
    {
      "commit": "c2ea76dad07879e9c60c6b1cccc7a0914c938868",
      "tree": "5a1b3a551bdf6713547ef41aaa423be4c61de02d",
      "parents": [
        "ee0a215b29db716a5cff7c04d14abd682cf64fc1",
        "e9d53b5b2612330d3e0a753a0b0809fe6a949c32"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Jul 20 18:44:13 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 18:44:13 2026 -0700"
      },
      "message": "Merge pull request #745 from apache/update_github_workflow\n\nUpdate GitHub workflow"
    },
    {
      "commit": "e9d53b5b2612330d3e0a753a0b0809fe6a949c32",
      "tree": "5a1b3a551bdf6713547ef41aaa423be4c61de02d",
      "parents": [
        "f8aed9c8cfeb104a1e395370e24292ffc434958b"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 17:41:41 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 17:41:41 2026 -0700"
      },
      "message": "Fix pom issues"
    },
    {
      "commit": "f8aed9c8cfeb104a1e395370e24292ffc434958b",
      "tree": "68abaa75ad50bd9fe217c856122683b30306cb8c",
      "parents": [
        "614c9fefa89f22f8600282f8e9c1109f264cf99d"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 17:07:19 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 17:07:19 2026 -0700"
      },
      "message": "add empty jvm_args."
    },
    {
      "commit": "614c9fefa89f22f8600282f8e9c1109f264cf99d",
      "tree": "9c0c218394eabde270da5a8f8429f3286572183b",
      "parents": [
        "3bd98262e51a27c4962a80f7b3411e73fdb411ad",
        "ee0a215b29db716a5cff7c04d14abd682cf64fc1"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 15:42:10 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 15:42:10 2026 -0700"
      },
      "message": "Merge branch \u0027main\u0027 into update_github_workflow"
    },
    {
      "commit": "ee0a215b29db716a5cff7c04d14abd682cf64fc1",
      "tree": "bfa19ee724c61feaf47a4cd3e8ca73d165d643b9",
      "parents": [
        "4125f8f9b284e52f0f1d21d96fc6c40103e7e678",
        "f37adf5c905fb51258c92843a5c6c71983be769e"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Mon Jul 20 15:40:02 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 15:40:02 2026 -0700"
      },
      "message": "Merge pull request #742 from PerumalsamyR/fix-tdigest-nan-centroid-mean\n\nPrevent NaN centroid means in TDigestDouble (#702)"
    },
    {
      "commit": "3bd98262e51a27c4962a80f7b3411e73fdb411ad",
      "tree": "99bb8335bfb17a1da6d7ed96610e526ff270bfe0",
      "parents": [
        "cb687bd2a6a9e4900721b1fff82fdcce34c884ec"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 15:37:06 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 15:37:06 2026 -0700"
      },
      "message": "Update to use for Java 25 FFM"
    },
    {
      "commit": "cb687bd2a6a9e4900721b1fff82fdcce34c884ec",
      "tree": "22c136f2c99dfbe2d107f94e6a1a546ca74c9090",
      "parents": [
        "0b1d93fd464b9a4b308d42e2ec7bfa7130e11d96"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 15:14:45 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 15:14:45 2026 -0700"
      },
      "message": "delete old workflows"
    },
    {
      "commit": "0b1d93fd464b9a4b308d42e2ec7bfa7130e11d96",
      "tree": "5fbfc302b8c1eb8a090dfebac2cb517f90334f93",
      "parents": [
        "4125f8f9b284e52f0f1d21d96fc6c40103e7e678"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 15:04:29 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 20 15:04:29 2026 -0700"
      },
      "message": "Update github workflow"
    },
    {
      "commit": "4125f8f9b284e52f0f1d21d96fc6c40103e7e678",
      "tree": "f5763a145b11ce723a72afb19df500ea4c091a4a",
      "parents": [
        "be5c2ae0fb84657f7913aaa8a491716a92353921",
        "a764e395ab81ea813ba851c14db8b8c246da2d4c"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sat Jul 18 10:41:08 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 10:41:08 2026 -0700"
      },
      "message": "Merge pull request #743 from apache/cleanup_tests\n\nClean up tests."
    },
    {
      "commit": "a764e395ab81ea813ba851c14db8b8c246da2d4c",
      "tree": "f5763a145b11ce723a72afb19df500ea4c091a4a",
      "parents": [
        "be5c2ae0fb84657f7913aaa8a491716a92353921"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Fri Jul 17 12:28:00 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Fri Jul 17 12:28:00 2026 -0700"
      },
      "message": "Clean up tests."
    },
    {
      "commit": "f37adf5c905fb51258c92843a5c6c71983be769e",
      "tree": "ae800da0b053176b1457bcb166e40756e5c202cb",
      "parents": [
        "be5c2ae0fb84657f7913aaa8a491716a92353921"
      ],
      "author": {
        "name": "PerumalsamyR",
        "email": "perumalsamy.r@outlook.com",
        "time": "Tue Jul 14 23:58:18 2026 -0700"
      },
      "committer": {
        "name": "PerumalsamyR",
        "email": "perumalsamy.r@outlook.com",
        "time": "Tue Jul 14 23:58:18 2026 -0700"
      },
      "message": "Prevent NaN centroid means in TDigestDouble\n\nMerging centroids used the incremental mean update\nmean + (value - mean) * w / weight, where the intermediate difference or\nproduct can overflow to infinity for finite values of large magnitude,\neventually turning stored centroid means into NaN. Fall back to an\noverflow-safe weighted average when that happens, and normalize weights\nin weightedAverage so quantile interpolation cannot overflow either.\n\nAlso ignore infinite values in update(), consistent with NaN handling,\nand validate deserialized state (finite min/max, centroid means and\nbuffered values, positive centroid weights), since serialized input\ncannot be assumed to be well-formed.\n\nAddresses #702\n"
    },
    {
      "commit": "be5c2ae0fb84657f7913aaa8a491716a92353921",
      "tree": "29556ddf39b1b87bf11414b3d9d16a0698e2504f",
      "parents": [
        "887d569af1bdaf9491346674c8751d714e39c239",
        "5cca613baff1c72661c2a34e064b8be691be3e6f"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Tue Jul 14 09:59:49 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 09:59:49 2026 -0700"
      },
      "message": "Merge pull request #741 from apache/update_main_remove-editorconfig\n\nadded to git mistakenly."
    },
    {
      "commit": "5cca613baff1c72661c2a34e064b8be691be3e6f",
      "tree": "29556ddf39b1b87bf11414b3d9d16a0698e2504f",
      "parents": [
        "887d569af1bdaf9491346674c8751d714e39c239"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 13 16:43:38 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Jul 13 16:43:38 2026 -0700"
      },
      "message": "added to git mistakenly.\n"
    },
    {
      "commit": "212bc51814fea7751832a1322636cd86c33889dc",
      "tree": "db57f093bd82063bc567c96858283b516f4c421a",
      "parents": [
        "36b02bd5e1b8d2cdd22694b314cdf6b1eec6b1db"
      ],
      "author": {
        "name": "Pierre Lacave",
        "email": "pierre.lacave@datadoghq.com",
        "time": "Mon Jul 13 12:11:24 2026 +0200"
      },
      "committer": {
        "name": "Pierre Lacave",
        "email": "pierre.lacave@datadoghq.com",
        "time": "Mon Jul 13 12:11:24 2026 +0200"
      },
      "message": "Fix CodeQL useless-comparison alert in XorFilter construction loop\n\nHoist the construction-failure throw out of the peeling loop so the loop can terminate through its own bound. Previously the last iteration always exited via break or throw, making the \u0027attempt \u003c MAX_ITERATIONS\u0027 condition provably always-true (CodeQL java/constant-comparison). Behavior is unchanged; the success check now runs after the loop.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "36b02bd5e1b8d2cdd22694b314cdf6b1eec6b1db",
      "tree": "8fe402c23f70b28f319839ac5f5e40ab5fff82e3",
      "parents": [
        "887d569af1bdaf9491346674c8751d714e39c239"
      ],
      "author": {
        "name": "Pierre Lacave",
        "email": "pierre.lacave@datadoghq.com",
        "time": "Mon Jul 13 11:47:50 2026 +0200"
      },
      "committer": {
        "name": "Pierre Lacave",
        "email": "pierre.lacave@datadoghq.com",
        "time": "Mon Jul 13 11:47:50 2026 +0200"
      },
      "message": "Initial version of xorfilter\n"
    },
    {
      "commit": "887d569af1bdaf9491346674c8751d714e39c239",
      "tree": "3fe78a77e57f764287f05c14609710a72a1d2135",
      "parents": [
        "8d906a8c689747df47ade63522388a83632d8add",
        "198995f7bc81fc2052a003f947dcb37a50107841"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Thu Jul 09 22:19:08 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 22:19:08 2026 -0700"
      },
      "message": "Merge pull request #738 from apache/update_gitignore\n\nUpdate gitignore"
    },
    {
      "commit": "198995f7bc81fc2052a003f947dcb37a50107841",
      "tree": "3fe78a77e57f764287f05c14609710a72a1d2135",
      "parents": [
        "8d906a8c689747df47ade63522388a83632d8add"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Wed Jul 08 10:38:58 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Wed Jul 08 10:38:58 2026 -0700"
      },
      "message": "Update gitignore"
    },
    {
      "commit": "8d906a8c689747df47ade63522388a83632d8add",
      "tree": "3f89fc79e15eb43581d899dbbf00660a2da28a5c",
      "parents": [
        "f0e754e2178f683e087e0594dab6914a95bb1a6b",
        "15354ff0e6a4e8960102934ca6f8c5b0cfeb2d2a"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sun Jul 05 13:17:07 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 05 13:17:07 2026 -0700"
      },
      "message": "Merge pull request #734 from proost/fix-respect-negative-values\n\nfix: respect negative values on deserialization in REQ sketch"
    },
    {
      "commit": "f0e754e2178f683e087e0594dab6914a95bb1a6b",
      "tree": "fb70ff8d25106d6ee77c5caa98c7cc051c7d5fe7",
      "parents": [
        "395c4ea8c8c33f3de9165bf0eafde9b169bfadf7",
        "04c673f2915dec7b017fd0bbea3d3e5a087ca94d"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Sun Jul 05 12:17:09 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 05 12:17:09 2026 -0700"
      },
      "message": "Merge pull request #737 from apache/update_main\n\nAdd HllUnion.update(HllUnion)"
    },
    {
      "commit": "04c673f2915dec7b017fd0bbea3d3e5a087ca94d",
      "tree": "fb70ff8d25106d6ee77c5caa98c7cc051c7d5fe7",
      "parents": [
        "16a8a31129cc3b2ad5d85496b91e32fc9293371b"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Sun Jul 05 12:08:21 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Sun Jul 05 12:08:21 2026 -0700"
      },
      "message": "Remove unused inputs."
    },
    {
      "commit": "16a8a31129cc3b2ad5d85496b91e32fc9293371b",
      "tree": "5393dab32986418efa5a3693c20b92bc03385f0c",
      "parents": [
        "f98acf0d95b1afec1ec3c1c5c328a11374a13af8"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Tue Jun 30 14:46:06 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Tue Jun 30 14:46:06 2026 -0700"
      },
      "message": "Update PR#737\n"
    },
    {
      "commit": "f98acf0d95b1afec1ec3c1c5c328a11374a13af8",
      "tree": "ce83f434298ecedf8366dc5abb9427df263a9190",
      "parents": [
        "730f0ce3b2157fd4a756f93ec4a12c3070d884b3"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Tue Jun 30 13:42:56 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Tue Jun 30 13:42:56 2026 -0700"
      },
      "message": "suppress printing"
    },
    {
      "commit": "730f0ce3b2157fd4a756f93ec4a12c3070d884b3",
      "tree": "48a60dc8c3fd163b60ead0cba8aa99152508728c",
      "parents": [
        "395c4ea8c8c33f3de9165bf0eafde9b169bfadf7"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Tue Jun 30 13:42:04 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Tue Jun 30 13:42:04 2026 -0700"
      },
      "message": "Adds union of unions."
    },
    {
      "commit": "395c4ea8c8c33f3de9165bf0eafde9b169bfadf7",
      "tree": "ade465ae45c5e98d20731fcfe315285a042fe70e",
      "parents": [
        "db0cf79242e602b5e113d1c5444f2ff798c51de0"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Fri May 22 23:31:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 23:31:13 2026 +0800"
      },
      "message": "chore: Add a link to datasketches-rust to README.md (#736)"
    },
    {
      "commit": "15354ff0e6a4e8960102934ca6f8c5b0cfeb2d2a",
      "tree": "359df6562135b84d31bea6cb80d2d3e61e5354c8",
      "parents": [
        "be4646f7d9a2259448e0a6e8bcc4a8196f027e7d"
      ],
      "author": {
        "name": "lani_karrot",
        "email": "lani@daangn.com",
        "time": "Fri May 15 11:30:45 2026 +0900"
      },
      "committer": {
        "name": "lani_karrot",
        "email": "lani@daangn.com",
        "time": "Fri May 15 11:30:45 2026 +0900"
      },
      "message": "fix: remove guard\n"
    },
    {
      "commit": "be4646f7d9a2259448e0a6e8bcc4a8196f027e7d",
      "tree": "ff2730ddfff93e04eace95ec51fbe63bab01e3bf",
      "parents": [
        "d67731a309a28e2c7bad4571b9c318c5599476b0"
      ],
      "author": {
        "name": "lani_karrot",
        "email": "lani@daangn.com",
        "time": "Fri May 15 11:11:47 2026 +0900"
      },
      "committer": {
        "name": "lani_karrot",
        "email": "lani@daangn.com",
        "time": "Fri May 15 11:11:47 2026 +0900"
      },
      "message": "fix: init with Inf\n"
    },
    {
      "commit": "d67731a309a28e2c7bad4571b9c318c5599476b0",
      "tree": "8cddf495e616436bf97587462d30c9ae763c9b56",
      "parents": [
        "8535219194ba685f4abfe2ba9eab43bd4221a508"
      ],
      "author": {
        "name": "proost",
        "email": "proost@apache.org",
        "time": "Thu May 14 00:28:52 2026 +0900"
      },
      "committer": {
        "name": "proost",
        "email": "proost@apache.org",
        "time": "Thu May 14 00:28:52 2026 +0900"
      },
      "message": "fix: init with NaN\n"
    },
    {
      "commit": "8535219194ba685f4abfe2ba9eab43bd4221a508",
      "tree": "97f459cece07aeb5e64cf7e8cf6c9ddd9453a995",
      "parents": [
        "6a514db312af307f0f6fb32262ec7e4b868d5ca3"
      ],
      "author": {
        "name": "lani_karrot",
        "email": "lani@daangn.com",
        "time": "Sat Apr 25 20:21:57 2026 +0900"
      },
      "committer": {
        "name": "lani_karrot",
        "email": "lani@daangn.com",
        "time": "Sat Apr 25 20:21:57 2026 +0900"
      },
      "message": "test: remove c++ compat test cases\n"
    },
    {
      "commit": "6a514db312af307f0f6fb32262ec7e4b868d5ca3",
      "tree": "fe960011ffc2f13106f8822b8d43f0e853341782",
      "parents": [
        "e532b7fefa8ed732c2e351b10d729fcf37c1f35f"
      ],
      "author": {
        "name": "lani_karrot",
        "email": "lani@daangn.com",
        "time": "Sat Apr 25 17:35:55 2026 +0900"
      },
      "committer": {
        "name": "lani_karrot",
        "email": "lani@daangn.com",
        "time": "Sat Apr 25 17:35:55 2026 +0900"
      },
      "message": "test: add cases from C++ deserialize\n"
    },
    {
      "commit": "e532b7fefa8ed732c2e351b10d729fcf37c1f35f",
      "tree": "4e17bcae5dee419270a5118ad3dd95462ef17fa3",
      "parents": [
        "db0cf79242e602b5e113d1c5444f2ff798c51de0"
      ],
      "author": {
        "name": "lani_karrot",
        "email": "lani@daangn.com",
        "time": "Sat Apr 25 17:12:02 2026 +0900"
      },
      "committer": {
        "name": "lani_karrot",
        "email": "lani@daangn.com",
        "time": "Sat Apr 25 17:12:02 2026 +0900"
      },
      "message": "fix: respect negative values on deserialization in REQ sketch\n"
    },
    {
      "commit": "db0cf79242e602b5e113d1c5444f2ff798c51de0",
      "tree": "9624bdea439ed090b1a6380277f674b43815cbaa",
      "parents": [
        "9255b508e2047217aceeee6e059af72fd631e14b",
        "3281f767fa5d0d1ded4d47d88e68832e5cfc6771"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@users.noreply.github.com",
        "time": "Wed Apr 22 10:39:34 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 10:39:34 2026 -0700"
      },
      "message": "Merge pull request #732 from apache/update_main\n\nupdate update_main"
    },
    {
      "commit": "9255b508e2047217aceeee6e059af72fd631e14b",
      "tree": "84dc82a40989f102b6d314046be1450a99b95981",
      "parents": [
        "67c3b9109daf21d7d5028db1a304491f12a6f857",
        "69e1b7704194c563b4b9f364efd2d702b8992f9d"
      ],
      "author": {
        "name": "Hyeonho Kim",
        "email": "proost@apache.org",
        "time": "Tue Apr 14 15:24:40 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 15:24:40 2026 +0900"
      },
      "message": "Merge pull request #733 from proost/fix-inconsistency-in-sorted-view\n\nfix: inconsistency in sorted view"
    },
    {
      "commit": "69e1b7704194c563b4b9f364efd2d702b8992f9d",
      "tree": "84dc82a40989f102b6d314046be1450a99b95981",
      "parents": [
        "7b229f31b9693fb2c32e89e141c146fde5359253"
      ],
      "author": {
        "name": "proost",
        "email": "proost@apache.org",
        "time": "Fri Apr 10 17:24:05 2026 +0900"
      },
      "committer": {
        "name": "proost",
        "email": "proost@apache.org",
        "time": "Fri Apr 10 17:24:05 2026 +0900"
      },
      "message": "fix: raise exception in generic\n"
    },
    {
      "commit": "7b229f31b9693fb2c32e89e141c146fde5359253",
      "tree": "dda71107113e65e604c49e2685b36f932700e313",
      "parents": [
        "7eff3a8d573b7d2ebdbe20f224f4d745a9b3fd7e"
      ],
      "author": {
        "name": "proost",
        "email": "proost@apache.org",
        "time": "Fri Apr 10 17:23:50 2026 +0900"
      },
      "committer": {
        "name": "proost",
        "email": "proost@apache.org",
        "time": "Fri Apr 10 17:23:50 2026 +0900"
      },
      "message": "fix: raise exception in floats\n"
    },
    {
      "commit": "7eff3a8d573b7d2ebdbe20f224f4d745a9b3fd7e",
      "tree": "9d1e746349b9ef069a6f2d67bbca64861f3a0803",
      "parents": [
        "9284cc643ae3b996613cc4a9fcf8e3dd62e0cade"
      ],
      "author": {
        "name": "proost",
        "email": "proost@apache.org",
        "time": "Fri Apr 10 17:23:17 2026 +0900"
      },
      "committer": {
        "name": "proost",
        "email": "proost@apache.org",
        "time": "Fri Apr 10 17:23:17 2026 +0900"
      },
      "message": "fix: raise exception when empty in longs\n"
    },
    {
      "commit": "9284cc643ae3b996613cc4a9fcf8e3dd62e0cade",
      "tree": "c3d021106711e8b3ac15e2d825a9a71b4292147e",
      "parents": [
        "67c3b9109daf21d7d5028db1a304491f12a6f857"
      ],
      "author": {
        "name": "proost",
        "email": "proost@apache.org",
        "time": "Fri Apr 10 17:22:53 2026 +0900"
      },
      "committer": {
        "name": "proost",
        "email": "proost@apache.org",
        "time": "Fri Apr 10 17:22:53 2026 +0900"
      },
      "message": "fix: raise excepton when empty in double\n"
    },
    {
      "commit": "3281f767fa5d0d1ded4d47d88e68832e5cfc6771",
      "tree": "f482bf663326a43ef863baf1002af73583f3de85",
      "parents": [
        "dbc6979c58b00a1cdd3c15021a79fbb78ddaf0f0"
      ],
      "author": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Apr 06 17:03:00 2026 -0700"
      },
      "committer": {
        "name": "Lee Rhodes",
        "email": "leerho@gmail.com",
        "time": "Mon Apr 06 17:03:00 2026 -0700"
      },
      "message": "Update pom"
    }
  ],
  "next": "dbc6979c58b00a1cdd3c15021a79fbb78ddaf0f0"
}
