# Troubleshooting

> Common failure modes and how to fix them: auth, integrations, AI features, performance.

Source: https://productos.ca/documentation/guides/troubleshooting (last reviewed 2026-09-22)

This page is a triage list. Find the symptom, jump to the fix. If you don't see your issue, contact support with your workspace's slug and a short repro.

## Authentication & access

### "Redirected to /login despite signing in"

- Browser blocks third-party cookies. ProductOS uses a same-origin cookie, but some extensions still strip it, disable strict tracking-prevention for productos.ca.
- Session expired silently. Hard-refresh (`Ctrl+Shift+R`) to force a session refresh.

### "401 unauthorized on API calls that worked yesterday"

- Token rotated (someone hit "Revoke" on the token in **Settings → API Tokens**). Issue a new one.
- Token auto-revoked because the owner was demoted below the token's stored role, re-issue from a higher-role member.

### "403 forbidden, but my token used to work"

There are no per-endpoint scope strings. A token runs at the workspace role it was issued with (`commenter` by default), and every write route checks that role: a `commenter` token calling `POST` gets a 403 naming the missing capability. Demoting the issuer below the token's role revokes the token outright, which shows up as a 401 rather than a 403. Either re-promote the user or have an admin re-issue the token at the role you need.

## Integrations

### "GitHub PR doesn't link to my feature"

- ProductOS doesn't scan PR titles or bodies for sequence IDs. A PR is linked to a feature either by a Claude Code session (matched on the **branch name** the session was dispatched with) or by attaching the PR URL to the feature yourself.
- The repo must be in the GitHub App's install scope. Re-check **Settings → Integrations → GitHub** for the included repo list.
- Webhook handler failures are recorded on the installation: the GitHub App card in **Settings → Integrations** shows the last error under the connection.

### "Intercom conversations not syncing"

- Confirm the access token still works. Re-enter the token via **Settings → Integrations → Intercom → Connect & test**; the test calls Intercom's `/me` and should come back with the admin's name and email; if it fails, generate a new access token in Intercom and save it.
- Check the **Tag** option. Only conversations carrying that tag are imported (default `feedback`; empty means everything), and each run pulls at most **Max pages per sync** × 50 conversations. Widen the tag or raise the page cap under **Configure**, then **Sync now**; rows are dedup'd on the Intercom conversation ID, so re-syncs don't duplicate.

### "Linear status sync skips some transitions"

Linear sync is poll-based: a feature's status is re-mapped from the issue's workflow state on each sync, and there is no in-app way to register Linear's webhook yet, so changes arrive on the next run. Trigger one from **Settings → Integrations → Linear → Sync now** (it pulls up to **Max pages per sync** × 50 issues and updates existing features by Linear issue ID).

## AI features

### "Copilot chat says 'No API key configured. Add your Anthropic API key in Settings → AI.'"

You haven't saved your own key, and no hosted key covers the call. See [Bring your own Anthropic key](https://productos.ca/documentation/guides/ai/byo-anthropic-key).

### "AI features ran fine yesterday but error today"

Anthropic key rate-limited or rotated:

1. Check **Settings → AI**: is a key saved at all, and is it the one you expect? The field shows the saved key masked, with a show/hide toggle.
2. Hit a small test (the copilot chat input) and read the error in the toast; it carries Anthropic's message.
3. If the message mentions a rate limit (a 429 from Anthropic), your Anthropic account hit a tier limit, wait or upgrade your Anthropic plan.
4. If it says the key is invalid (a 401 from Anthropic), the key was rotated or revoked on Anthropic's side. Re-paste in ProductOS.

### "AI theme suggestions look wrong"

ProductSense's *Suggest missing links* check proposes theme links from the titles and descriptions it can see; rows that are just a title get weak matches. Run *Polish descriptions* from [ProductSense cleanup](https://productos.ca/documentation/guides/workflows/productsense-cleanup) first, then re-run *Suggest missing links*. The embedding-based `POST /api/ai/cluster-themes` endpoint groups feedback by cosine similarity instead (default threshold `0.62`, tunable in the request body) and is reachable only from an in-app session, not with API tokens.

## Performance

### "List endpoint feels slow on a large workspace"

- Add filters. `?status=new` is much faster than no filter.
- Use the export endpoint for full-dataset pulls. See [Pagination](https://productos.ca/documentation/api/v1/pagination).
- Pagination past `offset=10k` is slow by design, paginate by filter, not deep offset.

### "Dashboard slow to load"

- Trash old `wont-do` / `addressed` feedback you no longer need; rows in Trash are excluded from lists and counts.
- ProductSense's *Polish descriptions* check flags near-duplicate rows; merging them shrinks the working set.

## Data integrity

### "Feedback I trashed isn't in Trash"

Trashed rows stay in **Trash** until someone restores them or an admin/owner clicks **Delete permanently**; there is no automatic purge. If a row isn't there, it was permanently deleted. **Settings → Audit Log** (entity type `feedback`) shows who did it.

### "Sequence ID I expected (FEAT-000123) doesn't exist"

Sequence IDs are issued at row creation and **never reused**: even after hard delete. If `FEAT-000123` doesn't exist, the row was either hard-deleted or never created. Filter **Settings → Audit Log** by entity type `features` to confirm.

## Contact support

Email support@productos.ca, or use the in-app feedback button (`⌘/` / `Ctrl+/`). Include:

- Your workspace slug (shown under **Settings → Workspace**)
- A short repro (steps to reproduce)
- The `error.code` and `error.message` from any API error response you've seen

## Next

- [FAQ](https://productos.ca/documentation/guides/faq): the questions that come up before you have a specific problem.
