Scores Not Updating
3 min read
If customer trust scores aren’t updating after orders, refunds, or other relevant events, the problem is almost always in the asynchronous score recalculation pipeline. This page walks through diagnosis from observable symptom to root cause and fix.
What “Not Updating” Looks Like #
- A refund happens but the customer’s score doesn’t change
- The signal breakdown on the customer profile is stale
- The Dashboard’s high-risk list doesn’t reflect recent events
- Bulk Recalculate completes but customers still show old scores
Step 1: Verify the Event Was Recorded #
First confirm the underlying event reached TrustLens:
- Open the customer’s detail page
- Check the event timeline
- Look for the expected event (refund / coupon / dispute)
If the event isn’t in the timeline, the issue is upstream — the WooCommerce hook didn’t fire or the module didn’t observe it. Skip to the relevant section below.
If the event is in the timeline but the score didn’t update, the issue is in the recalculation pipeline. Continue with Step 2.
Step 2: Check Action Scheduler #
Score recalculations queue as Action Scheduler jobs. To verify:
- Go to WooCommerce → Status → Scheduled Actions
- Filter by hook:
trustlens/calculate_score - Look at the most recent entries
Possible states:
| State | Meaning |
|---|---|
| Complete | Healthy — the action ran successfully. If score didn’t update, the issue is in the calculation, not the queue. |
| Pending | Queued but not yet run. Wait 1–2 minutes; if still pending, Action Scheduler isn’t processing. |
| Failed | The action errored. Click to see the error. |
| (Not present) | The event didn’t queue a recalculation. The hook integration is broken. |
Step 3: Pending Forever — WP-Cron Issue #
If actions show Pending but never run, WP-Cron isn’t firing. Common causes:
WP-Cron Disabled in wp-config.php #
Check wp-config.php for: define('DISABLE_WP_CRON', true);
If present, you need a real cron job hitting wp-cron.php — many production sites disable WP-Cron and rely on system cron. To verify your system cron is configured correctly:
- SSH to the server
- Run
crontab -l - Look for an entry like
* * * * * curl -s https://yoursite.com/wp-cron.php?doing_wp_cron - If missing, add one
Host-Level Rate Limiting #
Some shared hosts rate-limit WP-Cron requests. Solutions:
- Contact host to whitelist cron processing
- Move to a more cron-friendly host
- Use external cron-as-a-service (cronless.com, EasyCron, etc.)
Server-Level Issue #
If PHP processes are being killed (memory limits, timeouts), WP-Cron tasks may start but not complete. Check the WordPress debug log for fatal errors.
Step 4: Failed Actions #
If recalculation actions are failing:
- Click a failed action in the Scheduled Actions list
- Read the error message
- Common errors:
- Memory exhaustion: Raise PHP memory limit to 256MB+
- Database connection timeout: Hosting issue; contact host
- Class not found: Plugin conflict or corrupted install — reinstall
- Database column missing: Schema not upgraded — deactivate and reactivate plugin to trigger schema upgrade
Step 5: Score Calculation Succeeds But Result Is Wrong #
If the recalculation completes (Action Scheduler shows Complete) but the resulting score is unexpected:
- Open the customer’s profile
- Look at the signal breakdown
- Manually add up the signals — does the math match the displayed score?
Possible causes:
- Allowlist active: Score is locked at 100. Check the allowlist flag.
- Below minimum orders: Score pinned at 50. Check total_orders.
- Custom filter modifying the score: A custom
trustlens/trust_scorefilter could be overriding. Disable other TrustLens-related plugins temporarily and recalculate. - Module disabled: An expected signal isn’t firing because the module is off. Check Modules settings.
Step 6: Refund Events Not Recording #
If refunds aren’t appearing in the timeline:
- Check whether the refund was created via the standard WooCommerce admin refund flow (recommended) or via the gateway directly
- For Stripe/WooPayments refunds initiated from the gateway dashboard: the webhook should fire, but verify it’s reaching WooCommerce
- If the refund was created via custom code: the standard WooCommerce hook (
woocommerce_order_refunded) must fire — verify your custom code calls it
Step 7: Coupon Events Not Recording #
If coupon applications aren’t in the timeline:
- Verify the coupon was actually applied (visible on the order)
- Check the WooCommerce action
woocommerce_applied_couponis firing — some checkout-modifying plugins replace this - Test with a default WooCommerce checkout to confirm the hook fires
Step 8: Dispute Events Not Recording #
If chargeback events aren’t recording:
- Verify Stripe/WooPayments webhook delivery is working (see Stripe Webhook Issues)
- For manual entries: confirm the dispute was saved (visible in Chargebacks settings list)
Step 9: Force Recalculation #
If you’ve fixed the underlying issue and want to update existing customer scores:
- Open Customers list
- Select all (or filter to affected cohort)
- Bulk Action: Recalculate
- Wait for background processing to complete
Or per customer: click the Recalculate button on the customer detail page.
Step 10: Nuclear Option — Clear and Re-Sync #
If scores are persistently wrong and you suspect data corruption:
- Back up your database
- Settings → Data → Delete all TrustLens data
- Run Historical Sync
- Wait for completion
This rebuilds everything from WooCommerce order/refund/dispute data. Takes time but produces a clean slate.
Preventive Practices #
- Verify Action Scheduler is healthy weekly (Scheduled Actions queue should drain)
- Monitor server cron / WP-Cron health
- Keep WordPress, WooCommerce, and TrustLens up to date
- Test scoring after major store changes (gateway migrations, theme changes, plugin updates)