Skip to content

refactor: vectordb v2#467

Merged
onuratakan merged 8 commits intomasterfrom
vectordb-v2
Nov 12, 2025
Merged

refactor: vectordb v2#467
onuratakan merged 8 commits intomasterfrom
vectordb-v2

Conversation

@DoganK01
Copy link
Copy Markdown
Member

  • V2 for vector database providers
  • Refactor Knowledgebase based on the vectordb changes

@claude
Copy link
Copy Markdown

claude bot commented Nov 10, 2025

Comprehensive Code Review: VectorDB System Refactor (V2)

Overview

This is a major architectural refactor with 12,204 additions across 13 files. The changes modernize the vector database system with async-first architecture, improved provider abstractions, and enhanced knowledge base capabilities.

Overall Assessment: 7.5/10 - Strong architecture with some critical issues requiring attention before merge.


1. BASE ARCHITECTURE (src/upsonic/vectordb/base.py)

Strengths ✅

  • Async-First Design: Comprehensive async/sync dual interface with intelligent event loop handling
  • Complete Provider Contract: 46 abstract methods define clear interface expectations
  • Backward Compatibility: Maintains aliases like delete_by_id()delete() for smooth migration

Critical Issues ⚠️

Issue #1: ThreadPoolExecutor Creation Overhead

  • src/upsonic/vectordb/base.py:89-96
  • Creates new executor on EVERY sync call
  • Impact: Performance degradation on repeated sync calls
  • Fix: Use instance-level or module-level executor pool

Issue #2: Sync Method Implementation Gap

  • All providers must implement 92 methods (46 async + 46 sync)
  • Risk of inconsistent implementations across 7 providers
  • Recommendation: Add integration tests verifying sync/async parity for each provider

2. CONFIGURATION SYSTEM (src/upsonic/vectordb/config.py)

Strengths ✅

  • Frozen Pydantic Models: Prevents accidental config mutations
  • Field Validation: Proper range checks for similarity_threshold (0.0-1.0)
  • Type Safety: Comprehensive type hints with Union types for provider-specific configs

Critical Issues ⚠️

Issue #3: Unsafe Frozen Model Mutation

  • src/upsonic/vectordb/config.py:247-249 (PineconeConfig)
  • Bypasses Pydantic's frozen protection using object.__setattr__()
  • Problem: This is a code smell - if field needs mutation, it shouldn't be frozen
  • Fix: Either remove frozen=True or restructure as computed properties

Issue #4: Silent Config Mutations

  • src/upsonic/vectordb/config.py:309-312 (MilvusConfig)
  • Silently modifies hybrid_search_enabled with only a warning
  • Users may not realize their config was modified
  • Fix: Raise explicit error instead of silent mutation

Issue #5: Index Type Validation Inconsistency

  • Union types accept IVFIndexConfig but validators reject it for Chroma/Qdrant/Weaviate
  • Should be caught at instantiation, not runtime
  • Fix: Use narrower Union types per provider or add TypeGuard validation

3. PROVIDER IMPLEMENTATIONS

3.1 ChromaProvider

Strengths: Excellent error handling, comprehensive metadata flattening

Issue #6: Metadata Flattening Performance

  • src/upsonic/vectordb/providers/chroma.py:892-920
  • Recursive traversal on EVERY upsert operation
  • For 572-item batches, this adds significant overhead
  • Recommendation: Cache flattened schemas or implement lazy flattening

3.2 FaissProvider

Issue #7: Concurrency Safety Warning 🔴

  • Severity: HIGH - NOT thread-safe or process-safe
  • This should be surfaced at runtime, not just in docstrings
  • Fix: Add runtime warning on init or implement basic locking mechanism

Issue #8: JSON Serialization Type Loss

  • src/upsonic/vectordb/providers/faiss.py:399-404
  • Converts keys to strings for JSON, causing type loss on reload
  • Numeric field values become strings after reload
  • Fix: Store type metadata or use pickle instead of JSON

Issue #9: FAISS ID Overflow Risk

  • No validation that FAISS sequential IDs stay within int32 bounds
  • For collections with millions of items, overflow will cause cryptic errors
  • Fix: Add ID range validation and helpful error messages

Issue #10: Filter Performance at Scale

  • Python-level filtering scans ALL payloads in memory
  • For 10M+ items, this becomes prohibitively slow
  • Recommendation: Document this limitation prominently

