Documentation Index
Fetch the complete documentation index at: https://docs.roboticks.io/llms.txt
Use this file to discover all available pages before exploring further.
GitHub App Troubleshooting
Most GitHub App issues fall into four buckets: webhooks failing, Check Runs not posting, the installation in an unexpected state, or token / rate-limit problems. Work through this page in order — each section has a fast diagnostic and a fix.The fastest universal diagnostic: Roboticks dashboard → Settings → Integrations → GitHub App → Webhook log. It shows every delivery, its HTTP response, and the downstream job. If you can’t see a delivery for an action you just took, the issue is between GitHub and us; if you can see it but the job didn’t run, the issue is downstream.
Webhook returns 4xx
Symptom
In GitHub: Settings → Applications → Roboticks → Advanced → Recent Deliveries shows deliveries with red 401 / 403 / 422 status codes.Diagnosis
| Status | Likely cause |
|---|---|
401 Unauthorized | HMAC verification failed — our copy of the webhook secret no longer matches yours. |
403 Forbidden | The installation was deleted or the repo was removed from it. |
422 Unprocessable Entity | Payload schema we don’t recognise — usually an event we never subscribed to that GitHub is delivering anyway. |
5xx | A transient platform issue on our side. GitHub will retry 8 times over ~8 hours. |
Fix
401 — webhook secret mismatch
401 — webhook secret mismatch
- Roboticks dashboard → Settings → Integrations → GitHub App → click Rotate webhook secret. Rotation is atomic — old deliveries in flight fail, new deliveries verify with the new secret.
- GitHub re-signs subsequent webhooks with the new secret automatically; no manual step on the GitHub side.
- Click Redeliver on the failed events in the GitHub delivery view to replay them.
403 — installation or repo removed
403 — installation or repo removed
- Confirm the App is still installed in GitHub → Settings → Applications → Installed GitHub Apps.
- Confirm the repo is in scope: Roboticks → Configure → Repository access.
- If the install or repo is gone, re-install per Installation — historical data is retained.
422 — unrecognised payload
422 — unrecognised payload
Safe to ignore. We acknowledge with 422 to make GitHub stop retrying an event we don’t handle. If the same event repeats and you want it handled, open a ticket — it’s probably a new GitHub event we should add to the subscription list.
5xx — our side
5xx — our side
Check status.roboticks.io. If no incident is posted and the failures persist for >5 minutes, file a ticket; include the
X-GitHub-Delivery UUID from a failed delivery so we can find it in our trace store.Check Run never posts
Symptom
A PR is opened, but no Roboticks check appears in the Checks tab — not evenqueued.
Diagnosis
Walk these four checks in order:Is the App installed on this repo?
GitHub → repo → Settings → Branches (or any settings page) → scroll to the App badge in the sidebar. If Roboticks isn’t there, install per Installation.
Is the installation suspended?
GitHub → Settings → Applications → Installed GitHub Apps → Roboticks. A red Suspended badge means the org admin paused the App. Click Unsuspend. Suspended installs receive no webhooks until unsuspended.
Is the repo linked to a Roboticks project?
Roboticks dashboard → Settings → Repositories. If the repo shows Connected but not linked, click Link to project. Webhooks for an unlinked repo are acknowledged but skipped (visible in the webhook log with reason
no_project).Check Run posted, but conclusion = action_required
This is by design when a human-in-the-loop step is pending. The most common cases:
- Requirements PDF awaiting review — go to Requirements → Pending review in the dashboard, accept or edit the LLM-extracted requirements, and the next push will re-evaluate.
- Standards subscription update — a pinned standard published an amendment that touches requirements in this PR. Review the diff at Standards → Updates.
action_required does not block merge unless your branch protection lists Roboticks as required.
Check Run posted, but conclusion = neutral on every PR
This usually means the test job ran but no JUnit XML was found, or no @confirms(...) decorators were detected.
Fix
- In the dashboard Run log, open the latest run → Artifacts tab. If the JUnit file is missing or empty, your test command isn’t emitting JUnit — see Writing tests.
- If JUnit is present but no requirements are linked, run
pytest -p roboticks.pytest_plugin -vlocally and confirm the plugin loads. The plugin is auto-registered whenroboticksis installed, but if a wrapper script overrides the Python environment it may be skipped.
Rate limit exceeded
Symptom
The webhook log shows successful deliveries, but jobs sit inqueued for minutes or the dashboard shows GitHub API: 403 rate limit exceeded.
Diagnosis
GitHub Apps have a per-installation rate budget that scales with the number of repositories. Three causes:| Cause | Fix |
|---|---|
| Burst — many PRs opened at once | Wait. The budget refills hourly. Jobs queue and dispatch as budget returns; no Check Runs are lost. |
Long-running script polling GET /pulls | Move it onto webhooks. Polling is the #1 cause of installation rate exhaustion. |
Many Re-run all jobs clicks | Each one issues a fresh check-runs POST + log uploads. Avoid scripting it. |
Token expiry
You should never see a token-expiry error in normal operation. If you do:Repo was renamed or transferred
GitHub firesrepository.renamed / repository.transferred events. We update the project ↔ repo mapping automatically — no manual step. The first push or PR after the rename will run cleanly.
Still stuck
Status page
Live incident status.
Open a ticket
Include the
X-GitHub-Delivery UUID and PR URL for fastest triage.Webhooks reference
Re-read the event handling rules.
Check Run reference
Conclusion semantics and re-run paths.