)]}'
{
  "log": [
    {
      "commit": "710b7e4097fdf9cea99a732e4cc028d6b1b9064c",
      "tree": "94e28ed49d2544eb4cfb8aea0e88725b6656bbed",
      "parents": [
        "3dd0fcb8901f216b312a5b316056e5e8bacad66d"
      ],
      "author": {
        "name": "Christian Appl",
        "email": "cap@softvision.de",
        "time": "Wed Nov 04 11:15:21 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 11:15:21 2026 +0100"
      },
      "message": "XMLBEANS-616: break the static initialization ring between XmlBeans and SchemaTypeLoaderBase (#158)\n\nXmlBeans.\u003cclinit\u003e needs SchemaTypeLoaderBase for NO_TYPE (through\nBuiltinSchemaTypeSystem), and SchemaTypeLoaderBase.\u003cclinit\u003e read\nXmlBeans for its USER_AGENT field. Two threads touching XMLBeans for\nthe first time at once, one through XmlObject.Factory and one through\na generated type, each held one of the two class initializations and\nwaited for the other forever.\n\nThe user agent is now built where it is used, when a schema is fetched\nover HTTP, so SchemaTypeLoaderBase no longer depends on XmlBeans while\nit initializes. The header value is unchanged.\n\nStaticInitializationRingTest reproduces the race in one JVM, loading\nXMLBeans in a class loader of its own for every attempt. Whatever a\nthread throws fails the test, so a class path problem cannot pass as\nno deadlock.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "3dd0fcb8901f216b312a5b316056e5e8bacad66d",
      "tree": "72ac2e3e5064ef9d113dcb22d380ff618ecc8064",
      "parents": [
        "8361fa4fe172f5d1634194b5cfdaaaec45ac8819"
      ],
      "author": {
        "name": "Mohd Irshad",
        "email": "117459364+siddiqueirshad@users.noreply.github.com",
        "time": "Wed Nov 04 06:09:21 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 04 01:39:21 2026 +0100"
      },
      "message": "Fix typo \u0027occured\u0027 to \u0027occurred\u0027 in IDTest.java (#159)\n\nSigned-off-by: siddiqueirshad \u003cmohdirshad1306@gmail.com\u003e"
    },
    {
      "commit": "8361fa4fe172f5d1634194b5cfdaaaec45ac8819",
      "tree": "04a6d48c00314d551d1dd78029bc14e8659882f0",
      "parents": [
        "080c75936303ced21fcdcd9011ab61647af10345"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Nov 03 11:21:11 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 11:21:11 2026 +0100"
      },
      "message": "count the zeros of a negative scale in the decimal totalDigits check (#154)\n\nA BigDecimal set from Java code can carry a negative scale: 1E+5 has\nunscaled value 1 and scale -5, but is 100000, six digits. The check\ncounted only the unscaled digits, so it passed totalDigits\u003d3.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "080c75936303ced21fcdcd9011ab61647af10345",
      "tree": "862aa8610280aa146df8364da6c6cba570b1dd2a",
      "parents": [
        "e61c86e43a2df002aaeff40a272e48d371a579b7"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Nov 03 11:20:33 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 11:20:33 2026 +0100"
      },
      "message": "simplify the applyWhiteSpaceRule collapse fast path (#155)\n\nAny tab, newline or carriage return, or a space after a space, needs\nthe full rule. Check those characters directly instead of tracking\nlastWasWhite, matching the WS_REPLACE branch. No behaviour change.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "e61c86e43a2df002aaeff40a272e48d371a579b7",
      "tree": "9413d33de8530076b88ed1897466f25041b1a5f4",
      "parents": [
        "2434a3e54decc107439c5ecbd0b25ff0a26a7ce6"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Nov 03 11:20:14 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 11:20:14 2026 +0100"
      },
      "message": "cover xsi:type and xsi:nil in XsiAttributeValidateTest (#156)\n\nCompile the schema once in @BeforeAll, and check that all four special\nxsi attributes are still exempt from attribute validation.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "2434a3e54decc107439c5ecbd0b25ff0a26a7ce6",
      "tree": "02afe21bda96ede4d6c277e5d52ef5e82553ed71",
      "parents": [
        "5dfcae0e986b144d567296fe53ca0140efddf792"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Nov 03 11:19:49 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 11:19:49 2026 +0100"
      },
      "message": "fold 400 year cycles into the xs:duration value hash (#157)\n\nEvery 400 Gregorian years is exactly 146097 days from any start date, so\ncompareToGDuration finds P400Y equal to P146097D through the reference\ndate check, but the month totals differ and so did the hash codes.\nWhole 4800 month blocks are the only month offsets that span the same\nnumber of days from all four reference dates; fold them into seconds\nbefore hashing. Strip trailing zeros after the fold, since\nBigDecimal.hashCode depends on scale.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "5dfcae0e986b144d567296fe53ca0140efddf792",
      "tree": "44df5f686a195f6385465d2d602d668230891d2f",
      "parents": [
        "80df884eb3c2f853ec06091e10166b5d8b371025"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Tue Nov 03 15:22:03 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 10:52:03 2026 +0100"
      },
      "message": "compare xs:duration values by value in JavaGDurationHolderEx.equal_to (#153)"
    },
    {
      "commit": "80df884eb3c2f853ec06091e10166b5d8b371025",
      "tree": "634fa222ac9db296f6fda910bdfa5f5d078e881e",
      "parents": [
        "c8f4ddf8fae7e5085dbe660c37d96cb41f8cb38d"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Tue Nov 03 15:19:01 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 10:49:01 2026 +0100"
      },
      "message": "validate non-special xsi attributes in store-side Validate.doAttrs (#146)"
    },
    {
      "commit": "c8f4ddf8fae7e5085dbe660c37d96cb41f8cb38d",
      "tree": "6264d2bfa66aab233c046f54d38ea981fefee5d3",
      "parents": [
        "62e27d3b8a9add7321754c7bf6a41819470e3d6b"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Tue Nov 03 15:13:29 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 10:43:29 2026 +0100"
      },
      "message": "replace single tab, newline and cr in applyWhiteSpaceRule collapse (#147)"
    },
    {
      "commit": "62e27d3b8a9add7321754c7bf6a41819470e3d6b",
      "tree": "9ad0d0fdd346c63bb822614eee1b43bb1a281b0b",
      "parents": [
        "fd4458788634baa390de13796a09942a0ffa0a53"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Tue Nov 03 15:02:38 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 03 10:32:38 2026 +0100"
      },
      "message": "count leading fraction zeros in the decimal totalDigits check (#144)"
    },
    {
      "commit": "fd4458788634baa390de13796a09942a0ffa0a53",
      "tree": "7c2240c843a82495b41512c1461eab0f8d4b6f6d",
      "parents": [
        "5c4de697a6189082eb27b72415393c8008804547"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 25 10:50:53 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 10:50:53 2026 +0000"
      },
      "message": "upgrade Ant to 1.10.18 (#150)\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "5c4de697a6189082eb27b72415393c8008804547",
      "tree": "c555fdf4c22ab4961353db326c44f56d2716dc8e",
      "parents": [
        "1aab80d240b2bcb8c453dfd97d94e382c383a91b"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 25 10:41:50 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 10:41:50 2026 +0000"
      },
      "message": "upgrade Saxon-HE to 13.1 and xmlresolver to 6.1.0 (#149)\n\nSaxon 13.1 now declares Automatic-Module-Name net.sf.saxon, so the\nmodule-info requires that instead of the filename-derived Saxon.HE.\nxmlresolver 6.x publishes its catalog data as the \"data\" classifier\nrather than a separate xmlresolver-data artifact.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "1aab80d240b2bcb8c453dfd97d94e382c383a91b",
      "tree": "1956dacc49ad99e2543532e10d41c0d435af6508",
      "parents": [
        "2302fc4cbcfe0832930ce579d846537ba298f1dd"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 25 10:25:36 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 10:25:36 2026 +0000"
      },
      "message": "give the builtin xs:NMTOKENS and xs:ENTITIES types the collapse whitespace rule (#148)\n\nBuiltinSchemaTypeSystem.fillInType (and its copy in XQuerySchemaTypeSystem)\ngave xs:ENTITIES and xs:NMTOKENS WS_UNSPECIFIED, although their\nFACETS_BUILTIN_LIST whiteSpace facet says collapse, as XML Schema Part 2\nrequires for list types, and xs:IDREFS already uses WS_COLLAPSE. With the\nbase rule unspecified, StscSimpleTypeResolver accepted a\n\u003cxs:whiteSpace value\u003d\u0027preserve\u0027/\u003e restriction of them, which it rejects\nfor xs:IDREFS. Fold the three list types into one case.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "2302fc4cbcfe0832930ce579d846537ba298f1dd",
      "tree": "9426aeee36cec313831436072641a872a28dab01",
      "parents": [
        "85e8a7d187bee6c6ddee381c7849c94b73d2a468"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Sun Oct 25 15:36:22 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 10:06:22 2026 +0000"
      },
      "message": "give the builtin xs:IDREFS type its minLength\u003d1 list facet (#142)"
    },
    {
      "commit": "85e8a7d187bee6c6ddee381c7849c94b73d2a468",
      "tree": "66e1fb22b4f49f8ddca5359ffa4d13f5d822caa9",
      "parents": [
        "0883483a0d4a4de361658b3cbbae55b7833397e2"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Fri Oct 23 14:27:33 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 14:27:33 2026 +0100"
      },
      "message": "resolve defaulted QName identity fields against the schema (#143)\n\nA defaulted or fixed attribute picked by an identity constraint field\nwas built from its default text using the instance\u0027s namespaces, so a\nQName default either failed to resolve or resolved to the wrong\nnamespace. Use SchemaLocalAttribute.getDefaultValue(), which resolves\nagainst the schema.\n\nExtend QNameIdentityConstraintValidateTest to cover element-text\nfields, default-namespace and unprefixed QNames, and defaulted QName\nattributes, each through both XmlObject.validate() and\nValidatingXMLStreamReader.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "0883483a0d4a4de361658b3cbbae55b7833397e2",
      "tree": "25510f3c063b7cadb59bcde9d1b7e84304096061",
      "parents": [
        "c50b9d695a39d61f21b7ce7120affa1aeb99bdb7"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Fri Oct 23 05:41:06 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 01:11:06 2026 +0100"
      },
      "message": "resolve QName field values against the instance in IdentityConstraint (#141)"
    },
    {
      "commit": "c50b9d695a39d61f21b7ce7120affa1aeb99bdb7",
      "tree": "d1cf7b99e8ce7b0bd8b6760652d6910d80588b0e",
      "parents": [
        "13e1ccd338742e65fcf67b18e81b19f88308de82"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Mon Oct 19 14:47:08 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 10:17:08 2026 +0100"
      },
      "message": "join text split by a pi in ValidatingXMLStreamReader.bufferText (#140)\n\n* join text split by a pi in ValidatingXMLStreamReader.bufferText\n\n* pin the caller-visible events around a pi in ValidatingXMLStreamReader\n\nThe packing reader is also what the caller reads, so a comment or pi\nafter text is now consumed into the merged CHARACTERS event while one\nbefore any text is still passed on. Add a test that fixes that event\nsequence, and mark the intended fall-through in bufferText.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: PJ Fanning \u003cpjfanning@users.noreply.github.com\u003e\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "13e1ccd338742e65fcf67b18e81b19f88308de82",
      "tree": "b41fffd96b306e547b94664dfbd2ef69c4654bad",
      "parents": [
        "70d618c4f17a7cb33543189d2ff325a7b72cde3e"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 18 14:25:34 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 14:25:34 2026 +0100"
      },
      "message": "normalize jar entry paths with URI.normalize in StscImporter.resolve (#139)\n\nReplace the hand-rolled \"/..\" removal after \"!/\" with URI.normalize on\nthe entry path. This also resolves \"./\" segments, no longer treats names\nsuch as \"..b.xsd\" or \"...\" as parent references, and keeps \"..\" segments\nthat climb above the jar root in place (as before) so the lookup fails.\n\nTests now use a jar path that cannot exist and assert the unresolved\nresult for the above-root case.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "70d618c4f17a7cb33543189d2ff325a7b72cde3e",
      "tree": "ba4e153a05577e1516291585eeb2fe011bdd87ad",
      "parents": [
        "745ba9068d53b7198e950ab0b921be0c9afaf203"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Sun Oct 18 18:47:47 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 14:17:47 2026 +0100"
      },
      "message": "stop the jar parent-path loop in StscImporter.resolve (#138)"
    },
    {
      "commit": "745ba9068d53b7198e950ab0b921be0c9afaf203",
      "tree": "ee3dbfdb94eb9f860e441230e88c02827b10c5e4",
      "parents": [
        "f815da5a90b582a6a92608634270e55471a9ae58"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 18 11:06:34 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 11:06:34 2026 +0100"
      },
      "message": "fix quadratic regex matching and other regex hot spots (#137)\n\n- RegularExpression: ClosureContext kept the offsets each closure had\n  visited in a list and scanned it on every iteration, so matching any\n  * or + closure (e.g. an xs:pattern of \\c+) was O(n^2) in the value\n  length. Use an open-addressing int hash set instead; memory stays\n  proportional to the offsets seen, so sparse offsets stay cheap.\n- RegularExpression: use ArrayDeque rather than synchronized Stack for\n  the match op stack.\n- RangeToken: binary search ranges above U+00FF instead of a linear scan.\n- replace simple String.matches/replaceAll calls with plain string code\n  in StscState, StscImporter, CodeGenUtil and MavenPlugin.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "f815da5a90b582a6a92608634270e55471a9ae58",
      "tree": "d74465979af218280cae7cb73c879ad7105c1147",
      "parents": [
        "eda83b621198eed1166b1bb04e500a9f61a2161a"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Fri Oct 16 17:35:24 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 13:05:24 2026 +0100"
      },
      "message": "terminate the xsi:type block walk in Validator.beginEvent (#134)\n\n* terminate the xsi:type block walk in Validator.beginEvent\n\n* reject simple xsi:type substitution for union-content complex types\n\nisAssignableFrom took the union-member branch for any type whose simple\nvariety is UNION, which includes complex types with union simple content.\nA simple type was then accepted as an xsi:type for such a complex type.\nRestrict the branch to simple types so cvc-elt.4.3a is reported.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: PJ Fanning \u003cpjfanning@users.noreply.github.com\u003e\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "eda83b621198eed1166b1bb04e500a9f61a2161a",
      "tree": "5b91a790ea82c9b8d1e133b83976df266b6da2ba",
      "parents": [
        "bfc7d66ba78a9754a887e6322f7e4ff116f42b53"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Fri Oct 16 17:34:32 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 13:04:32 2026 +0100"
      },
      "message": "reject leading colon in xsd:QName values in JavaQNameHolder (#135)"
    },
    {
      "commit": "bfc7d66ba78a9754a887e6322f7e4ff116f42b53",
      "tree": "46d2c0260015e22172c5f409bf20a97ddbaef587",
      "parents": [
        "871c346f45eb06132ae2d7066f3631fe4042d31d"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Fri Oct 16 13:57:55 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 09:27:55 2026 +0100"
      },
      "message": "check the first two characters for invalid xml chars in cdata save (#136)"
    },
    {
      "commit": "871c346f45eb06132ae2d7066f3631fe4042d31d",
      "tree": "c5abcaedffc15d4353c396fb2b60f06cff918836",
      "parents": [
        "3a27438f876c9bd6946051a14fd26235b2298bb9"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Oct 05 22:28:53 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 22:28:53 2026 +0100"
      },
      "message": "honour date facet bounds in xsd2inst samples (#133)\n\n* honour date facet bounds in xsd2inst samples\n\nformatDate compared its random seed, a full dateTime, against the bounds\nbefore cutting it down to the facet\u0027s type, so for date, time and the\ng* types every comparison came back as incomparable and the bounds were\nignored. Where a reset did fire, it moved the random date by a few hours\ninstead of moving it next to the bound.\n\nCut the seed down to the type and pick its timezone first, then check it\nagainst all four facets the way validation does, treating an\nincomparable result as out of range. If it misses, try the bound itself\nand then the bound stepped inwards by the smallest unit the type shows.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n* check facet error codes in IncomparableMinFacetValidateTest\n\nAssert the expected cvc-*-valid code rather than only that validation\nfailed, and compile the schema once for the class.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "3a27438f876c9bd6946051a14fd26235b2298bb9",
      "tree": "0e8d5b2b2a8cc559b8247d5eac3eb1c95df89970",
      "parents": [
        "ab4639a4e2f6080981abdfd1d8a60b8027eb3764"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Tue Oct 06 00:20:40 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 19:50:40 2026 +0100"
      },
      "message": "fail min facets on incomparable date and duration values (#132)\n\ncompareToGDate and compareToGDuration return 2 for an incomparable pair. The max facet checks already report that as invalid; the min checks let it through. Report it there too."
    },
    {
      "commit": "ab4639a4e2f6080981abdfd1d8a60b8027eb3764",
      "tree": "527e333f978cdd2940d30680b76b40ead5fe6bc7",
      "parents": [
        "c0c570a43fc8812815b14f056e87e2526b429fab"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 04 17:09:20 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 17:09:20 2026 +0100"
      },
      "message": "Decode base64Binary strictly in value holders and the rich parser (#131)\n\nAdd Base64Bin.decode, which ignores XML whitespace and otherwise requires\nthe base64 alphabet in groups of four with padding only at the end.\nJavaBase64Holder.lex and the XMLStreamReaderExtImpl base64 getters now\nuse it instead of the JDK MIME decoder, which drops non-alphabet chars\nand accepts unpadded input.\n\nFollow-up to #123: the rich parser getters still accepted stray chars,\nand unpadded or wrongly sized values (e.g. \"SGVsbG8\") still validated.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "c0c570a43fc8812815b14f056e87e2526b429fab",
      "tree": "3a55cd4b449faa4d0758f3829c466bdcb791226d",
      "parents": [
        "b922105ebf2933b53f15357092cee7289c2da80b"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Sun Oct 04 21:28:12 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 16:58:12 2026 +0100"
      },
      "message": "reject non-alphabet characters in base64Binary lex (#123)"
    },
    {
      "commit": "b922105ebf2933b53f15357092cee7289c2da80b",
      "tree": "ee60e82cbbae8e4c2edc81894fe06cd0965274ad",
      "parents": [
        "7d4d4833d606e81a323ad38058747cb54288ccf8"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 04 16:56:03 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 16:56:03 2026 +0100"
      },
      "message": "Let valueEquals match a copy() against its original (#130)\n\ncomplex_values_equal walks both trees until their content runs out. A\nvalue made by copy() is rooted at a document, so its walk ends on ENDDOC,\nwhile an element in a document ends on END. The two tokens differ, so\nx.copy().valueEquals(x) was false for every complex value.\n\nTreat either finish token as the end of the content.\n\nFound by POI\u0027s TestXWPFNumbering.testCompareAbstractNum, which matches a\ncopied CTAbstractNum against the numbering\u0027s own.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "7d4d4833d606e81a323ad38058747cb54288ccf8",
      "tree": "9eedb27bfdcdc76556caae9aa9b0245c469071cb",
      "parents": [
        "c24e63ef961d2e257dad4a43e62ce450586b1172"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 04 15:31:31 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 15:31:31 2026 +0100"
      },
      "message": "Avoid implicit narrowing compound assignments in SchemaTypeSystemImpl.nextBytes (#129)\n\navoid implicit narrowing compound assignments in SchemaTypeSystemImpl.nextBytes\n\nFixes code-scanning alerts for java/implicit-cast-in-compound-assignment.\nAlso mix the system-info bytes (not just their index) into the mask, and\nindex the mask with % rather than \u0026 so all mask bytes are used.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "c24e63ef961d2e257dad4a43e62ce450586b1172",
      "tree": "d4904c4c972d85d8c68517171e21bbbb3da8c36f",
      "parents": [
        "876047dd63c729294a24aacf5eb6dca6884c62d6"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 04 15:07:34 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 15:07:34 2026 +0100"
      },
      "message": "Put module-info.class in the jar root instead of a multi-release jar (#128)\n\nput module-info.class in the jar root instead of a multi-release jar\n\nJava 17 is now the minimum, so the module descriptor no longer needs to\nbe hidden from Java 8 under META-INF/versions/9.\n\n- move src/main/java9/module-info.java to src/main/jpms\n- replace compileJava9 with compileModuleInfo (release 17, project\n  toolchain) and rename the java9 configuration to jpms\n- drop the Multi-Release manifest attribute (Gradle and Ant)\n- fix the Ant build, which compiled from the missing\n  src/main/multimodule/java9 directory\n- the javax.xml.catalog based MavenPluginResolver replaces the Java 8\n  one, so the com.sun.org.apache.xml.internal:resolver dependency goes\n- ignore javax.xml.catalog in animalsniffer (maven plugin only)\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "876047dd63c729294a24aacf5eb6dca6884c62d6",
      "tree": "d5c6b316da5c20531624e6da0d460052243eb0d7",
      "parents": [
        "f0e1fd0b9473986743302ceaf28ce4306b379243"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 04 14:23:42 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 14:23:42 2026 +0100"
      },
      "message": "raise animalsniffer Android API minimum to 34 (#127)\n\nAPI 34 (Android 14) is the first level whose core libraries cover the\nJava 17 API (java.lang.Record, String.stripIndent, Stream.toList), matching\nthe Java 17 baseline. Also update the gummy-bears signature to 0.16.0.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "f0e1fd0b9473986743302ceaf28ce4306b379243",
      "tree": "26701e0e48f7a0c174117adf48732810e61ae35a",
      "parents": [
        "e1e57ca1c9153db8500ed7b1781e823dea582ab1"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 04 14:05:58 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 14:05:58 2026 +0100"
      },
      "message": "require Java 17 and use pattern-matching instanceof in src/main (#126)\n\nRaise the source/target level to Java 17 (Gradle and Ant builds) and\nconvert check-then-cast instanceof idioms in src/main to Java 17 pattern\nmatching.\n\nThe forbiddenApis block\u0027s targetCompatibility line was resolving to the\nproject property and pinning the whole build to 14, so it is removed;\nforbiddenApis now follows the project target.\n\nOnly language features are used; no new JDK APIs, so the Android API 26\nanimalsniffer check still passes.\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "e1e57ca1c9153db8500ed7b1781e823dea582ab1",
      "tree": "64eadbfbb3c8acee566d2ab98d2fa1f73ab1d381",
      "parents": [
        "e05a784d81eb5c9fc8a7a73daebce5ede9c6cae7"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Oct 04 10:54:41 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 10:54:41 2026 +0100"
      },
      "message": "[XMLBEANS-676] avoid NamespaceContext thread-local leaks (#125)\n\n- getCurrent() no longer creates thread-local state that is never removed\n- pop() updates current and the stack in one step and tolerates an\n  unbalanced pop instead of throwing (which masked the original exception)\n- remove() the thread-local when the stack empties\n- push before the try in SchemaParticleImpl/SchemaLocalAttributeImpl so a\n  failed push does not pop the caller\u0027s frame\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "e05a784d81eb5c9fc8a7a73daebce5ede9c6cae7",
      "tree": "ebc15591375fa4f1cf045b97231ee7e6ba331061",
      "parents": [
        "c7e40d59c4940e0f7965336d70b75575447f07d9"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Fri Oct 02 14:28:19 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 02 14:28:19 2026 +0100"
      },
      "message": "upgrade to Saxon 13.0 (#122)\n\n* upgrade to Saxon 13.0\n\nSaxon 13 requires Java 17 to build (the xmlbeans jar still targets Java 8).\n\n- SaxonXQuery: replace removed HashTrieMap with GeneralMapBuilder,\n  removed DurationValue ctor with DurationValue.makeDuration and\n  DateValue.makeDateValue(UnicodeString, ConversionRules) with\n  DateValue.tryParseDate\n- SaxonXPathEngine: use getStringValue() for remaining AtomicValues,\n  as toString() no longer returns the lexical form (e.g. durations)\n- CI workflows: build with JDK 17\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n* build CodeQL analysis with JDK 17 (needed for Saxon 13)\n\nCodeQL autobuild ran Gradle on JDK 11, which cannot read the Saxon 13\nclass files. Replace autobuild with an explicit JDK 17 build and move\noff the deprecated codeql-action v2.\n\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "c7e40d59c4940e0f7965336d70b75575447f07d9",
      "tree": "3248798767368ebfcc4c8cd70d731c5e0f7361cc",
      "parents": [
        "cd5dbe29223a3960ef6bd57890c237e232d8bfe5"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Fri Oct 02 18:50:41 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 02 14:20:41 2026 +0100"
      },
      "message": "align JavaIntHolder.value_hash_code with the other decimal holders (#124)"
    },
    {
      "commit": "cd5dbe29223a3960ef6bd57890c237e232d8bfe5",
      "tree": "7dd9d0f187c4997381b6a7df1cb49de06950534b",
      "parents": [
        "1117cd02a38633f064aaa1324924b97f956a90ea"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Thu Sep 24 00:44:46 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 20:14:46 2026 +0100"
      },
      "message": "only follow http(s) redirects in SchemaTypeLoaderBase.parse(URL) (#121)\n\nCo-authored-by: PJ Fanning \u003cpjfanning@users.noreply.github.com\u003e"
    },
    {
      "commit": "1117cd02a38633f064aaa1324924b97f956a90ea",
      "tree": "217ef8ba149405476d753c8136cda899e2983c5d",
      "parents": [
        "de8b4acc127615b990c4b643ca99819d62fd6669"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 20:14:07 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 20:14:07 2026 +0100"
      },
      "message": "Compare complex values by structure in valueEquals (XMLBEANS-658) (#106)\n\nCompare complex values by structure in valueEquals\n\nvalueEquals answered true for any two complex values whose schema types matched,\nwhatever they contained: XmlComplexContentImpl.equal_to compared the two schema\ntypes and left a \"BUGBUG: by-value structure comparison undone\" behind it. Two\ndocuments built from the same type are reported equal even when one carries a\nchild the other does not (XMLBEANS-658).\n\nCompare the values instead. equal_to now walks both trees: the attributes,\nregardless of their order, and the child elements in document order, each\ncompared by value in turn - so a child written in a different lexical form but\nwith the same value still matches. For mixed content the text between the\nchildren is compared as well; comments, processing instructions and whitespace\noutside of mixed content carry no value and are skipped.\n\nA complex type with simple content inherits its comparison from the simple value\nimplementation, which sees only the text - the attributes that the type adds to\nthat value were ignored, and the tree walk would have inherited that hole for\nevery such child. valueEquals compares those attributes once the text matches.\n\nThe walk runs under the monitors valueEquals has already taken, and every object\nin a tree shares the monitor of its root, so children are compared without\nlocking again - which for two trees in different synchronization domains would\nmean taking the global lock once per child.\n\nA value whose text does not fit its type has no value space to be compared in,\nand computing it throws: the CarLocationMessage test document has 12:34 in an\nxs:time, which is not a valid time. Comparing such a child falls back to the text\nas the document wrote it, so one bad value cannot turn a comparison into a throw.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "de8b4acc127615b990c4b643ca99819d62fd6669",
      "tree": "39d338aab733262804d076f1dec07c18c098a6cc",
      "parents": [
        "bac676023eb3f7508cdac9de018a9e30425d6aab"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 19:54:52 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 19:54:52 2026 +0100"
      },
      "message": "Update GitHub Actions secrets for publishing"
    },
    {
      "commit": "bac676023eb3f7508cdac9de018a9e30425d6aab",
      "tree": "e05c35a4e6a8f40fa972230f8c44ad2937f9f430",
      "parents": [
        "b2cf015dbb19dcefbc3b50b8b23a0c360b8658cc"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 19:38:50 2026 +0100"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 19:38:50 2026 +0100"
      },
      "message": "concurrency in build\n"
    },
    {
      "commit": "b2cf015dbb19dcefbc3b50b8b23a0c360b8658cc",
      "tree": "266fffe82c3b111f0576b334ec938b94c93c74f4",
      "parents": [
        "33fbf9301bd7725fa4af90a924e308e40ceddbf2"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 19:35:52 2026 +0100"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 19:35:52 2026 +0100"
      },
      "message": "publish snapshots\n"
    },
    {
      "commit": "33fbf9301bd7725fa4af90a924e308e40ceddbf2",
      "tree": "d6f55dec762a42517fce447ec5f8b49d68a3cde0",
      "parents": [
        "b854dd348f8b5ec0b444aeca882396c1e2a27a08"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 19:13:39 2026 +0100"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 19:13:39 2026 +0100"
      },
      "message": "Update doap_XMLBeans.rdf\n"
    },
    {
      "commit": "b854dd348f8b5ec0b444aeca882396c1e2a27a08",
      "tree": "12372c1a3a092149b97fe41e9475b25bb0a59d4e",
      "parents": [
        "348a265380cfe7176a5db74511b606d1ce0b352a"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 19:10:55 2026 +0100"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 19:10:55 2026 +0100"
      },
      "message": "git repo now\n"
    },
    {
      "commit": "348a265380cfe7176a5db74511b606d1ce0b352a",
      "tree": "a5b81c0f72358bd969380d39ae38925fc1b61a52",
      "parents": [
        "77682fc029c3f50a5052c7b90921fd9d7f69544b"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 14:07:06 2026 +0100"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Sep 23 14:07:06 2026 +0100"
      },
      "message": "snapshot\n"
    },
    {
      "commit": "77682fc029c3f50a5052c7b90921fd9d7f69544b",
      "tree": "cebb1453cbfe0921a1521a6a32626be1c68f0054",
      "parents": [
        "7db9cddfa1c590018217842c5b4225e3214247ce"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Sep 15 22:15:24 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 22:15:24 2026 +0100"
      },
      "message": "Fix PROPERTY_QSET indexing for types with several multi-name properties (#120)\n\n* Moving iterator declaration out of \"for\" loop.\n\nWhile this iterator is within the loop, all generated references to\r\nPROPERTY_QSET[] will point to index 0 instead of being incremented.\n\n* Add regression test for PROPERTY_QSET indexing\n\nSince 5.2.1 the per-property index in printStaticFields was reset on\nevery loop iteration, so every property with multiple accepted names\nreferenced PROPERTY_QSET[0]. The test compiles a type with two\nsubstitution-group properties and checks each accessor uses its own slot.\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: dwarven-cleric \u003cjohnzigler1986@gmail.com\u003e\nCo-authored-by: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "7db9cddfa1c590018217842c5b4225e3214247ce",
      "tree": "2770ff61f3130eefd322512993683bf9fc85189d",
      "parents": [
        "1c14e8ddf1e292c5e9143c679dec30a8048211a1"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sat Sep 12 22:15:31 2026 +0100"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sat Sep 12 22:15:31 2026 +0100"
      },
      "message": "prep 5.4.1\n"
    },
    {
      "commit": "1c14e8ddf1e292c5e9143c679dec30a8048211a1",
      "tree": "7a97248c5419cfbbe2c7d8f0b847a89868998b78",
      "parents": [
        "4fdde0c4c831800fb32b7cd520022ee9eb49c054"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 14:42:07 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 14:42:07 2026 +0100"
      },
      "message": "Close the digest stream when shaDigestForFile can\u0027t read a file (#116)\n\nshaDigestForFile calls str.close() only after the read loop finishes, so an\nIOException part-way through leaks the stream. The caller,\nsyncCacheWithLocalXsdFiles, swallows that exception - \"unable to read digest...\nno problem, ignore then\" - and carries straight on to the next file, so an\nsdownload -sync over a cache with unreadable .xsd files leaks one handle per\nfile rather than failing.\n\nWrap it in a try-with-resources.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "4fdde0c4c831800fb32b7cd520022ee9eb49c054",
      "tree": "62597b99a2b6ca7c55144543a55f06a57496bafb",
      "parents": [
        "9a9bb486eaae7e9e903adabb92a35626f67008ba"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 14:41:32 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 14:41:32 2026 +0100"
      },
      "message": "Release the Locale when a SAX load is abandoned (#117)\n\nSaxLoader.postLoad() nulls _locale and _context - \"fix garbage collection of\nLocale -\u003e Xobj -\u003e STL\" - but it only runs when the parse completes. Every\nfailure path leaves both set: the four catch blocks abort the context and\nrethrow without clearing them, and an IOException out of _xr.parse() is not\ncaught at all, so it does not even abort.\n\nThe XMLReader holds the SaxLoader as its content, DTD, error, lexical and\ndeclaration handler. With a caller-supplied reader\n(XmlOptions.setLoadUseXMLReader) that reader outlives the parse, so a failed\nload pins the partly built document and its SchemaTypeLoader until the next\nparse on that reader.\n\nAbort and clear from a finally instead, which also covers the IOException path.\nThe per-catch _context.abort() calls go away, and the RuntimeException catch\nexisted only to abort before rethrowing.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "9a9bb486eaae7e9e903adabb92a35626f67008ba",
      "tree": "171a0e180bfd2538db5055ac2b778d4507d9d598",
      "parents": [
        "dfef1b778424543d76342fff1cae7ea651760282"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 14:41:13 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 14:41:13 2026 +0100"
      },
      "message": "Exclude the loopback HTTP server test from the animalsniffer check (#118)\n\nParseUrlRedirectTest (added in #113) starts a com.sun.net.httpserver server on\nloopback to pin redirect following. That package is not in the Android API\nsignature animalsniffer checks against, so animalsnifferTest reports 19\nundefined references and ./gradlew check fails.\n\nThe signature describes what the published artifact may use. Test code never\nships and never runs on Android, so exclude just this file rather than weaken\nthe signature for main. Excluding the whole test source set would also work -\nthe animalsniffer block already carries a commented-out\n\"sourceSets \u003d [sourceSets.main]\" for that - but this keeps the rest of the\ntests covered.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "dfef1b778424543d76342fff1cae7ea651760282",
      "tree": "8a016a628bcc580b2aee1b7d467929e2dc20ed6b",
      "parents": [
        "fd2b423ebe30281eb256f387d83b20e3b8bb1243"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 14:00:57 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 14:00:57 2026 +0100"
      },
      "message": "Fold _canHavePrefixUri into Xobj._bits to shrink AttrXobj by 8 bytes (#115)\n\nNamedNodeXobj carries a single boolean, _canHavePrefixUri, to record whether a\nnode was created through the DOM Level 1 factory methods. Xobj already ends on\nan 8-byte boundary, so that one byte costs AttrXobj a whole 8-byte slot: 88\nbytes of fields become a 96-byte object with 7 bytes of padding.\n\nXobj._bits already holds kind, domType and three flags, with the highest bit in\nuse at 0x400. Moving the boolean there as CAN_HAVE_PREFIX_URI \u003d 0x800 removes\nthe field, and AttrXobj drops to 88 bytes. Measured with Unsafe.objectFieldOffset\non JDK 17 and 21, with and without compressed oops.\n\nElementXobj is unchanged at 96 - it adds a 4-byte _attributes reference on top\nof 88.\n\nReported against POI as a 600MB workbook holding 2.35 million AttrXobj, where\nthis is roughly 19MB.\n\nRefs https://github.com/apache/poi/issues/992\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "fd2b423ebe30281eb256f387d83b20e3b8bb1243",
      "tree": "6b68917ab2508b6cdf990f7c3f3f0b6c58f2a4fc",
      "parents": [
        "c863d2117caeea48297c3aff416772321f397927"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 13:01:08 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 13:01:08 2026 +0100"
      },
      "message": "Close the caller\u0027s stream when writeInputStreamToFile can\u0027t open the target (#114)\n\nSchemaResourceManager.writeInputStreamToFile relies on IOUtil.copyCompletely\nto close both streams, but copyCompletely only runs once the target has been\nopened. If Files.newOutputStream throws - an unwritable directory, a path\ncomponent that is not a directory, a full disk - the caller\u0027s input is never\nclosed.\n\nCallers in BaseSchemaResourceManager pass live downloads: url.openStream(),\nconn.getInputStream() and the index document stream. A write failure there\nleaks the socket.\n\nOwn the input in a try-with-resources so it is released either way. The second\nclose on the normal path is a no-op.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "c863d2117caeea48297c3aff416772321f397927",
      "tree": "a9c11c8ddb3ad392b1c14d292a32f13061bd0b4b",
      "parents": [
        "c0c0c6512d8c38cb144ed1f63ffb97dd648fc114"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 13:00:31 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 13:00:31 2026 +0100"
      },
      "message": "Close the .xsb output when a save is abandoned part-way through (#112)\n\nEvery saveXxx() in SchemaTypeSystemImpl runs the same sequence: construct an\nXsbReader, write the component once to fill the string pool, call\nwriteRealHeader() - which opens a Filer output stream - write it again, then\nwriteEnd() to flush and close.\n\nNothing guards the middle. If any write throws, and they all raise\nSchemaTypeLoaderException on an IO error, writeEnd() is skipped and the .xsb\noutput stream is left open with a partial file behind it. With scomp writing\none file per global type, a failure part-way through a large schema leaks a\ndescriptor for each of them.\n\nAdd XsbReader.closeOutputQuietly(), which releases a stream a completed\nwriteEnd() has already cleared, and call it from a finally in all eight save\nmethods. Closing quietly keeps the original failure from being masked.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "c0c0c6512d8c38cb144ed1f63ffb97dd648fc114",
      "tree": "22a1c0b28736fb839c3c5c57539af5041bdcc421",
      "parents": [
        "11034c86e3e94323797fad059ab65605a6a7ac3a"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 13:00:06 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 13:00:06 2026 +0100"
      },
      "message": "Release the connection for each redirect hop in parse(URL) (#113)\n\nSchemaTypeLoaderBase.parse(URL) follows up to five redirects. Each pass opens a\nconnection and calls getResponseCode(), which reads the response, then moves on\nto the next URL without touching that connection again. Only the final one is\nclosed, by the try-with-resources around getInputStream().\n\nThe redirect bodies are never read, so the sockets sit in the keep-alive cache\nholding a descriptor until a finalizer or the cache timeout reclaims them. Call\ndisconnect() on the hop being abandoned instead.\n\nAdded ParseUrlRedirectTest, a loopback HttpServer serving a three-hop redirect\nchain, to pin the follow behaviour - it passes either way and guards against\ndisconnect() breaking the chain.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "11034c86e3e94323797fad059ab65605a6a7ac3a",
      "tree": "09a1493d9dfef327da7eeafda16f78b2a820af7f",
      "parents": [
        "9d129236e775789225df9556ca31aa4129f21013"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 12:59:26 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 12:59:26 2026 +0100"
      },
      "message": "Release the classpath ResourceLoader when scomp fails (#111)\n\nSchemaCompiler.compile builds a PathResourceLoader over the -cp entries, which\nopens a ZipFile per jar, and closes it on the last line of the method. Nothing\nguards the path in between: if loadTypeSystem, system.save(filer),\ngenerateTypes or the extension hooks throw, every classpath jar stays open for\nthe life of the JVM.\n\nPut the body in a try/finally. The change is almost entirely re-indentation -\n\"git diff -w\" shows the try, the finally and a comment.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "9d129236e775789225df9556ca31aa4129f21013",
      "tree": "f30cf9ade49f05e16539182cb703bd786536e954",
      "parents": [
        "9d892c9dfcf484a9c5f77ede7157e7f4529c1e3b"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 12:57:17 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 12:57:17 2026 +0100"
      },
      "message": "Close the javac pipes and join the drain threads in externalCompile (#110)\n\nCodeGenUtil.externalCompile never closed any of the three pipes it opened for\nthe compiler process. proc.getOutputStream() (stdin, which javac never reads)\nwas left open, and the BufferedReaders wrapping stdout and stderr in copy()\nwere never closed, so three file descriptors per invocation were held until\nthe Process was collected.\n\nThe drain threads were also never joined: proc.waitFor() returns as soon as\nthe process exits, which can be before the readers have finished appending, so\nthe compiler diagnostics printed just below could be truncated or empty. The\n\"out\" and \"err\" locals were assigned and then unused.\n\nClose stdin up front, join both readers after waitFor(), destroy the process in\na finally, and let copy() close its reader when the pipe is drained.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "9d892c9dfcf484a9c5f77ede7157e7f4529c1e3b",
      "tree": "ea5835b539a304ba15b014a23901bd795280ffe1",
      "parents": [
        "c8854bb8ffcde562cc94925ca5d2b1edc1e62579"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 12:56:10 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 12:56:10 2026 +0100"
      },
      "message": "Close the .xsb stream when XsbDumper fails part-way through a file (#109)\n\nXsbDumper owns the stream it is handed - dumpAll() closes it via readEnd() on\nthe way out. But every read goes through error(), which throws\nIllegalStateException, so a truncated or corrupt .xsb aborts the dump with the\nstream still open.\n\nThat matters for the directory and jar walks: dump(File) recurses over a whole\ntree, and dumpZip\u0027s try-with-resources catches only IOException, so an\nIllegalStateException from one bad entry escapes with that entry\u0027s stream\nleaked.\n\nRun the dispatch in a try/finally so readEnd() always runs, and null-guard\nreadEnd() since dumpIndexData() already calls it on its own success path.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "c8854bb8ffcde562cc94925ca5d2b1edc1e62579",
      "tree": "03e1251e6c19c11539ed996346078b2d555617f3",
      "parents": [
        "c9ef8115ffb2a7e6425bdfefe50692adcfe7c70e"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 12:48:16 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 12:48:16 2026 +0100"
      },
      "message": "Close the XsbReader when resolveHandle meets an unhandled file type (#108)\n\nSchemaTypeSystemImpl.resolveHandle opens an XsbReader, then dispatches on the\nfile type it finds. Each finishLoadingXxx() closes the reader in a finally, but\nthe default arm throws IllegalStateException without closing, leaking the\nunderlying .xsb stream.\n\nThe arm is reachable: FILETYPE_SCHEMAPOINTER is a file type the compiler\nwrites but this switch does not handle, as is any type read from a corrupt or\ncrafted .xsb.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "c9ef8115ffb2a7e6425bdfefe50692adcfe7c70e",
      "tree": "ea63f1e0860ed11d599458ff7c24a915aa302ee9",
      "parents": [
        "78fcd3147c246bf2c62b75af76a3191b8398de5b"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Sep 07 12:47:21 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 12:47:21 2026 +0100"
      },
      "message": "Close the .xsb stream when XsbReader rejects a header (#107)\n\nXsbReader(typeSystem, handle, filetype) opens the resource stream before it\nvalidates the header, then throws SchemaTypeLoaderException for a bad magic\ncookie, an incompatible major/minor version or the wrong file type - and\nStringPool.readFrom can throw on a truncated file. The constructor never\nreturns in those cases, so no caller ever holds a reference to call readEnd()\nand the stream is leaked.\n\nSchemaTypeSystemImpl.initFromHeader already guards with\n\"finally { if (reader !\u003d null) reader.readEnd(); }\", but reader is still null\nfor exactly this failure. Every corrupt or version-mismatched .xsb on the\nclasspath therefore leaks a file or zip-entry handle.\n\nMove the header parsing into readHeader() and release the stream from the\nconstructor if it does not complete.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "78fcd3147c246bf2c62b75af76a3191b8398de5b",
      "tree": "60c708ef1daf47329a2b0f99039e3d92394529ad",
      "parents": [
        "b29e6ad8d721dcf16c11fc4328f1fe112f29281d"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Fri Sep 04 11:03:07 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 11:03:07 2026 +0100"
      },
      "message": "Keep the nth-child cache from losing the outer level of a nested walk (#105)\n\nfind_element_user resumes an indexed walk from the last child returned, which\nmade a flat getXxxArray(i) pass linear. A nested pass stayed quadratic: the two\ncache entries were picked with da \u003c\u003d db, so when neither matched the parent -\nwhich is every time the inner level starts at n \u003d\u003d 0 - the entry chosen to be\nre-seeded was the one the outer level was resting on. The outer walk then began\nagain from the first child on every step.\n\nPick the closest entry as before, but settle a tie in favour of the least\nrecently used one and move the entry used to the front, so the entry evicted is\nthe one no level is on. Widen it from two entries to four while doing so, since\nthree levels of repeated elements nest often enough to be worth holding.\n\nOn the largest worksheet of POI\u0027s bug62181.xlsx, 19,456 rows, Temurin 17: a\nnested getXxxArray(i) pass goes from 1,012 ms to 37 ms and a nested\ngetXxxList() pass from 969 ms to 50 ms. Flat passes and the no-arg\ngetXxxArray() walk are unchanged.\n\nThe store counts the children it steps over so that the difference is visible\nto a test - the answers are the same either way, only the work differs. On the\nsame benchmark the counter is not measurable against the walk it sits in.\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "b29e6ad8d721dcf16c11fc4328f1fe112f29281d",
      "tree": "3506c50c2cd72a5d8cb1d84deca49e640f64c69e",
      "parents": [
        "a4e3b2f336692924264724ca667443a537dbe7c1"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Thu Sep 03 22:52:02 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 22:52:02 2026 +0100"
      },
      "message": "Update XMLBeansVersion to 5.4.1-RC0"
    },
    {
      "commit": "a4e3b2f336692924264724ca667443a537dbe7c1",
      "tree": "81101341c4d893d5c3df192442627aed5d507619",
      "parents": [
        "cf1ef1e92023a91b61de14dd6bc9ca12e67f3f11"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Thu Sep 03 20:40:18 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 20:40:18 2026 +0100"
      },
      "message": "Stop indexed element access rescanning from the first child (#104)\n\n* Stop indexed element access rescanning from the first child\n\ngetXxxArray(i) walked the child list from the first child on every call, so an\nindexed pass over one element\u0027s children was O(n^2). Iterating getXxxList() was\nworse again: AbstractList\u0027s iterator asks for size() on every hasNext(), and for\nthese lists that is count_elements - another full walk over the children.\n\nLocale already keeps two version-stamped nth-child caches so that sequential\naccess resumes from the last child returned, and both cursor navigation and\ninsert_element_user use them; find_element_user scanned instead. Route it through\nfindNthChildElem like its neighbours.\n\nThe QNameSet half of that cache never worked: nthCache.fetch assigned _name but\nnot _set, so cacheSame could never match a set lookup. Assign both keys together,\nwhich also keeps them consistent - a stale _set left behind by a re-seed on name\nwould let a later set lookup match a position that was seeded by name.\n\nGive the lists returned by getXxxList() their own iterator, which reads the size\nwhen it reaches what it believes is the end rather than before every element. The\nlist stays live: elements appended while an iteration is running are still picked\nup, because reaching the end re-reads the size before giving up.\n\nOne pass over 16,000 line-item children, Temurin 17: the getXxxList() pass goes\nfrom 3,670 ms to 8.3 ms and the getXxxArray(i) loop from 1,030 ms to 3.3 ms.\ngetXxxArray() is unchanged - it was already a single walk.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Cover find_element_user and the live list edits directly\n\nFindElementUserTest goes at TypeStore.find_element_user itself rather than at the\ngenerated accessors: both overloads against a parent whose children are mixed with\nan attribute of the same QName, a comment, a processing instruction and loose text;\nindexes forward, backward, shuffled and repeated; past the end, absent names, empty\nsets and negative indexes; the same element coming back as the same user; two\nparents alternating; and lookups by name interleaved with lookups by set, which is\nwhat the nth-child cache has to keep apart. The last of those fails if the cache\nremembers a set while re-seeding by name.\n\nXmlBeanListLiveEditTest proves the write-through in both directions, for a list of\nXmlObjects and a list of values. Everything written through the list or one of its\niterators - set, add, add at an index, addAll, remove, clear, iterator remove,\nlistIterator set and add - is read back twice: through the typed accessors, and\nfrom the document serialized and parsed again, which only passes if the edit\nreached the store. The other direction is covered too: a list handed out earlier\nsees elements added, removed and edited through the bean, two lists over the same\nbean see each other\u0027s edits, and an edit made to an element the iterator has not\nreached yet is picked up when it gets there.\n\nJavaListIteratorTest gains the iterator\u0027s own corners: walking backwards never\nasks for the size, an empty list, an iterator positioned at the end, remove and\nset before anything has been returned, remove twice, set after remove and after\nadd, remove after previous, and the partial-method lists that have no sizer or no\ngetter.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "cf1ef1e92023a91b61de14dd6bc9ca12e67f3f11",
      "tree": "be791d310cd61b4ab0bc78991666f91a3b6374fd",
      "parents": [
        "74c3149570723e35b6f782a2c7bf5e6c2467eb91"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Aug 31 17:01:55 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 17:01:55 2026 +0100"
      },
      "message": "Contain FileResourceLoader reads to the resource directory (#102)\n\nFileResourceLoader.getResourceAsStream builds new File(_directory,\nresourceName) and opens it with no containment check. The resource name\nfor a compiled schema component is getBasePackage() + handle + \".xsb\",\nand the handle is read verbatim from the .xsb index (SchemaTypePool.\nreadHandlePool -\u003e reader.readString()) with no validation. A handle of\n\"../../../../etc/passwd\" in an untrusted compiled type system loaded\nfrom a directory therefore resolves outside _directory, giving an\narbitrary read of any .xsb-suffixed file (and SMB egress via a UNC path\non Windows).\n\nReject any resolved path whose canonical form is not inside the\nresource directory. Legitimate handles are single filename segments\n(NameUtil.upperCamelCase output, lowercased), so they always stay\ninside the directory and are unaffected. Zip/jar-backed loading already\nuses ZipFile.getEntry, a name lookup that cannot touch the filesystem,\nso it needs no change.\n\nCo-authored-by: Claude Fable 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "74c3149570723e35b6f782a2c7bf5e6c2467eb91",
      "tree": "d3b50745434301cdbe94fc9c754d8179457bcbdb",
      "parents": [
        "9de32942ddeb8338bbc42e8565f14fb9ed4dc717"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Aug 31 17:01:22 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 17:01:22 2026 +0100"
      },
      "message": "Reject remote file: authorities in the schema-download gate (#103)\n\nStscState.shouldDownloadURI gates schema import/include/redefine\nresolution. Remote http(s) locations are refused when downloads are\ndisabled (the default), but any file: URI was accepted regardless of\nthe gate and without inspecting the authority. A Windows UNC location\nsuch as file://attacker.example.com/share/evil.xsd in an untrusted\nschema therefore passed the gate and was fetched by StscImporter\n(new URL(absoluteURL) -\u003e loader.parse), reaching an attacker-controlled\nhost over SMB - an SSRF with attacker-controlled host and protocol -\neven though \"network downloads disabled\" was in effect.\n\nAccept a file: URI only when it has no remote authority (null, empty,\nor localhost). Local file includes, which have no authority, keep\nworking; a UNC/remote-host file: URI is now refused like any other\ndownload.\n\nCo-authored-by: Claude Fable 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "9de32942ddeb8338bbc42e8565f14fb9ed4dc717",
      "tree": "3c6621598c8f79fe8a226fe09e5c95a5c10c5994",
      "parents": [
        "d527f7a28a4173b0e8528bca492cec972edb06bf"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Aug 31 14:59:05 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 14:59:05 2026 +0100"
      },
      "message": "Restore java_value fallbacks lost in the switch reordering (#101)\n\nReordering the switches in XmlObjectBase.java_value to put the default\nlabels last silently changed what those defaults do when assertions are\ndisabled. The outer default used to fall through to\nbase.getStringValue(); after the reorder it fell out of the switch and\nreturned null. The inner decimal-size default used to fall through to\nbase.getBigDecimalValue(); after the reorder it fell out of the inner\nswitch and dropped into the BTC_ANY_URI case, returning the string\nvalue instead.\n\nGive each default an explicit return matching the pre-reorder\nfallthrough target, and drop the now-unreachable trailing return null.\nAlso fixes the stray indentation and duplicated comment the reorder\nleft on the string cases.\n\nCo-authored-by: Claude Fable 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "d527f7a28a4173b0e8528bca492cec972edb06bf",
      "tree": "b6fcf3ac4f49d34f803484af33e6251b2ca9f760",
      "parents": [
        "4673629f5158d8b34997c96324460f2bfa731b0e"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Thu Aug 27 01:03:13 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 01:03:13 2026 +0100"
      },
      "message": "Let the configured number limit reach schema compilation (#100)\n\nmaxNumberOfCharsForNumbers did not reach the numbers in a schema document.\nStscTranslator.buildBigInt, which reads totalDigits, maxLength and the\nother numeric facets, parsed with the hardcoded default, and\nSchemaTypeSystemCompiler validated the schema documents under a fresh\nXmlOptions carrying only the error listener, so raising the limit did not\nraise it for a schema and lowering it did not lower it.\n\nTwo paths also threw rather than reported. Validator.validateAtomicType\nparsed the decimal outside the ValidationContext, so a number past the\nlimit came out of XmlObject.validate() as a raw IllegalArgumentException\ninstead of a validation error - for any document, not only a schema. And\nbuildBigInt materialised the facet\u0027s text outside its own try, so a schema\nloaded with a lower limit than the number it declares threw\nXmlValueOutOfRangeException out of compileXsd.\n\nNote the schema document has to be parsed with the same options for a\nraised limit to apply to it, since the limit is fixed when the document is\nloaded. The tooling paths already pass one XmlOptions to both.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "4673629f5158d8b34997c96324460f2bfa731b0e",
      "tree": "763a94b15f331deac19fd3e02be75d057a04836f",
      "parents": [
        "c99ee9811d4f9bbd68dd5f2f28fde5202d89278d"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Thu Aug 27 00:40:36 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 00:40:36 2026 +0100"
      },
      "message": "Stop xsd2inst building digit-facet bounds as strings (#99)\n\nformatDecimal turned xsd:totalDigits into a string of that many nines and\nxsd:fractionDigits into \"0.00...1\", then parsed each back. Both facets are\npositiveInteger and have no ceiling, so once a schema asked for more digits\nthan the maximum allowed for a number, parsing the string it had just built\nthrew and no sample could be generated:\n\n  IllegalArgumentException: Number has more than 1024 characters\n\n5.3.0 used new BigDecimal(...) here and was unaffected.\n\nCompute both directly instead - 10^totalDigits - 1, and 1 shifted\nfractionDigits places right. The totalDigits bound can only narrow a limit\nat least as wide, so it is computed only when it can bind, which also keeps\n10^n away from a totalDigits far larger than any bound the schema declares.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "c99ee9811d4f9bbd68dd5f2f28fde5202d89278d",
      "tree": "053a9afb3c89d71a193f20a4256ffd9147a00359",
      "parents": [
        "1ba55136b24a4e7a93f344e91b943a739bb8a2ea"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Thu Aug 27 00:23:13 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 00:23:13 2026 +0100"
      },
      "message": "Bound a decimal by the digits it denotes, not just its characters (#98)\n\nmaxNumberOfCharsForNumbers limits the size of numbers read out of a\ndocument, but it only checked the length of the lexical value. An\nexponent is a handful of characters denoting arbitrarily many digits, so\nthe 13 characters of \"1E+2000000000\" got through and produced a\nBigDecimal of scale -2000000000: trivial to hold, catastrophic to expand.\nNo option is needed to reach this - Factory.parse does not validate on\nset, so the lexical check that rejects an exponent never runs.\n\nExponent notation is not part of the xsd:decimal lexical space to begin\nwith, so for conformant input the digit count is bounded by the length of\nthe lexical value and this check never fires. Apply it in\nparseAsBigDecimal, which is the single point both set_text paths and\nvalidateLexical go through.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "1ba55136b24a4e7a93f344e91b943a739bb8a2ea",
      "tree": "dbfcc1436c7f797f559ebec025750ee7c4a8267d",
      "parents": [
        "e143eb9f61b4cf28c5ffc7a5cd82b543ce8ccb86"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Thu Aug 27 00:08:53 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 00:08:53 2026 +0100"
      },
      "message": "Fix MathUtil conversion regressions on non-validation paths (#97)\n\n* Fix MathUtil conversion regressions on non-validation paths\n\n5.4.0 replaced several silently-truncating BigDecimal conversions with\nMathUtil equivalents that throw. On the parse and validation paths that is\nthe intent, but four of the call sites are not validation paths:\n\n- JavaDecimalHolder.value_hash_code() applied the max-number-chars limit,\n  so hashCode() threw IllegalArgumentException for any decimal over the\n  limit, poisoning every HashMap or HashSet holding the object. The limit\n  bounds parse-time work and cannot be applied here anyway: the equal\n  xsd:integer hashes without a limit, and the hashes have to agree. Guard\n  the one case that is genuinely expensive instead - expanding a large\n  negative scale, eg 1E+2000000000 - and hash such values from their\n  canonical form. The branch is taken on integer-digit count, which is the\n  same for every representation of a value, so equal values still agree.\n\n- XmlObjectBase.getBigIntegerValue() and set_BigDecimal() in the int, long\n  and integer holders let MathUtil\u0027s plain IllegalArgumentException escape,\n  where the lexical path for the same value reports it as\n  XmlValueOutOfRangeException. Translate it in one place so both paths and\n  both magnitude regimes agree.\n\n- GDurationBuilder.normalize() converted the whole-second carry with\n  toInt() while GDateBuilder does the same computation with toLong() into\n  the same long variable, so a fraction between int and long range threw\n  in one and not the other.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Bound the integral setters by their own range, not the parse limit\n\nset_BigDecimal in the int and long holders applied\nmaxNumberOfCharsForNumbers, which bounds numbers read out of a document\nand has no business gating a value handed to a setter directly: under\nmaxChars(8), setBigDecimalValue(123456789012) was rejected while\nsetBigIntegerValue and setLongValue accepted the same value.\n\nThe real constraint is the type\u0027s own range, which set_BigInteger already\nenforces, so pass the width of that range - 19 digits for long, 10 for\nint, at either end, as precision() ignores the sign. MathUtil still does\nthe conversion, so both expansion traps stay guarded: a large negative\nscale is rejected before it is expanded, and a value below 1 truncates to\nzero without computing the divisor. xs:integer is unbounded and keeps the\nconfigured limit, which is its only bound.\n\nAlso drop stripTrailingZeros() from the oversized-value branch of\nvalue_hash_code(): it is quadratic in the number of trailing zeros, so\nhashing a 200000-digit value took 39 seconds. The digit count and sign\nare just as representation-invariant and are cheap to read.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "e143eb9f61b4cf28c5ffc7a5cd82b543ce8ccb86",
      "tree": "5d1d794d6fc2a803a06d2be1740b4e043f3f3c19",
      "parents": [
        "3f93cbde335330555f11e72c14413f7857a7b2f4"
      ],
      "author": {
        "name": "David Pilař",
        "email": "david@czpilar.net",
        "time": "Thu Aug 27 00:31:56 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 23:31:56 2026 +0100"
      },
      "message": "Fix printDecimal regression for decimal values wider than a long (#96)\n\nRegression introduced in 5.4.0: printing an xsd:decimal that does not fit into a\nlong throws IllegalArgumentException(\"Value can\u0027t be converted to long\"). 5.3.0\nprints the same value correctly.\n\nXsTypeConverter.printDecimal used MathUtil.toLong(value) \u003d\u003d 0 to test whether the\nvalue is zero. toLong() throws for anything wider than a long, so the check blew\nup on values it was only ever meant to classify. 5.3.0 used BigDecimal.longValue()\nhere, which truncates silently; MathUtil was added in 5.4.0 and toLong() replaced\nlongValue() on this line.\n\nUse signum() instead, as in the original Harmony code this method is derived from:\nsame semantics, cannot throw, O(1), and it keeps MathUtil off the serialization\npath entirely.\n\nSeen in the wild as a WSDL2Java code generation failure: xmlbeans could no longer\nsave a compiled schema type system containing a high-precision decimal."
    },
    {
      "commit": "3f93cbde335330555f11e72c14413f7857a7b2f4",
      "tree": "ee0faefcdba76218386179cb4ef37445907ae3ae",
      "parents": [
        "050e30c4b0eec3858129a0fe1f175942364659d5"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Aug 25 14:32:01 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 14:32:01 2026 +0100"
      },
      "message": "apply the configured number-length limit on the parse path (#95)\n\nXmlOptions.setMaxNumberOfCharsForNumbers only reached MathUtil from\nValidator, ie only when XmlObject.validate(options) was called explicitly.\nThe path that runs on every parse - lazy value materialization through\nXmlObjectBase.check_dated -\u003e update_from_wscanon_text -\u003e set_text - always\nused DEFAULT_MAX_NUMBER_CHARS, because no XmlOptions is reachable from a\nvalue holder. Raising or lowering the option had no effect there.\n\nCarry the limit on the Locale, the way _loadStrictFloatingPoint and\n_loadAllowDecimalExponent are already carried: a default method on\nXmlLocale, a field copied from the options in the Locale constructor, and\na get_max_number_chars() helper on XmlObjectBase for the holders to use.\n\nAdd the maxNumberOfChars overloads that were missing, so there is\nsomething to pass the value to: MathUtil.parseAsBigInteger, parseAsLong\nand toBigInteger, and XsTypeConverter.lexDecimal, lexInteger and lexLong.\nlexInt/lexShort/lexByte need none - they use the hand-rolled\nparseIntXsdNumber and are bounded by the target type.\n\nWire it through the decimal, integer and long holders. Every new overload\nis additive and the existing signatures keep defaulting to\nDEFAULT_MAX_NUMBER_CHARS, so behaviour is unchanged unless the option is\nset. Validator needs no change: integer-derived types route through its\nBTC_DECIMAL case, which is already wired.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "050e30c4b0eec3858129a0fe1f175942364659d5",
      "tree": "75c8492f64a0db128a0c5ebd767cea7f01beb592",
      "parents": [
        "a6f226fd697dd28f4e3240f242ee98f6b9674c0a"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Aug 25 13:58:10 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 13:58:10 2026 +0100"
      },
      "message": "fix boundary and performance issues in MathUtil conversions (#94)\n\nsafeFloatToInt accepted 2147483648f: widening Integer.MAX_VALUE to float\nrounds it up to 2^31, so the upper-bound check never tripped and the cast\nsilently saturated to 2147483647. Compare as double instead.\n\ntoBigInteger guarded a large negative scale but not a large positive one,\nso a tiny value such as 1E-10000000 reached BigDecimal.toBigInteger(),\nwhich computes 10^scale - several seconds of CPU to produce zero, and an\nundocumented ArithmeticException at larger exponents. Such values truncate\nto zero, so return that directly.\n\nAlso add an explicit null check to toBigInteger, matching the other\nmethods, and correct a few copy-pasted javadoc return types.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "a6f226fd697dd28f4e3240f242ee98f6b9674c0a",
      "tree": "64a35e08065f53895dc6d74e0b862bc379409334",
      "parents": [
        "e27f97b10e770df365cd2d983a14a965e456c978"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Aug 24 17:56:08 2026 +0100"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Aug 24 17:56:08 2026 +0100"
      },
      "message": "snapshot\n"
    },
    {
      "commit": "e27f97b10e770df365cd2d983a14a965e456c978",
      "tree": "b9d35b7a4f02017dd11ac9e60d87684cdfb0e80f",
      "parents": [
        "9a8da421edced5234ab4e54869809b775a66018f"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Thu Aug 20 20:15:34 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 15:45:34 2026 +0100"
      },
      "message": "reject negative UTF length in LongUTFDataInputStream.readLongUTF (#93)\n\nreject negative UTF length in readLongUTF"
    },
    {
      "commit": "9a8da421edced5234ab4e54869809b775a66018f",
      "tree": "d862a12fdeb26816ba5eb967ffe9f99d7840b4ba",
      "parents": [
        "70c773d5a02853488cc9b1f56fdccb0f3f408a58"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Thu Aug 13 15:43:02 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 11:13:02 2026 +0100"
      },
      "message": "report over-long float and double as invalid in validateLexical (#92)\n\n* report over-long float and double as invalid in validateLexical\n\n* catch RuntimeException in float and double validateLexical"
    },
    {
      "commit": "70c773d5a02853488cc9b1f56fdccb0f3f408a58",
      "tree": "3c03eab2cb4256e54155ec1d939906833ac7d2fb",
      "parents": [
        "7e52b96d44f45b93df3a0f59d36b66a9ab27f8a2"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Aug 05 21:26:27 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 05 21:26:27 2026 +0100"
      },
      "message": "Add license information to .asf.yaml\n\nAdded license information to .asf.yaml file."
    },
    {
      "commit": "7e52b96d44f45b93df3a0f59d36b66a9ab27f8a2",
      "tree": "31120ba04234e74b662d6aeb7af8c844083326a2",
      "parents": [
        "3e45023127bcc0d2e77f298c27bc188c415361dd"
      ],
      "author": {
        "name": "aizu-m",
        "email": "aizumusheer2@gmail.com",
        "time": "Wed Aug 05 15:54:16 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 05 11:24:16 2026 +0100"
      },
      "message": "escape schema text copied into the generated java source (#90)"
    },
    {
      "commit": "3e45023127bcc0d2e77f298c27bc188c415361dd",
      "tree": "615d9587296f583739cf39172d59e8193c3b5283",
      "parents": [
        "47316e6bc825b1bc9663c6b9b7585e7135a4db15"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Aug 05 09:39:03 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 05 09:39:03 2026 +0100"
      },
      "message": "Create .asf.yaml for GitHub repository settings (#91)\n\nAdd GitHub configuration for Apache XMLBeans repository."
    },
    {
      "commit": "47316e6bc825b1bc9663c6b9b7585e7135a4db15",
      "tree": "21ec384db556d741a168c5ad9da656ba491d416f",
      "parents": [
        "4263786cff1055c482b72b32e4763ee558632876"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Thu Jul 30 19:51:17 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Thu Jul 30 19:51:17 2026 +0000"
      },
      "message": "reject negative annotation counts in XsbReader index loader. Thanks to aizu-m. This closes #89\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936749 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "4263786cff1055c482b72b32e4763ee558632876",
      "tree": "618ddf4c741caf2e651d42789748c28740948c0b",
      "parents": [
        "fb0b5be2b169995408251c396bab9df691c5ec10"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Tue Jul 21 09:49:02 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Tue Jul 21 09:49:02 2026 +0000"
      },
      "message": "throw loader exception on repeated string in StringPool.readFrom. Thanks to aizu-m. This closes #88\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936419 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "fb0b5be2b169995408251c396bab9df691c5ec10",
      "tree": "1db8f91510290d94e49c70a4d11d1351de98c549",
      "parents": [
        "5a09308d92094ec9e6cf4b11cc1088715e62a667"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Sun Jul 19 15:58:59 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Sun Jul 19 15:58:59 2026 +0000"
      },
      "message": "add tests\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936326 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "5a09308d92094ec9e6cf4b11cc1088715e62a667",
      "tree": "cb775ef6206aa7d4750346934741a2bfa1793b1c",
      "parents": [
        "44d2dc8fa408de6289994533be72461bf662595d"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Sun Jul 19 15:56:30 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Sun Jul 19 15:56:30 2026 +0000"
      },
      "message": "fix animal sniffer issue\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936325 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "44d2dc8fa408de6289994533be72461bf662595d",
      "tree": "bff1aa9858db7050fcda85e1f5ec59b219fd5d32",
      "parents": [
        "a5a2858a241728f3775ba82ce4c41aa39d85b28a"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Sun Jul 19 15:49:18 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Sun Jul 19 15:49:18 2026 +0000"
      },
      "message": "update security doc\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936324 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "a5a2858a241728f3775ba82ce4c41aa39d85b28a",
      "tree": "cdb6485d5f71e9d1d352b64f31767dc431309db0",
      "parents": [
        "874e1ca5f67714544abdce3e7b62dd7b6744d276"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Sun Jul 19 15:41:02 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Sun Jul 19 15:41:02 2026 +0000"
      },
      "message": "more conversion issues\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936323 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "874e1ca5f67714544abdce3e7b62dd7b6744d276",
      "tree": "2b789aa578c6c9ee119cf7466a323d97f88f6908",
      "parents": [
        "298bb8d93790150f08eb750341ed072b141dd7b7"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 21:00:45 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 21:00:45 2026 +0000"
      },
      "message": "more work on making num lens configurable\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936284 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "298bb8d93790150f08eb750341ed072b141dd7b7",
      "tree": "862a2ad0684936df0eb24938ab91d1a45dbf460a",
      "parents": [
        "474943a7081b364a71c5746d3bc7bbbc085635d0"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 20:23:20 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 20:23:20 2026 +0000"
      },
      "message": "use xmloptions for some places where nums are parsed\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936283 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "474943a7081b364a71c5746d3bc7bbbc085635d0",
      "tree": "afde99ebf190d20f888bdc7403a394beed5e48c3",
      "parents": [
        "75a7ae281a5b347ec74f6ab54dfccd8770747e5c"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 19:10:54 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 19:10:54 2026 +0000"
      },
      "message": "bigint conversion checks\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936282 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "75a7ae281a5b347ec74f6ab54dfccd8770747e5c",
      "tree": "fbc0067f7f13c83968e784b6d5fcb3e84cc8d816",
      "parents": [
        "32305aa34a332fcc8eef0bf5ad6909ea8dc5529f"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 18:36:26 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 18:36:26 2026 +0000"
      },
      "message": "add more GDuration tests\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936279 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "32305aa34a332fcc8eef0bf5ad6909ea8dc5529f",
      "tree": "105385a400ca210b81d9fba834116b429d329f44",
      "parents": [
        "d76f766ce8aadd7e6ef5ad87a424c9ed87cd19a7"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 18:25:41 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 18:25:41 2026 +0000"
      },
      "message": "more num parsing utils\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936278 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "d76f766ce8aadd7e6ef5ad87a424c9ed87cd19a7",
      "tree": "dea5f610c657a962354b62d824465bd9052dd62a",
      "parents": [
        "e63180d8a246b36a8f08cbba6a01dd86688eaa21"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 16:55:02 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 16:55:02 2026 +0000"
      },
      "message": "examples where BigInteger parsing can be made easier\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936275 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e63180d8a246b36a8f08cbba6a01dd86688eaa21",
      "tree": "a06000634ce74cce4bcf987bb5627c8ea70f6523",
      "parents": [
        "23d8ba8c8b78a6eebc650d72deff06dc214d4769"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 16:54:05 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 16:54:05 2026 +0000"
      },
      "message": "count length facets in code points in string and anyURI. Thanks to aizu-m. This closes #79\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936274 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "23d8ba8c8b78a6eebc650d72deff06dc214d4769",
      "tree": "38b868304be484316a84183d0ee57ac08f908474",
      "parents": [
        "41ba65cd67ad14c06c53163f4870a0d3ab19b26f"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 16:51:41 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Fri Jul 17 16:51:41 2026 +0000"
      },
      "message": "add util to parse BigDecimal/BigInteger from string\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936273 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "41ba65cd67ad14c06c53163f4870a0d3ab19b26f",
      "tree": "0e3ffd246fc3eec08b14321ccdecad4d2dad9f7e",
      "parents": [
        "135f67108cc0f35e7ca7e045fa2ffd801e6a316b"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Thu Jul 16 10:50:26 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Thu Jul 16 10:50:26 2026 +0000"
      },
      "message": "revert cyclonedx upgrade\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936199 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "135f67108cc0f35e7ca7e045fa2ffd801e6a316b",
      "tree": "be0772420eba6d233cd81b95e9e748ae53cc6d91",
      "parents": [
        "e049a21d2f58a48f00374f92b91269e570fd6b99"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Thu Jul 16 10:38:20 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Thu Jul 16 10:38:20 2026 +0000"
      },
      "message": "upgrade KEYS\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936198 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e049a21d2f58a48f00374f92b91269e570fd6b99",
      "tree": "c34bcf5e727a0fc17ef9a21980a691ceb65a0b04",
      "parents": [
        "e6d87c3eeee434c4c64c2e2e92b84dceab644726"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Thu Jul 16 10:34:41 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Thu Jul 16 10:34:41 2026 +0000"
      },
      "message": "upgrade KEYS\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936197 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "e6d87c3eeee434c4c64c2e2e92b84dceab644726",
      "tree": "7dcb707eccb5cbdf05ed5d4cbf9563a7f0457266",
      "parents": [
        "acd7938f9f41a214baaf994716fa0b13d58f57b1"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Thu Jul 16 10:13:17 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Thu Jul 16 10:13:17 2026 +0000"
      },
      "message": "upgrade plugin\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936193 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "acd7938f9f41a214baaf994716fa0b13d58f57b1",
      "tree": "9e4c3f554dda4a623e6164f39285245b617af14f",
      "parents": [
        "b450527448c3c69dddb3aeeb31feca794f6d39e3"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 23:00:04 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 23:00:04 2026 +0000"
      },
      "message": "saxon 12.10\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936183 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "b450527448c3c69dddb3aeeb31feca794f6d39e3",
      "tree": "c4a6e0c08bf0806fbb096f32700e5273741af008",
      "parents": [
        "919b8777135cb79178ff7532e13085f7ea923f81"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 22:57:46 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 22:57:46 2026 +0000"
      },
      "message": "prep 5.4.0\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936182 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "919b8777135cb79178ff7532e13085f7ea923f81",
      "tree": "97a5e487e85d1a2a30a4f32783cffa79bda07730",
      "parents": [
        "a49c40e4b144aec9e8b44223940b3c3a16502eb6"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 22:56:15 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 22:56:15 2026 +0000"
      },
      "message": "log4j 2.26.1\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936181 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "a49c40e4b144aec9e8b44223940b3c3a16502eb6",
      "tree": "0c2bc09ecae2b8537822629d63433f41ec435d33",
      "parents": [
        "c108180276ba2d6da7e3d5f7a19d6d25ff4c9ae5"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 22:29:01 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 22:29:01 2026 +0000"
      },
      "message": "escape comment trailing dash only on the final chunk. Thanks to aizu-m. This closes #78\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936180 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "c108180276ba2d6da7e3d5f7a19d6d25ff4c9ae5",
      "tree": "373ecffd1c3f4ff3017d84938b6648d5da65869d",
      "parents": [
        "0907d4ba742000f8819144e122fa5dd7fdf9542a"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 22:22:47 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 22:22:47 2026 +0000"
      },
      "message": "revert\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936177 13f79535-47bb-0310-9956-ffa450edef68\n"
    },
    {
      "commit": "0907d4ba742000f8819144e122fa5dd7fdf9542a",
      "tree": "2b5612d0fff18ef0854c4999e9504a4372fec521",
      "parents": [
        "6b2927aa357f9efc4c599d9cf8d5fae688bb9302"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 21:50:07 2026 +0000"
      },
      "committer": {
        "name": "PJ Fanning",
        "email": "fanningpj@apache.org",
        "time": "Wed Jul 15 21:50:07 2026 +0000"
      },
      "message": "update test code\n\ngit-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1936176 13f79535-47bb-0310-9956-ffa450edef68\n"
    }
  ],
  "next": "6b2927aa357f9efc4c599d9cf8d5fae688bb9302"
}