3.3 QdrantProvider

Strengths: Smart ID normalization, comprehensive connection modes

Issue #11: Hash Collision Risk

  • src/upsonic/vectordb/providers/qdrant.py:156-165
  • Uses MD5 hash truncated to 8 bytes for ID normalization
  • Two different IDs could hash to the same integer (birthday paradox)
  • No collision detection
  • Fix: Add collision tracking or use full MD5 as string ID

4. KNOWLEDGE BASE REFACTOR

Strengths ✅

  • Intelligent auto-detection for loaders and splitters
  • Idempotent setup with proper locking
  • Comprehensive docstrings with examples
  • Processing statistics tracking

Critical Issues ⚠️

Issue #12: AsyncLock Creation Outside Async Context 🔴

  • src/upsonic/knowledge_base/knowledge_base.py:132
  • Creating asyncio.Lock() synchronously can cause issues across different event loops
  • Fix: Defer lock creation to setup_async() or use lazy initialization

5. POTENTIAL BREAKING CHANGES

High Impact:

  1. Method Renames: delete_by_id()delete() (aliases exist but not documented)
  2. Config Immutability: Frozen configs break code that modifies configs post-init
  3. ID Generation: Deterministic MD5 IDs may break existing collection compatibility
  4. New Exception Types: VectorDBConnectionError, UpsertError, SearchError require updated error handling

Recommendations:

  • Add migration guide documenting upgrade path from v1 → v2
  • Add recreate_if_exists=True flag example for rebuilding collections
  • Document deprecation timeline for old methods

6. SECURITY CONCERNS

Issue #13: File Path Traversal in FAISS 🔴

  • User-provided db_path trusted without validation
  • Could write outside intended directory via ../ paths
  • Fix: Add path validation or restrict to specific directories

Issue #14: API Key Exposure Risk

  • pydantic.SecretStr properly used but .get_secret_value() calls could leak in logs
  • Recommendation: Audit all logging statements to ensure secrets aren't captured

7. TESTING GAPS

  • Tests visible for: Chroma, FAISS, Qdrant, Milvus, PgVector
  • Missing: Pinecone, Weaviate comprehensive test coverage
  • Missing: Sync/async parity tests for all providers
  • Recommendation: Add integration tests for all 7 providers before merge

8. RECOMMENDATIONS

