From 276366d4217bd7bf6bc2ec2fc486813661f88923 Mon Sep 17 00:00:00 2001 From: Akshit Date: Sat, 10 Jan 2026 16:31:12 +0530 Subject: [PATCH 1/4] github-verification-stuck-fixed --- backend/app/services/auth/verification.py | 1 + backend/integrations/discord/cogs.py | 43 ++++++++++++++++------- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/backend/app/services/auth/verification.py b/backend/app/services/auth/verification.py index cbfa156c..e666b1ce 100644 --- a/backend/app/services/auth/verification.py +++ b/backend/app/services/auth/verification.py @@ -36,6 +36,7 @@ async def create_verification_session(discord_id: str) -> Optional[str]: """ supabase = get_supabase_client() + await cleanup_expired_tokens() _cleanup_expired_sessions() token = str(uuid.uuid4()) diff --git a/backend/integrations/discord/cogs.py b/backend/integrations/discord/cogs.py index 64fd0b7f..34c51a97 100644 --- a/backend/integrations/discord/cogs.py +++ b/backend/integrations/discord/cogs.py @@ -3,6 +3,7 @@ import discord from discord import app_commands from discord.ext import commands, tasks +from datetime import datetime, timezone from app.agents.devrel.onboarding.messages import ( build_encourage_verification_message, @@ -129,18 +130,36 @@ async def verify_github(self, interaction: discord.Interaction): return if user_profile.verification_token: - embed = discord.Embed( - title="⏳ Verification Pending", - description="You already have a verification in progress.", - color=discord.Color.orange() - ) - embed.add_field( - name="What to do", - value="Please complete the existing verification or wait for it to expire (5 minutes).", - inline=False - ) - await interaction.followup.send(embed=embed, ephemeral=True) - return + expires_at = user_profile.verification_token_expires_at + is_expired = False + + if expires_at: + if isinstance(expires_at, str): + expires_at_dt = datetime.fromisoformat(expires_at) + else: + expires_at_dt = expires_at + + if expires_at_dt.tzinfo is None: + expires_at_dt = expires_at_dt.replace(tzinfo=timezone.utc) + + now_utc = datetime.now(timezone.utc) + + if expires_at_dt < now_utc: + is_expired = True + + if not is_expired: + embed = discord.Embed( + title="⏳ Verification Pending", + description="You already have a verification in progress.", + color=discord.Color.orange() + ) + embed.add_field( + name="What to do", + value="Please complete the existing verification or wait for it to expire (5 minutes).", + inline=False + ) + await interaction.followup.send(embed=embed, ephemeral=True) + return session_id = await create_verification_session(str(interaction.user.id)) if not session_id: From efb6913815291d03283937cad29b3d93184110fb Mon Sep 17 00:00:00 2001 From: Akshit Date: Mon, 12 Jan 2026 23:12:40 +0530 Subject: [PATCH 2/4] fixed restart indexing from pending --- .../app/services/codegraph/repo_service.py | 19 +++++++++---------- backend/integrations/discord/cogs.py | 7 +++---- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/backend/app/services/codegraph/repo_service.py b/backend/app/services/codegraph/repo_service.py index eba4fca8..d6cbd188 100644 --- a/backend/app/services/codegraph/repo_service.py +++ b/backend/app/services/codegraph/repo_service.py @@ -68,22 +68,21 @@ async def index_repo(self, repo_input: str, discord_id: str) -> Dict[str, Any]: "status": "error", "message": f"Repository already indexed. Graph: `{repo_data['graph_name']}`" } - elif status == 'pending': - return { - "status": "error", - "message": "Repository indexing in progress. Please wait." - } - # If failed, we'll allow re-indexing by updating the existing record - - # Update existing failed record - logger.info(f"Updating existing failed record for {repo_info['full_name']}") + + # if status is pending or faild --> restart indexing + logger.info( + f"Restarting indexing for {repo_info['full_name']} " + f"(previous status: {status})" + ) + + logger.info(f"Updating existing record for {repo_info['full_name']}") await self.supabase.table("indexed_repositories").update({ "indexing_status": "pending", "last_error": None, "updated_at": datetime.now().isoformat() }).eq("id", repo_data['id']).execute() else: - # Insert new record + # Insert new record (new repository) logger.info(f"Creating new record for {repo_info['full_name']}") await self.supabase.table("indexed_repositories").insert({ "repository_full_name": repo_info['full_name'], diff --git a/backend/integrations/discord/cogs.py b/backend/integrations/discord/cogs.py index 34c51a97..c022e311 100644 --- a/backend/integrations/discord/cogs.py +++ b/backend/integrations/discord/cogs.py @@ -218,7 +218,8 @@ async def index_repository(self, interaction: discord.Interaction, repository: s title="🔄 Indexing Repository", description=( f"Indexing `{repository}`...\n\n" - "This typically takes 5-30 minutes depending on repository size." + "⏳ Note: For large repositories, indexing can take 30-35 minutes." + "Please wait until the process completes." ), color=discord.Color.blue() ) @@ -271,7 +272,7 @@ async def _run_index_and_update(): error_msg = result.get("message", "Unknown error") error_embed = discord.Embed( title="❌ Indexing Failed", - description=f"Could not index `{repository}`", + description=f"Indexing did not complete `{repository}`", color=discord.Color.red() ) error_embed.add_field( @@ -283,8 +284,6 @@ async def _run_index_and_update(): tip = None if "already indexed" in error_msg.lower(): tip = "This repository is already indexed! You can query it directly." - elif "pending" in error_msg.lower(): - tip = "Indexing is in progress. Check status with `/list_indexed_repos`" if tip: error_embed.add_field( From e48d281b0f1ed648a4ad062b31a688e84d9c4822 Mon Sep 17 00:00:00 2001 From: Akshit Date: Wed, 14 Jan 2026 15:57:01 +0530 Subject: [PATCH 3/4] fixed typo --- backend/app/services/codegraph/repo_service.py | 2 +- backend/integrations/discord/cogs.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/app/services/codegraph/repo_service.py b/backend/app/services/codegraph/repo_service.py index d6cbd188..5c215532 100644 --- a/backend/app/services/codegraph/repo_service.py +++ b/backend/app/services/codegraph/repo_service.py @@ -69,7 +69,7 @@ async def index_repo(self, repo_input: str, discord_id: str) -> Dict[str, Any]: "message": f"Repository already indexed. Graph: `{repo_data['graph_name']}`" } - # if status is pending or faild --> restart indexing + # if status is pending or failed --> restart indexing logger.info( f"Restarting indexing for {repo_info['full_name']} " f"(previous status: {status})" diff --git a/backend/integrations/discord/cogs.py b/backend/integrations/discord/cogs.py index c022e311..03b59496 100644 --- a/backend/integrations/discord/cogs.py +++ b/backend/integrations/discord/cogs.py @@ -218,7 +218,7 @@ async def index_repository(self, interaction: discord.Interaction, repository: s title="🔄 Indexing Repository", description=( f"Indexing `{repository}`...\n\n" - "⏳ Note: For large repositories, indexing can take 30-35 minutes." + "⏳ Note: For large repositories, indexing can take 30-35 minutes.\n" "Please wait until the process completes." ), color=discord.Color.blue() From 2c38e0997943ee0e19d963339ca3177fbbee4d96 Mon Sep 17 00:00:00 2001 From: Akshit Date: Wed, 14 Jan 2026 16:13:26 +0530 Subject: [PATCH 4/4] fix: treat missing expiry as expired --- backend/integrations/discord/cogs.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/backend/integrations/discord/cogs.py b/backend/integrations/discord/cogs.py index 03b59496..8fa14434 100644 --- a/backend/integrations/discord/cogs.py +++ b/backend/integrations/discord/cogs.py @@ -147,6 +147,10 @@ async def verify_github(self, interaction: discord.Interaction): if expires_at_dt < now_utc: is_expired = True + else: + # token exists but no expiry → treat as expired + is_expired = True + if not is_expired: embed = discord.Embed( title="⏳ Verification Pending",