= 2.0.1 =
* Renamed the public plugin listing to Social Publisher by Calliope – Auto Post to 10+ Networks while preserving the existing slug, text domain, settings, storage, and upgrade path.
* Improved the WordPress.org summary and tags to emphasize 10-network Free publishing, social automation, AI-assisted copy, and sanitized logs.
* Consolidated the three public-host/SSRF validation implementations into one shared validator used by Mastodon, Gemini URL context, and reusable host-validation flows.
* Hardened host validation consistently against private/reserved and special-use addresses, IPv4-mapped IPv6, numeric IP spellings, localhost-style names, and common localhost tunnel domains.
* Preserves existing connections, credentials, History, templates, settings, database tables, slugs, and Pro extension compatibility.

= 2.0.0 =
* Finalized the production-ready Free 2.x baseline after end-to-end Free/Pro compatibility, connection, publishing, history, analytics, and updater QA.
* Keeps the ten Free destinations: Bluesky, Mastodon, Tumblr, Pinterest, Threads, Instagram, LinkedIn personal profiles, Blogger, Telegram, and Facebook Pages.
* Keeps Gemini optional and user-supplied, preserves image workflows, permanent History, Free Analytics, Social Templates, Smart Tags, retries, and sanitized Logs.
* Preserves the extension boundary used by Social Publisher Pro 1.0 and keeps existing 1.5.x data intact during upgrade.
* Connection tutorials and video guides are maintained on the CalliopeWP website.

= 1.5.64 =
* Added safe Smart Tag catalog, group, and value extension points so licensed add-ons can contribute provider-specific tags without changing the Free tag set.
* Keeps add-on values inside the existing sanitization and unresolved-placeholder protection used by Social Templates and Platform Preview.
* Fixed Facebook OAuth Page-token resolution so first-time connections no longer require a Page to be selected before Meta has returned the Page list; one Page is auto-selected, while multiple Pages are offered for explicit selection.
* Facebook Page tokens are now recovered automatically from the OAuth user token when saving or running diagnostics, so administrators never need to copy or paste access tokens manually.
* Fixed the Connections layout so translated Facebook setup instructions are moved into the single right-side guide instead of leaving a duplicate guide below the connection form.

= 1.5.63 =
* Added the safe extension boundary used by Pro to select a specific reusable template per destination without changing the one-template Free limit.
* Keeps selected Pro templates in manual drafts and refreshes Platform Preview when a template selection changes.
* Lets a licensed Pro extension replace the Social Templates roadmap teaser with its live template library inside the existing Settings form.

= 1.5.62 =
* Raised the Free/Pro compatibility boundary used by normalized real network statistics.

= 1.5.61 =
* Added a safe Analytics view boundary so an active Pro license can replace the complete basic report instead of appending duplicate statistics below it.
* Kept the complete Free Analytics summary as the fallback whenever Pro is absent, inactive, or unable to load.

= 1.5.60 =
* Kept the Publisher columns flush on desktop by stretching Content to the combined Publication type and Media height.
* Preserved natural card heights when the Publisher switches to its stacked responsive layout.

= 1.5.59 =
* Refined the Publisher right rail so Publication type is presented as a cohesive card aligned with Content and Media.
* Improved option spacing, heading hierarchy, and visual separation without changing Standard post or Pro Video post behavior.

= 1.5.58 =
* Completed Step 12 cleanup and migration hardening for the new Free base without changing publishing behavior or adding new user-facing strings.
* Upgraded persistent History storage to schema v4 with a concurrency-safe migration lock, request-level table-existence caching, and indexes for status/date and network/date Dashboard/Analytics queries.
* Kept a single publication-history table and made schema activation/upgrade safer on multisite, including batched network activation and automatic storage initialization for sites created after network activation.
* Reworked uninstall cleanup for multisite so each site keeps or removes its own data according to its cleanup preference; options, transients, post meta, generated uploads, and the site-specific History table are cleaned only when requested.
* Added one-time data hygiene for legacy Facebook caches/options, sanitized stored Logs, Social Templates and Tracking settings, and stale Telegram discovery data from the removed experiment.
* Removed duplicate Blogger setting registration and tightened request normalization/output escaping in affected admin paths.
* Limited maintenance, migrations, History schema checks, heavy media/Preview assets, Templates/Tracking scripts, Facebook connection JavaScript, and queue scans to the Social Publisher screens/tabs where they are actually needed.
* Removed obsolete Dashboard CSS and unused legacy image assets while keeping the active logo/menu assets.
* Reviewed write permissions/nonces and OAuth state guards, responsive breakpoints, database ownership, uninstall behavior, and frontend loading; no duplicate plugin tables were introduced.
* Updated translation metadata and rebuilt all PO/MO catalogs; rebuilt the Gutenberg JavaScript translation catalogs to remove old encoding corruption in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese.

= 1.5.57 =
* Refined the Publisher into a cleaner two-column composer: Content stays in the main column while publication type and Media are grouped in the right-hand rail.
* Removed the full-width publication-type strip from the visual flow without changing Standard post or Pro Video post behavior.
* Standard post, Video post PRO, and media-mode controls now stack vertically for faster scanning and a more compact composer.
* Content spans the height of the publication controls and Media card, while AI generation and Platform preview remain full-width below the composer.
* Added responsive fallbacks so publication type, Content, and Media stack naturally on narrower screens.
* No publishing, media, AI, destination, Preview, History, Analytics, Tracking, Alerts, Dashboard, scheduling, or Pro behavior was changed.

= 1.5.56 =
* Reworked Step 11 into a dedicated Dashboard tab and moved the manual composer into its own Publisher tab.
* The Dashboard now focuses on operational decisions instead of duplicating Analytics: overall health, actionable issues, a compact 7-day activity snapshot, three recent publication runs, and configuration status.
* Connection warnings appear only for destinations that have actually been configured; unused disconnected networks do not create noise.
* Free shows a single restrained Pro dashboard preview instead of scattered locked cards. When Pro is active, that preview is replaced by live scheduling and advanced-destination operations.
* Added a Free/Pro dashboard bridge so Pro can contribute scheduling issues to Needs attention and render upcoming schedules, retries, needs-review status, and Pro connection coverage.
* Publisher redirects, manual draft behavior, and queued-publication notices now return to the dedicated Publisher tab.
* Added and rebuilt Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese translations for the new Dashboard and Pro dashboard labels.

