Post Stress-Test · Testers: Menchie Lobo, Niharika Arun · April 22, 2026
≥ 1% for testing and was never restored. Comment in code even says so.- s.get("segment_completeness_score", 0) >= 1 # Lowered to 1% for testing + s.get("segment_completeness_score", 0) >= 70 # Align with frontend threshold
score >= 70 check in CompletenessResult.tsx:30.
retryCount >= 3 && !isLastSegment. The !isLastSegment guard intentionally prevents the button on Segment 2 — the intent was likely to force completion, but instead it creates an inescapable trap.- {retryCount >= 3 && !isLastSegment && ( + {retryCount >= 3 && ( <button onClick={onProceed}> - Continue Anyway + {isLastSegment ? "Submit Anyway" : "Continue Anyway"} </button> )}
calculate_segment_completeness() evaluates the transcript against all target categories regardless of whether questions were actually asked/answered.skipped_categories as an argument to calculate_segment_completeness()skipped_categories as a JSON column on the interview_segments table for auditabilityMIN_CONVERSATION_AGE = 5 * 60 * 1000 (5 minutes) — silence detection is completely disabled for the first 5 minutes of a session. If a session stalls before that mark, auto-end can never trigger.- const MIN_CONVERSATION_AGE = 5 * 60 * 1000; // 5 min minimum before auto-end triggers + const MIN_CONVERSATION_AGE = 90 * 1000; // 90s minimum — enough to prevent false triggers at start
endSegment() automatically rather than leaving the user in a blank session.
SEGMENT_COMPLETE signal in the system prompt is being triggered too aggressively before all categories are covered.SEGMENT_COMPLETE signals if fewer than N categories appear in the transcriptinterview_segments.py at lines 100 and 162, but the live ElevenLabs agents on the dashboard may have outdated prompts that predate this guardrail. Code in repo ≠ what's deployed.resultsLocked boolean state — set to true the moment completion data is receivedresultsLocked === true, stop all polling intervals immediately (in the state update's effect)useEffect cleanup on the polling interval that runs when the results view becomes visiblelastSpokeAtRef.current !== null. During topic transitions the AI resets its state (or reconnects), which may clear this ref — causing the button to disappear even though the AI had already spoken.- {elapsedSeconds >= 180 && lastSpokeAtRef.current !== null && ( + {elapsedSeconds >= 180 && hasAISpoken && ( // hasAISpoken: boolean state, set once, never reset
hasAISpoken boolean state — set to true the first time the AI speaks, and never reset. Unlike a ref, this guarantees the button stays visible through transitions.
all_complete flag never fires correctly due to the 1% threshold, so the email trigger never runs. (2) Even with Fix #1 applied, the Resend webhook is likely gated on status = 'completed' (100% both segments) rather than any "final" session state.all_complete handler in interviews.py — don't rely solely on the webhook which may have conditions we can't easily debugstatus = 'completed' to status IN ('completed', 'partially_complete') or on any session state that includes all_complete = trueELEVENLABS_AGENT_SEGMENT_2 defaults to a hardcoded fallback agent ID (agent_9101kms0edweeyqtgrw2n9n7h2bw). If the environment variable isn't set in production, it silently uses this default — which may not be correctly configured.ELEVENLABS_AGENT_SEGMENT_2 is set in production env varsagent_9101kms0edweeyqtgrw2n9n7h2bw is configured with the Work Style scriptlogger.info(f"Segment 2 agent: {segment_2_agent_id}") for easier future debugging| # | Fix | Priority | File | Effort |
|---|---|---|---|---|
01 |
False "All Done!" at low scores | P0 | routes/interviews.py:468 |
S |
02 |
"Continue Anyway" missing on last segment | P0 | CompletenessResult.tsx:211 |
S |
03 |
Skipped questions penalize score | P1 | interview_segments.py:450 |
M |
04 |
Silence detection fires at 11s | P0 | ElevenLabs Dashboard + prompts |
S |
05 |
Zombie sessions — auto-end disabled 5min | P0 | SegmentedVoiceInterview.tsx:41 |
S |
06 |
Premature termination — misses Tools/Frameworks | P1 | interview_segments.py + Dashboard |
M |
07 |
Language guardrail broken (Hindi/Tagalog) | P1 | interview_segments.py:100,162 |
S |
08 |
Results screen flashes / fails to load | P0 | SegmentedVoiceInterview.tsx:603 |
M |
09 |
"End Segment" button disappears in transitions | P1 | SegmentedVoiceInterview.tsx:1227 |
S |
10 |
No confirmation emails on completion | P1 | interviews.py + Resend config |
M |
11 |
Verify Segment 2 agent wiring | P2 | interview_segments.py:120 + env vars |
S |
| 11 fixes total | 5× P0 · 5× P1 · 1× P2 | 7× Small · 3× Medium · 0× Large | ||
S < 1 hour M 1–4 hours L 4+ hours