Troubleshooting
Use this guide for common operational issues. Check Arr → {instance} → Logs
and APP_BASE_PATH/logs/app.log for detailed error context.
Cannot connect to Arr instance
Section titled “Cannot connect to Arr instance”Symptoms: Test connection fails, preview errors, or sync logs show HTTP failures.
Checks:
- URL — Use the hostname Praxrr resolves (Docker service name, not
localhostfrom inside another container). - API key — Re-enter the key from Arr Settings → General. Confirm
ARR_CREDENTIAL_MASTER_KEYhas not changed withoutARR_CREDENTIAL_PREVIOUS_KEYS. - TLS / reverse proxy — Canonical URL must reach the Arr API path. External URL affects browser links only.
- Firewall — Allow traffic from the Praxrr container or host to Arr ports
(
7878,8989,8686by default).
Set PRAXRR_VALIDATE_INSTANCES=true temporarily to surface startup validation
errors for env-managed instances.
Sync preview fails or shows unexpected deletes
Section titled “Sync preview fails or shows unexpected deletes”Symptoms: Preview status error, or many delete actions you did not expect.
Checks:
- Confirm sync selections still match profiles present in the PCD.
- Pull the PCD and review Changes / Conflicts for unresolved user ops.
- Compare preview section errors — quality profile preview requires readable remote custom formats and profiles.
- Verify
arr_typeon each entity matches the instance app.
Re-run preview after resolving conflicts. Preview is read-only and safe to repeat.
Sync succeeds but Arr looks wrong
Section titled “Sync succeeds but Arr looks wrong”Symptoms: Push reports success but scores or qualities differ from PCD.
Checks:
- Confirm you synced the intended instance and section.
- Open the profile in Arr UI — another profile or manual edit may still apply to media items.
- Check for duplicate profile names on the Arr side from earlier manual imports.
- Re-preview and inspect field-level diffs for scoring and cutoff fields.
PCD pull or link failures
Section titled “PCD pull or link failures”Symptoms: Database stuck out of date, Git errors, or missing entities.
Checks:
- Private repos — Set
PRAXRR_DEFAULT_DB_TOKENand Git username/email. - Local path sources — Local PCD folders may not be Git repos; commit and changes pages degrade gracefully without Git metadata.
- Empty default URL —
PRAXRR_DEFAULT_DB_URL=""disables auto-link by design. - Schema mismatch — Align
PRAXRR_SCHEMA_REFwith the PCD manifest.
Authentication issues
Section titled “Authentication issues”| Mode | Common issue |
|---|---|
AUTH=on |
Reset password via admin flows; confirm session cookies reach the UI |
AUTH=oidc |
Verify OIDC_* variables and redirect URIs |
AUTH=local |
Remember it skips auth only for local-network requests |
AUTH=off |
Insecure — anyone with network access can use the UI |
Warning: Do not run
AUTH=offon the public internet. Pair with external auth (Authentik, Authelia) if you disable built-in login.
API clients need a valid API key header when auth is enabled.
CSRF or origin errors behind a proxy
Section titled “CSRF or origin errors behind a proxy”Praxrr may use permissive CSRF trusted origins during development. If forms fail after tightening deployment:
- Align the public URL with your reverse-proxy hostname.
- Configure explicit trusted origins before production.
- Confirm HTTPS termination preserves the
Hostheader expected by the app.
Parser / testing unavailable
Section titled “Parser / testing unavailable”Symptoms: Custom format testing fails; parser connection errors in logs.
Checks:
- Confirm the Praxrr app itself is healthy at
GET /api/v1/health. - From inside the same private network namespace as Praxrr, call the parser’s
GET /health. A healthy response includesstatus: "healthy"and a behavior version. Do not expose this private route through your public proxy. - For Docker, confirm the parser container is healthy,
PARSER_HOSTmatches its Compose service name, andPARSER_PORT=5000. - For a standalone archive, confirm
praxrr-parser(praxrr-parser.exeon Windows) is adjacent to the app binary and executable. Remove an accidentalPARSER_HOSToverride to restore automatic child-process startup. - For a source checkout, run
mise installanddeno task dev:parser; the repository pins Go 1.26.5.
Sync and editing still work without the parser.
Parser response classes
Section titled “Parser response classes”Use HTTP status and sanitized log fields such as outcome and error_class; do
not log or share raw release titles, patterns, request bodies, or regex engine
errors.
| Status | Meaning | Recovery |
|---|---|---|
400 |
Malformed JSON or missing/invalid required fields | Correct the request. |
413 |
A measured request, text, pattern, count, unique-key, or work limit was exceeded | Reduce the input; do not repeatedly retry the same payload. |
415 |
The request is not JSON | Send application/json or application/*+json. |
503 |
Active-request or matcher capacity is temporarily full | Honor Retry-After: 1 and retry with backoff. |
500 |
Unexpected internal parser failure | Capture sanitized logs, restart once, then roll back if it repeats. |
Regex timeouts are finite and fail closed for the affected pattern; they do not make the parser process unhealthy. Rework catastrophic patterns instead of raising limits. The compatibility contract remains .NET-compatible regex syntax, even though the current service is implemented in Go.
Parser recovery and rollback
Section titled “Parser recovery and rollback”- Record the current app release, parser image or archive checksum, and parser
behavior version from private
/health. - Restart the parser without deleting parser caches. Same-version entries remain usable; misses are not filled until health succeeds.
- If a new parser version is faulty, deploy the previous immutable image digest or restore the matching previous standalone archive. Do not roll back with a moving tag.
- Verify private parser
/health, then exercise one parse and one match through the Praxrr UI. Cache namespaces change with behavior versions, so old and new results cannot mix. - If recovery still fails, omit the parser and keep Praxrr online while collecting sanitized diagnostics; linking, editing, and syncing are unaffected.
Release provenance contains the exact artifact checksums, SBOM, behavior version, and immutable rollback identifiers. Use those records rather than reconstructing an old runtime from source.
Encrypted credential errors after upgrade
Section titled “Encrypted credential errors after upgrade”Symptoms: Instances show missing API keys or decryption failures.
Checks:
- Same
ARR_CREDENTIAL_MASTER_KEYas before upgrade, or validARR_CREDENTIAL_PREVIOUS_KEYSduring rotation. - Restore from backup if the key was lost — encrypted blobs cannot be recovered without the original key.
- Re-enter API keys in instance settings as a last resort.
Database migration failures
Section titled “Database migration failures”Symptoms: Praxrr exits on startup or logs migration errors.
Checks:
- Disk space and write permissions on
APP_BASE_PATH. - Do not run older binaries against a database migrated by a newer version.
- Restore backup and upgrade again after reviewing release notes.
Getting more help
Section titled “Getting more help”- Architecture Overview — module boundaries
- Startup Sequence — init order and fail-fast steps
- Sync Pipeline — preview vs execution internals
- PCD System — ops compiler and value guards
- Job System — background queue and dispatcher
- Configuration — environment reference
- GitHub issues — bug reports
Include Praxrr version, arr_type, sanitized logs, and steps to reproduce when
opening an issue. Never paste real API keys or master keys.