{"table_name":"fails","full_table_name":"wp_fails","description":"Stores fails data created by this plugin.","detection_method":"static","confidence":"high","create_sql":"CREATE TABLE fails (e.g. host-side schema * incompatibility), remember the failure and skip re-running for * DAY_IN_SECONDS. Without this the same failing DDL would fire on every * request, flooding error logs. Guard state is a single option that * gets cleared as soon as a run succeeds, so admins who fix the * underlying issue see recovery on their next request. */ public function maybe_upgrade_db() { // Run the API-key migration first, self-gated on the data shape so it // no-ops after the first successful pass. Kept outside the version // guard because the hash-at-rest change applies to any install whose // settings still hold a plaintext key, not just first-load post-upgrade. $this->maybe_migrate_api_key_settings();","columns":[],"plugin":{"slug":"royal-mcp","name":"Royal MCP – Secure AI Connector for Claude, ChatGPT & any LLM via MCP","active_installs":10000,"version":"1.5.11","wp_org_url":"https://wordpress.org/plugins/royal-mcp/"}}