Feature: In-product feedback channel. The admin header now has a “Feedback” button that opens a dialog where you can send a bug report, feature request, question, or other note (with an optional screenshot, up to 5 MB). All feedback is forwarded to BoostMedia’s centralized support inbox.
Internal: New POST /wp-json/bmai/v1/feedback endpoint that proxies submissions to the backend (/api/v1/feedback) using the same site-authenticated channel as every other backend call. Per-user rate limit of 5 submissions per hour.
2.1.20
Fix: Repeating content plans no longer go silent after their first run when their schedule configuration is missing or malformed. mark_plan_run now falls back to a “+1 week from now” next_run_at whenever the schedule math returns NULL but the plan still has remaining budget, so weekly recurrences keep firing.
Fix: calculate_next_run_at_advanced now self-heals plans whose schedule_config_json (or schedule_counters_json) was stored as an unparsed string, attempting one extra json_decode pass before bailing.
Internal: decode_json_columns now logs a one-line warning to debug.log when a JSON column cannot be parsed, so silent data corruption is visible during debugging instead of breaking schedule math invisibly.
2.1.19
Fix: Plans configured to publish immediately now actually publish — sprint articles inherit the plan’s publishing schedule when generation is queued. Previously, generated posts always landed as drafts even when the plan said “immediate”. Plans set to draft / drip-daily / drip-weekly continue to behave exactly as before.
Fix: Article-pickup race-condition that could create duplicate posts when the WordPress cron took longer than its scheduling interval. The plugin now writes an idempotency key on every imported post, checks for it before insert, and acknowledges each delivery to the backend immediately after the post record is created (before image downloads). A pickup transient lock prevents concurrent cron runs from racing each other.
Internal: First PHPUnit test suite added for the term resolver. Build now excludes test artifacts from the WordPress.org distribution.
2.1.18
Fix: Plans configured to publish immediately now actually publish — sprint articles inherit the plan’s publishing schedule when generation is queued. Previously, generated posts always landed as drafts even when the plan said “immediate”. Plans set to draft / drip-daily / drip-weekly continue to behave exactly as before.
Internal: First PHPUnit test suite added for the term resolver. Build now excludes test artifacts from the WordPress.org distribution.
2.1.16
Fix: Sprint articles now land in the correct category instead of Uncategorized. The term resolver tries five strategies (slug as-is, URL-encoded, sanitized, name decoded, hyphen-to-space) so Hebrew slugs and other non-ASCII categories resolve reliably. Each attempt is logged for telemetry.
Fix: WP-CLI command wp bmai plan create_and_sprint now builds a full content plan matching the React UI’s schema. Adds optional flags: –cta, –cta-style, –summary, –must-include, –avoid, –tone, –standards, –focus-areas, –intro-angle, –faq. The richer plan gives the article-generation pipeline the same context the wizard provides, so generated articles are more likely to include focus keywords and image prompts.
Fix: Database migrations now run automatically on every plugin update, not only when the database schema constant changes. Closes the gap where wp plugin install –force could skip pending data migrations. Migration errors surface in an admin notice for one day.
2.1.15
Fix: Internal smart linking is now ON by default — generated articles will weave links from your library automatically. Existing installs that never touched the setting are migrated on first run; sites that explicitly disabled it keep that choice.
UI: Removed the redundant global “Auto publish” toggle from Settings. Publish behaviour (immediate / draft / drip-daily / drip-weekly) is controlled per content plan, where it always belonged.
New: WP-CLI command wp bmai plan create-and-sprint for creating a fully-configured content plan and triggering a sprint from the command line. Useful for remote configuration over SSH and for scripting setup across multiple sites. See wp help bmai plan for the full flag list.
Backend: Sprint think calls and grounded research calls now return Gemini reasoning summaries, captured in logs for debug visibility.
2.1.14
Fix: Contextual card options now match the actual question topic (language vs geography keyword priority corrected, input narrowed to trailing question)
Fix: Article JSON parse reliability — added responseSchema for structured Gemini output + field-extraction fallback for broken JSON (reduces parse failures from ~47% to near-zero)
Fix: Server-side question dedup — suppresses question cards that overlap >40% with already-answered topics (prevents AI from repeating questions)
Fix: Server-injected cards (e.g., premature ready confirmation) now appear in message history so AI has proper context on the next turn
New: bc_state reliability monitoring metric (tracks drop rate correlated with Google Search tool usage)
2.1.13
Fix: Content/intent phase no longer repeats already-answered questions
Fix: Recovery fallback preserves accumulated answers and content plan (was wiping state on parse failure)
Fix: PHP state merge guard — refuses to overwrite populated state with empty arrays
Fix: “Don’t repeat answered questions” instruction added to content phase AI prompt
Fix: Message history increased from 6 to 10 for content/intent phases (better context retention)
2.1.12
Fix: Job poller extended execution time (30s → 5min) with batch processing — processes up to 10 completed articles per cycle instead of timing out after 1-2
Fix: Sprint generation logging now shows correct job ID and status (was logging non-existent keys)
Fix: Content plan runner logs sprint job ID after successful submission
2.1.11
Fix: LiteSpeed Cache deep compatibility — uses official LiteSpeed PHP API (litespeed_control_set_nocache) to prevent private cache from serving stale REST responses
2.1.10
Fix: REST API responses now include no-cache headers to prevent LiteSpeed Cache and other caching plugins from serving stale data
2.1.9
Fix: PHP timeout on shared hosting during AI link analysis and image generation (set_time_limit extended for long-running backend calls)
Fix: Link analysis batch size reduced from 10 to 3 to stay within web server connection timeouts (LiteSpeed, Nginx, etc.)
Fix: Multilingual prompt pipeline — 9 fixes: grammar instruction scoped to Hebrew only, binary language normalization replaced with proper map, single language source of truth, topic examples scoped, sprint/rewrite language aligned
Fix: Shared language utility (bc-backend) — normalizeLanguageCode, getLanguageLabel, isHebrewLanguage
Fix: Link collection rules displayed correctly (dirty ref bug from Wave 3)
Fix: Empty link rules blocked from collecting (was silently collecting everything)
Fix: Content Language setting saves correctly (was resetting to Auto)