From 209a7235848c85a453a9a37a1ebbd6eea601d78e Mon Sep 17 00:00:00 2001 From: ajaysi Date: Mon, 9 Mar 2026 14:23:29 +0530 Subject: [PATCH] fix: avoid creating/initializing databases during user discovery get_all_user_ids now checks if DB file exists before calling get_session_for_user. This prevents get_engine_for_user from triggering init_user_database and creating tables for stale workspace folders. Without this fix, a read-only ID scan creates/initializes SQLite databases and default tables as a side effect, which can silently create fresh DBs for stale workspace folders and hide missing/corrupt-database states that discovery previously surfaced. --- backend/services/database.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/backend/services/database.py b/backend/services/database.py index 9500f039..28d49840 100644 --- a/backend/services/database.py +++ b/backend/services/database.py @@ -106,15 +106,22 @@ def get_all_user_ids() -> List[str]: canonical_user_id = workspace_id db = None try: - db = get_session_for_user(workspace_id) - if db: - onboarding_row = ( - db.query(OnboardingSession.user_id) - .order_by(OnboardingSession.updated_at.desc()) - .first() - ) - if onboarding_row and onboarding_row[0]: - canonical_user_id = str(onboarding_row[0]) + # Check if DB file exists before opening session to avoid creating/initializing DBs + db_path = get_user_db_path(workspace_id) + if not os.path.exists(db_path): + # No DB file exists, use workspace ID as fallback + canonical_user_id = workspace_id + else: + # DB file exists, try to resolve canonical user_id from DB + db = get_session_for_user(workspace_id) + if db: + onboarding_row = ( + db.query(OnboardingSession.user_id) + .order_by(OnboardingSession.updated_at.desc()) + .first() + ) + if onboarding_row and onboarding_row[0]: + canonical_user_id = str(onboarding_row[0]) except Exception as resolve_error: logger.debug( f"Could not resolve canonical user_id from DB for workspace {workspace_id}: {resolve_error}"