Troubleshooting
Common issues and how to resolve them.
#OAuth Errors
#"Invalid redirect URI"
The redirect URI in your OAuth request doesn't match any registered URI.
Fix: Ensure the redirect URI in your app exactly matches one in Settings > OAuth Clients. URIs must match protocol, host, port, and path.
#"Invalid client ID"
The client ID doesn't exist or was deleted.
Fix: Verify the client ID in Settings > OAuth Clients. If it was deleted, register a new client.
#"PKCE code verifier mismatch"
The code verifier sent during token exchange doesn't match the code challenge from authorization.
Fix: The code verifier wasn't stored correctly between authorization redirect and callback. If using the SDK, call handleRedirectCallback() in the same browser session that initiated login.
#"DPoP proof invalid"
The DPoP proof header is missing, malformed, or signed with the wrong key.
Fix: If using the SDK, this is handled automatically. If implementing manually, ensure:
- The DPoP header contains a valid JWT
- The JWT is signed with the same key used during token exchange
- The
htmandhtuclaims match the request method and URL
#GraphQL Errors
#"Cannot query field X on type Y"
The field doesn't exist on the queried type.
Fix: Check your query against the schema in GraphiQL. Common causes:
- Typo in field name
- Field exists on a different type (use inline fragments for unions)
- Lexicon wasn't imported yet
#"Variable $X of type Y used in position expecting Z"
Type mismatch between your variable declaration and how it's used.
Fix: Check variable types in your query definition. Common issues:
- Using
Stringinstead ofDateTimefor date fields - Missing
!for required variables - Using wrong scalar type
#"Record not found"
The record you're trying to update or delete doesn't exist.
Fix: Verify the record key (rkey). Query for the record first to confirm it exists.
#Jetstream Issues
#Records not appearing after creation
Records created via mutation should appear immediately due to optimistic indexing. If they don't:
Check:
- Was the mutation successful? Check the response for errors.
- Is the record in the user's PDS? Use
goat repo getto verify. - Is Jetstream connected? Check the logs for connection errors.
#Old records missing
Records created before you deployed Quickslice won't appear until backfilled.
Fix: Trigger a backfill from the admin UI or wait for the scheduled backfill to complete.
#Backfill stuck or slow
Check:
- Memory usage - backfill is memory-intensive. See Deployment Guide for tuning.
- Network connectivity to PDS endpoints
- Logs for specific PDS errors
#Database Issues
#"Database is locked"
SQLite can't acquire a write lock. Caused by long-running queries or concurrent access.
Fix:
- Ensure only one Quickslice instance writes to the database
- Check for stuck queries in logs
- Restart the service if needed
#Disk space full
SQLite needs space for WAL files and vacuuming.
Fix: Expand your volume. See your hosting platform's documentation.
#Debugging Tips
#Check if records are being indexed
Query for recent records:
query {
xyzStatusphereStatus(first: 5, sortBy: [{ field: indexedAt, direction: DESC }]) {
edges {
node {
uri
indexedAt
}
}
}
}
#Verify OAuth is working
Query the viewer:
query {
viewer {
did
handle
}
}
Returns null if not authenticated. Returns user info if authenticated.
#Inspect the GraphQL schema
Use GraphiQL at /graphiql to explore types, queries, and mutations. The Docs panel shows all fields and types.
#Check Lexicon registration
Use the MCP endpoint or admin UI to list registered Lexicons:
query {
__schema {
types {
name
}
}
}
Look for types matching your Lexicon NSIDs (e.g., XyzStatusphereStatus).
#FAQ
#"Why aren't my records showing up?"
- Just created? Should appear immediately. Check mutation response for errors.
- Created before deployment? Needs backfill. Trigger from admin UI.
- Different Lexicon? Ensure the Lexicon is registered in your instance.
#"Why is my mutation failing?"
- 401 Unauthorized? Token expired or invalid. Re-authenticate.
- 403 Forbidden? Trying to modify another user's record.
- 400 Bad Request? Check input against Lexicon schema. Required fields missing?
#"How do I check what Lexicons are loaded?"
Go to Settings in the admin UI, or query via MCP:
claude mcp add --transport http quickslice https://yourapp.slices.network/mcp
# Then ask: "What lexicons are registered?"