Common Issues
The Quarantine folder shows “Not writable”#
Symptom: The Settings screen shows a Not writable badge instead of a path, wp pug status prints NOT WRITABLE, and held updates raise a High gate-error alert.
Cause: PHP cannot create or write to any of the candidate folders (a folder outside the web root, or wp-content/uploads/pug-quarantine/).
Fix:
- Make sure
wp-content/uploads/is writable by the PHP user. - Or create a folder outside the web root, make it writable, and add
define( 'PUG_QUARANTINE_DIR', '/path/to/folder' );towp-config.php. - Reload Update Gate → Settings and confirm the path appears.
Updates go through although the gate should hold them#
Symptom: An update with findings was installed instead of held.
Cause: One of: the plugin is not in scope (check Gated on the Plugins in scope screen); the vendor is trusted (check Trusted until); the score is below the Hold threshold; or the gate hit an error and Fail open let the update through.
Fix:
- Open Update Gate → History and look at the row’s score and outcome. An outcome of error means fail-open; the matching High alert has the details.
- Check Plugins in scope for the plugin’s override and trust, and revoke trust if needed.
- Lower the Hold threshold or turn on Hold every update if you want to be stricter.
I did not receive an alert email#
Symptom: An update was held but no email arrived.
Cause: wp_mail() is not delivering, the address list is wrong, or Notify for is set above the alert’s severity (held updates are Medium).
Fix:
- On Update Gate → Settings, check Email to and set Notify for to Medium and above.
- Click Send test notification and read Last delivery. “wp_mail() failed” points at your mail configuration; use an SMTP plugin or ask your host.
- Check the spam folder.
The webhook does not fire#
Symptom: Emails arrive but nothing reaches Slack or your webhook service.
Cause: The URL is not HTTPS (HTTP URLs are rejected on save), or the service returned an error.
Fix:
- Confirm the URL starts with
https://and save the settings again. - Click Send test notification and read the webhook response code under Last delivery. A 4xx code means the service rejected the payload; a timeout means it could not be reached from the server.
- If your service needs a different JSON shape, use the
pug_webhook_payloadfilter.
“Approve and install” asks for FTP credentials#
Symptom: Clicking Approve and install shows the WordPress connection information form.
Cause: WordPress cannot write to the plugins folder directly, so it asks for filesystem credentials, the same as any plugin install on that server.
Fix:
- Enter the credentials as you would for a normal update, or define
FS_METHODand the FTP constants inwp-config.php. - The review stays Approved. Open it again and click Install approved package once the credentials are in place.
The daily check never runs#
Symptom: The Alerts screen says “The daily check has not run yet” for more than a day, or the dashboard widget never shows a last check.
Cause: WP-Cron is not running, often because DISABLE_WP_CRON is set without a system cron, or the site gets no visits.
Fix:
- Run the checks by hand from Update Gate → Alerts → Run all checks now to confirm they work.
- Set up a real cron job that calls
wp cron event run --due-nowor requestswp-cron.phpevery few minutes. - Alternatively schedule
wp pug scan-hiddenandwp pug check-integritydirectly from the system cron.
The License screen says licensing is not configured#
Symptom: Update Gate → License shows a warning that the StoreEngine product ID is not set.
Cause: A filter or constant on your site returns 0 for pug_storeengine_product_id / PUG_STOREENGINE_PRODUCT_ID, or you are running a development build without the ID.
Fix:
- Remove any code that defines
PUG_STOREENGINE_PRODUCT_IDor filterspug_storeengine_product_id. - Reinstall the release zip from your technoleet.dev account.
License cannot be verified after a store outage#
Symptom: The License screen shows “Could not verify your license and the grace period has ended.”
Cause: The site could not reach technoleet.dev for more than 14 days.
Fix:
- Check that the server can make outbound HTTPS requests to
technoleet.dev(add it toWP_ACCESSIBLE_HOSTSif you block external requests). - Open Update Gate → License and click Check License Status Now.