= 1.5.55 =
* Added Free Step 11 compact Today summary to the main Publisher dashboard using persistent History data.
* The dashboard now shows today's completed destination publications, successful and failed outcomes, and the most active network without duplicating the full Analytics screen.
* Today boundaries follow the WordPress site timezone while History remains stored in UTC; successful History retries are reflected on the day they are processed.
* Added a direct View Analytics link from the Today summary.
* Preserved Publisher, Preview, Templates, Tracking, Alerts, History, Retry, Connections, and all network behavior.
* Added and rebuilt Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese translations for the new dashboard labels.

= 1.5.54 =
* Removed Telegram automatic channel discovery and the Find my channels interface after simplifying channel setup back to explicit destination entry.
* Telegram now uses only the administrator-provided channel/group @username, t.me link, or numeric chat ID; no getUpdates-based discovery or automatic destination replacement is performed.
* Preserved the important Bot ID safety validation from 1.5.51 so the bot itself cannot be saved or used as a publication destination.
* Preserved Telegram groups, channels, topics, images, videos, albums, connection tests, alerts, Blogger hardening, Tracking, History, Preview, Templates, and Analytics behavior.
* Removed the now-unused Telegram discovery strings from all included translation catalogs and rebuilt the compiled translations.

= 1.5.53 =
* Refined the Failure alerts card in Settings with a compact two-panel layout, a clear accessible on/off switch, a full-width notification email field, and a balanced action footer.
* Reduced unnecessary whitespace while preserving the existing alert logic, recipient fallback, deduplication, and failure-only delivery behavior.
* Added responsive behavior so the alert controls stack cleanly on tablets and phones.
* No new user-facing strings were introduced; all existing alert translations remain unchanged.

= 1.5.52 =
* Added Telegram private-channel discovery so administrators no longer need to obtain a -100... channel ID manually.
* Added a Find my channels action that inspects recent channel membership/post updates without consuming them, verifies the bot's channel membership, and checks can_post_messages.
* Automatically saves and validates the destination when exactly one eligible channel is found; multiple detected channels are offered in a selector.
* Save and test can recover from a pasted Bot ID when exactly one eligible channel is discoverable.
* Added a clear webhook-specific discovery error because Telegram getUpdates is unavailable while an outgoing webhook is configured.
* Preserved all group/supergroup, topic, media publishing, Blogger, alerting, UTM, History, Retry, Template, Preview, and Analytics behavior.
* Added and rebuilt Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese translations for the new Telegram channel-discovery UI.

= 1.5.51 =
* Hardened Telegram destination validation so the bot's own user ID can never be accepted as a publish destination.
* Save and test now rejects a numeric Bot ID locally before it is stored and also rejects @bot targets after Telegram resolves the destination.
* Publishing performs a second safety check against stale validation data before sendMessage, sendPhoto, sendVideo, or sendMediaGroup.
* Telegram's "the bot can't send messages to the bot/bots" response is now classified as an invalid target and shown as an actionable destination error instead of a generic 403 permission failure.
* Added an inline warning when an already-saved Telegram destination matches the Bot ID, plus clearer Group / Channel ID guidance for public and private destinations.
* Preserved Blogger 1.5.50 hardening, failure alerts, UTM tracking, History, Retry, Templates, Preview, Analytics, and all existing network publishing behavior.
* Added and rebuilt Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese translations for the new Telegram guidance and errors.

= 1.5.50 =
* Reworked Blogger OAuth blog discovery around the documented Blogger API v3 endpoints, trying the plain users/self/blogs request first and using AUTHOR/ADMIN compatibility fallbacks only when needed.
* Added a direct BlogUserInfos permission check for a manually selected Blogger Blog ID, so a valid destination can be verified even when automatic blog discovery fails.
* Added a Manual Blog ID fallback that accepts either the numeric Blog ID or a Blogger dashboard URL such as blogger.com/blog/posts/1234567890.
* OAuth now preserves a valid Google session when blog discovery alone fails, allowing the administrator to enter a manual destination instead of losing the connection.
* When Google returns exactly one Blogger blog, Social Publisher selects and verifies it automatically after OAuth.
* Added sanitized Blogger API diagnostics to Logs, including phase, endpoint, HTTP status and Google provider status/reason/message without tokens or secrets.
* Replaced the generic Blogger unexpected-response path with actionable messages for disabled Blogger API, missing scopes, permissions, and discovery failures.
* Preserved publishing, refresh-token handling, History, Retry, Templates, Tracking and Step 10 alerts while hardening only the Blogger connection flow.
* Added and rebuilt Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese translations for every new Blogger connection string.

= 1.5.49 =
* Added Free Step 10 failure-only email alerts with an opt-in "Notify me when a publication fails" setting.
* Alerts are disabled by default and never send email for fully successful publications.
* Partial publications and multi-network failures send one summary email per publication job, listing only the failed destinations and linking directly to Publication History.
* Added a configurable notification email address with the WordPress administration email as the safe default.
* Added per-job deduplication so a completed job cannot generate duplicate alert emails if its completion response is processed twice.
* History Retry and scheduled/automatic jobs use the same failure-alert pipeline; every retry is treated as its own publication attempt.
* Added alert options to uninstall cleanup and translated all Step 10 Settings/email strings in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese.

= 1.5.48 =
* Added the localized Scheduling, Scheduling views, and List labels used by Social Publisher Pro 0.2.9 to present Scheduled and Calendar as one cleaner workflow.
* Added and rebuilt Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese PO/MO translations for those shared scheduling labels.
* No Free publishing, Analytics, History, Preview, Templates, or UTM behavior changed in this compatibility release.
* Clarification: Free UTM tracking prepares per-network campaign URLs; traffic/click/conversion attribution remains an Advanced Analytics Pro roadmap feature and is not presented as a new Free metric.

