Skip to content

Conversation

@007harshmahajan
Copy link
Contributor

@007harshmahajan 007harshmahajan commented Oct 16, 2025

PR Type

Enhancement, Documentation


Description

  • Add built-in regex patterns fetch API

  • Introduce GitHub data service with caching

  • Handle duplicate pattern names gracefully

  • UI to browse and import built-ins


Diagram Walkthrough

flowchart LR
  cfg["Config: regex_patterns_source_url"] -- used by --> ghsvc["GitHubDataService"]
  ghsvc -- fetch_json/cache --> adapter["PyWhatAdapter.fetch_built_in_patterns"]
  adapter -- returns --> api["GET /api/{org}/re_patterns/built-in"]
  api -- consumed by --> websvc["web regexPatterns.getBuiltInPatterns()"]
  websvc -- powers --> ui["BuiltInPatternsTab.vue"]
  ui -- import selected --> importFlow["ImportRegexPattern.vue"]
  importFlow -- create --> dbsvc["db::re_pattern::add (duplicate-safe)"]
Loading

File Walkthrough

Relevant files
Configuration changes
3 files
config.rs
Add source URL for built-in regex patterns                             
+6/-0     
mod.rs
Register built-in patterns and reorder routes                       
+2/-2     
mod.rs
Export github service module                                                         
+1/-0     
Enhancement
10 files
mod.rs
New endpoint to fetch built-in patterns and improved save response
+103/-4 
re_pattern.rs
Add duplicate-safe creation with auto-suffix names             
+47/-17 
mod.rs
Add adapters module export for pattern formats                     
+20/-0   
pywhat.rs
Implement generic pattern adapter and filters                       
+264/-0 
cache.rs
Introduce in-memory cache with eviction and stats               
+130/-0 
client.rs
Add GitHub data client with retry and caching                       
+246/-0 
types.rs
Define service config, errors, and cache types                     
+119/-0 
regex_pattern.ts
Add client method to fetch built-in patterns                         
+18/-0   
BuiltInPatternsTab.vue
New UI to search, filter, preview, import patterns             
+451/-0 
ImportRegexPattern.vue
Integrate built-in tab and import flow updates                     
+94/-36 
Documentation
3 files
mod.rs
Expose GitHub service modules and types                                   
+39/-0   
.env.example
Document regex patterns source URL env var                             
+6/-1     
en.json
Add i18n strings for built-in patterns UI                               
+17/-1   

@github-actions
Copy link
Contributor

github-actions bot commented Oct 16, 2025

PR Reviewer Guide 🔍

(Review updated until commit 1a868b7)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
🧪 PR contains tests
🔒 Security concerns

External data ingestion:
The service fetches and serves regex definitions from a remote URL. While JSON is parsed and not executed, malicious or overly broad regexes could cause excessive backtracking (ReDoS) when later used. Consider implementing regex compilation timeouts/limits where patterns are applied, and possibly basic linting or a denylist for catastrophic regex constructs.

⚡ Recommended focus areas for review

Parsing Robustness

