)]}'
{
  "log": [
    {
      "commit": "e32ef58b48e0ef88c829177f3944574eadade47a",
      "tree": "b3ea1d280b5f655c5876f0fc233f7671d025c53f",
      "parents": [
        "dd3f417ae405efcc652fc586d110433196f2ffd1"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 21:25:39 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 21:25:39 2026 +0800"
      },
      "message": "release 0.1.2\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "dd3f417ae405efcc652fc586d110433196f2ffd1",
      "tree": "4b33beadb9e934f936cf1eac6df72ad5a5e858c1",
      "parents": [
        "77703c45e009907b9a1bebe429b44135b84ebe62"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 21:22:57 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 21:22:57 2026 +0800"
      },
      "message": "fix(parser): keep per-operator counters when a PlanInfo block precedes them\n\nOn Doris 5.0.0 profiles every operator carrying a \"- PlanInfo\" block lost its\ncounters: the block never terminated, so the counter lines that follow it —\nwhich share the \"- key: value\" shape of plan-info items — were swallowed into\nplan_info. RowsProduced went missing, so output_rows came back null and the\ndownstream total_scan_rows summed to 0 and serialized as null. Only operators\nwithout a PlanInfo block (e.g. LOCAL_EXCHANGE_OPERATOR(PASSTHROUGH)) survived,\nwhich is why the failure looked scan-specific but was not.\n\nTerminate the PlanInfo block by indentation — its real structural signal —\ninstead of line shape: the block ends as soon as a line dedents back to the\n\"- PlanInfo\" header\u0027s indent or shallower. This covers both the Doris 3/4\nlayout (CommonCounters/CustomCounters group headers) and the Doris 5 layout\n(counters sit directly at the PlanInfo level). A content/shape check cannot work\nbecause a scalar plan-info item like \"- offset: 0\" is indistinguishable from a\ncounter like \"- InputRows: 0\".\n\nTests:\n- unit regressions for the Doris 3/4 and Doris 5 operator layouts\n- strengthen the real-profile test so every PlanInfo-bearing operator must still\n  surface its counters\n- e2e (suite_profile): assert AGGREGATION surfaces output_rows and that no\n  PlanInfo-bearing operator loses its counters; verified against a real\n  selectdb-5.0.0 cluster (24 pass / 0 fail)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "77703c45e009907b9a1bebe429b44135b84ebe62",
      "tree": "17ce91d8f05b46f0e16995d194bae87f7f8bbb4f",
      "parents": [
        "40526babb45915f1845a9d454e39ccb437299b32"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 17:28:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 30 17:28:35 2026 +0800"
      },
      "message": "docs: add release runbook (RELEASING.md) and document npm install in README (#3)\n\nAdd RELEASING.md, a release-manager guide for the @apache-doris npm release\nprocess: version source, the Automation-token / scoped-name / chmod\nrequirements, dry-run validation, tagging, verification, and troubleshooting.\n\nAdd an Install section to the README presenting\n`npm install -g @apache-doris/doriscli` as the recommended install method,\nwith build-from-source kept as the fallback.\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "40526babb45915f1845a9d454e39ccb437299b32",
      "tree": "cbc6da8568a7a8636a1bd46e9693c1318f550ceb",
      "parents": [
        "8f5b0bf2c6886e71870f0ed9c9276ad303ba1909"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 17:05:30 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 17:05:30 2026 +0800"
      },
      "message": "fix(release-npm): ship executable binaries; release 0.1.1\n\nThe prebuilt platform binary is chmod 0755 when its package is assembled in\nthe build job, but actions/upload-artifact strips the Unix executable bit,\nso the publish job packed a 0644 binary. Platform packages declare no `bin`\nentry, so npm does not fix it up on install and the launcher fails with\nEACCES. Re-apply 0755 to each platform binary after download, before\nnpm publish.\n\n0.1.0 shipped with this bug and is immutable, so bump to 0.1.1.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "8f5b0bf2c6886e71870f0ed9c9276ad303ba1909",
      "tree": "676d54b981afc1db552be3661be4357b2dff6685",
      "parents": [
        "52ed35dcda0612783f63bba2fe50918e31c8435a"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 16:25:21 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 16:25:21 2026 +0800"
      },
      "message": "build(npm): publish under the @apache-doris scope\n\nRename the npm packages from unscoped (doriscli, doriscli-\u003cplat\u003e) to the\n@apache-doris org scope (@apache-doris/doriscli, @apache-doris/doriscli-\u003cplat\u003e)\nto match the apache-doris npm org and its scoped publish token. The bin\nlauncher resolves the scoped platform package and build-packages.cjs emits\nscoped names + optionalDependencies; install instructions/messages follow.\nThe dist/ directory layout is unchanged, so release-npm.yml needs no edits.\n\nAlso repoint homepage/repository and the README/launcher links from the\npersonal fork to github.com/apache/doris-cli.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "52ed35dcda0612783f63bba2fe50918e31c8435a",
      "tree": "da4b452cb6089ddaf9385c9bdaded858394c0702",
      "parents": [
        "8298a91fccbe749dc13deb17cf077523f8d6879d"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 15:52:07 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 15:52:07 2026 +0800"
      },
      "message": "ci: add PR build + unit-test gate\n\nAdd .github/workflows/ci.yml: on pull_request to main and pushes to main,\nbuild the crate (cargo build --all-targets --locked) and run the DB-free\ncargo unit tests (cargo test --locked) on darwin-arm64, linux-x64 and\nlinux-arm64. Reuses the local setup-rust-toolchain action and caches the\ncargo registry + target dir via actions/cache, so it stays within the\napache org GitHub Actions allowlist. The live-cluster e2e shell suite\n(tests/e2e) is intentionally excluded.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "8298a91fccbe749dc13deb17cf077523f8d6879d",
      "tree": "51585101dd575f47b38cfe2864eb23a92e24f9fd",
      "parents": [
        "bb44c80344e077b5747fecefdfbd1b431efe9300"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 15:52:07 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 15:52:07 2026 +0800"
      },
      "message": "ci(release-npm): drop darwin-x64 and win32-x64 release targets\n\nStop building and publishing the Intel macOS (x86_64-apple-darwin) and\nWindows (x86_64-pc-windows-msvc) prebuilt binaries. Remove both from the\nrelease matrix and from npm/doriscli/platforms.js -- the single source of\ntruth for the bin launcher and packaging -- so the main npm package no\nlonger advertises optional platform packages that are never published.\nUsers on those platforms now get the launcher\u0027s clean \"unsupported\nplatform -- build from source\" message.\n\nAlso drop the now-unused setup-nasm local action (it existed only to build\nvendored OpenSSL on Windows) and fix the README\u0027s supported-platform list.\nRemaining targets: darwin-arm64, linux-x64, linux-arm64.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "bb44c80344e077b5747fecefdfbd1b431efe9300",
      "tree": "387894ab4f81c9878267456a79c1989b5ef6ddb0",
      "parents": [
        "a9c7befa0cc3cfdc02e95e35d39813a099256bff"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 11:36:56 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 11:36:56 2026 +0800"
      },
      "message": "ci(release-npm): replace allowlist-blocked actions with local ones\n\napache/doris-cli enforces an org-level GitHub Actions allowlist that\nrejects third-party actions such as dtolnay/rust-toolchain and\nilammy/setup-nasm. Reimplement both as local composite actions under\n.github/actions, referenced by in-repo relative path, following the\napache/doris .github/actions pattern.\n\nThe allowlist is enforced transitively, so the local actions do the work\ndirectly via the rustup/choco that ship on the runners instead of\nwrapping the blocked actions.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "a9c7befa0cc3cfdc02e95e35d39813a099256bff",
      "tree": "db692ae15ba835c23e745a979d2c756d2c1131a1",
      "parents": [
        "9df2a270062df0fc120b416a18a0e54a54f2f5bd"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 11:27:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 30 11:27:08 2026 +0800"
      },
      "message": "build(npm): publish doriscli to npm via prebuilt per-platform packages (#2)\n\nDistribute the Rust binary through npm using the esbuild model: a thin\n`doriscli` launcher package resolves and execs the prebuilt binary shipped\nin a matching optional platform sub-package (doriscli-\u003cos\u003e-\u003ccpu\u003e), which npm\nselects via os/cpu constraints — no Rust toolchain or build step on install.\n\n- npm/doriscli: launcher + shared platform table + package template + readme\n- npm/build-packages.cjs: assembles npm/dist/* (version single-sourced from Cargo.toml)\n- .github/workflows/release-npm.yml: cross-compile 5 targets, publish on a v* tag;\n  manual runs default to a --dry-run validation (no token, no version consumed)\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "9df2a270062df0fc120b416a18a0e54a54f2f5bd",
      "tree": "4ece6abdfd16f58269a75c894e563bb19be93df5",
      "parents": [
        "758c8fb80a909b838f7268a9662df731d09b5f88"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 10:01:36 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 10:24:51 2026 +0800"
      },
      "message": "test(e2e): drive the profile suite against real parsed profiles\n\nRework the profile e2e suite to send real SQL with --profile, fetch the\nreal profile over the FE HTTP API, and assert on the PARSED VALUES rather\nthan just the JSON shape: query_id round-trip, real SQL text, positive\ntotal_time_ms, SCAN+AGG operators, total_scan_rows ~\u003d loaded rows, exactly\n3 non-empty fragments, extracted physical_plan, parsed changed_session_vars\n(incl. enable_profile), a join operator + \u003e\u003d2 scans, and a real diff.\n\nThe FE HTTP profile API is now required (it is the only source of profile\ntext): if it is unreachable these tests FAIL instead of silently SKIP. A\nsuccessful --raw fetch is captured to tests/e2e/fixtures/sample_profile.txt,\nwhich activates the offline parser regression test.\n\nAlso strengthen the sql (real query_id format, exec_time_ms) and tablet\n(per-tablet/backend fields, partition attribution) assertions, add the\nexpect_parsed/_capture_profile_fixture helpers, and update the README.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "758c8fb80a909b838f7268a9662df731d09b5f88",
      "tree": "da1bd3b4db01f6aa6c05374fed2bf384918792d6",
      "parents": [
        "497db00e1588720109a62d0066d0a5c4c7dab7fc"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 10:01:25 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 10:01:25 2026 +0800"
      },
      "message": "fix(profile): parse section names \u0026 session vars across Doris versions\n\nDoris spells profile section headers differently across versions, and the\nparser recognized only one spelling, corrupting the parsed result on\nclusters using the other:\n\n- split_sections now matches spaced and non-spaced spellings\n  (\"ChangedSessionVariables\"/\"Changed Session Variables\",\n  \"PhysicalPlan\"/\"Physical Plan\") and normalizes them to one key, and\n  treats DetailProfile(...) and Appendix as section boundaries so their\n  bodies no longer bleed into MergedProfile and fabricate empty fragments\n  (which inflated fragment_count, e.g. 3 -\u003e 6).\n- parse_session_vars now accepts the JSON-array form emitted by newer\n  versions, falling back to the legacy pipe-delimited table.\n\nWithout these, fragment_count was inflated, the Physical Plan section was\ndropped, and changed_session_vars came back empty. Adds an offline unit\ntest for the section boundaries/spellings and strengthens the real-profile\nregression test.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "497db00e1588720109a62d0066d0a5c4c7dab7fc",
      "tree": "b5755272a9d18f7de7c24d70f28048dcc45cba68",
      "parents": [
        "43dfbff8383299b707977e39e4a1268e5debd188"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 10:01:14 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Sat May 30 10:01:14 2026 +0800"
      },
      "message": "fix(test): use portable octal escape in events data generator\n\nThe events INSERT generator in tests/e2e/data.sh quoted SQL string\nliterals with awk\u0027s `\\x27` hex escape. macOS\u0027s awk (BWK awk) reads `\\xNN`\ngreedily across all following hex digits, so `\\x27` adjacent to hex-digit\ncontent (e.g. `\\x272024-01-01`) mangled the bytes into non-UTF-8 output,\nfailing `sql -f` during setup. Use the portable octal `\\047`, which both\ngawk and BSD awk parse as exactly the single quote.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "43dfbff8383299b707977e39e4a1268e5debd188",
      "tree": "d6637df4e5d1feb4c5c7e8fd64b8dc7460b02973",
      "parents": [
        "2f936a62903ba3911a8a1eedf1014401c61a7b8c"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 19:26:58 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 19:26:58 2026 +0800"
      },
      "message": "Set version to 0.1.0 for initial Apache release\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "2f936a62903ba3911a8a1eedf1014401c61a7b8c",
      "tree": "0cb3367bb7d2aa44e0d1dc83bd7533cc417299aa",
      "parents": [
        "a0c659621f6f554551a70a1403ed6f98a156701d"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 17:15:45 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 17:15:45 2026 +0800"
      },
      "message": "test: wait for partition RowCount before tablet assertions\n\nDoris reports SHOW PARTITIONS\u0027 RowCount asynchronously (BE-\u003eFE tablet\nreport), so the e2e setup could finish loading and hand off to the tablet\nsuite while RowCount was still 0, making the `tablet: events overview`\nassertion `.total_rows\u003e0` flaky.\n\nAfter load, poll the tablet command\u0027s `.total_rows` (the exact value the\nassertion checks, via the same code path) until it materializes, bounded\nby ROWCOUNT_TIMEOUT (default 120s). On timeout we proceed and let the\nassertion surface the lag rather than hanging.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "a0c659621f6f554551a70a1403ed6f98a156701d",
      "tree": "ef7c5865fd608856b82924340436d9f4897b61ef",
      "parents": [
        "03ded5b17ae5d2da42fadf4b78da694d6e90188f"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 16:44:27 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 16:44:27 2026 +0800"
      },
      "message": "test: add end-to-end test harness for doriscli\n\nBlack-box harness that drives the built `doriscli` binary against a real,\nalready-deployed Doris cluster and reports pass/fail/skip per command.\n\n- start-testing.sh: builds the binary, probes connectivity, seeds a throwaway\n  doriscli_selftest database, runs the suites, drops the database, and prints a\n  summary; exits non-zero only when a test fails.\n- Suites: cli (offline argument contract), auth (config-file mode + stateless\n  mode), sql, tablet, profile — plus the offline `cargo test` unit suite.\n- SKIP state for cluster-side preconditions (FE HTTP profile API, audit_log) so\n  optional features are not reported as failures.\n- Connection from tests/e2e/cluster.env or CLI flags; assertions are jq-based.\n\nAlso ignore /target/ (was untracked) plus the harness\u0027s local cluster.env and\nresults/ logs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "03ded5b17ae5d2da42fadf4b78da694d6e90188f",
      "tree": "33b85f871e645c52c5b031599828b639617c7e5a",
      "parents": [
        "9a22771bad43fd7f10ac7c0028ea2b8f5034de48"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 12:15:43 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 12:15:43 2026 +0800"
      },
      "message": "Add .asf.yaml for Apache repo configuration\n\nSets the GitHub repo description, labels, squash-only merge buttons, and\nroutes pull-request notifications to commits@doris.apache.org.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "9a22771bad43fd7f10ac7c0028ea2b8f5034de48",
      "tree": "f935f04385d58b16db06a650878a2e0c65635851",
      "parents": [
        "61e2809f41091e6e104e34613412547b72df2022"
      ],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 12:13:08 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 12:13:08 2026 +0800"
      },
      "message": "Remove VeloDB branding; rename error types to Doris*\n\n- Reword VeloDB textual mentions to Doris-only in README, Cargo.toml,\n  config/products.toml, and code comments/error messages\n- Rename VeloError -\u003e DorisError and VeloResult -\u003e DorisResult across src/\n- Genericize leftover velo-derived tokens: velo_err variable and the\n  \"velo::socks5\" tracing target -\u003e \"doris::socks5\"\n\nNo \"selectdb\" references existed in the repo.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "61e2809f41091e6e104e34613412547b72df2022",
      "tree": "b1f8c1b35b8d2c5d2e8e05743301483afbb7e1b4",
      "parents": [],
      "author": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 11:35:21 2026 +0800"
      },
      "committer": {
        "name": "Mingyu Chen (Rayner)",
        "email": "yunyou@selectdb.com",
        "time": "Fri May 29 11:35:21 2026 +0800"
      },
      "message": "Initial: Apache Doris Cli\nCo-Authored-By: tomz-alt \u003cheisenzhang996@gmail.com\u003e\n"
    }
  ]
}