= 1.5.47 =
* Added Free Step 9 automatic UTM tracking with one global tracking configuration for all Free destinations.
* Added Settings > Tracking controls for utm_source, utm_medium, and utm_campaign, with {network} resolved independently for each destination.
* Tracking is disabled by default on upgrade so existing publication links do not change until the administrator explicitly enables it.
* Added a live tracked-URL example with destination selector and click-to-insert {network} controls to make UTM configuration easier to verify.
* Applied tracking immediately before Social Templates and provider formatting so {post_link}, provider link fields, Platform Preview, History snapshots, Scheduler, Gutenberg auto-post, and Retry all use the same tracked URL.
* Existing query parameters and URL fragments are preserved; matching UTM parameters are replaced instead of duplicated.
* Added a UTM tracking indicator inside Platform Preview when a tracked link is actually part of that destination payload.
* Added a locked Advanced UTM rules PRO teaser for future per-network, per-campaign, and per-template tracking rules.
* Added Tracking options to uninstall cleanup and translated the complete Step 9 interface in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese.

= 1.5.46 =
* Hid Platform Preview while the Publisher draft is completely empty, preventing selected destinations from appearing as invalid before the user starts composing.
* Platform Preview now appears automatically as soon as the user enters a title, text, link, hashtags, alt text, selects a source post, or adds actual media.
* Clearing all draft content hides and resets the preview again, including validation summaries and destination tabs.
* Empty drafts are no longer intercepted by the preview validation layer; normal Publisher validation remains responsible for attempted empty submissions.
* No new visible strings were introduced, so the existing translations remain valid.

= 1.5.45 =
* Moved the final Publish now controls inside the Platform Preview card so preview, validation, scheduling, and publishing live in one compact workflow.
* Removed the separate empty publish card below Platform Preview and added a subtle integrated footer divider.
* Preserved pre-publish validation, scheduling controls, and responsive behavior without adding new visible strings.

= 1.5.44 =
* Added Free Step 8 provider-aware Platform Preview inside Publisher, with one live tab for each selected Free destination.
* Preview shows destination-specific final text, link, hashtags, selected media, character count, and whether a Social Template is applied before publication is queued.
* Added local Ready, Warning, and Invalid checks, including required-image validation for Instagram and Pinterest, invalid-URL detection, and warnings when provider text limits will shorten a post.
* Added an automatic pre-publish validation gate: invalid destination previews block submission and open the affected network so the problem can be corrected before sending.
* Preview updates automatically while content, destinations, Smart Tag source content, hashtags, links, image format, or media selection changes, with a manual Refresh preview action as a fallback.
* Added a lightweight provider-aware preview engine; preview generation makes no social API calls and stores no preview data.
* Added and verified all Step 8 preview strings in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese, and rebuilt every MO catalog.

= 1.5.43 =
* Removed the remaining Settings height gap by stretching the two top Settings cards to the same desktop row height.
* Anchored the AI action buttons toward the bottom of the AI card so the equal-height layout looks intentional instead of leaving a visible grey gap below it.
* Kept the mobile Settings layout stacked and unchanged, with no new visible strings introduced.

= 1.5.42 =
* Rebalanced the Settings desktop layout so AI Assistant and History/Retry + uninstall controls sit side by side in the top row.
* Moved Social Templates to a full-width row below the two settings columns, eliminating the large empty gap created by the previous tall template editor column.
* Expanded the Social Templates network selector across the full-width card while preserving the dynamic Smart Tags editor introduced in Step 7.
* Audited all 66 visible Settings strings in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese; PO/MO catalogs have no missing Settings translations.
* Localized the Smart Tags section label in every bundled non-English language and rebuilt the MO catalogs.

= 1.5.41 =
* Added Free Step 7 WordPress Smart Tags for {post_title}, {post_excerpt}, {post_content}, {post_link}, {post_author}, {post_date}, {post_categories}, {post_tags}, and {site_name}, while keeping {ai_hashtags} for backward compatibility with Step 6 templates.
* Smart Tags now resolve from the selected WordPress source post, including author, permalink, publication date, categories and tags, with safe Publisher fallbacks when no source post is attached.
* Added automatic excerpt generation from post content when a WordPress post has no manual excerpt.
* Rebuilt the Social Templates editor into a controlled one-network-at-a-time workspace with a network picker, a single large editor, live character count, default/custom state, restore-default action, and copy-to-all-networks action.
* Added grouped clickable Smart Tag controls that insert the selected tag at the current cursor position, so users do not need to type placeholder syntax manually.
* Added server-side protection that removes mistyped unresolved Smart Tag placeholders before a social post is sent.
* Added a dedicated lightweight template-editor JavaScript file with no external dependencies.
* Added and verified all new Smart Tag/editor strings in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese, and rebuilt every MO catalog.

= 1.5.40 =
* Rebalanced Settings after Social Templates: History & retry and Uninstall/data cleanup now sit directly below AI assistant in the left column, while Social Templates stays in the right column.
* Removed the large empty gap created by the previous grid flow without changing any Settings behavior.
* Completed the entire visible Settings translation audit across Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese, including AI controls and Uninstall/data cleanup, and regenerated all MO files.
* No publishing, retry, cleanup, or template logic changed in this layout/i18n release.

= 1.5.39 =
* Added Free Step 6 Social Templates with one reusable template for each bundled Free network.
* Added a Social Templates section inside the existing two-block Settings layout, using compact per-network accordions so ten templates do not overwhelm the screen.
* Added an opt-in master switch; Social Templates are disabled by default on upgrade so existing publishing output does not change until the administrator enables them.
* Added the initial template variables {post_title}, {post_excerpt}, {post_link}, and {ai_hashtags}; these use the current Publisher fields and form the base for the Smart Tags roadmap step.
* Applied templates at the per-network worker stage so each selected destination can receive different text from the same publication while preserving the existing queue, duplicate protection, scheduling, and media flows.
* Stored the rendered template inside the History/Retry snapshot before publishing so a failed destination retries the exact original templated content even if template settings change later.
* Kept Pinterest title/destination-link semantics and Blogger title semantics intact while applying the saved template to their descriptive content.
* Added a compact grey PRO roadmap teaser for multiple reusable templates per network without limiting the single-template Free feature.
* Added template settings to uninstall cleanup and translated all 20 new Social Templates strings in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese, with rebuilt MO files.