The generic deserialization relies on serde aliasing with renamed fields (e.g., #[serde(rename = "Name")] and aliases). If the upstream JSON keys are lowercase (as in many datasets), this may fail unless exact cases match. Validate against the actual pyWhat JSON to ensure fields like name/regex/description map correctly; otherwise add more aliases or remove forced rename to Title/Regex/Description capitalization.

#[serde(alias = "name", alias = "title", alias = "Title")]
#[serde(rename = "Name")]
pub name: String,

// Pattern/Regex field - PyWhat uses "Regex", others might use "pattern"
#[serde(alias = "regex", alias = "pattern", alias = "Pattern")]
#[serde(rename = "Regex")]
pub regex: String,

// Optional fields
#[serde(alias = "description", alias = "desc")]
#[serde(rename = "Description")]
#[serde(default)]
pub description: Option<String>,

#[serde(alias = "rarity", alias = "priority")]
#[serde(rename = "Rarity")]
#[serde(default = "default_rarity")]
pub rarity: f64,

#[serde(alias = "url", alias = "link")]
#[serde(rename = "URL")]
#[serde(default)]
pub url: Option<String>,

#[serde(alias = "tags", alias = "categories", alias = "category")]
#[serde(rename = "Tags")]
#[serde(default)]
pub tags: Vec<String>,

#[serde(alias = "examples")]
#[serde(rename = "Examples")]
#[serde(default)]
pub examples: Option<PatternExamples>,

#[serde(default)]
pub plural_name: bool,
Duplicate Name Suffixing

The duplicate handling always formats as "name (n)" but does not attempt to parse and increment existing suffixed names, potentially causing gaps and repeated attempts up to MAX_ATTEMPTS. Consider parsing existing suffix and starting from the max found to reduce retries and DB conflicts.

let mut pattern_entry = entry.clone();
let mut attempt = 0;
const MAX_ATTEMPTS: i32 = 100;

loop {
    match infra::table::re_pattern::add(pattern_entry.clone()).await {
        Ok(_) => break,
        Err(errors::Error::DbError(DbError::UniqueViolation)) => {
            // Duplicate name detected - generate a new name with suffix
            attempt += 1;
            if attempt >= MAX_ATTEMPTS {
                return Err(anyhow::anyhow!(
                    "Failed to create pattern with unique name after {} attempts",
                    MAX_ATTEMPTS
                ));
            }

            // Generate new name: "Pattern Name (2)", "Pattern Name (3)", etc.
            pattern_entry.name = if attempt == 1 {
                format!("{} ({})", entry.name, attempt + 1)
            } else {
                // Replace the suffix
                format!("{} ({})", entry.name, attempt + 1)
            };

            log::info!(
                "Pattern name '{}' already exists in org '{}', trying with name '{}'",
                entry.name,
                entry.org,
                pattern_entry.name
            );
            continue;
Cache Bypass Logic

The API supports force_refresh, but fetch_json always uses cached data in the GitHub service. Ensure force_refresh invalidation plus immediate fetch won’t race with other concurrent requests returning stale cache; consider passing a force flag through to bypass cache on the subsequent fetch.

pub async fn get_built_in_patterns(
    _org_id: web::Path<String>,
    query: web::Query<BuiltInPatternsQuery>,
) -> Result<HttpResponse, Error> {
    use crate::service::github::{GitHubDataService, adapters::PyWhatAdapter};

    // Create GitHub service
    let github_service = GitHubDataService::new();

    // Force refresh if requested
    if query.force_refresh {
        let config = config::get_config();
        github_service
            .invalidate_cache(&config.common.regex_patterns_source_url)
            .await;
    }

    // Fetch patterns
    let mut patterns = match PyWhatAdapter::fetch_built_in_patterns(&github_service).await {
        Ok(patterns) => patterns,
        Err(e) => {
            log::error!("Failed to fetch built-in patterns: {}", e);
            return Ok(HttpResponse::InternalServerError().json(serde_json::json!({
                "error": "Failed to fetch built-in patterns",
                "message": e.to_string()
            })));
        }
    };

    // Apply search filter
    if !query.search.is_empty() {
        patterns = PyWhatAdapter::filter_by_search(patterns, &query.search);
    }

    // Apply tag filter
    if !query.tags.is_empty() {
        patterns = PyWhatAdapter::filter_by_tags(patterns, &query.tags);
    }

    let config = config::get_config();
    let response = BuiltInPatternsResponse {
        patterns,
        last_updated: chrono::Utc::now().timestamp(),
        source_url: config.common.regex_patterns_source_url.clone(),
    };

    Ok(HttpResponse::Ok().json(response))

@github-actions
Copy link
Contributor

github-actions bot commented Oct 16, 2025

PR Code Suggestions ✨

Latest suggestions up to 1a868b7
Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Fix serde field mapping robustness

The rename attributes make deserialization require the exact capitalized keys and
can override aliases, breaking sources that use lowercase fields (e.g., pyWhat’s
"Regex"). Remove rename and keep alias to accept multiple cases reliably.

src/service/github/adapters/pywhat.rs [29-68]

 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct GenericPattern {
-    // Name field - case insensitive via serde flatten
-    #[serde(alias = "name", alias = "title", alias = "Title")]
-    #[serde(rename = "Name")]
+    #[serde(alias = "name", alias = "Name", alias = "title", alias = "Title")]
     pub name: String,
 
-    // Pattern/Regex field - PyWhat uses "Regex", others might use "pattern"
-    #[serde(alias = "regex", alias = "pattern", alias = "Pattern")]
-    #[serde(rename = "Regex")]
+    #[serde(alias = "regex", alias = "Regex", alias = "pattern", alias = "Pattern")]
     pub regex: String,
-    ...
+
+    #[serde(default, alias = "description", alias = "Description", alias = "desc")]
+    pub description: Option<String>,
+
+    #[serde(default = "default_rarity", alias = "rarity", alias = "Rarity", alias = "priority")]
+    pub rarity: f64,
+
+    #[serde(default, alias = "url", alias = "URL", alias = "link")]
+    pub url: Option<String>,
+
+    #[serde(default, alias = "tags", alias = "Tags", alias = "categories", alias = "category")]
+    pub tags: Vec<String>,
+
+    #[serde(default, alias = "examples", alias = "Examples")]
+    pub examples: Option<PatternExamples>,
+
+    #[serde(default)]
+    pub plural_name: bool,
 }
Suggestion importance[1-10]: 7

__

Why: Using rename forces exact-case keys and can override aliases, risking deserialization failures; switching to aliases only improves compatibility across sources. The improved code aligns with PR intent and enhances robustness.

Medium
Restore removed existing route

Reordering routes removed the existing re_pattern::get endpoint and may break
clients relying on it. If this was unintentional, keep the original endpoint and add
the new one without altering others’ order to avoid regressions.

src/handler/http/router/mod.rs [600-605]

+.service(re_pattern::get) // preserve existing endpoint
 .service(re_pattern::get_built_in_patterns)
 .service(re_pattern::test)
 .service(re_pattern::list)
 .service(re_pattern::save)
 .service(re_pattern::update)
 .service(re_pattern::delete)
Suggestion importance[1-10]: 4

__

Why: The PR intentionally removed re_pattern::get and added get_built_in_patterns; restoring it may be unnecessary if deprecation is intended. However, if clients depend on get, keeping it avoids regressions. The mapping to the new hunk lines is correct.

Low
Match example keys’ casing

The API shapes examples as { valid, invalid } (lowercase) in PatternExamples, but
the UI reads Valid. This mismatch will hide examples. Align the UI to the actual
response field names to prevent undefined access.

web/src/components/settings/BuiltInPatternsTab.vue [206-217]

-<div v-if="previewedPattern?.examples?.Valid?.length > 0" class="q-mb-md">
+<div v-if="previewedPattern?.examples?.valid?.length > 0" class="q-mb-md">
   <div class="text-weight-bold q-mb-xs">{{ t('regex_patterns.valid_examples') }}</div>
   <q-list dense bordered>
-    <q-item v-for="(example, idx) in previewedPattern.examples.Valid.slice(0, 3)" :key="idx">
+    <q-item v-for="(example, idx) in previewedPattern.examples.valid.slice(0, 3)" :key="idx">
       <q-item-section>
         <q-item-label caption class="text-wrap" style="word-break: break-all">
           {{ example.substring(0, 200) }}{{ example.length > 200 ? '...' : '' }}
         </q-item-label>
       </q-item-section>
     </q-item>
   </q-list>
 </div>
Suggestion importance[1-10]: 2

__

Why: The backend adapter normalizes to lowercase in Rust, but the serialized response uses PatternExamples with capitalized Valid/Invalid per serde settings; the UI's use of Valid likely matches the delivered JSON. Changing to lowercase may break it without changing the server serialization.

Low

Previous suggestions

Suggestions up to commit 96f7e5f
CategorySuggestion                                                                                                                                    Impact
Possible issue
Fix deserialization aliasing

The struct enforces specific capitalized field names via rename, which will fail to
deserialize many real-world JSON variants simultaneously with aliases. Remove rename
and rely solely on alias so either "Name"/"name"/"title" etc. work in a single
input. This prevents hard-to-debug parse failures when the source JSON uses
different casing.

src/service/github/adapters/pywhat.rs [29-68]

 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct GenericPattern {
-    // Name field - case insensitive via serde flatten
-    #[serde(alias = "name", alias = "title", alias = "Title")]
-    #[serde(rename = "Name")]
+    // Accept multiple variants without forcing a single output key
+    #[serde(alias = "Name", alias = "name", alias = "title", alias = "Title")]
     pub name: String,
 
-    // Pattern/Regex field - PyWhat uses "Regex", others might use "pattern"
-    #[serde(alias = "regex", alias = "pattern", alias = "Pattern")]
-    #[serde(rename = "Regex")]
+    // Accept multiple regex key variants
+    #[serde(alias = "Regex", alias = "regex", alias = "pattern", alias = "Pattern")]
     pub regex: String,
 
-    // Optional fields
-    #[serde(alias = "description", alias = "desc")]
-    #[serde(rename = "Description")]
+    // Optional fields with flexible keys
+    #[serde(alias = "Description", alias = "description", alias = "desc")]
     #[serde(default)]
     pub description: Option<String>,
 
-    #[serde(alias = "rarity", alias = "priority")]
-    #[serde(rename = "Rarity")]
+    #[serde(alias = "Rarity", alias = "rarity", alias = "priority")]
     #[serde(default = "default_rarity")]
     pub rarity: f64,
 
-    #[serde(alias = "url", alias = "link")]
-    #[serde(rename = "URL")]
+    #[serde(alias = "URL", alias = "url", alias = "link")]
     #[serde(default)]
     pub url: Option<String>,
 
-    #[serde(alias = "tags", alias = "categories", alias = "category")]
-    #[serde(rename = "Tags")]
+    #[serde(alias = "Tags", alias = "tags", alias = "categories", alias = "category")]
     #[serde(default)]
     pub tags: Vec<String>,
 
-    #[serde(alias = "examples")]
-    #[serde(rename = "Examples")]
+    #[serde(alias = "Examples", alias = "examples")]
     #[serde(default)]
     pub examples: Option<PatternExamples>,
 
     #[serde(default)]
     pub plural_name: bool,
 }
Suggestion importance[1-10]: 7

__

Why: Correctly notes that using serde rename with uppercase keys can block alias-only variants and cause parsing failures; switching to aliases only improves robustness without changing output types. Moderate impact, likely correctness improvement for varied JSON sources.

Medium
Ensure unique id and suffixing

The loop never adjusts pattern_entry.id, so repeated retries can still violate
uniqueness if the DB unique key includes slug/id as well as name. Also, for names
already ending with " (n)", this unconditionally appends again instead of
incrementing. Regenerate a derived id consistently and increment existing numeric
suffix to avoid unbounded retries.

src/service/db/re_pattern.rs [36-72]

 let mut pattern_entry = entry.clone();
 let mut attempt = 0;
 const MAX_ATTEMPTS: i32 = 100;
+
+let base_name = entry.name.clone();
+let mut next_suffix = 2;
 
 loop {
     match infra::table::re_pattern::add(pattern_entry.clone()).await {
         Ok(_) => break,
         Err(errors::Error::DbError(DbError::UniqueViolation)) => {
-            // Duplicate name detected - generate a new name with suffix
             attempt += 1;
             if attempt >= MAX_ATTEMPTS {
                 return Err(anyhow::anyhow!(
                     "Failed to create pattern with unique name after {} attempts", MAX_ATTEMPTS
                 ));
             }
 
-            // Generate new name: "Pattern Name (2)", "Pattern Name (3)", etc.
-            pattern_entry.name = if attempt == 1 {
-                format!("{} ({})", entry.name, attempt + 1)
-            } else {
-                // Replace the suffix
-                format!("{} ({})", entry.name, attempt + 1)
-            };
+            // If original had a suffix, increment it; else start at 2
+            pattern_entry.name = format!("{} ({})", base_name, next_suffix);
+            next_suffix += 1;
+
+            // Also regenerate a unique id if required by storage schema
+            // Keep org stable; only change id derived part
+            pattern_entry.id = format!("{}::{}", entry.org, uuid::Uuid::new_v4());
 
             log::info!(
                 "Pattern name '{}' already exists in org '{}', trying with name '{}'",
                 entry.name,
                 entry.org,
                 pattern_entry.name
             );
             continue;
         }
         Err(e) => {
             log::error!("error while saving pattern to db : {e}");
             return Err(anyhow::anyhow!(e));
         }
     }
 }
Suggestion importance[1-10]: 6

__

Why: Catching potential unique violations solely on name is improved by incrementing suffix predictably; however, changing id generation may conflict with existing schema semantics and is speculative since uniqueness constraints on id weren't shown. Useful but partially assumptive.

Low
General
Robust query param parsing

Query parameters are public API; without pub fields, Actix/serde can deserialize but
you can't access them outside the module if needed, and more critically tags passed
as repeated query params may not parse as expected depending on serde settings. Add
#[serde(deserialize_with)] to support repeated ?tags=a&tags=b and CSV, and make
fields public to avoid accidental visibility issues.

src/handler/http/request/re_pattern/mod.rs [108-116]

 #[derive(Debug, Deserialize, ToSchema)]
 struct BuiltInPatternsQuery {
     #[serde(default)]
-    search: String,
+    pub search: String,
+    #[serde(default, deserialize_with = "crate::utils::de::string_list")]
+    pub tags: Vec<String>,
     #[serde(default)]
-    tags: Vec<String>,
-    #[serde(default)]
-    force_refresh: bool,
+    pub force_refresh: bool,
 }
Suggestion importance[1-10]: 3

__

Why: Visibility change is not required here, and introducing a custom deserializer crate::utils::de::string_list is speculative and not present in the PR. While handling repeated tags could help, the suggestion relies on undefined utilities, reducing accuracy and applicability.

Low

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 96f7e5f

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 364 344 0 19 1 95% 4m 38s

View Detailed Results

@007harshmahajan 007harshmahajan marked this pull request as ready for review October 16, 2025 09:32
@github-actions
Copy link
Contributor

Persistent review updated to latest commit 1a868b7

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Greptile Overview

Summary

This PR introduces a built-in regex patterns feature that fetches curated patterns from GitHub (PyWhat project by default) with caching, search, and filtering capabilities.

Key Changes

  • GitHub Data Service: New generic service (src/service/github/) for fetching data from GitHub with caching (1-hour TTL, 100MB max), retry logic (3 attempts with exponential backoff), and rate-limit handling
  • Pattern Adapter: Flexible PyWhatAdapter supports multiple JSON formats (PyWhat, custom, minimal) with field aliases for compatibility
  • Built-in Patterns API: New GET /api/{org}/re_patterns/built-in endpoint with search, tag filtering, and force refresh options
  • Duplicate Name Handling: Pattern creation now auto-resolves duplicate names by appending numeric suffixes ("Pattern (2)", "Pattern (3)", etc.) with max 100 attempts
  • UI Components: New BuiltInPatternsTab.vue with search, tag filtering, preview dialog, and batch import capabilities

Architecture Integration

The implementation follows a clean layered architecture: UI → API → Adapter → Service → Cache → External Source. The GitHub service is generic and reusable for future GitHub-based data fetching needs. The caching layer prevents excessive API calls and respects GitHub rate limits.

Issues Found

  • Critical: client.rs:47 uses expect() which can panic during HTTP client creation (violates custom rule b18dc58c)

Confidence Score: 4/5

  • This PR is safe to merge after fixing the expect() panic issue
  • The implementation is well-structured with comprehensive error handling, caching, and tests. The only critical issue is the use of expect() in client.rs line 47 which violates custom rules and can cause panics. The duplicate name handling is clever, the caching layer is robust, and the frontend integration is clean. All copyright headers are present.
  • src/service/github/client.rs requires fixing the expect() call on line 47

Important Files Changed

File Analysis

Filename Score Overview
src/service/github/client.rs 4/5 New GitHub data service with caching and retry logic; contains an expect call that violates custom rules
src/handler/http/request/re_pattern/mod.rs 5/5 New built-in patterns API endpoint with search/tag filtering and improved duplicate name handling in save endpoint
src/service/db/re_pattern.rs 5/5 Auto-resolves duplicate pattern names with numeric suffixes (e.g., "Pattern (2)"); clean retry logic with max 100 attempts
web/src/components/settings/BuiltInPatternsTab.vue 5/5 New Vue component for browsing and importing built-in patterns; includes search, tag filtering, preview dialog

Sequence Diagram

sequenceDiagram
    participant UI as BuiltInPatternsTab.vue
    participant API as GET /api/{org}/re_patterns/built-in
    participant Adapter as PyWhatAdapter
    participant Service as GitHubDataService
    participant Cache as CacheManager
    participant GitHub as GitHub Raw URL
    
    UI->>API: Request patterns (search, tags, force_refresh)
    API->>Service: Create GitHubDataService
    
    alt force_refresh = true
        API->>Service: invalidate_cache(url)
        Service->>Cache: Remove cached entry
    end
    
    API->>Adapter: fetch_built_in_patterns()
    Adapter->>Service: fetch_json(config.regex_patterns_source_url)
    Service->>Cache: get(cache_key)
    
    alt Cache hit and not expired
        Cache-->>Service: Return cached data
    else Cache miss or expired
        Service->>Service: fetch_with_retry(url)
        loop Retry logic (max 3 attempts)
            Service->>GitHub: HTTP GET request
            GitHub-->>Service: JSON response
        end
        Service->>Cache: set(cache_key, data, TTL=3600s)
    end
    
    Service-->>Adapter: Parsed GenericPattern[]
    Adapter->>Adapter: Transform to BuiltInPatternResponse[]
    Adapter-->>API: Return patterns
    
    API->>Adapter: filter_by_search(patterns, query)
    API->>Adapter: filter_by_tags(patterns, tags)
    API-->>UI: Return filtered patterns with metadata
    
    UI->>UI: Display patterns with search/filter UI
    
    alt User imports pattern
        UI->>UI: Emit import-patterns event
        UI->>API: POST /api/{org}/re_patterns
        API->>DB: add(PatternEntry)
        
        alt Duplicate name detected
            DB-->>API: UniqueViolation error
            API->>API: Append suffix (e.g., "Name (2)")
            API->>DB: Retry with new name
        end
        
        DB-->>API: Created pattern with final name
        API-->>UI: Success with final name
    end
Loading

16 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 1a868b7

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 364 344 0 19 1 95% 4m 45s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 1a868b7

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 364 344 0 19 1 95% 4m 41s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: b7e21eb

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 364 343 0 19 2 94% 4m 38s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: b7e21eb

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 364 342 0 19 3 94% 4m 39s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: a4ce7d8

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 364 343 0 19 2 94% 4m 37s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 09a7fd6

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 343 0 19 3 94% 5m 17s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 09a7fd6

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 342 0 19 4 94% 5m 12s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 166f714

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 343 0 19 3 94% 5m 12s

View Detailed Results

@007harshmahajan 007harshmahajan requested review from nikhilsaikethe and removed request for bjp232004 October 22, 2025 12:31
@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 1489f4c

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 343 0 19 3 94% 5m 14s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 80fbb69

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 342 0 19 4 94% 4m 37s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 0cfc701

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 342 0 19 4 94% 4m 38s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 0cfc701

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 341 0 19 5 93% 4m 40s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 0cfc701

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 345 0 19 1 95% 4m 38s

View Detailed Results

Comment on lines +69 to +70
log::warn!("Cache full, clearing oldest entries");
cache.clear();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe not relevant now, but this will flush all the cache not just the oldest entries till we meet size requirements.

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: nikhilsaikethe | Branch: regex_builtin_patterns | Commit: dfecbf0

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 343 0 19 3 94% 4m 38s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: d0e93de

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 343 0 19 3 94% 4m 39s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: d0e93de

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 365 342 0 19 4 94% 4m 38s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: c1da3a1

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 366 344 0 19 3 94% 4m 40s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: openobserve | Branch: regex_builtin_patterns | Commit: 9b1d629

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 376 353 0 21 2 94% 4m 31s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: nikhilsaikethe | Branch: regex_builtin_patterns | Commit: eae88cd

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 376 353 0 21 2 94% 4m 31s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 0cdcc16

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 376 354 0 21 1 94% 4m 32s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 3145e77

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 376 352 0 21 3 94% 4m 32s

View Detailed Results

@testdino-playwright-reporter
Copy link

⚠️ Test Run Unstable


Author: 007harshmahajan | Branch: regex_builtin_patterns | Commit: 3145e77

Testdino Test Results

Status Total Passed Failed Skipped Flaky Pass Rate Duration
All tests passed 376 354 0 21 1 94% 4m 33s

View Detailed Results

@007harshmahajan 007harshmahajan merged commit b267159 into main Nov 3, 2025
32 checks passed
@007harshmahajan 007harshmahajan deleted the regex_builtin_patterns branch November 3, 2025 18:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants