ProductOSDocs

Troubleshooting

Troubleshooting

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

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

  • 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.

"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 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.
  • 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: the questions that come up before you have a specific problem.

Last reviewed 2026-09-22