)]}'
{
  "log": [
    {
      "commit": "3d367e09f697dac35feec0753e206b6341ea4dac",
      "tree": "82c6ccc3a4eac893632b96cc0969127270e89718",
      "parents": [
        "bfaee0d6d6c56b02e7754b40820199eb72cc128d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 21 21:52:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 21:52:44 2026 +0800"
      },
      "message": "build: bump github/codeql-action from 3 to 4 (#1027)\n\nBumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4.\n- [Release notes](https://github.com/github/codeql-action/releases)\n- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/github/codeql-action/compare/v3...v4)\n\n---\nupdated-dependencies:\n- dependency-name: github/codeql-action\n  dependency-version: \u00274\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "bfaee0d6d6c56b02e7754b40820199eb72cc128d",
      "tree": "69a37cb9d04be4c0806c9cc71240e493abdeb1de",
      "parents": [
        "55c03c4d6ede0dda9ebb2e03012add451339dd8f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 21 21:44:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 21:44:41 2026 +0800"
      },
      "message": "build: bump DavidAnson/markdownlint-cli2-action from 24.1.0 to 24.2.0 (#1026)\n\nBumps [DavidAnson/markdownlint-cli2-action](https://github.com/davidanson/markdownlint-cli2-action) from 24.1.0 to 24.2.0.\n- [Release notes](https://github.com/davidanson/markdownlint-cli2-action/releases)\n- [Commits](https://github.com/davidanson/markdownlint-cli2-action/compare/6bf21b07787794f89a243495939cd651942aeabe...21c1be1b93ad9ed58fa840aacc3f279cde2a72ff)\n\n---\nupdated-dependencies:\n- dependency-name: DavidAnson/markdownlint-cli2-action\n  dependency-version: 24.2.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "55c03c4d6ede0dda9ebb2e03012add451339dd8f",
      "tree": "07771a9a035e0ac3e2b10cee0f070704265dcd5a",
      "parents": [
        "bd6b20de58f0f30fa80e9a7b61b66967365c1605"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 21 21:14:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 21:14:05 2026 +0800"
      },
      "message": "build: bump nwtgck/actions-netlify from 3.0.0 to 4.0.0 (#1025)\n\nBumps [nwtgck/actions-netlify](https://github.com/nwtgck/actions-netlify) from 3.0.0 to 4.0.0.\n- [Release notes](https://github.com/nwtgck/actions-netlify/releases)\n- [Changelog](https://github.com/nwtgck/actions-netlify/blob/develop/CHANGELOG.md)\n- [Commits](https://github.com/nwtgck/actions-netlify/compare/4cbaf4c08f1a7bfa537d6113472ef4424e4eb654...d22a32a27c918fe470bbc562e984f80ec48c2668)\n\n---\nupdated-dependencies:\n- dependency-name: nwtgck/actions-netlify\n  dependency-version: 4.0.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "bd6b20de58f0f30fa80e9a7b61b66967365c1605",
      "tree": "4c1366e47ed09b056365897d0cdb58acb96e6992",
      "parents": [
        "67f5ebb19c55765ce9589635cad1b5e2b9517b3d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 21 21:03:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 21:03:04 2026 +0800"
      },
      "message": "build: bump actions/upload-artifact from 4 to 7 (#1024)\n\nBumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifact\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "67f5ebb19c55765ce9589635cad1b5e2b9517b3d",
      "tree": "4c1cca5926ce1c373893ee491f2c1e024193ffcb",
      "parents": [
        "8d5f3990f1a5010b6df9e1090d2481c091735e87"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 21 19:40:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 19:40:22 2026 +0800"
      },
      "message": "build: bump actions/setup-node from 6 to 7 (#1023)\n\nBumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "8d5f3990f1a5010b6df9e1090d2481c091735e87",
      "tree": "9a7aed98415960b42a42b66d273f5f81daefc13a",
      "parents": [
        "70e445a062408c766dd0094f3f2f57963145d327"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Fri Aug 21 12:33:27 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 19:33:27 2026 +0800"
      },
      "message": "Update dependabot configuration for GitHub Actions (#1022)\n\nRemoved ignore rules for major and minor updates in GitHub Actions."
    },
    {
      "commit": "70e445a062408c766dd0094f3f2f57963145d327",
      "tree": "9d01ddbb86ca24bcd002d87c0d8f9268bf277833",
      "parents": [
        "c65712dc271ef0493201cdf637bd7c9bd81b3a7e"
      ],
      "author": {
        "name": "anchor",
        "email": "codeanqiang@gmail.com",
        "time": "Mon Aug 17 09:04:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 09:04:01 2026 +0800"
      },
      "message": "fix: read XLS literal error cells as errors instead of booleans (#1011)\n\nA BIFF BOOLERR record stores either a boolean or an error code,\ndistinguished by its fError flag, but BoolErrRecordHandler called\ngetBooleanValue() unconditionally. POI returns `errorCode !\u003d 0` for\nerror records, so a literal #DIV/0! or #N/A read back as true and\n#NULL! (code 0) read back as false, while the same content stored in\n.xlsx read back as the error text.\n\nBranch on isError() and emit a CellDataTypeEnum.ERROR cell holding the\nerror text, so the existing StringErrorConverter yields the same\nuser-visible value as the xlsx path. This also lines the handler up\nwith FormulaRecordHandler, which already maps XLS formula errors to\nERROR.\n\nAssisted-by: Cursor (Fable 5)\n\nCo-authored-by: codeAnqiang-ma \u003c273298913+codeAnqiang-ma@users.noreply.github.com\u003e\nCo-authored-by: Cursor \u003ccursoragent@cursor.com\u003e\nCo-authored-by: ian zhang \u003cian.zhangzhe@gmail.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "c65712dc271ef0493201cdf637bd7c9bd81b3a7e",
      "tree": "698322ad12605ba2a94ec2ca2fdde8b840915707",
      "parents": [
        "470025dec4d30d9f9b38477cac968a553bbc677f"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Mon Aug 17 08:53:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 08:53:01 2026 +0800"
      },
      "message": "fix: correct SheetWriteHandler.afterSheetDispose to avoid repeated execution (#900)\n\n* fix: correct SheetWriteHandler.afterSheetDispose to avoid repeated execution\n\n* fix: adjust afterSheetDispose execution position\n\n* fix: trigger afterSheetDispose for each sheet in multi-sheet write\n\n* fix: handle conflicts\n\n* feat: address suggestion1\n\n---------\n\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "470025dec4d30d9f9b38477cac968a553bbc677f",
      "tree": "aad0558364872c23eef6a5ac081919b794ab00a3",
      "parents": [
        "0add5679c01c5a400b9766a231cd96873b98f0cd"
      ],
      "author": {
        "name": "Minseok Song",
        "email": "99078115+skytin1004@users.noreply.github.com",
        "time": "Mon Aug 17 09:47:05 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 08:47:05 2026 +0800"
      },
      "message": "fix: avoid recursive hashCode in write holder contexts (#911)\n\nCo-authored-by: ian zhang \u003cian.zhangzhe@gmail.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "0add5679c01c5a400b9766a231cd96873b98f0cd",
      "tree": "a82e2891c816b2a675deac1ba3c966fdde4f3a7c",
      "parents": [
        "e120395a796232781739d03edd50cd7022d7b01c"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Sun Aug 16 15:02:13 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 20:02:13 2026 +0800"
      },
      "message": "refactor: simplify hex escape pattern scanning (#1003)\n\n* refactor: optimize pattern matching and avoid unnecessary allocations\n\n* refactor: extract pattern offset constants\n\n* refactor: simplify hex escape scanning\n\n* chore: update the comment\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* refactor: extract escaped prefix constant\n\n---------\n\nCo-authored-by: ian zhang \u003cian.zhangzhe@gmail.com\u003e\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "e120395a796232781739d03edd50cd7022d7b01c",
      "tree": "8a4e0262a2f9d3faa416100c48e5a33255c76e13",
      "parents": [
        "afff2b5e59d51aeb8d2b1beebd0178690e106fa8"
      ],
      "author": {
        "name": "Lance",
        "email": "li6151770@126.com",
        "time": "Sun Aug 16 18:24:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 18:24:14 2026 +0800"
      },
      "message": "test:  expand unit coverage for scalar converters in ConverterTest (#999)\n\n* expand unit coverage for scalar converters in ConverterTest\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e\n\n* test: make ConverterTest class public\n\n---------\n\nSigned-off-by: lance \u003cleehaut@gmail.com\u003e\nCo-authored-by: ian zhang \u003cian.zhangzhe@gmail.com\u003e\nCo-authored-by: DeleiGuo \u003cdeleiguo@163.com\u003e"
    },
    {
      "commit": "afff2b5e59d51aeb8d2b1beebd0178690e106fa8",
      "tree": "8abc05b8c332cf47a39bf9595482f5f6c7311435",
      "parents": [
        "b1ab158849a19154c9948e89358d2848cc45f6c6"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Sun Aug 16 10:56:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 10:56:38 2026 +0800"
      },
      "message": "docs: Update the release version document (#967)\n\n* docs: Update the release version document\n\n* docs: update release guide title\n\n* docs: update placeholders for release version in documentation\n\n---------\n\nCo-authored-by: ian zhang \u003cian.zhangzhe@gmail.com\u003e"
    },
    {
      "commit": "b1ab158849a19154c9948e89358d2848cc45f6c6",
      "tree": "3053769ae12521dde4f332dde6de7164ddd6a21b",
      "parents": [
        "60b15843f9871b73811e413b07596ada63b70052"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Sun Aug 16 10:32:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 10:32:29 2026 +0800"
      },
      "message": "refactor: unify and overload readSheet methods for flexible usage (#1014)"
    },
    {
      "commit": "60b15843f9871b73811e413b07596ada63b70052",
      "tree": "c6527cf914fa3d51de71b5b62b354bdad07ec1b8",
      "parents": [
        "e6b6d1a3e3114d6193b68eb67a4c07f3787beaab"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Aug 15 19:54:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 19:54:07 2026 +0800"
      },
      "message": "build: bump org.apache.maven.wrapper:maven-wrapper from 3.1.0 to 3.1.1 (#1013)\n\nBumps [org.apache.maven.wrapper:maven-wrapper](https://github.com/apache/maven-wrapper) from 3.1.0 to 3.1.1.\n- [Release notes](https://github.com/apache/maven-wrapper/releases)\n- [Commits](https://github.com/apache/maven-wrapper/compare/maven-wrapper-parent-3.1.0...maven-wrapper-3.1.1)\n\n---\nupdated-dependencies:\n- dependency-name: org.apache.maven.wrapper:maven-wrapper\n  dependency-version: 3.1.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "e6b6d1a3e3114d6193b68eb67a4c07f3787beaab",
      "tree": "93ca27b03c57b22a5229c41702ccc139de326d38",
      "parents": [
        "1fb95727b222f141b3ca30a19aa8a17a2a39803b"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Sat Aug 15 14:46:50 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 19:46:50 2026 +0800"
      },
      "message": "style: redesign homepage hero as a spreadsheet grid (#983)\n\n* style: redesign homepage hero with brand-colored spreadsheet grid\n\n* style: fade out clipped hero grid labels\n\n* style: keep the hero grid behind the hero content\n\n* style: extend hero column labels for wide screens\n\n---------\n\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "1fb95727b222f141b3ca30a19aa8a17a2a39803b",
      "tree": "35bec3009ddb14a332dc83a0d785dcaf161bff78",
      "parents": [
        "40d54dc1ba7c22eb70b8201ce2027657d9c2800b"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Sat Aug 15 14:46:00 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 19:46:00 2026 +0800"
      },
      "message": "test: add tests for EscapeHexCellWriteHandler (#1001)\n\n* test: add tests for escape-hex-write-handler\n\n* fix: give the escape-hex round-trip its own class and tag\n\n* fix: read the round-trip csv as utf-8\n\n* fix: mock the cell instead of a real workbook\n\n* test: cover the non-SXSSF cell branch\n\n---------\n\nCo-authored-by: ian zhang \u003cian.zhangzhe@gmail.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "40d54dc1ba7c22eb70b8201ce2027657d9c2800b",
      "tree": "aad08f3a1f02b5a72852b766eccde49ae5c39ebd",
      "parents": [
        "c8224b88de26a2daa54e70466556b9ef809bb7eb"
      ],
      "author": {
        "name": "Selim S.",
        "email": "80632333+sapienza88@users.noreply.github.com",
        "time": "Sat Aug 15 13:44:51 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 19:44:51 2026 +0800"
      },
      "message": "docs: add documentation for the includeColumnIndex parameter (#1008)\n\n* docs: add both chinese and english versions of docs for the includeColumnIndex parameter\n\n* docs: fixing formatting of the docs\n\n* docs: fixing formatting of the docs 2\n\n* docs: adding more description to pojo and parameter mds\n\n* docs: small headers fix\n\n* docs: small headers fix\n\n* docs: small headers fix\n\n* docs: small headers fix\n\n---------\n\nCo-authored-by: Selim Soufargi \u003cssoufargi.idealab.unical@gmail.com~\u003e\nCo-authored-by: Bengbengbalabalabeng \u003c70380092+bengbengbalabalabeng@users.noreply.github.com\u003e"
    },
    {
      "commit": "c8224b88de26a2daa54e70466556b9ef809bb7eb",
      "tree": "b8a1c41ababe5540f7b478129ea5ca4b5a0bc31f",
      "parents": [
        "30a0b74c471845b439e0d5ee3bfd56a20b6c5d72"
      ],
      "author": {
        "name": "Selim S.",
        "email": "80632333+sapienza88@users.noreply.github.com",
        "time": "Wed Aug 12 12:51:57 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 19:51:57 2026 +0800"
      },
      "message": "feat: add support for column-based reading of XLS files (#981)\n\n* feature: number and sstlabel with column support\n\n* remove null checks for sheet holder and sheet\n\n* feat: adding filtering capability for columns for additional typeset: formula, bool, rk, blank etc\n\n* fix CI: missing import\n\n* fix CI : add missing imports\n\n* address reviewing comments : revert NOTE\n\n* fix: code style and restore the missing test\n\n---------\n\nCo-authored-by: Selim Soufargi \u003cssoufargi.idealab.unical@gmail.com~\u003e\nCo-authored-by: Bengbengbalabalabeng \u003cbaicaixiaozhan1512@163.com\u003e"
    },
    {
      "commit": "30a0b74c471845b439e0d5ee3bfd56a20b6c5d72",
      "tree": "5073fa0be4114bd2454f3e3650b027ef64e74335",
      "parents": [
        "bcfc9be30689d842a0a52b9576c8a08f65a74172"
      ],
      "author": {
        "name": "xleoken",
        "email": "95013770+xleoken@users.noreply.github.com",
        "time": "Sat Aug 08 20:02:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 08 20:02:11 2026 +0800"
      },
      "message": "docs: remove redundant blank line in java code block (#996)"
    },
    {
      "commit": "bcfc9be30689d842a0a52b9576c8a08f65a74172",
      "tree": "e95677ac29d36f63e743e06e6e6b68bc92c6c78f",
      "parents": [
        "424d12ce511c6a55f153ac8c04d808c59ae25211"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Sat Aug 08 14:51:10 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 08 19:51:10 2026 +0800"
      },
      "message": "fix: remove the broken star history chart (#998)"
    },
    {
      "commit": "424d12ce511c6a55f153ac8c04d808c59ae25211",
      "tree": "dc3e451035bec034f6007fb82f353b8a824bcb57",
      "parents": [
        "3d5a7e97c5bc6cb139fbb4c1f6ffb2136d5baf41"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Sat Aug 08 09:43:35 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 08 14:43:35 2026 +0800"
      },
      "message": "docs: expand the write/fill pages and replace their screenshots with grids (#979)\n\n* docs: replace screenshots with inline HTML tables in write/fill docs\n\nReplaces the PNG screenshots of template and result spreadsheets with\nsemantic HTML tables styled via a new .xl-sheet ruleset, so the examples\nare selectable, searchable and theme-aware instead of fixed-size images.\nAlso swaps sample data placeholders to locale-neutral names in the\nEnglish docs.\n\n* docs: move spreadsheet grid styles into their own stylesheet\n\nThe .xl-sheet rules leave custom.css for src/css/xl-sheet.css, registered as a\nsecond customCss entry. Geometry is expressed in Excel\u0027s own units and classes\nare named after the spreadsheet value they render (xl-fill-red, xl-fs-20).\nAdds styles for pictures, comment and dropdown overlays, and sheet tabs.\n\n* docs: shorten result tables in write/style\n\nEach grid keeps its first and last data rows with an ellipsis row between,\nand uses the value-named style classes.\n\n* docs: document placeholder syntax in fill\n\nAdds a table of the {name}, {.name}, {list.name} and escaped forms with what\nfills each, plus notes on mixing placeholders with text and on unfilled\nplaceholders being cleared. Result grids are shortened.\n\n* docs: shorten result table in write/format\n\nDrops the trailing empty column and the repeated data rows.\n\n* docs: show the result of every header merge strategy\n\nThe strategy example now uses a three-level header where names repeat in both\ndirections, with one grid per strategy, and explains why AUTO leaves a\nvertical merge below the first header row unmerged.\n\n* docs: rewrite write/image around image sources\n\nAdds a table mapping each field type to its converter, notes that a picture is\nstretched to its cell, and documents the multi-image WriteCellData form. The\nresult screenshots become grids drawing a sample SVG.\n\n* docs: cover include-column order and index gaps in write/pojo\n\nDocuments that includeColumnFieldNames follows the POJO field order unless\norderByIncludeColumn is set, and that @ExcelProperty index is an absolute\nposition, so a skipped index leaves an empty column. Also fixes the\nincludeColumnFiledNames typo and the Java 9 Set.of call.\n\n* docs: add sheet tabs to write/sheet results\n\nThe grids now carry the sheet tabs they produce, so the single-sheet, multi-\nsheet and table results are told apart, with a line on what each writes.\n\n* docs: add the result grid to write/simple\n\nShows what the three approaches write. The Chinese page also switches its\nsample data to 字符串, matching write/merge.\n\n* docs: replace the last write/extra screenshots with grids\n\nThe comment and dropdown results are drawn open in the grid, and the dropdown\nhandler gains the usage snippet that registers it.\n\n* docs: drop the write screenshots replaced by inline grids\n\nThe 19 PNGs under static/img/docs/write are no longer referenced by any page.\n\n* docs: drop the fill screenshots replaced by inline grids\n\nIncludes listFill_file.png, which only appears as a path inside a code\nsample in the contribute-doc guide and is not loaded by any page.\n\n* style: update xl-sheet styles and enhance dark theme support\n\n* docs: update comment text and wrap tables with container div\n\n* docs: update comment text and wrap tables with container div\n\n* chore: update markdownlint configuration formatting and allowed elements\n\n* style: update colors and refine layout styles\n\n* docs: enhance image writing documentation and fix formatting issues\n\n* style: update background color styling in table cells\n\n* style: fix table row class attribute in image markdown files\n\n* style: set default text color for table cells\n\n* docs: remove merged cells from extra information description\n\n* docs: add data list example and update table layout\n\n* fix: correct typo in image.md\n\n* chore: remove duplicate img entry from MD033 allowed_elements\n\n* fix: replace Chinese commas with ASCII commas in English fill.md\n\n* fix: correct fetch policies wording\n\n* fix: wrap zh-cn image grids in the sheet container\n\n* style: add border-radius and margin-left styles\n\n* fix: align fill result grids with the indexed sample names\n\n* fix: show the last horizontally filled item in the result grids\n\n* fix: stop wide spreadsheet grids from overflowing the article column\n\n* docs: update formula example and add numeric columns\n\n* docs: update formula example and add numeric columns\n\n---------\n\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e\nCo-authored-by: DeleiGuo \u003cdeleiguo@163.com\u003e\nCo-authored-by: Bengbengbalabalabeng \u003c70380092+bengbengbalabalabeng@users.noreply.github.com\u003e"
    },
    {
      "commit": "3d5a7e97c5bc6cb139fbb4c1f6ffb2136d5baf41",
      "tree": "40dd6484194e6c2f9b13fbd6a4eb3e42a217d1fd",
      "parents": [
        "b027e5ac35a8e266898196960c67d45f9ba5ffc4"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Sat Aug 08 07:35:07 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 08 12:35:07 2026 +0800"
      },
      "message": "refactor: generate trivial accessors with Lombok (#995)"
    },
    {
      "commit": "b027e5ac35a8e266898196960c67d45f9ba5ffc4",
      "tree": "f9559d07f2146ae0fdc98b0bfea43c4a199d539c",
      "parents": [
        "c03a9c5293e21906d857c19d6224c1c7e217cee3"
      ],
      "author": {
        "name": "aias00",
        "email": "liuhongyu@apache.org",
        "time": "Sat Aug 08 12:34:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 08 12:34:46 2026 +0800"
      },
      "message": "fix: remove indexFieldMap entry by field key, not running counter (#976) (#977)"
    },
    {
      "commit": "c03a9c5293e21906d857c19d6224c1c7e217cee3",
      "tree": "e463d183f62efcc0f6fbeffb22ac1f14c8fe76ff",
      "parents": [
        "bae0c6638158470f2589a73557a4190a13f5cc4f"
      ],
      "author": {
        "name": "xleoken",
        "email": "95013770+xleoken@users.noreply.github.com",
        "time": "Fri Aug 07 14:55:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 14:55:55 2026 +0800"
      },
      "message": "docs: remove redundant blank line (#992)"
    },
    {
      "commit": "bae0c6638158470f2589a73557a4190a13f5cc4f",
      "tree": "b4ed1a45564bf7252b76dc0cdc784a64ee326123",
      "parents": [
        "5274b2f7cf1e39cdf25d03fa03ebb619c7a1434f"
      ],
      "author": {
        "name": "Selim S.",
        "email": "80632333+sapienza88@users.noreply.github.com",
        "time": "Thu Aug 06 18:23:17 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 01:23:17 2026 +0800"
      },
      "message": "feat: add support for column-based reading of CSV files (#982)\n\n* feature: csv column filtering support\n\n* addressing first wave of reviews\n\n* addressing first wave of reviews 2\n\n* addressing second wave of reviews\n\n* fix test method call\n\n* fix test method call and test behaviour\n\n* fix test method call and test behaviour\n\n* fix test method call and test behaviour + define the includeColumnIndexes in CSVReaderBuilder\n\n---------\n\nCo-authored-by: Selim Soufargi \u003cssoufargi.idealab.unical@gmail.com~\u003e"
    },
    {
      "commit": "5274b2f7cf1e39cdf25d03fa03ebb619c7a1434f",
      "tree": "4a4683ac3cee19b1d481bb656c990240177ed36d",
      "parents": [
        "5384337e5620b6e1671b262fe6a9bf767aac4d6a"
      ],
      "author": {
        "name": "xleoken",
        "email": "95013770+xleoken@users.noreply.github.com",
        "time": "Thu Aug 06 15:22:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 15:22:48 2026 +0800"
      },
      "message": "fix: eliminate implicit numeric cast warning in date generation (#990)"
    },
    {
      "commit": "5384337e5620b6e1671b262fe6a9bf767aac4d6a",
      "tree": "85039565baa35f453b68b930ed3290c2e4d4d1ee",
      "parents": [
        "332e0c2fc80e34cf67853a1b61a7bad1b784da82"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Thu Aug 06 10:32:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 10:32:07 2026 +0800"
      },
      "message": "docs: bump npm dependencies to address component vulnerability risks (#984)\n\n* chore: bump website dependencies\n\nUpdate the website package versions for local search, React, and related frontend tooling. This keeps the Docusaurus site dependencies current with recent patch and minor releases.\n\n* chore: update pnpm workspace configuration\n\n* chore: update pnpm-lock"
    },
    {
      "commit": "332e0c2fc80e34cf67853a1b61a7bad1b784da82",
      "tree": "efb711b021a4c73474c5782f3780cf30af90b00e",
      "parents": [
        "b1d35a67b8a8e9325246de7cf224c0410116040f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Aug 06 10:31:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 10:31:12 2026 +0800"
      },
      "message": "build: bump com.alibaba.fastjson2:fastjson2 from 2.0.63 to 2.0.64 (#987)"
    },
    {
      "commit": "b1d35a67b8a8e9325246de7cf224c0410116040f",
      "tree": "a67f557fa2c0d83cffb690fb87969a58b1736341",
      "parents": [
        "b912beae33defb84bccb0a7de35e365c6af17ee0"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Mon Aug 03 11:43:09 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 16:43:09 2026 +0800"
      },
      "message": "fix: descriptive error for unrecognized cell type attribute (#965)\n\nAn xlsx cell whose t attribute is not one of the recognized types\n(s, str, inlineStr, e, b, n) caused CellDataTypeEnum.buildFromCellType\nto return null. The very next line then tripped the ReadCellData\nconstructor with a confusing \u0027IllegalArgumentException: Type can not be\nnull\u0027 that named neither the cell nor the offending attribute.\n\nDetect the null in CellTagHandler and throw an ExcelAnalysisException\nthat names the invalid type and the offending cell (by its Excel\nreference, e.g. B4), and document the nullable return of\nbuildFromCellType so callers know to handle it. The read still aborts at\nthe same point; only the exception type and message change.\n\nCloses #955\n\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "b912beae33defb84bccb0a7de35e365c6af17ee0",
      "tree": "4c1e4795f980047075abe18fe53dafeb394514c5",
      "parents": [
        "893abd3e1954e381b15f298e426a17391fb1dc45"
      ],
      "author": {
        "name": "aias00",
        "email": "liuhongyu@apache.org",
        "time": "Sat Aug 01 21:53:31 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 02 12:53:31 2026 +0800"
      },
      "message": "fix: mark CsvCell Calendar value as a date to avoid silent empty write (#973) (#974)\n\nsetCellValueImpl(Calendar) set cellType\u003dNUMERIC but did not set\nnumericCellType\u003dDATE, so CsvSheet.buildCellValue took the number branch,\nfound numberValue null, and wrote an empty field - silently dropping the\nCalendar value. Mirrors the Date and LocalDateTime setters. Add an\nintegration test that writes a Calendar and reads the CSV back.\n\nCo-authored-by: liuhy \u003cliuhy@apache.org\u003e\nCo-authored-by: Bengbengbalabalabeng \u003c70380092+bengbengbalabalabeng@users.noreply.github.com\u003e"
    },
    {
      "commit": "893abd3e1954e381b15f298e426a17391fb1dc45",
      "tree": "0a5856795ef76db1bd97f39308ac9947480d71d8",
      "parents": [
        "c7993d53959d02417f23ae12f09626ca279d2450"
      ],
      "author": {
        "name": "aias00",
        "email": "liuhongyu@apache.org",
        "time": "Thu Jul 30 20:02:21 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 11:02:21 2026 +0800"
      },
      "message": "fix: copy default read converter map to isolate per-reader custom converters (#972)\n\n* fix: copy default read converter map to isolate per-reader custom converters (#971)\n\nThe workbook-level read holder aliased DefaultConverterLoader\u0027s shared static\nallConverter map instead of copying it, so custom converters registered via\nregisterConverter() were put() into the global map and leaked into every later,\nunrelated read on the same JVM. Mirror the write side (AbstractWriteHolder:271),\nwhich already copies, and add a regression test.\n\n* fix: use canonical ASF license header for ReadConverterIsolationTest\n\n* fix: separate license header from package with a blank line\n\n* fix: make default converter maps immutable\n\n* style: format default converter loader test\n\n---------\n\nCo-authored-by: liuhy \u003cliuhy@apache.org\u003e\nCo-authored-by: Bengbengbalabalabeng \u003c70380092+bengbengbalabalabeng@users.noreply.github.com\u003e\nCo-authored-by: Shuxin Pan \u003cpsxjoy@apache.org\u003e"
    },
    {
      "commit": "c7993d53959d02417f23ae12f09626ca279d2450",
      "tree": "6db360219fac68ae120850803ccd15efcfbfd3c1",
      "parents": [
        "7c233b537c892a823956cc49ece6ad10a9f35556"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Thu Jul 30 16:14:08 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 21:14:08 2026 +0800"
      },
      "message": "fix: clone DataFormatData in WriteCellStyle.merge to avoid mutating cached annotation style (#957)\n\n* fix: clone DataFormatData in WriteCellStyle.merge to avoid mutating cached annotation style\n\nA registered cell style strategy could permanently change the cached\n@ContentStyle(dataFormat) of a field, because WriteCellStyle.merge copied\nthe source DataFormatData by reference and a later merge then wrote into\nthe shared object. Clone it like writeFont on the line below.\n\nCloses #956\n\n* test: tag test for filtering\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: Bengbengbalabalabeng \u003c70380092+bengbengbalabalabeng@users.noreply.github.com\u003e\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "7c233b537c892a823956cc49ece6ad10a9f35556",
      "tree": "edb3948b789167610f7c29adb2e7e015f8569071",
      "parents": [
        "50a6b5b763620a9cef9ae10cdf376b941d4f9d1a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 29 20:43:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 20:43:06 2026 +0800"
      },
      "message": "build: bump com.alibaba.fastjson2:fastjson2 from 2.0.62 to 2.0.63 (#980)\n\nBumps [com.alibaba.fastjson2:fastjson2](https://github.com/alibaba/fastjson2) from 2.0.62 to 2.0.63.\n- [Release notes](https://github.com/alibaba/fastjson2/releases)\n- [Commits](https://github.com/alibaba/fastjson2/compare/2.0.62...2.0.63)\n\n---\nupdated-dependencies:\n- dependency-name: com.alibaba.fastjson2:fastjson2\n  dependency-version: 2.0.63\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "50a6b5b763620a9cef9ae10cdf376b941d4f9d1a",
      "tree": "98a8c036f146cc79b455a239340b4d73dd618c2f",
      "parents": [
        "1f039425a3505a496f0695edaaac759b5873932f"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Mon Jul 27 21:22:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 21:22:50 2026 +0800"
      },
      "message": "docs: update code-review instructions for HeadBuilder and wildcard imports (#970)\n\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "1f039425a3505a496f0695edaaac759b5873932f",
      "tree": "c388073989e3dbe52deeb781a22cdb791719f4d1",
      "parents": [
        "c36bd52433b563ee73ae888e03663454330d5fd3"
      ],
      "author": {
        "name": "ian zhang",
        "email": "ian.zhangzhe@gmail.com",
        "time": "Mon Jul 27 10:33:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 10:33:37 2026 +0800"
      },
      "message": "dependency: upgrade assertj-core to 3.27.7 to fix XXE vulnerability (CVE-2025-NDJSON) (#969)\n\nFixes apache/fesod#101 (Dependabot security alert)\n\nassertj-core \u003c\u003d 3.27.6 is vulnerable to XML External Entity (XXE) injection\nwhen parsing XML assertions. Upgrade to 3.27.7 which disables external entity\nprocessing by default.\n\nAll 412 unit tests pass with the new version."
    },
    {
      "commit": "c36bd52433b563ee73ae888e03663454330d5fd3",
      "tree": "53aa42f5a119c52e517d168f67021f1ef170c112",
      "parents": [
        "0acb6e0e7fb6ac91d6d9fff52f9d9b5471fcd72a"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Sun Jul 26 18:46:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 26 18:46:07 2026 +0800"
      },
      "message": "docs: upgrade website dependencies and CI (#968)\n\n* dependencies: bump Docusaurus to v3.10.2 and related dependencies\n\n* dependencies: add dependency overrides in pnpm workspace configuration\n\n* ci: update GitHub Actions workflow for docs\n\n* ci: configure monthly npm updates for website directory\n\n* ci: update pnpm-lock\n\n* docs: update Node.js version requirement to 24.0\n\n* feat: add \"Advanced\" category label in sidebar docs\n\n* chore: revert markdown linting scripts\n\n* chore: update version to 2.1.0 and upgrade pnpm to 11.8.0\n\n* ci: upgrade pnpm version to 11 in CI workflow\n\n* ci: update the docs deployment workflow\n\n* ci: update the pnpm lock and workspace\n\n* ci: update preview docs CI\n\n* ci: enable builds for @swc/core and core-js\n\n* Potential fix for pull request finding\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "0acb6e0e7fb6ac91d6d9fff52f9d9b5471fcd72a",
      "tree": "b336e37992faca40bf9290a2e1fe497f95908a03",
      "parents": [
        "9a3201f1071a6cc1e30d4f9caa0f66614e3d1620"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Sun Jul 26 10:43:41 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 26 15:43:41 2026 +0800"
      },
      "message": "fix: reset cached batch in PageReadListener between sheets to avoid duplicate rows (#961)\n\nCo-authored-by: Bengbengbalabalabeng \u003c70380092+bengbengbalabalabeng@users.noreply.github.com\u003e"
    },
    {
      "commit": "9a3201f1071a6cc1e30d4f9caa0f66614e3d1620",
      "tree": "c6169b9c16a995da55c01cd3e87dcb21f6fc0f1a",
      "parents": [
        "f688ba9c49cb632193cd603fc031169eccb2a354"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Sat Jul 25 16:05:04 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 21:05:04 2026 +0800"
      },
      "message": "fix: remove redundant buffer copy in IoUtils.toByteArray(InputStream) (#963)"
    },
    {
      "commit": "f688ba9c49cb632193cd603fc031169eccb2a354",
      "tree": "30631097b5bb7aa58765a8d3533815f0136daf54",
      "parents": [
        "6904257b04e077e6bcb9759c79e11112df7c9407"
      ],
      "author": {
        "name": "ian zhang",
        "email": "ian.zhangzhe@gmail.com",
        "time": "Sat Jul 25 21:01:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 21:01:08 2026 +0800"
      },
      "message": "fix: CsvCell crashes on java.sql.Date/Time due to unsupported toInstant() (#954)"
    },
    {
      "commit": "6904257b04e077e6bcb9759c79e11112df7c9407",
      "tree": "10d96f98c8c2cb3f83b865b31568896dd78cbe78",
      "parents": [
        "d014aeb16d83b033799cbf8f2b199da327ad9647"
      ],
      "author": {
        "name": "Selim S.",
        "email": "80632333+sapienza88@users.noreply.github.com",
        "time": "Sat Jul 25 15:00:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 21:00:29 2026 +0800"
      },
      "message": "test: Assert valid excel file with expected column count (#945)"
    },
    {
      "commit": "d014aeb16d83b033799cbf8f2b199da327ad9647",
      "tree": "626de5ab4a920c5d8f54123efe77227420b4f13a",
      "parents": [
        "d80dc969820790dc8d7e7eeb174a1139ce4b3330"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Sat Jul 25 20:58:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 20:58:48 2026 +0800"
      },
      "message": "ci: add ASF allowlist check (#966)"
    },
    {
      "commit": "d80dc969820790dc8d7e7eeb174a1139ce4b3330",
      "tree": "3de11f0ddcf46299417ffef751ea31c4d6077451",
      "parents": [
        "a6dbe80e53e987023cb0f4191d277acb10ba91c7"
      ],
      "author": {
        "name": "ian zhang",
        "email": "ian.zhangzhe@gmail.com",
        "time": "Sat Jul 25 14:18:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 14:18:51 2026 +0800"
      },
      "message": "fix: XLS BIFF8 encryption not applied due to premature password clearing (#959)\n\n* fix: XLS BIFF8 encryption not applied due to premature password clearing\n\nThe refactor in 7fe23f0 added a finally block in WorkBookUtil.createWorkBook()\nthat clears the Biff8EncryptionKey ThreadLocal immediately after setting it.\nHowever, workbook.write() (which applies BIFF8 encryption) runs later in\nWriteContextImpl.finish(). At that point the password is already null, so\nthe file content is never encrypted - only a write-protection flag is set.\n\nFix: Remove the premature clearing. The password is correctly cleared by\nWriteContextImpl.clearEncrypt03() after workbook.write() completes.\n\nTests:\n- Update WorkBookUtilTest to verify password remains set after createWorkBook()\n- Add EncryptDataTest.xlsPasswordWrite_isActuallyEncrypted to verify that\n  reading an encrypted XLS without a password fails\n\n* style: fix spotless formatting in EncryptDataTest\n\nMerge the assertThrows lambda argument onto a single line to comply\nwith the project Spotless formatting rules.\n\n* fix: address Copilot review comments on PR #959\n\n- WorkBookUtil: use !StringUtils.isEmpty() instead of !\u003d null to prevent\n  empty password ThreadLocal leak (clearEncrypt03 returns early for\n  empty passwords)\n- EncryptDataTest: use EncryptedDocumentException instead of Exception\n  for more precise assertion of encryption failure"
    },
    {
      "commit": "a6dbe80e53e987023cb0f4191d277acb10ba91c7",
      "tree": "ce5d0b20e2ed425e77f168711a5a0cf81709c29a",
      "parents": [
        "f22b56b328e49a89c70cba749992a7e590452568"
      ],
      "author": {
        "name": "ian zhang",
        "email": "ian.zhangzhe@gmail.com",
        "time": "Sat Jul 25 13:54:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 13:54:44 2026 +0800"
      },
      "message": "docs: add Copilot repository and code review instructions (#958)\n\n* docs: add Copilot repository and code review instructions\n\n- .github/copilot-instructions.md: repository-wide instructions covering\n  project overview, build/test commands, code style, module structure,\n  testing conventions, and CI checks\n- .github/instructions/code-review.instructions.md: path-specific Java\n  review instructions with 8 priority checks and a pitfalls table derived\n  from real bug fixes (sql.Date toInstant, negative value validation,\n  premature ThreadLocal cleanup, missing defensive copy, FileWriter charset)\n\n* Potential fix for pull request finding\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* docs: address Copilot review comments on PR #958\n\ncopilot-instructions.md:\n- Fix misleading \u0027builds on JDK 17+\u0027 — clarify CI builds on JDK 8-25\n- Remove unclear \u0027(\\#|\\ pattern)\u0027 parenthetical, explain Spotless importOrder\n- Attribute license header enforcement to Hawkeye workflow, not Spotless\n- Replace non-existent \u0027fesod-parent/\u0027 dir with \u0027(root)\u0027 in module tree\n- Fix \u0027@DisplayName(ReplaceUnderscores)\u0027 to reference junit-platform.properties\n\ncode-review.instructions.md:\n- Attribute license header enforcement to Hawkeye workflow, not Spotless\n- Fix backslash-escaped \u0027\\|\\|\u0027 rendering issue in markdown table\n- Use \u0027StandardCharsets.UTF_8\u0027 instead of \u0027UTF_8\u0027 for consistency\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "f22b56b328e49a89c70cba749992a7e590452568",
      "tree": "d0f0cd12a8a937eb51d34dd7c4434f53916542c7",
      "parents": [
        "aeffefa80f414a63d09468afb51f3144d12df0e1"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Sat Jul 25 08:54:18 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 13:54:18 2026 +0800"
      },
      "message": "refactor: encapsulate xlsx boolean cell parsing in CellData (#964)\n\n* refactor: encapsulate xlsx boolean cell parsing in CellData\n\nMove the 1-only boolean parsing from the shared BooleanUtils.valueOf\ninto CellData.setBooleanValueFromString, next to its only caller in the\nxlsx SAX read path. The behavior (matching Excel\u0027s 0/1 markers and POI\u0027s\nXSSFCell) is unchanged and now pinned by CellDataTest.\n\nDeprecate BooleanUtils.valueOf(String), which is not a general-purpose\nstring-to-boolean conversion, for future removal.\n\nCloses #953\n\n* refactor: move boolean cell parsing down to ReadCellData\n\nAddress review feedback: CellData is the shared abstraction, so the\nxlsx-specific 1 -\u003e true parsing belongs on the read-side subclass.\nMove setBooleanValueFromString and TRUE_NUMBER to ReadCellData and\nrename CellDataTest accordingly. No behavior change."
    },
    {
      "commit": "aeffefa80f414a63d09468afb51f3144d12df0e1",
      "tree": "41d8b8aa471b03f92be972ee8137bcb18c54fa9c",
      "parents": [
        "4b426ba37b9e7b00d093883acbd5669881ab6555"
      ],
      "author": {
        "name": "Selim S.",
        "email": "80632333+sapienza88@users.noreply.github.com",
        "time": "Thu Jul 23 13:38:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 19:38:14 2026 +0800"
      },
      "message": "feat: add support for column index limit in ReadSheet (#942)\n\n* read a sheet accounting for a column index limit\n\n* feat(sheet): add support for reading sheet with specific column indexes: add test\n\n* feat(sheet): spotless:apply and CI fixes\n\n* feat(sheet): spotless:apply and add test with data\n\n* feat(sheet): add import\n\n* fix CI\n\n* fix tests\n\n* fix tests\n\n* fix tests\n\n* fix tests\n\n* cleanup + spotless\n\n* address refactoring reviews\n\n* addressing reviews\n\n* refactoring for columnIndex setting in cell\n\n* fix setColumIndex value\n\n---------\n\nCo-authored-by: Selim Soufargi \u003cssoufargi.idealab.unical@gmail.com~\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e\nCo-authored-by: Bengbengbalabalabeng \u003c70380092+bengbengbalabalabeng@users.noreply.github.com\u003e"
    },
    {
      "commit": "4b426ba37b9e7b00d093883acbd5669881ab6555",
      "tree": "2763e87e2cb5777ffab9ea90881ebdfde764ae96",
      "parents": [
        "68b7e1c81f18ad52f26dfaca14763b8d58dfee3c"
      ],
      "author": {
        "name": "Duansg",
        "email": "siguoduan@gmail.com",
        "time": "Fri Jul 17 19:33:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 19:33:56 2026 +0800"
      },
      "message": "feat: cache date and number formatters (#948)\n\n* feat: cache date and number formatters\n\n* modify and supplement\n\n---------\n\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "68b7e1c81f18ad52f26dfaca14763b8d58dfee3c",
      "tree": "923f3e1adc7895420edd4d07f931c87af38f9b9c",
      "parents": [
        "d7fae5a40f5a537582663df86c50cf413154a5f6"
      ],
      "author": {
        "name": "Selim S.",
        "email": "80632333+sapienza88@users.noreply.github.com",
        "time": "Tue Jul 14 19:57:09 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 01:57:09 2026 +0800"
      },
      "message": "docs (#949)"
    },
    {
      "commit": "d7fae5a40f5a537582663df86c50cf413154a5f6",
      "tree": "afe86a0f9158e766bb4b0f0f0d9f883c49d8b142",
      "parents": [
        "559d1eb35f5b077da955246379eab1bea059596d"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Wed Jul 08 19:44:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 19:44:17 2026 +0800"
      },
      "message": "feat: add fluent header api for no-bean mode (#943)\n\n* feat: add fluent header api for no-bean mode\n\n* docs: refine method summary Javadoc for head(List), head(Consumer), and head(Class)."
    },
    {
      "commit": "559d1eb35f5b077da955246379eab1bea059596d",
      "tree": "8da70bd8222cb91202037ebb181db2c9e2d2e179",
      "parents": [
        "a7675fbf3df6ab43788836be3fc5d2de2d2e411a"
      ],
      "author": {
        "name": "ZenanMiao",
        "email": "81365559+32154678925@users.noreply.github.com",
        "time": "Wed Jul 01 16:42:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 16:42:46 2026 +0800"
      },
      "message": "fix: fix error in using relativeHeadRowIndex for writing tables only (#810)\n\n* fix: fix error in using relativeHeadRowIndex for writing tables only(#794)\n\n* fix: fix error in using relativeHeadRowIndex for writing tables only(#794)\nModify code format\n\n* Modify style issues and add unit tests\n\nSigned-off-by: 苗泽楠 \u003canan_laolu@foxmail.com\u003e\n\n* test: enhance WriteTableTest with parameterized assertions for XLS/XLSX\n\n - Add read-back verification via WorkbookFactory for both test cases\n - Parameterize with @EnumSource to cover both .xls and .xlsx formats\n - Use randomized offsets (0–9) and data sizes (1–10) for broader coverage\n - Replace non-deterministic Random data with predictable prefix‑index pattern\n - Resolve header string from @ExcelProperty annotation via reflection\n   to avoid coupling to a hardcoded value in WriteSheetData\n - Calculate expected sequential row layout (tables are sequential, not\n   overlapping; B\u0027s position \u003d A\u0027s last row + offsetB + 1)\n\nSigned-off-by: 苗泽楠 \u003canan_laolu@foxmail.com\u003e\n\n* test code format\n\nSigned-off-by: 苗泽楠 \u003canan_laolu@foxmail.com\u003e\n\n* add copyright header and change test code.\n\nSigned-off-by: 苗泽楠 \u003canan_laolu@foxmail.com\u003e\n\n* Avoid using import *\n\nSigned-off-by: 苗泽楠 \u003canan_laolu@foxmail.com\u003e\n\n* remove import TestFileUtil\n\nSigned-off-by: 苗泽楠 \u003canan_laolu@foxmail.com\u003e\n\n---------\n\nSigned-off-by: 苗泽楠 \u003canan_laolu@foxmail.com\u003e\nCo-authored-by: ian zhang \u003cian.zhangzhe@gmail.com\u003e\nCo-authored-by: laolu \u003c13530190+laolu666666@user.noreply.gitee.com\u003e\nCo-authored-by: Bengbengbalabalabeng \u003c70380092+bengbengbalabalabeng@users.noreply.github.com\u003e"
    },
    {
      "commit": "a7675fbf3df6ab43788836be3fc5d2de2d2e411a",
      "tree": "15b791f8098b504dff470907e6f76055d46f421c",
      "parents": [
        "920bb263808d2c872559cfae8693b14abfe9305b"
      ],
      "author": {
        "name": "Shuxin Pan",
        "email": "psxjoy@apache.org",
        "time": "Wed Jul 01 10:35:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 10:35:29 2026 +0800"
      },
      "message": "chore: update copyright year to 2026 in footer and NOTICE files (#939)"
    },
    {
      "commit": "920bb263808d2c872559cfae8693b14abfe9305b",
      "tree": "a5ba4476cf86f43131623779eeb485c5f41fdc28",
      "parents": [
        "38f16e37966adfac65a8d4425d7f08e845918a40"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Wed Jul 01 10:20:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 10:20:41 2026 +0800"
      },
      "message": "feat: split StringImageConverter into Pathname and Base64 (#934)\n\n* feat: split StringImageConverter into Pathname and Base64\n\n* refactor: optimize base64 prefix removal using substring\n\n* test: add @Tag(Tags.UNIT) to unit tests\n\n---------\n\nCo-authored-by: Shuxin Pan \u003cpsxjoy@apache.org\u003e"
    },
    {
      "commit": "38f16e37966adfac65a8d4425d7f08e845918a40",
      "tree": "fb0465e85e0da54868c1fd02d5ec026a9c22ac57",
      "parents": [
        "fd575418dfb9564e0312ba98cf29b156b45658f3"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Tue Jun 30 21:56:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 21:56:21 2026 +0800"
      },
      "message": "chore(test): remove wildcard imports (#938)"
    },
    {
      "commit": "fd575418dfb9564e0312ba98cf29b156b45658f3",
      "tree": "07115939542625cd17a1ec637a210162ec0da2dc",
      "parents": [
        "5fb72f72f3267286afe168ef33168115ae924dbb"
      ],
      "author": {
        "name": "gongzhongqiang",
        "email": "gongzhongqiang@apache.org",
        "time": "Thu Jun 25 10:10:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 10:10:03 2026 +0800"
      },
      "message": "[Test] Add testkit infrastructure and refactor unit tests with JUnit 5 parameterized patterns (#901)\n\n* test: add testkit infrastructure and refactor unit tests with JUnit 5 parameterized patterns\n\nImplements Phase 1-2 of the test modernization proposal from issue #717:\n\n- Add testkit/ package with AbstractExcelTest, ExcelFormat enum,\n  CollectingReadListener, and ExcelAssertions for shared test infrastructure\n- Migrate converter and other legacy test packages to parameterized JUnit 5 tests\n- Remove listener classes with embedded assertions (SRP violation)\n- Consolidate scattered model classes into organized packages (core/, format/,\n  readwrite/, sheet/, style/)\n- Apply parameterized test pattern to cover XLSX/XLS/CSV in single methods\n- Update DateUtils to support test infrastructure\n\nCloses #717\n\n* test(fesod-sheet): add junit-bom and assertj dependencies, standardize test annotations and tempdir usage\n\n- Added junit-bom for centralized JUnit Platform version management in pom.xml\n- Added AssertJ dependency and its version property for fluent assertions\n- Configured surefire plugin for parallel test execution with thread count settings\n- Annotated multiple test classes with appropriate @Tag annotations for categorization\n- Converted parameterized tests from MethodSource to custom ExcelFormatSource for all relevant tests\n- Used @TempDir for temporary file creation in multiple test classes to improve test isolation\n- Updated file path handling in tests to use temporary directories instead of fixed paths\n- Added test grouping configuration to surefire plugin for selective execution\n- Improved fuzz and format test classes by adding relevant @Tag annotations\n- Standardized imports and removed obsolete JUnit provider annotations from tests\n\n* refactor(test): replace TestFileUtil with robust resource file reading\n\n- Remove deprecated TestFileUtil utility class from tests\n- Add readFile method in AbstractExcelTest to safely read resource files\n- Implement resource copying to temp directory to avoid URL encoding issues\n- Update all test classes to use readFile instead of TestFileUtil.readFile\n- Ensure compatibility with resources inside JARs and handling of spaces in paths\n\n* fix:  unit test failed"
    },
    {
      "commit": "5fb72f72f3267286afe168ef33168115ae924dbb",
      "tree": "662f3891cdc61d03f66d95638e0e5d2af4b19d9b",
      "parents": [
        "6374a8ceb67dd08dbce8980fa17bdf5f3453d875"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Tue Jun 23 21:52:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 21:52:11 2026 +0800"
      },
      "message": "docs: add blog for migration with OpenRewrite (#910)\n\n* docs(blog): add blog for migration with OpenRewrite\n\n* fix: correct Apache Fesod to Apache Fesod (Incubating)\n\n---------\n\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "6374a8ceb67dd08dbce8980fa17bdf5f3453d875",
      "tree": "eb0991962ea55ecd2d5bddaa09fa96a787dba63d",
      "parents": [
        "3bcdbdced465ef83170f109c18c8391b4dae50ca"
      ],
      "author": {
        "name": "Minseok Song",
        "email": "99078115+skytin1004@users.noreply.github.com",
        "time": "Tue Jun 23 13:41:24 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 12:41:24 2026 +0800"
      },
      "message": "fix: support SQL date types in WriteCellData (#912)\n\n* fix: support SQL date types in WriteCellData\n\n* fix: avoid timezone fallback for SQL date types\n\n---------\n\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "3bcdbdced465ef83170f109c18c8391b4dae50ca",
      "tree": "ebdd9e97bf624cfce9d61bdf10b021cc2befa097",
      "parents": [
        "a9d1e8e55709088b04dd73d420ac334a490ec022"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jun 23 12:40:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 12:40:50 2026 +0800"
      },
      "message": "build: bump org.jacoco:jacoco-maven-plugin from 0.8.14 to 0.8.15 (#931)\n\nBumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.14 to 0.8.15.\n- [Release notes](https://github.com/jacoco/jacoco/releases)\n- [Commits](https://github.com/jacoco/jacoco/compare/v0.8.14...v0.8.15)\n\n---\nupdated-dependencies:\n- dependency-name: org.jacoco:jacoco-maven-plugin\n  dependency-version: 0.8.15\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "a9d1e8e55709088b04dd73d420ac334a490ec022",
      "tree": "569223a81419b9fc56e44a644f3eb6b888ec5e1d",
      "parents": [
        "ec02cc5b33632b58dc6434823e3a324b923375f8"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jun 23 12:40:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 12:40:26 2026 +0800"
      },
      "message": "build: bump com.alibaba.fastjson2:fastjson2 from 2.0.61 to 2.0.62 (#909)\n\nBumps [com.alibaba.fastjson2:fastjson2](https://github.com/alibaba/fastjson2) from 2.0.61 to 2.0.62.\n- [Release notes](https://github.com/alibaba/fastjson2/releases)\n- [Commits](https://github.com/alibaba/fastjson2/compare/2.0.61...2.0.62)\n\n---\nupdated-dependencies:\n- dependency-name: com.alibaba.fastjson2:fastjson2\n  dependency-version: 2.0.62\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "ec02cc5b33632b58dc6434823e3a324b923375f8",
      "tree": "1e30c3c3b1b3357550e4970fd5ab990845b17fed",
      "parents": [
        "497908955a979820f5813f31548e4ca7cd9a5cb4"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Thu Jun 11 19:41:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 19:41:02 2026 +0800"
      },
      "message": "docs(blog): add CVE-2026-49328 security advisory (#933)"
    },
    {
      "commit": "497908955a979820f5813f31548e4ca7cd9a5cb4",
      "tree": "e4d05dc244a21822b16ead002af4a5ecf7cd2131",
      "parents": [
        "853acf498c763099cd71135045f2868f43619c44"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Wed Jun 10 21:14:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 21:14:24 2026 +0800"
      },
      "message": "feat: support freeze pane via FreezePane or register WriteHandler on write (#916)\n\n* feat: support freeze pane via @FreezePane or register WriteHandler on write\n\n* refactor(code-style): refactor part of the code implementation\n\n- add default value for annotation fields\n- delete redundant references\n\n* feat: add overload constructor for SheetFreezePaneStrategy\n\n* docs: add @FreezePane annotation usage documentation\n\n* refactor: modify test method name\n\n* docs: update the usage documentation for the @FreezePane annotation"
    },
    {
      "commit": "853acf498c763099cd71135045f2868f43619c44",
      "tree": "55f47ff6917945a1b55ebd33771341c4f90ffdd0",
      "parents": [
        "7fe23f0e06c9b253f4b5d174a3220652c510c484"
      ],
      "author": {
        "name": "Shuxin Pan",
        "email": "psxjoy@apache.org",
        "time": "Wed Jun 10 19:39:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 19:39:00 2026 +0800"
      },
      "message": "chore: merge 2.0.2-incubating into main branch (#930)\n\n* chore: merge 2.0.2-incubating into main branch\n\n* chore: merge 2.0.2-incubating into main branch"
    },
    {
      "commit": "7fe23f0e06c9b253f4b5d174a3220652c510c484",
      "tree": "185f0a166376f794f2d07c18963059dd4944946d",
      "parents": [
        "540a592af9b291d00553999c985def251456460f"
      ],
      "author": {
        "name": "Shuxin Pan",
        "email": "psxjoy@apache.org",
        "time": "Sat Jun 06 09:16:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 06 09:16:48 2026 +0800"
      },
      "message": "refactor: manage password handling in Excel processing (#928)"
    },
    {
      "commit": "540a592af9b291d00553999c985def251456460f",
      "tree": "cfc3554310be97862d6c78b1de628c221f9e383d",
      "parents": [
        "c44cc05e8e88f5d4640b2221ff9e68d40c4953c4"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Mon Jun 01 08:59:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 08:59:38 2026 +0800"
      },
      "message": "docs: update download page for release 2.0.2-incubating (#922)\n\n* docs: update download page for release 2.0.2-incubating\n\n* docs: update fesod-sheet version to 2.0.2-incubating"
    },
    {
      "commit": "c44cc05e8e88f5d4640b2221ff9e68d40c4953c4",
      "tree": "bdb0da9e314cbdaf74bf9757a694b8d3af177076",
      "parents": [
        "f673fcbdb19de72ecb1f9f6cfe0d5176a70b2848"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Tue May 05 23:12:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 23:12:34 2026 +0800"
      },
      "message": "fix: Correct off-by-one error in CsvRow#getCell(int) (#677)\n\n* fix: Correct off-by-one error in CsvRow#getCell(int)\n\n* fix: resolve incorrect package/import references.\n\n---------\n\nCo-authored-by: Shuxin Pan \u003cpsxjoy@apache.org\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "f673fcbdb19de72ecb1f9f6cfe0d5176a70b2848",
      "tree": "06b1c6cc3a3cfdd705abd7f2cab93d52143ab2c7",
      "parents": [
        "b340888f18365a80f255dd1e86e71258fb5e4995"
      ],
      "author": {
        "name": "Minseok Song",
        "email": "99078115+skytin1004@users.noreply.github.com",
        "time": "Wed May 06 00:03:12 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 23:03:12 2026 +0800"
      },
      "message": "fix: correct CSV physical cell count (#907)"
    },
    {
      "commit": "b340888f18365a80f255dd1e86e71258fb5e4995",
      "tree": "3ec926c9e262aba48ab83e2b206520fa1cda0902",
      "parents": [
        "76063033ca788e2661d8fd87162fa41e7d42ce5a"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Fri May 01 09:01:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 09:01:54 2026 +0800"
      },
      "message": "docs: add blog for new committer (#908)\n\n* docs(blog): add blog for new committer\n\n* refactor(blog): revise the origin story in committer blog post\n\n* fix(blog): correct all Apache Fesod to Apache Fesod (Incubating)"
    },
    {
      "commit": "76063033ca788e2661d8fd87162fa41e7d42ce5a",
      "tree": "7dc5e60ea5169b9be9bf407b541111c9275ad652",
      "parents": [
        "52d4b1f52c8ceef7aa533a47fcce9e20ad44dcde"
      ],
      "author": {
        "name": "Minseok Song",
        "email": "99078115+skytin1004@users.noreply.github.com",
        "time": "Thu Apr 30 16:56:30 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 15:56:30 2026 +0800"
      },
      "message": "test: cover field-level converter precedence (#906)"
    },
    {
      "commit": "52d4b1f52c8ceef7aa533a47fcce9e20ad44dcde",
      "tree": "7936b79616a4eece9456ff2187e19584bd1458ce",
      "parents": [
        "bd22a3151f4c1073d3148d3c97851b8981c2d78b"
      ],
      "author": {
        "name": "Minseok Song",
        "email": "99078115+skytin1004@users.noreply.github.com",
        "time": "Sat Apr 25 17:53:48 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 25 16:53:48 2026 +0800"
      },
      "message": "docs: fix Maven Central artifact link (#904)"
    },
    {
      "commit": "bd22a3151f4c1073d3148d3c97851b8981c2d78b",
      "tree": "2a36357c5765fa90c9c926dd448cf5db02f93a3b",
      "parents": [
        "14704d65a5fb80dccc0fcb9bf1b6e18fb5f82e33"
      ],
      "author": {
        "name": "Minseok Song",
        "email": "99078115+skytin1004@users.noreply.github.com",
        "time": "Fri Apr 24 15:01:23 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 24 14:01:23 2026 +0800"
      },
      "message": "docs: fix fastexcel 1.1.0 sha link (#903)"
    },
    {
      "commit": "14704d65a5fb80dccc0fcb9bf1b6e18fb5f82e33",
      "tree": "111e690d543fbdfe3185cb93d6cdb7446d7a0677",
      "parents": [
        "3986b8bbca01b240161efbfcde1a643e1fbb8417"
      ],
      "author": {
        "name": "Minseok Song",
        "email": "99078115+skytin1004@users.noreply.github.com",
        "time": "Fri Apr 17 22:14:42 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 21:14:42 2026 +0800"
      },
      "message": "docs: add Alibaba attribution to 5 legacy-derived example files (#897)"
    },
    {
      "commit": "3986b8bbca01b240161efbfcde1a643e1fbb8417",
      "tree": "1b9e3e170b195b306f484e098a768821f05683c0",
      "parents": [
        "b00281a7cadbf983572311c9120a63a72149afd2"
      ],
      "author": {
        "name": "Shuxin Pan",
        "email": "psxjoy@apache.org",
        "time": "Sat Apr 11 01:35:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 11 01:35:27 2026 +0800"
      },
      "message": "chore: enforce frozen lockfile in CI (#895)"
    },
    {
      "commit": "b00281a7cadbf983572311c9120a63a72149afd2",
      "tree": "387782b5aef0f68b2441429d34318dd4c0327a9a",
      "parents": [
        "bf3d23b5a3770ffe6a96db6b846218847fa25f93"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Sat Apr 11 01:35:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 11 01:35:12 2026 +0800"
      },
      "message": "docs: standardize and enhance status badges (#896)"
    },
    {
      "commit": "bf3d23b5a3770ffe6a96db6b846218847fa25f93",
      "tree": "d563c94e8a5c73b2b1bea2cd5e7b26e71ca5fdcf",
      "parents": [
        "95186b492bfb036f00172e37362f19ad338672b9"
      ],
      "author": {
        "name": "Uğur Tafralı",
        "email": "tafraliugur@gmail.com",
        "time": "Fri Apr 10 06:10:33 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 11:10:33 2026 +0800"
      },
      "message": "fix: custom converters not being inherited from parent write holders (#893)\n\n* Fix custom converters not being inherited from parent write holders\n\n* Address review feedback"
    },
    {
      "commit": "95186b492bfb036f00172e37362f19ad338672b9",
      "tree": "09ae3dc8515a3d7da6aa44fc3265471bf5a20eff",
      "parents": [
        "79b77bb1fd869bde7727360bca6f165108d40a52"
      ],
      "author": {
        "name": "Shuxin Pan",
        "email": "psxjoy@apache.org",
        "time": "Sat Mar 28 13:26:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 28 13:26:02 2026 +0800"
      },
      "message": "docs: rename DISCLAIMER-WIP to DISCLAIMER and remove outdated content (#890)"
    },
    {
      "commit": "79b77bb1fd869bde7727360bca6f165108d40a52",
      "tree": "1eb34b159ce210c38cc0cd7b44c0dbb2dac7fac9",
      "parents": [
        "1291fa36835e7fbf1a5469c698b7cd891390cc83"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Fri Mar 27 13:32:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 13:32:14 2026 +0800"
      },
      "message": "docs: add copyright notices to the fesod-sheet module (#880)\n\n* docs: add copyright notices to the fesod-sheet module\n\n* docs: add copyright notices to the fesod-sheet module (2)\n\n- [x] org.apache.fesod.sheet.converters\n- [x] org.apache.fesod.sheet.enums\n- [x] org.apache.fesod.sheet.event\n- [x] org.apache.fesod.sheet.exception\n- [x] org.apache.fesod.sheet.metadata\n\n* docs: add copyright notices to the fesod-sheet module (3)\n\n- [x] org.apache.fesod.sheet.read\n- [x] org.apache.fesod.sheet.support\n- [x] org.apache.fesod.sheet.util\n- [x] org.apache.fesod.sheet.write\n- [x] org.apache.fesod.sheet\n\n* docs: add copyright notices to the fesod-sheet module (5)\n\nTest\n\n- [x] org.apache.fesod.sheet.analysis\n- [x] org.apache.fesod.sheet.annotation\n- [x] org.apache.fesod.sheet.bom\n- [x] org.apache.fesod.sheet.bom\n- [x] org.apache.fesod.sheet.cache\n- [x] org.apache.fesod.sheet.celldata\n- [x] org.apache.fesod.sheet.charset\n- [x] org.apache.fesod.sheet.compatibility\n- [x] org.apache.fesod.sheet.converter\n- [x] org.apache.fesod.sheet.csv\n- [x] org.apache.fesod.sheet.data\n- [x] org.apache.fesod.sheet.dataformat\n- [x] org.apache.fesod.sheet.encrypt\n- [x] org.apache.fesod.sheet.exception\n- [x] org.apache.fesod.sheet.excludeorinclude\n- [x] org.apache.fesod.sheet.extra\n- [x] org.apache.fesod.sheet.fill\n- [x] org.apache.fesod.sheet.fuzz\n- [x] org.apache.fesod.sheet.handler\n- [x] org.apache.fesod.sheet.head\n- [x] org.apache.fesod.sheet.hiddensheets\n- [x] org.apache.fesod.sheet.large\n- [x] org.apache.fesod.sheet.multiplesheets\n- [x] org.apache.fesod.sheet.nomodel\n- [x] org.apache.fesod.sheet.noncamel\n- [x] org.apache.fesod.sheet.parameter\n- [x] org.apache.fesod.sheet.repetition\n- [x] org.apache.fesod.sheet.simple\n- [x] org.apache.fesod.sheet.skip\n- [x] org.apache.fesod.sheet.sort\n- [x] org.apache.fesod.sheet.style\n- [x] org.apache.fesod.sheet.template\n- [x] org.apache.fesod.sheet.util\n- [x] org.apache.fesod.sheet.write.handler.impl\n- [x] org.apache.fesod.sheet.writesheet\n- [x] org.apache.fesod.sheet\n\n---------\n\nCo-authored-by: Shuxin Pan \u003cpsxjoy@apache.org\u003e\nCo-authored-by: ian zhang \u003cian.zhangzhe@gmail.com\u003e"
    },
    {
      "commit": "1291fa36835e7fbf1a5469c698b7cd891390cc83",
      "tree": "1bbebbd295927a31d51f92f7c5341d44cbb5f85a",
      "parents": [
        "499c854e4f4ae71ef3f341b68fc2dc542ddb2b82"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 24 23:23:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 23:23:13 2026 +0800"
      },
      "message": "build: bump com.alibaba.fastjson2:fastjson2 from 2.0.60 to 2.0.61 (#887)"
    },
    {
      "commit": "499c854e4f4ae71ef3f341b68fc2dc542ddb2b82",
      "tree": "278c91ec8d085a302084e90d5b4b4657af24834c",
      "parents": [
        "72614af7ef10bf9a7c326aaa04cf3abd2a426d1a"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Sun Mar 22 00:09:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 22 00:09:54 2026 +0800"
      },
      "message": "docs: add copyright notices to the fesod-sheet-examples module (#888)\n\norg.apache.fesod.sheet.examples.advanced\n\n- [Fesod] CustomConverterData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.ConverterData.java\n\norg.apache.fesod.sheet.examples.fill\n\n- [Fesod] FillData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.fill.FillData.java\n- [Fesod] FillBasicExample.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.fill.FillTest.java\n- [Fesod] FillComplexExample.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.fill.FillTest.java\n\norg.apache.fesod.sheet.examples.quickstart\n\n- [Fesod] DemoData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.DemoData.java\n- [Fesod] SimpleReadExample.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.ReadTest.java\n- [Fesod] SimpleWriteExample.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.WriteTest.java\n\norg.apache.fesod.sheet.examples.read\n\n- [Fesod] CustomStringStringConverter.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.CustomStringStringConverter.java\n- [Fesod] ConverterData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.ConverterData.java\n- [Fesod] DemoDAO.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.DemoDAO.java\n- [Fesod] DemoData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.DemoData.java\n- [Fesod] ExceptionDemoData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.ExceptionDemoData.java\n- [Fesod] IndexOrNameData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.IndexOrNameData.java\n- [Fesod] DemoDataListener.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.DemoDataListener.java\n- [Fesod] ExceptionListener.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.DemoExceptionListener.java\n- [Fesod] NoModelDataListener.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.NoModelDataListener.java\n- [Fesod] ExceptionHandlingExample.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.ReadTest.java\n- [Fesod] MultiSheetReadExample.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.ReadTest.java\n- [Fesod] NoModelReadExample.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.read.ReadTest.java\n\norg.apache.fesod.sheet.examples.util\n\n- NONE\n\norg.apache.fesod.sheet.examples.web\n\n- [Fesod] DownloadData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.web.DownloadData.java\n- [Fesod] FesodWebApplication.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.web.EasyexcelApplication.java\n- [Fesod] UploadDAO.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.web.UploadDAO.java\n- [Fesod] UploadData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.web.UploadData.java\n- [Fesod] UploadDataListener.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.web.UploadDataListener.java\n- [Fesod] WebExampleController.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.web.WebTest.java\n\norg.apache.fesod.sheet.examples.write\n\n- [Fesod] DemoData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.DemoData.java\n- [Fesod] DemoMergeData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.DemoMergeData.java\n- [Fesod] DemoStyleData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.DemoStyleData.java\n- [Fesod] ImageDemoData.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.ImageDemoData.java\n- [Fesod] CommentWriteHandler.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.CommentWriteHandler.java\n- [Fesod] CustomCellWriteHandler.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.CustomCellWriteHandler.java\n- [Fesod] CustomSheetWriteHandler.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.CustomSheetWriteHandler.java\n- [Fesod] ImageWriteExample.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.WriteTest.java\n- [Fesod] MergeWriteExample.java was refactored from [EasyExcel] com.alibaba.easyexcel.test.demo.write.WriteTest.java"
    },
    {
      "commit": "72614af7ef10bf9a7c326aaa04cf3abd2a426d1a",
      "tree": "70268c630ae97b109442290c59fcbe68d06aeaed",
      "parents": [
        "115deaf2ad0fc6d7135a223b53411993bc20a5c3"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Mar 12 20:36:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 12 20:36:33 2026 +0800"
      },
      "message": "build: bump org.projectlombok:lombok from 1.18.42 to 1.18.44 (#883)\n\nBumps [org.projectlombok:lombok](https://github.com/projectlombok/lombok) from 1.18.42 to 1.18.44.\n- [Changelog](https://github.com/projectlombok/lombok/blob/master/doc/changelog.markdown)\n- [Commits](https://github.com/projectlombok/lombok/compare/v1.18.42...v1.18.44)\n\n---\nupdated-dependencies:\n- dependency-name: org.projectlombok:lombok\n  dependency-version: 1.18.44\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "115deaf2ad0fc6d7135a223b53411993bc20a5c3",
      "tree": "8ff81abf98b0b98cc950ddbdab64dc28bcad5d84",
      "parents": [
        "62c46e812f500941dd7ce385287b590b566602e7"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Thu Mar 12 20:13:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 12 20:13:12 2026 +0800"
      },
      "message": "docs: supplement website migration guide using content from SKILL.md (#884)\n\n* docs: supplement website migration guide using content from SKILL.md\n\n* docs: correct Phase 3 to Step 3 for consistency in migration steps"
    },
    {
      "commit": "62c46e812f500941dd7ce385287b590b566602e7",
      "tree": "343a44d448a7c1ab443a698f50ce3720722eeb2b",
      "parents": [
        "9af03ca2345f173ed515f9fe7bc22c6e5ad11f13"
      ],
      "author": {
        "name": "gongzhongqiang",
        "email": "gongzhongqiang@apache.org",
        "time": "Tue Mar 10 21:52:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 10 21:52:55 2026 +0800"
      },
      "message": "docs: add missing feature docs and rearrange sidebar for progressive learning (#882)\n\n* docs: expand sheet documentation with advanced guides and examples\n\n- Add custom converter documentation covering per-field and global registration\n- Add large file writing guide for handling 100,000+ row datasets\n- Add password protection documentation for secure spreadsheets\n- Add read format guide documenting supported Excel formats\n- Add write converter guide with practical examples\n- Add merge cells documentation for complex layouts\n- Simplify introduction examples to focus on quick start patterns\n- Update POJO read documentation with enhanced examples\n- Add Chinese translations for all new documentation pages\n- Update sidebar navigation to include new advanced topics\n\n* docs: fix markdownlint errors - add language to fenced code blocks and remove extra blank lines\n\n* docs: address PR review comments - fix password docs, date format, fullwidth colon, batch comments, and merge strategy caveat"
    },
    {
      "commit": "9af03ca2345f173ed515f9fe7bc22c6e5ad11f13",
      "tree": "34792d29a6b5eb744cbb90761eea1068b5b471d9",
      "parents": [
        "ab073fc85e8d8b6ce888db6ef90045f45bcb977f"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Tue Mar 10 01:09:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 10 01:09:47 2026 +0800"
      },
      "message": "docs: correct casing of \"Incubating\" in copyright notices (#881)"
    },
    {
      "commit": "ab073fc85e8d8b6ce888db6ef90045f45bcb977f",
      "tree": "c915c27094abd285a214c79955170f299dd01b69",
      "parents": [
        "7c877d9b953a07eaba9e41b66eec91b77e0fa91e"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Mon Mar 09 23:01:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 23:01:32 2026 +0800"
      },
      "message": "docs: add copyright notices to the fesod-common module (#879)\n\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "7c877d9b953a07eaba9e41b66eec91b77e0fa91e",
      "tree": "293c3d8c3016599c16543b726ebba3507440918f",
      "parents": [
        "c09387f43fee42ddb4329268e8e685d5b5521d64"
      ],
      "author": {
        "name": "Shuxin Pan",
        "email": "psxjoy@apache.org",
        "time": "Mon Mar 09 22:36:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 22:36:29 2026 +0800"
      },
      "message": "docs: add copyright notice for Apache Fesod in BeanMapUtils (#877)\n\n* docs: add copyright notice for Apache Fesod in BeanMapUtils.java\n\n* docs: add copyright notice for Apache Fesod in BeanMapUtils.java\n\n* docs: add copyright notice for Apache Fesod in BeanMapUtils.java"
    },
    {
      "commit": "c09387f43fee42ddb4329268e8e685d5b5521d64",
      "tree": "5d1049ad85a41a9d1c657d2ef016b05053b1f313",
      "parents": [
        "a88534a73fb2dd75c01668145763c9b75870b5ce"
      ],
      "author": {
        "name": "gongzhongqiang",
        "email": "gongzhongqiang@apache.org",
        "time": "Mon Mar 09 16:19:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 16:19:33 2026 +0800"
      },
      "message": "refactor(examples): Fesod Examples Module Refactoring (#770)\n\n* feat(examples): refactor example module\n\n* refactor(examples): clean up test-scope examples and legacy classes/resources\n\n* refactor(examples): replace System.out with logging for file write success messages\n\n* refactor(examples): update imports to use common utility package\n\n* feat(examples): update file path retrieval to use temporary path utility\n\n* feat(ci): include fesod-examples in Maven build process\n\n* feat(dependencies): update logging dependencies and add integration test for FesodWebApplication\n\n* refactor(examples): enhance Javadoc comments for clarity and detail across multiple classes\n\n* fix: rename excel\u0027s header name\n\n* feat(examples): add CustomConverterData model and update example to use it;avoid reuse fork in example ut because of custom convertor test will overwrite global convert setting"
    },
    {
      "commit": "a88534a73fb2dd75c01668145763c9b75870b5ce",
      "tree": "b2fe20643dcb633f03dccddf3b0a5a5d89d2e7a0",
      "parents": [
        "db8b7b0f77547ca2ce7364989f0d56cad41b21d0"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Thu Mar 05 16:10:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 05 16:10:58 2026 +0800"
      },
      "message": "chore: update the version number to 2.1.0-SNAPSHOT (#875)\n\n"
    },
    {
      "commit": "db8b7b0f77547ca2ce7364989f0d56cad41b21d0",
      "tree": "3dee56ea9901a566768822dbb298fc42c8fa3174",
      "parents": [
        "9c7d213367be97924ccf20d607c5eb00b157389c"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Sun Mar 01 21:29:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 01 21:29:43 2026 +0800"
      },
      "message": "docs: fix typo in blog post (#873)\n\n"
    },
    {
      "commit": "9c7d213367be97924ccf20d607c5eb00b157389c",
      "tree": "c67f4b760eb4a507cb472140831f7c36e0b0a852",
      "parents": [
        "912a8deb87b6f65fbc829cc4fe2ad6655636a3df"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Sun Mar 01 00:02:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 01 00:02:32 2026 +0800"
      },
      "message": "docs: improve the content of the 20250917 blog  (#866)\n\n* docs: initial draft in Chinese language\n\n* docs: add an English version\n\n---------\n\nCo-authored-by: Shuxin Pan \u003cpsxjoy@apache.org\u003e"
    },
    {
      "commit": "912a8deb87b6f65fbc829cc4fe2ad6655636a3df",
      "tree": "cef215a803581dba31d5f15c989f1270bb177832",
      "parents": [
        "2c8c3527bb4b0da6d9bcdfb371da7879d4b35f86"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Sat Feb 28 22:02:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 28 22:02:28 2026 +0800"
      },
      "message": "docs(blog): fix CSP issue by replacing shields.io badge with local image (#872)\n\n* docs: fix CSP issue by replacing shields.io badge with local image resource\n\n* docs(blog): replace relative paths"
    },
    {
      "commit": "2c8c3527bb4b0da6d9bcdfb371da7879d4b35f86",
      "tree": "1bd2cb4cd7f6530487bef9042159254eb7aa5d20",
      "parents": [
        "da99a756981cdbfdbe6c1fc6fbc1f6272e7df742"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Fri Feb 27 19:46:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 19:46:36 2026 +0800"
      },
      "message": "docs: remove the unusable bom documents (#870)\n\nCo-authored-by: Shuxin Pan \u003cpsxjoy@apache.org\u003e"
    },
    {
      "commit": "da99a756981cdbfdbe6c1fc6fbc1f6272e7df742",
      "tree": "9832ec6ec062f8c043eb88d66f1d50788137c580",
      "parents": [
        "9c0a9b2e5c799ad862f1889a28402df056d8e0dd"
      ],
      "author": {
        "name": "gongzhongqiang",
        "email": "gongzhongqiang@apache.org",
        "time": "Fri Feb 27 19:42:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 19:42:14 2026 +0800"
      },
      "message": "feat(blog): add welcome blog for new committer (#871)\n\nCo-authored-by: Shuxin Pan \u003cpsxjoy@apache.org\u003e"
    },
    {
      "commit": "9c0a9b2e5c799ad862f1889a28402df056d8e0dd",
      "tree": "f5f3d6f6353e8a1191878db0f01ebdc01b574213",
      "parents": [
        "a3be74f7ce3d6d384fc37daaffd8c1951b1a074b"
      ],
      "author": {
        "name": "Shuxin Pan",
        "email": "psxjoy@apache.org",
        "time": "Fri Feb 27 19:20:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 19:20:00 2026 +0800"
      },
      "message": "doc: announce official release of Apache Fesod (Incubating)  (#869)\n\n* doc: announce official release of Apache Fesod (Incubating) 2.0.1-incubating\n\n* doc: announce official release of Apache Fesod (Incubating) 2.0.1-incubating"
    },
    {
      "commit": "a3be74f7ce3d6d384fc37daaffd8c1951b1a074b",
      "tree": "8c6c2134966975d1caf2eda88126a70f04e0e392",
      "parents": [
        "5c77cdd2a04612961eccae60b4586325eb05649b"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Fri Feb 27 17:33:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 17:33:15 2026 +0800"
      },
      "message": "chore: bump markdownlint-cli2 from 0.18.1 to 0.20.0 (#867)\n\n* chore: bump markdownlint-cli2 from 0.18.1 to 0.20.0\n\n* docs: fix the issues detected by markdownlint scanning\n\n---------\n\nCo-authored-by: Shuxin Pan \u003cpsxjoy@apache.org\u003e"
    },
    {
      "commit": "5c77cdd2a04612961eccae60b4586325eb05649b",
      "tree": "97ab28f20f712c85a4d6d37b36c3b79020e3dc5e",
      "parents": [
        "d10f429110bb05d126c83f0d90c96b2f579400c3"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Feb 27 10:29:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 10:29:04 2026 +0800"
      },
      "message": "build: bump ch.qos.logback:logback-classic from 1.5.29 to 1.5.32 (#856)\n\nBumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.29 to 1.5.32.\n- [Release notes](https://github.com/qos-ch/logback/releases)\n- [Commits](https://github.com/qos-ch/logback/compare/v_1.5.29...v_1.5.32)\n\n---\nupdated-dependencies:\n- dependency-name: ch.qos.logback:logback-classic\n  dependency-version: 1.5.32\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "d10f429110bb05d126c83f0d90c96b2f579400c3",
      "tree": "0c4936f0b9a6445f7d96f9c192526d1c1f84490f",
      "parents": [
        "9db0553978b7bca0db4e579892943bcc49e31f10"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Fri Feb 27 10:07:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 10:07:46 2026 +0800"
      },
      "message": "fix: Image type recognition failure in FileTypeUtils (#812)\n\n* fix: Image type recognition failure in FileTypeUtils\n\n* fix: use longest-prefix-first matching for magic numbers\n\n* test: add sample image files for FileTypeUtils tests\n\n---------\n\nCo-authored-by: ian zhang \u003cian.zhangzhe@gmail.com\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "9db0553978b7bca0db4e579892943bcc49e31f10",
      "tree": "2ae278512a6a3d08ea2ff0ecce6db4002f54df95",
      "parents": [
        "136048a2851032363aed8ef7653aaceb006afd3a"
      ],
      "author": {
        "name": "Bengbengbalabalabeng",
        "email": "70380092+bengbengbalabalabeng@users.noreply.github.com",
        "time": "Fri Feb 27 10:07:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 10:07:25 2026 +0800"
      },
      "message": "fix: support immutable lists in dynamic header (#668)\n\n* fix: support immutable lists in dynamic header\n\nThis prevents UnsupportedOperationException when using immutable lists such as Arrays.asList、List.of or Collections.unmodifiableList ...\n\n* test: update test based on review feedback.\n\n- Use English to describe\n- Avoid use imports *\n\n* refactor: replace stream implementation with explicit loop, and update JavaDoc.\n\n* chore: remove unnecessary imports.\n\n---------\n\nCo-authored-by: ian zhang \u003cian.zhangzhe@gmail.com\u003e\nCo-authored-by: Shuxin Pan \u003cpsxjoy@apache.org\u003e\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    },
    {
      "commit": "136048a2851032363aed8ef7653aaceb006afd3a",
      "tree": "3022545c1b6e71dfe11c5e8e8aec26d72a8ef19a",
      "parents": [
        "cb15574727a9c8f6a32903e6d25afc5ab368fff0"
      ],
      "author": {
        "name": "gongzhongqiang",
        "email": "gongzhongqiang@apache.org",
        "time": "Thu Feb 26 21:24:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 21:24:50 2026 +0800"
      },
      "message": "chore: update parent version to 2.1.0-incubating in pom.xml (#868)\n\n"
    },
    {
      "commit": "cb15574727a9c8f6a32903e6d25afc5ab368fff0",
      "tree": "167d5bde9082e7fa7e023097d25af2e110178f82",
      "parents": [
        "c35b92b3e2879841f5bde1961d8978ee67927597"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Wed Feb 25 23:18:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 23:18:09 2026 +0800"
      },
      "message": "ci: bump DavidAnson/markdownlint-cli2-action from 21.0.0 to 22.0.0 (#863)\n\n"
    },
    {
      "commit": "c35b92b3e2879841f5bde1961d8978ee67927597",
      "tree": "aa573d56a22bdcb4dca2c87c82e6e9ce88c91055",
      "parents": [
        "9866d2619debec1aa0a9ad30f10ce03988b4522c"
      ],
      "author": {
        "name": "DeleiGuo",
        "email": "delei@apache.org",
        "time": "Mon Feb 23 11:19:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 23 11:19:12 2026 +0800"
      },
      "message": "docs: add new committer GOODBOY008 with avatar (#860)\n\n"
    },
    {
      "commit": "9866d2619debec1aa0a9ad30f10ce03988b4522c",
      "tree": "62854cfc5cda052d5509da4697a40e9ccf2bc757",
      "parents": [
        "679f23f3b427b5612dc2903b265ae9f937774c9c"
      ],
      "author": {
        "name": "ian zhang",
        "email": "ian.zhangzhe@gmail.com",
        "time": "Sun Feb 22 19:29:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Feb 22 19:29:00 2026 +0800"
      },
      "message": "feat(skill): add migration skill for transitioning from FastExcel to Fesod (#858)\n\n"
    },
    {
      "commit": "679f23f3b427b5612dc2903b265ae9f937774c9c",
      "tree": "3562001936b5f868186b0cddce28f756b61c71f0",
      "parents": [
        "e0ad93a38ba99b4a74f0555164721d9e318282ff"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Feb 14 09:23:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 14 09:23:27 2026 +0800"
      },
      "message": "build: bump ch.qos.logback:logback-classic from 1.5.27 to 1.5.29 (#851)\n\nBumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.27 to 1.5.29.\n- [Release notes](https://github.com/qos-ch/logback/releases)\n- [Commits](https://github.com/qos-ch/logback/compare/v_1.5.27...v_1.5.29)\n\n---\nupdated-dependencies:\n- dependency-name: ch.qos.logback:logback-classic\n  dependency-version: 1.5.29\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "e0ad93a38ba99b4a74f0555164721d9e318282ff",
      "tree": "a7c964342e0e83a9b524ef7d884fb6888984c575",
      "parents": [
        "9b98f718b1224e2b64a5dfad56c7406f1f1c6aa4"
      ],
      "author": {
        "name": "Hrittija Bhattacharjee",
        "email": "136136788+hrittijab@users.noreply.github.com",
        "time": "Fri Feb 13 18:23:11 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 14 09:23:11 2026 +0800"
      },
      "message": "docs: Add missing ASF license headers to website docs (#841)\n\n* Add missing ASF license headers to website docs\n\n* Add ASF license headers to website docs and adjust markdownlint rules Related: #840\n\n* Fix sidebar configuration and update docs\n\n- Fixed sidebar doc ID references to match actual filenames\n- Updated Chinese translation frontmatter IDs\n- Updated documentation files\n\n* Fix English community doc IDs to match sidebar\n\n* Fix MD003 and community files license header format\n\n---------\n\nCo-authored-by: DeleiGuo \u003cdelei@apache.org\u003e"
    }
  ],
  "next": "9b98f718b1224e2b64a5dfad56c7406f1f1c6aa4"
}