= 1.5.38 =
* Fixed History thumbnails so new manual publications use the exact Media Library image selected for that publication instead of guessing from the WordPress featured image.
* Added persistent media_attachment_id storage to Publication History and upgraded the History schema to version 3.
* Stopped showing potentially incorrect featured images for legacy manual History rows whose selected media was never stored; those rows now use the neutral placeholder instead.
* Kept a safe featured-image fallback for legacy automatic, Gutenberg, and scheduled records where the featured image is the publication source.
* Preserved the selected media attachment through per-destination Retry snapshots so retried History rows keep the correct image association.
* Added no new visible strings in this release.

= 1.5.37 =
* Added Free Step 5 Activity over time to Analytics with a responsive daily SVG chart for successful and failed destination results.
* Added an All networks / per-network chart filter while keeping the summary KPI cards global for the selected 7, 30, or 90 day period.
* Kept the selected network when switching Analytics periods and aligned the KPI/query window with the chart's calendar-day range so totals stay consistent.
* Added grey PRO controls beside the chart for previous-period comparison and custom date ranges, keeping premium reporting visible without limiting the Free chart.
* Added translated chart titles, descriptions, empty states, accessibility label, and comparison control in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese, and recompiled all MO catalogs.
* Implemented the chart without external JavaScript/charting libraries to keep the WordPress admin lightweight.

= 1.5.36 =
* Made every locked Pro network teaser card clickable and linked it to the Social Publisher product page on Calliope.
* Added a violet border, subtle background, and keyboard-focus treatment when hovering or focusing Pro network cards.
* Added missing translations for the Pro networks heading and the Get Social Publisher Pro tooltip in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese, and recompiled all MO files.
* Kept the single-row desktop layout and leveled card alignment from the previous UI fixes.

= 1.5.35 =
* Fixed the malformed History section opening tag that exposed a raw aria-label string in the interface.
* Leveled the Pro networks teaser cards so icons, wrapped labels, and PRO badges align more cleanly across the single desktop row.
* Kept the one-row desktop layout while improving internal alignment for cards with longer titles.

= 1.5.34 =
* Fixed the Pro networks teaser grid so all locked Pro network cards stay on a single desktop row when enough admin width is available.
* Reduced card padding and title/icon sizing slightly so the full row fits more cleanly.
* Kept the grid responsive so it wraps naturally on smaller screens.

= 1.5.33 =
* Removed the oversized History overview cards so the History tab no longer wastes space with large summary panels.
* Moved History status, permanent-storage information, last activity, and the Pro upsell into a compact toolbar inside the History records header.
* Kept History focused on filters, results, details, and retry actions.

= 1.5.32 =
* Compacted the Free Analytics summary cards so all five KPI cards remain on one row across normal desktop WordPress admin widths before switching to responsive layouts.
* Redesigned the grey Advanced analytics PRO preview into a compact three-column upgrade panel with contained text and the upgrade CTA aligned in the header.
* Tightened the review banner so its title, five-star message, and review action stay on one line on desktop and stack cleanly on smaller screens.
* Fixed corrupted review-banner translations and the malformed five-star source string in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese.
* Recompiled every bundled MO catalog after correcting the review strings.
* No publishing, History, Retry, or Analytics calculations changed in this visual and localization release.

= 1.5.31 =
* Removed the redundant summary metric cards from the History header so History focuses on storage status, last activity, filters, table rows, and retry actions.
* Kept publication performance metrics exclusively inside Analytics to avoid repeating the same information in two tabs.
* Tightened the History overview card layout after removing the metrics, with a cleaner footer separator for permanent storage status and last activity.
* No new visible strings were introduced in this cleanup; existing translations remain valid across bundled languages.

= 1.5.30 =
* Completed Free Step 4 with a new dedicated Analytics tab backed by permanent Publication History data.
* Added rolling 7-day, 30-day, and 90-day Analytics periods.
* Added Free summary metrics for unique publication runs, successful destinations, failed destinations, success rate, and active networks.
* Added a network performance table with publication runs, published, failed, pending, and per-network success rate.
* Success rate excludes pending destinations so in-progress work is not counted as a failure.
* Added a grey PRO analytics preview for period comparison, advanced filters, and social performance metrics to make the upgrade path visible without limiting core Free analytics.
* Merged Uninstall and data cleanup into the History & retry Settings card so Settings now has two primary blocks: AI assistant and History/data controls.
* Removed the compact Settings overview row introduced in the previous refresh to keep the page focused on actionable controls.
* Added and compiled all new Analytics translations for Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese.
* No social-network publishing behavior or History schema changes are required for this release.

= 1.5.29 =
* Removed the Settings Configuration map panel so the screen focuses on real plugin options instead of filler navigation.
* Added a compact Settings overview row for AI assistant, History & retry, and uninstall/data cleanup status.
* Added a direct History button to the Settings header actions alongside Connections and Logs.
* Rebalanced the Settings layout so AI assistant and History & retry sit side by side on desktop, with uninstall/data cleanup remaining a full-width safety section.
* No new translatable strings were introduced in this refresh; it reused labels already translated in the bundled plugin languages.

= 1.5.28 =
* Added a Settings control to enable or disable manual Retry from Publication History; Retry remains enabled by default.
* When Retry is disabled, History keeps publication results and retry counters but hides manual Retry actions and rejects direct Retry requests server-side.
* Disabled Retry no longer stores new retry snapshots, and switching Retry off removes previously stored retry snapshots without deleting History rows.
* Re-enabling Retry applies to new publication attempts; older failed rows whose retry snapshots were removed remain non-retryable for safety.
* Added translated History & retry settings, status labels, help text, save action, and disabled-state notice in all plugin languages.
* Added the new Retry preference to uninstall cleanup so plugin-owned settings remain consistent with the existing cleanup policy.

= 1.5.27 =
* Added Free Step 3 per-destination Retry directly in History for failed publications.
* Retry queues only the failed network and never republishes destinations that already succeeded.
* Added a retry-safe publication snapshot to persistent History while a destination is pending or failed; the snapshot is removed after a confirmed success to avoid unnecessary long-term duplication.
* Retry updates the same History row through Failed → Pending → Published/Failed and increments the persistent retry counter.
* Added duplicate-safety checks so Retry is not offered when a provider result suggests a post may already exist.
* Added automatic History refresh after a retry finishes.
* Retry snapshots exclude access tokens, API keys, passwords, cookies, and other credentials.
* Completed and compiled the new Retry translations in every bundled plugin language.