🔴 Critical (Must Fix Before Merge):

  1. Fix frozen model mutation pattern (Issues Added input box and button #3, Added icon #4)
  2. Fix AsyncLock creation (Issue This is a test comment #12)
  3. Add FAISS concurrency runtime warning (Issue Fixed high delay problem #7)
  4. Validate file paths (Issue how to configure profile? #13)

🟡 High Priority (Before Release):

  1. Implement instance-level ThreadPoolExecutor pool (Issue Added reset system #1)
  2. Add hash collision detection (Issue Error on each click #11)
  3. Fix FAISS JSON type loss (Issue Added send text with screenshot button #8)
  4. Add comprehensive tests for Pinecone/Weaviate

🟢 Medium Priority (Future Improvements):

  1. Optimize metadata flattening (Issue Added different profiles mode #6)
  2. Document FAISS filter performance limitations (Issue Not working with Mac OS #10)
  3. Add ID overflow protection (Issue Can this work with the Assistant API? #9)
  4. Create migration guide

Summary

This refactor delivers significant architectural improvements with async-first design, better abstractions, and enhanced capabilities. The code quality is generally high with good error handling and documentation.

However, several production-critical issues need addressing:

  • Concurrency safety gaps (FAISS)
  • Performance optimization opportunities
  • Edge case handling (hash collisions, ID overflow, file paths)
  • Config mutation workarounds suggesting design issues

Verdict: Approve with required fixes to critical issues before merge. The foundation is solid, but production readiness requires addressing the flagged concerns.

Great work on this ambitious refactor! 🚀

@claude
Copy link
Copy Markdown

claude bot commented Nov 10, 2025

PR Review: VectorDB v2 Refactor

Overview

This is a major architectural refactor introducing a comprehensive v2 design for vector database providers. The changes span 12,309 additions and 4,022 deletions across core RAG components.

Strengths

1. Excellent Architecture

  • Config-driven approach with Pydantic models (frozen, immutable) for type safety
  • Async-first design with proper sync wrappers using _run_async_from_sync()
  • Clean provider abstraction with comprehensive search capabilities
  • Strong connection lifecycle management

2. Strong Configuration System

  • Provider-specific configs extending BaseVectorDBConfig
  • Field validators for similarity thresholds and connection params
  • Support for multiple index types (HNSW, IVF, FLAT)
  • Enums for Mode, DistanceMetric, IndexType improve type safety

3. Good Error Handling

  • Custom exception hierarchy: VectorDBError, VectorDBConnectionError, SearchError, UpsertError
  • Consistent error raising across providers

Issues & Concerns

1. Potential Bugs

a) Race Condition in setup_async() (knowledge_base.py:473-565)

Between collection_exists() check and actual usage, another process could delete the collection. Consider validating collection health after setting _is_ready = True.

b) ID Normalization Collision Risk (qdrant.py:127-146)

Uses only first 8 bytes of MD5 hash for ID conversion. This creates collision risk at ~5 billion IDs. Consider using full hash or UUID namespace.

c) Null Byte Handling Inconsistency

Only handled in some providers. Ensure consistent handling across all providers.

2. Performance Concerns

a) FAISS Thread Safety Warning (faiss.py:66-69)

Critical: Implementation is NOT thread-safe. This should be prominently documented in user-facing docs and raise warnings in async contexts.

b) Blocking I/O in Async Methods (faiss.py:119-158)

File I/O operations are synchronous within async methods. Should use aiofiles or move to thread pool.

c) Memory Usage

  • Field indexes have unbounded growth for high-cardinality fields
  • Metadata stores kept fully in memory - problematic for large collections

3. Security Considerations

a) Path Traversal Risk (faiss.py:112)

User-provided paths need validation to prevent directory traversal. Add path sanitization with resolve() and bounds checking.

b) API Key Handling

Good use of SecretStr, but verify keys are never logged in info_log/debug_log calls.

4. Test Coverage

Positive:

  • Unit tests for each provider
  • Mock components for testing

Gaps:

  • No error path testing (connection failures, invalid configs)
  • No concurrency tests for async operations
  • No performance benchmarks
  • Limited hybrid search testing

5. Code Quality

  • Inconsistent error messages across providers
  • Magic numbers should be constants
  • Duplicate ID generation logic should be extracted to shared utility

Recommendations

High Priority

  1. Fix potential race condition in setup_async()
  2. Review ID normalization collision risk (consider 128-bit IDs)
  3. Add path validation for file-based providers
  4. Document FAISS blocking I/O behavior or make truly async
  5. Add comprehensive error path testing

Medium Priority

  1. Standardize error messages across providers
  2. Extract common ID generation to shared utility
  3. Add concurrency tests
  4. Document thread safety guarantees per provider
  5. Add memory profiling for large collections

Low Priority

  1. Define magic number constants
  2. Add performance benchmarks
  3. Improve hybrid search test coverage
  4. Add v1 to v2 migration guide

Overall Assessment

Quality: 4/5 stars

This is a well-architected refactor with strong design patterns. The async-first approach, config-driven architecture, and provider abstraction are excellent.

Main concerns:

  • Thread safety and async I/O patterns need clarification/fixes
  • Test coverage for error paths is insufficient
  • Path handling security issues
  • Performance implications of in-memory metadata

Recommendation: Approve with minor changes

Address high-priority items (especially async I/O and thread safety docs) before merging. Medium/low priority items can be follow-up issues.

Great work on this refactor!

@claude
Copy link
Copy Markdown

claude bot commented Nov 10, 2025

Pull Request Review: VectorDB V2 Refactor

Overview

This is a major architectural refactor that modernizes the vector database layer with significant improvements to code quality, maintainability, and functionality. The PR adds ~12,000 lines across 21 files, representing a substantial redesign of the vectordb and knowledge base systems.

✅ Strengths

1. Excellent Architecture & Design

  • Async-First Design: Proper async/await throughout with sync fallbacks using _run_async_from_sync() helper
  • Configuration Management: Strong use of Pydantic v2 with immutable configs (frozen=True) and proper validation
  • Provider Abstraction: Well-designed BaseVectorDBProvider with clear contracts
  • Type Safety: Comprehensive type hints with TYPE_CHECKING for conditional imports

2. Code Quality Improvements

  • Comprehensive Documentation: Excellent docstrings with usage examples, especially in knowledge_base.py:1-100
  • Error Handling: Proper custom exceptions (VectorDBConnectionError, UpsertError, etc.)
  • Logging: Consistent use of structured logging (info_log, debug_log, error_log)
  • Resource Management: Proper connection lifecycle with _is_connected state tracking

3. Production-Ready Features

  • Idempotent Operations: Knowledge base setup checks for existing collections
  • Health Monitoring: Collection health checks and diagnostics
  • Processing Stats: Tracks processing metadata for observability
  • Multiple Search Modes: Dense, full-text, and hybrid search capabilities

4. Testing Improvements

Test files show good structure with:

  • Mock components for isolation (MockEmbeddingProvider, MockChunker)
  • Comprehensive test scenarios (connection, CRUD, search operations)
  • Async test support with pytest.mark.asyncio

⚠️ Issues & Concerns

1. Critical: Missing Error Handling in Async Operations

The _ensure_connection() method has incomplete error handling with silent fallback to "auto-connection" assumption which is dangerous. Should raise VectorDBConnectionError if connection fails.

Recommendation: Add try-except and validate connection state after connect.

2. Performance: ThreadPoolExecutor Per Call

Location: vectordb/base.py:69-71 - Creating a new ThreadPoolExecutor for every sync call is expensive.

Recommendation: Use a module-level or instance-level executor, or encourage users to use async methods directly.

3. Security: API Keys in Logs

While SecretStr is used correctly in config, ensure debug logs don't accidentally print configs.

Recommendation: Add validation in logging utilities to never log SecretStr values.

4. Code Smells

a) Incomplete Implementation

Location: vectordb/providers/qdrant.py:674,1835

  • TODO: HANDLE SPARSE VECTORS IN THE LOOP CORRECTLY
  • TODO: HANDLE RERANKING!!!

Issue: Two critical TODOs in production code suggest incomplete features.

b) Test Configuration Validation

