)]}'
{
  "log": [
    {
      "commit": "9a1bf2e04a21b48fcad633b1f0c9318c0a6a8d4c",
      "tree": "b76e6fbcb41923270a1c9a6f19e0c50e9506d7a3",
      "parents": [
        "29ddb24335618ce0cd6b67151d41de390cf8142e"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Thu Apr 23 08:04:29 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 08:04:29 2026 -0600"
      },
      "message": "Fix vulnerable System.Security.Cryptography.Xml via updating Microsoft.Extensions to 10.0.7 (#1260)\n\n* Fix vulnerable version of System.Security.Cryptography.Xml\n\n* Upgrade Microsoft.Extensions libraries to 10.0.7"
    },
    {
      "commit": "29ddb24335618ce0cd6b67151d41de390cf8142e",
      "tree": "1df4f62f6c2633c76e944a0f3d320026dc53a94e",
      "parents": [
        "dff28e78a6e0aa28209d593c76c8c54ede4ae0e1"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Thu Apr 23 18:30:33 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 18:30:33 2026 +0700"
      },
      "message": "SWEEP: Upgraded to the navigable APIs on `SortedSet\u003cT\u003e` and `SortedDictionary\u003cTKey, TValue\u003e` (#1268)\n\n* Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsReader.SimpleTVTermsEnum: Use GetViewAfter() to match the upstream code.\n\n* Lucene.Net.Codecs.Compressing.CompressingTermVectorsWriter: Use SortedSet\u003cT\u003e.TryGetLast() rather than Max, since the latter is obsolete. Fixed implementation to throw InvalidOperationException in the same case that Java would throw a NoSuchElementException (when the collection is empty).\n\n* Lucene.Net.Grouping.AbstractFirstPassGroupingCollector: Removed LINQ calls and replaced them with navigable collection APIs, which will reduce allocations.\n\n* Lucene.Net.Grouping.AbstractGrouFacetCollector: Converted calls to the obsolete SortedSet\u003cT\u003e.Max property to calls to RemoveLast() and TryGetLast().\n\n* Lucene.Net.Grouping.SearchGroup.GroupMerger\u003cT\u003e: Replaced calls to the obsolete SortedSet\u003cT\u003e properties Min and Max with RemoveFirst() and RemoveLast()\n\n* Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester: Replaced call to obsolete SortedSet\u003cT\u003e.Min property with TryGetFirst().\n\n* Lucene.Net.Util.Fst.Util: Replaced calls to obsolete SortedSet\u003cT\u003e properties Min and Max with RemoveFirst(), RemoveLast() and TryGetLast()\n\n* Lucene.Net.Analysis.MockCharFilter: Replaced call to obsolete SortedSet\u003cT\u003e.TryGetPredecessor() overload with the new overload.\n\n* Lucene.Net.Search.PostingsHighlight.PostingsHighlighter: Replaced call to obsolete SortedSet\u003cT\u003e.GetViewBetween() method and replaced with GetView().\n\n* Lucene.Net.Codecs.RAMOnly.RamOnlyPostingsFormat.RAMTermsEnum: Changed implementation to use GetViewAfter() and TryGetLast() of SortedDictionary\u003cTKey, TValue\u003e rather than resorting to LINQ calls.\n\n* Lucene.Net.Codecs.Lucene40.Lucene40DocValuesWriter: Added comment defending the use of LINQ for this specific case rather than using GetViewBefore().\n\n* Update src/Lucene.Net.Grouping/AbstractFirstPassGroupingCollector.cs\r\n\r\nAdded discard as per PR feedback\n\nCo-authored-by: Paul Irwin \u003cpaulirwin@gmail.com\u003e\n\n* Update src/Lucene.Net.Grouping/AbstractGroupFacetCollector.cs\r\n\r\nAdded discard as per PR feedback\n\nCo-authored-by: Paul Irwin \u003cpaulirwin@gmail.com\u003e\n\n---------\n\nCo-authored-by: Paul Irwin \u003cpaulirwin@gmail.com\u003e"
    },
    {
      "commit": "dff28e78a6e0aa28209d593c76c8c54ede4ae0e1",
      "tree": "3a6cddff1a428d8abce0f179b29a300f28337860",
      "parents": [
        "679dfacdea746c455c442ff213491d1ebc2bf3e7"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Tue Apr 21 07:58:26 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 15:58:26 2026 -0600"
      },
      "message": "misc: fix typos (#1270)\n\nGeneral spelling clean up"
    },
    {
      "commit": "679dfacdea746c455c442ff213491d1ebc2bf3e7",
      "tree": "7ca9a22f713048c644aba28a9d524cbe697cb678",
      "parents": [
        "fa77f63f9dfd21ab8885678410acdcbb79f5d614"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Tue Apr 21 06:27:28 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 03:27:28 2026 +0700"
      },
      "message": "misc: fix spelling and clean up (#1269)\n\nGeneral spelling fixes and some minor editor whitespace auto clean up"
    },
    {
      "commit": "fa77f63f9dfd21ab8885678410acdcbb79f5d614",
      "tree": "aba8c3c04c2a68cc8059672ac27b836e2821ffdc",
      "parents": [
        "1a1103d78eb76bd437ca146ebf7f8d192506b53a"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Sun Apr 19 14:30:23 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 14:30:23 2026 -0600"
      },
      "message": "More BytesRef/UnicodeUtil UTF-8-to-string fixes, #1024 (#1171)\n\n* UnicodeUtil: Change UTF8toUTF16 to throw DecoderFallbackException, #1024\n\nChanged UTF8toUTF16 method to throw DecoderFallbackException instead of FormatException\nwhen invalid UTF-8 is encountered. This aligns with .NET conventions where\nDecoderFallbackException is the appropriate exception type for character decoding\nissues (equivalent to Java\u0027s CharacterCodingException).\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n* BytesRef: Use Utf8ToStringWithFallback in DebuggerDisplay, #1024\n\nChanged DebuggerDisplay attribute to use Utf8ToStringWithFallback() instead of\nUtf8ToString() to prevent exceptions when debugging BytesRef instances that\ncontain invalid UTF-8 sequences.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n* BytesRef: Show \"Invalid UTF-8\" label and string-before-bytes in DebuggerDisplay, #1024\n\nAddress NightOwl888\u0027s review on #1171. The prior DebuggerDisplay used\nUtf8ToStringWithFallback, which silently substitutes U+FFFD for malformed\ninput — indistinguishable from a real U+FFFD in the data. Switch to a\nprivate DebuggerDisplay property that uses TryUtf8ToString, shows the\nliteral \"Invalid UTF-8\" on decode failure, and puts the decoded string\nbefore the raw bytes.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* UnicodeUtil: Fix UTF8toUTF16WithFallback byte[] overload to use fallback path, #1024\n\nThe byte[]/offset/length overload was delegating to the throwing\nUTF8toUTF16 variant, so callers like BytesRef.Utf8ToStringWithFallback()\nwould throw DecoderFallbackException on invalid UTF-8 instead of\nsubstituting U+FFFD as the method name and docs promise. Delegate to\nthe ReadOnlySpan\u003cbyte\u003e fallback overload and add a regression test\ncovering the 4-arg signature with a non-zero offset.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "1a1103d78eb76bd437ca146ebf7f8d192506b53a",
      "tree": "54cb87ac804afa3db68ee51b2b40b4bc1c49bc67",
      "parents": [
        "36b57d57bea0fecc464ddd85e9953ed7851b1681"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Sun Apr 19 13:56:08 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 13:56:08 2026 -0600"
      },
      "message": "Fix concurrent-extension race in MMapDirectory.Map, #1090 (#1263)\n\n* Fix concurrent-extension race in MMapDirectory.Map, #1090\n\nWhen a file is being appended to concurrently (e.g. by an IndexWriter\nthat still holds a write handle), MemoryMappedFile.CreateFromFile can\nthrow ArgumentOutOfRangeException(\"capacity\") because its internal stat\nobserves a file size greater than the capacity we computed from\nfc.Length moments earlier. Take the max of the caller-supplied length\nand a fresh fc.Length read as the capacity, and retry with an updated\nlength on that specific failure. Adds test-only counters and a\nstress-based regression test in TestMultiMMap.\n\n* Address Copilot review on #1090 MMapDirectory.Map fix\n\nNarrow the ArgumentOutOfRangeException retry filter to\nParamName \u003d\u003d \"capacity\" so unrelated argument errors aren\u0027t masked,\nand mark the regression test NonParallelizable since it relies on\nstatic counters on MMapDirectory.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "36b57d57bea0fecc464ddd85e9953ed7851b1681",
      "tree": "4a963fbdc55f37ea92ed0120662964efe393ed65",
      "parents": [
        "84cc755070b3bb9456234c35753f55f5ef3bffa1"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Sun Apr 19 23:56:51 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 07:56:51 2026 -0600"
      },
      "message": "misc: fix typos (#1266)"
    },
    {
      "commit": "84cc755070b3bb9456234c35753f55f5ef3bffa1",
      "tree": "64c690426742cc41d7921742694b42fc63b53a44",
      "parents": [
        "b05b87931bf95389a82fce385cb8418aa40b95ec"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Sat Apr 18 14:14:42 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 18 14:14:42 2026 -0600"
      },
      "message": "Remove lib folder; add Apache RAT script (#1256) (#1258)\n\n* Remove lib folder; add Apache RAT script\n\n* Add note about PowerShell being required to make a release"
    },
    {
      "commit": "b05b87931bf95389a82fce385cb8418aa40b95ec",
      "tree": "95a3b8bd88b5d91ec3f4c5eef880294cd22e9153",
      "parents": [
        "04779e226bf47f220e4f78cbd916c8449442a75c"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Sun Apr 19 00:29:54 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 00:29:54 2026 +0700"
      },
      "message": "dependencies.props: Bumped J2N to 2.2.0-alpha-0042 (#1265)"
    },
    {
      "commit": "04779e226bf47f220e4f78cbd916c8449442a75c",
      "tree": "75a513f9f112947f779750dba28efb760ca2fe41",
      "parents": [
        "2599c2e4631fd4127cbfcbcb430f960f62f75029"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Apr 17 11:12:50 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 11:12:50 2026 -0600"
      },
      "message": "Fix concurrent-write race in SafeTextWriterWrapper, #1246 (#1262)\n\n* Fix concurrent-write race in SafeTextWriterWrapper, #1246\n\nWrap the inner TextWriter in TextWriter.Synchronized so that concurrent\nwrites from IndexSearcher executor threads to diagnostic info streams\n(FieldCache, IndexWriter, SegmentInfos, CheckIndex) do not corrupt\nnon-thread-safe writers such as StringWriter. This matches the\nthread-safety of Java\u0027s PrintStream, which synchronizes at the\nprintln boundary.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Add [TestFixture] and [LuceneNetSpecific] to TestSafeTextWriterWrapper\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "2599c2e4631fd4127cbfcbcb430f960f62f75029",
      "tree": "c236c494efbe36538c8815dceea96805a44aecc9",
      "parents": [
        "d4d960f3ab15b55d20929089a69ba72efe0629ab"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Apr 17 10:05:36 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 10:05:36 2026 -0600"
      },
      "message": "Backport fixes for AnalyzingInfixSuggester (#1259)\n\n* Backport fixes from LUCENE-5889, LUCENE-7564, and LUCENE-7670\n\n* Backport SearcherManager thread-safety from LUCENE-7564 (73f068e5033)\n\nForce single-threaded access to the SearcherManager when performing\nan acquire() or reassigning, to prevent race conditions between\nBuild(), EnsureOpen(), DoLookup(), GetSizeInBytes(), and Count.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* PR feedback and fix linter error of writer field name\n\n---------\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "d4d960f3ab15b55d20929089a69ba72efe0629ab",
      "tree": "7ab3c594225e5e0929c3945646cf19770f089f42",
      "parents": [
        "57e0b8c45b8c812b3164f8d6a7eb0347a343cae4"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Apr 17 09:53:36 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 09:53:36 2026 -0600"
      },
      "message": "BREAKING: More cancellation support in APIs that call IndexSearcher, #922 (#1261)\n\n* Add cancellation support to Classification\n\n* Add cancellation support to SpellChecker\n\n* Add cancellation support to GroupingSearch\n\n* Add cancellation support to DrillSideways\n\n* Add cancellation support to FacetsCollector\n\n* Add cancellation support to JoinUtil\n\n* Add cancellation support to MemoryIndex\n\n* Add cancellation support to Suggest\n\n* PR feedback\n\n* PR feedback\n\n* Add cancellation token tests for higher-level search APIs\n\nVerify that CancellationToken is properly plumbed through to\nIndexSearcher.Search for MemoryIndex, DrillSideways, FacetsCollector,\nGroupingSearch, JoinUtil, SpellChecker, and AnalyzingInfixSuggester.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Fix DatasetSplitter cancellation exception handling\n\n- Add catch for OperationCanceledException before the generic catch\n  so cancellation isn\u0027t wrapped in IOException\n- Replace ThrowIfCancellationRequested in finally with a conditional\n  check to avoid masking exceptions during unwinding\n- Fix param doc to say \"split operation\" instead of \"search\"\n\nCo-Authored-By: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "57e0b8c45b8c812b3164f8d6a7eb0347a343cae4",
      "tree": "07a6dcf6a5b11c875d28498d42b465d8a1d87ecd",
      "parents": [
        "e4d5f41327fe6f140b6822137893c623bf2e54d3"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Thu Apr 16 20:21:37 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 20:21:37 2026 -0600"
      },
      "message": "BREAKING: Add cancellation support to IndexSearcher, #922 (#1080)\n\n* Add CancellationToken parameter to IndexSearcher methods, #922\n\n* Pass cancellation token and throw if requested, #922\n\n* Pass cancellation token further down in multithreaded code, #922\n\n* PR feedback\n\n* Apply suggestions from code review\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Add unit tests for cancellation support\n\n---------\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "e4d5f41327fe6f140b6822137893c623bf2e54d3",
      "tree": "cfac6bfa741f0fa40e82747039d7063e6108d15d",
      "parents": [
        "217c1e45f81b9df9cf3a4eab4713553b87bfeca7"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Thu Apr 16 08:58:40 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 08:58:40 2026 -0600"
      },
      "message": "Fix Stream.ReadExactly CA2022 warning; optimize for stackalloc/arraypool (#1254)\n\n* Fix Stream.ReadExactly CA2022 warning; optimize for stackalloc/arraypool\n\n* PR feedback\n\n* Fix compilation issue with test on .NET Framework\n\n* Apply suggestions from code review\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "217c1e45f81b9df9cf3a4eab4713553b87bfeca7",
      "tree": "00187c84eff94ad3c13b08a207b3658eac25fa68",
      "parents": [
        "3175ba45804c60fb1395fc3587bc2351d34030e8"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Thu Apr 16 01:09:26 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 09:09:26 2026 -0600"
      },
      "message": "Add 4 more pre-commit hooks; fix JSON file (#1257)\n\nThe `check-json` hook found a JSON file with an unneeded trailing comma on one line"
    },
    {
      "commit": "3175ba45804c60fb1395fc3587bc2351d34030e8",
      "tree": "b4fabe3bf3e41e84e3b4dc3931493d4f35ff7c29",
      "parents": [
        "6ff8800f5a74fdad11a68c0133e444f38400e95d"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Thu Apr 16 00:06:04 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 08:06:04 2026 -0600"
      },
      "message": "pre-commit trailing whitespace check more file types (#1255)\n\nOnly `.config` files were auto cleaned up"
    },
    {
      "commit": "6ff8800f5a74fdad11a68c0133e444f38400e95d",
      "tree": "e9abdc7d24c30ac9925a844812f11e0c9b2ed23d",
      "parents": [
        "22247b0c6b19e737d507aef81a2012b55d5c11aa"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Tue Apr 14 06:34:51 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 06:34:51 2026 -0600"
      },
      "message": "BREAKING: Remove covariance and LINQ use from Grouping, #1059 (#1066)\n\n* Break GroupingSearch into subclasses, #1059\n\nThis still needs XML doc comments, but this breaks the GroupingSearch\n\"god class\" into three subclasses that implement a common abstract\nclass. This should allow us to not need covariant interfaces for the\nreturn types.\n\nIn order to randomly switch between these classes with incompatible\ngeneric type arguments, the test shows how you can use a delegate to\nwork around this limitation.\n\n* Fix failing tests\n\n* Fix more failing unit tests; refactor out common AbstractFieldOrFunctionGroupingSearch\u003cT\u003e class\n\n* Remove IAbstractAllGroupsCollector\u003cT\u003e interface\n\n* Make AbstractAllGroupsCollector.Groups be ICollection, remove some LINQ use\n\n* Remove ITopGroups and IAbstractSecondPassGroupingCollector interfaces\n\n* Remove IGroupDocs interface\n\n* Remove IAbstractFirstPassGroupingCollector and ISearchGroup interfaces, one failing test\n\n* Remove IAbstractDistinctValuesCollector interface\n\n* Remove IGroupCount interface\n\n* Remove IGroupCountCollector interface\n\n* Remove IEnumerable/LINQ use in Grouping\n\n* Remove some O(n) extra list creation\n\n* Remove some more IEnumerable spots\n\n* Refactor to remove wrapping types and add back non-generic interfaces for collectors\n\n* Return null if TopGroups returns null\n\n* Add some XML doc comments\n\n* Add back removed XML comments during refactoring\n\n* Add XML doc comments to GroupingSearch\n\n* Add IAbstractGroupingSearch interface for symmetry with the other types\n\n* Add .idea/ folder to .gitignore\n\n* Remove unnecessary cast\n\n* Remove unnecessary non-generic overload of GetTopGroups\n\n* Use CastingEnumeratorAdapter in CastingListAdapter; optimize as readonly struct to reduce allocations\n\n* Remove UTF-8 BOMs\n\n* Fix fluent API break due to base class; update docs and add tests\n\n* Make ByDocBlock/DocBlockGroupingSearch non-generic to match Java\u0027s wildcard generic erasure for null\n\n* Exclude Lucene3x codec from random grouping tests\n\n* Remove setter for ISearchGroup.GroupValue\n\n* Cast each element of CastingSetAdapter instead of casting the whole enumerable\n\n* Remove BOM\n\n* Rename abstract classes and refactor into a template method pattern"
    },
    {
      "commit": "22247b0c6b19e737d507aef81a2012b55d5c11aa",
      "tree": "994b2a1168d9b1a26313459c830839003a469c43",
      "parents": [
        "fef0925b58597f41c7ffba37189814781abfaed8"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Apr 13 12:21:31 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 12:21:31 2026 -0600"
      },
      "message": "Add fix-byte-order-marker pre-commit hook (#1252)"
    },
    {
      "commit": "fef0925b58597f41c7ffba37189814781abfaed8",
      "tree": "142b7716d7cf521eb731678bb02aea51ba994c7f",
      "parents": [
        "a9edfff8602c56eee1442c73b8cdd8f8bc6e756e"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Tue Apr 14 04:14:12 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 12:14:12 2026 -0600"
      },
      "message": "pre-commit auto remove trailing whitespace from YAML files (#1247)"
    },
    {
      "commit": "a9edfff8602c56eee1442c73b8cdd8f8bc6e756e",
      "tree": "0c3ab0a4c455ba7572e742153dcb5a42d2da59a0",
      "parents": [
        "6135a3c862194a82ed6512e4ff357b605d70f41c"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Tue Apr 14 04:13:35 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 12:13:35 2026 -0600"
      },
      "message": "pre-commit: upgrade codespell; fix spelling; exclude directories (#1248)\n\nAfter running `pre-commit autoupdate` the codespell hook was updated to the latest version\n\nThe new version of codespell found more spelling mistakes.\n\nWhich lead me to exclude some \"language\" files from the English spelling checking\n\nOne typo was fixed\n\nhttps://pre-commit.com/#pre-commit-autoupdate"
    },
    {
      "commit": "6135a3c862194a82ed6512e4ff357b605d70f41c",
      "tree": "10cb61b936cd575565c609d81132e565cdaed6f3",
      "parents": [
        "5e4b25f99cc36f9e31141e4dbc9429b884988a1c"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Tue Apr 14 04:10:12 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 12:10:12 2026 -0600"
      },
      "message": "Add pre-commit hook oxipng for lossless image compression (#1251)"
    },
    {
      "commit": "5e4b25f99cc36f9e31141e4dbc9429b884988a1c",
      "tree": "d6b8d7ede1938a632ec7141373c0945771460040",
      "parents": [
        "e21c9b85da674a785b8ef1207ccf1bd1409f25e8"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Tue Apr 14 04:06:52 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 12:06:52 2026 -0600"
      },
      "message": "Add 6 more pre-commit hooks (#1250)\n\nhttps://github.com/pre-commit/pre-commit-hooks\n\nAll hooks passed local testing with no changes needed\n\nStandard hooks from the official pre-commit organization"
    },
    {
      "commit": "e21c9b85da674a785b8ef1207ccf1bd1409f25e8",
      "tree": "a74d1c409e0693198ba070c5142ff12484b45527",
      "parents": [
        "f623208d46946c3474568b6f00539ec209130171"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Apr 10 21:31:32 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 21:31:32 2026 -0600"
      },
      "message": "Upgrade Antlr4BuildTasks to 12.14.0 (#1245)"
    },
    {
      "commit": "f623208d46946c3474568b6f00539ec209130171",
      "tree": "d433a2d0030d16c0a496bec8410e88483c529263",
      "parents": [
        "3b92fc72d31225cd6bed8946eb1341e9ccd145fb"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Apr 10 21:14:52 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 21:14:52 2026 -0600"
      },
      "message": "BREAKING: More Span/stackalloc optimizations (#1156)\n\n* Use Span in ChainedFilter\n\n* Use Span in TernaryTree\n\n* Use Span in HyphenationTree\n\n* Remove allocation in PatternParser\n\n* Use Span in PayloadHelper Decode methods\n\n* Remove allocation in GetCCByGB2312Id\n\n* Use Span in Egothor.Stemmer.Diff\n\n* PR review changes"
    },
    {
      "commit": "3b92fc72d31225cd6bed8946eb1341e9ccd145fb",
      "tree": "d14f33cb7b986c0f5855ad93a0f6a2f658207a59",
      "parents": [
        "d00d5cbe2d9e85ad025cf20e3d122439c8c2c635"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Sat Apr 11 12:42:48 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 20:42:48 2026 -0600"
      },
      "message": "[CI] Add pre-commit hook to auto remove trailing whitespace (#1244)\n\nhttps://github.com/pre-commit/pre-commit-hooks?tab\u003dreadme-ov-file#trailing-whitespace\n\nOfficial pre-commit hook that auto removes trailing whitespace\n\nApplied to both Markdown and XML files"
    },
    {
      "commit": "d00d5cbe2d9e85ad025cf20e3d122439c8c2c635",
      "tree": "7cf16d893941661016c12bf121406aba7173d193",
      "parents": [
        "b6a32433e459af298daffe4708ca1e3159b74abf"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Sat Apr 11 12:32:21 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 20:32:21 2026 -0600"
      },
      "message": "Clean up pre-commit workflow (#1243)\n\nGeneral updates to secure the workflow and use current versions"
    },
    {
      "commit": "b6a32433e459af298daffe4708ca1e3159b74abf",
      "tree": "74bbd321f2f5f29cad8c11d817c431fce08ca171",
      "parents": [
        "a4037062a3b0a53f065a75ff0db5edafad118753"
      ],
      "author": {
        "name": "Zoltán Katona",
        "email": "92223927+zka26@users.noreply.github.com",
        "time": "Fri Apr 10 06:09:04 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 22:09:04 2026 -0600"
      },
      "message": "Fix/apidocs breadcrumb toc asf (#1232)\n\n* site: add links to configuration file\n\nIntroduces _navbarLinks and _asfLinks configuration in docfx.json including the correct event page link. Adds a new navbar-links partial to render these links and updates the main navbar partial to include it.\n\n* Fix breadcrumb styles in main.css\n\nNow the Api / Libraries works as intended, not splitting into two lines and the slash is restored.\n\n* apidocs: add links to configuration file\n\nIntroduces _navbarLinks and _asfLinks configuration in docfx.global.json including the correct event page link. Adds a new navbar-links partial to render these links and updates the main navbar partial to include it.\n\n* apidocs: move links to separate .json\n\n- Added docfx.links.json to organize navigation and ASF links separately. It now includes the links.\n- Modified docfx.site.json to include docfx.links.json in globalMetadataFiles.\n\n* Update doc links to use latest Lucene.Net version\n\nAdded docfx.links.json to metadata and updated navbar links to point to the latest CI documentation. Enhanced docs.ps1 to automatically update both docfx.links.json with the current LuceneNetVersion during the build process, ensuring navigation and API links always reference the correct version.\n\n* Fix build error by storing navbar links differently and links not appearing inside the apidocs.\n\n- Refactor navbar links to use individual properties and moved to the subsite.json.\n- docfx.links.json and navbar-links.tmpl.partial removed.\n- docs.ps1 restored as it was originally.\n- Removed the link json file reference from the metadata docfx.core.json.\n\n* Update CLI doc link with auto-update and minor changes.\n\n- Change _navCliHref to absolute URL for published CLI docs\n- Removed the links jsons globalMetadataFiles leftover and the subsite one was added instead.\n- Auto-update CLI doc version in docs.ps1\n- Improve navbar template indentation for readability and removed a debug message from it.\n\n* Refactor navbar config to use individual metadata to be uniform with the apidocs\n\n- Replaced array-based navigation link config in docfx.json with individual metadata fields for each link.\n- Removed the navbar-links.tmpl.partial template as it become no longer necessary.\n- Updated navbar.tmpl.partial to render links directly from the new fields.\n\n* PR feedback: whitespace fixes; a11y improvement for ASF link; use defined titles; shorten header link text so it all fits\n\n---------\n\nCo-authored-by: Paul Irwin \u003cpaulirwin@gmail.com\u003e"
    },
    {
      "commit": "a4037062a3b0a53f065a75ff0db5edafad118753",
      "tree": "0cccaf25c0608c1e90a410f76ee0eb7dfeb4ee6b",
      "parents": [
        "cbb3ad9da2d647117b5180604415b068e9c70e01"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Fri Apr 10 13:24:06 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 21:24:06 2026 -0600"
      },
      "message": "Add pre-commit with codespell hook (#1216)\n\n* Add pre-commit with codespell hook\n\n* Add exclude for Lucene.Net.Tests"
    },
    {
      "commit": "cbb3ad9da2d647117b5180604415b068e9c70e01",
      "tree": "0da74e65c50ea5959907dfc30e75f961db321155",
      "parents": [
        "cfc874fc0dec9ed70012b7f434a44b6092bf9aa9"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Thu Apr 09 06:49:26 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 06:49:26 2026 -0600"
      },
      "message": "Fix flaky test in TestDirectoryReaderReopen, #1233 (#1234)"
    },
    {
      "commit": "cfc874fc0dec9ed70012b7f434a44b6092bf9aa9",
      "tree": "076efb1feda5111010fc40958ca6e1815b51d438",
      "parents": [
        "1c377e88c9c220e202d1218dd6c4a27f86f87bcc"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Thu Apr 09 22:42:32 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 06:42:32 2026 -0600"
      },
      "message": "Trailing whitespace cleanup for XML files (#1236)\n\nGeneral find and replace clean up"
    },
    {
      "commit": "1c377e88c9c220e202d1218dd6c4a27f86f87bcc",
      "tree": "e423340565a29069175c4753eb7c97606afadc28",
      "parents": [
        "fedfd7cc03c8ad2e16ddd03ca763393acd483833"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Thu Apr 09 22:41:32 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 06:41:32 2026 -0600"
      },
      "message": "src(cs): fix spelling (#1237)\n\ndoesnt -\u003e doesn\u0027t"
    },
    {
      "commit": "fedfd7cc03c8ad2e16ddd03ca763393acd483833",
      "tree": "e4f2b54de7a43f922d0484698a9d04f05df10c58",
      "parents": [
        "3f085e71b7ee5da77dbc52530a220e38a936b8ff"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Thu Apr 09 22:40:24 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 06:40:24 2026 -0600"
      },
      "message": "Upgrade actions/upload-artifact to v6 (#1239)\n\nUpgraded from both v4 and v5 to v6"
    },
    {
      "commit": "3f085e71b7ee5da77dbc52530a220e38a936b8ff",
      "tree": "273b92f6ab80a6e873560022b360ccf7742c56c9",
      "parents": [
        "d70675c9d560cf8ba5953bc7e6d2bdf2c84971dc"
      ],
      "author": {
        "name": "Alin Velea",
        "email": "50887531+alinvelea27@users.noreply.github.com",
        "time": "Thu Apr 09 15:36:57 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 06:36:57 2026 -0600"
      },
      "message": "fix: move unused limited license file to tests (#1241)"
    },
    {
      "commit": "d70675c9d560cf8ba5953bc7e6d2bdf2c84971dc",
      "tree": "6d38dc4e7cbb28d88f96a8618c8945053fd25f66",
      "parents": [
        "657511fbf314e340e5b782cf389b017c12796bf6"
      ],
      "author": {
        "name": "Shannon Deminick",
        "email": "sdeminick@gmail.com",
        "time": "Thu Jan 22 20:26:37 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 22 20:26:37 2026 -0700"
      },
      "message": "Bugfix: Lucene.Net.Replicator.SessionToken ToString() overload doesn\u0027t output values correctly (#1235)\n\n* Initial plan\n\n* Improve SessionToken.ToString() and guard string formatting in ReplicationClient\n\nCo-authored-by: Shazwazza \u003c1742685+Shazwazza@users.noreply.github.com\u003e\n\n* Remove duplicate log statement\n\nCo-authored-by: Shazwazza \u003c1742685+Shazwazza@users.noreply.github.com\u003e\n\n* Fix MockRevision.Open to throw NotImplementedException for better test safety\n\nCo-authored-by: Shazwazza \u003c1742685+Shazwazza@users.noreply.github.com\u003e\n\n* Simplify SessionToken.ToString() using Collections.ToString\n\nCo-authored-by: Shazwazza \u003c1742685+Shazwazza@users.noreply.github.com\u003e\n\n* Add LuceneNetSpecific attribute to Test method\n\n* Add Lucene.Net.Attributes namespace to SessionTokenTest\n\n* Remove extra blank line in SessionTokenTest\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] \u003c198982749+Copilot@users.noreply.github.com\u003e\nCo-authored-by: Shazwazza \u003c1742685+Shazwazza@users.noreply.github.com\u003e"
    },
    {
      "commit": "657511fbf314e340e5b782cf389b017c12796bf6",
      "tree": "e5158dd825f3024745b1d6b5b604cfc151fd57e3",
      "parents": [
        "9a9de82e396aa4899f2aebdb9faa9e20a8525829"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Jan 12 16:37:35 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 12 16:37:35 2026 -0700"
      },
      "message": "Add .NET 10 target, #1219 (#1222)\n\n* Remove netstandard2.1 target and test support via net6.0, #1040\n\n* Add net10.0 target\n\n* Fix merge issue\n\n* Regenerate github workflows; test OpenNLP on net10\n\n* More C# 14 field keyword changes\n\n* .NET 10 build support in Azure DevOps\n\n* Remove net9.0 tests for lucene-cli\n\n* Add back net9.0\n\n* Remove net9.0 from lucene-cli\n\n* Conditionally set IsPublishable\n\n* Regenerate github workflows\n\n* Remove net9.0 tests\n\n* PR feedback\n\n* Add .NET 9 tests to ADO\n\n* Upgrade Antlr4BuildTasks to 12.11.0\n\n* Fix net9.0 test build\n\n* Revert SetTargetFramework change\n\n* Add net9.0 tests to CLI and OpenNLP test projects\n\n* Directory.Build.props: Added section to compare Visual Studio versions (including prerelease versions) to use to drive IsLegacyVisualStudioVersion property across the solution\n\n* SWEEP: Added legacy support for Visual Studio 2022, excluding net10.0, netstandard2.0, and .NET Framework from compilation. net10.0 isn\u0027t supported at all. The others cause invalid warnings in VS 2022 and excluding them from compile is the simplest way around that.\n\n* publish-test-results-for-test-projects.yml: Upload test results for net10.0 for Lucene.Net.Tests.Cli and Lucene.Net.Tests.Analysis.OpenNLP\n\n* publish-test-results-for-test-projects.yml: Upload test results for net9.0 for Lucene.Net.Tests.Cli and Lucene.Net.Tests.Analysis.OpenNLP\n\n* .build/runbuild.ps1 + github/workflows/Generate-TestWorkflows.ps1 + Directory.Build.targets: Added a key identifier SupportedTargetFrameworks to the MSBuild query so it can be parsed using a regex rather than relying on the position in the output (which changed in .NET 9). Updated all callers to use a Get-SupportedTargetFramworks() function to encapsulate the logic of retrieving the target frameworks and parsing out the string we are interested in with an error message if matching fails.\n\n* .github/workflows/Generate-TestWorkflows.ps1: Generate workflow files with no BOM\n\n* Regenerated GitHub test workflows\n\n* Fix comment\n\n---------\n\nCo-authored-by: Shad Storhaug \u003cshad@shadstorhaug.com\u003e"
    },
    {
      "commit": "9a9de82e396aa4899f2aebdb9faa9e20a8525829",
      "tree": "5f0ab57ea8d482924e86ab0170c54b5313ef2ac9",
      "parents": [
        "aa626068dfc74938869fc6fa5e296a086d1ced09"
      ],
      "author": {
        "name": "Saurav Kumar",
        "email": "144691979+sauravk58@users.noreply.github.com",
        "time": "Sat Jan 10 20:12:08 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jan 10 21:42:08 2026 +0700"
      },
      "message": "Fix #1175: Change IndexInputStream to throw NotSupportedException for writable members (#1231)\n\nChanged Flush(), SetLength(), and Write() methods to throw NotSupportedException instead of IllegalStateException/InvalidCastException to be consistent with .NET conventions for read-only streams.\n\nAdded unit tests to verify the correct exception types are thrown.\n\nCo-authored-by: PR Writer \u003cprwriter@reveloexperts.com\u003e"
    },
    {
      "commit": "aa626068dfc74938869fc6fa5e296a086d1ced09",
      "tree": "33e422ba7099fa5677b561e8c6c0a228c49dff29",
      "parents": [
        "4fe810589e67284ac8f28f0e1b89b5822a4ebdad"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Sun Jan 11 00:34:48 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jan 10 21:34:48 2026 +0700"
      },
      "message": "Bump actions/cache to v5 (#1230)\n\nhttps://github.com/actions/cache/releases/tag/v5.0.0"
    },
    {
      "commit": "4fe810589e67284ac8f28f0e1b89b5822a4ebdad",
      "tree": "3ae2ae8136b57a622e8977788a474f33e7e336ee",
      "parents": [
        "6d0c3bb30e734a42d3093f5fa746c3cf29e92311"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Sun Jan 11 00:31:33 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jan 10 21:31:33 2026 +0700"
      },
      "message": "docs(cs): fix typos; occured -\u003e occurred (#1229)\n\n"
    },
    {
      "commit": "6d0c3bb30e734a42d3093f5fa746c3cf29e92311",
      "tree": "a367e90c0539b4fecfb133f75c74e9d492f9e927",
      "parents": [
        "7e75d38ffd75c7413de1741b55ae8345db311837"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Fri Dec 05 13:59:21 2025 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 04 20:59:21 2025 -0700"
      },
      "message": "Bump `actions/checkout` to `v6` (#1227)\n\nhttps://github.com/actions/checkout/releases/tag/v6.0.0"
    },
    {
      "commit": "7e75d38ffd75c7413de1741b55ae8345db311837",
      "tree": "a25c63814c5c24500ea1ea438d56393836709c5b",
      "parents": [
        "36f587de8481a39a2695305c06728df2a3dedccc"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Fri Dec 05 13:56:04 2025 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 04 20:56:04 2025 -0700"
      },
      "message": "Fix typos: `expectdValue` -\u003e `expectedValue` (#1225)\n\n"
    },
    {
      "commit": "36f587de8481a39a2695305c06728df2a3dedccc",
      "tree": "3f7302c1516f381abcacbd20c7fbac9c68ffe010",
      "parents": [
        "c711b308052e1affbb9f7308fa904fcc58f9c3d6"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Sat Nov 22 11:09:49 2025 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 21 21:09:49 2025 -0700"
      },
      "message": "Lucene.Net.Store (DataInput + DataOutput): Use stack or array pool for temporary byte buffers (#1207)\n\n* PERFORMANCE: Lucene.Net.Store.DataInput::ReadString(): Use stack or array pool for buffer reuse\n\n* Lucene.Net.Util.UnicodeUtil: Added overload of TryUTF16toUTF8 that accepts spans for both input and output. Also added a GetMaxByteCount() method to determine the amount of buffer to allocate.\n\n* PERFORMANCE: Lucene.Net.Store.DataOutput::WriteString(): Added WriteChars() method that accepts a span and moved allocations to the stack or array pool for buffer reuse.\n\n* Add unit tests\n\n---------\n\nCo-authored-by: Paul Irwin \u003cpaulirwin@gmail.com\u003e"
    },
    {
      "commit": "c711b308052e1affbb9f7308fa904fcc58f9c3d6",
      "tree": "4a4d41fbb0724fb751c451c11e0a7c594c01eb0c",
      "parents": [
        "3681fe169f0ff19bfde2b826adad814a3fd8149f"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Nov 21 16:08:23 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 21 16:08:23 2025 -0700"
      },
      "message": "Editor config checker cleanup (#1221)\n\n* Remove UTF-8 BOMs\n\n* Unset charset from exclusions"
    },
    {
      "commit": "3681fe169f0ff19bfde2b826adad814a3fd8149f",
      "tree": "d7e18ed8d2111d19774fe34f01d5260f954f79d9",
      "parents": [
        "b34c8f657fd8c5126189bf1518a56fec6e3d6f70"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Nov 21 14:58:06 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 21 14:58:06 2025 -0700"
      },
      "message": "SWEEP: Avoid unnecessary FileInfo/DirectoryInfo allocations, #832 (#1060)\n\n* Avoid unnecessary FileInfo/DirectoryInfo allocations, #832\n\n* Remove extra semicolon in WriteLineDocTask.cs\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Enable NRT on StopAnalyzer and StopwordAnalyzerBase\n\n* Add comments about parameter normalization\n\n* Revert FileInfo change in CompoundFileExtractor (while leaving null check)\n\n* Add string-based constructor tests for FilesystemResourceLoader\n\nAdded comprehensive tests for the new string-based constructors in FilesystemResourceLoader:\n- TestBaseDirWithString: Tests string path instead of DirectoryInfo\n- TestDelegationWithString: Tests delegation with string base directory\n- TestRelativePathsWithString: Tests various relative path scenarios\n- TestRelativePathsWithStringAndDelegation: Tests relative paths with delegation fallback\n\nThese tests ensure the string-based constructors work correctly alongside the existing DirectoryInfo-based ones.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n* Add comprehensive tests for string-based overloads (Issue #832)\n\nAdded tests for the new string-based constructors and methods that avoid unnecessary FileInfo/DirectoryInfo allocations:\n\nStopAnalyzer Tests:\n- TestStopAnalyzerWithStringFileName: Tests string-based constructor with absolute paths\n- TestStopAnalyzerWithRelativePath: Tests string-based constructor with relative paths\n- TestLoadStopwordSetWithStringPath: Tests StopwordAnalyzerBase.LoadStopwordSet(string, LuceneVersion)\n\nFilesystemResourceLoader Tests:\n- TestNestedRelativePathsWithString: Tests nested relative paths with string-based constructors\n\nFileUtils Tests:\n- TestFullyDeleteWithStringPath: Tests FullyDelete(string) with absolute paths\n- TestFullyDeleteNonExistentStringPath: Tests behavior with non-existent paths\n- TestFullyDeleteWithDirectoryInfo: Tests original DirectoryInfo overload\n- TestFullyDeleteEmptyDirectoryWithStringPath: Tests with empty directories\n- TestFullyDeleteWithRelativeStringPath: Tests with relative paths\n\nAll tests ensure the new string-based overloads work correctly with both absolute and relative paths.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n* Add SystemEnvironment lock for thread-safe Environment.CurrentDirectory changes\n\nCreated SystemEnvironment helper class in TestFramework to prevent race conditions when tests\nthat modify Environment.CurrentDirectory run in parallel. This addresses potential issues\nidentified during the string-based overload additions (Issue #832).\n\nChanges:\n- Added SystemEnvironment.cs with thread-safe lock mechanism using SemaphoreSlim\n- Provides WithCurrentDirectory methods that automatically restore the original directory\n- Updated all tests that change Environment.CurrentDirectory to use SystemEnvironment:\n  * TestStopAnalyzer.TestStopAnalyzerWithRelativePath\n  * TestFilesystemResourceLoader (multiple methods)\n  * TestFileUtils.TestFullyDeleteWithRelativeStringPath\n  * TestStreamUtils (input/output stream tests)\n  * TestIOUtils.TestGetDecodingReaderWithRelativePath\n  * TestWriteEnwikiLineDocTask.TestCategoriesLineFileWithRelativePath\n\nThis ensures tests can safely run in parallel without interfering with each other\u0027s\ncurrent directory state.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n* Fix whitespace: Add final newlines to source files\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n* Fix Windows test failures: Use platform-aware path separators\n\n- Use Path.Combine in test assertions to ensure correct path separators\n- Remove Unix-style absolute paths starting with slash\n- Add platform-specific absolute path tests for Windows and Unix\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n* Fix path separator issues: Use Path.Combine for platform compatibility\n\n- Replace hardcoded path separators with Path.Combine\n- Ensures correct separators on both Windows and Unix\n- Fixes test failures on Windows\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "b34c8f657fd8c5126189bf1518a56fec6e3d6f70",
      "tree": "74b9868cd9602896d9f242b307a898d705ba214b",
      "parents": [
        "7380482b0ef28bd04bd56d60438f99af246921b0"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Fri Nov 21 01:49:14 2025 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 20 22:49:14 2025 +0700"
      },
      "message": "Fixed typos in documentation and comments (#1220)\n\n* src: fix typos\n\nSpelling clean up in cs files\n\n* SWEEP: Changed OrderedDictioary \u003e  OrderedDictionary in comments to fix spelling\n\n---------\n\nCo-authored-by: Shad Storhaug \u003cshad@shadstorhaug.com\u003e"
    },
    {
      "commit": "7380482b0ef28bd04bd56d60438f99af246921b0",
      "tree": "bed76a113b149f3adccf85a4516249cf114e48bd",
      "parents": [
        "d3b2af4028200affdaab6029963f43ab99abda97"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Nov 14 06:04:12 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 14 06:04:12 2025 -0700"
      },
      "message": "Drop .NET Standard 2.1 (netstandard2.1) target (#1193)\n\n"
    },
    {
      "commit": "d3b2af4028200affdaab6029963f43ab99abda97",
      "tree": "fec843890e649394b1507f1e0981adb346550afe",
      "parents": [
        "f7d63240b54b2bf3808f72f0ddd97e2360c33fc3"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Thu Nov 06 01:23:07 2025 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 05 22:23:07 2025 +0700"
      },
      "message": "Update to `actions/checkout@v5` (#1217)\n\n"
    },
    {
      "commit": "f7d63240b54b2bf3808f72f0ddd97e2360c33fc3",
      "tree": "24e9563dab8ea79677c6c76566e906123f7e247a",
      "parents": [
        "0e4545fe143055c3a509fc4325f892ef182f7da7"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Sun Nov 02 00:48:12 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Sun Nov 02 00:48:12 2025 +0700"
      },
      "message": "website: Updated copyright year to 2025\n"
    },
    {
      "commit": "0e4545fe143055c3a509fc4325f892ef182f7da7",
      "tree": "f455330c7df78be3fffe3814aafe6084a496d291",
      "parents": [
        "2564cd33388dd3548a58401b1256a226a3cfc564"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Fri Oct 31 21:37:20 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Fri Oct 31 21:37:20 2025 +0700"
      },
      "message": ".github/workflows/Lucene-Net-Documentation.yml: Added task to upload the built apidocs as a build artifact (useful if the PR automation isn\u0027t working)\n"
    },
    {
      "commit": "2564cd33388dd3548a58401b1256a226a3cfc564",
      "tree": "9e66457a12c3e22c57859d83407afeefd0959c4d",
      "parents": [
        "9e5b61baa8d7d657a17a88dc4a12be718685c83b"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Fri Oct 31 21:01:55 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Fri Oct 31 21:01:55 2025 +0700"
      },
      "message": ".github/workflows (Lucene-Net-Documentation.yml + Lucene-Net-Website.yml): Upgraded peter-evans/create-pull-request to 7.0.8\n"
    },
    {
      "commit": "9e5b61baa8d7d657a17a88dc4a12be718685c83b",
      "tree": "78835bbdac3491a2de36abec65dd5c49ecbc2bbc",
      "parents": [
        "29914836a365ba351a1f3fa998ad8a3754ebb7c9"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Fri Oct 31 20:08:22 2025 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 31 20:08:22 2025 +0700"
      },
      "message": "Docs \u0026 Website: Fixed build automation in CI (Fixes #1004) (#1214)\n\n* websites/apidocs/docs.ps1: Use Set-Location to ensure dotnet tool commands are run from the repo root in CI\n\n* websites/site/site.ps1: Use Set-Location to ensure dotnet tool commands are run in the repo root in CI\n\n* .github/workflows (Lucene-Net-Documentation.yml + Lucene.Net.Website.yml): Updated actions tasks to the latest version"
    },
    {
      "commit": "29914836a365ba351a1f3fa998ad8a3754ebb7c9",
      "tree": "68050e7266016841e71110cffad3798f99219999",
      "parents": [
        "f4cb5661efcda5c30e04334d4cfeb8095901017c"
      ],
      "author": {
        "name": "zkatona",
        "email": "92223927+zka26@users.noreply.github.com",
        "time": "Fri Oct 31 06:47:55 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 31 12:47:55 2025 +0700"
      },
      "message": "Added ASF-required links using drop-down menu and unified navigation (#1198)\n\n* Added ASF-required footer links in doxfx.json\n\n- Added Foundation, Events, License, Thanks/(Sponsors), Security, Sponsorship, Privacy (Policy) links\n- Inserted into _appFooter in doxfx.json\n- Left 2024 copyright year unchanged\n\n* Revert footer changes in doxfx.json\n\n- Removed ASF links from _appFooter and preparing to move ASF links into the top navigation menu using dropdown.\n\n* Updated toc.yml with ASF menu entries\n\n- Added ASF Foundation, Events, License, Thanks, Security,\nSponsorship, and Privacy Policy links to the apidocs/site menu.\nCSS and JS updates for the dropdown are still required.\n\n* Added ASF links to navigation and dropdown behavior to the site (not apidocs)\n\n- styles/custom.js included in head.tmpl.partial + head-content.tmpl.partial\n- main.css,custom.js:\n   - ASF dropdown style (hover on dekstop, tap on mobile) with caret.\n   - Attempts to make navbar stable across resize, zoom.\n(apidocs navbar will be addressed by the next commit)\n\n* Revert \"Added ASF links to navigation and dropdown behavior to the site (not apidocs)\"\n\nThis reverts commit 3d8b026200191f912cf9d63ae6294f4a96ee2b22.\n\n* Added ASF dropdown \u0026 unify nav; introduce main.js (Site)\n\n- Desktop: hover dropdown; Mobile: accordion in hamburger\n- Carets and unified drop-down menu\n- Sticky header on desktop; scroll-away on mobile/compact\n- GitHub Fork Me ribbon safety margin\n- Added main.js and registered in head-content.tmpl.partial and head.tmpl.partial\n\n* Added ASF dropdown \u0026 unified nav; compact search overlay (Apidocs)\n\n- Desktop: hover dropdown; Mobile: accordion in hamburger\n- Carets and submenu unification\n- Sticky header on desktop; scorll-away on mobile, compact\n- GitHub Fork Me safety spacing\n- Replaced inline search with \"Search...\" trigger at 1200-1399px\n- It does not include the auto-updated docfx.global.json and docfx.global.subsite.json and any other auto-updated files.\n\n* Fixed the wrong indent style (tabs) error marked by the EditorConfig Checker for the .js files.\n\n* Restore wrap and rework CSS and JS for Apidocs\n\n- Reintroduced wrap, when the the navbar no longer fits into one line\n- CSS: Tried to clean it up by consolidating rules and made some changes due to how it reacted the wrapped navbar\n- JS: Now using matchMedia to detect and get the correct CSS mode and made some changes due to how it reacted the wrapped navbar\n\n* Restore wrap and rework CSS and JS for Site\n\n- Reintroduced wrap, when the the navbar no longer fits into one line\n- CSS: Tried to clean it up by consolidating rules and made some changes due to how it reacted the wrapped navbar\n- JS: Now using matchMedia to detect and get the correct CSS mode and made some changes due to how it reacted the wrapped navbar"
    },
    {
      "commit": "f4cb5661efcda5c30e04334d4cfeb8095901017c",
      "tree": "f13243a65bb5d418a00de3d795358bdc9dd232fe",
      "parents": [
        "5b487018599ae7ab064f628fbdc9f1f5df6dc6e4"
      ],
      "author": {
        "name": "Anastasiia Vynnychyk",
        "email": "118575732+AnastasiaJacson@users.noreply.github.com",
        "time": "Tue Oct 28 14:20:08 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 28 06:20:08 2025 -0600"
      },
      "message": "Change HttpClientBase.ExecutePost to match upstream better and drop Newtonsoft.Json dependency (#1212)\n\n* Change HttpClientBase.ExecutePost to match upstream better and drop Newtonsoft.Json dependency\n\n* Code cleanup of HttpClientBase and HttpReplicator, remove NewtonsoftJson dependency version\n\n---------\n\nCo-authored-by: Paul Irwin \u003cpaulirwin@gmail.com\u003e"
    },
    {
      "commit": "5b487018599ae7ab064f628fbdc9f1f5df6dc6e4",
      "tree": "0c9479768cf681d9f30ea7d399b2ed710e411d13",
      "parents": [
        "03af9924f5cd2e756ac7cef1ef74d1eaf09e3223"
      ],
      "author": {
        "name": "Afrar Malakooth",
        "email": "mmafrar@gmail.com",
        "time": "Fri Oct 10 22:32:00 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 10 21:32:00 2025 +0700"
      },
      "message": "fix: Self-host all external website dependencies (#1197)\n\n* fix: Self-host all external website dependencies\n\n* fix: Resolve CSP violations by self-hosting fonts\n\n* fix: Revert images and update fonts to refer lucenenet-site"
    },
    {
      "commit": "03af9924f5cd2e756ac7cef1ef74d1eaf09e3223",
      "tree": "34433b1cb304b4e04d583388bb9e24746c2efa45",
      "parents": [
        "0976c0ca70204246653e52b258830552c41421a9"
      ],
      "author": {
        "name": "Nehan Khan Pathan",
        "email": "pathannehan26@gmail.com",
        "time": "Wed Oct 08 14:37:18 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 08 14:37:18 2025 +0530"
      },
      "message": "feat: Optimize SmartCn Dictionaries and Add Dictionary Loading Tests (#1154)\n\n* feat: Optimize SmartCn dictionaries and add loading tests\n\n- Replaced ByteBuffer with BinaryReader for efficiency.\n- Used ReadOnlySpan\u003cchar\u003e in BigramDictionary.\n- Added tests for dictionary loading from embedded resources.\n- Embedded bigramDict.dct and coreDict.dct.\n\n* refactor: apply review suggestions for SmartCn dictionary classes\n\n* Fix casing for bigramdict.dct and coredict.dct to lowercase for case-sensitive OSes\n\n* Revert breaking changes and restore compatibility; update tests for Bigram and WordDictionary\n\n* Improve SmartCN tests: Replace file existence checks with asserts, refine maxlength usage\n\n* Optimize dictionary loading: skip unused handle with Stream.Seek\n\n* Fix: add final newline and remove trailing whitespace in multiple files\n\n* Update SmartCn dictionary tests and BigramDictionary loading\n\n* Update BigramDictionary ie Updated LoadFromFile to throw IOException\n\n* Lucene.Net.Analysis.Cn.Smart.Hhmm.TestBuildDictionary: Modified the test data with known frequency values to verify the custom data set is loaded.\n\n* Revert LoadFromFile length check to match upstream Lucene behavior\n\n---------\n\nCo-authored-by: Shad Storhaug \u003cshad@shadstorhaug.com\u003e"
    },
    {
      "commit": "0976c0ca70204246653e52b258830552c41421a9",
      "tree": "c34b77736f83b576954a5b316afe34eac867914e",
      "parents": [
        "2abc12029094478f55df6c10ed53193582d3e25c"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Mon Oct 06 19:20:56 2025 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 06 06:20:56 2025 -0600"
      },
      "message": "Lucene.Net.Search.Similarities.SimilarityBase::Log2(): Use the J2N.MathExtensions.Log2() method, which may be hardware optimized. (#1206)\n\n"
    },
    {
      "commit": "2abc12029094478f55df6c10ed53193582d3e25c",
      "tree": "4af231c1dc5c65563054ad6ea7e868f8f60e6402",
      "parents": [
        "ef4678c8c24a90cec60ab0c7ab48fbaf02304110"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Oct 06 04:51:45 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 06 17:51:45 2025 +0700"
      },
      "message": "Fix query parser failure with Unicode minus sign, #846 (#1205)\n\n* Fix query parser failure with Unicode minus sign, #846\n\n* Lucene.Net.QueryParsers.Flexible.Standard.TestNumericQueryParser::TestInclusiveNumericRange_UnicodeMinus(): Use CultureContext to ensure the temporary culture assigned to the current thread is reverted at the end of the test.\n\n---------\n\nCo-authored-by: Shad Storhaug \u003cshad@shadstorhaug.com\u003e"
    },
    {
      "commit": "ef4678c8c24a90cec60ab0c7ab48fbaf02304110",
      "tree": "9dcdf3de716b5b84c04bc34dade772d390b5e071",
      "parents": [
        "6ed20502f36935b43985543b32a5f3ca72d2ae02"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Sun Oct 05 21:50:01 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 05 21:50:01 2025 -0600"
      },
      "message": "Upgrade dev analyzers to 1.0.0-alpha.18; make WindowsFsyncSupport internal, #1100 (#1202)\n\n* Upgrade dev analyzers to 1.0.0-alpha.18; make WindowsFsyncSupport internal, #1100\n\n* Suppress build warnings for LuceneDev1005 in test projects, and LuceneDev1006 in all projects since we can\u0027t fix yet"
    },
    {
      "commit": "6ed20502f36935b43985543b32a5f3ca72d2ae02",
      "tree": "f50f5ee050e09d572f8852f77e8f17189529ced2",
      "parents": [
        "e9a0be2c9a1ff4b6a99369889ecb0dbd70e64927"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Sun Oct 05 20:14:29 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 05 20:14:29 2025 -0600"
      },
      "message": "Remove and gitignore the .idea folder (#1203)\n\n"
    },
    {
      "commit": "e9a0be2c9a1ff4b6a99369889ecb0dbd70e64927",
      "tree": "b9a5777593b8fae615d7df30713335d513c3f8ab",
      "parents": [
        "21a98823f529697f46cc5098057f2ed1f3fea9e6"
      ],
      "author": {
        "name": "Sanjeev Kumar",
        "email": "ksanjeev284@gmail.com",
        "time": "Sun Oct 05 01:53:44 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 04 14:23:44 2025 -0600"
      },
      "message": "Replace LinkedDictionary with OrderedDictionary (#1200)\n\nReplaced all usages of JCG.LinkedDictionary with JCG.OrderedDictionary across the codebase for consistency and to better match the semantics of LinkedHashMap in the JDK. Updated comments to clarify the change as Lucene.NET specific."
    },
    {
      "commit": "21a98823f529697f46cc5098057f2ed1f3fea9e6",
      "tree": "7a0bcfa1e3bebe2f21973e52e420331bc38701eb",
      "parents": [
        "0815db551ea45bef7f9d04a82399e133a685f44e"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Wed Oct 01 13:08:46 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 01 13:08:46 2025 -0600"
      },
      "message": "Optimize StemmerUtil for `ReadOnlySpan\u003cchar\u003e`/`Span\u003cchar\u003e`, #1140 (#1144)\n\n* Optimize StemmerUtil for ReadOnlySpan\u003cchar\u003e, #1140"
    },
    {
      "commit": "0815db551ea45bef7f9d04a82399e133a685f44e",
      "tree": "ce0f7c1f6d5400c725eff96a05b16914ea52341a",
      "parents": [
        "9db5fdef020d7c4190218eb237818d23cf36f462"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 12:44:43 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 13:13:47 2025 +0700"
      },
      "message": "Lucene.Net.Store.MockIndexOutputWrapper: Inverted condition on CheckDiskFull to use @in as the nullable object to determine whether the caller intended to use DataInput or ReadOnlySpan\u003cbyte\u003e\n"
    },
    {
      "commit": "9db5fdef020d7c4190218eb237818d23cf36f462",
      "tree": "23a37fd0cd60ba2088085121520226b6f006ccd7",
      "parents": [
        "3cf3bde92abc90e0764b9b2e6fcb88c433a15896"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 11:48:19 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 13:13:47 2025 +0700"
      },
      "message": "Lucene.Net.Tests.Support.IO.TestStreamExtensions::Read(Span\u003cbyte\u003e, long): Added test to confirm reading past the end returns 0\n"
    },
    {
      "commit": "3cf3bde92abc90e0764b9b2e6fcb88c433a15896",
      "tree": "6bc813f7a6740376335ecf9d06bc3432a84718f8",
      "parents": [
        "e629fddee0e0c973ff96e14d0c83c2bf82440eaf"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 11:31:18 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 13:13:47 2025 +0700"
      },
      "message": "Lucene.Net.Support.IO.StreamExtensions::Read(Span\u003cbyte\u003e, long): Moved position checks into \"seek\" block, since checking stream.Length will throw on a non-seekable stream and RandomAccess.Read() repeats the \u003c 0 check. Also added a missing null guard clause and updated the docs for Read(Span\u003cbyte\u003e) and Write(ReadOnlySpan\u003cbyte\u003e).\n"
    },
    {
      "commit": "e629fddee0e0c973ff96e14d0c83c2bf82440eaf",
      "tree": "35b04c2685c9bca303f1608cfb4ec56203ec975b",
      "parents": [
        "37da6175f18e306e09ea26817652f0e58b420843"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Sun Sep 28 22:43:35 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 13:13:47 2025 +0700"
      },
      "message": "Lucene.Net.Support.IO.StreamExtensions: Removed Read(ByteBuffer, long) overload, since it is no longer in use.\n"
    },
    {
      "commit": "37da6175f18e306e09ea26817652f0e58b420843",
      "tree": "038b6588f8c434bd63d1b5a8cfe7bfd6638ddeb4",
      "parents": [
        "eef93fb7bb1a87ae3a28307b57532944d3c6e385"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Sun Sep 28 22:48:45 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 13:13:47 2025 +0700"
      },
      "message": "BREAKING: Lucene.Net.Store.DataInput: Added abstract overload of ReadBytes(Span\u003cbyte\u003e) and made the ReadBytes(byte[], int, int) overload virtual.\n"
    },
    {
      "commit": "eef93fb7bb1a87ae3a28307b57532944d3c6e385",
      "tree": "7c72ff4825dd953790e0052e7482bc4c14544546",
      "parents": [
        "da04c6f456a3e7165e2693a1766fdd6257c4db89"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Sun Sep 28 23:15:42 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 13:13:47 2025 +0700"
      },
      "message": "BREAKING: Lucene.Net.Store.DataOutput: Added abstract overload of WriteBytes(ReadOnlySpan\u003cbyte\u003e) and made the WriteBytes(byte[], int, int) overload virtual.\n"
    },
    {
      "commit": "da04c6f456a3e7165e2693a1766fdd6257c4db89",
      "tree": "ceea48030c1f396968676ff085038666fd891607",
      "parents": [
        "189b4ea00a2452b5107bb368cf491d9a80719eff"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Sun Sep 28 22:13:53 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 13:13:47 2025 +0700"
      },
      "message": "Lucene.Net.Support.Arrays::Copy(): Added overloads to cover ReadOnlySpan\u003cT\u003e and Span\u003cT\u003e combinations with arrays so we don\u0027t have to change the syntax to differ from Lucene\n"
    },
    {
      "commit": "189b4ea00a2452b5107bb368cf491d9a80719eff",
      "tree": "d004285ff348913df52197e131ca22225cb4774a",
      "parents": [
        "f95d67fb402eaa8ccc75c2e2127a769f325e3a90"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Sun Sep 28 22:35:01 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 13:13:47 2025 +0700"
      },
      "message": "Lucene.Net.Support.IO.StreamExtensions: Added Read(Span\u003cbyte\u003e) and Read(Span\u003cbyte\u003e, long) overloads to patch missing APIs on .NET Framework and .NET Standard. The latter uses the BCL RandomAccess class to synchronize (.NET Core only), which is a better match to Lucene than maintaining our own lock object per stream.\n"
    },
    {
      "commit": "f95d67fb402eaa8ccc75c2e2127a769f325e3a90",
      "tree": "e75b64684a89b455267465a1b9c43ff61f7ce8a0",
      "parents": [
        "a25bc424d7a1a571c10e66b7491e17d79cbe2a0b"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Sun Sep 28 18:49:44 2025 +0700"
      },
      "committer": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 13:13:47 2025 +0700"
      },
      "message": "Lucene.Net.Support.IO.StreamExtensions: Added Write(this Stream, ReadOnlySpan\u003cbyte\u003e) overload to patch missing APIs on .NET Framework and .NET Standard.\n"
    },
    {
      "commit": "a25bc424d7a1a571c10e66b7491e17d79cbe2a0b",
      "tree": "da359abf62702bef7f53c2e18376164bca2a9cb6",
      "parents": [
        "49e778b823892350b9a20d9d0ac5af803f11b3a2"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Oct 01 11:11:46 2025 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 01 11:11:46 2025 +0700"
      },
      "message": "Directory.Build.targets: Removed FEATURE_UTF8_TOUTF16 since it is now supported on all target frameworks (#1196)\n\n"
    },
    {
      "commit": "49e778b823892350b9a20d9d0ac5af803f11b3a2",
      "tree": "6fd1b120ccff9d00a802a145f6ba353b7281c9ef",
      "parents": [
        "2067df79b8146134b57eeba7e871b98d62c3c214"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Tue Sep 30 02:10:39 2025 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 30 02:10:39 2025 +0700"
      },
      "message": "Added AsSpan() and AsMemory() methods to ICharTermAttribute, CharsRef, and BytesRef (#1192)\n\n* .build/dependencies.props: Added dependency on Microsoft.Bcl.Memory for Index/Range and Utf8 support on .NET Framework and .NET Standard 2.0. Bumped System.Memory to 4.6.3 (Required by Microsoft.Bcl.Memory).\n\n* Added Lucene.Net.MemoryExtensions class with support for AsSpan() and AsMemory() overloads for ICharTermAttribute.\n\n* Lucene.Net.Util.CharsRef: Added AsSpan(), AsMemory(), ctor, CopyChars(), and Append() methods to support System.Memory types.\n\n* Lucene.Net.Util.BytesRef: Added AsSpan(), AsMemory(), ctor, CopyChars(), and Append() methods to support System.Memory types.\n\n* Lucene.Net.Tests/Support/TestMemoryExtensions.cs: Added LuceneNetAttribute and links to the sources the file is based on."
    },
    {
      "commit": "2067df79b8146134b57eeba7e871b98d62c3c214",
      "tree": "4d9863025f4c4edd61138f13e9c0e169ed74d56a",
      "parents": [
        "fbd608ed40fe3f885df73bb63e842f83baae4df9"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Fri Sep 26 10:01:47 2025 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 26 10:01:47 2025 +0700"
      },
      "message": "Added Lucene.Net.CodeAnalysis.Dev package reference (#1190)\n\n* Directory.Build.targets: Added global reference to Lucene.Net.CodeAnalysis.Dev to enable development analyzers\n\n* SWEEP: Fixed LuceneDev1001 build warnings"
    },
    {
      "commit": "fbd608ed40fe3f885df73bb63e842f83baae4df9",
      "tree": "d81ace31b4ab6195ba89563bf2e34f3d784aa607",
      "parents": [
        "5314f3fa27a0720a5e7eaa2a10bf926453624787"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Thu Sep 25 21:54:51 2025 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 25 21:54:51 2025 +0700"
      },
      "message": ".build/dependencies.props: Bumped J2N to 2.2.0-alpha-0021 (#1189)\n\n"
    },
    {
      "commit": "5314f3fa27a0720a5e7eaa2a10bf926453624787",
      "tree": "8d8cf68ca3a084a791a72b1461f1e5a5bef7877e",
      "parents": [
        "972ac070b50173da736f9dcde6aced6d787401db"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Sep 22 19:57:39 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 22 19:57:39 2025 -0600"
      },
      "message": "Add unit tests for Collections, #1116 (#1124)\n\n* Add unit tests for Collections, #1116\n\n* Improve nullability use and add nullable value/reference type unit tests\n\n* Apply same fix as last commit to ReverseComparer\u003cT\u003e too"
    },
    {
      "commit": "972ac070b50173da736f9dcde6aced6d787401db",
      "tree": "bd7fd82036ec88ad9baf004a2ba51b94d01a2996",
      "parents": [
        "79e90ce5705a98d97de4d4b36a50edf2eaf0ec83"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Sep 22 19:57:22 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 22 19:57:22 2025 -0600"
      },
      "message": "Add Support unit tests for Arrays and remove a ToString overload, #1114 (#1121)\n\n* Some code cleanup in Arrays\n\n* WIP Arrays tests for Fill, #1114\n\n* WIP Arrays tests for Equals, #1114\n\n* Finish Arrays tests, remove ToString overload with IFormatProvider, #1114\n\n* PR feedback"
    },
    {
      "commit": "79e90ce5705a98d97de4d4b36a50edf2eaf0ec83",
      "tree": "56c0ae542a3855245f68f0256e2b28dea6951b09",
      "parents": [
        "963825866b2c745f09d5ce5868f64442bac08041"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Sep 22 19:56:52 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 22 19:56:52 2025 -0600"
      },
      "message": "BREAKING: Static field cleanup, #662, #679 (#1079)\n\n* Convert static readonly fields to const, #662\n\n* Fix csharpsquid:S2223 issues, #679\n\n* Revert change to TaskSequence and add comments\n\n* Change comment style on QueryParser\n\n* Fix comment on DefaultNamespaceTypeWrapper\n\n* Rename IndexFileDeleter.VerboseRefCounts\n\n* PR feedback: remove extra blank line"
    },
    {
      "commit": "963825866b2c745f09d5ce5868f64442bac08041",
      "tree": "6dd1817e5c6be904c62bd2922c1af13aa85239b7",
      "parents": [
        "82a32dfa4f00a07309e0d5b49ea1c5eb1c6c5537"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Sep 08 20:32:41 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 08 20:32:41 2025 -0600"
      },
      "message": "Cache NuGet Packages (GitHub Actions) (#1172)\n\n* feat: Added packages.lock.json\n\n* ci: Add cache step\n\n* Regenerate github workflows\n\n* Rebuild packages.lock.json files with latest dependencies\n\n* Exclude packages.lock.json from editorconfig checks\n\nThe packages.lock.json files are auto-generated by .NET and don\u0027t\ninclude a final newline, causing the editorconfig checker to fail.\nSince we can\u0027t control the format of these generated files, we\nexclude them from the checks.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n* Revert \"Rebuild packages.lock.json files with latest dependencies\"\n\nThis reverts commit a022a2742679990846af1d011b9f127420eba1f0.\n\n* Revert \"feat: Added packages.lock.json\"\n\nThis reverts commit 1f64653fa73212935e218d6d9be16aa62e3e27e7.\n\n* .github/workflows/Generate-TestWorkflows.ps1: Removed step to set DOTNET_CLI_TELEMETRY_OPTOUT and DOTNET_NOLOGO actively and added them to the job directly. This step was taking 5-6 seconds just to set some variables.\n\n* .github/workflows/Generate-TestWorflows.ps1: Removed cache step, but keep restore separate to determine how much time restore vs build takes\n\n* Regenerated test workflows\n\n* Directory.Build.props: Whitespace only commit to trigger build\n\n* .github/workflows/Generate-TestWorkflows.ps1: Added --no-cache --force to restore as a temporary step to bust the old caching to get the build running\n\n* Regenerated test workflows\n\n* .github/workflows/Generate-TestWorkflows.ps1: Added missing TestFrameworks\u003dtrue parameter on dotnet restore command. This is required to enable all target frameworks for tests.\n\n* Regenerated test workflows\n\n* .github/workflows/Generate-TestWorkflows.ps1: Added cache step with key based on all MSBuild files that manage package versions and references\n\n* Regenerated test workflows\n\n* .github/workflows/Generate-TestWorkflows.ps1: Set the NUGET_PACKAGES directory, since we use it for cache stability and the agent doesn\u0027t set it\n\n* Regenerated test workflows\n\n* Lucene.Net.Tests.AllProjects: Whitespace only change to test cache hit\n\n* Lucene.Net.Tests.AllProjects: Whitespace only change to test cache miss\n\n* Revert \"Lucene.Net.Tests.AllProjects: Whitespace only change to test cache miss\"\n\nThis reverts commit 6e02d0312ab4ae0f8155bfc46d5ae5bda0dfce75.\n\n* Revert \"Lucene.Net.Tests.AllProjects: Whitespace only change to test cache hit\"\n\nThis reverts commit c5250b9fd4cbe60b0be30c36debe902ec956ed63.\n\n* Revert \"Directory.Build.props: Whitespace only commit to trigger build\"\n\nThis reverts commit 60201c1e2be4a2733b38b31fef30d1bb4b878ff5.\n\n* .github/workflows/sonar.yml: Updated to use the same cache key as other workflows that require dotnet restore\n\n* .github/workflows/sonar.yml: Temporarily enable in PRs for testing purposes\n\n* Lucene.Net.Expressions: Added private dependency on Antlr4.CodeGenerator, which contains a .jar file that Antlr4BuildTasks depends on.\n\n* .github/workflows/sonar.yml: Added env.BUILD_FOR_ALL_TEST_TARGET_FRAMEWORKS to the cache key, restore, and build to ensure that all of the test target frameworks are included in the cache and scan\n\n* .github/workflows/sonar.yml: Bumped action versions - setup-dotnet@v5, setup-java@v5, checkout@v5, cache@v4. Also changed shell to pwsh rather than powershell, where specified.\n\n* .github/workflows/Generate-TestWorkflows.ps1: Added env.BUILD_FOR_ALL_TEST_TARGET_FRAMEWORKS to the cache key, restore, and build to ensure that all of the test target frameworks are inlcuded in the cache (or we get a separate cache)\n\n* .github/workflows/Generate-TestWorkflows.ps1: Bumped action versions - setup-dotnet@v5, checkout@v5\n\n* Regenerated test workflows\n\n* Revert \".github/workflows/sonar.yml: Temporarily enable in PRs for testing purposes\"\n\nThis reverts commit 3e77d683b9c7569999944baf6d71f874a2286dc0.\n\n* Lucene.Net.Expressions.csproj: Exclude all assets from Antlr4.CodeGenerator. We are only after the .jar file.\n\n* Lucene.Net.Expressions: Set the Antlr4ToolPath so Antlr4BuildTasks can find the jar file without including any assets from Antlr4.CodeGenerator.\n\n* Lucene.Net.Expressions.csproj: Fixed .editorconfig rule violation\n\n* .github/workflows/Generate-TestWorkflows.ps1: Added task to post test results to the GitHub Actions summary\n\n* Regenerated test workflows\n\n---------\n\nCo-authored-by: Nikolaj Brask-Nielsen \u003cnikolajgive@gmail.com\u003e\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Shad Storhaug \u003cshad@shadstorhaug.com\u003e"
    },
    {
      "commit": "82a32dfa4f00a07309e0d5b49ea1c5eb1c6c5537",
      "tree": "d2093d6cf39f0fd9cb5c50fc136989b36455d887",
      "parents": [
        "4f2b5f11647bfd4b3f1efe242ae09324c720002c"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Sep 08 10:42:35 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 08 10:42:35 2025 -0600"
      },
      "message": "Proposal: Enable GitHub Discussions and configure mailing lists (#1174)\n\n* Enable GitHub Discussions and configure mailing lists\n\n* Update documentation link"
    },
    {
      "commit": "4f2b5f11647bfd4b3f1efe242ae09324c720002c",
      "tree": "b660e043c1c090c7845b42697004e94497da175d",
      "parents": [
        "ab008d93919c6b4f4d84f75edef2d819765c1f7a"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Sat Sep 06 23:53:01 2025 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 06 20:53:01 2025 +0700"
      },
      "message": "README: fix typo `MacOS` -\u003e `macOS` (#1179)\n\n"
    },
    {
      "commit": "ab008d93919c6b4f4d84f75edef2d819765c1f7a",
      "tree": "9d2fe8f9aafc243f5acc112bd6cc787ed5fa081c",
      "parents": [
        "9b9cb2d9499c1c0bb4ffc41d8d7f574d39d92bf3"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Sat Sep 06 23:41:55 2025 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 06 20:41:55 2025 +0700"
      },
      "message": "pull_request_template.md: fix link to the `Contributor Guide` (#1178)\n\n* pull_request_template.md: fix link to the `Contributor Guide`\n\nUsed a relative link\n\n* Update .github/pull_request_template.md"
    },
    {
      "commit": "9b9cb2d9499c1c0bb4ffc41d8d7f574d39d92bf3",
      "tree": "67fa09a5fb43515dd88af32ec9da93bc031f5234",
      "parents": [
        "53f020be99b7fa5196666a471a38fe9f9a8dbdce"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Sat Sep 06 23:31:29 2025 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 06 20:31:29 2025 +0700"
      },
      "message": "Fix typos (#1177)\n\nverision -\u003e version"
    },
    {
      "commit": "53f020be99b7fa5196666a471a38fe9f9a8dbdce",
      "tree": "0e08822060c723194833714800d571d8583c1317",
      "parents": [
        "f38de47d8ddac674065f04034e44c2122dd89620"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Sep 05 14:43:48 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 05 14:43:48 2025 -0600"
      },
      "message": "Fix integer overflow in IndexInputStream.Read(), #1158 (#1173)\n\nFix integer overflow in IndexInputStream.Read(), #1158\n\nWhen input.Length - input.Position exceeds int.MaxValue, casting to int\ncauses overflow resulting in negative values. This fix uses long for the\nremaining calculation before safely casting to int via Math.Min.\n\nAdded unit test TestGitHubIssue1158_IndexInputStream_Read_IntegerOverflow\nto demonstrate and verify the fix.\n\n---------\n\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "f38de47d8ddac674065f04034e44c2122dd89620",
      "tree": "d215127700764f7674a6d1ae7be5047a3fa5647e",
      "parents": [
        "0a8d39c2d897792e60f28361d6a206231c16c629"
      ],
      "author": {
        "name": "Nehan Khan Pathan",
        "email": "pathannehan26@gmail.com",
        "time": "Tue Sep 02 18:35:48 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 02 07:05:48 2025 -0600"
      },
      "message": "Add async PerformAsync and FlushAsync methods with CancellationToken support (#1170)\n\n* Add async PerformAsync and FlushAsync methods with CancellationToken support\n\n* Refactor replication service and stream extensions for fully async I/O, updating PerformAsync, SessionToken, and ASP.NET Core response handling.\n\n* refactor: rename BigEndian methods and use ArrayPool for buffer allocations in StreamExtensions\n\n* feat: Add async read/write support in ReplicationServlet and corresponding J2N-based async tests in TestStreamExtensions\n\n* Add XML Summary For PerformAsync and remove dupilcate comment code\n\n* Lucene.Net.Tests.Replicator: Refactored to test both synchronous and asynchronous APIs as well as both Startup class and Middleware configurations (when both are supported).\n\n* Lucene.Net.Tests.Replicator: Added an HttpListener-based server so we don\u0027t have to rely on Microsoft.AspNetcore.TestHost prior to .NET Core. Bumped Microsoft.AspNetcore.TestHost package  to 9.0.8. Refactored tests to separate ASP.NET Core functionality from HttpListener functionality.\n\n* Lucene.Net.Tests.Replicator: Only reference Lucene.Net.Replicator.AspNetCore on .NET Core 8 or higher\n\n* Lucene.Net.Replicator.AspNetCore: Dropped support for all target framworks but net8.0.\n\n* Lucene.Net.Replicator.AspNetCore: Removed PackageReference to transitive dependency System.Text.Encodings.Web, which only existed to bump the package to one without known security vulnerabilities. Bumped Microsoft.AspNetCore.Http.Abstractions to 2.3.0.\n\n* Add IAsyncReplicationServer/IAsyncReplicationResponse, update ReplicationService, Middleware, and TestServer to support async replication with conditional sync/async DI.\n\n* Revert \"Add IAsyncReplicationServer/IAsyncReplicationResponse, update ReplicationService, Middleware, and TestServer to support async replication with conditional sync/async DI.\"\n\nThis reverts commit 349621f595a0fe2d396dc537ae1b6c018e301c13.\n\n* Revert async interfaces, unify IReplicationService with Perform/PerformAsync, update ReplicationServlet, Middleware, and TestServer to use single interface\n\n---------\n\nCo-authored-by: Shad Storhaug \u003cshad@shadstorhaug.com\u003e"
    },
    {
      "commit": "0a8d39c2d897792e60f28361d6a206231c16c629",
      "tree": "957bf69a2345fd114e0a9732dac30261234ded08",
      "parents": [
        "0521bba0a32902b5c145c589029f49a2ad8d7ad0"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Tue Aug 26 06:03:07 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 26 06:03:07 2025 -0600"
      },
      "message": "Fix dictionary access in MultiFieldQueryParser, #1157 (#1167)\n\n"
    },
    {
      "commit": "0521bba0a32902b5c145c589029f49a2ad8d7ad0",
      "tree": "d15f07112c62c11c9b19b1044d328412b664939e",
      "parents": [
        "c4d6fe309b5ff337fcf7d03f2447fbb136bd328e"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Aug 25 20:31:26 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 25 20:31:26 2025 -0600"
      },
      "message": "UnicodeUtil updates: TryUTF8toUTF16, ReadOnlySpan methods, #1024 (#1057)\n\n* UnicodeUtil updates: TryUTF8toUTF16, ReadOnlySpan methods, #1024\n\n* Add back array overloads; add unit test for TryUTF8toUTF16\n\n* Fix comment formatting\n\n* Remove offset/length parameters from Span-based methods, #1024\n\n* Move ToCharArray methods to ObsoleteAPI for removal in 4.8.0 RC, #1024\n\n* Add fallback version of UTF8toUTF16\n\n* Throw ParseException on out of range in UTF8toUTF16, add more tests\n\n* Use Utf8ToStringWithFallback in ToString and exception/logging message building\n\n* Use FormatException instead of ParseException\n\n* Add FormatException case to Utf8ToString() catch\n\n* Fix exception type in XML docs in UnicodeUtil.NewString\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Fix TestUnicodeUtil: Use IOUtils.ENCODING_UTF_8_NO_BOM instead of non-existent CHARSET_UTF_8\n\n---------\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "c4d6fe309b5ff337fcf7d03f2447fbb136bd328e",
      "tree": "bd31f47b059329ae2f0c1da31665bf710f7e9b48",
      "parents": [
        "0e63339c7e41aed69698e97544d838928fab5700"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Wed Aug 20 14:31:56 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 21 03:31:56 2025 +0700"
      },
      "message": "Fix .asf.yaml syntax error for Apache Infrastructure (#1166)\n\n- Move protected_branches out of features section to correct indentation level\n- Add empty mapping {} to master branch as required by Apache\u0027s YAML parser\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "0e63339c7e41aed69698e97544d838928fab5700",
      "tree": "396a988463f2336327e030e114377aef27defce0",
      "parents": [
        "0f4e398554276fa385d3b6bc33e167a454c9878c"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Wed Aug 20 09:35:17 2025 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 19 20:35:17 2025 -0600"
      },
      "message": "Added EditorConfig Style Enforcement via GitHub Actions (#1164)\n\n* Lucene.Net.Support.Collections: Removed newline at the end of file for testing\n\n* Added EditorConfig checker to GitHub Workflows during PR\n\n* EditorConfig-Rules-Check.yml: Made installation of the editorconfig-checker more robust\n\n* EditorConfig-Rules-Check.yml: Fixed directory structure of editorconfig-checker binary location.\n\n* fix editorconfig check again\n\n* fixing editorconfig rules check install yet again\n\n* EditorConfig-Rules-Check.yml: Dynamically discover executable directory so we don\u0027t make assumptions about the archive directory structure.\n\n* .editorconfig: Changed .md files to use 2 space indents to match \"normal\" GitHub and Prettier rules.\n\n* .editorconfig: Added exclusions for .txt files in tests and all files in the lib/ directory (which contains 3rd party stuff)\n\n* .editorconfig: Enforce 2 space indentation in props,targets,csproj,fsproj,vbproj,and xml files\n\n* EditorConfig-Rules-Check.yml: Delete the temp folder, since the tool will check its own documentation files, which we don\u0027t want in the results\n\n* .editorconfig: Disable trim_trailing_whitespace for .yml files because it strips indented blank lines in scripts\n\n* .editorconfig: Fixd trim_trailing_whitespace for .yml files (comments are not supported after a config setting)\n\n* .editorconfig: Reorganized and commented better to keep related blocks of settings together (in particular, all of the settings that apply to .cs)\n\n* .editorconfig: .yml files quit functioning after reordering. Change to using separate [*.yml] and [*.yaml] sections\n\n* .editorconfig: Added .sln file type and several 3rd party and auto-generated exclusions where we don\u0027t care about formatting.\n\n* .editorconfig: Added exclusions for Phonetic language config files, the websites directory, and all .Designer.cs files, which are auto-generated. Fixed exclusions for package.md and overview.md to allow any directory.\n\n* .editorconfig: exclude the .idea directory\n\n* .editorconfig: Fixed exclusions to work from any starting directory.\n\n* .editorconfig: unset indent_style for all exclusions\n\n* .editorconfig: Disable resharper_enforce_empty_line_at_end_of_file rule on all excluded files\n\n* .editorconfig: Exclude LICENSE.txt files\n\n* SWEEP: Lucene.Net.Codecs: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Analysis.Kuromoji: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Analysis.OpenNLP: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Analysis.Phonetic: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Analysis.SmartCn: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Analyis.Stempel: Fixed whitespace to match .editorconfig\n\n* SWEEP: Lucene.Net.Benchmark: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Classification: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Expressions: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Facet: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Grouping: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Highlighter: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Join: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Memory: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Misc: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Queries: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.QueryParser: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Replicator: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Sandbox: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Spatial: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Suggest: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.TestFramework: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Analysis.Common: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: lucene-cli: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.CodeAnalysis.CSharp: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.CodeAnalysis.VisualBasic: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.ICU: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Replicator.AspNetCore: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Cli: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.CodeAnalysis: Fixed whitespace formatting to match .editorconfig\n\n* .editorconfig: Don\u0027t add a BOM to new files, as this only applies if we have legacy tooling that requires it. Some files specifically require no BOM, so having this set is a bit of a hazard.\n\n* SWEEP: Removed BOM from all .cs files\n\n* SWEEP: Lucene.Net.Tests._A-D: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests._E-I: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests._I-J: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests._J-S: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests_T-Z: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.AllProjects: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Analysis.Common: Fixed whitespace formatting to match .editorconfig\n\n* Lucene.Net.Analysis.Core.TestDuelingAnalyzers:assertEquals(): Removed unneeded ;, which was technically adding an extra line of code\n\n* SWEEP: Lucene.Net.Tests.Analysis.OpenNLP: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Analysis.Phonetic: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Analysis.Stempel: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Benchmark: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Classification: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Codecs: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Expressions: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Facet: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Grouping: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Highlighter: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Join: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Misc: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Queries: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.QueryParser: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Replicator: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Sandbox: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Spatial: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.Suggest: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Lucene.Net.Tests.TestFramework: Fixed whitespace formatting to match .editorconfig\n\n* SWEEP: Removed trailing whitespace from all .cs code files (namely, in the comments)\n\n* SWEEP: Lucene.Net.Analysis.Common: Fixed left-padding spaces of constructor initializers. Also formatted many stemmer steps to be on multiple lines as they were upstream.\n\n* .editorconfig: Added exclusion for *.dat because these files are copied from Lucene\n\n* .editorconfig: Added exclusions for *.brk, *.nrm, and *.rbbi\n\n* .editorconfig: Added all file extensions in the project (as needed), excluding types that we definitely don\u0027t want to edit (such as files copied from upstream, generated files, and binary files).\n\n* .gitattributes: Fixed indentation and added .gitignore and .gitattributes rules\n\n* .editorconfig, .gitattributes: Removed BOM from these files, as this is not supported by all tooling (eclint doesn\u0027t support BOM)\n\n* .editorconfig: Attempting to remove starting directory to see if the psake assets are ignored as they should be\n\n* Revert \".editorconfig: Attempting to remove starting directory to see if the psake assets are ignored as they should be\"\n\nThis reverts commit 4a1bcabab8badb473241a5997d946466ff291528.\n\n* .editorconfig: Reverted exclusions to use unset instead of false for trim_trailing_whitespace and insert_final_newline\n\n* build, build.bat: Fixed whitespace rules to match .editorconfig\n\n* .editorconfig: Added more exclusions for TagSoup sourced files\n\n* Added .erec configuration file for editorconfig-checker tool\n\n* .erec: Changed disabled rule from Indentation to IndentSize (found conflicting info in the docs)\n\n* Renamed .erec to .editorconfig-checker.json (the new file name)\n\n* .editorconfig-checker.json: Fixed casing of SpacesAfterTabs to eliminate warning\n\n* .editorconfig: Added exclusions for .xml and .xslt files in tests and ChangeNotes.txt\n\n* Lucene.Net.Misc/Store: Converted all (excluded) .cs files to use spaces for indentation instead of tabs\n\n* .editorconfig: Added exclusions for .html files in tests\n\n* .editorconfig: Exclude .info files (Java proeperties file copied from Lucene for Morfologik)\n\n* .editorconfig: Added exclusion for stoptags.txt for Kuromoji\n\n* .editorconfig: Added exclusion for .resx files, since Visual Studio\u0027s designer doesn\u0027t respect .editorconfig rules when doing edits\n\n* .editorconfig-checker.json: Since the Visual Studio designer doesn\u0027t respect .editorconfig settings, added that extension for ignoring by the tool. Reverted change to make the exclusion solution-wide in case it is edited outside of VS manually.\n\n* SWEEP: Lucene.Net.Tests/Util/JunitCompat: Replaced tab indentation with spaces\n\n* .build/TestSerialization.targets: Removed trailing whitespace on UpdateRuntimeConfigProperty attributes\n\n* publish-nuget-packages.yml: Added final newline\n\n* show-all-environment-variables.yml: Added final newline\n\n* show-all-files.yml: Added final newline\n\n* .build/nuget.props: Added final newline\n\n* .build/release.targets: Removed trailing whitespace and added final newline\n\n* .config/dotnet-tools.json: Added final newline\n\n* .rat-excludes: Added final newline\n\n* ACKNOWLEDGEMENTS.txt: Removed trailing whitespace\n\n* Directory.Build.targets: Fixed indent style from tabs to spaces\n\n* .editorconfig-checker.json: Ignore formatting for .DotSettings files, since they may be auto-generated\n\n* MIGRATE.md: Added trailing newline\n\n* build.ps1: Removed trailing whitespace, added final newline\n\n* proj/build.msbuildproj: Added final newline\n\n* proj/github.msbuildproj: Added final newline\n\n* proj/websites.msbuildproj: Converted indentation tabs to spaces, added final newline\n\n* src/Directory.Build.props: Removed trailing whitespace, added final newline\n\n* src/Directory.Build.targets: Added final newline\n\n* Lucene.Net.Analysis.Hu.HungarianLightStemmer: Removed trailing whitespace\n\n* Lucene.Net.Analysis.No.NorwegianLightStemmer: Removed trailing whitespace\n\n* Lucene.Net.Analysis.SmartCn.csproj: Converted tab indentation to spaces\n\n* Lucene.Net.TestFramework/default-lucene.testSettings.json: Added final newline\n\n* Lucene.Net.Tests.Benchmark.csproj: Removed trailing whitespace\n\n* Lucene.Net.Tests.Queries.csproj: Removed trailing whitespace\n\n* Lucene.Net.Tests.Replicator.csproj: Removed trailing whitespace\n\n* Lucene.Net.Tests.Spatial.csproj: Removed trailing whitespace\n\n* Lucene.Net.Tests.TestFramework.DependencyInjection.csproj: Removed trailing whitspace\n\n* Lucene.Net.Tests.TestFramework.Configuration.lucene.testsettings.mock.json: Added final newline\n\n* Lucene.Net.Tests.TestFramework.Configuration.parent.lucene.testsettings.mock.json: Added final newline\n\n* Lucene.Net.Tests._A-D.csproj: Removed trailing whitespace, added final newline\n\n* Lucene.Net.Tests._E-I.csproj: Removed trailing whitespace, added final newline\n\n* Lucene.Net.Tests._I-J.csproj: Removed trailing whitespace, added final newline\n\n* Lucene.Net.Tests._T-Z.csproj: Removed trailing whitespace, added final newline\n\n* .editorconfig-checker.json: Added ignore rule for App.config file (I don\u0027t believe this file is in use anywhere)\n\n* Lucene.Net/readme-nuget.md: Added final newline\n\n* src/Docs/Directory.Build.props: Removed trailing whitespace, added final newline\n\n* src/docs/Directory.Build.targets: Added final newline\n\n* src/docs/DocumentationTools.sln: Removed trailing whitespace\n\n* src/docs/convert.ps1: Converted tab indentation to spaces, added final newline\n\n* src/docs/readme.md: Added final newline\n\n* src/dotnet/Dirctory.Build.props: Removed trailing whitespace, added final newline\n\n* src/dotnet/Lucene.Net.CodeAnalysis/Version.props: Removed trailing whitespace, added final newline\n\n* src/dotnet/Lucene.Net.CodeAnalysis/tools (install.ps1 + uninstall.ps1): Removed trailing whitespace, added final newline\n\n* src/dotnet/Lucene.Net.Replicator.AspNetCore/examples.md: Added final newline\n\n* Lucene.Net.Tests.ICU.csproj: Removed trailing whitespace\n\n* src/dotnet/tools/Directory.Build.props: Removed trailing whitespace, added final newline\n\n* src/dotnet/tools/Lucene.Net.Tests.Cli/Configuration/appsettings.json: Added final newline\n\n* src/dotnet/tools/lucene-cli/Properties/launchSettings.json: Added final newline\n\n* SWEEP: src/dotnet/tools/lucene-cli/docs: Added final newline to all index.md and toc.yml files\n\n* .editorconfig-checker.json: Added additional glob patterns because the tool doesn\u0027t seem to be matching them correctly\n\n* .github/workflows/EditorConfig-Rules-Check.yml: Turned on debug switch, removed use of deprecated set-output command\n\n* .editorconfig-checker.json: Fixed excludes to use regex instead of glob patterns\n\n* .editorconfig-checker.json: Fixed Exclude section (extra comma is not valid JSON)\n\n* .github/workflows/EditorConfig-Rules-Check.yml: Removed --debug switch from ec command\n\n* Lucene.Net.Tests._I-J.csproj: Added final newline\n\n* src/dotnet/tools/lucene-cli/docs/analysis (index.md + toc.yml): Added final newline\n\n* .gitignore: Normalized line endings to LF\n\n* .gitignore: Removed extra final newline\n\n* src/docs/.gitignore: Normalized line endings to LF to match .gitattributes and .editorconfig\n\n* .github/workflows/EditorConfig-Rules-Check.yml: Show IDE help inline with the editorconfig-checker errors, expanded by default.\n\n* Directory.Build.props: Removed final newline to force error and check output of workflow\n\n* Directory.Build.props: Added trailing whitespace to trigger an editorconfig-checker failure\n\n* Revert \"Directory.Build.props: Added trailing whitespace to trigger an editorconfig-checker failure\"\n\nThis reverts commit b3dedc9c03ab972beeb54fd47a0296f317c3027c.\n\n* .editorconfig: Changed the websites rule to only exclude the _site directories (the generated files)\n\n* SWEEP: websites: Added final newline to all .yml files (except generated files)\n\n* SWEEP: websites: Removed trailing whitespace in all .js files (mainly license headers, excluding generated code)\n\n* SWEEP: websites: Added final newline on all .tmpl files where it was missing\n\n* SWEEP: websites: Added final newline to all .partial files where it was missing\n\n* SWEEP: websites: Added final newline to all .md files where it was missing\n\n* SWEEP: websites: Removed trailing whitespace in all .css files\n\n* SWEEP: websites: Removed trailing whitespace in all .partial files\n\n* SWEEP: websites: Removed trailing whitespace in all .tmpl files\n\n* websites/site/site.ps1: Converted indentation from tabs to spaces\n\n* websites/site/lucenetemplate/web.config: Fixed indentation, removed trailing whitespace, added final newline\n\n* websites/site/lucenetemplate/styles/site.css: Converted indentation from tabs to spaces\n\n* websits/apidos/Templates/DefaultTemplateNoAssets/token.json: Added final newline\n\n* .editorconfig-checker.json: Added rule to ignore .htaccess file\n\n* .editorconfig: Added rule for .htaccess file editing (note we fix this file up on deployment)\n\n* websites/site/lucenetemplate/doap_Lucene_Net.rdf: Removed trailing whitespace, added final newline\n\n* .github/workflows/EditorConfig-Rules-Check.yml: Show a success message if the run was successful. Upon failure, ensure that the group is expanded by default\n\n* Lucene.Net.csproj: Added trailing whitespace to check editorconfig-checker error message\n\n* .github/workflows/EditorConfig-Rules-Check.yml: Removed group so error/success will be expanded by default\n\n* .github/workflows/EditorConfg-Rules-Check.yml: Removed message about how many files don\u0027t confirm to .editorconfig, since it is redundant\n\n* Revert \"Lucene.Net.csproj: Added trailing whitespace to check editorconfig-checker error message\"\n\nThis reverts commit c0a61cdcaeb847c6049591061e1890d4252342e3.\n\n* .editorconfig: Removed exclusion rule for LICENSE.txt file\n\n* LICENSE.txt: Fixed all .editorconfig rules\n\n* Lucene.Net.sln: Added .editorconfig-checker.json, .gitattributes, and .gitignore files to Solution Items\n\n* .editorconfig: Removed exclusion for CHANGES.txt\n\n* Revert \".editorconfig: Removed exclusion for CHANGES.txt\"\n\nThis reverts commit 1b767c4ce2daed9eff065be3c9047aa1afb4062d.\n\n* website: Added editorconfig-setup page to configure .editorconfig support in common IDEs and other text editors. Added step to CONTRIBUTING.md to review that section before contributing."
    },
    {
      "commit": "0f4e398554276fa385d3b6bc33e167a454c9878c",
      "tree": "29bc3c6ea0c8838b24d3037daa26bf1aa46e6f37",
      "parents": [
        "3ec461df051a2ae9efe78b2d2ab78874473e8a7a"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Sun Jul 06 14:59:00 2025 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 06 11:59:00 2025 +0700"
      },
      "message": "misc: fix typos (#1163)\n\nThe IDE auto removed white space"
    },
    {
      "commit": "3ec461df051a2ae9efe78b2d2ab78874473e8a7a",
      "tree": "8965defb2a1ef8af8c5445eff3c659d05557baf4",
      "parents": [
        "5a9516cfc15bf89867c4298a7022e4d8ce344648"
      ],
      "author": {
        "name": "John Bampton",
        "email": "jbampton@users.noreply.github.com",
        "time": "Sat Jun 28 13:34:14 2025 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 28 10:34:14 2025 +0700"
      },
      "message": "misc: fix typos (#1162)\n\nMinor IDE auto white space strip"
    },
    {
      "commit": "5a9516cfc15bf89867c4298a7022e4d8ce344648",
      "tree": "d7418325c3e1d3df5470b27f23fbef1068934e26",
      "parents": [
        "a0578d6ea2c17c06be925adb15acd3c64d5fc824"
      ],
      "author": {
        "name": "Shad Storhaug",
        "email": "shad@shadstorhaug.com",
        "time": "Thu May 29 22:05:16 2025 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 29 22:05:16 2025 +0700"
      },
      "message": "ThaiTokenizer + ICUTokenizer: Fixed ICU4N BreakIterator issues to address concurrency problems (Fixes #1035, #1135, and #1159) (#1161)\n\n* Lucene.Net.Analysis.Th.ThaiTokenizer + Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizer: Removed static locks that were used to prevent concurent access to BreakIterator. The concurrency issue with BreakIterator has been addressed in ICU4N 60.1.0-alpha.437. Fixes #1044. Fixes #1135.\n\n* .build/dependencies.props: Bumped ICU4N to 60.1.0-alpha.438.g06cf803beb\n\n* azure-pipelines.yml: Bumped SDK version to 9.0.300 so we copy all of the ICU4N satellite assemblies to the build output.\n\n* .build/runbuild.ps1: Bumped minimum SDK version to 9.0.200 so ICU4N satellite assemblies are copied to the build output.\n\n* BUG: Lucene.Net.Analysis.Th.ThaiWordBreaker::SetText(): Clear the transitions array when resetting the text, since there may be state from a previous use.\n\n* Lucene.Net.Analysis.BaseTokenStreamTestCase::CheckAnalysisConsistency(): AssertTokenStreamContents already consumes the token stream and calls Close(), so removed duplicate Close() call in finally block. See #1159.\n\n* Lucene.Net.Analysis.BaseTokenStreamTestCase::AssertTokenStreamContents(): reset the token stream upon error so Close() doesn\u0027t throw an invalid state exception that would obscure our real test error message.\n\n* Lucene.Net.Analysis.BaseTokenStreamTestCase (AssertTokenStreamComponents() + CheckAnalysisConsistency()): When using MockTokenizer, disable the state checks upon exception so our call to Close() won\u0027t throw another exception that may obscure the original test failure.\n\n* Lucene.Net.Analysis.Th.TestThaiAnalyzer::AssertAnalyzer(): When using MockTokenizer, disable the state checks upon exception so our call to Close() won\u0027t throw another exception that may obscure the original test failure.\n\n* Lucene.Net.Analysis (BaseTokenStreamTestCase + Th.TestThaiAnalyzer): Log any secondary exceptions from TokenStream.Close(), since we don\u0027t want them to obscure our original test failure message. Throw only in the case where there was no other failure and Close() throws.\n\n* .build/dependencies.props: bumped ICU4N to 60.1.0-alpha.438\n\n* Lucene.Net.Analysis.Th.ThaiTokenizer: Removed extra helper methods/overloads that only existed to synchronize access to the BreakIterator instances"
    },
    {
      "commit": "a0578d6ea2c17c06be925adb15acd3c64d5fc824",
      "tree": "0d7cd1126d8796ec50ba588535bea47d5b252bc8",
      "parents": [
        "52ee6bb72db782ed3713ddefff3b3b99e3585e3f"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Wed Mar 19 07:27:54 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 19 07:27:54 2025 -0600"
      },
      "message": "BREAKING: De-nest AttributeSource.AttributeFactory, #1145 (#1147)\n\n"
    },
    {
      "commit": "52ee6bb72db782ed3713ddefff3b3b99e3585e3f",
      "tree": "694705492fd352d02cffd40a3e8de23f9866152d",
      "parents": [
        "3729d321423b0e110b578e7529b2d423c1ac25f1"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Wed Mar 19 07:24:51 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 19 07:24:51 2025 -0600"
      },
      "message": "Remove adjust logic in MMapDirectory, #1090 (#1138)\n\n"
    },
    {
      "commit": "3729d321423b0e110b578e7529b2d423c1ac25f1",
      "tree": "15f52ac30124b0b8d584dc8ee162f0ea4211d8ff",
      "parents": [
        "2f20ae1c09d8306fd30c7f73a39dc2252953e37e"
      ],
      "author": {
        "name": "Nehan Khan Pathan",
        "email": "pathannehan26@gmail.com",
        "time": "Wed Mar 19 07:47:33 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 18 20:17:33 2025 -0600"
      },
      "message": "BREAKING: Move CrankyTokenFilter to Lucene.Net.Analysis namespace (#1149)\n\n"
    },
    {
      "commit": "2f20ae1c09d8306fd30c7f73a39dc2252953e37e",
      "tree": "db19e7e233de01091cfda765ce0669972c6611fb",
      "parents": [
        "a96e768d14431cf9d85e394a333cd10c9112e975"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Mar 17 07:56:40 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 17 07:56:40 2025 -0600"
      },
      "message": "Overhaul TokenStream ICloseable/IDisposable Patterns, #271 (#1058)\n\n* Add ICloseable interface, WIP on IOUtils\n\n* Move ICloseable interface; add IOUtils Close method implementations\n\n* Add DoClose method to TokenStream and adjust Disposable use in subclasses accordingly\n\n* Remove DoClose method, consolidate into Close that is called by Dispose\n\n* Finish conversion to ICloseable and remove IDisposable from TokenStream\n\n* Fix implementation of CloseWhileHandlingException\n\n* Add back Dispose, make TokenStreamComponents disposable via Analyzer stored value\n\n* Make BaseTokenStreamTestCase be closer to the original\n\n* Add Dispose calls when tokenstream is not reused\n\n* Add unit test to ensure dispose is only called once when Analyzer is disposed, #271\n\n* Fix assertion message\n\n* Make MemoryIndex.TokenStreamAnonymousClass and PrefixTreeStrategy.CellTokenStream reusable\n\n* Lucene.Net.Analysis.TokenStream: Added disposable tracking and made implementing IDisposable optional, cascading the Dispose() call from Analyzer to any owned TokenStream instance that implements IDisposable.\n\n* Lucene.Net.Util.DisposableThreadLocal::Dispose(): use a try/finally block for IOUtils.Dispose(), since it could throw\n\n* Refactor MemoryIndex.AddFieldImpl method\n\n* Rename MemoryIndex.GetKeywordTokenStream\n\n* PR feedback\n\n* PR feedback\n\n* Docs fixes\n\n* Remove This property from TokenStream\n\n* Support resetting enumerator for CellTokenStream; update docs\n\n* Update XML doc comments for IEnumerator.Reset/GetEnumerator\n\n* Change language in MemoryIndex docs\n\n* Lucene.Net.Analysis.TokenStream: Enabled nullable reference type support\n\n* Lucene.Net.Analysis.TokenStream.DisposableTracker: Renamed MaybeRegisterForDisposal \u003e RegisterForDisposalIfRequired to make intent more clear\n\n* Lucene.Net.Analysis (TokenFilter + TokenStream + Tokenizer): Improved doc comments for IDisposable\n\n* More documentation improvements\n\n* Even more documentation improvements\n\n---------\n\nCo-authored-by: Shad Storhaug \u003cshad@shadstorhaug.com\u003e"
    },
    {
      "commit": "a96e768d14431cf9d85e394a333cd10c9112e975",
      "tree": "c3f9d1602dc95651a10f87ba823a0f95cad408ad",
      "parents": [
        "54505e8964c112119b83adf8bf9163d687765cbe"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Tue Mar 11 13:24:16 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 11 13:24:16 2025 -0600"
      },
      "message": "Remove unused private members, #669 (#1139)\n\n* Remove unused private members, #669\n\n* Remove two overloads of Rule.Contains and convert to use ReadOnlySpan\u003cchar\u003e\n\n* Add back EndsWith method to GreekStemmer, optimized for ReadOnlySpan\u003cchar\u003e\n\n* Use char[] for EndsWith"
    },
    {
      "commit": "54505e8964c112119b83adf8bf9163d687765cbe",
      "tree": "c370b76bde5cfb7ec50d03a111244fb06b977b16",
      "parents": [
        "690b175c0fb003e93487cda2fa6a0e75ca3a5fe4"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Mon Mar 10 09:28:45 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 10 09:28:45 2025 -0600"
      },
      "message": "Remove unnecessary use of NoInlining and add traceability for valid uses, #931 (#1134)\n\n* Use nameof for traceability to StackTraceHelper\n\n* Remove unnecessary NoInlining and add traceability, #931"
    },
    {
      "commit": "690b175c0fb003e93487cda2fa6a0e75ca3a5fe4",
      "tree": "6b890aa3fd8e652d9c003a91d38c24ef52ca22df",
      "parents": [
        "4c19e5ddcfe37bec65df3cab0c7f47e02e7111b4"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Sat Mar 08 18:02:42 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 08 18:02:42 2025 -0700"
      },
      "message": "Fix failing tests when local time zone has DST, #1133 (#1137)\n\n"
    },
    {
      "commit": "4c19e5ddcfe37bec65df3cab0c7f47e02e7111b4",
      "tree": "a05a9b5263e47ae3e9d3220835f21fcc1fe96265",
      "parents": [
        "4d1781943d76810e1af7a56257452873a8c9cd29"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Sat Mar 08 18:02:15 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 08 18:02:15 2025 -0700"
      },
      "message": "Reduce Powershell build output noise (#1136)\n\n"
    },
    {
      "commit": "4d1781943d76810e1af7a56257452873a8c9cd29",
      "tree": "45ba6ae5a185da129617897965c0b51bd4a70867",
      "parents": [
        "77a661d1bb9d52dec0208d9d6ee64ffaa7fb8ea5"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Feb 21 08:10:38 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 21 08:10:38 2025 -0700"
      },
      "message": "Fix LimitedConcurrencyLevelTaskScheduler timing-dependent tests, #1123 (#1131)\n\n* Mark LimitedConcurrencyLevelTaskScheduler timing-dependent tests as inconclusive if they fail, #1123\n\n* Use AssumeTrue instead of Assert.Inconclusive"
    },
    {
      "commit": "77a661d1bb9d52dec0208d9d6ee64ffaa7fb8ea5",
      "tree": "2f2ad41200e907ca19c073c46a73615c586e8a17",
      "parents": [
        "6b161d961a7764f2d2dbe90ee2ae03f73ccce019"
      ],
      "author": {
        "name": "Paul Irwin",
        "email": "paulirwin@gmail.com",
        "time": "Fri Feb 21 07:46:52 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 21 07:46:52 2025 -0700"
      },
      "message": "Add Support unit tests for ConcurrentSet (#1129)\n\n* Add support unit tests for ConcurrentSet, #1118\n\n* Use Count instead of .size()\n\n* Enable TestEquals for ConcurrentSet\n\n* Rename base class\n\n* Support testing LinkedHashSet as wrapped set type\n\n* Optimize SyncRoot, make GetEnumerator more thread-safe, and add SyncRoot/GetEnumerator unit tests"
    }
  ],
  "next": "6b161d961a7764f2d2dbe90ee2ae03f73ccce019"
}
