)]}'
{
  "log": [
    {
      "commit": "faff2de4a3608361b52ddf52cc4ac273da463ef9",
      "tree": "46532947684651af1bdc87e3c2c06a3ed4c39477",
      "parents": [
        "9aa60646a45d75d2f93bd4c7ab5741c47b075ecf"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 20 11:45:15 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 20 11:45:15 2026 +0800"
      },
      "message": "Rename crate to iotdb-client-rust (iotdb-client is taken on crates.io); keep iotdb_client as the lib import name\n"
    },
    {
      "commit": "9aa60646a45d75d2f93bd4c7ab5741c47b075ecf",
      "tree": "c426c6c5d628db9d7b5255aafa974af45516f159",
      "parents": [
        "0ef4f488818815f444191ee11cd971b3407ea4a3"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 20 11:35:11 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 20 11:35:11 2026 +0800"
      },
      "message": "CI: bind dn_rpc_address to 0.0.0.0 for the 2.0.10 service container (2.0.10+ images default to 127.0.0.1, refusing connections through docker\u0027s port mapping)\n"
    },
    {
      "commit": "0ef4f488818815f444191ee11cd971b3407ea4a3",
      "tree": "cc4843a6d771d72b6b8d08e2f7bfcd0fbe367b50",
      "parents": [
        "6445ccdd24d8fa46927a667c4e64842a11ccd205"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 20 11:20:50 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 20 11:20:50 2026 +0800"
      },
      "message": "CI: match the DataNode banner specifically when waiting for IoTDB (standalone image\u0027s ConfigNode prints its own \u0027set up successfully\u0027 line first, so the generic match passed before the DataNode was listening)\n"
    },
    {
      "commit": "6445ccdd24d8fa46927a667c4e64842a11ccd205",
      "tree": "9673709b22d1b7702be08dea3461df24b35eed15",
      "parents": [
        "2d4cc2133475621563c137bf41ed891a557ab61e"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 20 11:12:48 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 20 11:12:48 2026 +0800"
      },
      "message": "CI: wait for DataNode startup banner in container logs instead of a TCP probe (docker port proxy accepts before DataNode listens, causing connection resets on slower startups)\n"
    },
    {
      "commit": "2d4cc2133475621563c137bf41ed891a557ab61e",
      "tree": "1235729a4156ca7f77a8acd519277ffd831f30a2",
      "parents": [
        "d01a2fc85749ea561a31f3111929130155358240"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 20 10:55:44 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 20 11:06:23 2026 +0800"
      },
      "message": "Add ASF repo metadata: .asf.yaml, NOTICE; pin third-party CI actions to commit SHAs (ASF Infra policy)\n"
    },
    {
      "commit": "d01a2fc85749ea561a31f3111929130155358240",
      "tree": "6092ac2937056fb5d2d23681477732009d606e2d",
      "parents": [
        "6cefccc9575adfa8df38ad8e1430a065eff70e86"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 17 11:50:08 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 17 11:50:08 2026 +0800"
      },
      "message": "Add COMPATIBILITY.md (server version matrix, per-release IDL/Thrift toolchain, SemVer/deprecation policy); CI integration matrix now tests IoTDB 2.0.6 + 2.0.10\n"
    },
    {
      "commit": "6cefccc9575adfa8df38ad8e1430a065eff70e86",
      "tree": "0180a7c85b5fee2ae70f1cf4b94fd5be6262bebe",
      "parents": [
        "424b416f9c1e49a01a301a4e448a659c568e3b9c"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jul 14 16:44:44 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jul 15 11:48:54 2026 +0800"
      },
      "message": "Fix BLOB readback (physical TEXT column with non-UTF-8 payload kept as Blob for logical re-tag); add verify_write example (2 TAG + 2 ATTRIBUTE + all 10 FIELD types, nulls per row)\n"
    },
    {
      "commit": "424b416f9c1e49a01a301a4e448a659c568e3b9c",
      "tree": "0468640b9d80d5b03aa57f7de63113c6b96063b3",
      "parents": [
        "d6d3ed3e989af4c3004764f03bc02a49e615d283"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jul 14 12:35:58 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jul 14 12:35:58 2026 +0800"
      },
      "message": "Benchmark: --datatype mixed|double flag (all-DOUBLE matches iot-benchmark comparison config)\n"
    },
    {
      "commit": "d6d3ed3e989af4c3004764f03bc02a49e615d283",
      "tree": "4019ebec7080b289ddfa7643d3f4a16e7c6ad09d",
      "parents": [
        "713bfffd603800eb98065c17df10df6533336e08"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 19:32:40 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 19:32:40 2026 +0800"
      },
      "message": "Benchmark: mirror iot-benchmark measurement semantics (prep inside timed span, failures excluded from latency, Result/Latency Matrix output with P10-P999 + SLOWEST_THREAD)\n"
    },
    {
      "commit": "713bfffd603800eb98065c17df10df6533336e08",
      "tree": "626f2a651ef1c10abb7e03361058091938f0e734",
      "parents": [
        "6d64d2a87b4e612423227b25daebba367b9cbca8"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 16:40:05 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 16:40:05 2026 +0800"
      },
      "message": "Bump benchmark container to 4G heap + 1G direct memory (eliminates flush-stall latency spikes; pin ConfigNode to 512M)\n"
    },
    {
      "commit": "6d64d2a87b4e612423227b25daebba367b9cbca8",
      "tree": "b674d85431abfdbf10fb343f5575db8c698a1229",
      "parents": [
        "460dfd8156781cb6338522cfa30ebc8c172bd4a0"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 15:26:14 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 15:26:14 2026 +0800"
      },
      "message": "Benchmark scale-up: --reuse-tablets (bounded memory) + --tablets-per-rpc (insert_tablets batching); 22.5M pts/s sustained over 250M points, server-side bottleneck attributed (1G heap flush stalls)\n"
    },
    {
      "commit": "460dfd8156781cb6338522cfa30ebc8c172bd4a0",
      "tree": "480680f5eeabe2c1323cfc0f3bb200301e5c5880",
      "parents": [
        "c7dcdc140e072b5b764aaf6e3cc2a4896fcd1e5e"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 14:53:08 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 14:53:08 2026 +0800"
      },
      "message": "TLS hardening: nodejs-style dispatch tests (wire-byte assertion), mutual TLS client identity (cert/key PEM), real end-to-end TLS verified vs IoTDB 2.0.6 (enable_thrift_ssl, TLSv1.3, full cert verification)\n"
    },
    {
      "commit": "c7dcdc140e072b5b764aaf6e3cc2a4896fcd1e5e",
      "tree": "07129226570abdbaa4334b33a04859811dfbc8b8",
      "parents": [
        "bb1a1d0ac6f6b387cee589a1024bed1f60cd02d5"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 14:16:59 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 14:16:59 2026 +0800"
      },
      "message": "V5: TLS (feature-gated, native-tls shared-stream channel) + RPC compression (compact protocol; server requires dn_rpc_thrift_compression_enable — no auto-detection, spec corrected)\n"
    },
    {
      "commit": "bb1a1d0ac6f6b387cee589a1024bed1f60cd02d5",
      "tree": "47ff452188086e65728f98cfec38692c5fc36eae",
      "parents": [
        "2a830b0bc706ab426d74418b5d41cbc57774efd7"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 13:53:34 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 13:53:34 2026 +0800"
      },
      "message": "V6: write benchmark suite (examples/benchmark.rs) mirroring Node.js/iot-benchmark methodology; tree 9.7M pts/s @ 10M points, 8 clients, 1000-row tablets\n"
    },
    {
      "commit": "2a830b0bc706ab426d74418b5d41cbc57774efd7",
      "tree": "ad432709a0be80999e0cd2b9e8ebf779332a56b8",
      "parents": [
        "346a0e01b4023f9770424406aa85148e0b231968"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 12:36:29 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 12:36:29 2026 +0800"
      },
      "message": "V4: insert_tablets batch (tree only, per-tablet redirect harvest) + pool lazy idle eviction (max_idle_time 60s, sweep on activity, min_size floor)\n"
    },
    {
      "commit": "346a0e01b4023f9770424406aa85148e0b231968",
      "tree": "d98d5495fe1dbf1f8e883289fb87356a32292cb6",
      "parents": [
        "cf3d9001e70a782a89f5e8d1e8914918c7a413cf"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 11:01:34 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 11:01:34 2026 +0800"
      },
      "message": "V3: auto-reconnect with endpoint failover (C#-style, original error surfaces); write-redirect cache (TTL+eviction) with pool acquire_for_device routing\n"
    },
    {
      "commit": "cf3d9001e70a782a89f5e8d1e8914918c7a413cf",
      "tree": "9fa5a4b3b4a35b98f6b768efb551bfc5f23b9f76",
      "parents": [
        "f5be5860721c4fadb86bddbc524ef99c950a3950"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 10:32:18 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 10:32:18 2026 +0800"
      },
      "message": "V2: insert_record(s) + insert_records_of_one_device with aligned variants; row-oriented value buffer (type marker + BE payload), Java-style null-cell filtering\n"
    },
    {
      "commit": "f5be5860721c4fadb86bddbc524ef99c950a3950",
      "tree": "fce931d7dddd83a37b6a16eca19fe68532b5f38d",
      "parents": [
        "7377de3d21b9ed6c1d3c41c3e33e0b3826a3aebf"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 10:11:28 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Mon Jul 13 10:11:28 2026 +0800"
      },
      "message": "V1: DATE live adjudication test; re-tag logical types (DATE/TIMESTAMP/STRING/BLOB) from dataTypeList in row assembly\n"
    },
    {
      "commit": "7377de3d21b9ed6c1d3c41c3e33e0b3826a3aebf",
      "tree": "770f8c977ba8cfeee4cdd3736b2a185ce35d6863",
      "parents": [
        "2e25d013a46f0262c6a4c60c6b2b858dc9993e42"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 18:17:03 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 18:17:03 2026 +0800"
      },
      "message": "Address audit findings: value-asserting live insert/readback test (16 rows, nulls, unsorted input); run examples in CI integration job\n"
    },
    {
      "commit": "2e25d013a46f0262c6a4c60c6b2b858dc9993e42",
      "tree": "4befa8f7e23f55110ab1c4e44185f3f5f38a26ab",
      "parents": [
        "658fe28e2def97d3d15506fcb04ea9fe760cf859"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 17:50:38 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 17:50:38 2026 +0800"
      },
      "message": "Phase 6: README EN/ZH, runnable examples, GitHub Actions CI, Apache 2.0 license headers; fix null-bitmap size at 8-row boundary\n"
    },
    {
      "commit": "658fe28e2def97d3d15506fcb04ea9fe760cf859",
      "tree": "60ce43c37c9418cd8d2d4d1d4d0f34c2a01c2ad9",
      "parents": [
        "b56c6c3b7d2689edd4576122273208d18669c86d"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 17:35:06 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 17:35:06 2026 +0800"
      },
      "message": "Phase 4-5: SessionDataSet iterator, TableSession, SessionPool/TableSessionPool; live integration verified against IoTDB 2.0.6\n"
    },
    {
      "commit": "b56c6c3b7d2689edd4576122273208d18669c86d",
      "tree": "5e5c5b033905bc38a610e133268c02247e08d626",
      "parents": [
        "d768d5ae9c27feac11c36f5a219dce81e3aaf54f"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 17:07:03 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 17:07:03 2026 +0800"
      },
      "message": "Phase 2-3: connection + session layer (open/query/insert RPC), data layer (Tablet serialization, TsBlock decoder)\n"
    },
    {
      "commit": "d768d5ae9c27feac11c36f5a219dce81e3aaf54f",
      "tree": "a2d65db85cd2aa356f074704cafb9287dd5078c7",
      "parents": [
        "61f1c729aa1fe24698a06d0c545e60d8ef6ed0ea"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 16:51:41 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 16:51:41 2026 +0800"
      },
      "message": "Phase 1: generate Thrift stubs from iotdb-protocol IDL via IoTDB Maven toolchain\n"
    },
    {
      "commit": "61f1c729aa1fe24698a06d0c545e60d8ef6ed0ea",
      "tree": "6c300ece120994ef83af5e6b8932223979dc47da",
      "parents": [],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 16:31:56 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jul 10 16:31:56 2026 +0800"
      },
      "message": "Initial scaffold: session/connection/data/protocol skeleton with Thrift IDL\n"
    }
  ]
}