Location: tests/unit_tests/rag/vectordb/test_chroma_knowledge_base.py:289-302

Catching bare Exception makes tests fragile. Should catch specific exception type.

c) Empty Exception Handlers

Silent failures make debugging difficult. At minimum log exceptions.

5. Breaking Changes

The refactor changes several key interfaces:

  1. Context Manager Changes - Changed from vectordb.get_config_summary() to get_config_summary()['vectordb'] - may break existing code
  2. Configuration Structure - New config classes are immutable and strict (extra='forbid') - existing configurations using extra fields will fail

Recommendation:

  • Document breaking changes in PR description
  • Provide migration guide
  • Consider deprecation warnings for gradual transition

6. Test Coverage Gaps

  • Concurrent Operations: No tests for race conditions despite using asyncio.Lock
  • Connection Failure Recovery: Missing tests for reconnection scenarios
  • Large Dataset Handling: No tests for batch operations with 10k+ vectors
  • Hybrid Search: Tests only mock, don't test actual fusion logic

🔍 Minor Issues

1. Inconsistent Naming

  • vectordb vs vector_db used inconsistently

2. Documentation

  • Missing migration guide for V1 → V2
  • No performance benchmarks comparing V1 vs V2
  • Provider-specific limitations not documented

3. Dependencies

Added heavyweight dependencies (pgvector, sqlalchemy). Ensure they're optional for users not using pgvector.

📊 Metrics

  • Lines Added: ~12,000
  • Lines Removed: ~3,500
  • Net Change: +8,500 lines
  • Files Changed: 21
  • Test Files Updated: 4

🎯 Recommendations

High Priority

  1. Add comprehensive error handling in _ensure_connection()
  2. Resolve the two TODO items in Qdrant provider before merge
  3. Document breaking changes and provide migration guide
  4. Fix tests to catch specific exceptions, not bare Exception

Medium Priority

  1. Add reconnection logic for transient failures
  2. Add integration tests with real vector databases
  3. Add performance benchmarks to prevent regressions
  4. Optimize _run_async_from_sync() to reuse thread pool

Low Priority

  1. Standardize naming conventions
  2. Add docstring examples for all public methods
  3. Consider adding typing.Protocol for duck-typed interfaces

🎉 Verdict

This is excellent work that significantly improves the codebase architecture. The async-first design, strong typing, and comprehensive documentation are commendable.

Recommendation: Approve with minor changes

