Snapshot: MLS sync fixes, image refresh, plugin/theme updates

MLS plugin fixes from this session:
- Fix silent insert failures: location column NOT NULL was rejecting wpdb->insert calls,
  causing ~18k new properties since Dec 2025 to be lost. Inserts now build raw SQL
  with ST_PointFromText so the spatial column is populated atomically.
- Auto-refresh expired media URLs in MLS_Media_Handler::fetch_and_cache(), guarded by
  a property-level GET_LOCK so concurrent fetches share one API refresh.
- Normalize WP_Error to null in mls_get_property_image() so callers can rely on the
  documented string|null contract.
- Support comma-separated property_type filters in MLS_Query and MLS_Cluster so the
  homepage "View All Commercial" link (?property_type=Commercial+Sale,Land,Farm)
  actually filters correctly.
- Incremental sync now looks back 10 minutes past the latest modification timestamp
  as a safety margin against missed records.
- Smart sync exits silently (info-level, not warning) when a full sync is in progress.

Operational:
- New cron: weekly full sync Sundays at 3 AM (/usr/local/bin/mls-full-sync).
- New cron: hourly 2GB cap on mls-thumbnails/ and cache/transformed-images/
  (/usr/local/bin/mls-image-cache-cap).
- Logrotate config for wp-content/debug.log (2-day retention, daily rotation,
  delaycompress).

Repo policy:
- CLAUDE.md updated with explicit "commit everything except build artifacts" policy.
- .gitignore: untrack runtime image caches and debug.log rotations.

Other modifications in this snapshot are pre-existing in-flight theme/plugin/db_content_updates work.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
root
2026-04-29 15:32:23 +00:00
parent 57b752f54e
commit b6df4dbb92
5385 changed files with 838580 additions and 2416 deletions
+1
View File
@@ -0,0 +1 @@
#wp-mail-smtp .wp-mail-smtp-smart-routing-header{padding-bottom:0 !important;border-bottom:none !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-header__heading{display:flex;align-items:center}#wp-mail-smtp .wp-mail-smtp-smart-routing-header__heading>a{margin-left:15px;font-weight:600;font-size:14px;line-height:22px}#wp-mail-smtp .wp-mail-smtp-smart-routing-notice-top{max-width:1000px;margin:10px 0 0 !important;border:1px solid #bbb}#wp-mail-smtp .wp-mail-smtp-smart-routing-notice-top--no-connections~.wp-mail-smtp-setting-row,#wp-mail-smtp .wp-mail-smtp-smart-routing-notice-top--no-connections~.wp-mail-smtp-submit{opacity:.5;pointer-events:none}#wp-mail-smtp .wp-mail-smtp-smart-routing-toggle .wp-mail-smtp-toggle__label{font-weight:500;font-size:14px;text-transform:capitalize}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes{max-width:1000px;margin-bottom:30px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route{background:#fff;box-shadow:0px 2px 4px rgba(0,0,0,.07);border-radius:6px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route+.wp-mail-smtp-smart-routing-route{margin-top:30px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header{display:flex;align-items:center;padding:20px;border-bottom:1px solid #f1f1f1}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header{flex-direction:column;align-items:flex-start}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>span{margin-right:10px;font-size:14px;line-height:17px;font-style:italic;color:#646970}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>span{margin-right:0;margin-top:10px}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>select{margin-right:10px !important}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>select{margin-right:0;margin-top:10px !important}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__connection{max-width:273px;width:100%}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__connection--invalid{border-color:#d63638 !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__actions{display:flex;align-items:center;margin-left:auto}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__actions{order:-1}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order{margin-right:23px;white-space:nowrap}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order-btn{background-color:rgba(0,0,0,0);border:none;padding:0;vertical-align:middle;cursor:pointer}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order-btn--down{margin-left:13px;transform:rotate(-180deg)}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order-btn img{display:block}#wp-mail-smtp .wp-mail-smtp-smart-routing-route:first-child .wp-mail-smtp-smart-routing-route__order-btn--up,#wp-mail-smtp .wp-mail-smtp-smart-routing-route:last-child .wp-mail-smtp-smart-routing-route__order-btn--down{opacity:.25;cursor:not-allowed;pointer-events:none}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__delete{background-color:rgba(0,0,0,0);border:none;color:#999;padding:0;vertical-align:middle;cursor:pointer}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__delete:hover:not(:disabled){color:#d63638}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__delete:disabled{opacity:.25;cursor:not-allowed}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__main{padding:20px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__notice{margin-top:0 !important;margin-bottom:20px !important;border:1px solid #bbb}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__notice p{margin:6px 0 !important;font-size:13px !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-route .wp-mail-smtp-btn-grey{font-weight:500}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note{display:flex;align-items:center;margin-bottom:5px;font-size:14px;line-height:20px;color:#646970}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note img{margin-right:10px}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note p{margin:0 !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note a{color:inherit}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note a:hover,#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note a:active{color:#555}