HKUDS/DeepTutor · warning · HTTPException

Entry not found

Error message

Entry not found

What it means

404 from GET /dashboard/activity/{entry_id} (dashboard router) when the session store has no session with that id (get_session_with_messages returns None). Activity entries are sessions; a missing session means the entry does not exist.

Source

Thrown at deeptutor/api/routers/dashboard.py:84

@router.post("/suggestions/refresh")
async def refresh_starter_suggestions():
    """Generate a new set now. Backs the reroll control.

    Synchronous, unlike the read: a human clicked and is waiting for a
    different set.
    """
    from deeptutor.services.suggestions import refresh_suggestions

    result = await refresh_suggestions()
    return {**result.to_dict(), "stale": False}


@router.get("/{entry_id}")
async def get_activity_entry(entry_id: str):
    store = get_session_store()
    session = await store.get_session_with_messages(entry_id)
    if session is None:
        raise HTTPException(status_code=404, detail="Entry not found")

    capability = str(session.get("capability") or "chat")
    return {
        "id": session.get("session_id"),
        "type": capability.replace("deep_", ""),
        "capability": capability,
        "title": session.get("title"),
        "timestamp": session.get("updated_at", session.get("created_at")),
        "content": {
            "messages": session.get("messages", []),
            "active_turns": session.get("active_turns", []),
            "status": session.get("status", "idle"),
            "summary": session.get("compressed_summary", ""),
        },
    }

View on GitHub (pinned to 3e82f13042)

Solutions

  1. Confirm the session exists in the session store (SQLite)
  2. If the store was reset, regenerate activity by running new sessions
  3. Drop stale entries from the dashboard view on 404
Defensive patterns

Strategy: try-catch

Validate before calling

ids = {e['id'] for e in client.get('/dashboard/activity').json()['entries']}
if entry_id not in ids:
    skip()

Try / catch

resp = client.get(f'/dashboard/{entry_id}')
if resp.status_code == 404:
    prune_from_dashboard(entry_id)

Prevention

When it happens

Trigger: GET /dashboard/{entry_id} with an unknown, deleted, or expired session id; sessions stored in a fresh/reset SQLite store.

Common situations: Session retention cleaned up old rows, database reset between environments, or a dashboard holding ids from a previous deployment.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of HKUDS/DeepTutor@3e82f13042 (2026-08-27). Data as JSON: /api/errors/ae12f4d5e65ceb50. Report an issue: GitHub.