= 1.5.26 =
* Removed the separate YouTube Shorts destination card from Publisher because Shorts uses the same YouTube connection.
* Kept a single YouTube destination in Publisher so the network list is cleaner and less confusing.
* Reduced the History Date column width and tightened the desktop column layout so the table fits more cleanly without the unnecessary horizontal scrollbar in common admin widths.
* Kept the Step 2 History responsive layout improvements for tablet and mobile.
* No publishing logic or history storage behavior changed in this release.

= 1.5.25 =
* Fixed the Step 2 History desktop layout so Publication, Destination, Type & AI, Source, Date, Status, and Result keep dedicated column widths and no longer overlap.
* Added a fixed, predictable desktop table layout with safe wrapping for long post titles, account labels, provider messages, and translated status text.
* Added responsive History record cards below 920px, preserving every field with translated per-field labels instead of forcing a cramped horizontal table.
* Kept result actions and expandable technical details contained inside their own area so long provider IDs or messages cannot push adjacent columns out of place.
* Revalidated History/navigation translations in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese.
* No publishing, History storage, filter, or Pro/Free behavior changed; this release completed the Step 2 layout.

= 1.5.24 =
* Completed Free Step 2 by turning History into a full publication browser backed by the permanent history table introduced in 1.5.21.
* Added a paginated destination-by-destination history table with WordPress source post, thumbnail, network, public account identity, content type, AI-use indicator, manual/automatic source, local date/time, publication status, provider post URL/ID, retry count, safe error details, and publication UUID.
* Added Free History search plus network and status filters, with an empty-state flow and clear-filter action.
* Added direct View source and View social post actions when safe public URLs are available.
* Added compact record details for provider post ID, retry count, error code, publication UUID, created time, and updated time without exposing tokens, API keys, or raw provider payloads.
* Added grey locked PRO controls for account, content type, custom date range, and CSV export, plus the existing Advanced History & Analytics upgrade card to make the Free/Pro path visible without disabling core Free history.
* Removed the redundant Documentation tab from the internal navigation. The header Documentation button now opens the external Social Publisher documentation directly in a new tab.
* Removed the redundant Documentation shortcut from Settings so documentation has one clear entry point in the header.
* Added reusable History query APIs for paginated records and available networks so later Free/Pro steps can extend reporting without duplicating database logic.
* Audited 109 visible History/header navigation strings in Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese, corrected missing or garbled visible labels, updated the POT/PO catalogs, and regenerated every MO file.
* No retry action is exposed yet; per-destination retry remains the next Free roadmap step so Step 2 stays focused on browsing and auditing publication history.

= 1.5.23 =
* Moved Publication History out of Publisher and into its own top-level History tab so composing and reporting stay clearly separated.
* Keeps History immediately after Publisher even when the Pro add-on adds Scheduled, Calendar, or License tabs, preserving a predictable navigation order.
* Kept the Step 1 Free summary in History with publication runs, successful, failed, pending, stored destinations, database status, and last activity.
* Kept the Advanced History & Analytics PRO preview visibly locked in grey inside History to communicate the upgrade path without mixing Pro promotion into the Publisher composer.
* Added the missing Pending counter to the visible Step 1 history summary.
* Audited every History string in all bundled locales (Spanish, French, Italian, Brazilian Portuguese, and Simplified Chinese), regenerated MO catalogs, and corrected partially untranslated History copy.
* Persistent history storage and publishing behavior remain unchanged from 1.5.21; this release completes the Step 1 information architecture and localization.

= 1.5.22 =
* Completed Step 1 with a visible Publication History status panel on the Publisher dashboard.
* Added live, lightweight history counters for publication runs, successful destinations, failed destinations, stored destinations, and last recorded activity.
* Added a clear active/setup state for the persistent history database so administrators can confirm the new infrastructure is working.
* Added a grey Advanced History & Analytics PRO roadmap card with upgrade positioning while clearly labeling those deeper analytics capabilities as roadmap items rather than already-released features.
* No publishing behavior was changed in this visual completion release; the permanent history engine from 1.5.21 remains the data source for future Activity and Analytics screens.

= 1.5.21 =
* Added the persistent `calliope_sp_publication_history` database table as the durable source for future Activity and Analytics screens.
* Stores one row per publication destination with a shared publication UUID, queue job reference, WordPress post ID/title/URL snapshot, network, public account ID/label, manual or automatic origin, source, AI-use flag, content type, status, provider post ID/URL, retry count, safe error code/summary, user ID, and UTC timestamps.
* Queued publications now create `pending` history rows before provider delivery and update those same rows to `success` or `failed`, preventing asynchronous provider polling from creating duplicate history entries.
* Network publish responses now preserve safe public post identifiers (and public URLs when returned) instead of discarding them after a successful publish, allowing the history layer to retain provider references without storing credentials or raw payloads.
* Direct Gutenberg auto-posts are recorded as automatic publications and remain linked to their source WordPress post.
* The manual Publisher now records the selected WordPress post internally and marks history when Gemini successfully generated any part of the social copy. Same-site links can still resolve back to a WordPress post when no search result was selected.
* Added safe account-resolution fallbacks for Free networks without persisting tokens, secrets, API keys, authorization headers, or raw provider payloads.
* Added `calliope_sp_history_context`, `calliope_sp_history_account`, and `calliope_sp_history_recorded` extension points so Pro can enrich history and collect future performance metrics without duplicating the Free storage layer.
* Added a dedicated retry counter API for the upcoming per-network retry action.
* Preserved the existing 200-event diagnostic Logger unchanged; persistent history is an independent operational data source.
* Added upgrade-safe schema creation for existing installs, activation support for multisite/network activation, and cleanup of the history table only when full uninstall data cleanup is explicitly enabled.

= 1.5.20 =


= 1.5.19 =
* Pinterest multiple-image selections now create at most two separate Pins, using only the first two images and never attempting a third Pin.
* Pinterest reports omitted images as a successful warning instead of a partial failure when the configured two-Pin cap is reached.
* Publication progress now lets an authoritative successful result clear a stale client-side failure state, preventing networks such as Telegram from remaining marked as failed after a confirmed successful send.
= 1.5.18 =
* Changed gallery overflow handling to publish one post with the destination maximum and omit the remaining images.
* Corrected Bluesky to four images per post and made Mastodon's limit dynamic from the connected server, with a fallback of four.
* Changed Pinterest gallery input to publish one Pin with the first selected image instead of creating separate Pins.

