# Troubleshooting

> Fixes for sign-in, changes that are slow to appear, rejected pushes, unreachable knots, empty activity, and commits not linked to your account.

Most problems on Tangled come from one of three places: your account provider (sign-in), the delay before a change shows up in the web app, or the knot that hosts the repository (pushes). Each section below names the message you see and what to do.

## Sign-in fails

Tangled signs you in with atproto OAuth through your account provider. If you run your own PDS and sign-in fails or times out:

* Make sure the PDS clock is synced with NTP (`ntpd -qg`, then keep `ntpd` running). OAuth tokens are rejected when clocks drift.
* Raise the Node network timeout on the PDS: `NODE_OPTIONS="--network-family-autoselection-attempt-timeout=500"`.

## Asked to sign in again

Some actions need OAuth permissions that older sessions don’t have, for example webhooks, knot invites, creating an organization, reporting, or checking a repository before import. Tangled detects the missing scope and shows a **Sign in again** prompt. Signing in again grants the new scope; nothing is lost.

## ”Saved, but the appview has not caught up yet”

Your change was saved. It can take a few seconds for it to appear in the web app; if it takes longer than Tangled is willing to wait, it shows this message. Reload after a few seconds and the change appears. The same applies to “Deleted, but the appview has not caught up yet.”

If changes never appear, something is wrong on Tangled’s side; report it.

## Push rejected

The knot identifies you by matching the SSH key your client offers against the SSH keys published in the account of everyone allowed to push.

```sh
$ git push
knot: this ssh key doesn't match any key published by the accounts that may push here. Authorized: … If your agent offers several keys, add -o IdentitiesOnly=yes so it offers your registered key.
```

* Add the key under **Settings → SSH Keys**.

* If your SSH agent holds several keys, it may offer the wrong one first. Pin the right one:

  ```text
  Host knot.example.com
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
  ```

Other messages:

| Message                                                                               | Cause                                                                                                               |
| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `knot: you aren't authorized to push to this repository.`                             | Your key matched, but you aren’t the owner or a collaborator. See [Access and collaborators](/docs/guides/access/). |
| `knot: couldn't read the account records needed to check your ssh key, retry shortly` | The knot couldn’t reach an account provider. Retry.                                                                 |
| `knot: repository index is warming, retry shortly`                                    | The knot just started. Retry.                                                                                       |
| `knot: push exceeds configured size limit`                                            | The pack is larger than the knot allows. Split the push or ask the operator.                                        |

## Knot unreachable

Browsing code mostly keeps working when a knot is down, because the web app keeps its own copy for reading. Anything that has to reach the knot fails: pushing and cloning from it, creating repositories, opening issues, pull requests or comments (stored on the knot), merging, and changing collaborators. Recent pushes may not show up until the knot is back. Wait for the knot to return, or ask its operator; [Run a knot](/docs/self-hosting/knot/) has operator-side checks.

## Empty activity or commit heatmap

Your profile only counts commits whose author email is one of your **verified** emails or your DID.

1. Check `git log --format='%ae' | sort -u` in a repository you pushed to.
2. Add and verify that address under **Settings → Emails**, or set `git config user.email did:plc:yourdid` for future commits.

Counts refresh on their own once the email is verified; past commits don’t need rewriting.

## Commits not linked to your account

Same cause as above: the author email isn’t verified on your account. Verify it, or use your DID as the email.

If you expected a “verified signature” badge: the current frontend doesn’t show one yet, see [Signing commits](/docs/guides/signing-commits/).