The issues identified are fixable and don't block the merge, but should be addressed before release to production. The breaking changes require documentation and possibly a major version bump.

Great job on this refactor! 🚀

@claude
Copy link
Copy Markdown

claude bot commented Nov 10, 2025

Pull Request Review: VectorDB v2 Refactor

Thank you for this comprehensive refactoring! Below is my detailed review.

✅ Strengths

1. Excellent Architecture Design

  • Async-first approach with BaseVectorDBProvider is solid for I/O-bound operations
  • Dual interface (async/sync) ensures backward compatibility
  • Configuration-driven design with immutable config objects
  • Comprehensive type hints (TypeVar, Literal, Optional)

2. Comprehensive Documentation

  • Detailed docstrings explaining the why, not just the what
  • Clear examples in KnowledgeBase class
  • Well-documented design philosophy

3. Strong Error Handling

  • Custom exception hierarchy (VectorDBConnectionError, UpsertError, SearchError)
  • Proper cleanup in setup_async with try-except-finally
  • Validation at initialization

4. Test Coverage

  • Integration tests for multiple providers (Chroma, Milvus, PGVector, Qdrant)
  • Good fixtures and mock components
  • Tests cover CRUD, search, and error conditions

⚠️ Potential Issues

1. CRITICAL: Async/Sync Method Inconsistency

Location: src/upsonic/vectordb/base.py:89-106

The connect_sync(), disconnect_sync(), and is_ready_sync() raise NotImplementedError but should use _run_async_from_sync() like other sync wrappers (see lines 217, 238, 253).

Impact: Any code calling these sync methods will fail.

2. Race Condition in Knowledge Base Setup

Location: src/upsonic/knowledge_base/knowledge_base.py:507-520

Window between connection and collection_exists check where another instance could create the collection.

3. Missing Async Implementation Checks

Code assumes all providers implement async methods without validation.

🚀 Performance Considerations

  1. ThreadPoolExecutor overhead (base.py:66-74): Creates new thread pool per call. Consider shared pool.
  2. Batching for large documents: Processing all chunks at once could cause memory issues. Need batch processing.
  3. Index optimization: No automatic optimization strategy defined.

🔒 Security Concerns

  1. CRITICAL - Secrets in Logs: Verify SecretStr fields never logged in plaintext
  2. HIGH - SQL Injection in PGVector: Ensure parameterized statements for all queries
  3. MEDIUM - Input Validation: Validate vector dimensions, IDs, metadata before passing to DBs

📊 Test Coverage

Good: Connection lifecycle, CRUD, search operations, Knowledge Base integration

Missing:

  • Concurrent operations
  • Large-scale stress tests (10K+ docs)
  • Connection failure recovery
  • Metadata edge cases
  • Async cancellation handling

📋 Checklist Before Merge

  • Fix connect_sync, disconnect_sync, is_ready_sync implementations
  • Review PGVector for SQL injection
  • Add concurrent operation tests
  • Verify no secret leakage in logs
  • Add performance benchmarks
  • Update CHANGELOG
  • Create v1→v2 migration guide

🎉 Conclusion

This is a high-quality refactoring with excellent architecture, documentation, and test coverage. Issues are mostly minor and easily addressable.

Recommendation: ✅ Approve with minor changes
Risk: 🟡 Medium - thorough integration testing recommended

Great work!

@claude
Copy link
Copy Markdown

claude bot commented Nov 10, 2025

PR Review: VectorDB V2 Refactoring

Overview

This is a comprehensive refactoring of the vector database layer that introduces a cleaner, more maintainable architecture. The changes span ~26,000 lines across 22 files.

Positive Aspects ✅

Architecture & Design

  1. Excellent async-first design with proper sync fallbacks
  2. Strong type safety using Pydantic configs with immutability
  3. Clear separation of concerns across providers
  4. Comprehensive search capabilities (dense, full-text, hybrid)
  5. Improved documentation and docstrings

Code Quality

  1. Consistent error handling with custom exceptions
  2. Backward compatibility via method aliases
  3. Smart auto-detection of loaders and splitters
  4. Good health monitoring and lifecycle management

Areas for Improvement 🔍

1. Configuration Complexity (Medium)

  • Config classes have many optional fields
  • Recommend: Add factory methods for common scenarios

