Troubleshooting¶
For current service status and incident history, see the Patcherly status page.
This guide helps you resolve common issues with Patcherly.
Dashboard sign-in problems¶
The dashboard at app.patcherly.com keeps you signed in with a regular session cookie — nothing is stored in your browser's local storage.
- If parts of the dashboard (billing, trial banner, metrics filters, onboarding checklist, in-app toasts, page tours, account-deletion status) seem stuck loading, refresh the page after signing in, or sign out and sign in again.
- If you use a strict privacy mode, make sure cookies are not blocked for
app.patcherly.com.
Connector Issues¶
Applies to: all connectors (Node.js, Python, PHP, WordPress) on Linux, macOS, and Windows hosts. WordPress-specific guidance lives in Connectors → WordPress.
Connector Not Connecting¶
Symptoms: - Connector shows "Disconnected" status - Errors not being detected - Fixes not being applied
Solutions:
- Verify OAuth credentials
-
Check that
~/.patcherly/credentials.jsonexists on the target server. If the file is missing or the access token has expired and refresh failed, re-pair from your installer'sINSTALL_DIR— match the elevation you used the first time so credentials land in the same home:# macOS / Linux (defaults to /opt/patcherly-connector; add sudo if installer enabled systemd) /opt/patcherly-connector/start.sh login # Windows PowerShell (defaults to %USERPROFILE%\patcherly-connector) & "$env:USERPROFILE\patcherly-connector\start.ps1" login # Package installs patcherly login # PHP direct (manual install) php patcherly_agent.php login -
Confirm the connector can reach Patcherly
- In the dashboard, open your target and confirm status updates when the connector runs
- The Patcherly API is hosted by us at
https://api.patcherly.com. Connectors point at this host out of the box; you should not normally need to override it. -
Docker / private networks: ensure outbound HTTPS to
api.patcherly.comis allowed, and that containers can resolve DNS and reach the API (see connector logs for connection errors) -
Review Connector Logs
- Check
logs/error.log(PHP/Python) - Check console output (Node.js)
-
Look for connection errors or authentication failures
-
Verify network and firewall
- Production/Shared Hosting: Ensure firewall allows outbound HTTPS to
api.patcherly.com - Docker / VPN: Confirm the connector’s environment can reach
api.patcherly.com; fix DNS, routing, or proxy rules if logs show timeouts or TLS errors
“API server unavailable” during a Patcherly service outage¶
Applies to: all connectors (Node.js, Python, PHP, WordPress) on any OS.
Symptoms: - The connector or WordPress plugin reports API server unavailable (sometimes shown as a 503 error) - New errors on your site are not appearing in the dashboard - The website/app (target) may look connected in places but error reporting and fixes are paused
What this usually means:
Occasionally Patcherly runs service recovery after a major incident (restoring Patcherly's own service data — not your website files). While that work is in progress, connectors are intentionally paused so nothing is half-processed. This is temporary and expected.
What you should do:
- Check the Patcherly status page for an active incident or maintenance notice.
- If you are signed into the dashboard, you may be redirected to a maintenance page with a short “recovery in progress” message — that is normal; it does not mean your account was deleted.
- Wait until the incident is resolved — you do not need to reinstall the connector or rotate your OAuth token.
- After service is healthy again, refresh Targets in the dashboard; queued errors on the connector side resume sending automatically once the API accepts traffic again.
- Your pre-apply backups (copies of files on your server before a fix) are not affected by service recovery.
When to keep troubleshooting:
If messages continue after the status page shows all systems operational for 15+ minutes, use the steps under Connector Not Connecting above — that points to a normal connectivity or credentials issue, not a service outage.
Connector Keeps Disconnecting¶
Symptoms: - Connector connects but disconnects frequently - Intermittent error detection
Solutions:
- Verify OAuth credentials
- Check that
~/.patcherly/credentials.json(or/root/.patcherly/credentials.jsonif paired withsudo) exists on the target server. - If it is missing or the token has expired, re-pair from your installer's
INSTALL_DIR:start.sh login(Linux/macOS) /start.ps1 login(Windows) — orpatcherly loginfor package installs. -
Each pairing issues a new OAuth access token plus a fresh signing secret.
-
Check HMAC signing
- HMAC secrets are per-token and bundled inside
~/.patcherly/credentials.json - HMAC verification is always mandatory for fix payloads (cannot be disabled)
-
If signature errors persist, re-pair to get a fresh token and secret
-
Review Rate Limits
- Check if you're hitting rate limits (connector logs may mention throttling or “too many requests”)
-
Consider upgrading your plan if limits are too low
-
Check System Resources
- Verify sufficient memory/CPU for connector
- Check for process crashes or restarts
- Review system logs for OOM (Out of Memory) errors
Account / Profile Updates¶
Applies to: the Patcherly dashboard at
app.patcherly.com— browser-side only, no connector involved.
Email field won’t update in Profile¶
Why it happens: - Your sign-in email is fixed for security; it isn’t editable from Profile.
What to do: - Change password, name, or other fields without changing the email field. To use a different email, open Support from the bottom of the dashboard sidebar (Pro workspaces may include direct email there).
Error Detection Issues¶
Applies to: all connectors. Most steps below assume shell access on the host running the connector (Linux/macOS) — see the WordPress-specific path under Connectors → WordPress when commands aren't available.
Errors Not Being Detected¶
Symptoms: - Errors occur in application but don't appear in Patcherly - Connector is connected but no errors reported
Solutions:
- Verify Log File Path
- Check connector is monitoring correct log file
- Verify log file exists and is readable
-
Check file permissions
-
Check Error Log Format
- Connector looks for "ERROR" in log lines
- Ensure your application logs errors with "ERROR" keyword
-
Check log format matches expected pattern
-
Test error reporting
- Manually trigger an error in your application
- Check if connector detects it
-
Review connector logs for error-reporting attempts
-
Check Queue Status
- Review queue file for pending errors
- Check for queue processing errors
- Verify queue file is writable
Duplicate Errors¶
Symptoms: - Same error appears multiple times - Error count keeps increasing for same issue
Solutions:
- This is Normal
- Patcherly tracks how often the same error happens
-
The error detail shows occurrence count and last seen time
-
Ignore Repeated Errors
- Use "Ignore" action to stop tracking specific errors
- Errors are automatically deduplicated by normalized signature (log timestamps stripped); repeat hits bump occurrence count on the same row
Fix Application Issues¶
Applies to: all connectors. The fail-closed parsing behavior (
unsupported_patch_format) below is identical across Node.js, Python, PHP, and WordPress.
Fixes Not Applying¶
Symptoms: - Fixes are approved but not applied - Connector shows "Pending" status for fixes - Error row ends Failed after an apply attempt (connector may report structured reason unsupported_patch_format)
Solutions:
- Check that dry-run is off for the target. Targets in dry-run preview the change but never write files. Edit the target on the Targets page and turn off Dry-run when you're ready for the connector to apply fixes.
- Verify file permissions
- Make sure the connector's process can write to your application files.
- Check directory permissions and file ownership.
- Check the backup directory
- The backup directory must exist and be writable by the connector.
- On Python, Node, and PHP, this is controlled by the
PATCHERLY_BACKUP_ROOTenvironment variable (default../backups, outside your webroot). - Review connector logs
- Look for parser errors, file-locking errors, or signature mismatches near the time of the failed apply.
- If connector logs show fail-closed parse (
unsupported_patch_format), see the next section.
Fix marked unsupported_patch_format (fail closed)¶
Symptoms: - Connector logs Patch parse failed (fail closed) or Failed to parse patch (fail closed) - Error status becomes Failed; the apply attempt is recorded with structured reason unsupported_patch_format (audit / connector report) - The target file on disk is unchanged (this is intentional)
Why: Patcherly connectors run a fail-closed apply pipeline. If the fix payload is not a valid unified diff (or arrives with corrupted hunk headers — for example because of CRLF line endings or a transport-layer rewrite), the connector refuses to apply anything, immediately rolls back the safety backup it took before parsing, and surfaces a structured failure to the API. No partial mutation can occur on this path. See Connectors → Fail-closed apply contract.
Solutions:
- Re-request the analysis — ask Patcherly to regenerate the fix from the dashboard; the model will produce a fresh diff.
- Check transport for CRLF/encoding issues — if you front the connector with a proxy or WAF that rewrites bodies, ensure it is not converting
\nto\r\ninside the patch body. - Update the connector — older connector builds had a more permissive parser; upgrade to the latest connector version to pick up the fail-closed parsing behavior.
- Don't manually retry the same fix —
unsupported_patch_formatis terminal for that fix attempt; nothing changes on retry until a new diff is generated.
Fixes Causing Errors¶
Symptoms: - Fix is applied but causes new errors - Application breaks after fix
Solutions:
- Automatic Rollback
- A basic health check runs for all plans after every fix (target URL must respond and not return 5xx). If it fails, Patcherly automatically rolls back (included on every plan).
- On Agent Testing plans, enhanced health and test failures can also trigger automatic rollback.
- Check rollback status in dashboard (Rolling back → Rolled back or Rollback failed)
-
Review rollback logs
-
Manual Rollback
- Manual rollback is available to all users (every plan). Use "Rollback" in the dashboard on fixed/failed errors, choose a reason, and confirm.
- Restore from backup manually if needed
-
See Rollback Guide
-
Review Fix Quality
- Check confidence score (lower scores = higher risk)
- Review fix code before approving
- Test fixes in staging first
HMAC Verification Failures¶
Symptoms: - Fixes rejected with "HMAC verification failed" - Connector logs show signature errors
Solutions:
- Re-pair the connector
- The per-token HMAC secret lives in
~/.patcherly/credentials.json; re-pair from your installer'sINSTALL_DIRto get a fresh token and secret: -
WordPress: click Unpair then Pair connector in the plugin settings
-
Check Timestamp
- HMAC includes timestamp (5-minute window)
- Verify system clock is synchronized (NTP)
- Check for timezone issues
Backup Issues¶
Applies to: Node.js, Python, and PHP connectors on Linux/macOS hosts (default backup root
../backups). For the WordPress plugin, backups live underwp-content/uploads/patcherly/backups/. Web-server hardening for both is in Connectors overview → Hardening backup folders and the public web.
Backups Not Created¶
Symptoms: - Fixes applied but no backups found - Backup directory is empty
Solutions:
-
Check Backup Directory
-
Verify Environment Variable
-
Check File Permissions
- Ensure connector process can write to backup directory
- Verify directory ownership
-
Check disk space
-
Review Backup Manager Logs
- Check for backup creation errors
- Verify backup manager is initialized
- Review error messages
Backup Directory Accessible via Web¶
Symptoms: - Backups can be accessed via browser - Security risk
Solutions:
- Move Outside Webroot
- Set
PATCHERLY_BACKUP_ROOT=../backups(parent directory) -
Or use absolute path outside webroot
-
Protect the backup path — Prefer moving backups outside the webroot (
PATCHERLY_BACKUP_ROOT). Connectors write.htaccessand IISweb.configinside the backup folder; those only help on Apache (AllowOverride All) or IIS — both are ignored on Nginx. For full coverage including ready-to-paste Nginx and Apache vhost snippets, see Connectors overview → Hardening backup folders and the public web. On WordPress, Site Health, Settings → Diagnostics, and an admin notice warn when a canary underuploads/patcherlyreturns HTTP 200 (optionalPATCHERLY_BACKUP_ROOTmoves backups only).
Performance Issues¶
Applies to: all connectors on any OS. Resource-usage symptoms most often show up on shared-hosting PHP/WordPress sites, but the diagnostic steps apply across the board.
Slow Error Detection¶
Symptoms: - Errors take long time to appear in dashboard - Delayed notifications
Solutions:
- Check Polling Interval
- Connectors poll every 5-30 seconds
- Reduce interval for faster detection (increases load)
-
Check connector configuration
-
Review Queue Processing
- Check queue size (large queues = slower processing)
- Review queue processing frequency
-
Consider increasing processing rate
-
Check Network Latency
- Slow or unstable networks delay the connector and dashboard updates
- Try from a stable connection; if you use a VPN or strict firewall, ensure HTTPS to Patcherly isn’t blocked
High Resource Usage¶
Symptoms: - Connector using too much CPU/memory - System performance degraded
Solutions:
- Review Connector Configuration
- Reduce polling frequency
- Limit queue size
-
Adjust log monitoring interval
-
Check for Memory Leaks
- Monitor connector memory usage over time
- Restart connector periodically if needed
-
Review connector code for leaks
-
Optimize Log Monitoring
- Use log rotation
- Limit log file size
- Archive old logs
Authentication Issues¶
Applies to: all connectors on any OS. Pairing uses OAuth Device Authorization Grant; the
~/.patcherly/credentials.jsonlocation is the same on Linux, macOS, and Windows (under the home directory of the user that ranpatcherly login).
Connector Authentication Failed¶
Symptoms: - "Authentication failed" errors - Connector shows as disconnected despite being installed
Solutions:
- Verify OAuth credentials
-
Check that
~/.patcherly/credentials.jsonexists on the target server. If it is missing or you see an authentication error in the connector logs, re-pair from your installer'sINSTALL_DIR: -
Re-pair the connector
- On the target server, run
start.sh login(Linux/macOS) orstart.ps1 login(Windows) from your installer'sINSTALL_DIR— orpatcherly login(orpatcherly logout && patcherly login) for package installs -
WordPress: click Unpair then Pair connector in the plugin settings
-
Check Target Status
- Verify the target is active in the dashboard
- Ensure the Patcherly account used during pairing still has access
Session expired / signed out unexpectedly¶
Symptoms: - Dashboard shows Session expired or sends you back to login - Actions fail until you sign in again
Solutions:
- Sign in again
-
Use Sign out (if shown), then sign back in with your email and password
-
Browser data
-
Clear cookies for
app.patcherly.comandpatcherly.com, or try a private/incognito window -
Network or device change
-
After switching VPN, network, or device, sign out and sign in again
-
Signed out elsewhere
- If you used Sign out on another tab or device, sign in again on this browser
Billing & subscriptions¶
Applies to: the Patcherly dashboard at
app.patcherly.com— browser-side only, no connector involved.
I don’t see Billing or “Manage billing (Stripe portal)”¶
- The Billing tab on Profile is only shown when you are signed in as the workspace owner (invited team members have other profile tabs). If you expected to manage billing but do not see Billing, sign in with the owner account or open Support from the bottom of the dashboard sidebar.
I can’t switch plan in the Stripe portal¶
- Your Stripe Customer portal settings must allow plan switching and proration (configured in the Stripe Dashboard). If options are missing, open Support from the bottom of the dashboard sidebar.
- Always change plans via Profile → Billing → Manage billing (Stripe portal) for an existing workspace. The public Pricing page buttons point to new signup (
/register?plan=...), not in-app upgrades for accounts you already have.
Payment failed or subscription stopped¶
- Open Profile → Billing → Manage billing (Stripe portal) and update your payment method.
- Check the email Stripe sent for a direct link. See Plans.
Downgrade blocked or limits after downgrade¶
- You may have more targets or usage than the new plan allows. Remove or disable extra targets, then try again. Limits and features are defined on the Pricing page.
Where are prices and plan features defined?¶
- Public list: patcherly.com/pricing. In app: Profile → Billing shows your current plan and what’s included. Overview: Plans.
Getting More Help¶
If you're still experiencing issues:
- Check Documentation
- Review relevant connector documentation
- Check error management guides
-
Review FAQ
-
Collect Information
- Connector logs
- Error messages
- System information
-
Steps to reproduce
-
Contact Support
- Open Support from the bottom of the dashboard sidebar (FAQ — Support for plan-specific options)
- Include collected information
- Describe issue in detail