= 1.5.17 =
* Added complete Pro multiple-image delivery for all image-capable Free destinations.
* Added native Tumblr NPF photosets and LinkedIn MultiImage posts.
* Added initial Pinterest, Bluesky, and Mastodon multi-image handling.

= 1.5.16 =
* Fixed social image preparation so Original previews use contain mode instead of a cover crop.
* Fixed square/portrait/landscape export to render the exact selected crop without stretch or unexpected cutoffs.
* Improved Blogger image markup with responsive inline sizing to prevent theme CSS from stretching published images.

= 1.5.15 =
* Added a WordPress-side safe URL retrieval path before Gemini URL Context so public links are less likely to block AI generation.
* Uses `wp_safe_remote_get()` with redirect validation, response-size limits, and text/HTML filtering for administrator-supplied URLs.
* Sends retrieved page text to Gemini as factual context while explicitly ignoring instructions embedded inside third-party pages.
* Gemini URL Context remains available as a secondary fallback when the WordPress server cannot retrieve the page.
* If both retrieval paths fail but a user brief or existing publication fields provide usable context, AI generation continues without treating the URL as factual source material.
* A URL-only request now shows a retrieval error only when neither WordPress nor Gemini can actually read the page.

= 1.5.14 =
* Replaced the shut-down Gemini 3.1 Flash-Lite Preview default with the stable `gemini-3.1-flash-lite` model and automatically migrates the retired model ID.
* Added current stable Gemini 3.5 Flash-Lite, Gemini 3.5 Flash, and Gemini 3.6 Flash choices while retaining stable 2.5 fallbacks.
* Automatically retries successful-but-empty Gemini responses and falls back to stable Flash-Lite models before surfacing a generation error.
* Uses low/minimal thinking settings suitable for short social copy and increases output headroom to prevent reasoning from consuming the visible-response budget.
* Adapts newer Gemini payloads by removing deprecated sampling controls where required.
* Makes structured JSON parsing tolerant of harmless Markdown fences, leading/trailing text, and hashtag strings.
* If complete-post structured generation still fails transiently, automatically rebuilds the post from title, content, and hashtag field generations.

= 1.5.13 =
* Fixed repeated false-positive AI context warnings when a valid short publication brief was already supplied.
* Removed Gemini self-rejection flags that could discard otherwise usable title, caption, hashtag, and complete-post generations.
* Short prompts now generate conservatively from the available facts instead of requiring optional details such as prices, dates, links, contact data, or availability.
* Selected WordPress/WooCommerce content is now accepted as valid AI context even when the visible link field is empty.
* Relaxed hashtag post-processing so a usable generated set is not rejected solely because normalization leaves fewer than three tags.
* AI empty-response errors now report a generation problem instead of incorrectly blaming missing user context.

= 1.5.12 =
* Added the complete Gemini model selector used by SEO Mágico: Gemini 3.1 Flash-Lite Preview, Gemini 3 Flash Preview, Gemini 2.5 Flash, Gemini 2.5 Flash-Lite, Gemini 2.5 Pro, and Gemini 3.1 Pro Preview.
* Restored Gemini 3.1 Flash-Lite Preview as the recommended default model.
* Added compatibility migration from the previous `gemini-3.1-flash-lite` value and retained valid saved model selections instead of collapsing them to one option.

= 1.5.11 =
* Fixed LinkedIn credential saving so the expected pre-OAuth state no longer produces a missing access-token error.
* Changed the LinkedIn cleanup action to remove application credentials, access and refresh tokens, profile data, validation state, OAuth transients, refresh locks, and automatic-backup copies.
* Clarified the LinkedIn connection controls and save step.

= 1.5.10 =
* Updated the plugin package version to 1.5.10.

= 1.5.9 =
* Clarified in the Pinterest connection guide that creating the required app needs a Pinterest business account.
* Simplified Tumblr setup with a blog-name field that displays .tumblr.com as a fixed suffix and completes the saved identifier automatically.
* Fixed Logs export so activation and publishing events include their stored date and status columns.
* Clears the Publisher composer draft after a publication is queued or scheduled so the last completed post is not restored from browser session storage.
* Added Blogger multi-image HTML publishing when Social Publisher Pro supplies a Multiple images / Carousel media payload.
* Added Telegram album publishing for Multiple images / Carousel media payloads using the Bot API media group flow.
* Made Pinterest image URL preparation less fragile when the local generated JPEG is valid but the host self-check cannot read the public image body reliably.
* Adjusted Threads media-container status checks so Threads carousel publication is not blocked by Instagram-only status fields.
* Added Facebook Page multi-image publishing support when Social Publisher Pro supplies a valid Multiple images / Carousel media payload.
* Added Bluesky multi-image publishing support, using image embeds up to four items and gallery embeds for larger Pro media sets.
* Allows Pro multiple-image publications to fall back to the first selected image on single-image networks instead of failing before publish.
* Improved the Free admin experience with a more complete Documentation hub and a clearer Settings screen.
* Rebuilt Documentation around practical setup steps: Free connections, optional Pro destinations, AI setup, Publisher workflow, Logs, Settings, tutorial links, and recommended setup order.
* Rebuilt Settings around plugin-wide controls: AI connection status, Gemini API key, model and language summary, configuration map, and cleanup state.
* Added a visible Connect AI path from the Publisher AI generation area to Settings.
* Positioned the locked Pro video call-to-action beside the Publication type selector, outside both publication cards.
* Simplified locked Pro connection cards in Free so they show only a gray icon, network name, and PRO badge.
* Removed YouTube Shorts from Connections because Shorts uses the same YouTube connection and is selected during video publishing.
* Kept disconnected connection tabs gray so provider colors indicate configured connections only.
* Added and updated translation catalog entries for the new Documentation, Settings, AI, Pro, and connection UI copy.
* Preserved provider/API details in video publishing errors where the Free plugin displays results returned by the Pro add-on.
* Improved video destination checks so oversized files are blocked before selecting destinations with lower media limits.

