From 9bd1fbdf3b1414d7b2ed01e6bd79c366d64e0226 Mon Sep 17 00:00:00 2001 From: Widthdom Date: Wed, 3 Jun 2026 04:56:53 +0900 Subject: [PATCH 1/2] Stabilize SQL regex extraction under load (#2943) --- changelog.d/unreleased/2943.fixed.md | 16 ++++++++++++++++ src/CodeIndex/Cli/RuntimeSafety.cs | 3 ++- src/CodeIndex/Indexer/BoundedRegex.cs | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 changelog.d/unreleased/2943.fixed.md diff --git a/changelog.d/unreleased/2943.fixed.md b/changelog.d/unreleased/2943.fixed.md new file mode 100644 index 0000000000..1c3750357c --- /dev/null +++ b/changelog.d/unreleased/2943.fixed.md @@ -0,0 +1,16 @@ +--- +category: fixed +issues: + - 2943 +affected: + - src/CodeIndex/Indexer/BoundedRegex.cs + - src/CodeIndex/Cli/RuntimeSafety.cs +--- + +## English + +- **SQL reference JSON tests no longer drop references under grouped net9 runs (#2943)** - bounded SQL extraction regexes now share the runtime safety timeout budget, preventing grouped net9 validation from treating transient regex timeouts as missing SQL target/source references. + +## 日本語 + +- **grouped net9 実行で SQL reference JSON テストが参照を落とさなくなりました (#2943)** - SQL 抽出用の bounded regex が runtime safety の timeout 予算を共有するようになり、grouped net9 検証で一時的な regex timeout が SQL target/source 参照欠落として扱われる問題を防ぎます。 diff --git a/src/CodeIndex/Cli/RuntimeSafety.cs b/src/CodeIndex/Cli/RuntimeSafety.cs index d21649ec12..38b5336044 100644 --- a/src/CodeIndex/Cli/RuntimeSafety.cs +++ b/src/CodeIndex/Cli/RuntimeSafety.cs @@ -1,10 +1,11 @@ using System.Text.RegularExpressions; +using CodeIndex.Indexer; namespace CodeIndex.Cli; internal static class RuntimeSafety { - internal static readonly TimeSpan RegexMatchTimeout = TimeSpan.FromSeconds(2); + internal static readonly TimeSpan RegexMatchTimeout = BoundedRegex.DefaultMatchTimeout; public static void Configure() { diff --git a/src/CodeIndex/Indexer/BoundedRegex.cs b/src/CodeIndex/Indexer/BoundedRegex.cs index daec250045..f9ced67111 100644 --- a/src/CodeIndex/Indexer/BoundedRegex.cs +++ b/src/CodeIndex/Indexer/BoundedRegex.cs @@ -6,7 +6,7 @@ namespace CodeIndex.Indexer; internal sealed class BoundedRegex : BclRegex { - internal static readonly TimeSpan DefaultMatchTimeout = TimeSpan.FromMilliseconds(250); + internal static readonly TimeSpan DefaultMatchTimeout = TimeSpan.FromSeconds(2); public BoundedRegex(string pattern) : base(pattern, RegexOptions.None, DefaultMatchTimeout) From ba8c0036095004ad3a97b5361905490f3410782b Mon Sep 17 00:00:00 2001 From: Widthdom Date: Wed, 3 Jun 2026 04:57:57 +0900 Subject: [PATCH 2/2] Add timeout regression guard (#2945) --- changelog.d/unreleased/2945.fixed.md | 17 +++++++++++++++++ tests/CodeIndex.Tests/BoundedRegexTests.cs | 13 +++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 changelog.d/unreleased/2945.fixed.md create mode 100644 tests/CodeIndex.Tests/BoundedRegexTests.cs diff --git a/changelog.d/unreleased/2945.fixed.md b/changelog.d/unreleased/2945.fixed.md new file mode 100644 index 0000000000..de18986203 --- /dev/null +++ b/changelog.d/unreleased/2945.fixed.md @@ -0,0 +1,17 @@ +--- +category: fixed +issues: + - 2945 +affected: + - src/CodeIndex/Indexer/BoundedRegex.cs + - src/CodeIndex/Cli/RuntimeSafety.cs + - tests/CodeIndex.Tests/BoundedRegexTests.cs +--- + +## English + +- **Reference extraction keeps the runtime safety regex budget under full-suite load (#2945)** - bounded extractor regexes now use the same 2-second match timeout that the CLI reports for regex safety, avoiding false-negative reference extraction when local full test runs are CPU-contended. + +## 日本語 + +- **full suite の高負荷時も参照抽出が runtime safety の regex 予算を使うようになりました (#2945)** - bounded extractor regex は CLI が regex safety として報告する 2 秒の match timeout と同じ値を使うようになり、CPU 競合下のローカル full test で参照抽出が false negative になる問題を避けます。 diff --git a/tests/CodeIndex.Tests/BoundedRegexTests.cs b/tests/CodeIndex.Tests/BoundedRegexTests.cs new file mode 100644 index 0000000000..438eaec9e6 --- /dev/null +++ b/tests/CodeIndex.Tests/BoundedRegexTests.cs @@ -0,0 +1,13 @@ +using CodeIndex.Cli; +using CodeIndex.Indexer; + +namespace CodeIndex.Tests; + +public class BoundedRegexTests +{ + [Fact] + public void DefaultMatchTimeout_MatchesRuntimeSafetyTimeout() + { + Assert.Equal(RuntimeSafety.RegexMatchTimeout, BoundedRegex.DefaultMatchTimeout); + } +}