AOSSIE-Org / AOSSIE-Org/DebateAI

Blank screen after bot debate completion and duplicate judge API calls

Ouverte
#215 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
TypeScript
Étoiles
84
Forks
198
Merge moyen
2 j 19 h
PR mergées (30 j)
30

Description

**Description**
After completing a debate against a bot, users experience two critical issues:
The judgment popup crashes with a ReferenceError, leaving users on a blank screen
The judge endpoint is called twice, wasting API quota and causing potential race conditions

**Steps** **to** **Reproduce**

**Issue 1: Blank Screen After Debate**
: Start a bot debate (any difficulty level)
: Complete all debate phases (opening statement, cross-examination, closing)
: Wait for judgment to complete
: Observe that the judgment popup crashes
: User is left on a blank screen with no way to navigate back

**Issue 2: Duplicate Judge Calls**
: Start and complete a bot debate
: Open browser DevTools → Network tab
: Observe two POST requests to /vsbot/judge endpoint
: Check backend logs - two separate judgment processes run

**Expected Behavior**

After debate completion:
: Judgment popup displays with scores and analysis
: User can view results
: Clicking "Close" navigates back to home page

Judge API calls:
: Judge endpoint called exactly once per debate
: No duplicate processing or API quota waste

**Actual Behavior**

**Blank screen issue:**
: Browser console shows: Uncaught ReferenceError: botDesc is not defined at JudgementPopup.tsx:184
: React error boundary triggered
: User stuck on blank screen

**Duplicate calls:**
: Backend logs show two sequential judge calls ~10 seconds apart
: Double API usage (problematic with rate-limited APIs like Gemini
```
[GIN] 2026/01/12 - 03:32:58 | OPTIONS "/vsbot/judge"
[GIN] 2026/01/12 - 03:32:59 | POST "/vsbot/judge" ← First call
[GIN] 2026/01/12 - 03:33:09 | POST "/vsbot/judge" ← Duplicate! (10s later)
```
**Root Cause Analysis**
Issue 1: Missing Prop Destructuring
File: frontend/src/components/JudgementPopup.tsx

**Problem**

- `botDesc` is defined in `JudgmentPopupProps` (line 77)
- But **not destructured** in component parameters (line 107)
- Line 184 tries to access an undefined variable

Issue 2: No Guard Against Duplicate Calls
File: frontend/src/Pages/DebateRoom.tsx

**Problem**
- judgeDebateResult function (line 577) has no guard against concurrent calls
- React's re-render or state updates can trigger multiple executions
- No ref to track if judging is already in progress

**Proposed Solution**
**Fix 1: Add Missing Prop Destructuring**
File: `frontend/src/components/JudgementPopup.tsx`
```
const JudgmentPopup: React.FC = ({
judgment,
userAvatar,
botAvatar,
botName,
userStance,
botStance,
botDesc, // ADD THIS
forRole,
againstRole,
localRole = null,
localDisplayName,
localAvatarUrl,
opponentDisplayName,
opponentAvatarUrl,
ratingSummary,
onClose={() => {
setShowJudgment(false);
navigate('/'); // ← ADD THIS
}}
```
**Fix 2: Add Navigation After Popup Close**
File: `frontend/src/Pages/DebateRoom.tsx`
```
JudgmentPopup
judgment={judgmentData}
userAvatar={userAvatar}
botAvatar={bot.avatar}
botName={debateData.botName}
userStance={state.userStance}
botStance={state.botStance}
botDesc={bot.desc}
onClose={() => {
setShowJudgment(false);
navigate('/'); // ← ADD THIS
}}
```

**Fix 3: Prevent Duplicate Judge Calls**
File: `frontend/src/Pages/DebateRoom.tsx `
**Add ref**
```
const judgingRef = useRef(false);
```

**Wrap judgeDebateResult function**
```
const judgeDebateResult = async (messages: Message[]) => {
// Prevent duplicate calls
if (judgingRef.current) {
console.log(" Judging already in progress, skipping duplicate call");
return;
}

judgingRef.current = true;

try {
console.log("Starting judgment with messages:", messages);
const { result } = await judgeDebate({
history: messages,
userId: debateData.userId,
});
// ... rest of existing code
} catch (error) {
// ... error handling
} finally {
judgingRef.current = false; // ← ADD THIS
}
};
```
After implementing fixes, verify:
- [ ] Complete a bot debate successfully
- [ ] Judgment popup displays without errors
- [ ] All scores and analysis show correctly
- [ ] Clicking "Close" navigates to home page
- [ ] Only ONE POST to `/vsbot/judge` in Network tab
- [ ] Backend logs show single judgment process
- [ ] No console errors in browser DevTools
- [ ] Works with different bot difficulty levels

@bhavik-mangla
I have identified and fixed the root causes for both issues, including the judgment popup crash and the duplicate judge API calls.
I would like to raise a Pull Request with the implemented fixes for review.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.