= 1.5.8 =
* Forced the Publication type selector to match the Content column width on desktop and remain full width on smaller screens.

= 1.5.7 =
* Aligned the Publication type selector with the Content column instead of stretching it across the Media column.

= 1.5.6 =
* Improved publication type layout so both choices fill the composer width and stack cleanly on small screens.
* Keeps connected destinations selected automatically, including Discord, while disconnected destinations remain disabled.
* Keeps disconnected connection tabs gray so provider colors indicate a real configured connection.
* Preserves the corrected Bluesky and Mastodon video-processing flow and the Copy logs / Export logs controls.

= 1.5.5 =
* Added a primary network-options area beside the main title, content, link, and hashtag fields so Pro integrations can keep essential publication settings visible.
* Automatically selects connected Pro destinations while keeping disconnected destinations disabled.
* Keeps disconnected connection tabs gray, including the active and hover states, so provider colors indicate a verified connection only.

= 1.5.3 =
* Keeps Blogger selected and publishable when the one-hour Google access token expires but the verified offline session can still renew it.
* Preserves the reconnect requirement when Blogger has no usable refresh token or Google explicitly invalidates the session.
* Prevents duplicate Facebook article URLs when the generated caption already includes the same destination link.

= 1.5.2 =
* Restored Facebook Page OAuth compatibility with Meta responses that reject or omit optional Page task metadata.
* Uses the exact selected Page Access Token as the primary connection proof, matching the previously working flow.
* Treats tasks and debug-token scope inspection as advisory unless Meta explicitly reports an invalid token or missing pages_manage_posts permission.

= 1.5.1 =
* Fixed Facebook classic Page OAuth so clearing the optional Config ID removes current, legacy, and automatic-backup values.
* Restored direct use of Page access tokens returned by /me/accounts while keeping the cached Page selector token-free.
* Facebook no longer rejects an otherwise valid Page token solely because Meta omits Page task metadata; pages_manage_posts is still verified.
* Moved Destinations below Publish now inside the content column to use the available composer space.
* Simplified locked Pro destinations to a compact PRO badge with a hover/focus purchase link.

= 1.5.0 =
* Finalized the Free release for WordPress runtime testing and public ZIP packaging.
* Verified the ten supported networks through WordPress HTTP mocks and preserved partial per-network publishing results.
* Disabled the legacy Facebook real publish test path; Facebook diagnostics no longer publish content.
* Hardened Facebook OAuth/Page discovery transport so supported token-bearing requests keep secrets out of URLs.
* Improved automatic connection backup so it skips empty snapshots and does not store readiness status or provider list caches.
* Corrected LinkedIn connection status restoration so the common connection-state object is read correctly.
* Confirmed Gemini remains optional and uses the gemini-3.1-flash-lite model with the x-goog-api-key header.
* Documented Free limits, privacy, external services, backup, restore, disconnect, Clear tokens, and uninstall behavior.

= 1.4.25 =
* Restricted Gemini model selection and migration to the stable Gemini 3.1 Flash Lite model.
* Sends Gemini API authentication in the x-goog-api-key header instead of request URLs.
* Preserves Gemini HTTP error classes and returns clearer AJAX status codes for authentication, permission, rate limit, and temporary service failures.
* Parses successful Gemini responses more defensively, including invalid JSON, safety blocks, truncation, missing candidates, empty parts, and multi-part text.
* Added a validated structured-output engine for generating a title, social post, and hashtags in one Gemini request.
* Extended the authenticated AI AJAX handler to return a validated title, post text, and hashtags from one Gemini request.
* Moved Gemini rate-limit accounting after local API key and context validation, preventing rejected local requests from consuming the counter.
* Added the complete AI generation control and connected it to the existing structured Gemini AJAX workflow.
* Integrated Gemini URL Context for validated public HTTPS links and verifies successful URL retrieval metadata before accepting generated content.
* Corrected URL Context metadata detection so generated text is accepted only from the same successfully retrieved candidate.
* Added context-sufficiency validation for complete and individual Gemini generation, returning a safe 422 response instead of fabricating missing publication details.
* Strengthened Gemini prompts to preserve material restrictions and prevent generated titles, captions, or hashtags from contradicting explicitly excluded features.
* Refined complete and individual title prompts to favor factual, context-specific headlines without clickbait, invented ownership, or exaggerated results.
* Refined complete and individual content prompts to produce natural factual captions without exaggerated claims, decorative formatting, or unsupported calls to action.
* Refined Gemini context-sufficiency instructions to distinguish publication facts from optional language, tone, emoji, list, and call-to-action formatting requests.
* Refined content prompts to distinguish factual publication status from unsupported assumptions and to keep brief captions limited to the topics actually provided.
* Added structured grounding and publication-status validation to individual caption generation, rejecting unsupported assumptions without additional Gemini requests.
* Added structured grounding, entity-preservation, and language-consistency validation to individual hashtag generation without additional Gemini requests.
* Added session-scoped draft persistence for manual post fields, selected media, and network choices to prevent accidental data loss during admin navigation.

= 1.4.24 =
* Show the saved Gemini API key as a masked preview using the first and last characters only.
* Moved uninstall and cleanup options into Settings so plugin-wide options are centralized.
* Expanded the Documentation tab with setup, publishing, AI, troubleshooting and roadmap guidance.

= 1.4.22 =
* Removed the quick documentation card from the bottom of the Publisher dashboard.
* Kept the dedicated Documentation tab and top documentation shortcut.

= 1.4.21 =
* Moved the per-publication AI prompt, WordPress content search, and link field into an AI context card above the image tools.
* Added form bindings so those fields still submit correctly even though they are displayed beside the main composer.

= 1.4.20 =
* Added a WordPress content search in the Publisher screen for posts, pages and WooCommerce products.
* Selecting a result fills the link field and adds hidden AI context from the selected content.
* Updated Gemini prompting so selected content is treated as factual source material for title, caption and hashtag generation.

= 1.4.19 =
* Added a per-publication AI prompt/brief field in the Publisher screen.
* Sent the prompt/brief to Gemini as the main context for title, content and hashtag generation.
* Kept the AI composer independent and free.

