بنقرة واحدة
incident-investigation
Use this skill to diagnose and resolve production incidents in VoxBento.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Use this skill to diagnose and resolve production incidents in VoxBento.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
Use this skill to evaluate proposed architecture changes against VoxBento's design principles.
Use this skill to find files, understand module ownership, and locate code in VoxBento.
Use this skill to analyse, audit, or modify HTTP and WebSocket routes in VoxBento. All routes live in `portal/routers/`.
Use this skill for security reviews of VoxBento code. Covers OWASP Top 10 and VoxBento-specific threat model.
Use this skill for tasks involving transcription providers, caption streaming, or the audio pipeline. Reference: `portal/transcription/`, [TRANSCRIPTION_MAP.md](../../context/TRANSCRIPTION_MAP.md).
Use this skill to analyse, audit, or modify database models, migrations, and CRUD helpers. Reference: `portal/models.py`, `portal/database.py`, `alembic/versions/`.
استنادا إلى تصنيف SOC المهني
| name | incident-investigation |
| description | Use this skill to diagnose and resolve production incidents in VoxBento. |
Use this skill to diagnose and resolve production incidents in VoxBento.
curl http://localhost:8000/healthz
# Expected: {"ok": true, "server": "fastapi", "mediamtx_ok": true}
curl http://localhost:9997/v3/paths/list
# Expected: 200 with paths array
docker-compose ps mediamtx
docker-compose logs mediamtx --tail=50
docker-compose logs portal --tail=100
# Look for: ERROR, WebSocketDisconnect, DB errors, transcription errors
# Check live booth count from admin panel: /admin/
# Or query DB directly:
docker-compose exec portal uv run python -c "
import asyncio
from portal.database import get_session, list_events
async def main():
async with get_session() as s:
events = await list_events(s)
for e in events:
print(e.slug, e.display_name)
asyncio.run(main())
"
Symptoms: "Go Live" button clicked but WHIP fails or spinner never resolves.
Diagnosis:
GET /api/events/{slug}/booths/{lang}/whip-url.
booth:state WS message.booth:join message sent successfully?/healthz → mediamtx_ok.MEDIAMTX_WHIP_BASE is browser-reachable (not Docker-internal URL).Fix: If not active interpreter: coordinator must reassign via booth:set-active. If MediaMTX down: docker-compose restart mediamtx.
Symptoms: Listener page loads but WHEP connection shows "disconnected" or audio is silent.
Diagnosis:
ingest_status == 'connected' in booth state.MEDIAMTX_WHIP_BASE in listener page source — must be browser-reachable HTTPS.whep-listener.js.GET http://localhost:9997/v3/paths/get/{event_slug}/{language_code}.alwaysAvailable: true on the path — if not set, WHEP fails when no publisher.Fix: Ensure _ensure_mediamtx_path was called. Manually: PATCH http://mediamtx:9997/v3/config/paths/patch/{path} with {"alwaysAvailable": true}.
Symptoms: Interpreters see connection status flickering; participants disappear and reappear.
Diagnosis:
WebSocketDisconnect.asyncio.Lock deadlock in portal/booth_state.py — portal becomes unresponsive._handle_* functions (portal logs).Fix: Restart portal if deadlocked. Fix token scope if 4003 (token was generated for different booth).
Symptoms: Booth is live, transcription enabled, but no captions appear.
Diagnosis:
active_workers state — portal logs should show worker start: Starting {provider} transcription worker for booth {booth_id}.docker-compose exec portal ffmpeg -rtsp_transport tcp -i rtsp://mediamtx:8554/{event_slug}/{language_code} -f null - -t 5.API key missing or Failed to decrypt.event.transcription_api_enabled is True for external providers.MAX_TOTAL_WORKERS (10) not exceeded: count workers in portal logs.db_booth.transcription_enabled, db_booth.transcription_provider, db_booth.transcription_model.Fix: Restart transcription worker via admin panel → booth detail → transcription settings (re-save). Or call stop_transcription_worker(booth_id) + start_transcription_worker(...) via debug endpoint if available.
Symptoms: /admin/login with correct password → still shows error.
Diagnosis:
ADMIN_PASSWORD env var is set and not empty.admin_token cookie is being set (DevTools → Application → Cookies).settings.effective_jwt_secret).is_admin=True — uses /login + user_token cookie.Symptoms: 500 errors on any page involving DB; portal logs show SQLAlchemy errors.
Diagnosis:
DATABASE_URL env var.uv run alembic current should show head.portal-data volume is mounted and has write permission.Fix: Run uv run alembic upgrade head. If corrupt SQLite: restore from backup volume.
# Restart portal only
docker-compose restart portal
# View live logs
docker-compose logs portal -f
# Force-stop all services
docker-compose down
# Full restart
docker-compose up -d
# Apply pending migrations manually
docker-compose exec portal uv run alembic upgrade head
# Check DB migration state
docker-compose exec portal uv run alembic current