2. Test Coverage (High)

  • Need integration tests for real provider connections
  • Consider property-based tests
  • Add test markers for database-dependent tests

3. Potential Bugs (Medium)

  • ThreadPoolExecutor creates new pool per call (base.py:69-71) - consider class-level pool
  • Frozen config bypass with object.setattr (config.py:326) - breaks immutability
  • _is_ready flag may need threading.Lock for sync access

4. Migration Path (High)

  • No migration documentation for v1 → v2
  • Need MIGRATION.md with examples
  • Consider deprecation warnings

Security ✅

  • Good: pydantic.SecretStr for API keys
  • Verify: Parameterized queries in PgVector
  • Check: Connection string logging

Performance ✅

  • Good: Batch operations and connection pooling
  • Recommend: Add v1 vs v2 benchmarks

Final Recommendation

Status: ⚠️ Conditional Approval

Before Merge:

  1. Wait for CI tests to pass
  2. Add migration guide (HIGH PRIORITY)
  3. Address frozen config bypass pattern
  4. Minor issues can be follow-up PRs

Risk: Medium - Well-structured but large refactoring. Main risk is breaking changes.


Excellent work! Strong architecture and code quality. 🚀

@claude
Copy link
Copy Markdown

claude bot commented Nov 11, 2025

Pull Request Review: VectorDB V2 Refactor

Overview

This is a major architectural refactor of the vector database layer with significant improvements to code quality, extensibility, and production-readiness.

Overall Assessment: Strong refactor with good architecture, but requires attention to a few key areas before merging.

Strengths

1. Excellent Architecture & Design

  • Async-First Approach with proper sync fallbacks
  • Unified Interface across all providers
  • Type Safety with Pydantic for configuration validation
  • Separation of Concerns between connection, index, and provider configs

2. Comprehensive Configuration System

  • Pydantic Validation with frozen, immutable configs
  • Provider-Specific Configs properly extend base config
  • Connection Flexibility (CLOUD, LOCAL, EMBEDDED, IN_MEMORY)
  • Well-designed index configurations (HNSW, IVF, FLAT)

3. Security Best Practices

  • SQL Injection Protection via SQLAlchemy parameterized queries
  • Secret Management with SecretStr
  • Schema Isolation for tenant support

4. Test Coverage

  • Comprehensive mocking with AsyncMock
  • Provider-Specific Tests for each provider
  • Integration Testing with Knowledge Base

Issues & Concerns

1. Error Handling

Issue: Bare except clause in knowledge_base.py around line 560-565 swallows all exceptions including KeyboardInterrupt

Fix: Use specific exception types instead of bare except

2. Code Quality

  • Type Annotations: Some methods missing return type annotations
  • Broad Exception Handling: Use specific exceptions instead of generic Exception

3. Documentation Gaps

  • Migration Guide: This is a breaking change - need V1 to V2 migration guide
  • Configuration Examples: Add more examples in docstrings

4. Testing

  • Error Path Coverage: Use specific exception types in pytest.raises()
  • Integration Tests: Consider adding Docker-based integration tests

5. Dependencies

Recommendation: Use restrictive version ranges to prevent breaking changes

Code Metrics

  • Lines Added: 18,034
  • Lines Deleted: 9,173
  • Net Change: +8,861
  • Test Coverage: Good

Recommendations

Before Merging (High Priority)

  1. Replace bare except with specific exception types
  2. Add missing type annotations
  3. Add migration guide
  4. Tighten dependency version constraints

Post-Merge (Medium Priority)

  1. Add integration tests with real databases
  2. Add connection retry logic
  3. Document configuration examples

Conclusion

Recommendation: APPROVE with minor changes

High-quality refactor that significantly improves the architecture. Issues are minor and can be addressed in 2-4 hours.

Great work! The new architecture will make Upsonic much more robust for production RAG applications.


Reviewed by: Claude Code
Date: 2025-11-11

@onuratakan onuratakan merged commit fe680c9 into master Nov 12, 2025
4 checks passed
@onuratakan onuratakan deleted the vectordb-v2 branch November 12, 2025 08:18
@claude claude bot mentioned this pull request Nov 13, 2025
@sentry
Copy link
Copy Markdown

sentry bot commented Nov 15, 2025

Issues attributed to commits in this pull request

This pull request was merged and Sentry observed the following issues:

DoganK01 pushed a commit that referenced this pull request Jan 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants