// I can't sign in#
Confirm you have a Discord account + you're a member of the Sage guild. /not-in-guild has the invite link. Sign-in requires Discord OAuth — there's no email / password path.
If sign-in completes but you land on a generic error, check your browser's third-party cookie setting. Auth.js stores the session in a same-site cookie that some strict browsers block. Either allow third-party cookies for the Sage domain, or switch to the default cookie policy.
Still stuck? Open /denied and click 'sign out' to clear the session, then retry from /login.
// my Discord avatar isn't showing on /account#
The avatar URL is persisted on the JWT at first sign-in. If you signed in before the JWT-avatar fix shipped, you'll see the gradient initial instead of the real picture.
Fix: sign out + sign in. The fresh JWT picks up the avatar URL from Discord's profile endpoint.
If you changed your Discord avatar recently, give it ~10 minutes — Sage's role cache TTL is the same window.
// my tier is wrong#
Two likely causes: cache lag, or you're missing the Discord role that maps to that tier. The cache is 10 minutes for positive results + 30 seconds for negative ('you're not in the guild') results.
Force a re-check: visit /not-in-guild (if you're shown that page) and click 'I joined — re-check', or sign out + sign in.
If the dashboard says member but you've been granted caller/oracle/admin in Discord, double-check the role mapping in /ops/config — the Discord role ID has to be in DISCORD_CALLER_ROLE_IDS (etc.) on the server side.
// I'm not seeing signals#
Check the venue filter chip at the top of /signals. If you're on polymarket-only and the recent fires were on kalshi, you'll see an empty state.
Check /ops/monitors (if you have access) — if signal-ingest is amber/red, the feed is stale + ops is investigating.
Verify your tier — visitors see a reduced-sampling feed; members see everything.
// Telegram says my code is invalid#
Codes expire 10 minutes after issuance. Generate a new one from /account/telegram.
Codes are single-use. If you accidentally pasted the same code twice (or if a teammate used your screen-shared code), the bot rejects the second attempt.
If the bot rejects a fresh code, the bot's link database may be paused — check the latest #status post in the Sage Discord. Falls in this bucket happen once or twice a quarter during deployments.
// the compose form's preview is offline#
The form's live preview hits /api/dashboard/market/preview, which forwards to the Sage backend. If the backend's market endpoint is degraded, the resolve block falls to 'preview offline' with the cached prefetched market (if any).
You can still fire the signal — the bot resolves the slug against the venue API at fire time. Don't wait on the preview to recover.
// the dashboard 502'd / showed 'sage backend' error#
Sage's read endpoints have 10-second cache + soft-fallback to mocks if they fail. A 502 typically means a write endpoint (compose, telegram link) couldn't reach Sage. Try again in 60s; if it persists, the Sage backend is degraded and ops is on it.
// nothing here matches my problem#
DM @ops in the Sage Discord with: what you did, what you expected, what actually happened, and the signal ID / page URL where you saw it. Ops triages within a business day.
If your problem looks security-related (suspicious signal patterns, possible account compromise, unexpected role changes), use the report-abuse doc instead — there's a private escalation path.
