)]}'
{
  "log": [
    {
      "commit": "9cd894c8eef7122d157c1e19dca7f18b35dfa466",
      "tree": "5335e93c94544645c56fd753d82758e75e182db2",
      "parents": [
        "eef1f132ae4e6a97c34e1852fc30fb1a31d3d3f0"
      ],
      "author": {
        "name": "user01010111",
        "email": "12504630+user01010111@users.noreply.github.com",
        "time": "Thu Oct 01 00:07:33 2026 +1300"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 13:46:48 2026 -0700"
      },
      "message": "docs: explain boolean item access and comments (#597)\n\nCo-authored-by: jf nz \u003ctalon_usable_9k@icloud.com\u003e\nGitOrigin-RevId: 0518af253901e57872c03835db6fe9bacab40ee7\nChange-Id: Ic749c367cc901f02be001835765ba036cbacbb89\n"
    },
    {
      "commit": "eef1f132ae4e6a97c34e1852fc30fb1a31d3d3f0",
      "tree": "fda7c623313bea66db26fe3c2a13fa1e5343e369",
      "parents": [
        "c8e6fd28f8bf8a8cee7cfba4b4b5d38c94f9dab5"
      ],
      "author": {
        "name": "Langning Zhang",
        "email": "zln1905391059@163.com",
        "time": "Wed Sep 30 18:08:13 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 13:46:39 2026 -0700"
      },
      "message": "Preserve fold in datetime subtraction (#623)\n\nGitOrigin-RevId: 40dd59cfdc5b724a8d1256f39f89534265ec1f99\nChange-Id: Ibe8a499d5448ea8bcaffddee78524aa441b09002\n"
    },
    {
      "commit": "c8e6fd28f8bf8a8cee7cfba4b4b5d38c94f9dab5",
      "tree": "950e242c4055603bbb72377e6c163e137793160a",
      "parents": [
        "f2bbfcffe46d5101bae58af445eef873db8a855c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Sep 30 12:13:57 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 13:46:27 2026 -0700"
      },
      "message": "chore(deps): bump soupsieve from 2.8.4 to 2.9 in /docs (#621)\n\nBumps [soupsieve](https://github.com/facelessuser/soupsieve) from 2.8.4 to 2.9.\n- [Release notes](https://github.com/facelessuser/soupsieve/releases)\n- [Commits](https://github.com/facelessuser/soupsieve/compare/2.8.4...2.9)\n\n---\nupdated-dependencies:\n- dependency-name: soupsieve\n  dependency-version: \u00272.9\u0027\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 4bec845b604f899a18da29cd3ea692e1b320354a\nChange-Id: Ib172d23a2e8ba02c5ee98892ee3980514a0153a2\n"
    },
    {
      "commit": "f2bbfcffe46d5101bae58af445eef873db8a855c",
      "tree": "2f08aa1822c29590e706a6bb47305a394f6dec79",
      "parents": [
        "4d3c66ebf85725214fd7584aad89f4273a5823d4"
      ],
      "author": {
        "name": "Nor.na",
        "email": "2573438329@qq.com",
        "time": "Wed Sep 30 12:13:30 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 13:46:18 2026 -0700"
      },
      "message": "Render tz-aware times as local times without an offset (#613)\n\nitem() and Time._new built the raw literal with time.isoformat(), which includes the UTC offset for tz-aware values - e.g. 07:32:00+02:00. TOML local times have no offset or timezone (the spec\u0027s examples are plain 07:32:00), and this library\u0027s own parser rejects the offset, so the serialized document was invalid and could not be read back. Render from hour/minute/second/microsecond only; naive times are unaffected.\n\nGitOrigin-RevId: ce8f8ee982411c4afef5cfb90df7313cc5f7d779\nChange-Id: I68449c35091dc87c8554b412e66e9df0f01bcd9b\n"
    },
    {
      "commit": "4d3c66ebf85725214fd7584aad89f4273a5823d4",
      "tree": "481e6d89a4c25221fbba35ff806c0bb6c319b5cd",
      "parents": [
        "53c398d961f7df50c14d75bcb50d39f5bba191fc"
      ],
      "author": {
        "name": "Miro Hrončok",
        "email": "miro@hroncok.cz",
        "time": "Wed Sep 30 03:09:36 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 13:46:08 2026 -0700"
      },
      "message": "chore: Switch to dependency groups (PEP 735) (#609)\n\npoetry-core 2.2.0+ supports this\n\nAssisted-By: Claude Sonnet 5\nGitOrigin-RevId: 763bd661bfed068209c03510ae94493eb2db12b5\nChange-Id: I9d97337de17338749792fc346a34618498f58347\n"
    },
    {
      "commit": "53c398d961f7df50c14d75bcb50d39f5bba191fc",
      "tree": "5cd410f7a2198f1e95eaa66d1bd3a450ac3cc91c",
      "parents": [
        "993294f3f16825b344cc04562254ed45100eb40b"
      ],
      "author": {
        "name": "Nor.na",
        "email": "2573438329@qq.com",
        "time": "Wed Sep 30 09:07:47 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 13:45:56 2026 -0700"
      },
      "message": "Escape content appended to a String via __add__ (#612)\n\nString.__add__ spliced the appended text into the raw literal without escaping it, so appending a quote or backslash to a basic string produced a literal that is not valid TOML - including to this library\u0027s own parser. Escape the appended plain text with the string type\u0027s escape sequences (a String operand keeps contributing its already-escaped raw form), mirroring what from_raw already does.\n\nGitOrigin-RevId: 61941deb3c7155e88d5f038148b33a599c04a530\nChange-Id: Ifcdc0ef7512c3767048f805ffe61f5b5b7b28279\n"
    },
    {
      "commit": "993294f3f16825b344cc04562254ed45100eb40b",
      "tree": "604b871ff328857e22f8b3f968a5570ec40aec12",
      "parents": [
        "44307f240643e3d20154489d1150a9a15d43fa89"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Wed Sep 30 09:04:23 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 13:45:45 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#569)\n\n* [pre-commit.ci] pre-commit autoupdate\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.21 → v0.16.9](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.21...v0.16.9)\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* chore: pin ruff base rule selection\n\nRuff 0.16 expanded its default rule set, which surfaced ~50 new\nviolations. Pin the previous defaults explicitly so the version bump\ndoes not change the lint policy, and revert the auto fixes made for\nthe newly enabled rules.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nCo-authored-by: Frost Ming \u003cme@frostming.com\u003e\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\nGitOrigin-RevId: 79039653cbe5ff2a2e23042717455a2ac4875539\nChange-Id: Iec2716d4a6c2001ea4f621755c5fc0ebb62d95bb\n"
    },
    {
      "commit": "44307f240643e3d20154489d1150a9a15d43fa89",
      "tree": "533b97220ff23ad97adefc94aebf034e42ff6860",
      "parents": [
        "e188cc4ce3870c2e268871adfea738be8bc5a5b7"
      ],
      "author": {
        "name": "KBS",
        "email": "youdie006@naver.com",
        "time": "Wed Sep 30 09:49:41 2026 +0900"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 13:45:34 2026 -0700"
      },
      "message": "Keep unwrap() key order after a value is replaced (#591)\n\n* Keep unwrap() key order after a value is replaced\n\n_replace_at() removes the key from _map and re-inserts it, which moves it\nto the end of the dict\u0027s insertion order while _body keeps the original\nslot. dumps() and keys() walk _body and stay correct; unwrap() walks _map\nand does not:\n\n    doc \u003d parse(\"a \u003d 1\\nb \u003d 2\\nc \u003d 3\\n\")\n    doc[\"b\"] \u003d 9\n    dumps(doc)          # \u0027a \u003d 1\\nb \u003d 9\\nc \u003d 3\\n\u0027\n    list(doc.keys())    # [\u0027a\u0027, \u0027b\u0027, \u0027c\u0027]\n    list(doc.unwrap())  # [\u0027a\u0027, \u0027c\u0027, \u0027b\u0027]\n\nunwrap() moved to _map in #521 on the stated assumption that it \"iterates\nin the same insertion order as the old self.items()\", which a replacement\nbreaks. Order comes from the body index instead, so the _map fast path is\nkept and dumps() stays the reference.\n\nReplacements that genuinely move an element still move: a bare key\npromoted to a table has to be emitted after the inline entries, and\nunwrap() follows the body there too. Both cases are covered.\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n---------\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: ac3b04efe9b2e49186a0cdcb69f1fa254d2f0f10\nChange-Id: I2b93934d04b78eb87c9f8e11804693903ec720cf\n"
    },
    {
      "commit": "e188cc4ce3870c2e268871adfea738be8bc5a5b7",
      "tree": "fa31894822f981eacbddb7e921fda746807329d2",
      "parents": [
        "e06c8cd16a2e0005366a4d48fe669ad13f84464a"
      ],
      "author": {
        "name": "tuyen",
        "email": "tuyentran4992@gmail.com",
        "time": "Wed Sep 30 07:38:53 2026 +0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 13:45:21 2026 -0700"
      },
      "message": "fix: add the stdlib `fold` argument to Time and DateTime (#619) (#620)\n\nCo-authored-by: agent-hackathon \u003chackathon-agent@local\u003e\nGitOrigin-RevId: 49d6efa980fedb321f16371a4b05abd2a449f775\nChange-Id: Ied3082f88e8fa944f6947f97bc46454155668ff4\n"
    },
    {
      "commit": "e06c8cd16a2e0005366a4d48fe669ad13f84464a",
      "tree": "d44ca145816011b280d5e5ce7e1a0f03ef5f7ae4",
      "parents": [
        "8b29e091dbb9a8dc0d99b8d2e787f401aea2bab2"
      ],
      "author": {
        "name": "Miro Hrončok",
        "email": "miro@hroncok.cz",
        "time": "Fri Sep 18 12:31:08 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Sep 18 13:45:02 2026 -0700"
      },
      "message": "chore: Define project metadata via [project] table (PEP 621) (#607)\n\n* chore: Define project metadata via [project] table (PEP 621)\n\nThis leads to a small METADATA diff:\n\n     Name: tomlkit\n     Version: 0.15.1\n     Summary: Style preserving TOML library\n    -License: MIT\n    +License-Expression: MIT\n     License-File: LICENSE\n     Author: Sébastien Eustace\n     Author-email: sebastien@eustace.io\n     Requires-Python: \u003e\u003d3.9\n    -Classifier: License :: OSI Approved :: MIT License\n     Classifier: Programming Language :: Python :: 3\n     Classifier: Programming Language :: Python :: 3.9\n\nThe difference is only wrt. license, PEP 639.\n\nThe required poetry-core version was bumped to support this.\n\nThere is no immediate need for this change,\nit\u0027s pure modernization.\nMy personal motivation is for me to make it easier\nto experiment with different build backends.\n\nI used LLM to draft this change, then I reviewed it line by line.\n\nAssisted-By: Claude Opus 5\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n---------\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 8c959b51c7da2734662af759a7c9f95e9a78060a\nChange-Id: I4ca60c5e4deb895c644f40561ac7218ffef91c38\n"
    },
    {
      "commit": "8b29e091dbb9a8dc0d99b8d2e787f401aea2bab2",
      "tree": "83b258426f5cec1d3c1b6e4dafa14ecf09f19e31",
      "parents": [
        "1b25fdf4358a00cc211efa96ccd4fa4e601f7dee"
      ],
      "author": {
        "name": "Gonghan-Princess",
        "email": "1340373031wang@gmail.com",
        "time": "Fri Sep 11 11:19:17 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Sep 12 13:45:35 2026 -0700"
      },
      "message": "fix: reject array slice assignment before mutation (#600)\n\nGenerated with OpenAI Codex.\n\nCo-authored-by: Gonghan-Princess \u003c268298391+Gonghan-Princess@users.noreply.github.com\u003e\nGitOrigin-RevId: 4b38becd75405e0f38ef3e47e9839eb407591c8a\nChange-Id: I5c835214001e0d952427abc8716f33ea371108a2\n"
    },
    {
      "commit": "1b25fdf4358a00cc211efa96ccd4fa4e601f7dee",
      "tree": "3dffd8826c41d598538fe5c3d47ee5ec753731f4",
      "parents": [
        "719f412742dbe05cd98ad301343c0d641ade2a3f"
      ],
      "author": {
        "name": "eeshsaxena",
        "email": "139802361+eeshsaxena@users.noreply.github.com",
        "time": "Tue Aug 18 14:25:10 2026 +0530"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Aug 19 13:44:16 2026 -0700"
      },
      "message": "Accept uppercase E exponent after a leading-zero mantissa (#586)\n\nA float like `0E2` is valid TOML, since both `e` and `E` are allowed\nexponent markers. The \"no leading zeros\" guard exempted the mantissa only\nfor lowercase `0e`, so `0E2` (and `0E+2`, `+0E2`, etc.) were rejected as an\ninvalid number while `0e2` parsed fine. Add `0E` to the exempted prefixes.\n\nGitOrigin-RevId: 7ab7469addd60e03ca3bfbb1287642e8d771e1c0\nChange-Id: I8d3e28713fa3e436fe26e7015ab0f7eb74e9d40b\n"
    },
    {
      "commit": "719f412742dbe05cd98ad301343c0d641ade2a3f",
      "tree": "d0f28e69c5197bc10c775ef104120c689cf9182d",
      "parents": [
        "4c55f566de0e635a7c66b89f0a8e061041a257e7"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Fri Jul 17 09:49:51 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 13:44:24 2026 -0700"
      },
      "message": "chore: release 0.15..1 (#564)\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: d8ed1e3cdb024dfc2c6f12b45a0dfd4d4d91f727\nChange-Id: If4e10c3b7d672936e8eff9543fe34579f47c543d\n"
    },
    {
      "commit": "4c55f566de0e635a7c66b89f0a8e061041a257e7",
      "tree": "6ab5832cbccf3934447bb3e73b1cdd7e66853935",
      "parents": [
        "2cff8e0b8abcd86a5b4aee04339fe8d4249acd3f"
      ],
      "author": {
        "name": "David Hotham",
        "email": "david.hotham@microsoft.com",
        "time": "Thu Jul 16 09:39:11 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 13:44:19 2026 -0700"
      },
      "message": "Float is not a sequence  (#563)\n\n* Remove scalar indexing fallbacks\n\n* Clean up obsolete override suppressions\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] \u003c198982749+Copilot@users.noreply.github.com\u003e\nGitOrigin-RevId: 94e62fbef9d16093dec86728888474197f4a5cc7\nChange-Id: I5761d9ec38de634095ad38357cc64007daea5682\n"
    },
    {
      "commit": "2cff8e0b8abcd86a5b4aee04339fe8d4249acd3f",
      "tree": "ecf8aaaa4647c29242f8f291a505866c30d03f86",
      "parents": [
        "db804f3d3ca94d45bd5d38ccc362dbf2497e48bd"
      ],
      "author": {
        "name": "Vineeth Sai",
        "email": "vineethsai4444@gmail.com",
        "time": "Tue Jul 14 17:36:12 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 13:44:13 2026 -0700"
      },
      "message": "Fix top-level scalar captured by a table rendered from a dotted key (#550)\n\nAppending a scalar to a document after a dotted-key entry (a.b \u003d 1)\nwhose super table had gained a child that renders a [a.c]-style header\nplaced the scalar textually inside that table\u0027s scope, so it silently\nre-nested as a.c.z on round-trip.\n\n_get_last_index_before_table treated every dotted-key table as inline;\nnow it also stops at a dotted-key table whose children render a table\nheader, so new scalars are inserted before it, matching the existing\nbehavior for regular tables. Purely inline dotted keys are unaffected.\n\nFixes #543\n\nGitOrigin-RevId: 495a42ecc9119eaaeb895def0fd025a71cd1cf60\nChange-Id: I05220bbf4534b7aaf11b5e7ad52a6bfa2c15193b\n"
    },
    {
      "commit": "db804f3d3ca94d45bd5d38ccc362dbf2497e48bd",
      "tree": "abf07d68d8b9fa5289949befecdf467dd0933a24",
      "parents": [
        "0ee51e5c50b13c892db5505f202462104d6427ca"
      ],
      "author": {
        "name": "netliomax25-code",
        "email": "netliomax25@gmail.com",
        "time": "Tue Jul 14 14:06:37 2026 +0530"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:44:28 2026 -0700"
      },
      "message": "reject a comment containing line breaks in Item.comment and add_line (#544)\n\nGitOrigin-RevId: 21a4942ed31e773061c9fc047d55b1bb3c637ee3\nChange-Id: Ic864bba5c5c470deffeabdfbbb0404e949f93e7d\n"
    },
    {
      "commit": "0ee51e5c50b13c892db5505f202462104d6427ca",
      "tree": "46a25e30a7ae7c74a47078e646c01288cc40fdfe",
      "parents": [
        "b63f7c7d3dd32b3fe71580c9f9d6604946e05864"
      ],
      "author": {
        "name": "Sanjay Santhanam",
        "email": "51058514+Sanjays2402@users.noreply.github.com",
        "time": "Tue Jul 14 00:28:48 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:44:23 2026 -0700"
      },
      "message": "fix: preserve leading newline of multiline string built with string() (#551)\n\n`tomlkit.string(value, multiline\u003dTrue)` rendered the value as\n`\"\"\"\u003cvalue\u003e\"\"\"`. When `value` starts with a newline the output looks\nlike `\"\"\"\\n...\"\"\"`, and per the TOML spec a newline immediately\nfollowing the opening delimiter is trimmed on parse. So a value that\nbegins with a newline was silently lost on the very next round-trip:\n\n    \u003e\u003e\u003e s \u003d tomlkit.string(\"\\nfoo\", multiline\u003dTrue)\n    \u003e\u003e\u003e str(s)\n    \u0027\\nfoo\u0027\n    \u003e\u003e\u003e s.as_string()\n    \u0027\"\"\"\\nfoo\"\"\"\u0027\n    \u003e\u003e\u003e str(tomlkit.parse(f\"k \u003d {s.as_string()}\")[\"k\"])\n    \u0027foo\u0027                      # leading newline dropped\n\nThe value the String object reports is correct; only its serialized\nform was wrong, so the corruption only surfaced after re-parsing.\nBoth tomllib and tomlkit\u0027s own parser agree the old output decodes to\nthe wrong value, so this is a genuine serialization bug (not a TOML\n1.0 vs 1.1 difference). Affects basic and literal multiline strings,\nincluding values that start with `\\r\\n`.\n\nFix: in `String.from_raw`, when the string is multiline and its\nrendered body starts with a newline, emit an extra leading newline\n(the one the parser trims) so the value survives round-tripping. This\nis exactly how the spec suggests representing such a value. Single-line\nstrings and multiline strings without a leading newline are unchanged.\n\nAn existing `test_create_string` case asserted the old lossy output\n(`\"\"\"\\nMy\\nString\\n\"\"\"`); it only checked `as_string()`, never a\nround-trip, so it had locked in the bug. Updated it to the correct,\nround-trippable rendering and added a dedicated round-trip regression\ntest covering basic/literal multiline and `\\r\\n`-leading values.\n\nGitOrigin-RevId: 8cd44f58b499da3c80a29bc877a512665a15e0bb\nChange-Id: Ief9079a25d5c6b663a59da5834822f77db2904f1\n"
    },
    {
      "commit": "b63f7c7d3dd32b3fe71580c9f9d6604946e05864",
      "tree": "d7b8200616f6107abe34f544ab5f46c17e427932",
      "parents": [
        "18bf515af6156da4889d14e43af38cfcf19abd15"
      ],
      "author": {
        "name": "Zain Dana Harper",
        "email": "zaindharper@gmail.com",
        "time": "Mon Jul 13 17:59:45 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:44:19 2026 -0700"
      },
      "message": "Fix array of tables replacing a dotted key swallowing the next sibling (#542) (#549)\n\nAssigning an AoT over a dotted key (e.g. `doc[\"a\"] \u003d aot(...)` where `a`\ncame from `a.b \u003d ...`) left the new `[[a]]` header in the dotted key\u0027s\ninline slot, so a following dotted sibling such as `c.d \u003d 2` was rendered\ninside the array of tables and captured on round-trip.\n\n`_replace_at`\u0027s `dotted_to_header` guard only recognised non-super Tables,\nnot AoTs, so the reposition-before-inline-siblings path that already fixes\nthe table case (#513/#524) never ran for arrays of tables. Extend the guard\nto AoT. Adds a regression test mirroring the table case and a changelog entry.\n\nCo-authored-by: Zain Dana Harper \u003czain@aurora-framework.dev\u003e\nCo-authored-by: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 67d3e86502706df2a9ed67114ab67e25bcdcbbb7\nChange-Id: Id58eee5b0bdf7e0cc792a29362df0ad687e902b6\n"
    },
    {
      "commit": "18bf515af6156da4889d14e43af38cfcf19abd15",
      "tree": "e664235ba7467c2ebd8efc518138558c891eea36",
      "parents": [
        "c881ebc40e4a9ecf8498c6292c4c1feafc58ffdd"
      ],
      "author": {
        "name": "Sarath Francis",
        "email": "sarathfrancis90@gmail.com",
        "time": "Mon Jul 13 19:52:08 2026 -0500"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:44:15 2026 -0700"
      },
      "message": "fix: avoid duplicate table header when adding a key to an out-of-order table (#545)\n\nAdding a plain key to an out-of-order table whose concrete `[x]` part is\ndeclared after its sub-tables (the \"defining a super-table afterward is ok\"\nspec form) wrote the value into the header-less super part, forcing it to\nrender a second `[x]` header next to the existing concrete one. The dumped\noutput then had a duplicate header and no longer parsed.\n\nRoute the value into the existing concrete (non-super) part instead, so the\nheader that already exists gains the key and no second header is emitted.\n\nCo-authored-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: e23a25438c6cc9b8cc28b6dcf76dc52f9c7a33e3\nChange-Id: I3766e0a33e909a8c1858d3eb6ce020cd55e65686\n"
    },
    {
      "commit": "c881ebc40e4a9ecf8498c6292c4c1feafc58ffdd",
      "tree": "ca4dc02bc37b32424f045f1b80c316cc0105e700",
      "parents": [
        "9d39d47fc0edc6585459acb58bcddc0c3c1b9e83"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Tue Jul 14 08:32:27 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:44:10 2026 -0700"
      },
      "message": "Update CHANGELOG.md to reflect recent fixes and enhancements\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 34e51e2d6d09af86970f266a4217cea839fdc347\nChange-Id: Ifa2bb658969003b22e77e8642abe004a40fe18b8\n"
    },
    {
      "commit": "9d39d47fc0edc6585459acb58bcddc0c3c1b9e83",
      "tree": "d5b7a520232d4e09cde28756a5fbb4bdd471db83",
      "parents": [
        "01374eacd3d207a574820e3069e959fe7de5e7ef"
      ],
      "author": {
        "name": "netliomax25-code",
        "email": "netliomax25@gmail.com",
        "time": "Tue Jul 14 05:58:54 2026 +0530"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:44:04 2026 -0700"
      },
      "message": "reject overlong decimal integer instead of coercing to inf (#538)\n\n* reject overlong decimal integer instead of coercing to inf\n\n* skip overlong-integer test when the int digit limit is unavailable\n\nPython 3.9.13 and earlier lack the int-from-string conversion limit\n(backported in 3.9.14), so int() succeeds on any digit count and the\nparser never rejects the literal. The macOS and Windows 3.9 CI jobs run\n3.9.13, which is why they failed while Ubuntu\u0027s 3.9 passed.\n\nGitOrigin-RevId: b48c094775fba4cb3c16dea4c302ae5e371ac4e9\nChange-Id: If133f282330ea9c73e973cc5ad7b76afa2648b2a\n"
    },
    {
      "commit": "01374eacd3d207a574820e3069e959fe7de5e7ef",
      "tree": "b557b8d18f0348e5aec35c4d3ab6c99c2a4aa713",
      "parents": [
        "0ce8250afb1aa8626db93f64eedd71998258bd84"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Tue Jul 14 02:26:12 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:44:00 2026 -0700"
      },
      "message": "Represent out-of-order table proxies with merged values (#536)\n\nGitOrigin-RevId: cc05afa962244b3d1c781a7fc54f66b7f29ef8b7\nChange-Id: I847b13d8473f5578bf94e070c3e161bd3d32746e\n"
    },
    {
      "commit": "0ce8250afb1aa8626db93f64eedd71998258bd84",
      "tree": "7203856431e1aa94d3983d16453301b36f9eefbd",
      "parents": [
        "452863d1087e06cb9524bcb9041a495816294640"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Tue Jul 14 08:24:01 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:43:55 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#561)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.20 → v0.15.21](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.20...v0.15.21)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 76bb47aec93e8928b894f59d062be3adf6bdb36e\nChange-Id: I46871783ec4a350dbf9e9be6dee8a35920eeafa2\n"
    },
    {
      "commit": "452863d1087e06cb9524bcb9041a495816294640",
      "tree": "5560e929fe0e73fb71af334d4cda66030be6602a",
      "parents": [
        "5ac6ea8f925214a4dbf7d7c16cb5d4c1f8e1ff00"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Tue Jul 14 02:23:47 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:43:50 2026 -0700"
      },
      "message": "Preserve table display names on self assignment (#537)\n\nGitOrigin-RevId: 49069361a41d2050086b7ec0f69a38a548802867\nChange-Id: I3a7b29fd565cfa193443c67b7e5fd60e3ca00f1c\n"
    },
    {
      "commit": "5ac6ea8f925214a4dbf7d7c16cb5d4c1f8e1ff00",
      "tree": "876144d0570338c75909921d16f99efdd4ebfb2c",
      "parents": [
        "f0ee1526aa230e63981d1473101ee1c968e3d7eb"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Mon Jul 13 09:51:35 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:43:45 2026 -0700"
      },
      "message": "Preserve whitespace when replacing super tables (#534)\n\nGitOrigin-RevId: b2821370ca8a7ead712287d7ec856b36165aaef7\nChange-Id: Ibbb26e4adb51f01a4874f7e3e443bfaffaae8c7c\n"
    },
    {
      "commit": "f0ee1526aa230e63981d1473101ee1c968e3d7eb",
      "tree": "e7b6bd46e41bf91ca874d8d64007d245b941a9ac",
      "parents": [
        "f70498373471a10d7071f0b64442bf929a930042"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 13 15:48:21 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:43:36 2026 -0700"
      },
      "message": "chore(deps-dev): bump soupsieve from 2.4.1 to 2.8.4 (#559)\n\nBumps [soupsieve](https://github.com/facelessuser/soupsieve) from 2.4.1 to 2.8.4.\n- [Release notes](https://github.com/facelessuser/soupsieve/releases)\n- [Commits](https://github.com/facelessuser/soupsieve/compare/2.4.1...2.8.4)\n\n---\nupdated-dependencies:\n- dependency-name: soupsieve\n  dependency-version: 2.8.4\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 53b8850163ac297466c5e9ae10fe81733e15012d\nChange-Id: I72baf508c5d89b8b5722c30a17b1d673d4cb58da\n"
    },
    {
      "commit": "f70498373471a10d7071f0b64442bf929a930042",
      "tree": "6e7d6040ebf910536268c15f34ebfe49bcc278ab",
      "parents": [
        "232934f4463be5aa14916731bc5d87a36b9dbf35"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 13 15:47:57 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 14 13:43:28 2026 -0700"
      },
      "message": "chore(deps): bump soupsieve from 2.5 to 2.8.4 in /docs (#560)\n\nBumps [soupsieve](https://github.com/facelessuser/soupsieve) from 2.5 to 2.8.4.\n- [Release notes](https://github.com/facelessuser/soupsieve/releases)\n- [Commits](https://github.com/facelessuser/soupsieve/compare/2.5...2.8.4)\n\n---\nupdated-dependencies:\n- dependency-name: soupsieve\n  dependency-version: 2.8.4\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: ea10cb98df9c57e321d6b470c78571934ecf5ed4\nChange-Id: I811d313d1e835552ef53bf4a41204f28a2d9eb84\n"
    },
    {
      "commit": "232934f4463be5aa14916731bc5d87a36b9dbf35",
      "tree": "345b9765832e632f2103428fe9a70672914782d5",
      "parents": [
        "92673df5f3de75c493bc6bb412eab269c0e6d3f5"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Thu Jul 09 15:16:18 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Jul 11 13:43:11 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#548)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.18 → v0.15.20](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.18...v0.15.20)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 2c80bf0b79bdffa98c73e0308076dbbaa5fdf7aa\nChange-Id: I40e00998e66f26f3cc6fd312dc6e1c8fb181826f\n"
    },
    {
      "commit": "92673df5f3de75c493bc6bb412eab269c0e6d3f5",
      "tree": "a138264d1c341482346decb761481418b9505ed1",
      "parents": [
        "0ef63dd427a95d0025bd4b34417a69b81939b2ee"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Tue Jun 23 10:36:56 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 23 13:45:07 2026 -0700"
      },
      "message": "fix: keep newline after dotted inline table (#533)\n\nGitOrigin-RevId: 43668ddebc3f082bf385d328aceed18d26976897\nChange-Id: Ied61afa4bd801c2d1719184bb936c0f68a80e678\n"
    },
    {
      "commit": "0ef63dd427a95d0025bd4b34417a69b81939b2ee",
      "tree": "5df96cc7281e7e426d3109e235384bd32bcba60e",
      "parents": [
        "8f11179bd4ea8b2b47e6eae1720f36cf49bb686c"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Tue Jun 23 10:23:13 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 23 13:45:03 2026 -0700"
      },
      "message": "fix: reject out-of-order concrete+super table redefinitions at parse time (#530)\n\nOut-of-order value-vs-table and dotted-key-vs-table redefinitions\nwere silently accepted (or only raised on access) because the inner\nif-elif chain in Container.append had no else clause for the case\nwhere an existing concrete table is extended by a super-table after\nan unrelated table header.\n\n- Add else clause that validates the super-table against the concrete\n  table, catching type mismatches and double table definitions at parse\n  time instead of lazily during access/unwrap.\n- Enhance _validate_table_candidate to detect when a non-dotted\n  candidate key is a prefix of an existing dotted key.\n- Call _validate_out_of_order_table after _raw_append in the fallthrough\n  path so out-of-order fragments are validated before the document is\n  materialized.\n\nFixes #523\n\nCo-authored-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: d3c76f0bbe90af4b12a3b83bd8e59bc9061dfe85\nChange-Id: Ib3afa2b7ce162410d34995abcac716ecdb12493c\n"
    },
    {
      "commit": "8f11179bd4ea8b2b47e6eae1720f36cf49bb686c",
      "tree": "07256a5b8786160ccf76fb9d095d92703bfae7c7",
      "parents": [
        "c773396939daca0057204833dd1cedd5f55e6f5a"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Tue Jun 23 15:55:43 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 23 13:44:58 2026 -0700"
      },
      "message": "Raise on malformed array element instead of dropping it\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: f40ae46323992b1cda523424bdfb30de899eb4f6\nChange-Id: I7272077a2a4d27dbd8bddb9e6eab364d9f3cf503\n"
    },
    {
      "commit": "c773396939daca0057204833dd1cedd5f55e6f5a",
      "tree": "84265181ada0cabcb02b108a9c326520140ec5fd",
      "parents": [
        "781ec942d2126054c50c5c1c8cbb6ddcf048e160"
      ],
      "author": {
        "name": "netliomax25-code",
        "email": "netliomax25@gmail.com",
        "time": "Tue Jun 23 13:24:33 2026 +0530"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 23 13:44:53 2026 -0700"
      },
      "message": "raise on malformed array element instead of dropping it (#527)\n\nGitOrigin-RevId: d548e18b71b28d0e9628127bf0b9dfc5a254dca0\nChange-Id: Ie8495a8b05b3214f2e99208b7b255b257de7d561\n"
    },
    {
      "commit": "781ec942d2126054c50c5c1c8cbb6ddcf048e160",
      "tree": "73508cbd50f4a08e73244997096d6f6f1e630380",
      "parents": [
        "8fd5e3dd6f5a9516824d2a5c34a92fd50af6d175"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Tue Jun 23 09:44:27 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 23 13:44:47 2026 -0700"
      },
      "message": "fix: reject tables inside inline tables (#532)\n\nGitOrigin-RevId: 11e22aefccd8069a90ae75d20613b9b1068754a1\nChange-Id: Ia111e564806d9cdb0143fa5bde2206c5d3b53c92\n"
    },
    {
      "commit": "8fd5e3dd6f5a9516824d2a5c34a92fd50af6d175",
      "tree": "8ee1e03084018c78521b72b1a748a41a1b6e7064",
      "parents": [
        "516f4660dc00bae5d4a73bc73c3a318c5c1ed59c"
      ],
      "author": {
        "name": "Labib Bin Salam",
        "email": "98468420+Labib-Bin-Salam@users.noreply.github.com",
        "time": "Tue Jun 23 08:39:27 2026 +0100"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 23 13:44:42 2026 -0700"
      },
      "message": "Fix duplicated prefix and captured sibling when replacing a dotted key with a table (#526)\n\nReplacing a dotted key\u0027s value with a table (e.g. ``doc[\"a\"] \u003d {...}`` where\n``a`` was parsed from ``a.b \u003d ...``) kept the dotted key, which both duplicated\nthe prefix onto the new ``[a]`` header (#524) and let the header swallow any\nsibling that follows it on round-trip (#513).\n\nA dotted key only renders correctly alongside a super table; when the\nreplacement is a non-super table it now drops the dotted key, and when an\ninline sibling still follows it moves past it -- mirroring the existing\nvalue-to-table handling. That scan now skips dotted-key tables when looking\nfor the first real header, which additionally fixes the same capture for a\nplain value replaced by a table before a dotted key.\n\nFixes #513\nFixes #524\n\nGitOrigin-RevId: ee4eedbacc8eb72872af050996c7396ecce190b9\nChange-Id: If3c4a336ccd306ed76bfab15fec17d714d13b6d8\n"
    },
    {
      "commit": "516f4660dc00bae5d4a73bc73c3a318c5c1ed59c",
      "tree": "a541f9b1291e906a9748fc4f6cb4d85e3c395484",
      "parents": [
        "c1782d17df177522c10c6f6fe620f553d14ed1cd"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Tue Jun 23 09:32:27 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 23 13:44:38 2026 -0700"
      },
      "message": "Render inline tables in O(n) instead of O(n^2) (#525)\n\nInlineTable.as_string() recomputed, on every separator comma, two\nany(body[i + 1:]) tail scans (is there a following Null / a following key?)\nto decide whether to drop a dangling separator. On an inline table with many\nkeys that is O(n^2).\n\nPrecompute the needed facts in a single pass instead -- whether any\nexplicit-comma whitespace is present, the index of the last real key, and the\nindex of the last Null (deleted) element -- and turn the two per-comma scans\ninto O(1) index comparisons. The render is now O(n).\n\nNo behaviour change: the precomputed predicates are exactly equivalent to the\ntail scans. Full suite incl. toml-test conformance passes; round-trip output\nis byte-identical -- including edited inline tables (keys added/removed,\ntrailing/leading commas, comments, dotted/nested) -- verified by a\ndifferential over ~7k generated inline tables with del/setitem mutations.\n~4x faster rendering a 50-key inline table, ~40x at 800 keys.\n\nGitOrigin-RevId: 86f45625bf67b5ae875fec8ced6d9032aef886e1\nChange-Id: I5116c8f68293f7a4b4a552a3f1038343910594a0\n"
    },
    {
      "commit": "c1782d17df177522c10c6f6fe620f553d14ed1cd",
      "tree": "58865ad3cfa20c0ec44acc82b226f5238731dce1",
      "parents": [
        "7483bcf9efdcadf41734dc5a60318255fdc40cb2"
      ],
      "author": {
        "name": "Sarath Francis",
        "email": "sarathfrancis90@gmail.com",
        "time": "Tue Jun 23 03:25:05 2026 -0400"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 23 13:44:32 2026 -0700"
      },
      "message": "Fix ParseError when a sub-table extends an array of tables out of order (#498)\n\n* Fix ParseError when a sub-table extends the last array-of-tables element after an unrelated table\n\nWhen a sub-table header such as [fruit.apple.texture] follows the array\n[[fruit]] with an unrelated table in between, the parser rebuilds it as a\nfresh super table named \"fruit\" and tries to append it to the document,\ncolliding with the existing array of tables and raising\n\n    ParseError: Key \"fruit\" already exists.\n\neven though the document is valid TOML 1.0.0. The contiguous form (no\nintervening table) already worked because the sub-table is consumed while\nthe array element is still being parsed.\n\nA sub-table header that refers to an existing array of tables extends the\narray\u0027s last element, regardless of any tables defined in between, so merge\nits contents into that element instead of treating it as a redefinition.\nDefining a non-super table with the same name as an array (e.g. [fruit]\nafter [[fruit]]) is still a genuine conflict and continues to raise.\n\nFixes #261\n\n* Document the out-of-order array-of-tables round-trip limitation\n\n---------\n\nCo-authored-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: de68fd06eef61aab0d50d69fb589a43f00a046bf\nChange-Id: Ia81ad4eac17f77f301d62ce157191652955d3961\n"
    },
    {
      "commit": "7483bcf9efdcadf41734dc5a60318255fdc40cb2",
      "tree": "1b22e2e31b5cefe67d6c87788aa95b43571d312a",
      "parents": [
        "3d917f3ecef2d941affa2c7a18c521ad2f39a795"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Tue Jun 23 15:14:14 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 23 13:44:27 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#541)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.17 → v0.15.18](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.17...v0.15.18)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: c46482be9b036c935a193f553c258e4e6e8e3abe\nChange-Id: Ifb63a01709dcbe2b3a58dc2f29ea89cef37cc8ec\n"
    },
    {
      "commit": "3d917f3ecef2d941affa2c7a18c521ad2f39a795",
      "tree": "dfa25701332879af2216a075f61627648c3eb077",
      "parents": [
        "23f2c65637de34f8ea46646bc8f9882a51804094"
      ],
      "author": {
        "name": "netliomax25-code",
        "email": "netliomax25@gmail.com",
        "time": "Thu Jun 18 06:01:12 2026 +0530"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Jun 20 13:43:49 2026 -0700"
      },
      "message": "reject array-of-tables header missing its second closing bracket (#519)\n\nGitOrigin-RevId: 9c126774d3f3481a4da3a433ad44cbe1f8bf1390\nChange-Id: I6e07da5eb11ca272bb253925448cc310a45320f3\n"
    },
    {
      "commit": "23f2c65637de34f8ea46646bc8f9882a51804094",
      "tree": "98330389075c891eda153da977ff4e1e26c3af73",
      "parents": [
        "ed987bedc804106cf66c659b40a05c5e619ed340"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Thu Jun 18 02:29:55 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Jun 20 13:43:44 2026 -0700"
      },
      "message": "Bulk-scan multiline string bodies (#518)\n\n#491 bulk-scanned single-line string bodies but left multiline (\"\"\"/\u0027\u0027\u0027)\nbodies on the per-character loop because of \\r\\n handling. Extend the same\nfast path to multiline: append the run of ordinary characters in one slice up\nto the next delimiter, backslash, carriage return or control character.\n\nRaw line feeds and tabs are valid inside a multiline body, so they are NOT\nstop characters -- a whole multi-line body is consumed in a single pass. A\ncarriage return still stops the scan, so the existing branch keeps validating\nthe \\r\\n pair (and rejecting a lone \\r) and \\r\\n is preserved byte-for-byte.\nInvalid control characters and DEL also stop the scan, so they are still\nrejected at the same position.\n\nNo behaviour change: full suite incl. toml-test conformance passes; verified\nby a differential over ~122k generated multiline strings (LF / CRLF / bare CR,\ntabs, lone quotes, escapes, control bytes, unicode/astral, EOF truncation) --\nbyte-identical round-trip and identical exception class/line/col. ~23x faster\nparsing an LF multiline-heavy document (~11x with CRLF).\n\nCo-authored-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: c468c978b1c77528986c4e5eb9b27c92858ddeec\nChange-Id: I49b7ee7320527bd6ba72f465798fd0a320ee5b44\n"
    },
    {
      "commit": "ed987bedc804106cf66c659b40a05c5e619ed340",
      "tree": "94dd07ee34484e004ffd79515ed41bfdc476d683",
      "parents": [
        "96a5c45ba5374abe929a924af6a4c36125da6368"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Wed Jun 17 10:20:04 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 17 13:44:19 2026 -0700"
      },
      "message": "Merge AoT fragments when building an out-of-order table proxy (#507)\n\n* Merge AoT fragments when building an out-of-order table proxy\n\nWhen an array of tables is split across out-of-order parts of the same\ntable, OutOfOrderTableProxy fed both fragments to _raw_append, which\nonly knows how to chain duplicate Table parts and raised\nKeyAlreadyPresent. Valid documents like\n\n    [hooks]\n    [[hooks.Stop]]\n    [unrelated]\n    [[hooks.Stop]]\n    [hooks.state]\n\nfailed at parse time (the proxy is also built by __contains__). The\nfragments are now presented as a new merged AoT referencing the live\nelement tables, so neither fragment is mutated and the parts keep\nrendering their own elements.\n\nFixes #505\n\n* Clarify out-of-order AoT merge handles 3+ fragments\n\nDocument why the tuple-index branch is only a degenerate-collision guard\n(three or more genuine AoT fragments stay on the single-index merge\npath) and add a regression test that splits an array of tables across\nthree out-of-order parts.\n\nGitOrigin-RevId: 25ae63abce3181fd376aed7acdc52418d126df04\nChange-Id: Ic6006046222f51783fabef5402c28b03bda12a5b\n"
    },
    {
      "commit": "96a5c45ba5374abe929a924af6a4c36125da6368",
      "tree": "768edba1de930df1a0104e0cc83d51fdd1fc8455",
      "parents": [
        "4a3fa3761ebd498c2f327af10f2908f2b310bbd0"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Tue Jun 16 03:00:42 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 17 13:44:14 2026 -0700"
      },
      "message": "Speed up unwrap() by resolving keys from the key map, not items() (#521)\n\nContainer.unwrap() and Table.unwrap() iterated self.items() (the inherited\nMutableMapping view), which routes every key through __getitem__ -\u003e item(),\nrebuilding a SingleKey from the bare string on each key only to look the\nvalue back up. The structured Key objects already sit in the container\u0027s\n_map alongside their body index.\n\nResolve straight from _map instead: O(1) per in-order key, no SingleKey\nrebuild. Out-of-order keys (a tuple index) still go through\nOutOfOrderTableProxy, so their validation (and fragment merge) is unchanged\n-- in particular a conflicting out-of-order fragment still raises\nKeyAlreadyPresent from unwrap() exactly as before. Table.unwrap() delegates\nto the inner container\u0027s unwrap().\n\nNo behaviour change: full suite incl. toml-test conformance passes; the\noutput dict (keys, values AND order) plus exception parity are verified by a\ndifferential over ~9k generated documents (out-of-order / conflicting /\nnested / AoT / dotted / inline, with del+setitem mutations). ~9-13x faster\nunwrap() on key-heavy documents.\n\nGitOrigin-RevId: 9ac3f98214dbfbca0157b6c370c7986f497c34e4\nChange-Id: I31e8b228894c079afa2b68452281e8e923d667ca\n"
    },
    {
      "commit": "4a3fa3761ebd498c2f327af10f2908f2b310bbd0",
      "tree": "d5a2b97ed1e8753b24553c3de0292dc081509c2d",
      "parents": [
        "8f5c6dd3ab347749f81f73027c406056d6216a99"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Tue Jun 16 08:27:32 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 17 13:44:08 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#522)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.16 → v0.15.17](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.16...v0.15.17)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 80b743ce7935ccf17c254b9f63ba9b2d92641e92\nChange-Id: Id94239cc440c96433e3cc407ef5bb4d4e993864e\n"
    },
    {
      "commit": "8f5c6dd3ab347749f81f73027c406056d6216a99",
      "tree": "d45981e2b5589f0cf5d20f1a784397d4f684c80d",
      "parents": [
        "35f5ddb7b8bf0ace073636e9226736c101ca3d27"
      ],
      "author": {
        "name": "tienvantranspk-tech",
        "email": "tienvantranspk@gmail.com",
        "time": "Tue Jun 16 07:19:08 2026 +0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 17 13:44:02 2026 -0700"
      },
      "message": "Return a single key from key() for a single-element list (#520)\n\nA one-element key list built a single-element DottedKey, which behaved differently from a plain key - for example, a membership test failed after appending it to a document. Return the SingleKey directly when the iterable yields exactly one key; multi-element lists are unchanged.\n\nFixes #430.\n\nCo-authored-by: tienvantranspk-tech \u003c230352521+tienvantranspk-tech@users.noreply.github.com\u003e\nGitOrigin-RevId: 483f240ea7d45bd9c82fbd16d8e63270a69770c3\nChange-Id: I4933271fe9327a0fcc461d95eb2195d87998c111\n"
    },
    {
      "commit": "35f5ddb7b8bf0ace073636e9226736c101ca3d27",
      "tree": "6c0878969c32324d8d1c4bad44ff0beed849210d",
      "parents": [
        "703c3947cca7cd2a5a106a3c60b33864d211a81f"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Mon Jun 15 10:20:31 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 17 13:43:56 2026 -0700"
      },
      "message": "Validate out-of-order tables incrementally while parsing (#509)\n\nCo-authored-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: ae1b6790d99b21bc0a339a5825e7d5e40e7e6f6a\nChange-Id: I678f0d238482b461c10b544f2ae4aed40da76568\n"
    },
    {
      "commit": "703c3947cca7cd2a5a106a3c60b33864d211a81f",
      "tree": "1d9f5edffe63787f2ae7087181fc38bafb7683e8",
      "parents": [
        "333467c1466c7472e3051b915d8f5a2720b64e5b"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Mon Jun 15 09:58:35 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 17 13:43:51 2026 -0700"
      },
      "message": "Skip the value attempt when an array closes right after a value (#517)\n\nIn _parse_array, a value-less position immediately followed by `]` (an empty\narray, or the position just after a trailing comma) called _parse_value()\nonly for it to raise UnexpectedCharError on `]`, which the loop catches and\ndiscards. Building that exception is not free: parse_error eagerly computes a\nline/column, and since Source is a str subclass, _to_linecol splits the whole\ndocument. So every array that closes right after a value pays an O(document\nsize) scan just to build a thrown-away error -- which adds up on lock files,\nwhere each `files \u003d [...]` block hits it.\n\nGuard the value attempt with `and self._current !\u003d \"]\"`: when the cursor sits\non the closing bracket, fall straight through to the existing close-bracket\nbranch. _parse_value() never consumes input before raising on `]` (it marks\nthe position and reads the current char), so skipping it is behaviourally a\nno-op.\n\nNo behaviour change: full suite incl. toml-test conformance passes; arrays\nround-trip byte-identically and malformed arrays raise the same exception at\nthe same line/column (checked by a differential over ~13k generated arrays\nincl. nested / AoT / leading+trailing+double commas / EOF truncation).\n~1.6x faster parsing a 27 KB lock-style document, and the gain grows with\nfile size.\n\nGitOrigin-RevId: 989c1a79787d63806de37934a6c2b041e1f550d8\nChange-Id: Iadca50e0227f6786a4f1a83b4177fb129284127f\n"
    },
    {
      "commit": "333467c1466c7472e3051b915d8f5a2720b64e5b",
      "tree": "ab9764bae405c9a3665bac770b1b214bb18ed33a",
      "parents": [
        "67993f09b2c828b72f849030b15e9b2e020ded65"
      ],
      "author": {
        "name": "netliomax25-code",
        "email": "netliomax25@gmail.com",
        "time": "Mon Jun 15 13:24:15 2026 +0530"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 17 13:43:45 2026 -0700"
      },
      "message": "reject a table redefined after its parent table header (#516)\n\nGitOrigin-RevId: 7c978a512b9b99ac02a5abd689c10418448148b6\nChange-Id: I18d04201412b103935528ad864e231991e884222\n"
    },
    {
      "commit": "67993f09b2c828b72f849030b15e9b2e020ded65",
      "tree": "f2d76b346174313317f3be76989f9acca5a78361",
      "parents": [
        "87860f3220bdb1670e0120edcccf52b63c95fbeb"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Mon Jun 15 05:02:46 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 17 13:43:38 2026 -0700"
      },
      "message": "Place inline-table separator after the value, not the comment (#514)\n\nWhen appending a key to a multiline inline table whose last value is\nfollowed by a comment, the deferred separator comma was spliced in with\nbuf.rstrip(), landing after the comment text instead of after the value.\nThe comma became part of the comment, so the new key had no separator\nand the output no longer round-tripped. Track the buffer position right\nafter each rendered value and insert the separator there.\n\nFixes #512.\n\nGitOrigin-RevId: 281ca004386b83bc12d88d79c15b99c714477dc6\nChange-Id: Id0299277abd699ea441125b13034c63b4bf45e23\n"
    },
    {
      "commit": "87860f3220bdb1670e0120edcccf52b63c95fbeb",
      "tree": "b87e54c9da6fb5734c9113134906ea35884bae87",
      "parents": [
        "39da7f9ab10920321664b9b72f7f7fe6bca3227f"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Mon Jun 15 05:00:04 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 17 13:43:32 2026 -0700"
      },
      "message": "Add a native OutOfOrderTableProxy.__contains__ (#515)\n\nOutOfOrderTableProxy was the last mapping type still inheriting the\nMutableMapping.__contains__ mixin, which implements `key in proxy` as\n`try: proxy[key]` -- routing through __getitem__, which resolves the value\n(and builds a NonExistentKey on every absent key) only to discard it.\n\nAdd a native __contains__ that returns `key in self._internal_container`,\nexactly the predicate __getitem__ already uses as its guard and itself a\nnative Container.__contains__ (which still rebuilds the proxy for an\nout-of-order key so its validation runs as before). This completes #483,\nwhich gave Container, Table and InlineTable native __contains__.\n\nNo behaviour change: the membership result, the raised exception type and\ndocument (non-)mutation are all identical to the inherited path. Roughly\n2.1x faster on a present key and 1.3x on an absent one.\n\nGitOrigin-RevId: 82bb211e031dc50ebf4e25465ee6144b23acd9bf\nChange-Id: I83b17bd6bdfe519fce0d4b7005e73a2a45128414\n"
    },
    {
      "commit": "39da7f9ab10920321664b9b72f7f7fe6bca3227f",
      "tree": "e680feb041cf1def32006972d70a751e9b072058",
      "parents": [
        "a9c81c699aee84cf978378c120e239c75b9827c4"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Sat Jun 13 10:16:24 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Jun 14 13:43:57 2026 -0700"
      },
      "message": "Prefix every line of a multiline comment with # (#511)\n\ncomment() only prepended \u0027# \u0027 to the whole string, so a value with\nembedded newlines rendered the second line onward without a \u0027#\u0027 and\nproduced invalid TOML. Prefix each line individually (bare \u0027#\u0027 for\nempty lines). Fixes #449.\n\nGitOrigin-RevId: 5b2b1ffbc1a62df387d7114b733a606933bea17a\nChange-Id: I0a1a62c470e97528afa581a8618189ae0f8107d9\n"
    },
    {
      "commit": "a9c81c699aee84cf978378c120e239c75b9827c4",
      "tree": "8d3bd14766293f27a70466adae33477f8597b146",
      "parents": [
        "d1cc29905da7a246ba837087b8200c907b84e12d"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Sat Jun 13 08:46:26 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Jun 14 13:43:52 2026 -0700"
      },
      "message": "Add pull request template for consistent contributions\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: d94175295a128b671858661e318e7040341acb10\nChange-Id: Iacaa09e20017416ae330eb0a3cb4aba7738d9581\n"
    },
    {
      "commit": "d1cc29905da7a246ba837087b8200c907b84e12d",
      "tree": "363f6a35b5ad8d55a6621de58807e5514c841d94",
      "parents": [
        "19d0bcb4046653403c0c681d967a99dc94d07f2a"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Sat Jun 13 02:43:57 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Jun 14 13:43:47 2026 -0700"
      },
      "message": "Limit parser nesting depth instead of crashing with RecursionError (#510)\n\nDeeply nested arrays/inline tables and long dotted keys recursed\nwithout bound, so crafted input could kill the process (#459).\nValues nested beyond 100 levels and keys with more than 100 dotted\nfragments now raise ParseError. Dotted-key parsing itself is now\niterative; the cap there guards the recursive container machinery\ndownstream.\n\nGitOrigin-RevId: ea9263f9e1dfd5715fabc2951699f0ee144eced9\nChange-Id: I3c160bc34e95114017da50d17feb81038d095a68\n"
    },
    {
      "commit": "19d0bcb4046653403c0c681d967a99dc94d07f2a",
      "tree": "076acb7fc42ec3a72ba3444814d51442877fba11",
      "parents": [
        "ff2db02594b32b12b4392086adc3b4384bb568c9"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Fri Jun 12 11:28:30 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Jun 14 13:43:42 2026 -0700"
      },
      "message": "Render self-dumping wrappers via as_string in dumps() (#508)\n\nGitOrigin-RevId: afa41a570bfa26d585f851f2a081e3da80e629c9\nChange-Id: I36cc684148883cf0a62712e3e44ea97fe50a71b0\n"
    },
    {
      "commit": "ff2db02594b32b12b4392086adc3b4384bb568c9",
      "tree": "501b71c283bed5bc9e6dc67bd7daa2bbeef52040",
      "parents": [
        "20524bbf437f69c126e484f013b387d27029875a"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Fri Jun 12 10:39:09 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Jun 14 13:43:36 2026 -0700"
      },
      "message": "Move a value replacing a table out of the table region (#506)\n\nReplacing a table with a plain value reused the forward scan meant for\nthe value-to-table direction, so the value was inserted just before the\nnext table header, inside the preceding table\u0027s body region. On\nround-trip the key became a child of that table. Route the\ntable-to-value direction through append(), which already places values\nbefore the first table.\n\nFixes #504\n\nGitOrigin-RevId: f9b4b227f88ade30c1a95721f40eb19e237fa224\nChange-Id: I8c25d6657ef709e00833692251ad549ec34fcfc5\n"
    },
    {
      "commit": "20524bbf437f69c126e484f013b387d27029875a",
      "tree": "d278e424e037e921d71a574a99bd5175d92f123e",
      "parents": [
        "278ad597862d2d2eb7fee076464751bf5271da0d"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Fri Jun 12 09:23:42 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Jun 14 13:43:27 2026 -0700"
      },
      "message": "Merge super tables in place instead of deep-copying on every merge (#503)\n\nWhen a super table is merged into an existing one (e.g. parsing consecutive\n`[a.b.c]` / `[a.b.d]` headers, which all share the `a.b` super table), the\ncontainer deep-copied the existing target before appending the new branch.\nThat copy is O(size of the target), and since the target grows with every\nmerge the whole parse becomes O(n^2) in the number of sibling subtables.\n\nMerge in place instead: O(1) per merge, O(n) overall. The deep copy only\nexisted to keep the out-of-order validation pass from mutating the live\ntables it walks, so the isolating copy is moved there (OutOfOrderTableProxy,\nthe sole consumer) where it runs once for genuinely out-of-order tables\nrather than on every in-order merge.\n\nNo behaviour change: full suite incl. toml-test conformance passes,\nround-trip output byte-identical (verified by a differential over many\nnested / out-of-order / dotted / AoT documents). Parsing deeply shared\nsuper tables goes from ~5300 ms to ~34 ms at 320 subtables.\n\nGitOrigin-RevId: fdfbc8a18c5fd5cfdcaaf11bfd59c4151da1f2ca\nChange-Id: I08391e20087d74027eae42f9ffd9e4ff2e530f57\n"
    },
    {
      "commit": "278ad597862d2d2eb7fee076464751bf5271da0d",
      "tree": "0b38f45694f4d4af2b266ff3bcb99daf23593784",
      "parents": [
        "b7e5515dd11b281d16a51cd6d177a70839c72e34"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Thu Jun 11 11:50:10 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 13:44:26 2026 -0700"
      },
      "message": "Compare StringType members by identity instead of building a set (#502)\n\n`StringType.is_basic` / `is_literal` / `is_singleline` / `is_multiline` each\ndid `self in {StringType.X, StringType.Y}`, building a set and hashing enum\nmembers on every call. These run for essentially every string and value\nparsed, so a profile of a mixed document shows millions of `Enum.__hash__`\ncalls coming from here.\n\nCompare by identity instead (enum members are singletons) — same result,\nno per-call set construction or hashing.\n\nNo behaviour change (full suite incl. the toml-test conformance submodule\npasses; round-trip output byte-identical). ~1.05-1.17x faster parsing\ndepending on how string/value-heavy the document is.\n\nGitOrigin-RevId: 0ad22b5d2efe17a22acaf787da4388c73e7e3fb2\nChange-Id: I3deb64f8f3a19bfe595e59a592b23a0d012a1d99\n"
    },
    {
      "commit": "b7e5515dd11b281d16a51cd6d177a70839c72e34",
      "tree": "a1d914f279b6e224d9c190963f1f1659b963532b",
      "parents": [
        "237ab79fa67273c4715e7ffc6f74dec0e23f59e3"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Thu Jun 11 11:11:48 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 13:44:21 2026 -0700"
      },
      "message": "Fix corrupt output when adding to a dotted key inside an inline table (#500)\n\nGitOrigin-RevId: a076a6afbe035694bd6b1cfdbd8ad7284e93b862\nChange-Id: I30bb21e94020fcc23079e7f22b1ef095dc51adf0\n"
    },
    {
      "commit": "237ab79fa67273c4715e7ffc6f74dec0e23f59e3",
      "tree": "95818f739f7ad4cf4f94be8ea8d6036304e84823",
      "parents": [
        "b75895647da290dd8e904ea8983f90bd55784d23"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Thu Jun 11 11:08:37 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 13:44:17 2026 -0700"
      },
      "message": "Remove the internal TOMLChar wrapper (#492)\n\nAfter the bulk run-scans, the parser only built a `TOMLChar` (a `str`\nsubclass) at run boundaries and used a handful of its `is_*()` helpers.\nDrop the class entirely: `Source` now yields plain `str` characters and\ndetects end-of-input positionally (`_idx \u003e\u003d len` / `Source.end()`) instead\nof an identity sentinel, and the remaining character-class checks use\nmodule-level frozensets.\n\nA real NUL byte is still rejected as an invalid control char and is never\nmistaken for end-of-input, since EOF is now positional rather than a\nsentinel comparison.\n\nNo behaviour change (972 tests incl. the toml-test conformance submodule;\nplus an 11.5k-input adversarial differential over EOF/truncation, real-NUL\nplacement, empty/whitespace and structural fuzz — output and error-type\nbyte-identical to master). Removes the per-character object construction\nand method dispatch (~1.1-1.18x over the previous step).\n\nGitOrigin-RevId: eaa897d6d0300f7ffc78188c8957b98aaa5c8c65\nChange-Id: I788f1bb79a093ad42d4764042da627c08a314134\n"
    },
    {
      "commit": "b75895647da290dd8e904ea8983f90bd55784d23",
      "tree": "0f23f558be11fcaac8a3fedd0c44d0dd46428233",
      "parents": [
        "128a470c5d672c16b6968911dc268f425fe5a479"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Wed Jun 10 11:53:46 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 13:44:12 2026 -0700"
      },
      "message": "Bulk-scan single-line string bodies (#491)\n\nParsing a single-line string appended its body one character at a time\n(`value +\u003d current; inc()`). For long string values this dominates.\n\nScan the run of ordinary characters up to the next delimiter, backslash\nor control character in a single pass (`Source.advance_until`) and append\nthe whole slice at once; the stop character is then handled by the\nexisting branch on the next iteration. Multiline strings keep the\nper-character loop (CRLF handling). The stop-set is exactly the control\ncharacters the per-character loop rejects, so InvalidControlChar / escape\n/ delimiter handling is unchanged.\n\nNo behaviour change (972 tests incl. the toml-test conformance submodule;\nplus a 4135-input adversarial differential — output and error-type\nbyte-identical to the per-char loop). Up to ~5x faster parsing on\nstring-heavy single-line documents.\n\nGitOrigin-RevId: 4623b450be4184517bb03a982cfe86a3cb483463\nChange-Id: Ideff23bae00724bf48e5daabbb79047b5561079f\n"
    },
    {
      "commit": "128a470c5d672c16b6968911dc268f425fe5a479",
      "tree": "b684dbccd01d53b9042da1579605fbcab23b765b",
      "parents": [
        "8beaac8903bad4dca4a2ed2be1aa996879211752"
      ],
      "author": {
        "name": "netliomax25-code",
        "email": "netliomax25@gmail.com",
        "time": "Wed Jun 10 11:46:14 2026 +0530"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 13:44:07 2026 -0700"
      },
      "message": "reject non-hex digits in \\u and \\U escapes (#501)\n\nGitOrigin-RevId: 8571bcd13f0e68e454df9be8d33975b2f5acd44e\nChange-Id: Ib45a98a13f6472c89dc77027bba98758195a9686\n"
    },
    {
      "commit": "8beaac8903bad4dca4a2ed2be1aa996879211752",
      "tree": "3637677384e5aaaebd9f05a3d8d6aff21cd57ee8",
      "parents": [
        "d0f9cdd320315907887ca05f70eab3f595424f1d"
      ],
      "author": {
        "name": "netliomax25-code",
        "email": "netliomax25@gmail.com",
        "time": "Wed Jun 10 09:40:42 2026 +0530"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 13:44:03 2026 -0700"
      },
      "message": "reject tab characters in bare keys (#497)\n\nGitOrigin-RevId: a1c5bd25b5686e4481b461f8eb336d3108376fb3\nChange-Id: I887bffe6f67c1de44377d8272010e809769ecd8d\n"
    },
    {
      "commit": "d0f9cdd320315907887ca05f70eab3f595424f1d",
      "tree": "22d3778241c304eb5ae0a8ffbec41d24a72c29b7",
      "parents": [
        "4c09edf66dd7b9a51d03af36cffac80ac1bc3d0b"
      ],
      "author": {
        "name": "Vincent Gao",
        "email": "gaobing1230@gmail.com",
        "time": "Wed Jun 10 05:59:52 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 13:43:56 2026 -0700"
      },
      "message": "Fix doubled comma when inserting into a comma-first array (#499)\n\nIn a comma-first formatted array the separator of an item after a\ncomment lives in that item\u0027s indent whitespace. Array.insert() copied\nsuch an indent onto the new item while also adding a trailing comma to\nthe previous item (and, for middle inserts, to the new item), producing\na double separator that no longer parses, e.g. `2,` followed by `,99`.\n\nSkip the extra commas when the copied indent already carries one.\n\nGitOrigin-RevId: f8ce14b39c3bfe57f20f75fbc29cb9e5586811e7\nChange-Id: I74b09c653624823618d12b4925bc87df86b2b958\n"
    },
    {
      "commit": "4c09edf66dd7b9a51d03af36cffac80ac1bc3d0b",
      "tree": "35286d641f380855ca41a24c8cc23864c777d7b1",
      "parents": [
        "9ac248ada08e4071eafeb1297e83994d099016fd"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Wed Jun 10 02:43:07 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 13:43:51 2026 -0700"
      },
      "message": "Scan character runs in bulk while parsing (#490)\n\nThe parser advanced one character at a time through runs of whitespace,\nbare-key and number characters, paying a `Source.inc()` call (attribute\nlookups + a `TOMLChar` build + bounds check) for every character.\n\nAdd `Source.advance_while(charset)` / `advance_until(stopset)`, which scan\nthe underlying string in a single pass and update the index and current\ncharacter only once, and use them for the leading-whitespace, bare-key and\nnumber/date runs. Same value contract as the `while ... and self.inc()`\nloops they replace.\n\nNo behaviour change (full suite incl. the toml-test conformance submodule\npasses; round-trip output byte-identical on a varied corpus). ~1.05-1.32x\nfaster parsing depending on shape (e.g. ~1.26x on a poetry.lock-like file).\n\nGitOrigin-RevId: ce58a1dbf8692c631bd64826e60f09c45fa7fb25\nChange-Id: I16f1d35eac9b4d06b95c7e95ef97943c522413ba\n"
    },
    {
      "commit": "9ac248ada08e4071eafeb1297e83994d099016fd",
      "tree": "21234f9931acca87996a8974f38611f15a0005b8",
      "parents": [
        "73788a86fb8324b9a4e4f230e37d61c94aa5d595"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Tue Jun 09 08:57:13 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 13:43:45 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#496)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.15 → v0.15.16](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.15...v0.15.16)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 5ceae3e5535311671e8cf1b3edb6ccc83771e98f\nChange-Id: Ief1e651de8c79fb56ecd04858d2938a5e1ea7a97\n"
    },
    {
      "commit": "73788a86fb8324b9a4e4f230e37d61c94aa5d595",
      "tree": "7a6358981c88f61f4ad41e985fe969cd38065ba7",
      "parents": [
        "4dabd63bcad970d5282aa50091c665e467d008aa"
      ],
      "author": {
        "name": "netliomax25-code",
        "email": "netliomax25@gmail.com",
        "time": "Mon Jun 08 15:45:04 2026 +0530"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 08 13:43:41 2026 -0700"
      },
      "message": "reject surrogate code points in \\U unicode escapes (#493)\n\nGitOrigin-RevId: b1399c30804f599ddecceb904dc57bd71bd10b3b\nChange-Id: I2a7ef728b9aede866cb1806ca83f0d0527a7c932\n"
    },
    {
      "commit": "4dabd63bcad970d5282aa50091c665e467d008aa",
      "tree": "1b7943df8be5681636938a836a7b0f866406ff66",
      "parents": [
        "e64bbe4b51fb40c530f65494c2577ed6d421c18a"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Mon Jun 08 02:12:21 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 08 13:43:35 2026 -0700"
      },
      "message": "Make Source index-based instead of materializing a char list (#489)\n\n`Source.__init__` built `iter([(i, TOMLChar(c)) for i, c in enumerate(self)])`,\nallocating one tuple and one TOMLChar per character of the whole input up\nfront. Track an integer index into the underlying string instead: `inc()`\nbumps the index and reads `self[idx]`, and state save/restore snapshots the\nindex rather than copying an iterator. Construction is O(1) and per-character\nwork is deferred to the read.\n\nNo behaviour change (full suite incl. the toml-test conformance submodule\npasses); ~1.07-1.14x faster parsing across document sizes.\n\nGitOrigin-RevId: 231370c1a98739d57a9ca36d710a26f19ac83570\nChange-Id: I21f8d3907a08900fe9cfba042f4a0c5b391ef767\n"
    },
    {
      "commit": "e64bbe4b51fb40c530f65494c2577ed6d421c18a",
      "tree": "9b0330ce6aaaa9fd093814cb27dd48808aee6533",
      "parents": [
        "75198576dc6936038502a1f1ce2d476f2eb74767"
      ],
      "author": {
        "name": "Thomas Foutrein",
        "email": "thomas.foutrein@gmail.com",
        "time": "Fri Jun 05 02:31:27 2026 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 05 13:43:31 2026 -0700"
      },
      "message": "Add native __contains__ to Container, Table and InlineTable (#487)\n\n* Add a native Container.__contains__\n\nContainer inherits __contains__ from MutableMapping, so `key in container`\ngoes through __getitem__ -\u003e item(), which resolves and returns the value\n(and constructs a NonExistentKey on every absent key) only to discard it.\n\nResolve the key exactly as item() does (str -\u003e SingleKey; a non-str/non-Key\nargument still raises TypeError) and probe _map directly. For an out-of-order\ntable the OutOfOrderTableProxy is still built so its validation runs as before.\nThis also speeds up __setitem__, which does `if key in self` on every assignment.\n\nBehaviour-identical: 969 tests pass (incl. toml-test); a differential `in`\ncheck over present/absent/out-of-order/dotted/non-str keys matches master\nexactly. ~1.17x faster on membership (drift-immune A/B). Part of #483.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Add a native Table.__contains__\n\nTable and InlineTable inherit __contains__ from the MutableMapping mixin,\nwhich answers `key in table` by calling self[key] -- resolving the value\nthrough the inner container and building a NonExistentKey on every absent\nkey -- only to discard it.\n\nAdd a native AbstractTable.__contains__ (covering both Table and\nInlineTable) that delegates straight to the inner container, so membership\nis answered from the now-native Container.__contains__ while still building\nthe OutOfOrderTableProxy for an out-of-order entry (validation unchanged).\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nGitOrigin-RevId: 5de48308e666db61f92441191e7b76045c32d9fb\nChange-Id: Ib2ef37efd256684a90302fb617f4a22fb584f2e7\n"
    },
    {
      "commit": "75198576dc6936038502a1f1ce2d476f2eb74767",
      "tree": "8a86cfcbd1102bdf6896036524d398f9e25d9b0e",
      "parents": [
        "2739f9c92681af038cf01d7cbb457f3dd1814504"
      ],
      "author": {
        "name": "Sarath Francis",
        "email": "sarathfrancis90@gmail.com",
        "time": "Wed Jun 03 03:53:06 2026 -0400"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 05 13:43:26 2026 -0700"
      },
      "message": "Fix duplicated comma when removing a middle inline table element (#486)\n\nRemoving a key that is neither the first nor the last element of a parsed\ninline table left both of its surrounding comma separators in the body,\nproducing invalid TOML such as `{a \u003d 1, , c \u003d 3}` that fails to re-parse.\n\nInlineTable.as_string() now tracks whether a separator has already been\nemitted for the current gap and drops the redundant comma left behind by\nthe removed key, so the serialized output stays valid and round-trips.\n\nGitOrigin-RevId: 568739658e92b2836c4ead6dc029482f76bbfee8\nChange-Id: I2aef47b3073d038101aea82b45df528b0811b5bf\n"
    },
    {
      "commit": "2739f9c92681af038cf01d7cbb457f3dd1814504",
      "tree": "e3d2654223318e4460f272813307061fef85985e",
      "parents": [
        "88724ec1af967d51878a32f375ca88e6d24a92bc"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Wed Jun 03 15:51:27 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 05 13:43:20 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#484)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.14 → v0.15.15](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.14...v0.15.15)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 207a2e869b05b4849240937a2c8b333b6422887b\nChange-Id: Ic43183abafeda76d11693ca5f3a7706b1e15559e\n"
    },
    {
      "commit": "88724ec1af967d51878a32f375ca88e6d24a92bc",
      "tree": "a0b6a0db7e8f68961a8d6eaa7f39e338fe2cb034",
      "parents": [
        "bb946506dc1be257e4e2b4f6b47b9f17183f57fa"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Mon Jun 01 15:16:08 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 02 13:43:58 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#478)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.12 → v0.15.14](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.12...v0.15.14)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 6057016c882161772a83309d3d08d7517f9f7b95\nChange-Id: I85a8c87f3d1e12e6f31a7e0869c72152fec6d0e8\n"
    },
    {
      "commit": "bb946506dc1be257e4e2b4f6b47b9f17183f57fa",
      "tree": "53f8103908a8b89936f0698a9ede729557455f6d",
      "parents": [
        "d068eb1497f158907fd2353c4cb177c89f624c82"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 01 15:16:06 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 02 13:43:53 2026 -0700"
      },
      "message": "chore(deps): bump urllib3 from 2.5.0 to 2.7.0 in /docs (#475)\n\nBumps [urllib3](https://github.com/urllib3/urllib3) from 2.5.0 to 2.7.0.\n- [Release notes](https://github.com/urllib3/urllib3/releases)\n- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)\n- [Commits](https://github.com/urllib3/urllib3/compare/2.5.0...2.7.0)\n\n---\nupdated-dependencies:\n- dependency-name: urllib3\n  dependency-version: 2.7.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 4621770fa19ccd3b712d5e7611adbff5c4f48d4f\nChange-Id: Id70733cc0689f04e2858b4872f9bab73c11b4594\n"
    },
    {
      "commit": "d068eb1497f158907fd2353c4cb177c89f624c82",
      "tree": "62d8b75d123d29ca44491949484125da76593de7",
      "parents": [
        "1deb4152487a45149d826f636f889ebf64da55e1"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 01 15:15:58 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 02 13:43:47 2026 -0700"
      },
      "message": "chore(deps-dev): bump idna from 3.7 to 3.15 (#480)\n\nBumps [idna](https://github.com/kjd/idna) from 3.7 to 3.15.\n- [Release notes](https://github.com/kjd/idna/releases)\n- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md)\n- [Commits](https://github.com/kjd/idna/compare/v3.7...v3.15)\n\n---\nupdated-dependencies:\n- dependency-name: idna\n  dependency-version: \u00273.15\u0027\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 14ffc212315e2e41a0d52e8ce94bf05addae75c7\nChange-Id: I2bffa7a60560f0f4d09fdbcd901e64b3da328e66\n"
    },
    {
      "commit": "1deb4152487a45149d826f636f889ebf64da55e1",
      "tree": "126b9c990f5e7a8ef3d4f19e91f755df7aea4953",
      "parents": [
        "eba66714ae02281b14f2daf8a1106ca573cdfef4"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 01 15:15:34 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 02 13:43:41 2026 -0700"
      },
      "message": "chore(deps): bump idna from 3.7 to 3.15 in /docs (#481)\n\nBumps [idna](https://github.com/kjd/idna) from 3.7 to 3.15.\n- [Release notes](https://github.com/kjd/idna/releases)\n- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md)\n- [Commits](https://github.com/kjd/idna/compare/v3.7...v3.15)\n\n---\nupdated-dependencies:\n- dependency-name: idna\n  dependency-version: \u00273.15\u0027\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: ad10a95d4bfb158f16b6ccf2679d2ee8c3104324\nChange-Id: I788c82291b1ff9aeb2240add15aae20ddd536186\n"
    },
    {
      "commit": "eba66714ae02281b14f2daf8a1106ca573cdfef4",
      "tree": "e2d9a94663aa717c9c63e3f1a399e530883edd99",
      "parents": [
        "a1410ee6ad620f5be0ff8008a86918c9e868dd0d"
      ],
      "author": {
        "name": "Chengyou Liu",
        "email": "35356271+cyliu0@users.noreply.github.com",
        "time": "Wed May 27 09:24:40 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed May 27 13:43:11 2026 -0700"
      },
      "message": "Fix inline table separator after append (#477)\n\n* Fix inline table separator after append\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n---------\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 1d499870617c8e55b9322f99a2d64a7670f3b929\nChange-Id: I77fd60b9cc15e6cb51d8dd259413c9aa8098f109\n"
    },
    {
      "commit": "a1410ee6ad620f5be0ff8008a86918c9e868dd0d",
      "tree": "55b84f6299912a72caf0e60d8e09f580f06a1596",
      "parents": [
        "a58f64577fe97a28e01a76ee02a3d68ef1c3a9f8"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Sun May 10 15:39:55 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue May 12 13:43:12 2026 -0700"
      },
      "message": "chore: bump version to 0.15.0 and update changelog for release (#473)\n\n* chore: bump version to 0.15.0 and update changelog for release\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\n\n* fix: update output setting for full Python version in integration workflow\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 8694e4d3323df68eb325bf3d5ab7caa66f8c206a\nChange-Id: Ic1adf00225aa082ec716d6865d466f020532f032\n"
    },
    {
      "commit": "a58f64577fe97a28e01a76ee02a3d68ef1c3a9f8",
      "tree": "7161632729657e6192b594d80a4681919e091601",
      "parents": [
        "b0f8e7c1f8d3775fcb37cc2b7ee35b6d320602cf"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Tue Apr 28 15:54:44 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Apr 30 13:43:38 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#472)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.11 → v0.15.12](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.11...v0.15.12)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: e636a5121260e811dba9fd1c33656021f6855490\nChange-Id: I2c37a6e5c83f24de8f563524ba1354e3397a4bd6\n"
    },
    {
      "commit": "b0f8e7c1f8d3775fcb37cc2b7ee35b6d320602cf",
      "tree": "8e4c993967986c54b3cb3462222de7c26264d4cc",
      "parents": [
        "f992d7c9486641d4ed317f9fffb651a134d14b86"
      ],
      "author": {
        "name": "David Hotham",
        "email": "david.hotham@microsoft.com",
        "time": "Mon Apr 27 09:22:05 2026 +0100"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Apr 27 13:44:15 2026 -0700"
      },
      "message": "fix: fix a parser hang (#470)\n\nGitOrigin-RevId: 96a4d22fdd07e25742009a6bcd8a2d23e9b5574a\nChange-Id: I34f12ddb3f6d7368bfb6f4de50f985e2820998d5\n"
    },
    {
      "commit": "f992d7c9486641d4ed317f9fffb651a134d14b86",
      "tree": "6e6d41c6d5ce68a3bcbe1bfedbfd3063ade8566b",
      "parents": [
        "60b3d4113c0e80ec6014becf7c42b3bcd0ea4edd"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Mon Apr 27 16:20:03 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Apr 27 13:44:05 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#469)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.8 → v0.15.11](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.8...v0.15.11)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 843f79992139ec56266f52161b27a3eadd1f6a35\nChange-Id: I3865b3e06edc5c1f0de43db8142f12f53a386b04\n"
    },
    {
      "commit": "60b3d4113c0e80ec6014becf7c42b3bcd0ea4edd",
      "tree": "71a20df13a439acfba21588469b175fd3f70b5ea",
      "parents": [
        "3922277e7f93b6a59b6e7745da7bdb75c4528fa3"
      ],
      "author": {
        "name": "ShipItAndPray",
        "email": "beno83459@gmail.com",
        "time": "Sun Apr 26 21:54:28 2026 -0500"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Apr 27 13:43:55 2026 -0700"
      },
      "message": "Honor sort_keys for parsed TOML documents (#471)\n\nCo-authored-by: ShipItAndPray \u003cnoreply@users.noreply.github.com\u003e\nGitOrigin-RevId: 2c87eafe7c852d19c1b91a1c9bed4d47bd03816f\nChange-Id: I1b3dab55e006d951c7a00b7194fa055d8e1d1890\n"
    },
    {
      "commit": "3922277e7f93b6a59b6e7745da7bdb75c4528fa3",
      "tree": "629a5852e94bfd14fc1e6e8db2bb585ca9218e22",
      "parents": [
        "be6ae5237f273259eab845906b5dc14b6c464227"
      ],
      "author": {
        "name": "David Hotham",
        "email": "david.hotham@microsoft.com",
        "time": "Thu Apr 02 03:24:43 2026 +0100"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Apr 03 13:44:02 2026 -0700"
      },
      "message": "Type annotations (#460)\n\n* round 1: clean, but lots of ignore\n\n* round 2: ignore less\n\n* ruff check\n\n* ruff format\n\n* update and tighten mypy configuration\n\n* pipeline fixes\n\nGitOrigin-RevId: 8e32f9cb7fcfbc45e893c34e0e9a590a26675fd6\nChange-Id: Iadbea3248233ca5536be8f3c8efebc359bd80d18\n"
    },
    {
      "commit": "be6ae5237f273259eab845906b5dc14b6c464227",
      "tree": "1fd9d734b979dd320691ae405f877a5099273c43",
      "parents": [
        "071fd14c2c93a47a57c5747f09b415367d8f6290"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Thu Apr 02 10:24:15 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Apr 03 13:43:58 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#461)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.6 → v0.15.8](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.6...v0.15.8)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: df98af48778f865d270d2f53e816d3b0948c8927\nChange-Id: Ie65e6ef3aa5e105309f20f7acd3a37230d1dc220\n"
    },
    {
      "commit": "071fd14c2c93a47a57c5747f09b415367d8f6290",
      "tree": "30ccfdf472403222cb0f82a2e3f92e626e6b069d",
      "parents": [
        "1f87b8a53b97a581a9d886138c3727c882e9aea5"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 02 10:24:02 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Apr 03 13:43:53 2026 -0700"
      },
      "message": "chore(deps): bump requests from 2.32.4 to 2.33.0 in /docs (#462)\n\nBumps [requests](https://github.com/psf/requests) from 2.32.4 to 2.33.0.\n- [Release notes](https://github.com/psf/requests/releases)\n- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)\n- [Commits](https://github.com/psf/requests/compare/v2.32.4...v2.33.0)\n\n---\nupdated-dependencies:\n- dependency-name: requests\n  dependency-version: 2.33.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 4bd97db2c8fda5cbffc01acc586e3328168bac36\nChange-Id: Idfb94efbf56deba0651884c4d5fbe17144226a8c\n"
    },
    {
      "commit": "1f87b8a53b97a581a9d886138c3727c882e9aea5",
      "tree": "65aa158f12effced15f5ef546c51ef3ffbd9f6f9",
      "parents": [
        "c420b009cd6e69546f8344b8e8c893de7eefc872"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 02 10:23:52 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Apr 03 13:43:47 2026 -0700"
      },
      "message": "chore(deps-dev): bump pygments from 2.17.2 to 2.20.0 (#463)\n\nBumps [pygments](https://github.com/pygments/pygments) from 2.17.2 to 2.20.0.\n- [Release notes](https://github.com/pygments/pygments/releases)\n- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)\n- [Commits](https://github.com/pygments/pygments/compare/2.17.2...2.20.0)\n\n---\nupdated-dependencies:\n- dependency-name: pygments\n  dependency-version: 2.20.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: b2d703032bf2e44e680b67f2897c3a7c67be55eb\nChange-Id: Ibca06f7e95df87ead47a6e6a10730ff377ce7372\n"
    },
    {
      "commit": "c420b009cd6e69546f8344b8e8c893de7eefc872",
      "tree": "4e588fc64c5f522414e0cd2874fe08b739031a86",
      "parents": [
        "939541aec7102efd0a5eebe28ce36743b0bd6ec7"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 02 10:23:31 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Apr 03 13:43:41 2026 -0700"
      },
      "message": "chore(deps): bump pygments from 2.18.0 to 2.20.0 in /docs (#464)\n\nBumps [pygments](https://github.com/pygments/pygments) from 2.18.0 to 2.20.0.\n- [Release notes](https://github.com/pygments/pygments/releases)\n- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)\n- [Commits](https://github.com/pygments/pygments/compare/2.18.0...2.20.0)\n\n---\nupdated-dependencies:\n- dependency-name: pygments\n  dependency-version: 2.20.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 87d98b1d0100c5bd39736eda4cd9cc3d8e24bf48\nChange-Id: Ie20480e20622a5f84fd96e0f3c5dd8b18aedf577\n"
    },
    {
      "commit": "939541aec7102efd0a5eebe28ce36743b0bd6ec7",
      "tree": "2675cca2c0996aca0b6b13fcc4865099ced491fb",
      "parents": [
        "9bfc89ddacfc5729ee9eb529aabadf642a05b0ea"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Mon Mar 23 08:49:12 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Mar 25 13:43:51 2026 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#458)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.14.14 → v0.15.6](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.14...v0.15.6)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: dd05eebc8ed9e30fc6c223088a5a450cb54c1cab\nChange-Id: I45a32bece56ad0dc9b827c47cbecfa0d899d771d\n"
    },
    {
      "commit": "9bfc89ddacfc5729ee9eb529aabadf642a05b0ea",
      "tree": "4dcc55db45a7b3c0b8426a25d4c73d3fcfd2599c",
      "parents": [
        "6303b47995bcf476e71717b218d1212ec31c3df6"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Sat Feb 07 11:20:02 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Feb 08 12:44:08 2026 -0800"
      },
      "message": "docs: update compliance version to 1.1.0 and installation instructions in README.md\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 0e67614c8d57f29f0790f6e0794333b95193d93c\nChange-Id: I05ad29ed94011e5926fe9e97bef975bfa809cb00\n"
    },
    {
      "commit": "6303b47995bcf476e71717b218d1212ec31c3df6",
      "tree": "cde99f42dc2a018c65ea1c00d62111a65307f3b0",
      "parents": [
        "992494a3c0f5c134b15c2a5e11190ed5c898f6f8"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Feb 07 11:12:42 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Feb 08 12:44:03 2026 -0800"
      },
      "message": "chore(deps-dev): bump virtualenv from 20.26.6 to 20.36.1 (#454)\n\nBumps [virtualenv](https://github.com/pypa/virtualenv) from 20.26.6 to 20.36.1.\n- [Release notes](https://github.com/pypa/virtualenv/releases)\n- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)\n- [Commits](https://github.com/pypa/virtualenv/compare/20.26.6...20.36.1)\n\n---\nupdated-dependencies:\n- dependency-name: virtualenv\n  dependency-version: 20.36.1\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: ff859ea349f53be3d453a576752d7088e1705707\nChange-Id: Ib100188ee6b926d1a814dde9eee6419b550c8914\n"
    },
    {
      "commit": "992494a3c0f5c134b15c2a5e11190ed5c898f6f8",
      "tree": "f55856e7284189d4dc689fc909b9d61132c43146",
      "parents": [
        "415909882c6a1d36805ded14f424119249a5cae2"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Sat Feb 07 11:12:19 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Feb 08 12:43:57 2026 -0800"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#455)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.14.11 → v0.14.14](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.11...v0.14.14)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 85113c76f5f5dd4da50267bef0275b4318f0a983\nChange-Id: I5bea4f9ed014ac13abfc7745a72299ee238e791c\n"
    },
    {
      "commit": "415909882c6a1d36805ded14f424119249a5cae2",
      "tree": "e6cb2bca17f3a926c2e0d2b94a88902c463ba0cb",
      "parents": [
        "c6223a2a4c48e4832105f148e809c4af24217429"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Sat Feb 07 11:11:54 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Feb 08 12:43:51 2026 -0800"
      },
      "message": "feat(spec): update to toml spec v1.1 (#456)\n\n* feat(spec): update to toml spec v1.1\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\n\n* feat(changelog): update parser to support TOML spec v1.1.0\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 7f237d8f5d07d23422571e9daaf411f4a2356855\nChange-Id: I74f54df3e7b91d2a005690a2a171c9e70bb38d26\n"
    },
    {
      "commit": "c6223a2a4c48e4832105f148e809c4af24217429",
      "tree": "8052c43a1b294ea8182683d66754677f271b6b38",
      "parents": [
        "18191453923ade0f25830ddf8025ee5c29f10fc5"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jan 13 09:10:20 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 15 12:44:51 2026 -0800"
      },
      "message": "chore(deps-dev): bump setuptools from 70.0.0 to 78.1.1 (#453)\n\nBumps [setuptools](https://github.com/pypa/setuptools) from 70.0.0 to 78.1.1.\n- [Release notes](https://github.com/pypa/setuptools/releases)\n- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)\n- [Commits](https://github.com/pypa/setuptools/compare/v70.0.0...v78.1.1)\n\n---\nupdated-dependencies:\n- dependency-name: setuptools\n  dependency-version: 78.1.1\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 090a28e46b58473210a74ec68a3c08b1535ff233\nChange-Id: I9d8d3edebc837a1e8d197a6ec32854b37578ee1d\n"
    },
    {
      "commit": "18191453923ade0f25830ddf8025ee5c29f10fc5",
      "tree": "1720f5481dffd804188d99d38a4d2e9513c3adae",
      "parents": [
        "4199481e3e44ceaf4e035c43124ffcd62a6d3af4"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Tue Jan 13 09:06:15 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 15 12:44:46 2026 -0800"
      },
      "message": "chore: bump version to 0.14.0 in pyproject.toml and __init__.py\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 9bccd76ed6331fa5d1f783a2181093dc23d4d05b\nChange-Id: I4aab54c4544b3e7e63ed15729ddcd574e201db22\n"
    },
    {
      "commit": "4199481e3e44ceaf4e035c43124ffcd62a6d3af4",
      "tree": "b46e331f621657f40d20324239e6de62d86dda02",
      "parents": [
        "1b490e4b0ec0a09495c1bfee1538b154a2e4755d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jan 13 09:04:07 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 15 12:44:42 2026 -0800"
      },
      "message": "chore(deps-dev): bump urllib3 from 2.2.2 to 2.6.3 (#452)\n\nBumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.2 to 2.6.3.\n- [Release notes](https://github.com/urllib3/urllib3/releases)\n- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)\n- [Commits](https://github.com/urllib3/urllib3/compare/2.2.2...2.6.3)\n\n---\nupdated-dependencies:\n- dependency-name: urllib3\n  dependency-version: 2.6.3\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: e457892c7a0c4ee500dc62f8b2117483d90d75b0\nChange-Id: I787e36a9bd6806403ffa82f54ecc5fe73e2e1319\n"
    },
    {
      "commit": "1b490e4b0ec0a09495c1bfee1538b154a2e4755d",
      "tree": "508c4a790671027b696e088660283b98a6fa14ee",
      "parents": [
        "67ed3584b8614524499b101c9ec7f2bd6f20b23c"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Tue Jan 13 08:58:02 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 15 12:44:37 2026 -0800"
      },
      "message": "chore: update pre-commit hooks and refactor imports for consistency\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 82970a1fe533f657b9c959ffffa1a02ca3e22e9a\nChange-Id: I5584a785191cce5d6457b50b327a4ad2353d8719\n"
    },
    {
      "commit": "67ed3584b8614524499b101c9ec7f2bd6f20b23c",
      "tree": "d2eca19f4e72d1ceac13c9faa12c0b012b091021",
      "parents": [
        "0c657852694ebc2157f0d5e34fafb26411fc4253"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Tue Jan 13 08:54:11 2026 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 15 12:44:32 2026 -0800"
      },
      "message": "chore: update Python version and GitHub Actions to use latest versions (#451)\n\n* [pre-commit.ci] pre-commit autoupdate\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.14.2 → v0.14.3](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.2...v0.14.3)\n\n* feat: add String.type property to retrieve the string type\n\nClose #443\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\n\n* chore: update Python version and GitHub Actions to use latest versions\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\n\n* chore: drop support for Python 3.8 and update CI matrix\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\n\n* Merge branch \u0027pre-commit-ci-update-config\u0027 into drop-py38\n\n* chore: update poetry.lock for Python version changes and remove deprecated dependencies\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: edba395a30999877b36568d17be7c90268764753\nChange-Id: I2a05c6d682c2174956360f05645b5a60fdac208d\n"
    },
    {
      "commit": "0c657852694ebc2157f0d5e34fafb26411fc4253",
      "tree": "531e42ef35215eb17e4f72c136f5263f76bd84da",
      "parents": [
        "5fea0fed24226eb9e70bcd7566882c6bbfc8cade"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Tue Nov 04 14:41:29 2025 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Nov 04 12:43:52 2025 -0800"
      },
      "message": "feat: add String.type property to retrieve the string type\n\nClose #443\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 5495784eb11c612b28ca467e7f7e6138305df810\nChange-Id: I7faa7066eb179a816004cdbc0137da8e678420ee\n"
    },
    {
      "commit": "5fea0fed24226eb9e70bcd7566882c6bbfc8cade",
      "tree": "6514e6b4f90f2fe3d6fe9f8c19a97d9f276e2569",
      "parents": [
        "21287f1e57ecd646f8d5691fe18f2acf23d4de86"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Tue Nov 04 14:35:13 2025 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Nov 04 12:43:48 2025 -0800"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#444)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.14.2 → v0.14.3](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.2...v0.14.3)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: a61a4d5fa85bd50c18475918353168526d144d76\nChange-Id: I547cdfad432fafbd77cb12e3e4562b0f18f0c8d2\n"
    },
    {
      "commit": "21287f1e57ecd646f8d5691fe18f2acf23d4de86",
      "tree": "0155fe57bbc3528619115d577f96f5dce30d67b0",
      "parents": [
        "453752b215809efeee3266689d8b87a2fe787dc2"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Mon Nov 03 11:25:18 2025 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Nov 04 12:43:43 2025 -0800"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#438)\n\n* [pre-commit.ci] pre-commit autoupdate\n\nupdates:\n- [github.com/pre-commit/pre-commit-hooks: v5.0.0 → v6.0.0](https://github.com/pre-commit/pre-commit-hooks/compare/v5.0.0...v6.0.0)\n- [github.com/asottile/pyupgrade: v3.20.0 → v3.21.0](https://github.com/asottile/pyupgrade/compare/v3.20.0...v3.21.0)\n- [github.com/astral-sh/ruff-pre-commit: v0.12.3 → v0.14.2](https://github.com/astral-sh/ruff-pre-commit/compare/v0.12.3...v0.14.2)\n\n* fix: suppress lint warning in test_aot_unwrap function\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\n\n---------\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nCo-authored-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 87ace5e8df508fb9d182f20585146ba46ff8f324\nChange-Id: Ib77405fb2c50064905ef6017f4030f5595bfebae\n"
    },
    {
      "commit": "453752b215809efeee3266689d8b87a2fe787dc2",
      "tree": "e83df4b8a7fe06e20cbe8367f28a365e11d8afc8",
      "parents": [
        "da95312b8f7009957373af4a596f62b3144d70e0"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Mon Nov 03 11:14:01 2025 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Nov 04 12:43:38 2025 -0800"
      },
      "message": "fix: update boolean function to handle both string and boolean inputs correctly\nFix #442\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 3687d0dfbf5331965fe64e6b64127ebe19c24196\nChange-Id: I7bcadee7fb418255c8add66fd481dbb194091d73\n"
    },
    {
      "commit": "da95312b8f7009957373af4a596f62b3144d70e0",
      "tree": "e7012f8db3bc365c0040a46f917bc9d389879ab9",
      "parents": [
        "d81c1ef1e9d4464517751253078723a030f5ee0b"
      ],
      "author": {
        "name": "Frost Ming",
        "email": "me@frostming.com",
        "time": "Tue Jul 15 11:27:57 2025 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 16 13:44:01 2025 -0700"
      },
      "message": "feat: enhance custom encoders to accept _parent and _sort_keys parameters (#436)\n\nResolve #429\n\nSigned-off-by: Frost Ming \u003cme@frostming.com\u003e\nGitOrigin-RevId: 6042e0ce80c8c49f325a6e60b6ee3e153669b144\nChange-Id: Ic8246da56eb1b03b825b45c5aac556b064148d93\n"
    },
    {
      "commit": "d81c1ef1e9d4464517751253078723a030f5ee0b",
      "tree": "3438f271d88727d7b9994f389e9f4940c3f50033",
      "parents": [
        "cc148ea0713c1741e3454a211960a6e3559218e5"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Tue Jul 15 09:24:36 2025 +0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 16 13:43:54 2025 -0700"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#434)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.12.0 → v0.12.3](https://github.com/astral-sh/ruff-pre-commit/compare/v0.12.0...v0.12.3)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nGitOrigin-RevId: 424dd0d58b29f011238d4c9530bef6e304179f43\nChange-Id: Ib817231c8c711c7a52849bdfe68574caa771d2f2\n"
    },
    {
      "commit": "cc148ea0713c1741e3454a211960a6e3559218e5",
      "tree": "9d5e1ea2187d0441c1e356dcae1b516f650ae5fa",
      "parents": [
        "717757dc21bd41dadc1b76b40fac7e4783ae56b2"
      ],
      "author": {
        "name": "Marnix",
        "email": "150045289+deltamarnix@users.noreply.github.com",
        "time": "Mon Jul 07 02:40:04 2025 +0200"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 07 13:43:48 2025 -0700"
      },
      "message": "fix: Add DottedKey to a super table gives wrong output (#431) (#435)\n\nWhen a table is already a super table, appending dotted items to it will result in wrong behavior.\nThe header was missing, so the final result was an incorrect representation of the document.\n\nBecause super_table is already set and can no longer be re-evaluated,\nI have added a check to the renderer instead, so that it can determine if the header should be rendered.\n\nI have not gone through different edge cases, but it seems that all other tests are still passing.\n\nCo-authored-by: deltamarnix \u003cdeltamarnix@users.noreply.github.com\u003e\nGitOrigin-RevId: b9d22fb8906b649f6e2d27b7f64f2d368e80c475\nChange-Id: Ief8a6893c44384c2448bb099d81248e053951e01\n"
    }
  ],
  "next": "717757dc21bd41dadc1b76b40fac7e4783ae56b2"
}
