Date: 2025-10-30 Environment: Vercel Production (agora-federico-de-pontes-projects.vercel.app) Bypass Key: wmjm5N0fHASG9xaOoT2bGEq6pBqqsERW Tester: Claude Code
The application cannot handle any chat requests due to a filesystem compatibility issue between the backend code (designed for traditional servers) and Vercel's serverless environment (read-only filesystem).
Status: 🔴 PRODUCTION BLOCKER - App is deployed but non-functional
| Category | Tests Run | Passed | Failed | Status |
|---|---|---|---|---|
| Infrastructure | 2 | 2 | 0 | ✅ PASS |
| Chat Endpoints | 2 | 0 | 2 | ❌ FAIL |
| Agents | 3 | 0 | 3 | ❌ FAIL |
| BYOK | N/A | N/A | N/A | ⏸️ BLOCKED |
| Frontend | N/A | N/A | N/A | ⏸️ BLOCKED |
Overall: 2/7 tests passing (28.6%)
Endpoint: GET /api/health
Request:
curl -H "x-vercel-protection-bypass: wmjm5N0fHASG9xaOoT2bGEq6pBqqsERW" \
"https://agora-federico-de-pontes-projects.vercel.app/api/health"Response (Status: 200):
{
"status": "healthy",
"service": "agora-backend",
"version": "0.3.0",
"mode": "production",
"platform": "vercel-serverless",
"dependencies": {
"supabase": "configured",
"openai": "configured"
},
"endpoints": {
"chat": "/api/chat",
"chat_stream": "/api/chat-stream",
"agents": "/api/agents",
"keys": "/api/keys"
}
}Result: ✅ PASS
- Endpoint accessible
- Returns correct JSON structure
- All dependencies configured
- Version info correct
Endpoint: GET /api/agents
Request:
curl -H "x-vercel-protection-bypass: wmjm5N0fHASG9xaOoT2bGEq6pBqqsERW" \
"https://agora-federico-de-pontes-projects.vercel.app/api/agents"Response (Status: 200):
{
"agents": [
{
"name": "paper_writer",
"description": "Writes academic-style paragraphs and summaries",
"model": "gpt-4o-mini",
"type": "role"
},
{
"name": "shopper",
"description": "Finds product information and shopping recommendations",
"model": "gpt-4o-mini",
"type": "custom"
},
{
"name": "research_swarm",
"description": "Multi-agent research team",
"model": "gpt-4o-mini",
"type": "swarm"
}
],
"count": 3
}Result: ✅ PASS
- Endpoint accessible
- Returns 3 agents (paper_writer, shopper, research_swarm)
- Correct JSON structure
Endpoint: GET /api/chat-stream
Request:
curl -N -H "x-vercel-protection-bypass: wmjm5N0fHASG9xaOoT2bGEq6pBqqsERW" \
"https://agora-federico-de-pontes-projects.vercel.app/api/chat-stream?query=Hello&agent_name=paper_writer"Response (Status: 200, but with error):
data: {"type": "start", "session_id": "fe874012-3f0c-4e2c-bca2-91c2ba180891", "agent": "paper_writer"}
data: {"type": "error", "content": "[Errno 30] Read-only file system: 'agents'"}
Result: ❌ FAIL
- SSE connection established ✅
- Start event sent ✅
- Critical error:
Read-only file system: 'agents'❌ - No chat response generated ❌
Root Cause: Code attempts to create directories for SQLite databases (agents/{agent_name}/memory.db) but Vercel serverless has read-only filesystem except /tmp.
Affected Code: api/_lib/core/memory.py:16
self.db_path = Path(f"agents/{agent_name}/memory.db")
self.db_path.parent.mkdir(parents=True, exist_ok=True) # ❌ FAILSEndpoint: POST /api/chat
Request:
curl -X POST -H "Content-Type: application/json" \
-H "x-vercel-protection-bypass: wmjm5N0fHASG9xaOoT2bGEq6pBqqsERW" \
-d '{"query": "Hello", "agent_name": "paper_writer"}' \
"https://agora-federico-de-pontes-projects.vercel.app/api/chat"Response (Status: 200, but with error):
{"error": "[Errno 30] Read-only file system: 'agents'"}Result: ❌ FAIL
- Same error as SSE streaming
- Both endpoints completely broken
All agent tests blocked by filesystem error. Cannot verify:
- ❌ paper_writer functionality
- ❌ shopper functionality
- ❌ research_swarm functionality
Cannot test BYOK endpoints because:
- Chat must work to verify keys are used
- All chat endpoints currently broken
Endpoints Not Tested:
POST /api/keys/saveGET /api/keys/listDELETE /api/keys/{provider}GET /api/keys/test/{provider}
Cannot test frontend because backend chat is broken:
- Cannot send messages
- Cannot receive responses
- Cannot verify UI/UX flows
What's Happening:
- Backend code (from
api/_lib/core/memory.py) attempts to create SQLite databases for agent memory - Code tries:
Path(f"agents/{agent_name}/memory.db").parent.mkdir() - Vercel serverless environment has read-only filesystem (except
/tmp) - Operation fails with:
[Errno 30] Read-only file system
Why This Happens:
- Backend was originally designed for Render/Docker (persistent filesystem)
- Code was migrated to Vercel without adapting to serverless constraints
- Serverless functions are stateless and cannot persist local files
Change:
# api/_lib/core/memory.py
self.db_path = Path(f"/tmp/agents/{agent_name}/memory.db") # ✅ WritablePros:
- Quick fix (5 minutes)
- Minimal code changes
Cons:
- Memory resets between cold starts
- Not truly persistent
- Each serverless instance has separate
/tmp
Change: Store agent memory in Supabase PostgreSQL instead of SQLite
Pros:
- ✅ Truly persistent across invocations
- ✅ Shared across all serverless instances
- ✅ Proper production solution
- ✅ Already have Supabase configured
Cons:
- Requires more code changes (2-3 hours)
- Need to create database tables
- Need to adapt SQL queries
Change: Make memory optional, run agents without context
Pros:
- Fastest fix (2 minutes)
- Gets chat working immediately
Cons:
- ❌ Agents can't remember conversation context
- ❌ Degraded user experience
- ❌ Not production-quality
- Critical: Users cannot use the chat functionality at all
- Severity: Complete feature failure
- Workaround: None available
- Cannot launch to users
- Cannot demo the product
- Cannot gather feedback
- Cannot test in production
- Implement Option 2 (Supabase for memory) ⭐ RECOMMENDED
- Create
chat_sessionsandchat_messagestables - Adapt memory.py to use Supabase
- Redeploy and test
- Create
OR
- Implement Option 1 (/tmp quick fix) if need to ship fast
- Update path to
/tmp - Document limitation
- Plan migration to Supabase
- Update path to
- Add integration tests that catch this type of issue
- Set up staging environment to test before production
- Add filesystem access tests to CI/CD
- Migrate all state to Supabase (already planned in Phase 2)
- Add proper session management
- Implement real authentication (currently mock)
Due to the filesystem error, we couldn't verify:
- ❌ Agent responses (quality, accuracy, format)
- ❌ SSE streaming performance
- ❌ BYOK key usage
- ❌ Session persistence
- ❌ Error handling for invalid inputs
- ❌ Frontend integration
- ❌ Multi-user scenarios
- ❌ Rate limiting
- ❌ Concurrent requests
Coverage: ~10% of intended functionality tested
| Endpoint | Response Time | Status |
|---|---|---|
| /api/health | ~150ms | ✅ Good |
| /api/agents | ~200ms | ✅ Good |
| /api/chat-stream | ~1.2s (to error) | ❌ Fails |
| /api/chat | ~1.5s (to error) | ❌ Fails |
- Not measurable due to errors
- ✅ Deployment protection working correctly
- ✅ Bypass key required for access
⚠️ Bypass key in plain text (secure via secrets manager in CI/CD)
- ✅ CORS headers present
- ✅ Error messages don't leak sensitive info
- ⏸️ Auth not implemented yet (planned Phase 2)
- Fix filesystem issue (Option 1 or 2 above)
- Re-run all tests once fix is deployed
- Test all 3 agents with real queries
- Test BYOK system end-to-end
- Test frontend integration in browser
- Add automated tests for serverless compatibility
- Set up staging environment
- Implement real Supabase Auth
- Add usage tracking
The application is successfully deployed but completely non-functional due to a filesystem compatibility issue.
✅ What's Good:
- Infrastructure is solid
- Deployment pipeline works
- Health/agents endpoints functional
- Documentation complete
- CI/CD in place
❌ What's Broken:
- Core chat functionality doesn't work
- All agents fail
- Cannot test 90% of features
Verdict: 🔴 NOT PRODUCTION READY
Time to Fix:
- Quick fix (/tmp): 30 minutes
- Proper fix (Supabase): 2-3 hours
Recommended Action: Implement Supabase-based memory storage, then re-test everything.
Generated: 2025-10-30T15:05:00Z Tester: Claude Code Environment: Vercel Production Status: ❌ CRITICAL ISSUES FOUND