= 1.4.18 =
* Made Social Publisher AI fully independent from other plugins.
* Added the extended Gemini model selector and AI generation language selector.
* Clarified that the AI composer is included in the free version.

= 1.4.17 =
* Added a Settings tab with Gemini AI options.
* Added AI generation buttons for title, content, and hashtags in the Publisher screen.
* Added a Documentation tab with quick start help and a link to expanded web documentation.

= 1.4.6 =
* Queued manual publishing in the background to prevent 504 admin timeouts.
* Added duplicate protection for repeated manual submissions and Gutenberg auto-post retries.

= 1.4.5 =
* Added a Meta-safe static JPEG media store for Instagram and Threads publishing.
* Improved media URL diagnostics for Meta fetch failures.

= 1.4 =
* Updated the WordPress.org contributor username to a valid profile.
* Bumped the plugin version for the next release.

= 1.3.11 =
* Tested compatibility with WordPress 7.0.
* Added file-based cache busting for admin and editor assets.
* Reviewed admin asset loading for the WordPress 7.0 admin interface.

= 1.3.10 =
* Added a global review box styling fallback so the Publisher tab uses the same compact, transparent layout as the other admin tabs.

= 1.3.9 =
* Applied the compact topbar height and transparent review box styling consistently across all admin tabs.

= 1.3.8 =
* Narrowed the Social Publisher header container and centered it for a more compact layout.

= 1.3.7 =
* Reduced the Social Publisher header logo by roughly another 60% as requested.

= 1.3.6 =
* Reduced the Social Publisher banner logo size and restored a lighter, less intrusive button style.

= 1.3.5 =
* Updated the admin banner with the new Social Publisher logo and right-aligned action buttons.

= 1.3.4 =
* Reduced the screen bottom spacing and tightened the footer review area layout.

= 1.3.3 =
* Adjusted the footer review section to be centered, more compact, and visually integrated with the admin layout.

= 1.3.2 =
* Added admin banner actions for support and suggestions.
* Added a WordPress.org review prompt in the plugin admin footer.
* Updated the WordPress admin menu icon to use the Calliope Social Publisher app icon.

= 1.3.1 =
* Fixed Telegram publishing by registering the Telegram client in the network dispatcher.

= 1.3 =
* Added Telegram publishing for groups, supergroups, channels, and optional forum topics.
* Added Telegram connection settings, Bot Token validation, chat destination testing, manual publishing, and Gutenberg auto-post support.
* Added Telegram external service documentation and uninstall cleanup handling.

= 1.2 =
* Fixed Gutenberg automatic publishing so the selected social destinations and sidebar fields are saved reliably before the auto-post runs.
* Reused the same internal publishing pipeline for both Gutenberg auto-post and the manual Publish now flow.
* Prevented automatic re-posting on normal updates after a post is already published, unless the post leaves publish status and is published again.

= 1.0.25 =
* Added Instagram feed image compatibility handling: images outside the supported 4:5 to 1.91:1 ratio are auto-cropped into a centered compatible copy before publishing.
* Added a square-crop retry when Instagram still returns an unsupported aspect ratio error while creating the media container.
* Rechecked WordPress.org review fixes: external services documentation, REST callback URLs via rest_url(), explicit setting sanitizers, and the native image cropper replacement remain in place.

= 1.0.24 =
* Hardened uninstall cleanup so deleting the plugin is not blocked by stale cleanup data, upload folders, or old legacy Facebook options.
* Prevented intentionally cleared/disconnected tokens from being restored from the automatic connection backup.
* Clarified that disconnecting a network removes credentials, while deleting the plugin itself requires deactivating it first from the WordPress Plugins screen.

= 1.0.23 =
* Improved Facebook identity confirmation messaging with clear mobile-app verification instructions and a preventive connection note.
* Kept Facebook connected during Meta identity blocks and preserved technical logging without secrets.

= 1.0.22 =
* Hardened the image remove action so selected/cropped images, local storage, file input, preview, and alt text are cleared reliably.
* Cleared the manual publish image selection after successful and partial publishes so the next post starts clean.
* Made Facebook disconnect clear both current Social Publisher options and legacy Facebook token options.

= 1.0.21 =
* Improved Facebook Graph API error classification so code 368 is not always treated as identity confirmation.
* Added safer Facebook diagnostics and technical logging without access tokens or app secrets.
* Added Facebook test publishing options for text, link, and image checks.

= 1.0.20 =
* Normalized hashtags consistently across manual publishing, Gutenberg, and network-specific payloads.
* Added safer partial-result reporting so Pinterest anti-spam rejections are treated as network-specific warnings instead of full plugin failures.
* Added Publisher image format options with an Original mode plus square, portrait, and landscape crops.
* Hardened public media generation and validation for Instagram, Threads, Facebook, Pinterest, and Blogger uploads.
* Improved Facebook Page connection fallback so page discovery can continue even when some business-related endpoints are unavailable.
* Clarified user-facing publish and connection messages for Facebook, Pinterest, Instagram, Threads, and Blogger.

= 1.0.19 =
* Removed the outdated bundled Cropper.js library and replaced it with a native image cropper.
* Reworked Settings API registration so each setting type has an explicit sanitize callback.
* Hardened the Facebook Pages cache sanitization and reduced cached settings to expected fields only.
* Expanded external services documentation for Mastodon and Threads endpoints, data sent, terms, and privacy links.

= 1.0.18 =
* Addressed WordPress.org review feedback for external services documentation, REST callback URLs, and settings sanitization.

= 1.0.14 =
* Added automatic backup/restore protection for saved connections during updates and reinstalls.
* Preserved user data by default on delete unless cleanup is explicitly enabled.

= 1.0.8 =
* Fixed false connected states caused by missing options being treated as saved credentials.
* Fixed destination checkboxes so only real connected networks are preselected.

= 1.0.3 =
* Refined the Social Publisher admin branding and updated the header logo styling.
* Updated the header logo treatment for the Calliope SP brand asset.
* Removed the custom Update URI for WordPress.org compatibility.
* Added missing translators comments flagged by Plugin Check.
* Improved sanitization and unslashing for admin form and OAuth callback inputs.
* Renamed internal filter hooks to use the Social Publisher prefix.
* Continued cleanup for WordPress.org readiness.
