Skip to main content

Changelog

A running log of user-facing changes in each SyteOps release. Only features, improvements, and fixes that affect the admin experience are listed here.

v1.6.816​

  • A module signing key that SyteOps retires is no longer trusted by your site after its next license check.

v1.6.815​

  • A note placed inside a tab now says "Not showing" whenever its tab is closed, however it was first shown.

v1.6.814​

  • A link for a number that cannot be dialed (a withheld or blocked caller) is now left off, so no Call button appears for that caller.

v1.6.813​

  • Call buttons in callback emails now place the call right away: your phone rings, press 1 to connect, and the call is logged to the lead. Sites can add the same button to their own lead and missed-call emails.
  • A Call button made for one person works for that person only, a link opened again shows a Call again button instead of calling by itself, and a call RingTonic refuses pauses that person's next try for a few seconds.

v1.6.812​

  • The weekly callbacks list now arrives at 8:00 on Monday morning, on time, instead of somewhere between 7:30 and 8:30.

v1.6.811​

  • The callback report, summary and reminder emails now have a compact header with a label, more space under each section heading, and a footer that stays on one line.

v1.6.810​

  • The locate button on a note inside a tab now goes straight to the note every time instead of sometimes jumping to the top of the page, and it no longer looks grayed out when it can open the note.

v1.6.809​

  • The locate button now works every time on a note inside a tab, even after switching to another tab, and the note says "Not showing" while its tab is closed.

v1.6.808​

  • Notes placed inside a tab, slide or menu now appear as soon as that part of the page is opened in the preview, the locate button opens the tab or section a note was placed in, and notes that can't be seen right now say "Not showing" instead of "Moved".

v1.6.807​

  • Note pins on pages whose sections are built by the page's own scripts (tabs, sliders) now appear once the page finishes loading, and the locate button tries again for a note marked as moved.

v1.6.806​

  • The review portal preview now opens from a saved copy for speed, and shows when that copy was made. Reload latest (formerly Refresh) fetches the newest version and replaces the copy. The copy is made for each reviewer alone, is replaced automatically when pages, pictures, menus, the theme, plugins or settings change, and is never kept longer than about 10 hours. Reload latest always shows the newest.

v1.6.805​

  • Notes placed in the review portal now find their spot again after the page's text, tabs or formatting change, and quotes on note cards read with proper spacing.

v1.6.804​

  • Consent records sent through the licensing server now also carry the admin's browser address as reported by the client site, kept beside the server's own verified address and labeled unverified.

v1.6.803​

  • Admin fixes from a two-week review. A Tab Code that the file store would rewrite, such as wp, key or csv, or one that ends in an underscore, is now refused up front with "Tab code is not valid" when you create, rename, copy or import a tab, instead of failing later with "Unable to persist tab"; the Create popup field holds the same rule. On the license server, the Modules screen now shows the automatic-update switch of the list it is actually using, without the words "set by your license server". Delete links in the collections popup use the standard danger color from the admin color scheme, the registry popup panel and the error status badge use design tokens instead of fixed colors, and stopping the retention countdown of a reactivated endpoint changes only that one entry.

v1.6.802​

  • Licensing fixes from a two-week review. On a licensing server whose connection records cannot be read, the admin dashboard, settings saves, the server's connection tools and the background endpoint scan now stop with a plain message instead of a critical error. A credential roll refuses a token pasted in its stored, encrypted form before anything is sent to an endpoint. Authorized Domains entries are checked label by label when saved, and the screen refuses a value it would otherwise have cleaned into a different domain. The debug answer for a refused domain no longer lists the authorized domains. The version check route answers an OPTIONS request like a route that does not exist. A module uninstall now waits for a running module install or update instead of running beside it, and a module index entry with a malformed version no longer stops the update check. The public install check routes count an IPv6 caller by its network, so one caller cannot use up the site-wide limit. Licensing debug logs mask list values that name no field.

v1.6.801​

  • Licensing and lead-form security fixes. Rate limits on the licensing server, its connection routes and the public lead forms now count the address that actually connected, and read a forwarding header only from Cloudflare or a proxy you name, so a caller can no longer reset a limit by changing a header. Parallel requests can no longer slip past a limit, and one signed request can no longer be used twice. When one network sends more than 20 new leads in an hour, its further leads are still saved but marked Held and send no notifications, so a flood cannot silence real leads from elsewhere; past 300 new leads an hour across the site, new leads are held too and the report recipients get one email about it. The licensing server's purchase address accepts only the purchase credential however the address is written, forwards a consent record only for the license holder's own email and only with its consent fields, and registers a reported connection only when it is in server mode. A connected site now stops using its own connection credential only when its server says that credential was refused, not after a clock or header problem. A license lookup now asks the store's search first, and answers as an outage instead of an unknown key only when a read of the store failed.

v1.6.800​

  • Leads privacy and consent fixes from a two-week review. By location now treats a visitor whose country cannot be told (no country header, a VPN or Tor) as opt-in, so they are asked first; before, they were tracked without being asked. When a visitor withdraws consent, the visitor and session ids kept in their browser are removed too, and a form lead no longer picks up a first-touch cookie that survived the withdrawal. A query string such as an email address in the link a visitor arrived on is no longer stored with a lead or shown on the proof page. The qualification form now starts a session when tracking is allowed, so the leads it makes are attributed. With Don't record a lead set for internal traffic, a lead is dropped only for a signed-in team member or your internal header, so a link you forward to a prospect no longer makes their enquiry disappear. Through the management API and MCP, turning on anything that sends lead details off the site (the webhooks, the instant and periodic emails, the RingTonic contact push) and changing whether call summaries are stored now needs an explicit confirmation, and a script that sets report recipients is refused when an address is not valid; the settings screen is unchanged. Saving the Leads settings while the RingTonic integration is off no longer switches off the stored call summary setting. Tracked links: a link path with a dot segment is refused, two saves or inserts at the same moment can no longer leave a link without its first segment or give two kinds the same suffix, imported templates are checked like saved ones, and the Copy link menu keeps channels added by other tools. The RingTonic caller ID list is no longer stored when it was only partly read, contact details are read from RingTonic only when they are stored in Full, a first-touch owner claim is checked even without a link id, and the speed-up rule in .htaccess is removed when the RingTonic integration is switched off or the plugin is deactivated. The Tracked links screen messages can now be translated.

v1.6.799​

  • Fixes from the two-week review of pipelines, the management API and sharing. Saving a recipe, a content source, the operating mode or an engine choice can no longer undo something another request saved a moment earlier, such as a recipe or a rotated webhook secret. Listing-image runs started from the management API now stop at a daily limit for the whole site, and automatic GEO re-analysis has a daily limit for the whole site as well. Every successful destructive management action leaves a lasting entry in the activity log, and the log entries for review and calendar actions name where the action came from in one consistent way. A failed clear of the run history is reported as a failure, calendar refusals use the right status, and a bare internal-traffic option on the command line is refused. Share to no longer posts twice when a slow post is retried, and a second Connect in another tab no longer breaks the first.

v1.6.798​

  • Integration fixes. A headless site's SEO records now update right after a title or description is edited on its own, without waiting for another save of the page. The Search Console key help and the brand colors help now show your white-label name. Link passes keep the first and last letters of an anchor, never put links inside FAQ or How-to blocks, leave a post alone when it was edited while a pass was running, and a second pass can no longer claim the same first publish. AI link matches now respect the maximum links to one address. Removal pings for a permanently deleted page are now sent, and a front page follows its own noindex default. The headless deploy request now stops at a daily limit (48 by default) and sends the kept change the next day. A reply cut off after the request was sent is no longer retried. A private-link sign-in with an empty password no longer counts toward the wrong-password pause. The Send now note shows in the site language.

v1.6.797​

  • Review Portal fixes from a two-week review. Changing a picture, or its alt text and caption, on a live Elementor page now refreshes the live page and its page cache straight away, and rebuilds only that page's Elementor styles. Undo on a picture swap stops and says why when the picture was already on the page before the swap or the page was changed again since. Adding or removing a reviewer or watcher at the same time as another change no longer loses either. A swap, Apply and Undo now wait for one another, the Share to dialog no longer lets a finished post be sent twice, and the messages the portal shows use your own plugin name. The Check now button, the AI prompt builder and the Generate buttons now respect their limits, and the preview frame, sign-in and layout have a few smaller fixes.

v1.6.796​

  • Management API hardening. Approving a scheduled article through the API now keeps its scheduled date instead of publishing it at once. Reading or changing a module's settings through the API now reaches only the Banners settings, named field by field, so no stored password or key can be read or written that way. Rescheduling, unscheduling or taking an article down, from the calendar or the API, now waits for a reviewer's save or publish of the same article to finish. An internal error no longer hands its raw message to the API caller, and a social post whose text is empty once cleaned is refused instead of queued. On the command line, reading a webhook address no longer prints a placeholder that could be piped back in and stop lead delivery, the placeholder is refused as a value, and a clear switch given the value false no longer clears.

v1.6.795​

  • Leads fixes from a two-week review. Move existing links now keeps a link prefix you chose instead of putting links back under the default. The Automation and CRM webhook addresses refuse addresses inside the server's own network, and are checked again when a lead is sent. The lead-form widget no longer records test submissions from signed-in staff when internal traffic is set to skip. A RingTonic contact edit no longer stops at another contact when RingTonic answers the phone-only retry without saying how it matched, and a merge flag is never raised for a single contact. Outbound calls spelled with capital letters, or as outbound-dial, no longer create leads or attach their summary to a caller's lead. The Leads settings screens use the white-label plugin name. Imported people no longer carry another site's slot or user, so the hub cannot show their links to a different person, and imported slugs are checked. The RingTonic handshake no longer makes a site's own contact push stand down when SyteOps would record no lead.

v1.6.794​

  • The GEO card in the Review Portal now uses the full width better. On a wide screen the questions sit on the left, and Add a question, the two checkboxes and the review confirmation sit in a column on the right, level with the first question. When the answers are not published anywhere yet, the card now says so instead of hiding the confirmation without a word, and points people who manage settings to where to turn it on.

v1.6.793​

  • Review Portal emails no longer show a logo in place of a missing featured image. An item without a picture now ends its card after the buttons, so the logo no longer sits off-center on a gray panel under the header logo. Items with a featured image are unchanged, and the Review Portal queue cards keep their logo stand-in.

v1.6.792​

  • Licensing fixes. A license lock no longer turns off the licensing server's own gateway, and the licensing server no longer locks itself after 15 days without a confirmed check. A lock now saves every SyteOps Admin before removing the role, and a repeated lock no longer forgets which modules to turn back on, so the next valid check always restores both, and opening an admin screen no longer removes SyteOps Admin because the management connection reports the domain as in use elsewhere or not authorized. A license check whose recovery attempt goes unanswered now keeps its expired or inactive answer instead of falling back to the offline grace period. When the licensing server cannot confirm a site's hub credential, or cannot read the license it was pointed at, the site now stays on the offline grace period instead of reading it as a refusal or an unknown key.

v1.6.791​

  • Callback emails now carry your site's own brand. The call summary, the follow-up reminder and the Monday list use the logo and color set in General → Branding instead of a fixed teal, and a site can also set its own logo size, colors, font and footer text for these three emails, or hide the plugin footer. Other lead emails are unchanged.

v1.6.789​

  • Callbacks fixes from review. Done, Not a lead and Reopen from any tool now wait while a call is being placed and respect another person's call lock. An answered call from a lead no longer reopens a closed callback (a missed or very short call still does): the AI read of that call decides. The Monday list never expires a callback it did not name, and an email nobody received no longer counts as sent. A follow-up reminder goes out once, even after the lead calls in. A call whose outcome the phone system never confirmed is credited to the person who placed it. AI reads whose scheduled run was lost are picked up by the hourly check, and the callbacks schedules are removed when callbacks or the plugin are turned off.

v1.6.788​

  • The subject and main heading of the three callback emails (the call summary, the follow-up reminder and the Monday list) now use Title Case, to match the weekly report from the phone system. Only the fixed words change: a lead's name, a date or a count shows exactly as it is stored.

v1.6.787​

  • The management API's Leads settings read now says, for each setting, whether it decides where lead details are sent and whether changing it needs a confirmation, so tools no longer keep their own list.

v1.6.786​

  • Fixes a critical error on sites with Leads active: the follow-up reminder's daily check was started with the wrong kind of value, which stopped the site loading. Callback reminders, summaries and the weekly list now start safely.

v1.6.785​

  • Callbacks: a Monday list. Every Monday at about 7:30 am (site time), the people in the slots you list under the new Monday callbacks list setting get one email: the callbacks still waiting (oldest first, with how many weeks each has waited), follow-ups due or overdue, what was returned and closed last week (a callback the AI closed is called out, with Reopen), and who called in. Names, numbers and buttons follow the contact-details setting (Masked shows masked details and a link to the page; Off shows counts only), and a call transcript is never emailed. At 16 weeks a callback gets one last mention and then expires, once that Monday's list has gone out (nothing expires while nobody is listed); a new call or form from the same number, or Reopen, starts its 16 weeks again, and, while the list is on, the portal shows when a callback in its last week will expire. Off until recipients are set. If another tool already sends a Monday callbacks report, turn that off at the same time.

v1.6.784​

  • Callbacks: with Follow-up reminders switched on in the RingTonic settings, the person who last called a lead gets one email at about 7:30 am (site time) on the day the follow-up is due. It has the last call's summary, the next step, the follow-up date and how long the lead has been waiting, and buttons (Call, Done, Not a lead) that open their page at that callback and ask for a confirm; Call shows only for people with Call access, and the buttons only while contact details are stored in full. If that person has left or does not have Call access, the reminder goes to the slots listed under Otherwise send reminders to slots, and to nobody when none are listed. Nothing is sent while someone is calling the lead, a follow-up missed by up to three days is reminded once, and older ones are not reminded. The transcript and the AI's quoted words are never emailed, and names, numbers and summaries follow the contact-details setting. Off by default.

v1.6.783​

  • Callbacks: a call placed from a Call button your site has outside the portal, such as in its lead emails, now locks the callback for the person who placed it, just like a call from the portal, and counts toward the same call limits. It is never stopped by a limit, because it has already been placed, so the portal's Call button sees the limit reached afterward. If someone else is already calling that lead, their lock stays. A site that places its own calls can also check first whether someone is calling a lead or a limit is reached.

v1.6.782​

  • Callbacks: people in the slots you list in the RingTonic settings now get one email for each callback a person places, once its call has a transcript and the AI has read it. The subject reads "Callback by Todd: Jane Roe (4 min)". The email has the lead, how the call went, RingTonic's summary, the next step and follow-up date, what the AI did, and buttons (Call again, Done, Not a lead, Reopen) that open the person's own page at that callback and ask for a confirm; only the buttons that fit the callback's state and the person's access are shown, and only while contact details are stored in full. A callback the AI closed is called out at the top with its reason and confidence, with Reopen. The transcript and the AI's quoted words are never emailed, and names, numbers and summaries follow the contact-details setting. Off until recipients are set. On a site that already sends callback emails from its own code, turn those off at the same time.

v1.6.781​

  • Callbacks: an AI now reads each call's transcript once and decides whether the callback is handled or still needs a call. It closes a callback by itself only when it is at least 85% sure and can quote the call word for word; otherwise the row shows its suggestion with Confirm and Dismiss. It reopens a callback or sets a follow-up when it is at least 60% sure, fills in a name, company or email it heard only where the field is empty and nobody on the team typed one, and treats the carrier's caller ID name as a clue, never as proof. Each call in the lead view shows what the AI read and did. Both thresholds and a daily limit of AI reads are in the RingTonic settings, and it uses the AI provider chosen for Lead Attribution.

v1.6.780​

  • Callbacks: a person returning a call can edit the lead's contact right in the portal (first and last name, company, email, office phone and a note; the phone number stays fixed). Saving updates the lead and the callback, updates the RingTonic contact a moment later, and sends the updated lead to your CRM and Automation webhooks marked as a contact update. The lead view also shows the contact as RingTonic holds it now, and the caller ID name the phone carrier gives on an incoming call.

v1.6.779​

  • Review Portal: the list in the Below the article card no longer starts a wrapped line with a dot; each dot now stays at the end of the title before it.

v1.6.778​

  • Review Portal: cards that wrap under the article now use the full width, wide cards lay their items out side by side, and a Below the article card at the foot of the sidebar lists them and jumps to them.

v1.6.777​

  • Callbacks get a Call button: people with Call access can call a lead back from the portal through RingTonic, after a short confirm. While someone is calling a lead, everyone else's buttons on it are locked until the call ends, the caller releases it, or 15 minutes pass. Calls stop at daily limits per person, per site and per lead, plus an hourly limit per lead and a per-minute limit, all adjustable in the RingTonic settings. Links in callback emails open the right row and its confirm.

v1.6.776​

  • A site's calling setup can now be written through the management API: the Leads settings, several at once and checked by the settings screen's own rules (changing how contact details are stored needs a confirmation), each person's people link, and the site time zone. RingTonic keys are never accepted this way; they are still set on the RingTonic card or from a terminal. The module configuration call no longer writes raw Leads settings.

v1.6.775​

  • Callbacks now keep calls from the caller too: when a caller rings again, the call, how it went, how long it lasted, whether there is a recording and, while contact details are stored in Full, the AI summary and transcript are added to the callback's history and its row. A call from the caller never marks a callback returned or closes it. A call dialed directly in the RingTonic app shows as Placed in RingTonic.

v1.6.774​

  • Callbacks now show the lead right on the page. Select View lead on a row to open the person's contact details, where they came from, their form answers and every call, with the AI summary and the transcript a click away, without leaving the portal. The Callbacks list also gets a tidier layout on desktop and phone.

v1.6.773​

  • Every portal link to the WordPress admin now opens in a new window, and a callback's link to its lead reads Open in admin. Groundwork for showing a callback's lead, its calls and what was said right in the portal, following the site's contact-details setting.

v1.6.772​

  • Sites can now hold a separate RingTonic calls key for click-to-call, kept apart from the CRM sync key. The RingTonic card shows the key's number and fingerprint, checks what it can read, and takes the caller ID number, with a reminder of the caller-ID verification carriers need. Each person's card gains a RingTonic member email on its Leads tab, for people who sign in to RingTonic with a different email.

v1.6.771​

  • A license server that is down, being maintained, or can't reach its store no longer removes SyteOps Admin access on client sites, including sites that have not updated yet; they stay on grace until it answers.

v1.6.770​

  • When a form lead's phone and email belong to two different RingTonic contacts, the contact matched by phone is updated and gets the form conversion, and the lead is flagged so the two can be merged in RingTonic. The flag shows on the lead and on the Callbacks list, and a Merged button on the lead clears it.

v1.6.769​

  • Calls your team makes back to a waiting caller through RingTonic are now recorded on that caller's callback instead of being ignored. An answered call of 30 seconds or more marks the callback Returned, and each callback in the list shows the last call and how it went, for example "No answer" or "The call was never put through to the lead". A call that is not answered never changes a callback's status, and calls are recorded only while contact details are stored in Full.

v1.6.768​

  • The SEO card now has separate Generate title, Generate description and Generate keywords buttons, each beside its own field. Each makes one AI request and fills only its own field or fields. Title and description take the primary keyword into account. On a draft, generated text is autosaved like any edit; on a published post it's kept only when you save. Each person can generate up to 40 times an hour and 200 times a day.

v1.6.767​

  • Lead settings for each person now have their own Leads tab in Roles & Users, right after Info. Callbacks access moved there from the Info tab, and the tab only appears while Lead Attribution is active.

v1.6.765​

  • Each person's private page can now show a Callbacks list of the callers waiting for a call back, in order, with Done, Not a lead and Reopen. Closed callbacks are hidden until you turn on Show closed, and a status filter shows one group at a time. Access is set person by person (Off, View and act, or Call) on the Roles & Users screen, with no automatic access for administrators.

v1.6.764​

  • Callbacks in Leads can now be listed, marked done or not a lead, and reopened through the management API, with the person and time recorded. Closed callbacks are hidden unless asked for, and names and numbers appear only while contact details are stored in Full.

v1.6.763​

  • Groundwork for callback tracking in Leads. Callbacks are recorded only when contact details are stored in Full.

v1.6.762​

  • Adds a private, token-protected way for operator tools to read the installed version.

v1.6.761​

  • Review Portal cards now fill the empty space beside and under the preview, in a sensible priority order, with a separate switch for the editing and client views.

v1.6.760​

  • Section buttons at the top of admin screens are easier to read: darker text, clearer outlines, readable group labels, and a solid highlight on the screen or section you are in.

v1.6.759​

  • IndexNow sends and status checks through the API now refuse posts you can't edit.

v1.6.758​

  • The API can now read and change who can review and publish in the Review Portal, with confirmation.

v1.6.757​

  • The API can now schedule or cancel social posts and run or redo listing images.

v1.6.756​

  • The API can now reprocess, test and re-send review emails for content sources, and learn a source's mapping from a sample, with a daily limit.

v1.6.755​

  • The API can now approve a post for publishing, request changes and add comments, with the same checks as the Review Portal.

v1.6.754​

  • The API can now read pipeline stats and the activity log, and delete or clear run history with confirmation.

v1.6.753​

  • The API can now read and change the content pipeline mode, stages, AI engines and GEO settings.

v1.6.752​

  • The API can now read the publishing calendar and reschedule, unschedule or unpublish posts.

v1.6.751​

  • The API can now add and remove a post's reviewers and watchers, and a removed reviewer stays removed.

v1.6.750​

  • The content pipeline screen and docs now describe which recipe runs and when.

v1.6.749​

  • Deleting a pipeline recipe or run history now leaves a lasting entry in the activity log.

v1.6.748​

  • Creating or duplicating a pipeline recipe no longer overwrites an existing recipe, and recipe saves can't overwrite other settings.

v1.6.747​

  • The API can now read the review queue, a post's review status, its reviewers and its comments.

v1.6.746​

  • Running a pipeline through the API now refuses trashed posts and posts you can't edit.

v1.6.745​

  • API operations now require a SyteOps Admin or an API key on every path.

v1.6.744​

  • The distribution site can now install and auto-update its own private module updates, and the release check confirms private packages stay private.

v1.6.743​

  • The Review Portal shows whether Google has indexed a published page, once Search Console is connected.

v1.6.742​

  • Google sign-in for connected services now shares one secure helper.

v1.6.741​

  • Published pages and posts get a Request indexing on Google button in the Review Portal.

v1.6.740​

  • Logos and small pictures in review emails no longer appear blown up to the full width.

v1.6.739​

  • A site that hasn't confirmed its license for 15 days now locks until it can check again, and a license lock no longer removes SyteOps Admin access for good: it comes back when the license checks out.

v1.6.738​

  • A licensing answer that leaves out the site list no longer locks a site.

v1.6.737​

  • Links are no longer suggested for content with an unfinished link.

v1.6.736​

  • Reviewers who sign in from their own private review page are no longer asked by Wordfence to confirm by email.

v1.6.735​

  • Signing in from the Review Portal on a site protected by Wordfence no longer sends a verification email every time, and a verification email brings the reviewer back to the portal.

v1.6.734​

  • Signing in from a reviewer's private page no longer fails with a cookie error.

v1.6.733​

  • A license's status can no longer be changed from a customer site through any licensing gateway, and an expired license is never switched back on by an activation attempt.

v1.6.732​

  • A newly issued license now activates on the first try from a customer site, and a license you disable can no longer be switched back on from a customer site. An expired license no longer switches itself back on when a site checks it.

v1.6.731​

  • LinkCentral never saves to pages built with Elementor (it only suggests links there), leaves text after a hand link that was never closed alone, and suggests only phrases it can actually link.

v1.6.730​

  • On a headless site, saving an opted-in form, a published page's SEO fields or a redirect rule now rebuilds the frontend automatically, through the same single debounced rebuild as publishing.

v1.6.729​

  • A headless site's frontend can submit a Fluent Forms form through SyteOps, which stores it as a normal Fluent Forms entry, so notifications, FluentCRM and FlowMattic run as they do on WordPress and lead attribution is kept. Forms with features the frontend can't reproduce, such as captcha, user registration or double opt-in, stay as links to their WordPress page.

v1.6.728​

  • Authorized Domains wildcards (*.example.com) now work: they cover subdomains but not the bare domain, and malformed entries are refused on save. A licensing server whose list held only wildcards used to allow every site; it now allows only the matching subdomains, and a list holding only the server's own domain now allows only the server. The Authorized Domains screen lists any live site the current list would refuse.

v1.6.727​

  • After a site moves to a new address, one command moves its management connection there too, so LinkedIn sign-in and the daily delivery keep working; the hub checks both the old and the new address before it changes anything.

v1.6.726​

  • Headless sites can read the Fluent Forms forms an admin marks for the frontend, with their fields, labels, submit button and success message, so the frontend can show them natively; a form with features the frontend cannot reproduce is flagged so it links to the WordPress page instead.

v1.6.725​

  • LinkCentral keeps each page within a body-link limit (12 by default), never removes the last inbound links an article relies on, and can favor priority pages the site lists.

v1.6.724​

  • The builder check used by site coding sessions now confirms a signed-in caller can edit the page or template, and refuses trashed or hidden posts.

v1.6.723​

  • Headless sites can read their redirects from Redirection, Pretty Links and LinkCentral as plain rules on the frontend's own address, with any rule the frontend cannot safely serve listed separately.

v1.6.722​

  • Headless sites' SEO data leaves out search and author links the frontend does not serve, until a SyteOps admin turns them on, and the frontend can read those switches.

v1.6.721​

  • LinkCentral now writes descriptive link text that names the linked page's topic, taken from its SEO focus keyword or title, and skips vague phrases.

v1.6.720​

  • LinkCentral now changes only the links it adds or removes: every other character of an article, including hand-placed links, formatting and the title and excerpt, stays exactly as written, and links match whole words only.

v1.6.719​

  • Headless sites can read each page's SEO data (title, description, canonical, robots, social and structured data) from the active SEO plugin, on the frontend's own address, so the frontend can build its page heads from it.

v1.6.718​

  • LinkCentral no longer strips backslashes from a post when it adds links, so block settings and code samples stay intact.

v1.6.717​

  • LinkCentral's automatic cross-linking now runs only on an article's first publish, so later edits and saves never change its links; a post can opt out, and the links route re-runs on a live post only when asked with force.

v1.6.716​

  • The Review Portal warns when your SEO plugin would drop part of a search title or description, such as a percent range written as 65%-75%, and suggests a form it keeps; with an SEO plugin active, an empty excerpt now stays empty when you edit the search description.

v1.6.715​

  • Headless sites get a FAQ prompt card in the Review Portal: it turns a page's reviewed questions and answers into a ready task for building the visible FAQ and its FAQ schema on the frontend, and refuses pages that are not publishable.

v1.6.714​

  • The Review Portal's AI agent prompts card now has an Approval choice (propose only, approve each change, or an approved batch), a site default for it, a Download .md button and a Template badge, and generates step-by-step task prompts a site coding session can act on.

v1.6.713​

  • Hosting tools can now read and set a page's SEO title, description and keywords through whichever SEO plugin is active, with a preview first, and clear a page's cache; SEO writes for custom page types used as the home or posts page now reach Squirrly.

v1.6.712​

  • Task prompts for site coding sessions can now fix a change whose target SyteOps can't prove on the page, after the person approves that exact change; nothing reaches a site until the prompt button ships.

v1.6.711​

  • In the Review Portal, the SEO panel now shows what search engines will read: the search-result preview fills in your SEO plugin's placeholders, and the Description box shows the search description your SEO plugin holds. Editing the Description no longer overwrites a different page excerpt. Reviewers who cannot edit the post itself can no longer save SEO placeholders that read hidden data, such as custom fields or author details.

v1.6.710​

  • Groundwork for step-by-step task prompts for site coding sessions: each requested change will name only what it can safely edit on the reviewed page, and anything uncertain is described instead of changed.

v1.6.709​

  • In the Review Portal, the web address (permalink) now sits in a slim strip right under the title, above the article or page preview, instead of at the bottom of the article.

v1.6.708​

  • Notes on Elementor pages can now be matched to the exact element, its current settings and a check value, so an assistant working on the site can confirm the element is unchanged before editing it.

v1.6.707​

  • The note at the side of the Review Portal that says what you can do with a draft now stands out, with a clear border, an accent edge and a shadow, so it no longer blends into the page.

v1.6.706​

  • Notes pinned on a page now record which Elementor element, template, image and link they point at, and the location details already captured (heading, classes, the element's markup) are now kept with the note.

v1.6.705​

  • The PhantomStudio headless card on Systems / API now shows on sites without FlowMattic.

v1.6.704​

  • SEO titles set in Squirrly or by other tools are no longer replaced when SyteOps writes a description or keyword.

v1.6.703​

  • A Review Portal save that changes nothing no longer touches the post or its SEO record; a save that changes only SEO fields, image text or categories on a live page still refreshes the live site.

v1.6.702​

  • A Review Portal save no longer resets a page's SEO title or description that was set elsewhere.
  • Emptying the Description box no longer clears the search description.

v1.6.701​

  • Hosting tools can read the license state as one machine-readable status, including the address the license is registered to and the site's current address.
  • A license can be moved to a site's new address with one command: it frees the old address and activates the new one with the same key, but only after the front end now serving the old address confirms this site, so a copy of a site is refused.
  • After a site's address changes, the license keeps working with an admin notice for 14 days instead of locking at once.
  • The licensing server no longer reports an activation it refused for want of a free seat as a success.
  • Deactivated seats are never counted as in use.

v1.6.700​

  • The Show on page crosshair on each note now sits in the note's left column, right above the delete button.

v1.6.699​

  • A save followed by an automatic content pass no longer triggers two rebuilds.

v1.6.698​

  • The Review Portal top bar now shows a small ID chip, such as #1234, just left of the status pill, so you can tell a teammate exactly which post or page you mean.

v1.6.697​

  • Posts to LinkedIn now include the page's picture again: the picture is now sent to LinkedIn labeled as the image it is, which LinkedIn requires. When LinkedIn still refuses a picture, the post goes out without it and the message names the step and the status code LinkedIn answered with.

v1.6.696​

  • The Quick Navigation heading is now centered above its section links on every tab header, sitting with them instead of floating left.

v1.6.695​

  • Rebuilds no longer deploy twice when PhantomStudio is slow to answer: the rebuild request now waits up to 20 seconds for PhantomStudio, and if it still has not answered, the screen says it was sent and most likely started instead of asking again.

v1.6.694​

  • Sharing to LinkedIn now reads a page's picture straight from the server only when it is that post's own featured or attached image. Any other picture is fetched through the website like a visitor would, so images in members-only or protected locations are never posted.

v1.6.693​

  • Saving a change to the consent mode, cookie, internal traffic, goal or qualification settings now refreshes your page cache automatically, so visitors see the change at once; saving without a change leaves the cache alone.

v1.6.692​

  • Red status pills now always show white text on a red dark enough to read, including the Logging ON pill when your brand warning color is red, the failed and error pills on Content Pipelines, and the dead-link pill in the Review Portal.

v1.6.691​

  • Posting to LinkedIn from Share to now sends the same preview card the page shows when anyone else shares it: its Open Graph title, description and image, as your SEO plugin prints them. Where the page has none, the card uses the post's title, excerpt and featured picture. A picture on a CDN or another site is downloaded for the card (https only, up to 8 MB).
  • When a LinkedIn post goes out without a picture, the dialog now says so and why, for example that the page has no image or that LinkedIn did not accept it.
  • Long titles and descriptions are shortened for the card, so LinkedIn no longer refuses the post over them.

v1.6.690​

  • Share to now shows titles and summaries as plain text. Apostrophes, spaces and ampersands no longer appear as code in the LinkedIn dialog, and the LinkedIn post card is sent clean.
  • The small button beside each channel in Share to now reads Copy link, and says Link copied once it works.
  • Share to menus now list a channel only while its switch is on under Content Pipelines, Review Portal, Social sharing (LinkedIn, Facebook, X, Instagram, Email, Text message; all off until you turn them on). Existing channel rows for Facebook, X, Instagram, Email and Text message disappear until you switch them on. LinkedIn is carried over if its integration was on; channels you added yourself always show. With all off, the menu is just Copy link.
  • The LinkedIn switch replaces the LinkedIn tile on the Integrations tab. Sites that had it on keep sharing, and people who can change settings see a one-line note when LinkedIn sign-in is not offered yet. LinkedIn shows with its logo.

v1.6.689​

  • On Systems / API, every headless PhantomStudio setting now sits in one card, in the order a pairing is set up, with a status line at the top that says exactly what is missing, such as auto-deploy being switched off, no webhook address being stored, or the last rebuild call being refused. The saved webhook address shows only its host, and the secret key and address secret are never shown.

v1.6.688​

  • On the Review Portal, cards that no longer fit beside the preview wrap underneath it at full width in two or three columns, a long Feedback list now scrolls inside its card, and a Back to preview (or Back to article) button appears at the bottom right once the preview has scrolled out of view. The preview also re-fits when the window is resized.

v1.6.687​

  • On a page review, each note about an element has a small crosshair that scrolls to the spot, flashes the element and bounces its marker so you can see where it was left. Pointing at any other note also clears the previously lit marker.

v1.6.686​

  • The Review Portal's Feedback card has a Show resolved switch that hides resolved notes, their replies and their markers on the page preview. Your choice is remembered in this browser, and a link to a resolved note still shows it.

v1.6.685​

  • On a page's Appearance review, Apply in a picture's panel now saves its alt text and caption (only the boxes you changed), every copy of the picture on the page is updated and the status line says how many, and Undo picture swap reverses it. Cover and background pictures, square brackets and HTML comments are refused with a clear message, and alt text on an Elementor picture is left untouched.

v1.6.684​

  • Two new command-line reads, for a hub that manages the site over SSH, return exactly the same answers as the headless frontend's lists of excluded pages and expected page counts.

v1.6.683​

  • Companion plugins can now ask SyteOps for the site's consent setting: one lookup returns the posture (opt-out, opt-in or by location) and another returns this visitor's decision (opt-in or opt-out).

v1.6.682​

  • Review Portal emails now name the item by what it is. A note on a page, or on the home page, no longer says "Article notes", "There is 1 note on this article" or "Chet on The article": emails say page, post or the item's own type everywhere, including buttons such as Edit/View this page and Preview this page. Reminders and digests name their shared type ("2 pages are coming up") and say items when the types are mixed.

v1.6.681​

  • Frontend form tickets and the consent lookup are no longer cached: the headless form ticket and the Leads consent lookup now tell the page cache not to store them, so one visitor's answer is never replayed to the next.

v1.6.680​

  • Headless rebuilds work again: SyteOps now calls the PhantomStudio rebuild webhook the way PhantomStudio requires: a POST with the secret in a request header and the repository in the request body, never in the address. Your saved Deploy webhook address does not change and does not need to be pasted again, as long as it includes its repository part.
  • The address must include its secret= and repo= parts: an address without either is refused when you save, and one saved earlier makes the screen say the switch is doing nothing and makes the rebuild command say why nothing was queued.
  • Each refusal from PhantomStudio now says what it means, on the settings screen and in the pairing status table: the repository was missing (400), the secret header was missing (401), the secret is invalid (403), the repository or address was not found (404), the method was wrong (405), or the address redirects (3xx). A request PhantomStudio asks to slow down (429) or that times out (408) is tried once more.

v1.6.679​

  • No LinkedIn app to set up: the Review Portal's Share to dialog now signs people in to LinkedIn through the site's Management Connection, so a site never creates or enters a LinkedIn app. Each person chooses Connect LinkedIn, confirms on the page that names the site, and approves on LinkedIn.
  • The Share to LinkedIn card on the Integrations tab is gone. The LinkedIn tile now says whether LinkedIn sign-in is offered to the site; until it is, Share to keeps opening LinkedIn's own share window.
  • A Management Server's own Review Portal connects the same way.
  • The dialog says when LinkedIn sign-in is not offered (and switches to LinkedIn's own share window), when the site or its server needs HTTPS, or when to wait a minute, instead of always asking you to try again.
  • Opening the Integrations tab checks again for LinkedIn sign-in, at most every 10 minutes, so a newly offered sign-in appears right away. Requesting or checking the site's connection no longer hides Connect LinkedIn.

v1.6.678​

  • For Management Servers: a server can now offer its connected sites added services over the connection they already have, and a server route can be set to accept only each site's own connection credential, never the shared Management Server Secret.
  • The Server tab can show cards from add-ons under the Licensing Server card.
  • Nothing changes on a connected site.

v1.6.677​

  • Post to LinkedIn from the Review Portal: the Share to dialog's LinkedIn row can now post for you. Add your LinkedIn app's Client ID and Client Secret on the new Share to LinkedIn card, which appears on the Integrations tab once the LinkedIn integration is switched on; each person then chooses Connect LinkedIn once, signs in to their own LinkedIn account in a small window, and posts a live article to their profile with Post to LinkedIn. The link goes with the post as a preview card with the title, summary and featured picture, and the status line offers View post. The LinkedIn Integration page walks through the setup.
  • Disconnect beside your name in the dialog removes your connection from the site. LinkedIn's sign-in lasts about 60 days; after that the dialog shows Reconnect LinkedIn.
  • Your text posts exactly as written, and a word starting with # becomes a LinkedIn hashtag. Posting the same text twice within a minute is refused, so a double click cannot post twice; if LinkedIn does not answer in time, the dialog says the post could not be confirmed and asks you to check your profile first. Facebook and X keep the copy-and-open share window for now.

v1.6.676​

  • Share to menu in the Review Portal: the Copy link menu in the top bar can now be Share to. LinkedIn, Facebook and X open a dialog where you type the post, watch the character counter (X allows 280, and a link counts as 23) and see a preview card with the title, picture, short description and the link. Copy text & open copies your text and opens that site's own share window with the link attached. Every row keeps a small Copy button, and Instagram, Email and Text still copy the address. The link always carries your tracking tags and is never the private review link. A new Share to menu permission in the portal permissions table is Hide by default, so reviewers keep Copy link until you set it to Allow; administrators always see it. Draft with AI appears in the dialog when Social Publishing has a voice profile.
  • Renamed: the Post to Social button is now Send to webhook. It works exactly as before.

v1.6.675​

  • Copy link on the card, status on every row: The Copy link menu on the personal page now sits on the card itself, at its right edge (under the text on a phone), instead of in a pill under it. A page or post that is not published now shows a small status pill, Draft, Pending, Scheduled or Private, next to its title, so a draft among live pages is easy to spot. Which pages and posts have a Copy link, and what it copies, are unchanged.

v1.6.674​

  • Drag to reorder bundle items: each item in a Page Bundle now has a drag handle in place of the Up and Down buttons. Drag it to move the item, with a gap showing where it will land and the position numbers updating as you go. From the keyboard, focus the handle, press Space or Enter to pick the item up, move it with the arrow keys (Home and End jump to the first and last place) and press Space or Enter to drop it, or Escape to cancel. Screen readers announce each move, and a changed order reminds you to save.

v1.6.673​

  • Page Bundles builder: the card is now a two-panel screen. The Library has a Posts tab and a Pages tab, each showing its count, with a search box, a Select all shown box and a status and date on every row. Tick several pages or posts and add them together; the bundle list beside it shows numbered cards with a picture, type and status. A bundle still holds 20 at most, and when a bulk add would pass that, the message says how many were added and how many were left out. Reviewers are now chosen from a row of checkboxes. Bundle cards can be selected and reordered from the keyboard, and the library shows Loading, or the error, instead of an empty list while a search runs or fails.

v1.6.672​

  • Connected sites refuse the shared secret: a connected site that has learned from its server that it connects with its own secret no longer accepts the shared secret or the FlowMattic token on its own connection routes. Such a request is refused like a wrong secret, changes nothing and locks nothing. The server's actions on the site, including pushing a new FlowMattic token, keep working on the site's own secret. A server's Cloudflare purge no longer leaves a connection record behind on a connected site. A site connected to an older server, and a site in server mode, behave as before.

v1.6.671​

  • No copy of the previous FlowMattic token: a connected site no longer keeps the previous FlowMattic token when it changes. Nothing has used that copy since the shared secret could be retired, and any copy a site still holds is deleted once when it updates.
  • Security notes after retirement: the documentation now describes a server that has stopped accepting the shared secret: each site connects with its own secret, the server refuses the shared secret and the FlowMattic token from a site, and Accept the shared secret again undoes it.

v1.6.670​

  • The Credential column follows the daily refresh: on a licensing server, Issued Connections learns from each connected site's daily refresh which secret the site's connection checks would use, so the Credential column, the "N of M sites use their own secret" line and the list of sites to update before you stop accepting the shared secret follow within about a day of a site's update, without a connection check. A site whose checks still use the shared secret shows Shared secret and stays listed; a site older than this version updates its row only through a check, as before. Sync now on a site still updates its row at once, and the refresh answer is unchanged for every site.

v1.6.669​

  • JSON values work from the command line: the set command with --json was refused for list and map settings when run through WP-CLI, which turns --json into --format=json before the command sees it. Both spellings now work. The value can also come from a file (--file=<path>, up to 1 MB) or from standard input (- as the value), which avoids quoting a long value over ssh.
  • get prints what the plugin uses: a setting saved by an older release (a field fill row before the three-way choice, a RingTonic field name map without the newer fields) prints in its current shape, so get piped into set changes nothing. A note on the error stream says when the stored copy is in an older shape; the next save upgrades it.
  • RingTonic card: it now says how many submissions (last 30 days) were left without a contact source because their contact was one RingTonic already had; RingTonic does not report the source of such a contact. Contacts that RingTonic's own page script created already show the source form, and contacts SyteOps creates carry it.

v1.6.668​

  • Change one lead-tracking setting from the command line: new WP-CLI commands (get, set and list) read and change a single setting with the same checks the settings screen applies. A value the screen would quietly correct (an unknown mode, a number out of range) is refused with a message, and nothing else in your saved settings changes.
  • Webhook addresses are hidden in the output unless you add --reveal, and no secret is ever printed. The setting that edits your site's .htaccess file can only be changed on the settings screen.

v1.6.667​

  • landing_page_url is now the form page: RingTonic contacts created from a form carry the page the form was submitted from in landing_page_url, without anything after ? in its address, the same page Fluent Forms' notification emails show. The campaign landing page is in campaign_landing_page_url, the page the lead first arrived on with its campaign tags. first_landing_page_url is unchanged. A site that kept the default field names gets the new meaning automatically; register campaign_landing_page_url in your RingTonic workspace to keep receiving the campaign landing page.
  • Contact source: every contact SyteOps creates gets contact_source = form, also under Global Privacy Control. A contact RingTonic already had keeps its contact source, and one a phone call created is not marked as a form contact. Leave the name empty on the card to not send it. Contacts created before this version keep the campaign landing page in landing_page_url.
  • Under Global Privacy Control, a refused consent or internal traffic, neither landing page is sent.
  • Site push status: on the RingTonic card, each form that is switched on says when a site push on your site last checked in and whether it stood down or kept sending. While a site push has checked in and the Submission id is still the default pattern, the card warns: set it to the pattern your site push uses, or each lead may count twice.

v1.6.666​

  • Form fill, a choice for fields that already have a value: under Fill form fields from first touch, each form now has When a field already has a value with three choices: Fill empty fields only, Replace when first touch has a value, and Replace all, blanks included. The middle choice overwrites a field only when the first touch has a value for it, so a lead without a cookie keeps the form's own first landing page and referrer. A form that had Replace values already present on now shows the third choice and one that had it off shows the first, so nothing changes until you pick.
  • Internal traffic, with examples: the Request header and User agents containing fields now say what to enter, with examples such as a header your proxy or test runner sets and HeadlessChrome or Playwright for automated browsers.

v1.6.665​

  • Export your Leads settings: Leads → Settings now links to the Backup page, where Export the settings of one area has Leads settings already chosen. The file holds goals, qualification, consent, notifications and emails, form field mapping, the RingTonic contact push, internal traffic and the AI field-mapping choice, and is saved under Saved Backups.
  • Restore them on any site: restoring that file replaces only the Leads settings it holds and leaves every other setting on the site alone. Forms the site does not have are left out of the RingTonic contact push and form field fill, and an email logo that is not an image there is cleared. Your RingTonic API key and webhook signing secret are never in the file, so the site keeps its own; webhook addresses are included, so keep the file private. Let the contact push finish after the visitor's page responds comes back on only where its .htaccess rule can be added, also after undoing a restore or restoring a full backup. The Leads module must be on to export or restore, and the link shows only to administrators who can open the Backup page.

v1.6.664​

  • Leads → Settings, aligned and evenly padded: every checkbox now sits level with its label, and its explanation runs on its own line beneath, lined up with the label text (for example Replace values already present).
  • Mappings in a grid: the per-field choices under Fill form fields from first touch, Create contacts in RingTonic and a form mapping now sit in two or three columns on a wide screen and one on a phone, every select the same width. The RingTonic custom field names, the internal traffic signals and the report addresses use the same grid.
  • Even panels: the shaded panels under a toggle or a form have the same padding on every side, help text is one size throughout, and card headings no longer carry a second underline.
  • Phone: the screen no longer scrolls sideways at phone width; long buttons wrap and the RingTonic custom field names stack.

v1.6.663​

  • RingTonic replies, read in full: a contact RingTonic answers as already sent is recorded as sent and keeps its RingTonic id; a request RingTonic is still busy with, or one whose request key was already used, is tried again later instead of being counted as done; each retry uses its own request key, so a retry after an outage can land; a contact RingTonic restored is filled only where it is empty, like any contact it already had; and a contact's existing values are read whether RingTonic lists them as names and values or as pairs.
  • Fewer refused contacts: a custom field RingTonic refuses for its type is dropped and the rest of the contact is saved; a phone RingTonic cannot read is dropped when there is an email to match on; a clash between a phone and an email is shown on the lead instead of being retried blindly.
  • Let the contact push finish after the visitor's page responds (RingTonic card, LiteSpeed servers only): adds a short rule to your site's .htaccess, for form submissions only, so the first attempt is not stopped by the server. Turning it off or deleting the plugin removes it; if the rule cannot be removed the card says so and keeps the setting on. If .htaccess cannot be written the setting stays off and the card shows the lines to paste; on OpenLiteSpeed restart the server once.
  • The card shows In-request sends: N finished, M cut off (last 30 days), with a hint when sends are being cut off (those contacts still arrive a few minutes later from the background task).
  • Forms that hold their entries: an entry confirmed by double opt-in, approved by an admin, or paid on the payment provider's page now records its lead (and RingTonic contact) with the visitor and campaign details from the moment they submitted, instead of reading whoever releases it as the visitor. An entry the form marks as spam records no lead.

v1.6.662​

  • Originating post on headless sites: when a separate frontend builds your public pages, each post that counts as an originating post (Leads → Settings → Consent & privacy → Originating post types) now tells the frontend so as it builds that post's page. Once the frontend passes it to the lead tracker, leads from that site record the post that sent the visitor, just as they do on a WordPress page. Drafts, scheduled, private and password-protected posts never count.
  • Changing Originating post types asks the frontend to rebuild, so every page carries the new choice.
  • First-touch cookie lifetime on headless sites: the frontend now receives your First-touch cookie lifetime (days) setting, so the visitor's first source is kept for the number of days you chose instead of always 90. Changing it, the frontend address or This is a headless install asks the frontend to rebuild.

v1.6.661​

  • Create contacts in RingTonic (Leads → Settings, RingTonic card): tick a Fluent form and each submission becomes a RingTonic contact, with a form submitted conversion, sent in the background a moment later so the visitor never waits for RingTonic. Choose per form which fields hold the name, email, phone (with a second phone used when the first is empty), message and how they heard about you; phones are sent in international format.
  • RingTonic custom field names decide where each value lands in your workspace: first and last name, message, how they heard, and the lead's campaign details (landing page, first landing page, originating post, UTM tags, click ids, referrer). Leave a name empty to not send it; a name your workspace does not know is dropped by RingTonic while the rest of the contact is saved.
  • A contact RingTonic already has (from its website tracker or a returning visitor) is never duplicated: SyteOps only fills the custom fields it does not have yet, so a visitor typing someone else's phone or email cannot rewrite that person's name, message or campaign details. A Submission id (by default your site's address, the form id and the entry id) makes a repeated submission count once, also when a site's own RingTonic push uses the same pattern.
  • The contact is sent right after the visitor's page is answered, with a background task as the safety net; a busy or briefly unreachable RingTonic is tried again after 5, 30 and 120 minutes. Spam and trashed entries are not sent, and a form set to delete its entries after submission cannot be used (the card says so).
  • Campaign details are sent only when the lead has them. Under Global Privacy Control, or when the visitor refused consent, the contact is created without them. Internal traffic creates no contact by default; RingTonic contacts for internal traffic can send it without campaign details instead.
  • Each lead's From RingTonic card shows Contact created from the form, one line per submission: queued, sent, not sent and why, or failed with RingTonic's answer, and whether the conversion was recorded.

v1.6.660​

  • Form leads from visitors without a first-touch cookie can take the campaign tags of the page the form was sent from. The new setting When the visitor has no attribution cookie is Automatic by default: in Opt-out mode such a lead now gets the form page's tags (before this version it got none), in Opt-in mode it stays blank, and By location (and WP Full Picture) decides per visitor, leaving it blank when the region cannot be told. Visitors sending Global Privacy Control never get them.
  • A refused consent is now honored on the server: a visitor who declined statistics in WP Full Picture's banner, or whose consent cookie (when you set one) does not hold the consent value, never gets the form page's tags, whatever the setting.
  • Each lead's page, the proof page, the CSV export and the automation webhook (ft_via) show Attribution from: the first-touch cookie, the browser tab, the form page, a site integration or none.
  • New Internal traffic settings keep your own team, test tools and automation out of tracking: a cookie, a query parameter that sets it for 90 days, a request header, user-agent text, and logged-in users with a capability. Their visits set no cookie and record no events, their tracked-link clicks still redirect but are not counted, and their form fields are not filled. Form submissions from internal traffic decides whether a form they send is recorded as a lead with no source (the default) or not recorded as a lead at all; the form's own entry and emails are unaffected either way. While the cookie name and query parameter are blank, the site's editorial internal-traffic parameter from the review settings is used. A headless frontend receives these settings and is rebuilt when they change.
  • What changes for existing sites: logged-in users who can edit posts (contributors, authors, editors, administrators) count as internal by default, so their clicks and visits are no longer counted and their test forms record leads with no source. Choose Nobody under Logged-in users who can to keep the old behavior. The other internal-traffic signals do nothing until you fill them in.

v1.6.659​

  • Forms can have their hidden fields filled with the visitor's first-touch campaign details when they submit, so notification emails that print those fields keep working; choose per form which fields get which values.

v1.6.658​

  • Leads now record the first page a visitor landed on and the blog post that sent them to the form, and you choose which post types count.

v1.6.657​

  • The Tracked links screen's templates and share channels line up cleanly, with even spacing and nothing cut off on narrower screens.

v1.6.656​

  • The My links card on your personal page is laid out as a compact three-column grid, with a tidier channel picker and copy buttons, the Friendly path label is now Message address, and the Featured caveat is a badge.

v1.6.655​

  • Every live page and post on your personal page and in the review editor has a Copy link menu: pick LinkedIn, Facebook, X, Instagram, email or text and it copies the address with tags that credit you, or copy the plain address.

v1.6.654​

  • The Tracked links screen groups links by person, with one-line rows, copy buttons, an on/off switch, old addresses folded away and a phone layout, and the templates move to their own Templates view.

v1.6.653​

  • Visitors who never answer the cookie banner on an opt-out site now keep their first-visit campaign tags across pages, so their later form leads carry their source and the person whose link brought them.

v1.6.652​

  • Your personal page has a Copy my links menu at the top, and the My links card opens on demand with your link, click and lead totals.

v1.6.651​

  • Tracked links use the shorter /ops/<name>/<placement> shape, the second Featured link is now called my work, and a move command switches an existing link set over while keeping its history and every old address working.

v1.6.650​

  • Two WP-CLI commands whose names contain a hyphen, the short-link import and the fleet domains command, now work on production installs.

v1.6.649​

  • The personal page has a My links section: each team member sees their own tracked links, where to place each one on LinkedIn, and their clicks and leads.

v1.6.648​

  • Leads that come in through a form now carry the visitor's first campaign tags and the team member whose tracked link brought them, kept in a consent-gated first-touch cookie that a later visit never rewrites.

v1.6.647​

  • A read-only metrics endpoint reports tracked-link clicks, unique clicks and attributed leads per person and link kind for client reports, with no lead personal data.

v1.6.646​

  • A WP-CLI command imports existing Squirrly short-link redirects as tracked links, with a dry run first and a list of the rules that are safe to delete once the import has been applied and checked.

v1.6.645​

  • Lead Attribution has a Tracked links screen: generate a person's link set from their user slot with a preview, then edit, copy, disable, alias and count clicks on each link.

v1.6.644​

  • Lead Attribution can serve per-person tracked links: short addresses that redirect with one set of campaign tags and count each click, ready for the link screen in a later update.

v1.6.643​

  • On the Server settings tab, the pinned Save bar lines up with the cards above it instead of overhanging them.

v1.6.642​

  • A licensing server moves its issued connections into their own table once, so no settings save can lose or undo a connection change, and it refuses to answer rather than treat a damaged store as empty.

v1.6.641​

  • On a headless site, the shop and form plugins can take the site's brand colors, behind one switch under Systems / API.

v1.6.640​

  • A headless site can set its brand font and spacing under Systems / API, and the frontend reads them with its other build-time settings.

v1.6.639​

  • On a licensing server, checks, pairing, purchases, detach and backdoor reports change one issued connection at a time, so a request no longer undoes another connection's change or acts on a record revoked a moment earlier.

v1.6.638​

  • A licensing server can give itself its own enrollment secret, roll the FlowMattic token without changing the secret older sites still use, and stop accepting the shared secret once no site depends on it.

v1.6.637​

  • On a headless site, the frontend can tell the site which IndexNow changes it already sent, so a frontend that keeps no memory between deploys gets only the newer changes next time.

v1.6.636​

  • Changed: The filter a site uses to supply build-time values to a headless frontend (analytics ID, call-tracking campaign, consent posture, internal-traffic cookie, brand spacing and type) is now a documented, supported contract; behavior is unchanged.

v1.6.635​

  • Changed: A licensing server can hold an enrollment secret of its own for connecting new sites, tells it apart from the shared Management Server Secret and each site's own secret, refuses the shared secret once it is retired (a later update adds that control), gives the FlowMattic license only to an active connection, and offers a purchased site its own connection secret until the site uses it.

v1.6.634​

  • Added: Two WP-CLI commands for headless sites: one queues a frontend rebuild through the usual checks and delay, and one sets the frontend address, the headless switch and the internal-traffic parameter with the same checks as the settings screen.

v1.6.633​

  • Changed: On a licensing server, the admin screens and jobs change one issued connection at a time, so a scan, purge, revoke or delete no longer puts back another connection's earlier state, and a background settings save no longer brings back a deleted connection.

v1.6.632​

  • Changed: A licensing server creates a table for its issued connection records and reads and writes them through one store; the records stay in the settings row until a later update moves them, and nothing changes for connected sites.

v1.6.631​

  • Changed: A connected site signs its Management Server requests with its own connection ID once its server supports it, then stops storing the shared Management Server Secret; if the server refuses that ID the site falls back and asks to request the connection again; requests to an older server are unchanged.

v1.6.630​

  • Added: On a licensing server, check and connection answers say which credential model the server uses, and Issued Connections shows whether each site uses its own secret or the shared one, with a count.

v1.6.629​

  • Fixed: SEO values saved for custom post types are now stored where Squirrly SEO reads them, earlier saves move on the next save without losing an operator's title, and renaming an image now updates Squirrly's social image address.

v1.6.628​

  • Fixed: On servers that host several sites on one database server, Lead Attribution's locks no longer block another site, so a table upgrade is no longer skipped and lead writes no longer wait on another site.

v1.6.627​

  • Fixed: A site's own connection secret, or the Management Server Secret every site holds, can no longer run server actions on another site or on its server; each credential now runs only the actions that belong to it, and existing connections keep working.

v1.6.626​

  • Changed: On a headless site, saving a setting the frontend reads only at build time (pages kept on WordPress, store pages, company name, theme colors, and Lead Attribution consent, internal-traffic, goal and tracker options) now asks for a rebuild; an unchanged or unrelated save does not.

v1.6.625​

  • Added: On a headless site with Lead Attribution active, the frontend's browser can send a form entry through a ticketed, rate-limited route that adds it to the visitor's lead, or saves it as a separate lead when it cannot safely join one.

v1.6.624​

  • Added: With IndexNow on, each Published Content row in the Review Portal and a post-editor side panel show the post's IndexNow result, and editors get a Send now button.

v1.6.623​

  • Added: On a headless site using Squirrly SEO with IndexNow on, a key-protected address lists the pages that went live, changed or were removed, in the frontend's own addresses, with the IndexNow key, so the frontend can send them after each deploy.

v1.6.622​

  • Changed: Groundwork for recording form entries from a headless frontend against the visitor's session; form capture on the site itself is unchanged.

v1.6.621​

  • Added: On a site using Squirrly SEO, a new IndexNow switch in Content Pipelines, Answer Engine (off by default) sends each page's address to IndexNow when it goes live, when its text changes and when it is removed, with a one-sentence status line.

v1.6.620​

  • Added: Two Manage API operations report IndexNow's state for the site or one post and queue a manual send, which goes out about a minute later.

v1.6.619​

  • Changed: Going live, a text change and a removal now queue the page's address for IndexNow through Squirrly SEO; nothing is sent until the IndexNow switch ships and is turned on.

v1.6.618​

  • Changed: Squirrly SEO moves to the Extended integration tier, because the coming IndexNow sends run as a background job; nothing is sent yet.

v1.6.617​

  • Changed: Groundwork for sending page addresses to IndexNow through Squirrly SEO; this version reads Squirrly's settings and sends nothing.

v1.6.616​

  • Added: On a site using Squirrly SEO, the headless frontend's keyed requests carry each item's saved SEO values as yoast_head_json, the shape the frontend already reads.

v1.6.615​

  • Added: On a headless site, the frontend build can read the public consent, lead-tracking and brand values it needs from one keyed route, which also names the values the site cannot supply.

v1.6.614​

  • Added: The site now tells a frontend build how many pages and posts it should receive, taken from the same keyed list requests the build makes.

v1.6.613​

  • Changed: A revoked connection stays revoked: its site can no longer reactivate it by asking, and the server's operator reconnects it with Delete Connection.

v1.6.612​

  • Added: On a headless site, the store's cart, checkout, account and receipt pages are listed for the frontend to skip, and two settings add or remove entries.

v1.6.611​

  • Changed: With REST API restriction on, a visitor's route list at /wp-json shows only the routes they can use; a tool that discovers a route from that list must have the route allowlisted.

v1.6.610​

  • Fixed: A Q&A submission from a visitor with no tracking session is now saved as its own lead without any tracking data, where it used to be silently dropped.

v1.6.609​

  • Fixed: After a connected site's secret is rolled, its old key no longer returns the new secret or removes the connection, and a restricted connection can no longer lift its own restriction.

v1.6.608​

  • Added: On a headless site, lead events posted from the frontend are now recorded where they used to be discarded, and the tracker sends its token in the request body when it posts to another hostname.

v1.6.607​

  • Fixed: With REST API restriction on, a browser preflight to a route visitors cannot reach now gets an empty answer, the same as for a route that does not exist, where it used to get a description of the route.

v1.6.606​

  • Fixed: Once a SyteOps Admin exists, only a SyteOps Admin can save the plugin's settings; the SyteOps Admin capability in the role definitions, this plugin's own entry in the active-plugins list and the plugin's setup state are protected from change by anyone else, and the default role for new users can no longer be set to a role that grants it.

v1.6.605​

  • Added: A site's Management Server connection now sends its secret only to the server it was entered for, a list of permitted servers can be set in wp-config, and a Management Server requires a connected site's own credential to read, change or remove its connection.

v1.6.604​

  • Fixed: once a SyteOps Admin exists, only a SyteOps Admin can run license setup, change the licensing settings or reopen the activation screen; WordPress's All Settings screen is restricted to a SyteOps Admin by default, with a setting to open it; license checks no longer run for a visitor who is not signed in.

v1.6.603​

  • Fixed: only a SyteOps Admin can edit, change the role of, or delete a SyteOps Admin user; license activation from the purchase screen needs a SyteOps Admin once one exists; and deleting this plugin, or updating it from the single-plugin update page, is refused in more cases for someone who may not manage it.

v1.6.602​

  • Fixed: deactivating or deleting this plugin from the Plugins screen, in bulk or one at a time, now needs the same permission everywhere, so an administrator who cannot do it from the plugin's own row can no longer do it another way.

v1.6.601​

  • Fixed: changing this plugin's status or removing it through the REST API now needs the same permission as doing so on the Plugins screen, so an administrator who cannot deactivate or delete it there can no longer do either over REST.

v1.6.600​

  • Fixed: with REST API restriction on, a request is now served only if it ends up signed in once WordPress has finished authenticating it, or its route is on the allowlist, and an integration that checks its own token inside its route needs an allowlist entry.

v1.6.599​

  • Fixed: in the Review Portal, a note left on a page element is now labeled with the first few words of that element instead of its entire text, in the Feedback panel and in emails; the full text still shows on hover and is still passed to AI agent prompts. A selected note now outlines its whole card in the brand's primary color, pins on the preview are larger and grow when pointed at, and a bundle's note for reviewers is included in a grouped email only alongside a request to review, not with later activity such as new notes.

v1.6.598​

  • Added: a headless install now shows a dismissible notice while its companion plugin is not active, saying the plugin's install file comes from the project's WordPress panel in PhantomStudio.

v1.6.597​

  • Added: a WooCommerce store's items now ask PhantomStudio to rebuild the site when they are published, updated or unpublished, and when a published item's regular price, sale price or sale dates change on their own or a scheduled sale starts or ends, but never when a sale changes stock.

v1.6.596​

  • Fixed: the REST API Restriction and Block All now judge each request by the method WordPress will actually run, and Block All now also refuses browser preflight requests.

v1.6.595​

  • Added: other plugins on a headless PhantomStudio site can now ask for a rebuild through the same one-minute wait as every other change, and the pairing summary now reports whether WordPress's built-in scheduled tasks are switched off.

v1.6.594​

  • Changed: the built-in REST API Restriction allowlist now names all four of SyteHero's public routes itself, with no change in behavior on a site running a SyteHero version that already allowlisted the impression and click routes.

v1.6.593​

  • Fixed: a WP-CLI command that prints a headless PhantomStudio site's pairing summary now exits with an error and says so on standard error when another plugin ends the request before the summary is written, instead of exiting 0 with nothing printed.

v1.6.592​

  • Added: a WP-CLI command now prints a headless PhantomStudio site's pairing summary as one line of JSON (or as a table) and exits 0 whether the integration is on or off, so a fleet check can read every backend; it never prints the project key or the deploy address.

v1.6.591​

  • Added: SyteOps can now build a pairing summary for a headless PhantomStudio site (whether the headless switch, the project key and the rebuild address are set, the REST restriction in force, the last rebuild result and whether the PhantomWP Connect plugin is active) that never contains the key or the address. This version only builds the summary; nothing prints it yet and nothing else changes.

v1.6.590​

  • Added: a headless install switch and a frontend address (System / API, shown while the PhantomStudio integration is on) record that your site's public pages are served by the PhantomStudio frontend and where it lives. This version only stores and reports them; nothing else changes.

v1.6.589​

  • Changed: with Analyze GEO automatically switched on (the setting was called Analyze GEO when a draft is first created), SyteOps now also re-analyzes a draft, pending or scheduled article a few minutes after its text changes, wherever the edit was made, so reviewers are no longer asked to run the analysis again by hand. Each run is a paid AI call: several edits in a row cost one run, text that already failed to analyze is not retried, an article gets at most six automatic runs a day, and a run waits while someone has the article open in the Review Portal. Published articles are not re-analyzed automatically, and answers are never accepted automatically.

v1.6.588​

  • Fixed: the publish check no longer says an article has no category when it is filed under your site's main category. Only the category with the slug uncategorized is rejected, any other single category counts, and the message names the Uncategorized category by its current name. Suggest categories & tags no longer adds a second category to an article that already has one.

v1.6.587​

  • Changed: the Coverage tools (analysis, SEO and pictures) now include draft, scheduled and pending articles by default; the Include drafts & scheduled control turns that off. A run that skips articles now names them (up to five) with the reason, shows a warning instead of a success notice, and a line under the buttons says how many rows on the page cannot be selected and why.

v1.6.586​

  • Fixed: an article with an apostrophe, a dash or a private status could not be published untouched after its answer-engine analysis (the check said the analysis was out of date), and saving it from the review portal rewrote its title with curly quotes, dashes or a "Private:" prefix. The portal's title field now starts from the title exactly as stored.

v1.6.585​

  • Fixed: paging through the reviewer queue's lists (Awaiting Your Review, Watching, Published Content and Coming Up) could skip or repeat an article at a page edge for articles saved during the hour the clocks change in autumn. The same fix applies to the editorial calendar's Unscheduled drafts list. Each page now continues from the same time the list is ordered by. A page you already had open before the update may repeat or miss a few rows on its next page until you reload it; nothing breaks.

v1.6.584​

  • Added: the Published Content section on the reviewer queue has three links inside it to choose its order: Recently updated (the default), Newest published and Oldest published. Choosing one opens the section and scrolls to it, keeps your other filters and the Awaiting Your Review sort, and stays when you move between pages; Clear filters resets it. The order follows each row's published date, and rows with the same date keep a steady order from page to page. The links do not appear on a bundle's own page, which keeps the bundle's saved order, or where the section is not shown. Also fixed: a "sticky" post could repeat on the second page of a reviewer list or jump to the top of it, and a published sticky post could show under Awaiting Your Review.

v1.6.583​

  • Added: the reviewer queue's Awaiting Your Review list has a Sort by menu beside the other filters. Choose Recently updated (the default), Received: newest first, Received: oldest first, and, when scheduling is on, Planned publish date: soonest first or latest first. Received sorts by the date each row shows, so an article with no recorded received date sorts by its own date; an article that shows no received date, or has no planned publish date, is listed last. A planned date is the time a reviewer chose, or the reserved slot while slot reservation is on. A chosen sort lists the rows in that order and does not group bundle pages under their heading. The choice applies to both the Posts and Pages lists, stays when you move between pages or use the quick filters, and Clear filters resets it. A bundle's own page keeps the bundle's saved order and shows no sort menu. Also fixed: the second page of Awaiting Your Review no longer skips or repeats rows when bundle pages were added to the first page.

v1.6.582​

  • Fixed: the Save bar is now the same height on every settings page, and its button no longer touches the bar's edges. The button has equal space above and below it and a gap to the right edge on the main settings tabs, the Content Pipelines settings pages and each content source, and the "Unsaved changes" line still sits beside it.

v1.6.581​

  • Fixed: A draft tab's variables are no longer sent to workflows; they are sent once the tab is published, and a tab that becomes a draft has its variables removed the way a disabled tab does. A tab copied with Duplicate starts as a draft, so a copy sends nothing until it is published. On a site that already has a draft tab whose variables were sent earlier, the update does not delete them: they stay in place without being updated, until the tab is published (they are then refreshed) or disabled (they are then removed). The registry now says a draft's variables are not available to workflows until the tab is published.

v1.6.580​

  • Fixed: the variable registry's popups (create, edit, details, import, export, bulk actions and collections) open again and work; they had not opened since v1.2.001. A tab created there now gets its Tab Code (1 to 10 lowercase letters, numbers or underscores), so its variables reach FlowMattic, and names and descriptions with quotes are stored as typed. The details popup shows its values, its Edit, Enable / Disable, Export, Delete and Duplicate buttons work, and a refused delete is reported instead of looking done. Edit saves the Order Index, Duplicate makes a draft copy with its own Tab Code, the bulk toolbar appears when tabs are selected, and a sorted column shows an arrow. Import checks each tab's Tab Code, leaves built-in tabs alone, reads a single-tab file as one tab and refuses a file over 5 MB. The Tab Code column sorts by the code it shows, an export file keeps the tab's capital letters, and an edit made from a popup opened before someone else saved the same tab is refused with a message to reopen the tab. The registry list's Updated column and the details popup show the saved date, formatted, instead of a dash or raw text.

v1.6.579​

  • Fixed: on a small or short screen, the plugin's popups now fit the screen and keep their buttons in view.

v1.6.578​

  • Fixed: with several notices showing, the stack now scrolls inside the free space, so it no longer covers a popup's close or action buttons.

v1.6.577​

  • Fixed: in the action dropdown, typing a letter jumps to the matching option; nothing is chosen until Enter, Space or a click.

v1.6.576​

  • Fixed: on a short screen (a phone held sideways), the recipe popup gives most of its height to the scrolling area.

v1.6.575​

  • Fixed: on a site without the automation plugin, the Systems / API tab now shows the image AI key tile, so the key can be changed, cleared or switched off there.

v1.6.574​

  • Fixed: on a phone, the recipe popup's buttons all fit on the screen.

v1.6.573​

  • Fixed: on a phone, a dropdown's text no longer runs under its arrow.

v1.6.572​

  • Fixed: a notice no longer covers a popup's close button, and the Return to top button no longer sits on the Save bar or under a notice.

v1.6.571​

  • Fixed: in the module list on a phone, a button reached by keyboard is now scrolled fully into view instead of being left partly cut off. The module action dropdown now works from the keyboard alone: open it with the arrow keys, move between options, choose with Enter or Space and close with Escape, and screen readers announce it and the current option. Scrolling inside an open dropdown list no longer closes it.

v1.6.570​

  • Fixed: on a phone, notices now appear at the bottom of the screen above the Save bar instead of over the tabs, and move to the top while a popup is open. They have a larger close button and also close with the Escape key. A settings tab reached by keyboard is now fully visible in the tab bar.

v1.6.569​

  • Fixed: settings pages no longer scroll sideways on phones, tablets and small laptops. Wide tables, such as the module list and the variable-set tables, now scroll inside their own box, and URL and description fields shrink to fit a narrow screen. On the General tab the Upload and Remove buttons of the two logo fields now sit under the field on screens narrower than about 1320 pixels, where they used to run past the page edge.

v1.6.568​

  • Changed: Content Pipelines help text is shorter. Each long help line now shows one sentence, with the detail behind a closed "More" link under it. Some labels were reworded: the Posts and Pages row action and the Social Publishing wording now say "Post to Social", each settings view's Save button now names the view, such as "Save Review Portal settings", the two card titles are now "Review and approval rules" and "Review Portal branding", and "Delete now selected" on Removed pictures is now "Delete selected now".

v1.6.567​

  • Fixed: the AI Models note shown on a site without FlowMattic is now one translatable sentence, and the image AI link sent to the companion plugin no longer carries an anchor to a section that site does not show.

v1.6.566​

  • Fixed: the settings tab bar no longer makes every settings page scroll sideways on a phone; it scrolls inside itself. Content Sources now fits the screen, so its URL and select boxes shrink to the card, the field-mapping table scrolls inside its own column, and the Path input keeps a readable width.

v1.6.565​

  • Fixed: AI Models: on a site without FlowMattic the card no longer links to an API keys section that is not shown. It now says the section appears on the Systems / API tab once FlowMattic is installed, with a link to that tab. The Systems / API quick-navigation pills and the key-tile link follow the same rule.

v1.6.564​

  • Improved: Content Sources: a source with unsaved changes now shows a dot on its "On this page" pill, so you can see from the bar which sources still need saving.

v1.6.563​

  • Fixed: Settings: a link to a section on another settings tab now opens that tab and scrolls to the section. Before, it opened the tab at the top.

v1.6.562​

  • Fixed: Content Calendar: the date picker always stays on screen. It opens upward when there is no room below, and scrolls inside when neither side fits. Before, its buttons could sit below the bottom of the screen.

v1.6.561​

  • Fixed: Review Portal settings: removing every default reviewer or every default CC now saves an empty list. Before, the old list came back after a reload.

v1.6.560​

  • Fixed: The one-time background check for older AI-made pictures now retries after a database error and restarts itself if it stalls, so it cannot finish early and leave an editorial picture unmarked.

v1.6.559​

  • Changed: The Review Portal popups (Notify, Ready to publish, Publish, Request Changes, Insert Link, Post to Social and the page comment box) now have a clear title band, a button bar and grouped sections.
  • Changed: Their status line now sits above the buttons.

v1.6.558​

  • Changed: Pictures made with Modify with AI before this release are checked once, in the background, and marked editorial where the picture they were made from is editorial.
  • Changed: The check runs in small batches after the update and its progress can be read through the Manage API.

v1.6.557​

  • Changed: Review Portal: the reviewer permissions table keeps its first column in view, with an edge, while you scroll it sideways.
  • Added: Social Publishing and Answer Engine now have On this page buttons for the parts of their card, such as Voice profiles and Destinations, or Content types and Question surfaces. A button for a part that is not shown on your site does not appear.

v1.6.556​

  • Changed: A picture made with Modify with AI from an editorial-only picture is now marked editorial too, including pictures made from a reference picture or a model photo.
  • Changed: Editorial always wins: a picture marked standard becomes editorial when its source picture, or a fresh read of its Drive file, says editorial. Editorial is never lowered automatically.
  • Changed: When a license is recorded on a picture later, its existing versions are updated as well.

v1.6.555​

  • Changed: Content Sources: each source now has one Save source button that saves the whole card at once (settings, custom fields, FlowMattic variables, forwarding and image mapping). It stays at the bottom of the window while you scroll, and the line beside it says when something is unsaved, not saved or only partly saved. Field mapping is still applied with Approve mapping, and the Default author picker is now saved with the card instead of on its own.
  • Changed: On Content Sources, a button that reloads the page (Enable or Disable, Delete, Approve mapping, Reprocess last payload, Clear) now asks first when a source has unsaved changes.
  • Fixed: The Content Sources page no longer scrolls sideways: the Field mapping table now fits its card.

v1.6.554​

  • Changed: Cloud image library: opening a folder now records the license on pictures you imported from it before licenses were tracked. A license is recorded only from a fresh read of the folder, never from a cached list, and never replaces one already on the picture.

v1.6.553​

  • Added: The Log and Content Sources views now have an On this page bar under the Content Pipelines header, with one button for each part of the view. On the Log these are Engines, Run now, Recent runs and Editorial activity. On Content Sources they are Add a content source and one button per source, or a single Your sources button once you have more than six. A button takes you to that part of the view; nothing opens or closes. A button appears only for a part that is on the page, and a view with a single part shows no bar.
  • Changed: The numbered headings inside the Log, Recipes and Calendar views are now plain titles, and the extra Log, Recipes and Calendar buttons beside them are gone. Use the view buttons in the header to switch views. Existing links to a view still work.
  • Changed: On the Log, the link on a content source's card (Edit settings or Finish setup) now opens Content Sources at that source instead of at the top of the list.

v1.6.552​

  • Added: In the Review Portal, a picture marked for editorial use only now shows an Editorial badge wherever a reviewer picks a picture: in the cloud image library (grid and list), in Stock Photos, in the Media Library window and on the versions under Modify with AI. Hover the picture, move to it with the keyboard, or tap it, and the rule is spelled out: fine in articles, not for ads, landing pages or anything that suggests a brand endorses the site. A picture with a standard license, or with none recorded, shows no badge. Two limits for now: a picture copied from the cloud library before this release shows the badge in the cloud library but not in the other places until it is used from the cloud library again, and a version made with Modify with AI does not carry the badge of the picture it was made from.
  • Fixed: On a site with a persistent object cache, the License column in the Media Library list could fail to appear after the first licensed picture was added. The check is now remembered for one page load only.

v1.6.551​

  • Changed: The Content Pipelines views are now grouped under three labels in the header: Activity (Log, Calendar, Coverage, Removed pictures), Content (Recipes, Content Sources, Page Bundles) and Settings (Review Portal, Social Publishing, AI Models, Images, Answer Engine). The order of the view buttons changed to match these groups. Each button opens the same view as before, and existing links to a view still work.

v1.6.550​

  • Changed: The Content Pipelines settings are now cards you can open and close one at a time, on the Review Portal, Social Publishing, AI Models, Images and Answer Engine views. The first time you visit a view its first card is open and the rest are closed; after that each card stays the way you left it. That choice is remembered in your browser only. Settings inside a closed card are still saved. The three settings groups and their jump links are replaced by the cards.
  • Added: An On this page bar under the Content Pipelines header has one button per card. It stays at the top of the screen while you scroll, opens a card and jumps to it, highlights the card you are on, and has Expand all and Collapse all. A jump is kept in the address bar, so a copied address lands on that card, and older links to a settings card still land on it.
  • Added: A closed card that holds a warning is marked Needs attention on its heading and on its button in the bar.
  • Fixed: On every settings tab, reloading the page or going back now keeps your place on the page. Before, the page jumped back to the top.

v1.6.549​

  • Added: The Cloud image library now reads a stock picture's license (editorial or standard) from Google Drive, keeps it on the picture when it is copied into the media library, and shows it in the Media Library.

v1.6.548​

  • Changed: The image popup's sections are easier to tell apart: section headers, opened drawers and the button bar are now visually distinct. The Modify with AI options are grouped by what they do, and the Stock Photos buttons match the rest of the popup.

v1.6.547​

  • Added: The cloud library's picture list in the image popup can now be shown as a list with full file names and dimensions, and the choice is remembered while the browser tab is open.

v1.6.546​

  • Changed: Answer-engine publishing settings, including the setup review, now have their own view and button in Content Pipelines, next to Images, instead of sitting inside the Review Portal view. The setup review dialog no longer opens over a different view: it opens by itself only when you are on its own view, or the first time you switch to it. The Coverage message about a missing AI provider now points to AI Models.

v1.6.545​

  • Fixed: The diagnostic record of stray output that SyteOps discards from your content responses no longer stores any text chosen by whoever sent the request. Its entries are now filed by route: a page is shown by its number, and any other part of the address is replaced by a placeholder. A requester can no longer push real entries out of the record, and at most three entries are kept for one route. If the record cannot be saved, a line now says so in the debug log while debug mode is on.

v1.6.544​

  • Changed: Image settings for the Review Portal, including the cloud image library, now have their own view and button in Content Pipelines, next to AI Models, instead of sitting inside the Review Portal settings. Save settings still saves everything. Old links to the Article images and Cloud image library sections open the new view and scroll to the card, and the Google Drive tile on the Integrations tab links straight to it. The listing-image picker windows now open centered on the screen instead of far down the page. A reviewer who sees that AI is not set up for agent prompts is now told where an administrator sets it up.

v1.6.543​

  • Changed: AI Models settings now have their own view and button in Content Pipelines, next to Social Publishing, instead of sitting inside the Review Portal settings. Save settings still saves everything. Old links to the AI Models section open the new view, and the Social posts row there has a button to Social Publishing. A change to one view's settings no longer makes another view's automatic update look like an unsaved edit.

v1.6.542​

  • Changed: In the image popup, the cloud library's picture list now stops at three rows and scrolls on its own, with the folders and Load more staying in place, and Load more keeps your place in the list.

v1.6.541​

  • Changed: Social Publishing settings now have their own view and button in Content Pipelines, next to Review Portal, instead of sitting inside the Review Portal settings. Save settings still saves both. An old link to the Social Publishing section opens the new view. The view buttons also wrap onto a second line now, so every view stays reachable on narrower screens. Wide tables in Social Publishing now scroll within their card on narrower screens.

v1.6.540​

  • Added: The record of stray output that SyteOps discarded from your content responses can now be read remotely through the management API, so you no longer need server access to see which routes were affected and how often.

v1.6.539​

  • Added: The Content Pipelines settings now show when you have unsaved changes. The line beside Save settings reads Unsaved changes (and names the other view when the change is there, with a dot on that view's button), and your browser asks before you leave with changes unsaved. A setting that cannot be saved turns that line red and takes you to the field, opening its section if it was closed. Buttons that act at once, such as connecting the cloud image library or changing the answer-engine robots file, are now marked Applies immediately, and the ones that reload the page ask first when you have unsaved changes.

v1.6.538​

  • Added: PhantomStudio can now rebuild your site automatically when your content changes. With the PhantomStudio integration on, System / API has a new Deploy when content changes switch and a Deploy webhook address field: paste the Auto-Deploy Webhook address from your PhantomStudio project (it is a secret, so it is stored encrypted, shown masked and left out of exports and backups, and an address that is not an https address on phantomwp.com is refused when you save). Publishing, updating, unpublishing, trashing or deleting a post, page or store product, changing a menu or a menu location, and adding, renaming or removing a category or tag ask PhantomStudio to rebuild. A burst of changes causes one rebuild about a minute after the first, and a failed request is tried once more. Orders, stock changes from sales, refunds, customers and coupons never start a rebuild. The request is sent by WordPress's scheduled tasks, which only run when your site receives a visit, so a site with no visitors should use a system cron. Under the address, a line shows when the last request went out and how it ended, and says when a retry is coming.

v1.6.537​

  • Added: REST responses for your content (pages, posts, media and the other WordPress content routes) now stay valid when another plugin prints stray output while the response is being built. That output used to land in front of the data and break anything that reads the response, such as a headless front end. It is now discarded, and the affected routes are recorded (which route, how many bytes and when, never the output itself). Always on, with no setting, for every visitor and app. A route that sends its own file or image is passed on unchanged and in order, with one known exception: a route that pushes output out, then discards every output buffer, then ends the request early gets an empty body. Output that another plugin deliberately processes itself, and stray output over 1 MB, are left alone. Each such request reserves about 1 MB of memory while it runs.

v1.6.536​

  • Changed: Social Publishing no longer has its own separate Save button. Save settings at the bottom of the Review Portal settings saves it with everything else, as it already did. The save status (Saving, Saved, or what went wrong) now sits beside the Save button, to its left, so the button stays in place. Added: If part of the settings page fails to load, Save now stops and names the missing part instead of saving blanks over your stored settings. The same protection covers Social Publishing voice profiles and destinations.

v1.6.535​

  • Changed: The Content Pipelines page now builds its view buttons and views from a single list, and the address bar follows the view you open, so a reload or a copied link lands on the same view. Nothing else looks different.

v1.6.534​

  • Changed: Settings pages behind the Review Portal were reorganized internally to prepare for moving a few sections to their own pages later. Nothing looks or behaves differently.

v1.6.533​

  • Changed: PhantomStudio can now also read Elementor templates and LinkCentral links when its key matches, on sites where those plugins are active. Every Elementor content type on the WordPress content routes becomes readable, and so do LinkCentral's links with the fields that plugin exposes for them. This is read-only and still limited to the WordPress content routes: the key can create, change or delete nothing, and both plugins' own routes outside those content routes are unaffected. Each plugin's own access check is accommodated for that one read request only, and if either plugin changes how its check works, PhantomStudio is refused rather than anything being exposed. Anyone holding the key can read all of that content, so treat the key like a password.

v1.6.532​

  • Fixed: in the cloud image library settings, the folder dropdown beside Choose folder is now wide enough to read, instead of a narrow box that cut off its text and drew the arrow over it. It fits the longest folder name, with a sensible minimum and maximum so a very long name ends in an ellipsis, it lines up with its button at the same height, and it stays hidden until the folders have loaded. Dropdowns elsewhere in the admin that are filled in after the page loads now resize to fit what they were given.

v1.6.531​

  • Changed: PhantomStudio can now read your WordPress content when its key matches, read-only and only through the WordPress content routes: published, draft, pending, scheduled, private and password-protected content of every REST-enabled content type (including each post's password field, raw content, unpublished revisions and numeric author id), terms, media, menus and menu locations, installed fonts, global styles, the active theme's data, and authors' public profiles (name, slug, bio, link, avatar links). Comments, search and the lists of content types, taxonomies and statuses are served exactly as to any visitor and are not part of the read access. It cannot read user emails, accounts that have not published, roles or capabilities, commenters' emails, IP addresses or user agents, unapproved, spam or trashed comments, application passwords, the plugin list, site settings, inactive themes, block rendering, widgets, font catalogs or any other plugin's routes, and it cannot create, change or delete anything. Anyone holding the key can read every draft, private and password-protected item through those routes, but no user emails, so treat it like a password. Custom content types are readable in full, so a site that keeps personal data as content (for example form entries stored as posts) exposes it to whoever holds the key. PhantomWP Connect's routes are now let through the REST restriction while the integration is on. Block All still blocks everything.

v1.6.530​

  • Changed: PhantomStudio can now read author details when its key matches, with REST API restriction on or off, including the authors embedded in posts and pages, so its pages can show who wrote them. Block All still blocks it, and front-end author pages and ?author= links stay hidden. Anyone holding the key can list your site's authors, so treat it like a password. Responses to requests that carry the key are always marked uncacheable. With REST logging on, a request that presents the PhantomStudio key and is not signed in to WordPress is now always recorded, even on routes the log is set to suppress, and are labeled Shared secret instead of unauthenticated.

v1.6.529​

  • Fixed: when you open one page bundle's review list, its pages now appear in the bundle's own order, the same order as the bundle email and the bundle strip, instead of the most recently edited page first, and the order holds as you load more.

v1.6.528​

  • Changed: page bundles now have their own Page Bundles view in Content Pipelines, with its own Quick navigation pill right after Review Portal, instead of sitting inside the Review Portal settings. Bundles are saved, sent and reviewed exactly as before; only where you open them moved. The reviewer lists in the bundle card and in the Review Portal settings are also taller now, so more names show without scrolling.

v1.6.527​

  • Added: a PhantomStudio integration. With REST API restriction on, requests that carry your PhantomStudio project's secret key are let through, so its front end can read your content. It is off by default, nothing opens until you save the key under System / API, Block All still blocks it, and the key is encrypted and kept out of exports, backups, and FlowMattic. Responses to requests that carry the key are marked so site caches do not store them.

v1.6.526​

  • Changed: in the publishing reminder, missed publishing time and digest emails, the line above each article card (for example Planned and the date) now has more space beneath it, so it no longer crowds the top of the card.

v1.6.525​

  • Changed: the Task type dropdowns in AI Agent Prompts and the collection filter in Stock Photos now show the same clean arrow as the other dropdowns in the review screens, in place of the browser's own. The Task type dropdown also shows the standard focus ring.

v1.6.524​

  • Fixed: the page preview in page and appearance review now fills its frame edge to edge. The white band between the colored frame and the previewed page is gone, so the preview shows the page the way a visitor sees it, and no white shows through at the frame's rounded corners.

v1.6.523​

  • Changed: private storage is safer when a site is copied or moved. The private storage location is no longer part of a configuration export, and an import, a restore, a restore point or Reset All Settings never change it. The plugin now tells an administrator when the private storage folder in use may belong to another site (for example after a site is copied, moved between databases, or turned into a network) and offers two choices, each after a confirmation: "This is this site's folder" and "Stop using it" (a new, empty folder outside the web root; nothing is copied or moved); it changes nothing by itself. A copy of a site that keeps the original's saved address is never marked as owning the original's folder. Uninstalling never removes a private storage folder it cannot prove is this site's, and names what it leaves. A move of the private storage out of the web root that fails removes what it created and keeps the old location, which is recorded; a move that was cut off partway is completed by a later request. Private file downloads and backup archives refuse symbolic links. Notices that carry buttons are no longer turned into pop-ups on the plugin's screens. Known limits: until an administrator answers the notice, a copied site keeps sharing the original's folder, as before; on a network the first site to move its private storage out of the web root takes the shared folder's contents with it, as before. On a network the two choices are for a network administrator, and a deleted site's own marked private storage folder is removed with it.

v1.6.522​

  • Changed: backups are safer and more complete. A restore point is now saved before a restore or a configuration import changes anything, so it can really undo it. It holds all your stored settings, so undoing brings back every key the restore changed, added or removed, and a restore no longer drops settings that no backup covers; if the restore point cannot be saved, nothing is changed and the message says why, and each site keeps its newest 10 restore points. Saved backups can be downloaded again, with a protected request and a file name that does not reveal the secret name stored on the server, and that secret name no longer appears in the backup log or on screen. Backups and restore points no longer contain any keys, tokens or passwords (the Manage API key, the GitHub token and the AI provider keys were included before): a restore keeps the site's own and never clears them, so restoring onto a fresh site means entering them again, and an older backup that still holds some can no longer bring back a key you rotated. Saved backups are referred to by an internal id instead of a file path, path handling was tightened, and a backup folder that is a symbolic link is refused with a clear message. On a network, every site now has its own backup folder and a deleted site's backups are removed with it; earlier backups made before this change are kept at network level, where only a network administrator can download or delete them.

v1.6.521​

  • Fixed: an upgrade step no longer fails on database servers that do not provide a SQL hash function, and one failed upgrade step no longer blocks the others or repeats on every page load. A step that fails is now retried later, with longer waits between attempts, and the plugin version is only recorded as upgraded once every step has finished. Nothing else changes in what you see.

v1.6.520​

  • Changed: uninstalling the plugin now keeps your lead records when it could not save a copy of them. The lead records stay if neither the spreadsheet file nor the backup file of them could be written, the lead activity table stays if its file could not be written, and the few saved keys those records need stay with them; the uninstall log line says so, with the row counts. It also no longer deletes a copy of your own logo from the Media Library, only the plugin's own bundled logo pictures, and a logo copy that is kept shows in the Media Library again. The scheduler cleanup that runs on uninstall is more complete, because it now also removes the scheduler log entries of an older setup, and gentler on large sites, because it works in small batches.

v1.6.519​

  • Added: a third choice when you deactivate the plugin, Wipe all FlowMattic data. It is destructive and cannot be undone, and nothing is backed up. If the same person who confirmed it deletes the plugin from the Plugins screen within 60 minutes, FlowMattic is deactivated (its files stay, and it can be activated again later and starts empty) and all of its data is removed: its tables, settings, scheduled jobs, the files it saved in its own upload folders (such as PDFs, images and signatures), its translation files, its user and post fields, and the workflow manager role it added. Users who held only that role are left without a role, and plugins that require FlowMattic are deactivated by WordPress. Files saved to the Media Library or to a folder you chose stay. Tables your workflows built are dropped only when they match exactly what FlowMattic creates and are not WordPress tables; any other is left and named in the uninstall log, and you can drop it by hand if it really is yours. You must type the site address to confirm, and the choice cannot be combined with Do not ask again. On a network it can only be chosen from the network Plugins screen by a super admin, and it runs only if every site of the network is armed. It expires after an hour and then the earlier choice applies (Keep or Remove), the Admin tab shows it with its expiry and a Cancel control, and choosing Keep or Remove cancels it. A remote uninstall, the command line, a scheduled task or a different user never carries it out: they remove the variables the plugin manages instead, and the log says why. Keep and Remove work as before.

v1.6.518​

  • Changed: when the plugin is deleted with its FlowMattic variables kept, it now also saves a snapshot of the settings those variables come from in the private backups folder, and a small marker file in the wp-content folder that records only that kept variables exist. Saved keys stay encrypted in the snapshot; license and lock state, the private storage location and the stored password of the licensing gateway module are never written to it. After a reinstall the plugin pauses all syncing to FlowMattic, whether it finds the snapshot or only the marker, and shows a notice offering Restore settings or Start fresh, so the kept variables are not deleted by the first sync of a site that has no settings yet. Restore puts the saved settings back; Start fresh discards what was saved; both resume syncing on the next admin page load, after the plugin's own upgrade steps have run. Start fresh then deletes the variables whose settings are empty. If you delete the plugin a second time before answering, the first snapshot is kept. The Keep description on the Admin tab and in the Deactivate question now says so. Nothing is paused or saved when the variables are removed instead.

v1.6.517​

  • Changed: deactivating the plugin from the Plugins screen now asks what should happen to its FlowMattic variables if the plugin is later deleted. You can keep them as they are, including saved keys (the default), or remove the ones SyteOps manages, which are the variables whose names start with the plugin's own prefix; nothing else in FlowMattic is touched. The question appears for a single Deactivate and for a bulk Deactivate, and can be switched off with Don't ask again. The same choice, and a switch to turn the question back on, are on the Admin tab. Deactivating never deletes anything. Deleting the plugin from the Plugins screen, a bulk delete, the command line and a remote uninstall do not ask: they use the saved choice. Reset All Settings returns the choice to Keep and turns the question back on. Sites that had the old Clear FlowMattic variables toggle on start on Remove, and all other sites start on Keep.
  • Fixed: deactivating the plugin no longer deletes any FlowMattic variable. The removal now happens when the plugin is deleted, and it works whether or not FlowMattic is active at that moment.
  • Fixed: Reset All Settings no longer deletes a FlowMattic variable whose name only resembles one of ours.

v1.6.516​

  • Changed: backups are always stored in the default backup folder on your site, and the option to choose a different folder is removed. If you had chosen a folder, the packages already in it stay where they are and the plugin no longer lists, prunes or removes them; a notice on the Backups screen names the folder once so you can move or delete them by hand, because they contain saved settings including keys.
  • Security: backup packages now have unguessable file names, and the backup folder gets files that block direct web access on Apache and LiteSpeed servers; on servers that ignore those files, such as nginx, the unguessable file name is the protection. Packages already in the default folder are renamed when you update, and if that could not be completed the Backups screen says so and tries again each time you open it. The Download button on saved backups is removed because it never worked; retrieve packages over SFTP or from your cloud storage. Uninstalling still names a previously chosen folder in the log and never deletes it.

v1.6.515​

  • Changed: uninstalling no longer deletes posts in post types created for content sources, or the custom-field values content sources filled in on any post, because that is your site's published content. The posts stay in the database with their comments, categories, tags and images, and a small file in the backups folder lists each content source with its post type's settings, its custom fields and its post counts so you can register the type again. Pictures are unaffected except in the two cases uninstall already handled: the theme logos, and files kept in the private storage folder that is removed. Lead records and lead activity records are now also saved as CSV files in the backups folder before they are removed, so you can open them in a spreadsheet.

v1.6.514​

  • Fixed: uninstalling now also removes the queued REST request log entries (client address and route) that a site using the older post-based scheduled-tasks storage keeps, whether they are waiting, finished, failed or canceled, together with their log comments and the monitor's own task group, so none of it outlives the plugin. Scheduled tasks that belong to other plugins are left alone, including ones whose name differs from ours only by letter case, and the existing cleanup of the request log in the scheduled-tasks tables now removes large backlogs in small batches so other plugins' queued tasks are not blocked while it runs.

v1.6.513​

  • Fixed: uninstalling now also removes the numbered archive copies (.1 to .5) that the automation debug logs rotate into, so no debug log file outlives the plugin.

v1.6.512​

  • Fixed: uninstalling now also removes the queued REST request log entries (client address and route) that the request monitor leaves in the scheduled-tasks tables, whether they are waiting, finished, failed or canceled, together with their task logs and the monitor's own task group, so none of it outlives the plugin; scheduled tasks that belong to other plugins are left alone.

v1.6.511​

  • Fixed: uninstalling now also removes two more leftover markers: an option that a disabled-site backup used to leave behind, and a hidden-from-library flag that could stay on a media item.

v1.6.510​

  • Fixed: uninstalling now also removes leftovers it used to miss: two scheduled checks (a license health check and the update check), old revoked-connection records, library entries for files that moved into the private storage folder being removed and for the default logo copies, and posts in a content source's own post type now leave with their category and tag links, comments and revisions; settings imported from another site can no longer make uninstall delete regular posts or media, it refuses to empty a storage folder that is a link or sits inside the plugins, themes or core folders, and a custom backup folder is still never deleted and is now named in the log as left in place.

v1.6.509​

  • Fixed: uninstalling now also removes a private storage folder that was moved outside the web root (only a folder named like this site's own private storage is ever emptied), keeps the backup of your contact records inside the private backups folder under a long random name instead of the public content folder, and clears the SyteOps Admin grant from every user so a reinstall no longer restores it.

v1.6.508​

  • Changed: in the Review Portal, the two library buttons in Image Details are now named Media Library and Stock Photos, so they are easy to tell apart; the Stock Photos and cloud library browsers open right under those buttons, above Alt Text; and the open/close arrows beside section headings line up with the heading text.

v1.6.507​

  • Fixed: on a phone, settings fields, tables and the AI token-limit row no longer run past the edge of their cards; desktop layout is unchanged.

v1.6.506​

  • Added: the Review Portal no longer saves over a change someone else made after you opened the post. A bar names who changed it (or says it was updated), pauses saving, and offers Reload to see their changes or Save mine anyway; what you typed stays on the page.

v1.6.505​

  • Added: groundwork for warning a reviewer when a post changed after they opened it in the Review Portal, so a save from an older tab cannot quietly overwrite someone else's change. Nothing changes on your site yet.

v1.6.504​

  • Changed: the cloud image library's Enable library switch and Library name can now be changed only by a SyteOps administrator, like the key and the folder; a settings save from anyone else leaves both as they were.

v1.6.503​

  • Changed: the Google Drive integration card now uses a transparent logo, so it matches the other integration cards.

v1.6.502​

  • Changed: the warning shown when WP-Optimize is active now says how to keep held pictures safe (untick its "Clean all trashed posts" option, or keep at least as many weeks of data as the holding period), and it no longer warns about WP-Sweep or Advanced Database Cleaner, which cannot remove held pictures.

v1.6.501​

  • Added: a Removed pictures view in Content Pipelines lists every picture being held after removal, with Restore and Delete now, and every picture marked to always keep, with Stop keeping. It shows how many pictures are held and how much space they use.

v1.6.500​

  • Changed: importing or choosing a picture that is being held after removal now brings that picture back instead of creating a duplicate; a picture in the trash can no longer be set as a featured image or placed into a page.

v1.6.499​

  • Changed: removing a version of a picture, and the automatic clean-up of old versions, now keep the picture for the holding period, so it can be restored from its row of versions. A picture an administrator chose to remove anyway is now removed when the period ends unless a new reason to keep it has appeared, and a kept picture the site is still showing is restored automatically.

v1.6.498​

  • Changed: "Delete image" on a profile picture or theme logo now only removes that picture. If the picture is still used elsewhere the file stays in your media library, otherwise it is kept for the same period as other removed pictures, with an Undo.

v1.6.497​

  • Changed: pictures removed with Delete Unused are now kept for 30 days (adjustable in settings) and can be restored from the card's "Recently removed" list. The site keeps showing a kept picture until it is finally removed, and it is checked once more before that.

v1.6.496​

  • Added: you can mark a picture "always keep" from the Unused pictures card, so it is never offered for removal or cleaned up automatically. The card lists the pictures kept on the article and lets you stop keeping one.

v1.6.495​

  • Changed: Delete Unused now lists a picture your public site displayed in the last 90 days under "May still be in use", unticked and with the date, so it is not removed by mistake. Only an administrator can remove such a picture, after a second confirmation.

v1.6.494​

  • Changed: Delete Unused now lists a picture it cannot be sure about under "May still be in use", unticked and with the reason. Only an administrator can remove such a picture, after a second confirmation.

v1.6.493​

  • Changed: the plugin now notes when the public site displays a picture. A later update will use this to avoid offering pictures that are still on show for deletion. It has no visible effect yet.

v1.6.492​

  • Fixed: pictures the plugin itself uses (theme and brand logos, profile and model photos, the email logo) are always kept by Delete Unused and by variant clean-up, and a refused variant delete now says which of those uses it.

v1.6.491​

  • Fixed: Delete Unused no longer holds a picture back because its number matches a slide's size or position.

v1.6.490​

  • Fixed: a notification email waiting to be sent no longer stops Delete Unused from listing a picture; if a picture is removed before the email goes out, the email says so.

v1.6.489​

  • Fixed: Delete Unused now also keeps a picture that an inactive theme's settings still use, so switching themes back does not show a missing picture.

v1.6.488​

  • Changed: Delete Unused no longer checks the whole site every time a portal page opens. It checks when you press its button, and on a very large site it checks as many pictures as it can in the time allowed and lets you check the rest.

v1.6.487​

  • Fixed: Delete Unused no longer holds back a picture just because its number appears somewhere unrelated in a post's fields, and now recognizes picture fields from field plugins and theme settings whatever they are named.

v1.6.486​

  • Fixed: deleting a picture variant now checks the whole site first, including the article's own custom fields and unsaved changes, and a refused delete changes nothing in the article; automatic clean-up of old variants no longer stalls when one variant cannot be checked.

v1.6.485​

  • Fixed: Delete Unused now also keeps a picture that a slider, the links list, network settings or the theme's own files still use, and says so when it cannot confirm the list.

v1.6.484​

  • Fixed: when comments were added since the page loaded, Delete All Comments now shows them before asking again, and a deleted comment and its replies leave the Notify list right away.

v1.6.483​

  • Fixed: in Review photos with AI, a picture explicitly marked decorative (an empty alt text plus a decorative role or hidden-from-assistive-technology marker) is labeled "decorative", is not pre-selected and is not billed unless you tick it, and ticking it says first that it will stop being marked decorative. Coverage's "Images without alt" count skips decorative pictures, and an alt text that is only a non-breaking space now counts as blank there.

v1.6.482​

  • Fixed: the Coverage view's mode switch and filters now line up, the SEO gap filters wrap onto more lines instead of being cut off on narrower screens, and the Delete buttons across the admin (logo, user image, backup and Coverage comments) share one red destructive style.

v1.6.481​

  • Added: the Coverage view has a new Comments mode next to GEO and SEO. It lists every page and post that has Review Portal comments and lets a SyteOps administrator select several and delete all of their comments in one go, after a confirmation that says how many will be removed, including replies.

v1.6.480​

  • Added: administrators now see a Delete All Comments button at the bottom of the comments area on every Review Portal page and post. It asks you to confirm, says how many comments will be removed, and removes everyone's comments on that page or post, including replies. If someone added comments after you opened the page, nothing is deleted and you are asked again with the new total.
  • Fixed: a notification email is no longer sent for a comment or reply that was deleted before the email went out.

v1.6.479​

  • Fixed: Delete Unused in the Review Portal now lists a picture only when nothing on the site still uses it, and checks again when you confirm. Before, it looked only at other pages and posts' text, so a picture could be offered, already ticked, while it was still in use. It now also checks other pages and posts' excerpts, the open article's own custom fields and excerpt, the pictures currently in your editor even before you save, site settings such as the site icon and logo, widgets, categories, user profiles, and comments. A picture it cannot be sure about is kept. Tables that other plugins keep for themselves, such as some slider plugins, are not checked.

v1.6.478​

  • Fixed: the Review photos with AI dialog now shows "has alt text" for pictures whose alt text is in the article, no longer re-selects them after a run, never replaces alt text or captions you wrote, and reports how many pictures were actually written.

v1.6.477​

  • Fixed: in the Coverage view, the GEO and SEO switch, the filters, Clear filters and the page numbers no longer land on a "not allowed" screen.
  • Changed: the Coverage view now has even spacing between the mode switch, notes, notices and filters.

v1.6.476​

  • Added: the Used badge now also appears in the media library window that opens from Choose from library, and from Use another picture, in the Review Portal. A picture already in use on the site carries a Used badge with the number of places. Select the picture to see a Used on list at the top of the details column: it names the posts and pages you can edit and counts the rest. On a phone, where that column is not shown, the same list is a short line beside the button at the bottom of the window. Badges load for the pictures on screen as you scroll, and a count with a plus sign means at least that many.

v1.6.475​

  • Fixed: the Used count on a picture in the Review Portal now counts only real placements of that picture. Before, any number on the site that happened to equal the picture's internal number was counted as a use (a year written in an article, a price, a stock level, the person who last edited a post, a category), so a picture nobody had placed could show a large Used count. A picture still counts when it is a featured image, sits in the content, or is referenced by a gallery, a block, a page-builder widget or a picture field. A picture stored by number alone in a custom field is counted when the field's name says it holds a picture (author_image, hero_logo) or, with Advanced Custom Fields active, when the field is an image, gallery or file field; a field that only holds a count, a setting or another item's number is not counted even when its name mentions pictures. A picture stored by number alone in a field whose name does not say it is a picture, on a site without Advanced Custom Fields, is not counted until a developer registers that field name. Where the portal cannot tell whether a very large page uses a picture, a count it shows carries a plus sign (at least that many) instead of reading as exact.
  • Changed: in From library, the enlarged preview opens on click only; resting the pointer on a picture no longer opens it. Moving to a picture's Use button with the keyboard still shows the picture and where it is used.

v1.6.474​

  • Added: the Used badge and the list of where a picture is used now also appear on three more pictures in the Review Portal. In From library, a picture this site already holds shows its badge, and so does a picture right after you use it. In the Unused pictures card, a badge means another post or page shows that picture; hover it, Tab to it or tap it to see which. In the versions strip under a picture, each version in use anywhere carries the badge. In From library and the versions strip, click the picture to see the list in the preview that opens.

v1.6.473​

  • Changed: pressing Save in a Review Portal tab that is showing the signed-out bar, or that recently failed to check your sign-in, now checks again first, so signing in again in another window no longer needs a switch of tabs before saving works. The signed-out bar and message are now always shown on a phone, even when Hide tools was on, and the account chip reads Signed out while the bar is showing.
  • Fixed: the live-article Save no longer replaces the message that a colleague is editing with a generic failure, and the check of who is editing now gives up after 15 seconds instead of holding Save on Still saving.

v1.6.471​

  • Changed: a Review Portal tab left open for a long time keeps working. When its sign-in token has expired (after about a day), the portal now fetches a fresh one by itself and repeats the save, import, note or picture request that was refused, instead of failing until you reload the page. Pictures in the cloud image library that failed to appear for the same reason are loaded again.
  • Added: if you have been signed out altogether, the portal now says so in a bar at the top with a Sign in again button that opens in a new tab. What you typed stays on the page, and it is saved when you come back to the tab after signing in, unless a colleague is editing the same draft, in which case you are told before anything is saved over their work, and that save is held. A colleague who edited the draft and then left is not detected.

v1.6.470​

  • Keyboard and touch previews: the larger picture preview in the Review Portal now opens when you Tab to a picture (or to its checkbox or Use button), with the list of where it is used, and closes with Escape. On a phone or tablet, tap a cloud library picture to open it larger and tap it again, or anywhere else, to close it.
  • Feedback pictures: the small picture beside a feedback note can now be opened from the keyboard too (Tab to it, press Enter or Space to open its Image Details), and focus returns to it when you close Image Details. Where a viewer cannot open Image Details, the picture still shows its larger preview on focus but is not offered as a button.
  • Exact Used count: after you use a cloud library picture, its Used badge shows the exact count once the article has been saved, instead of a count with a plus sign.

v1.6.469​

  • Added: reviewers can now pick pictures from your connected cloud folder in the Review Portal. Click a picture in an article, the featured image, or a picture on a page, open Image Details, and choose the button named after your library. Browse its subfolders, hover a picture to see it larger, and choose Use to copy it into your media library and put it in place.
  • Added: a picture that was already copied in is reused instead of being copied again, and a Used badge marks pictures that are already in use on the site. Hover a badged picture to see which of your posts and pages use it.
  • Added: pictures in a format the site cannot use are left out of the library, with one line saying how many were left out.
  • Added: when you use a picture in the article, the description (alt text) it already has replaces the old picture's description, and you are asked to write one if it has none.

v1.6.468​

  • Changed: in Reviewer editing permissions, the Modify with AI column is now named Modify with AI and image libraries, because the same permission also decides who may pick pictures from the image libraries. The column now also appears when the Google Drive integration is on, not only when the companion image plugin is active.
  • Added: groundwork for browsing the cloud image library from the Review Portal. The picker is not visible yet.

v1.6.467​

  • Added: in the Cloud image library card you can now choose the Google Drive folder, either from a list of the folders shared with your service account or by pasting a folder link, give the library a name, and switch it on. SyteOps checks the folder with Google before keeping it, then shows its name and how many usable pictures it holds, and tells you to share the folder with the connected address when Google cannot open it. Disconnecting, or connecting a different key, clears the chosen folder and switches the library off, and the chosen folder is left out of exports and backups. The reviewer picker that browses the folder arrives in a later version, so reviewers do not see the library yet.

v1.6.466​

  • Added: groundwork for copying a picture from the cloud image library into the media library, where a picture picked more than once is copied only once. Nothing changes on your site yet.

v1.6.465​

  • Added: a Google Drive integration and a Cloud image library card in the Review Portal settings. Paste a Google service account key, share your Drive folder with that account, and use Test connection to confirm Google accepts the key. The key is stored encrypted, is never shown again, and is left out of exports and backups. SyteOps only reads from Drive and never changes or deletes anything there. Choosing the folder and the reviewer picker arrive in later versions, so reviewers do not see the library yet.

v1.6.464​

  • Added: groundwork for a pictures-in-use lookup that a later version will use to show where an image is already used. Nothing changes on your site yet.

v1.6.463​

  • Changed: more groundwork for the cloud image library that arrives in a later version. Nothing changes on your site yet. Internal: the new code can only look inside the one cloud folder an admin chooses, and it still can only read.

v1.6.462​

  • Added: groundwork for a cloud image library, which will let reviewers pick pictures from cloud storage in a later version. Nothing changes on your site yet. Internal: the new code can only read from cloud storage; it has no way to change or remove a file there, and a build check enforces that.

v1.6.461​

  • Added: the Modules section of the Admin tab now shows "Update available: 1.0.024 → 1.0.025" with an Update button next to each installed module that has a newer version, a Check for updates button, and an "Available to install" list of modules your license server offers this site, each with an Install button. Only SyteOps Admins see these controls. A new version is unpacked beside the installed one and only replaces it once it is complete and its signature and checksum check out; if anything fails, the installed version is kept and the reason is shown. Only one module installs at a time. When the license server has switched on automatic module updates for the site, the twice-daily check now installs updates for modules already installed, one by one; it never installs a new module and never brings back one you uninstalled, and one failure does not stop the others. The Modules section shows whether automatic updates are on and what the last automatic run installed or why it could not. Uploading a module package now replaces an installed module the same safe way, and a package whose version is not exactly the one offered, or older than what is installed, is refused. Automatic updates only install packages signed by the signing key built into the plugin; a package signed by any other key is left for the Update button, and the reason is shown.

v1.6.460​

  • Added: on the license server, each connection's action menu has a new "Module Access" option. It lists every module the server publishes with an on/off switch for that one site, labeled Private or Public with its starting state: private modules start off, public modules start on. Turning a module off stops that site being offered the module or its updates; it never uninstalls anything already there. The same window has an "Install module updates automatically" switch for the site, off by default, which the license server now sends to the site with its daily check-in. A switch covers the site's address with or without www. Only SyteOps Admins can change these switches, and every change is recorded in the log.

v1.6.459​

  • Changed: a small number of internal modules that only apply to the plugin's own licensing server are no longer offered for install on any client site.
  • Internal: the licensing server now checks for its own module updates on a regular schedule, independent of the daily per-site refresh, and always sees every module it has published, including those internal-only ones, when it checks for itself.

v1.6.458​

  • Fixed: Sites that were already set up were never offered module updates, because they only received the module list and the keys needed to install updates once, during first setup, and an error stopped the main key from being saved even then. Each connected site now checks in with the license server once a day, quietly in the background, using its own connection, and picks up the current module list and keys, so new module versions start appearing in the Modules section of the Admin tab. If the license server cannot be reached, the site tries again a few hours later instead of every hour. A site whose connection has been revoked no longer receives anything, and a site that was never connected is not included; connect it once with the connect button. Also fixed: the license server now sends sites the signing keys they need to verify a module before installing it; before this, a correctly configured server silently left them out. The license server's Server card now shows whether those signing keys are set up correctly.

v1.6.457​

  • Added: leads can now be moved to another site and still pass their integrity check there. A new "Export Data + Verification Key" option (SyteOps admins only) adds this site's verification key to the export, encrypted with a passphrase you choose (at least 12 characters). The file never holds the key in readable form. When you import the file on another site and enter the passphrase, the imported leads show "Integrity verified with the source site's key". The other site keeps its own key and uses the imported one only to check the records that import brought in. A wrong passphrase stops the import before anything is saved. Both sites show a matching key fingerprint so you can confirm the file came from where you think. Visits the new site has already recorded are skipped, and the import message says how many.

v1.6.456​

  • Fixed: A one-time notice that tells your Tech Contact when a LiteSpeed Cache update makes an internal Cloudflare authentication fix unnecessary could mark itself as sent even when the email never went out, so a real failure meant nobody was ever told. It now only marks itself sent after a successful delivery, and retries a bounded number of times instead of giving up silently.
  • Fixed: New-lead email notifications could lose an entire batch of leads if the notification failed to send, and turning on "send instantly" could make a visitor's own page wait on outbound email before finishing. A failed send now keeps its leads for the next attempt instead of losing them, and instant lead emails always go out in the background rather than holding up the visitor.
  • Fixed: A directly-sent review notification (Resend, Send page, Send bundle, and similar) now leaves the same delivery record in the article's history that a scheduled notification already does. The held-source alert email (sent when a content source's mapping needs re-approval) now sends one message per recipient instead of one message naming everyone, so a bad address for one person no longer risks the others.
  • Changed: A few admin screens (the purchase/license screen, an admin menu label, and the store-licensing settings page) no longer name the third-party payment platform behind them; the wording is now generic.

v1.6.455​

  • Fixed: two actions by the same visitor recorded at the same instant could make that lead's proof packet say "Integrity check failed" even though nothing had been altered. Events recorded at the same instant are now always put in order, so this can no longer happen for new activity. A lead already affected keeps its original record, and its proof packet now explains the cause.

v1.6.454​

  • Fixed: Publishing reminders now stop once an article is actually scheduled — it's going out on its own, so there's nothing left for anyone to act on, and the reminder no longer nags about it.
  • Fixed: Choosing someone in Notify to send them the article's notes right away no longer gets silently skipped because that person had turned off their own "Reply notifications" — that switch was never meant to cover a note a colleague sent them by name.
  • Added: Every review email's footer now carries a "Why you got this: Email settings" link straight to your own notification preferences, and the Notify dialog now explains that everyone already on the article hears about new notes automatically, so picking someone there is just a heads-up, not a way to limit who is told.
  • Fixed: The email notification settings for new drafts, updated drafts, and publishing or scheduling now correctly say they also email anyone watching the article, not just the author and reviewers.

v1.6.453​

  • Fixed: with Reserve publishing slots turned on, a busy calendar — for example one where reviewers had set many future publishing times — could stop new articles from getting a slot at all, even when the next free day was clear. New articles now get their slot unless the days right around it are too crowded to check, and on a crowded calendar the suggested time is now checked against every article near it instead of skipping some. Also fixed a rare case where the hourly Auto-defer stale drafts pass, if it ran slowly while a new article arrived, could give both articles the same publishing slot. It now stops instead and picks up again on the next hourly run.

v1.6.452​

  • Improved: when WordPress's own scheduled-publish timer, or its missed-schedule catch-up, takes several review-managed articles live in the same pass, the people who review them now get one "Now live" email listing every article, sent within a few minutes — instead of a separate email per article. Publishing an article yourself still sends its "Now live" email immediately, exactly as before.

v1.6.451​

  • Added: The Lead Form block now shows a live preview and a settings panel (Title, Button label) directly in the block editor, instead of a blank placeholder you could only check by viewing the page.

v1.6.450​

  • Internal: some of the Review Portal's internal pieces now load their own dependencies directly, instead of depending on which of several internal files happened to load first. Normal page loads were never affected, but the previous setup could fail under an unusual load order. No user-visible change in this release.

v1.6.449​

  • Improved: Review Portal schedule emails now go out however an article's publishing time is set, moved or cancelled — the WordPress editor, Quick Edit or another tool as well as the portal and the content calendar — for articles that came through review. Taking a scheduled article back to a draft (Unschedule, or the editor) now sends an "Unscheduled" email naming who did it and when the article was going to publish, before that time arrives, to the people who were emailed about the schedule. A change request that cancels a schedule says so in its own email instead of sending a second one (anyone else who was emailed about the schedule still gets the Unscheduled email), and in Setup mode schedule changes made outside the portal and the calendar send nothing.

v1.6.448​

  • Added: If your site runs both Squirrly SEO and LLMS Amplifier, a new note on Amplifier's own settings screen tells you when a post you marked noindex in Squirrly is still being published into your AI answer-engine files. Amplifier does not currently recognize Squirrly's noindex setting, so without this note that post would be published there with nothing to say so. SyteOps does not change what gets published — fix it in Amplifier's own per-post exclusion control, or by turning off noindex in Squirrly, whichever is right for that post.

v1.6.447​

  • Improved: An article scheduled to publish within half an hour no longer sends a "Scheduled" review email a few minutes before its "Now live" email; only the "Now live" email goes out. Moving it to a later time still sends the scheduled notice with the new time, and unscheduling it sends nothing. Other scheduled notices now arrive at least half an hour before the article publishes.

v1.6.446​

  • Internal: the checks for whether your SEO plugin (Squirrly SEO) still claims the /llms.txt address, strips other plugins' structured data, or serves robots.txt itself now share one implementation instead of three separate copies. While consolidating them, one check turned out to compare a Squirrly setting differently than Squirrly itself does — a mismatch reachable only on a hand-edited or migrated Squirrly configuration, where SyteOps could believe the /llms.txt address was free when Squirrly was still serving it. That check now matches Squirrly's own comparison exactly.

v1.6.445​

  • Internal: cleaned up some duplicated admin styling rules and removed a leftover fallback for a browser that's no longer supported, relying on an existing site-wide rule instead. No user-visible change in this release.

v1.6.444​

  • Improved: Review Portal batched emails now wait for things to go quiet instead of going out on a fixed timer, so a long review session arrives as one email once the notes stop, never more than four batch windows after the first one (one hour at the default). Two batched emails to the same person are always at least one batch window apart, including when a very large pile is split across several emails.

v1.6.443​

  • Internal: renamed eight legacy global helper functions (Debug Tool log management, admin bar links, dashboard status widget) to carry the plugin's function-name prefix, and removed stale references to a retired cron schedule key. No user-visible change.

v1.6.442​

  • Improved: Review Portal digest emails (several updates in one message) now show the same detail the single-article email already did: reviewer names and article details on a new draft, "Publishing" vs. "Planned" wording on an upcoming reminder, and the "nothing has been published yet" note on a still-waiting-for-review notice. A rescheduled article's email now says so, naming the previous and new publishing time, instead of reading like the very first schedule notice.

v1.6.441​

  • Fixed: Review Portal — a picture picked through "Use another picture" no longer disappears if you press Apply or close the panel before pressing Generate with it; the panel now asks first, and only discards the pick if you say yes. The picker and its chip can no longer be mistaken for a replace: the chip now reads "AI reference" instead of "Starting from," and a note beside it points you at "Choose from library" for an actual swap. The disabled "Attach reference image" Pick button under Notes now shows its reason clearly, with a "Go to Import" link that jumps straight to the button that fixes it.

v1.6.440​

  • Improved: Every email SyteOps sends now shows your site's name as the sender instead of a generic fallback name, and gets your site's name at the start of the subject line by default, so a mailbox that receives mail from more than one site can tell at a glance which one an email is about. A new General setting, "Add Site Name to Email Subjects," lets you turn the subject prefix off. Review Portal emails about the same article now thread together in your inbox instead of arriving as separate messages, and every email now includes a plain-text version alongside the formatted one, with links kept as readable text and a web address.

v1.6.439​

  • Fixed: Review Portal — the "Finish These Before Publishing" checklist's Categories & Tags item now tells you exactly what to fix: no category yet, more than one category, or no tag, instead of one generic message for all three. A "Go to Categories & Tags" button takes you straight to the panel to fix it by hand. And when "Suggest categories & tags" comes back with nothing, it now says why — your site has no categories or tags of that kind yet — and tells you to add one yourself, or, if your permission only lets you pick from existing terms, to ask a colleague who can create one.

v1.6.438​

  • Fixed: Review Portal — when an email reached some people but not others, or reached a person at one address while another address on file turned it away, the confirmation now says it was sent and names who was emailed and who could not be reached, without guessing at a reason it cannot back up. Before, Resend, Send page, Send bundle, colleague hand-offs, change requests, publishing and note replies said the email could not be sent even though people had received it, and pressing Resend, Send page or Send bundle again emailed everyone a second time. Send bundle also now says when its email could not be sent, instead of always saying "Bundle sent." A problem while sending the "Now live" email, or while working out who should receive it, during a scheduled publish no longer loses that email, no longer stops the site's other scheduled tasks, and is no longer recorded as failed on the rare occasion the email had, in fact, already gone out. Two people who share one email address are no longer left with only one of them told when a problem interrupts the first. A scheduled post's own notice no longer shows a failure banner when only part of it could not be queued for later delivery, and no confirmation ever shows a person's email address in place of their name.

v1.6.437​

  • Fixed: Review Portal — for a reviewer whose GEO permission is set to View only, two pre-publish checks (GEO Analysis, GEO Analysis Is Current) quietly stepped aside instead of blocking, while AI Answers Reviewed already blocked with different wording. All three now behave the same way: they stay on the pre-publish checklist, block publishing, and explain who can finish them or that the article can be sent back with Request Changes. Description and Categories & Tags are unaffected and continue to be skipped for a View-only reviewer.

v1.6.436​

  • Fixed: Review Portal — role rows in Reviewer editing permissions now have their own "inherit" option on every cell, the same as per-user overrides. Before, saving the settings panel for any reason locked every role into a concrete value for every area, including AI Agent Prompts (Hide) — nobody had to choose that for it to happen. A cell left at Inherit now takes no position of its own for that role and falls through to the default row instead. A role already saved before this change keeps its stored values; open its cells directly, or choose Inherit, to change them.

v1.6.434​

  • Internal: the Review Portal's note-length limit now has one definition every part of the portal relies on, instead of depending on which of two internal files happened to load first. Normal page loads were never affected, but the previous setup could fail under an unusual load order. No user-visible change in this release.

v1.6.433​

  • Fixed: Review Portal — the Image Details section in the picture and featured-image panels now opens by itself as soon as you click a picture, instead of starting collapsed. It holds the image link, "Choose from library", alt text and caption, so they're visible right away; collapse it for the picture you're on and the next one still opens it.

v1.6.432​

  • Fixed: Review Portal — role and per-person permissions now apply to WordPress site administrators too. Before, any site administrator saw every portal tool, including Modify with AI and Remix with AI, even when their own settings hid it. SyteOps Admins still see everything. An administrator with no SyteOps role and no per-person entry keeps everything open, exactly as before. An administrator mapped to a role or with a per-person entry now follows those saved values — a saved role row stores every area, so, for example, a role's AI Agent Prompts = Hide now applies to administrators in that role too. Administrators can still open and edit every article. A View-only SEO or GEO setting also removes that area's item from the pre-publish checklist for an administrator, the same as it already does for any other reviewer.

v1.6.431​

  • Fixed: Review Portal — a long link in a note now wraps inside its card instead of running off the edge, in the Feedback panel and in the notes lists on the review queue and your personal page.

v1.6.430​

  • Fixed: Review Portal — the Notify list no longer offers your own name, and when the person you choose has switched these emails off or has no email address, Notify says so instead of "Could not send that — please try again".

v1.6.429​

  • Fixed: Review Portal — pressing Notify on a page review no longer reports "Could not send that" after the email was actually sent, and leaving the page or clicking a note's thumbnail no longer hits the same error.

v1.6.428​

  • Fixed: Review Portal — the Notify dialog no longer offers a note back to the person who wrote it, so pressing Notify never emails someone their own note.

v1.6.427​

  • Changed: Articles arriving from a content source are now filed under exactly one of your existing categories, chosen using each category's description, and get up to six of your existing tags. The AI no longer creates new categories or tags; when it cannot name a usable category, the draft keeps its default category and the run log says why. A new per-source setting, "Categories AI must not use", keeps the AI away from categories you list, and "Strip Uncategorized" no longer removes a default category the AI actually chose. The Review Portal's pre-publish check now asks for exactly one category.

v1.6.426​

  • Fixed: Clicking a same-page link in the Review Portal's appearance preview no longer leaves the top of the page cut off with no way to scroll back up.

v1.6.425​

  • Fixed: Review emails sent in a batch now accept only valid, distinct email addresses from any code that adjusts a reviewer's addresses, matching the check emails sent right away already had.

v1.6.424​

  • Added: The Insert Link dialog in page and post review now also searches your site's own pages and posts, alongside any LinkCentral managed links.
  • Improved: The LinkCentral links list in that dialog now always stays visible, showing a plain reason (and a Retry option if it couldn't load) instead of quietly disappearing.

v1.6.423​

  • Fixed: Re-scheduling an already-scheduled Review Portal article now says the schedule changed instead of announcing it as scheduled again, and pressing Schedule with the same date sends no notice at all. The review digest shows one card, not two, when a post's schedule or draft status changes twice in the same batch window. Pressing Notify again after one of a person's email addresses was refused no longer sends the notes a second time to the address that already received them. A new draft or update whose only reachable address belongs to a CC'd watcher, rather than the author or a reviewer, now reaches that watcher instead of being silently skipped.

v1.6.422​

  • Fixed: A page bundle's note now appears once, labeled with the bundle's own name and visually grouped with the cards it belongs to, above that group — in the regular review digest and in the "coming up" and "still waiting" reminder emails, not only in the direct bundle email — and only for people who can see that bundle. Every note-writing field in the portal (picture and page-element notes, replies, Request Changes, the Notify message, and Send to a colleague) now stops you at the same length limit the server enforces, and counts line breaks the same way before applying it, so a note that fits on screen is never cut short by how its line breaks were sent. Request Changes and Send to a colleague notes are now capped to the same length as every other note.

v1.6.421​

  • Added: Notes saved in the Review Portal now reach the article's author and reviewers automatically after the batch window, in the same email as their other review updates, so a whole session of notes arrives as one email with each note in full. Notify still sends at once, and a note it has sent is not sent again. A reply posted with "Notify recipient via email?" cleared, or a note left unchecked when someone pressed Notify for that person, is never sent this way, and people who turned Reply notifications off do not get it. A new setting, "Send unsent notes with the batched email" (on by default), turns it off.

v1.6.420​

  • Fixed: Review emails that could not go out right away are no longer lost when WordPress drops a scheduled task. Everyone past the first recipient of a large send, and the "Now live" email's retries, now wait in the same queue as other review updates, go out within minutes, and still respect a reviewer who has since turned that email off. A "Now live" email that still cannot be delivered is now listed in Activity once for each person who missed it. Publishing from the Review Portal after a slow image check no longer holds back everyone but the first recipient, and publishing many posts at once in WordPress no longer risks a timed-out page while their emails go out.

v1.6.419​

  • Fixed: A reviewer with more than one email address no longer gets repeat copies of a review update when one of their addresses turns it away; only that address is tried again. A review update that cannot be put together no longer holds up the other updates waiting to go out, and the Activity log now shows review updates that were emailed or skipped.

v1.6.417​

  • Fixed: A review notification email that WordPress failed to send on time, such as the new-draft notice, now goes out within about ten minutes instead of up to an hour late.

v1.6.416​

  • Fixed: In Page review and page bundles, accordions, tabs, buttons and same-page links in the preview now work when clicked, instead of every click starting a note. Links to other pages still start a note, and holding Shift while clicking starts a note on any element. A key at the top of the preview lists each click, and shows the picture shortcut only to people who can change pictures. Changing a picture from the page preview now also follows the Modify with AI permission, like the other image tools.

v1.6.415​

  • Fixed: A scheduled article whose publish job went missing is now published on time. SyteOps checks scheduled posts every few minutes, restores a missing publish job, and publishes an article that has already passed its time.

v1.6.414​

  • Fixed: A page bundle's note for reviewers is no longer cut short in the bundle email when it has line breaks and runs close to the 1,000-character limit.

v1.6.413​

  • Fixed: Review Portal cards in a page bundle now list in the order you set them — in the queue, and in reminder, escalation and digest emails — instead of newest-first.
  • Improved: Queue and review cards now carry a light shadow for a more polished look.

v1.6.412​

  • Added: Every AI image model picker — Review Portal generate/vary, the Settings model pickers, and the listing-image repair picker — now shows a $ to $$$$ price rating on each option when SyteHero reports one, with a short legend explaining the scale.
  • Added: When SyteHero confirms fal's own billed charge for a picture, the cost note reads "billed by fal" instead of a list-price estimate. A spend month that is fully or partly billed says so, and a fal team spend total appears alongside the site's own total where SyteHero can read one.

v1.6.411​

  • Added: A Theme Logo (Box) override on the Review Portal Branding card, for a square mark shown only on review items that have no featured image.
  • Improved: A review item with no featured image now shows your Theme Logo (Box) on both the review cards and the review emails, instead of a blank tile.

v1.6.410​

  • Changed: The optional fal billing key on the Systems / API tab is deprecated — use an Admin key from the client's fal team if you want the fal balance shown. The field now stays hidden unless one is already stored, with a note to clear it.
  • Fixed: The AI balance popup and page/post review AI status row now point at using an Admin fal key instead of suggesting a separate billing key.

v1.6.409​

  • Added: The AI balance popup now shows this month's image-generation spend at fal list price, with the last several months available to expand.
  • Added: In page and post review, generating or varying a picture now shows what that generation cost, and an already-generated picture in the strip shows its own cost too, when SyteHero reports it.

v1.6.408​

  • Added: An optional fal billing key on the Systems / API tab, so SyteOps can read your fal account balance without reusing the key used for image generation.
  • Fixed: The AI balance popup and the page/post review AI status row now explain when a fal key can't read the balance, instead of showing a bare "Error".

v1.6.407​

  • Added: In page and post review, a "From library" option lets a reviewer reuse a picture already generated for this client on another of their sites, instead of generating a new one — available once SyteHero is connected with a supported image AI key.
  • Added: Generating a new picture now offers a "File into" choice of which of the client's collections to save it in, and admins can see the site's default collection on the Systems / API tab.

v1.6.406​

  • Added: The Device Preview in page and post review now shows a colored frame and a small label — Live, Draft preview, Scheduled, or Private — so you always know whether you're looking at what visitors already see or a preview only reviewers can see.
  • Changed: Review Portal card borders and dividers are a touch darker for better definition.

v1.6.405​

  • Fixed: On the Systems / API tab, the AI Keys tile fields — including the Preferred model dropdown — now fit their card instead of the text clipping under the dropdown arrow.

v1.6.404​

  • Fixed: The Save button on the Settings page now stays visible at the bottom of the screen as you scroll, instead of disappearing behind the page.

v1.6.403​

  • Added: On the Notice Management page, the Save button now also stays visible at the bottom of the screen as you scroll, joining the other single-Save pages.

v1.6.402​

  • Changed: Removed the Save button from each Review Portal panel (Links, Author, SEO, GEO, Categories & Tags) — each panel still shows whether it has unsaved changes, and the Save controls at the bottom of the page save the whole draft, including those panels.

v1.6.401​

  • Fixed: Quick Navigation pills on the Systems / API and CRM tabs now jump to the section they name instead of doing nothing, and the Private Storage card on the Systems / API tab now sits in the same order as its own pill.
  • Added: The Admin tab's Quick Navigation now includes a pill for the Product License card.

v1.6.400​

  • Added: On pages with a single Save button — main Settings, the Review settings panel, and Banners — the button now stays visible at the bottom of the screen as you scroll, so a long page no longer needs a scroll back down to save.

v1.6.399​

  • Changed: On the SyteHero image AI tile, you now pick each job's model from a dropdown that shows every model SyteHero supports and its cost.

v1.6.398​

  • Fixed: The model fields on the SyteHero image AI tile no longer spill out of their boxes, and long model ids are readable.
  • Added: The tile fills in value-for-money image models for each job until you save your own picks.

v1.6.397​

  • Fixed: Moving between pages in a page bundle now saves any edit you just made to the page you made it on first, instead of dropping it. If that save fails, you stay on the page with your edits.

v1.6.396​

  • Fixed: Cmd/Ctrl+click in Page review now opens the image tools on pictures set as a section or hero background, and the image tools open next to the picture instead of in the corner of the screen.
  • Changed: The Page Preview heading and page bundle strip sit in their own card above the preview, and the strip no longer lets its scroll bar cover the page buttons.
  • Changed: The current page in the bundle strip is marked with a brand-colored outline.
  • Changed: The SEO area's AI buttons are spaced apart.
  • Removed: The Cmd/Ctrl+click hint in the Page Preview heading.

v1.6.395​

  • Fixed: Cmd/Ctrl+click on a picture in Page review now opens the image tools even when the picture sits under a link or overlay.
  • Changed: The page preview toolbar now uses a dark bar.

v1.6.394​

  • Changed: The page bundle strip in Page review has a cleaner, easier-to-scan design.

v1.6.393​

  • Added: In Page review, hold Cmd (Mac) or Ctrl (Windows) and click a picture to open the image tools and swap it into the page, with Undo.

v1.6.392​

  • Added: Groundwork for swapping pictures directly from Page review.

v1.6.391​

  • Changed: The page preview toolbar now has a full-width solid black line above the preview.

v1.6.390​

  • Fixed: Notes in review emails keep the line breaks typed in the note field.

v1.6.389​

  • Fixed: Links in a page bundle email open your reviews on the Pages view.

v1.6.388​

  • Fixed: My Portal now lists bundled pages, and bundle email links open each page's review, on sites without an active content source.

v1.6.387​

  • Fixed: A page bundle names each page and links it to that page's review, and every link in the bundle email opens that page's review.

v1.6.386​

  • Fixed: Pages and posts in a page bundle now show on My Portal, including ones that are already published.
  • Changed: Review emails place the logo at the top left, and the page bundle email lists its pages in one card.

v1.6.385​

  • Added: A page bundle can include a note for reviewers, and that note appears at the top of the bundle email.

v1.6.384​

  • Fixed: the Review Portal Page bundle toolbar now spaces its action buttons consistently, centers icons with labels, and shows a light checkmark on the Save button.

v1.6.383​

  • Changed: the page bundle picker lists eligible pages and posts when you click it; typing narrows the list.

v1.6.382​

  • Changed: The Send bundle email is now a numbered checklist of linked page and post titles with one Open button, instead of per-item keyword cards.

v1.6.381​

  • Added: a lead can now carry a deal value; it is sent to RingTonic with the status, shown on the lead, exported and included in the automation webhook; a deal value recorded in RingTonic fills in here when the lead has none.

v1.6.380​

  • Added: the management API can now report the RingTonic connection's health — whether the receiver is ready, observe mode, delivery counters and last delivery — without exposing any credential.

v1.6.379​

  • Fixed: the management API can now activate or deactivate any module the plugin ships, not only the original three — a module added since could answer "unknown module" even though it worked fine from the Modules screen. Retired modules continue to be refused.

v1.6.378​

  • Internal: RingTonic contact matching now also recognizes phone_number, the phone field name used by RingTonic's other contact record shape, as defensive groundwork for a future read of that shape — the endpoint this integration calls today never sends that field, so there is no user-visible change in this release.

v1.6.377​

  • Added: RingTonic's call outcome, confidence, deal value, call duration and status, tracking number name, caller city/state and call tags now land on the matching lead as RingTonic reports them, and appear in the lead's details, exports, emails and the automation webhook. RingTonic's AI call summary and the reason it gave for qualifying a call land there too when you turn on the new Store RingTonic's AI call summary on the lead setting, which is off by default; once on, the summary follows your contact-detail privacy setting, and under Masked phone numbers and email addresses are replaced while the wording is kept, so a name spoken on the call can remain. Call recordings and transcripts are never stored.

v1.6.376​

  • Added: The newer ad click IDs — Google's gbraid and wbraid, TikTok's ttclid, and LinkedIn's li_fat_id — are now captured on the website tracker and on calls reported by RingTonic, alongside the existing gclid, fbclid, and msclkid, and flow through to CSV exports and the automation webhook alongside the rest of your first-touch attribution. Note: gbraid, wbraid, ttclid, and li_fat_id are now reserved names for Leads custom fields — an existing custom field mapped to one of those names is dropped in favor of the built-in attribution field on your next Leads settings save.

v1.6.375​

  • Added: RingTonic can now notify SyteOps directly over a signed webhook, instead of relying only on the existing one-way status push. A completed or missed inbound call, a qualified lead, or a stage change made in RingTonic now shows up in your Leads list — matched by call or contact identity, with whatever attribution RingTonic captured for the call filled in — and a form submission there links, by contact, to its matching lead.

v1.6.374​

  • Fixed: files that a FlowMattic workflow stores in private storage now get the full guard files in every subfolder level, so a store inside the web root stays protected on OpenLiteSpeed hosts too.

v1.6.373​

  • Added: protected upload folders. List the folders under your uploads directory that hold files visitors should never be able to download — a cookie banner's proof-of-consent records, for example — and SyteOps empties them into private storage on a schedule of 1, 5 or 15 minutes. Every file is copied, checked byte for byte and only then removed from the public folder; a file whose contents are already archived is simply deleted rather than stored a second time.
  • Added: a Sweep now button and a last-sweep line on the Private Storage card, reporting how long ago the sweep ran, how many files moved, how many duplicates were removed and how many errors there were. Clearing the folder list stops the schedule.

v1.6.372​

  • Added: private storage now moves outside the web root when your host allows it. A folder the web server has no address for cannot be served by any server, which closes a gap on hosts that ignore the protective .htaccess rules. Existing files move across only after every one of them is verified byte for byte; if any file fails, nothing is deleted and the folder stays where it was.
  • Added: a Private Storage card on the Systems / API tab — the folder path, whether it is inside or outside the web root, and the result of a self-check that asks your own site whether the folder can be fetched. It runs daily and on demand, and a warning appears in the admin if the folder turns out to be reachable.

v1.6.371​

  • Added: store a Media Library file in private storage from a FlowMattic workflow, so an automation that imports a file (for example, a daily consent-proof email attachment) can keep it out of the public library.

v1.6.370​

  • Fixed: RingTonic status sync no longer retries a declined status change as a forced write. Only a change RingTonic answers as successful while silently keeping the lead at its previous stage is retried, and the retry is a direct stage update — never a new conversion record.
  • Fixed: re-engaging a lead RingTonic currently shows as Unqualified or Lost (moving it to any other status) is now recognized as needing the same forced-update permission a backward move needs, instead of being silently skipped forever.
  • Fixed: a forced RingTonic stage change is verified against RingTonic's own response rather than assumed to have worked.
  • Fixed: the RingTonic API key can no longer be silently blanked by a failed encryption attempt when saving Leads settings.
  • Fixed: a lead created purely from a phone call no longer sends its masked phone number to RingTonic's contact lookup, where it could never match — SyteOps logs that it has no usable identifier instead.
  • Changed: a phone number captured from a completed call now follows your Lead privacy setting on the editable lead record, and is never written to the tamper-evident event record at all.

v1.6.369​

  • Fixed: license activation now recognizes a site whose address starts with www. when the license server recorded it without www. (and the reverse), so re-activating a site after its activation was removed no longer stalls at "Activation could not be confirmed yet."

v1.6.368​

  • Fixed: Create an original picture inspired by this one now also ticks itself when the picture you are working from already has a durable reference attached in Notes, not only when you attach a reference picture live in the dialog. Unticking the box yourself still stays unticked for the rest of that dialog session.
  • Fixed: the Review Photo AI picker no longer offers to describe pictures that are attached to the article but not shown anywhere in it (not in the body, not the featured image) — it now tells you when any pictures were skipped for that reason, and reports plainly when nothing on the article can be described.

v1.6.367​

  • Added: Create an original picture inspired by this one, a new checkbox in the Review Portal's Modify with AI dialog. Instead of editing the picture you started from, it writes a description of its style, mood, colors and people, then generates a brand-new picture from that description — the source picture's pixels are never sent to the image generator. It ticks itself when you attach a reference picture, with a site setting (Create an original picture by default, on the Content Pipelines tab) to change that default. A completed one is badged "Original · inspired by <file name>" in the grid of versions.

v1.6.366​

  • Internal: groundwork for a future image-remix feature. No user-visible change in this release.

v1.6.365​

  • Added: a Review Photo AI button in the Review Portal's SEO panel opens the same photo-description picker the AI buttons already offer, so you can run it on the article's pictures without generating a meta description first. The picker gains Check all and Uncheck all links above the list, and the button shows the configured AI provider and model underneath.

v1.6.364​

  • Fixed: the AI agent prompts panel's Copy button is now always visible beside the generated prompt (disabled until there is text to copy) instead of appearing only after Generate.
  • Changed: the separate Copy last prompt button is gone — the prompt box now shows your last generated prompt automatically, with a note of when and by whom, so you can copy it again without regenerating.

v1.6.363​

  • Added: choose which instruction chips the Review Portal's Remix with AI dialog offers a reviewer, in the Remix presets card under Review Portal settings → Workflow. Existing sites see every chip exactly as before; clearing every box hides the chip row entirely.

v1.6.361​

  • Fixed: the SyteHero image AI (fal) tile on the System / API → AI API Keys card now matches the styling of the other provider tiles — its key field is properly labeled and its six per-capability model fields sit in a tidy, bordered two-column grid under a "Capability models" heading.
  • Fixed: the Fetch Models button in an AI Models card row's expanded settings no longer renders as an oversized full-width block — it is now a small button next to the model list, matching every other AI settings pane.
  • Fixed: the LinkCentral rows on the AI Models card (Cross-Link AI, Keyword AI, Context AI) now correctly show Ready when their own AI provider has a saved API key, instead of always showing Needs key. Every readiness pill also shows a tooltip naming the provider it is reporting on.

v1.6.360​

  • Removed: the Review Portal's previous REST route path, deprecated in v1.6.348, has been removed as promised. Any custom integration or automation still calling it must switch to /content/review; the old path now returns a plain not-found response.

v1.6.359​

  • Fixed: the Reply, Reply and Resolve, and Resolve controls under a note in the Review Portal now reach a comfortable touch target on a phone, and the delete control gains a larger invisible tap zone without changing its visible size.
  • Fixed: the reply box under a note now stays visible above the on-screen keyboard when it opens on a phone.
  • Fixed: dialogs in the Review Portal (Notify, Publish, and others) now cap their height and scroll internally on a phone instead of letting their Send or Confirm button get pushed off the bottom of the screen.
  • Fixed: the text caret in the article body editor no longer disappears behind the fixed publishing-actions bar while typing on a phone.

v1.6.358​

  • Added: the Review Portal's Remix with AI dialog now offers instruction-preset chips (Shorter, Longer, Simpler, More formal, More conversational, Fix grammar only) that fill in the instruction box with a ready-made, editable sentence.
  • Added: up to six recent remix attempts per article are kept in a compact list under the dialog — time, scope, and instruction for each — so you can compare them and bring an earlier one back with Apply, or remove one with Discard.

v1.6.357​

  • Fixed: the draft/published status badge in the Review Portal no longer causes the whole page to scroll sideways on a phone.
  • Fixed: text fields and dropdowns across the Review Portal and the person hub no longer render too small to read — and no longer trigger the browser's zoom-on-focus — on a phone or a tablet. The previous phone-only fix stopped at 600px and missed several field types; this one covers every text field, dropdown and the article body editor up to 768px.
  • Fixed: the fixed publishing-actions bar at the bottom of the screen on a phone is now capped so it cannot crowd out most of a small screen.

v1.6.356​

  • Added: the Review Portal's Remix with AI can now rewrite just a selected paragraph, heading, list, or table instead of the whole article. Select some text first and the dialog offers Selection (the default) or Whole article; with nothing selected, only the whole article can be rewritten, exactly as before. Selecting part of a list item or table cell rewrites the whole list or table it sits in. The same length limit and missing-picture/link/shortcode/table check apply to just the selected piece.

v1.6.355​

  • Fixed: secondary keywords are now cleaned up wherever they're saved — from Content Pipelines ingest and from the Review Portal alike. Duplicate entries are removed (case-insensitively), extra whitespace is trimmed, and the list is capped at a sane count and length per entry.
  • Fixed: an incoming article whose secondary keywords carried a keyword-picker's accessibility label (a "Remove <term>" button caption, concatenated onto the term with no separator) now has that artifact stripped out automatically instead of being stored verbatim. An article already affected is repaired the next time it's saved in the Review Portal.

v1.6.354​

  • Fixed: the AI Models card's Article writing & remix row now names everything that AI area powers — Remix text with AI, the AI meta description, and taxonomy suggestions — instead of naming only two of the three.
  • Fixed: the Custom AI model label in an expanded Override row no longer stays exposed to screen readers once its input is hidden; both now share the same hidden state.
  • Fixed: the Debug Tool's private-storage nonce-refresh endpoint now uses the shared admin verification helper for consistent nonce and capability checks, matching its sibling endpoint.

v1.6.353​

  • The SEO rename impact report gained the step it was missing: an Execute rename button under each picture it says it can handle. Nothing happens until you tick the confirmation box beside it.
  • On confirming, SyteOps runs the report again from scratch — the plan you read is a snapshot and the site is live — and renames only from the fresh one. Post bodies, page-builder layouts, widgets, theme settings, term and post meta, the SEO plugin's social image and the image optimizer's records are all updated.
  • The old files stay on the site for 30 days and the old addresses redirect to the new ones, so a page that was missed, a cached copy or another site linking to your image keeps showing the picture. After 30 days the old files are tidied away and the redirect keeps answering. Caches the plugin can reach are cleared straight away.
  • If any part of your own content cannot be rewritten, the whole rename is undone and nothing is left half-changed.
  • Anything the report said needed a decision — a search that ran out of room, a setting stored as a structured record, a row in another plugin's table — gets its own tick box, and the rename is refused until it is ticked. A picture the media registry reports as in use cannot be renamed from here at all.
  • Up to ten pictures per run, administrators only.

v1.6.352​

  • The Coverage view's SEO mode gained a Structure column — a read-only report on each article's headings, images and links, reading the article body directly.
  • Each row shows a compact summary (H1 count, whether heading levels skip, image count and how many are missing alt text, internal versus external link counts, and word count), with the full list of anything worth a look as the cell's tooltip.
  • Four new filter pills narrow the table to a specific issue: Multiple H1, Heading order, Images without alt and No internal links.
  • Nothing is written. The report works even with no SEO tool integration switched on.

v1.6.351​

  • The Coverage view's SEO mode now covers your pictures. Two new columns list every library image an article shows — its featured image and every picture in the body — and badge the ones with no alt text, alt text that is only the file's name, or no title on the media record.
  • Describe pictures looks at the picture itself and suggests alt text, a caption and a title, using the article around it for context. Nothing is written: each suggestion arrives with a tick box, and a second, unpaid step writes only what is left ticked.
  • The run is priced and capped by pictures, not articles — the confirmation dialog names the picture count, and a selection over the per-run maximum is refused outright rather than quietly trimmed.
  • Alt text belongs to the picture, so a picture another article is showing keeps its alt text unless you tick Overwrite shared pictures, and the confirmation dialog says so before the run starts.
  • A picture the AI could not read is remembered against that file, so the next run does not pay to be told the same thing again. Replacing the file makes it eligible once more.
  • A report-only File name column flags pictures whose media record says nothing the file name does not already say, and links each one to the Media Library.

v1.6.350​

  • The media library gained an SEO rename impact report. Each picture has an SEO rename: impact report link in its row, and you can tick up to ten pictures and run the same report from the bulk actions menu.
  • The report shows the file name the picture would be given, then lists every place the current name is used — post bodies, page-builder layouts, featured images, widgets and theme settings, term and post meta, the SEO plugin's social image, and the image optimizer's own records — and says what changing each one would take.
  • It finishes with a plain list of what it cannot promise to fix: other sites linking to your image, copies held by caches and content networks, and addresses written into your theme's own files.
  • Nothing is renamed. The report is a plan you read before deciding; acting on it is a separate step that is not available yet.
  • Only administrators can see or run the report.

v1.6.349​

  • The Coverage view now has two modes. GEO is the answer-engine audit it always was; SEO turns the same table into a bulk pass over your SEO titles, meta descriptions and focus keywords, showing what each article holds today and badging the gaps.
  • Propose runs AI over the articles you tick and suggests a headline under 60 characters, a meta description and one focus keyword phrase for every field that is empty. The confirmation dialog names the provider, the model and the token ceiling, and says plainly that nothing is written yet.
  • Review and accept: each suggestion appears under the current value with a tick box, with Accept all fields and Skip all fields for the whole page. The accept step writes only what is left ticked, runs no AI, and spends nothing.
  • Two optional switches, both off by default: Re-propose existing keyword and Overwrite existing values. A plain run only fills gaps, so nobody's own wording is proposed over. Whichever you tick is named in the confirmation dialog before the run starts.
  • A suggestion whose value changed since it was proposed — because somebody edited it in the Review Portal in between — is refused rather than written, and the article returns to the propose queue.
  • Accepted values go through the same write path the Review Portal uses, and each run is recorded as one row in the Log with the fields that moved on each article.

v1.6.348​

  • Changed: the Review Portal's REST API routes moved to a new URL path.
  • Deprecated: the previous route path keeps working for one release and marks its responses with a deprecation header — any external caller (a custom integration or automation reading the old path directly) should move to the new one before the next release, when the old path stops working.

v1.6.347​

  • Every SEO field SyteOps writes — SEO title, meta description, focus keyword and supporting keywords — now goes through one internal seam, with the per-tool handling inside it. The Review Portal, an arriving article and a pipeline run now store exactly the same thing for the same input; they had drifted apart.
  • On a site running Squirrly SEO with the integration toggle off, the focus keyword and meta description now reach the snippet row Squirrly actually renders from, instead of its mirror fields alone — so a keyword saved there was stored but never shown.
  • Image alt text, title, caption and description are now written by a single routine. It never overwrites a description on a picture another article is showing unless a person typed the new one, and it keeps a literal backslash intact on every path (the portal used to drop one).

v1.6.346​

  • SyteHero's fal image-AI key can now be stored and managed in SyteOps. A new SyteHero image AI (fal) tile on the System / API AI Keys card carries the toggle, the encrypted key, and a model id per image capability (generate a picture, remix a picture, picture to video, remove background, upscale, extend edges).
  • While the toggle is on, SyteHero borrows that key and disables its own key, enable and clear controls, with a link back to the tile. The Review Portal's image-AI row says "Managed from here" and links there too.
  • Update SyteHero to 1.0.139 or newer before turning the toggle on — an older version does not know to ask, so the setting would have no effect.

v1.6.345​

  • Added a read-only Image generation & modify (SyteHero) row at the foot of the Review Portal's AI Models card, showing whether SyteHero is installed and active, whether its image-AI key is configured, and its cached credit balance — with a link to SyteHero's own settings when it's active.

v1.6.344​

  • Redesigned the Review Portal's AI Models card: one row per feature, named by what it does (Article writing & remix, Answer-engine analysis, Ingest field mapping, Social posts, Image alt & captions, Agent prompts), with a readiness status (Ready / Needs key / Not configured).
  • Each row shows a plain "Uses site default" line with an Override switch — turn it on to pick a provider and model just for that feature, or leave it off to follow the site default.
  • The less-used custom model ID and max-tokens controls now sit in a collapsed Advanced section per row.
  • Lead scoring and LinkCentral now show as status rows on this card, linking to their own settings, when active.
  • The Social row's provider and model now save together with the rest of the card, in one Save click.

v1.6.343​

  • Remix with AI in the Review Portal now refuses a very long article before sending it, naming the character limit.
  • A rewrite that would have dropped a picture, a link, a shortcode, or a whole table from the article is refused instead of applied, and the message names what would have gone missing.
  • A rewrite now keeps your article's focus keyword and secondary keywords exactly as written when either is on record.
  • Added a Revert to pre-remix control that puts the article back exactly as it read before the last rewrite — it works even after you reload the page, unlike Undo remix.
  • The remix dialog is now announced as a dialog to screen readers, opens with focus on the instruction field, closes on Escape, and returns focus to the Remix button on close.
  • Remix failures now show a specific reason — timed out, offline, too long, or would have dropped part of the article — instead of one generic message.

v1.6.342​

  • Added a Site default provider setting on the AI API Keys card (System / API). Any AI feature you have not pointed at a provider of its own now uses that provider, along with the preferred model and token limit from its tile.
  • Leave it on Auto-pick to keep the previous behavior. The hint under the select names the provider Auto-pick would choose, so the fallback is never hidden.
  • Screens that show which provider and model a feature will use — the Current: line on the AI Models settings, and the Remix and Agent prompts panels in the Review Portal — now name the inherited provider, marked "(site default)", with the model that will actually run, instead of showing a dash.
  • The Configure AI Provider modal and the provider tiles now accept a blank provider as "use the site default", as long as a site default is available.

v1.6.341​

  • Generate new picture now refuses a second run while one is still going on the same article, so a double click, a second tab or a second reviewer cannot start two billable generations at once.
  • A generation you walk away from is now stopped on the server rather than left to run to completion.
  • A site whose only connected image models generate from text can now use Generate new picture at all; it was refused there before.
  • A picture is now always generated by the provider that offers the model you picked.
  • A model this site does not offer is now refused with a message naming it, instead of being quietly swapped for a different one.

v1.6.340​

  • Fixed a "Powered by" wordmark in the welcome email's light footer that was too faint on white; it now meets accessibility contrast guidelines.
  • The welcome email's footer logo no longer repeats the company name to screen readers a second time right after the header already announces it.

v1.6.339​

  • The AI Agent Prompts panel is live on page and appearance reviews: a sidebar card lets you pick which pinned notes to turn into an implementation prompt for a coding agent, adjust the AI-guessed task type per note, then Generate and Copy the result.
  • Each generated task carries its location on the page (element, section, breakpoint), the client's request verbatim with any replies, an interpretation and an acceptance check.
  • Hidden from reviewers by default — grant the AI agent prompts area under Editing permissions.

v1.6.338​

  • The Debug Tool's welcome-email test-send card now shows the server's real failure message (a bad nonce, a mail delivery failure) instead of a generic "Unknown error."
  • The Private Storage Browser now reports a message when a signed download/open link fails to generate, instead of silently reloading the page.
  • An unstructured admin error message no longer echoes the server's filesystem path.

v1.6.337​

  • Behind-the-scenes groundwork for AI Agent Prompts: the engine that turns the notes you pin on a Page Appearance review into one copyable implementation prompt, plus the per-post record of which notes a prompt covered and whether any have changed since.
  • Nothing changes in the review experience yet — the panel that uses it arrives in a later update.

v1.6.336​

  • Review Portal buttons, active pills and badges now pick black or white text based on your configured brand color, instead of always assuming a dark background.
  • Off-site links on your personal page (your website, booking link, LinkedIn, and the dashboard link) now tell screen readers they open in a new tab.

v1.6.335​

  • Behind-the-scenes groundwork for AI Agent Prompts: pinning a note on the Page Appearance canvas now records more about the exact spot you pinned (which element, its heading, its position on the page) for a future update. Nothing changes in the review experience yet.

v1.6.334​

  • Removed an internal REST capability for bulk-deleting unused pictures across multiple articles at once. It had no control in the admin UI and was reachable only by direct API call; the per-article "Delete unused" card in the Review Portal is unaffected.

v1.6.333​

  • The AI Models card gains an Agent prompts row, and a new card next to it lets you customize (or restore) the preamble template used when turning page-review notes into an implementation prompt. The reviewer permissions matrix gains a matching column, hidden from non-admin reviewers until you grant it. The feature these settings power ships in a later update.

v1.6.332​

  • The Watching list on your personal page no longer goes blank when you click Next and every remaining item is scheduled rather than a draft.
  • The 5/10/25/100 list-size chooser now updates the view even when your account is not mapped to a person profile, instead of silently doing nothing.
  • Content health can now page past its first 5 issues on sites where the Review Portal is not active.
  • Paging through Content health no longer loses the list's spacing.
  • The calendar's unscheduled-drafts panel no longer disappears on its last page, and clicking Next twice quickly no longer skips or duplicates a page.
  • Links on later pages of a shared review-package list now open the same themed preview as the first page.
  • The Live list's Posts and Pages columns now page correctly on sites with extra content types registered.
  • The "Could not load the next page" message is now translatable.
  • The calendar's unscheduled-drafts panel now says when it could not confirm it found everything, instead of implying the list is complete.

v1.6.331​

  • Sending a message-only Notify note with every checkbox cleared now confirms the message went, instead of reporting "0 notes".

v1.6.330​

  • Unused pictures now only offers to delete a file you have permission to delete. If a reviewer can upload media but not delete their own posts, the card no longer offers their own uploads either — grant delete permission for posts, or use the Author role, to restore it.
  • Generating a new picture from text now tells the server to cancel a job that takes too long, instead of leaving it to finish unwatched.
  • Reopening a different picture after generating one from text no longer leaves the previous result's Add to article and Use as featured buttons active.
  • Setting a new featured image after removing the old one now shows Modify with AI and the correct button label again, without a page reload.
  • The Generate new picture button no longer appears when no text-to-image model is configured.
  • Add to article and Use as featured on a generated picture can no longer be double-clicked, and a refused featured-image change is now shown in the same panel instead of only on the featured-image card.
  • Deleting unused pictures now shows what happened after the list refreshes, including when some pictures could not be deleted, and a refusal now says why instead of a generic error.
  • Saving Review Portal settings now actually stores the chosen generate-new picture model.

v1.6.329​

  • Admin error messages now show what the server actually said instead of a generic failure or a raw response.
  • Text on brand-colored buttons and badges stays readable whichever brand colors are set.

v1.6.328​

  • The welcome email's copyright line is now dark enough to read on its white footer.
  • The welcome email footer stays white in dark mode even if the email styles are reordered.

v1.6.327​

  • Off-site links on your private page — your website, booking and LinkedIn links — no longer pass that page's address to the site you open.
  • Your private page, the review portal, and the review queue all tell every browser to keep their address to itself when you leave them.
  • Review emails now label the button to your review page correctly: My Portal when you have one, See all my reviews otherwise.

v1.6.326​

  • The Notify note picker gained Check all and Uncheck all links, so clearing or restoring every note no longer means clicking each one.
  • Send now disables with a "Pick at least one note, or add a message" hint when nothing is checked and no message is typed.

v1.6.325​

  • Added a Published Content heading above live posts and pages you can edit.
  • Posts and Pages labels are larger, and notes emails now say Notes currently open and Previously Resolved Notes.

v1.6.324​

  • Watching still lists older drafts when scheduled copies already sit under Coming Up.
  • A failed Next on a review list says the page could not load, and the calendar pager follows the chosen page size.

v1.6.323​

  • When Watching stops scanning early, scheduled items that already sit under Coming Up still get a note that they moved.

v1.6.322​

  • Next on a grouped review list keeps the items and loads the next series from the server.
  • Choosing a review-list size no longer changes the calendar pager.

v1.6.321​

  • Unscheduled drafts on the calendar show five at a time, with the same 10 / 25 / 100 choices as the review lists.

v1.6.320​

  • The review page remembers how many items you want per list. Operators can set a site default.

v1.6.319​

  • Review lists show five items at a time, with choices for 10, 25, or 100. Next loads more from the full set you can access, not only the newest few.

v1.6.318​

  • Live posts and pages on your review page start collapsed. Open that section when you want them.

v1.6.317​

  • Internal improvements and maintenance.

v1.6.316​

  • When a picture is gone from the article, Image Details hides Alt Text, Caption, Generate SEO, and Attach reference.
  • Thumbnails in Send These Notes do not open Image Details. The notes-list hint waits until you pick someone, and the picker asks who you want us to notify.

v1.6.315​

  • Clicking a note thumbnail opens Image Details for that picture, including its active remix, and still opens when the picture is gone from the article.

v1.6.314​

  • Unused pictures is now its own reviewer permission (Allow or Hide, default Allow). Hide removes that card.
  • Clicking a note thumbnail opens Image Details for that picture.

v1.6.313​

  • Internal improvements and maintenance.

v1.6.312​

  • Unused picture sweep on a single post or page uses that item. Status and Type filters are gone there.
  • The private portal logo opens the WordPress dashboard in a new tab.
  • Member since dates read month day, year (May 12, 2026).

v1.6.311​

  • Note hover previews sit further left, off the whole note so the text stays readable.

v1.6.310​

  • Unused pictures now live in the review sidebar, not on each picture.
  • Hovering a note thumbnail shows the larger preview to the left of the note.

v1.6.309​

  • Unused pictures use their own row layout, not the Modify with AI classes.
  • Thumbnail previews stay visible when moving to the checkbox and sit at the right height after the picture loads.

v1.6.308​

  • Unused pictures and Notify note rows now match the other review cards.
  • Hovering a thumbnail shows a larger preview of the picture.

v1.6.307​

  • The Posts | Pages queue no longer says nothing is waiting when a truncated scan left one column empty.

v1.6.306​

  • Remix with AI now shows the content AI provider and model.
  • The dialog names the pair that will run the rewrite.

v1.6.305​

  • Remix text with AI is now a reviewer permission.
  • Hide turns the button off and the remix request is refused.

v1.6.304​

  • Image notes now show a small thumbnail of the stored picture.
  • The Feedback list and Notify picker use the same chip.

v1.6.303​

  • Notify lists the notes you can send so you can uncheck any you do not want to include.
  • Replies and already-handled notes can go in that list, and the email keeps already-handled notes in their own section.

v1.6.302​

  • The review queue now opens in Posts | Pages.
  • Clear filters returns to that view.

v1.6.301​

  • The welcome email light footer now carries the same brand rule as the header.

v1.6.300​

  • Remix shows Remixing and offers Redo remix.
  • Formatting toolbar no longer includes undo and redo.

v1.6.299​

  • Unused pictures is its own section in the article image panel.
  • Generate New Image from Text is the generate-from-prompt control.

v1.6.298​

  • Sweep unused pictures is now a Review Portal permission, default Hide.
  • Reviewers granted Allow can sweep unused pictures only on articles they can already edit.
  • A WordPress administrator without plugin-admin access does not get sweep; the matrix cannot grant it.

v1.6.297​

  • Unused-picture sweep is logged on each article the pictures belonged to. The sweep control stays hidden unless you can upload files.

v1.6.296​

  • Reviewers can delete unused pictures from the article editor. Administrators can sweep unused pictures by status and type.

v1.6.295​

  • Reviewers can generate a new picture from a prompt without a source photo. The result is not placed until they add it to the article or use it as featured.

v1.6.294​

  • Reviewers can remix the article body with AI from the formatting bar. The change is not saved until they press Save, and Undo remix puts the last body back.

v1.6.293​

  • Reply to a note can skip the email. Uncheck Notify recipient via email? The reply still stores, and Notify later still sees it.

v1.6.292​

  • The review queue can show posts and pages side by side. Calendar stays one column.

v1.6.291​

  • Reviewers can remove a picture from the article without deleting it from the media library.
  • Featured images use a dedicated clear action so an empty id is not treated as a missing file.

v1.6.290​

  • The welcome email footer is now white, so the company logo is not a white box on a dark bar.
  • Review emails still use the dark footer.

v1.6.289​

  • Settings tabs now keep one Save Changes button at the bottom. Extra Save buttons on Integrations, System/API, and CRM are gone.
  • Users and Backup hide that footer. Users still saves each person card. Admin connection and domain buttons now say what they save.

v1.6.288​

  • Admin buttons and heading bars now pick black or white text from the brand color so labels stay readable.
  • Role badges on user cards use the same contrast pick instead of always-black text.

v1.6.287​

  • In the welcome email, the person's profile picture now sits to the right of the greeting instead of above it, and the list item about reviewing pages moves up to second place and reads "Review how Pages look and what they say."

v1.6.286​

  • The welcome email now shows the person's profile picture when they have one, adds reviewing how their page looks and what it says to the list of things they can do, drops the Welcome tag at the top, and carries the company logo in the footer in place of the name.

v1.6.285​

  • The Debug tool's Clear Normalize Marker card now shows the server's own error message when a request is refused or fails, instead of a generic "Request failed."

v1.6.284​

  • The management API now rejects a malformed slot number or record id instead of guessing which one was meant.

v1.6.283​

  • The Manage API can now trigger a person's welcome email on request, with a preview mode that checks eligibility and the destination without sending anything.

v1.6.282​

  • The Debug Tool now has a Welcome Email Test Send card. It mails you the real, rendered person welcome email at your own account address, so you can see exactly what a person receives, without marking anyone as sent or waiting between sends.

v1.6.281​

  • Each person's card now has a Send Welcome Email button. It mails them a link to their personal page, their WordPress username, and a link to the "Lost your password?" page where they can set or reset a password — with a note showing when it was last sent, and a warning if the link needs resending.

v1.6.280​

  • Your private page header shows your logo at its full lockup size, with no tile behind it, no site name beside it, and "powered by" to its right, as it did before.

v1.6.279​

  • Your private page shows your logo again instead of a letter tile. It resolves the logo in the same order as the review screen: a review portal logo override, then your login logo, then your company logo.

v1.6.278​

  • Review rows, bundle headings and content-health items on your private page open in a new tab, as does the calendar card's Edit in WordPress link, so the page stays where you left it.
  • The review screen's top bar chip reads My Portal when it opens your private page.
  • Active filter pills and primary buttons shown as links keep white text on their colored fill.

v1.6.277​

  • Featured images on your review rows now sit vertically centered beside the title and status.
  • The Calendar button sits on the same line as your photo and name, with no empty row above them.
  • Your private link moved into the Your details card, directly under Reply notifications.

v1.6.276​

  • Your private page's details card is now a drop-down panel, closed by default, with clickable email, phone and link values and a grouped edit form.
  • The Calendar button sits under the page header, your reviews run the full width of the page, and each post or page row shows its featured image.
  • Quick Posts and Pages filters sit beside the review filters, profile links are pills, role badges list every WordPress and site role, and the sign-in button reads Sign In & Open My Portal.

v1.6.275​

  • Your private page shows each detail once; the name now lives only in the profile card.
  • Choosing a profile picture by attachment on your private page accepts only images you uploaded or may edit.

v1.6.274​

  • A person slot that is deleted or reused through the Manage API no longer keeps the previous occupant's names, contact details, or links.

v1.6.273​

  • The reminder and reply notification toggles now appear in the Edit details form on your private page.

v1.6.272​

  • You can now update your own name, contact details, links, photo, and photo consent from your private page.

v1.6.271​

  • You can turn reminder emails and reply notifications on or off from your private page.

v1.6.270​

  • Your private page lists posts that still need a featured image, SEO title, GEO questions, or a feedback reply.

v1.6.269​

  • Your private page opens with your profile, your links into WordPress, and your publishing numbers.

v1.6.268​

  • Your private page now works on every site, whether or not content review is in use.

v1.6.267​

  • The private review page link on the Links tab is now the same width as the other link fields

v1.6.266​

  • The review queue no longer says nothing was found beside the scheduled items it did find
  • A publish whose notification email is being retried now says so instead of reporting it lost
  • An article's activity records who a notice could not reach, once per notice rather than once per copy

v1.6.265​

  • The review page now tells you when a notification email could not be sent instead of reporting success
  • Your publish, colleague invite, change request or reply still goes through when the email fails

v1.6.264​

  • People you add to a draft keep their access when its source sends an update
  • A source update still adds anyone newly on its reviewer or CC lists, and removes nobody

v1.6.263​

  • The page-review preview now only opens for signed-in people on that review
  • A forwarded preview link no longer shows an unpublished draft to other accounts

v1.6.262​

  • The publishing reminder and the "still waiting for review" notice now wait briefly and batch with any other updates for the same person, the same as new drafts and schedule changes already do
  • A publishing reminder now goes only to articles that actually went through review; a hand-written scheduled post with no reviewers no longer reminds its author
  • Both notices link straight to each person's own private review page
  • A publishing reminder that could not be queued for somebody is tried again on the next hourly check instead of being recorded as already sent
  • A reminder or escalation for somebody with no working email address is now recorded on the article's activity instead of disappearing

v1.6.261​

  • New draft, draft updated and scheduled notices now wait briefly and reach each person as one email, so a burst of arriving articles no longer floods reviewers
  • New Batch window setting (0–240 minutes, default 15) controls the wait; 0 sends each notice right away in the background
  • A notice for an article about to publish goes out at least five minutes before its publishing time
  • Moving a scheduled article to a new time on the content calendar now tells the author, reviewers and watchers that its schedule changed
  • A notice is dropped rather than sent if the article was published, deleted or unscheduled in the meantime, or the person lost access; a refused send waits out its retry delay before it is tried again, and a notice that still cannot be delivered is recorded on the article's activity rather than disappearing
  • A person with a very large number of waiting notices gets them in batches rather than one enormous email, with the rest following right behind
  • New draft and draft updated notices now go to each person separately, including people watching the article, instead of one shared email with copies

v1.6.260​

  • The live notice now goes out however an article goes live, including the content calendar, the WordPress editor and its scheduled time, once per go-live
  • Saving an article that is already live, or changing a live article's published date, no longer sends a published email
  • Posts that never went through review, and articles from a source set to publish on arrival, send no live notice; Setup mode silences notices for articles that go live outside the portal
  • The live email's second button opens each person's private review page
  • If the mail server refuses the live notice outright and nobody receives it, the notice is retried once a few minutes later; if that also fails, republishing the article sends it

v1.6.259​

  • Replying to a note now emails everyone else in that conversation, not only the note's original author
  • Reply emails link straight to the note being answered

v1.6.258​

  • Review emails such as changes requested, colleague hand-offs, notes, resends, page and bundle sends, and published or scheduled notices now go to each person separately, with no shared recipient list
  • Their buttons open the article from each person's private review page when that person is linked to a WordPress account; the published or scheduled notice keeps its single button to the article
  • You are no longer emailed about your own actions, so the person who publishes or schedules an article no longer receives the confirmation; watchers now receive it
  • Send page and Send bundle still reach you when you tick your own name, and a Resend reaches you when you are on the article's reviewer list or are its author
  • An email to a long list finishes sending in the background, skipping anyone who lost access to the article in the meantime

v1.6.257​

  • Your review queue now has a filter bar so you can narrow it by post type, status, or content source
  • A section that no longer applies to your filters, such as Awaiting Your Review under a Live filter, is hidden instead of shown empty

v1.6.256​

  • Your review queue now has a Notes & Replies for You section for replies to your notes, open notes on things you review, and anything sent to you with Notify — every row opens, even for an account without its own personal review page
  • Some review links now open straight to one note and scroll it into view

v1.6.255​

  • Your review queue now shows a Coming Up section for anything already scheduled, soonest first, so it stops appearing under Awaiting Your Review or Watching
  • Drafts and pages sent to you as part of a review bundle are now grouped together under that bundle's name
  • Some review links now open the queue's calendar automatically instead of requiring an extra click

v1.6.254​

  • People copied on a review can now open the draft and comment on it, but no longer become full reviewers with edit and publish rights
  • Your review queue now lists anything you're copied on under a new Watching section, unless you already have full access to it — and when there may be more than the page can show, it says so instead of quietly leaving items out
  • A resend reaches only the reviewers and the author, never the people copied on the review

v1.6.253​

  • People reviewing through a shared bundle link can now leave and reply to notes, but can no longer edit or publish; they get the full editor once the bundle is sent
  • People who can only comment on a draft see a read-only version of the review screen with notes, replies and Notify, and no editing, publishing, scheduling or resolve controls

v1.6.252​

  • Laid the groundwork for people who follow a post to add, answer and remove their own review notes without being able to edit it; nobody's access changes yet

v1.6.251​

  • Review queue rows now open the same view you were actually asked to review, with a link to the other view when both apply
  • Pages always open their appearance view in the review queue and in shared links
  • Renamed review queue sections and links to cover both posts and pages
  • Clarified the label on the review appearance preview
  • Fixed an already-published article sent for appearance review (Send page or a bundle) so it never keeps defaulting to the appearance view if it's later reverted to draft

v1.6.250​

  • Older See all my reviews links now open your own private review page, and a private review page link can open one item directly
  • The review screen's See all my reviews opens your private review page

v1.6.249​

  • Each team member's Links tab now shows their private review page link, with Copy and, for admins, Regenerate
  • Fixed the Links tab row so it keeps failing closed for any future caller that omits its admin-visibility context

v1.6.248​

  • Laid the groundwork for a private review page link for each team member
  • Review queue pages now tell page caches and CDNs never to store one person's page for another

v1.6.244​

  • Review screen Use in article no longer deletes the picture it replaced
  • Use the trash icon on a version card to remove a picture from the media library

v1.6.243​

  • Review screen Links fields match the other cards, and View article stays readable on any brand color
  • Remix cards say Use in article; deleting a replaced original works unless another article really uses it

v1.6.242​

  • Internal improvements and maintenance

v1.6.241​

  • Assign insert, edit, and link suggestions on the review screen per reviewer type
  • Review screen docs cover editing an existing link, Open in a new tab, and the Links panel

v1.6.240​

  • Suggest library and cross-article links from the review screen
  • Check whether those links are live

v1.6.239​

  • Insert or edit a Review Portal link without the article jumping to the top
  • Open in a new tab on that insert/edit dialog

v1.6.238​

  • Review Portal on a phone shows the full article title and the Content Review line without clipping
  • The header and footer are more compact, and Hide tools frees the screen for editing

v1.6.237​

  • Pages list now says Review Appearance, matching the themed preview that link opens

v1.6.236​

  • AI Models blurbs for Content, Ingest, and Social match how those areas actually work
  • Vision models is visually separate from the area above it; Modify images with AI matches the other area headings

v1.6.235​

  • Roles and Users Users area matches the Users tab: centered title, description, and Quick Navigation chips
  • Count, Add User, and Edit in Admin sit on one centered line under that card

v1.6.234​

  • Roles and Users heading sits on one line with the count and buttons
  • Feedback notes drop the left rails beside the avatar and trash; preview toolbar says Device Preview and separates Height from the canvas

v1.6.233​

  • Drafts with a planned publishing time show that date on the Posts list
  • Quick Edit adds a read-only Publishes line so it is not confused with Last Modified

v1.6.232​

  • Posts list, editor, and toolbar now say Review Content next to Review Appearance
  • Appearance notes quote the text you select; Escape drops the selection and closes the note

v1.6.231​

  • Review Appearance Window labels; posts open Review Appearance from the editor
  • Clicking a preview image shows its name and thumbnail; Saved sits in the header; review emails keep their edit buttons

v1.6.230​

  • Users keep Model photos on an AI Model subtab; Review Portal AI Models, header, and Appearance Window and Height
  • Saving a draft keeps a past date; attach a reference image under Save note; media library chrome stays readable

v1.6.229​

  • Saving a Review Portal draft keeps a past publish date
  • A live article can change its published date without coming off the site

v1.6.228​

  • Review Appearance splits Window and Height on the preview toolbar
  • Clicking the preview opens a note instead of following the page

v1.6.227​

  • Review Portal header puts the status pill opposite the logo
  • Nav pills sit under the logo, with Signed in as on the right

v1.6.226​

  • Review Portal AI Models is its own settings group, not under Setup
  • Text models, Vision models, and Image generation bands use short names and full-width tints

v1.6.225​

  • Users cards keep Model photos and Model consent on an AI Model subtab
  • Roles and Users roster heading, count, and Add User sit centered above the cards

v1.6.224​

  • Reviewers who cannot publish are asked to save a preferred time, not to go live
  • The review portal editor switches to Published when the calendar publishes immediately
  • Notes Pick refuses pictures that are not PNG, JPEG, or WebP
  • Page review emails use a Page review subject
  • Review links in the block editor Status panel appear after the first save, without a reload

v1.6.223​

  • A past date on the publishing calendar goes live immediately and keeps that publish date
  • Click a page in Page Reviews to select it before Send page; page review emails use page wording, not draft

v1.6.222​

  • Roles and Users and the Users tab now share the same roster heading count and Add User styling
  • Roster quick-navigation chips use shared layout styling on both admin surfaces

v1.6.221​

  • Model photo consent checkbox stays compact on the Users card instead of stretching to the full field width
  • WordPress media library pickers keep native styling when opened from admin screens

v1.6.220​

  • Notes reference picture chips resolve attachment URLs through the review portal local helper
  • Fixes architecture enforcement for attachment URL calls in the review pipeline

v1.6.219​

  • Send page now resets the review link clock so reviewers are not sent an already-expired link
  • Page review emails re-arm the shared review link the same way bundle send does for each item

v1.6.218​

  • Bundle review emails now include a card for every item, and See all my reviews opens that bundle's queue
  • Send page emails one page as a page review without saving it into a bundle

v1.6.217​

  • See all my reviews from a page-review bundle opens your existing review queue filtered to that bundle
  • A bundle queue you are not listed on stays empty instead of showing every draft you can review

v1.6.216​

  • Renamed the Review Portal Package settings group to Page Reviews with clearer bundle labels
  • Save, send, and delete actions and status messages now say bundle instead of package

v1.6.215​

  • Review Appearance no longer shows Review Content while you walk through an appearance package
  • Single-article appearance review still offers Review Content to return to the full editor

v1.6.214​

  • The post editor and Review Appearance now link to each other, including pipeline content types
  • Review Appearance shows a Review Content control to return to the full review editor

v1.6.213​

  • The appearance preview keeps the WordPress admin bar hidden for the whole page view
  • Draft access granted for that preview still ends as soon as the page query finishes

v1.6.212​

  • The site appearance preview is a private full-page view without the WordPress admin bar
  • Height Auto matches the page, and tablet and phone widths sit centered

v1.6.211​

  • Picking an existing library picture as an image-notes reference no longer overwrites its title or alt
  • A brand-new untitled upload can still be labeled Reference Image; a picture you cannot read is refused

v1.6.210​

  • Remix model lists now say which ones take Model photos and which are scene-only
  • Generate keeps Model photos at the model's limit and never sends the picture you are already editing

v1.6.209​

  • A stored image-notes reference picture is a clickable link when you reopen the article
  • Pick and Clear stay hidden unless you can change that reference

v1.6.208​

  • The image notes panel can attach a tagged reference picture for later remixes
  • Modify with AI uses that picture unless you choose a different source for one generate

v1.6.207​

  • Fixed: Review Portal page and appearance views no longer show the Featured Image side card or load the media picker stack
  • Article review still includes the Featured Image card with edit, alt text, and library picker

v1.6.206​

  • Fixed: Review Portal AI Models group band headings keep proper spacing above later groups after the zebra tbody layout
  • The first group under the card title still sits tight to the AI Models heading

v1.6.205​

  • Review Portal AI Models groups each text and vision area with alternating background bands so provider settings are easier to scan
  • Group band headings stay separate from the tinted areas so section labels stay clear

v1.6.204​

  • wp-admin row actions and toolbar links for the themed preview now read Review Appearance and Open Review Appearance
  • Proper-noun casing is enforced for Review Appearance alongside Review Portal in translatable strings

v1.6.203​

  • The review queue page frames the logo area with a border matching other portal controls
  • Calendar and Sign out sit with more space below the branded header

v1.6.202​

  • A Schedule time less than a minute away publishes immediately instead of being treated as a cancellable schedule
  • Confirming that near time no longer fails as if the confirmation dialog sat open too long

v1.6.201​

  • Reviewers can pick a past date on Schedule; the article goes live immediately and keeps that publish date
  • The portal confirms that a past date publishes now with that historical date, instead of blocking it

v1.6.200​

  • Dropping a remix reference image in the review portal no longer shows a false upload failure while the file is still uploading
  • The Modify line briefly shows an uploading status while a dropped reference image is sent to the media library

v1.6.199​

  • When a dropped remix reference image fails to upload in the review portal, the Modify area now shows a clear status message instead of failing silently
  • A drop that never reaches the media uploader no longer looks like a successful pick

v1.6.198​

  • In the review portal, you can drop an image onto the Modify prompt box to use it as the remix reference instead of opening the media library
  • The Modify prompt box shows a highlight while you drag an image over it

v1.6.197​

  • Reviewers who use the standard sign-in page after a security check are no longer told cookies are blocked when they are not
  • The review link now prepares WordPress sign-in cookies before that page loads, and returns reviewers to their review if the check still fails

v1.6.196​

  • Review portal editor header keeps 8px spacing between wrapped top-bar rows
  • Internal improvements and maintenance

v1.6.195​

  • Review portal editor header stacks brand and status on the first row with session tools on a second row so logos and names are not clipped
  • Secure session badge in the review header now uses the same outlined style as other top-bar pills

v1.6.194​

  • Canvas pins stay in sync when a note is handled or deleted
  • A copied appearance-package link cannot change the article body or add colleagues

v1.6.193​

  • Switching items in an appearance package reloads so edits stay on the current item
  • Listed package reviewers can still open the themed preview when a single-item link window has lapsed

v1.6.192​

  • Internal improvements and maintenance

v1.6.191​

  • Create a package of pages and posts and send one review link that walks them in order
  • Reviewers move between items with the strip above the preview; comments stay on the current item

v1.6.190​

  • Posts in wp-admin get Review appearance for the themed preview alongside Review Portal for the editor
  • Pages keep a single Review Portal entry, which already opens the themed preview

v1.6.189​

  • Click a page element in the appearance preview to leave a note
  • Pins and Feedback rows share the same color; a moved element is marked, not guessed

v1.6.188​

  • Comments on a site-appearance preview can attach to a page element
  • Each reviewer's notes use a matching color in the Feedback panel

v1.6.187​

  • Pages and posts can be reviewed as they appear on the site, at three preview widths
  • When a preview cannot load inside the portal, reviewers can open it in a new tab

v1.6.186​

  • Reviewers can delete any picture in Image Details from the media library, including the one the article is showing
  • A picture the article is showing is removed from the article first; a picture another article uses is refused

v1.6.185​

  • Reviewers can uncheck Respect publishing cadence on a draft to publish that article outside the site rhythm
  • An opted-out draft no longer holds a reserved slot or draws as a reserved calendar chip

v1.6.184​

  • Review email action buttons now stack on phones so both stay tappable
  • The buttons keep their filled look in dark mode instead of becoming plain text

v1.6.183​

  • Unchanged and already-published re-ingest deliveries no longer appear in Recent runs, so the Log stays usable
  • The Skipped status filter is gone from the Log; older skipped rows stay stored but hidden by default

v1.6.182​

  • The Review Portal brand header opens the WordPress Dashboard in a new tab when you click the logo or company name
  • The article editor top bar adds See all my reviews so you can open your full review queue without hunting for the email link

v1.6.181​

  • Swap Users in the remote Users editor now really swaps the two people's details and keeps rebuilt author-id and link values on Save; before, it reported success while moving nothing
  • A remote swap clears Model consent for both people, because Model photos stay with the slot
  • The Model photos preview in the remote Users editor is locked as soon as it loads, instead of by a watcher running on every admin page

v1.6.180​

  • Changing a user's profile picture keeps their Model photos in order: the new picture starts in the curated set, and the old one stays curated unless it had been removed from it
  • Deleting a profile picture clears it from the user card for good, so it no longer comes back on the next save
  • The Model photos gallery updates as soon as you select, clear, replace, or delete a profile picture
  • Select from Media, Clear, and Delete image for profile pictures now work on the Roles & Users page
  • Swapping two users no longer leaves one person's Model consent or Model photos on the other person's slot
  • Associating a profile picture no longer fails when debug logging is on
  • Model photos set through the Manage API are cleaned up on uninstall like photos added on the Users card
  • The Review Portal's Model photo picker announces loading and errors to screen readers
  • The Profile, Curated, Tagged, and Excluded photo labels are translated on every screen, including the Review Portal

v1.6.179​

  • Only pictures the Review Portal made with a person selected as the Model count as that person's tagged Model photos; a picture tagged by hand in the media library does not
  • Model consent is no longer carried by a user export; check it again on the site that imports the user
  • Users cards show the newest 48 tagged Model photos with a Show older button, and the Review Portal lists the newest 24
  • How many Model photos you can send with a remix now follows that remix model's own picture limit

v1.6.178​

  • Model photos in the remote Users editor are a preview; add and promote stay on that site's Users card

v1.6.177​

  • Review Portal Modify with AI can send a consented person's photos with a remix, and the new file is tagged with that person's name
  • People without Model consent stay off the picker; unchecking consent does not remove existing photos

v1.6.176​

  • Internal improvements and maintenance

v1.6.175​

  • Users cards can keep several Model photos for a person, with a consent checkbox required before they can be used in the Review Portal.

v1.6.174​

  • GEO questions and answers grow to fit their text. A long question wraps instead of scrolling inside a one-line box, and the answer shows in full.
  • GEO question cards stand apart more clearly, with a darker border, a light tint and more space between them.

v1.6.173​

  • The SEO search preview looks like a search listing again. The address is green and the title is search-result blue, instead of taking the site's brand color.
  • Review Portal field labels and headings use Title Case, for example "Alt Text" and "Primary Keyword".

v1.6.172​

  • An open reply no longer keeps a note's "Changes requested" status lit. Resolving or withdrawing the last change request now clears the status even while someone's reply in a thread is still open, and a reply is never counted as a change request of its own.
  • Deleting a note re-asks when someone replied meanwhile. If a reply arrives after you open the delete confirmation, nothing is deleted: the confirmation stays open, says someone replied, and gives the new number of replies. Confirm again to delete the note with them.
  • The activity record for a deleted note lists the replies removed with it, and who wrote each one.
  • The pre-publish checklist item for the article description is now labeled "Description."
  • Remove buttons on categories, tags, and question rows added in the browser now follow the site's language, matching the ones the page loads with.
  • Amber status text is darker so it is easier to read.

v1.6.171​

  • Deleting a reply in a feedback thread now removes only that reply. Before, its delete button asked to delete the whole note and every reply under it, and someone who replied to another person's note could not delete their own reply. The confirmation now appears below the reply instead of squeezed beside it, and reply cards line up.
  • Deleting a note now removes the note and its replies together in one step, so a delete that fails partway can no longer leave the replies gone while the note stays. A reply left behind by a note deleted in an earlier version now shows as its own reply you can delete, with no Reply button that could not work, and it no longer counts as an open note.
  • The "Required to publish" label on the reviewed-answers checkbox now appears only when the site actually requires that check, and question and answer fields you cannot edit look read-only again.
  • Status messages in the social post dialog show their error and success colors again, and the dialog's field spacing is even.
  • The delete confirmation's wording now follows the site's language instead of switching to English, and the alt text and SEO title hints describe what those fields do more accurately.

v1.6.170​

  • The review queue list now matches the rest of the Review Portal. Article cards and status chips use the same corners and type as the editor fields.
  • Sign out on the queue is a quiet button next to Calendar, not a separate pill shape.

v1.6.169​

  • The Review Portal top bar groups the brand mark with the title, then Draft, with Calendar on the right. Save draft and Approve keep their places.
  • The lock banner now says who is editing this draft, and still warns that your changes may overwrite theirs. The live and scheduled banners use the same 8px corners as the rest of the editor.

v1.6.168​

  • Review Portal dialogs now match the image panel. Each field has a short name with a quieter hint underneath — Who, Message, What to change, and URL.
  • On a live article the social overlay no longer offers to send when the post publishes. That option cannot fire after the article is already live, and it is now actually hidden.

v1.6.167​

  • Feedback notes are nested cards. Each note sits in its own card, replies nest under the parent, and Reply, Resolve, and delete sit on their own row so they stay readable on a resolved note. Deleting a note asks in the card before it sends; confirming a parent with replies removes the whole thread.
  • Reviewers is the name of the list, with a hint for who can edit this draft. Send to a colleague and Note for them use a short label plus a quieter hint underneath.

v1.6.166​

  • SEO, GEO, and Categories & Tags fields now match the image panel. Each has a short name with a quieter hint underneath. Description is the search-result sentence and the WordPress excerpt. GEO is the acronym, with Generative Engine Optimization as the hint.
  • I have reviewed these answers now sits under Pillar in a Required to publish box. Analyze GEO, Generate with AI, and Describe selected on photos are soft filled buttons with the spark icon.

v1.6.165​

  • Featured image and author fields now match the image panel. Each has a short name with a quieter hint underneath — Alt text is shown when the picture cannot load, Post author is shown as the byline.
  • Modify with AI on the featured image is a soft filled button with the same spark icon as Generate SEO with AI.

v1.6.164​

  • The review portal's image panel is easier to read and use. Each field has a short name with a gray hint under it, the Image Details header shows whether the picture is in your media library while the section is collapsed, and the underlined text links are now buttons.
  • Picking a different picture to remix from is a proper button. "Use another picture" sits inside the prompt box; once you choose one it shows as a chip with the picture's thumbnail and "Starting from" its file name.
  • Version cards line up. The original and every remix are equal cards in a grid with larger thumbnails. Replace is now labeled Put in article, Delete is a trash icon that still asks before deleting, and the card already in the article says so in the spot where the others offer to go in.
  • The credit reads as one figure. With one image provider it shows as "$30.01 credit", with the provider's name in its tooltip; with more than one, each keeps its name.
  • Apply and Cancel stay reachable. They sit in a footer pinned to the bottom of the panel, and Generate has a row of its own after the options it uses, so the model name is no longer cut off.

v1.6.163​

  • Add heading anchors now sticks when a content source is created through the management API. The setting was accepted and then dropped, so the new source started with it off; only a later edit saved it.
  • Exporting and importing a content source now carries Add heading anchors. A source moved to another site used to arrive with it off.

v1.6.162​

  • An image the sending app framed itself now looks like the rest. With Content cleanup on, a bare image is wrapped so your theme styles it as an image, but an image the app had already put in its own frame, which usually happens when it has a caption, was skipped and shown plain, with no spacing around it. It now gets the same styling, and its caption is styled like the other image captions on your site.
  • A frame that already has its own styling is left alone, as are galleries and a table that contains a picture. Your stored article is not changed; each post shows the fix the next time it is viewed.

v1.6.161​

  • Every AI model choice now sits in one place. The Review Portal settings had its AI scattered across four cards — the writing models in one, the picture describer in another, the two that remake and repair pictures buried inside Article images, and social's own model in the Social Publishing card. They are now one AI Models card under Setup, in three labeled groups: reading and writing words, looking at pictures, and making pictures.
  • Each area now says what it is for, instead of leaving you to infer it from a name, and the two that are billed per picture say so where you choose them. A group appears only when there is something in it to set.

v1.6.160​

  • "Use a different image as the source" is a text action again, and Clear only appears after you have chosen a picture.
  • A Generate SEO failure the portal cannot name now says the server did not finish looking, rather than a bare "That did not work."

v1.6.159​

  • Generate SEO with AI now reaches the server. The button had no address to call, so pressing it posted the review page back to itself; the request never arrived and every press ended in a generic failure.
  • A control the review portal means to hide now stays hidden. Two controls set their own layout, which overrode the instruction to hide them — so they sat on screen and still acted when pressed.

v1.6.157​

  • Replaced pictures on the review portal show the new file even when an image CDN is on, without waiting for a purge. The portal page itself is not rewritten onto the CDN, so the cache-buster on a replaced image reaches the browser.
  • Scheduling an article, or publishing one from ingest when no slot is free, no longer strips page-builder markup. A status or date change used to re-filter the stored body, which deleted embeds and builder stubs on the way through.

v1.6.156​

  • Generate SEO with AI describes the picture in your media library, even when the page is showing a CDN copy of it. Saving stores the original media URL, so a replaced image still shows after you reload.
  • A library picture served through a CDN is labeled already in your media library, and Import is hidden. If Generate SEO does not finish, you see "The server did not finish looking at that picture. Try again." instead of "That did not work." Review portal headings use Title Case (Article Image, Featured Image, Image Details, Notes on This Image); buttons stay sentence case.

v1.6.155​

  • Opening the review portal on a page no longer empties that page. The portal is built around an article's body, and a page has no body field for it to read — so its first automatic save wrote an empty one over whatever was stored. On a page built with a page builder that stored content is only a stub, so the page kept rendering correctly and the loss left nothing to notice. The portal now refuses to write a page's body at all, from the automatic save and from Approve & Publish alike.
  • The portal tells a page from an article. A page opens on a read-only canvas where an article shows its editable body, and the formatting toolbar, paste handling and image tools stand down rather than half-appearing beside a region nobody can edit.
  • The Preview Portal button finds something on a site built only from pages. It looked for posts and nothing else, so on a pages-only site it had nothing to show. It now offers the most recent thing the portal would actually open — and only something the portal is allowed to open.

v1.6.154​

  • Review portal CSS and JS refresh after an update even when the version number did not change, without a CDN purge.
  • Replaced article images show the new file. Saving does not bake a cache-buster into the article.

v1.6.153​

  • Feedback Reply and Reopen chips use brand color. Reply is a light teal pill; Reopen is filled teal, so they no longer look like empty outlines next to the filename chip. There is a little space under those pills before the filename.
  • Generate SEO with AI names leftover failures. A timed-out call or a page that needs a reload now says so, instead of "That did not work."

v1.6.152​

  • Generate SEO with AI works on a remixed picture. A remix is still this article's photo even when the file was saved unattached. If it cannot run, the portal now names the reason instead of a generic failure.
  • Deleting the picture a Replace moved off can now include the original. Tick the box after a first Replace and the original leaves the media library and the filmstrip; Restore original hides once that row is gone. A picture the article still shows is still refused.
  • Feedback notes use compact chip actions for Reply, Resolve and delete, instead of underlined text.

v1.6.151​

  • Every AI area is reachable from the management API again. The provider, model and token limit for an AI area could be read and changed remotely — but only for some areas. Five of them answered "Unknown AI area" to every request, so the one place meant to configure AI settings for you could not touch most of them.
  • The list of areas is no longer kept by hand. It is now taken from the same registry the features themselves read, so an AI area added in a future release is reachable the moment it ships instead of waiting for someone to remember a second list.
  • A full reset clears the last two AI areas by name. Resetting all settings already cleared them; the list the reset checks against simply did not say so, which is the sort of gap that turns into a real one after a refactor.

v1.6.150​

  • "I want something like this instead." Modify with AI has always remixed the picture already on the article. Now you can hand it a different one: Use a different image as the source opens your media library — with its Upload tab — and whatever you choose becomes the thing the AI remixes from, under your own prompt. The block says so plainly while a reference is chosen, so there is never a question about which picture your prompt is about to be applied to.
  • The result still fits where it is going. The shape is taken from the picture on the article, not from your reference. Without that, a tall reference dropped into a wide slot would come back tall — a correct answer to the wrong question.
  • A picture you upload just for this is treated as scratch. Clear it, or close the panel, and it is removed again; a daily tidy-up catches any left behind by a browser that never came back. A picture that was already in your library is never touched — only something uploaded during this flow is ever cleaned up, and that is decided by the site, not by your browser.
  • Only PNG, JPEG and WebP. Those are the three the image service accepts, so anything else is refused straight away with a clear message instead of failing partway through somebody else's system.

v1.6.149​

  • An imported picture is filed under a name that describes it. A photo arriving from a content source is usually called something like IMG_4821.jpg or shutterstock-1043882.jpg, and that name ends up in the article's HTML, in the image's URL, and in what a search engine reads. Importing now renames the file from the title the picture already has, so it arrives as a-brown-dog-on-a-porch.jpg instead.
  • It only ever happens at import, and only when nothing points at the picture yet. Renaming a picture that is already in use means rewriting every place the old name appears — the article's HTML, the page builder's stored layout and its separate rendered copy, and the generated CSS — against an image CDN that cannot be cleared. So it does not do that. A picture that is already used anywhere, or one on an article that is no longer a draft, is left exactly as it is, and the import carries on normally.
  • EWWW Image Optimizer keeps up. EWWW records an optimized image by its file path, so a rename would orphan that record and the picture would be optimized — and billed — a second time. The rename tells EWWW the file moved, using the hook EWWW provides for exactly this.

v1.6.148​

  • A picture can now describe itself. Open a picture in the review portal, expand Image details, and Generate SEO with AI looks at the actual photo — not at the words around it — and suggests alt text and a caption. Alt text written from the surrounding article is confidently wrong about what is in the frame, which is worse than none: a screen reader reads it out as fact. The suggestions land in the boxes for you to edit, and nothing reaches the article or the media library until you press Apply, exactly like the meta description and the category suggestions.
  • Running SEO on the article now offers to run it on the photos. Generating a meta description, analyzing answer readiness or refreshing categories and tags all end with the same question: also run SEO on this article's photos? It lists every picture on the article with a checkbox, and unticking one leaves it completely alone.
  • Only pictures with no alt text at all are ticked in advance. A file name sitting in the alt box counts as no alt text, because it is — nobody chose it, it arrived with the file. Wording somebody actually wrote is never ticked for you, so a pass can never quietly replace a description a reviewer took the trouble to write.
  • You see the cost before you spend it. Each picture is one AI call, and the count updates as you tick and untick, so the number of calls is on screen before you start rather than on the bill afterwards.

v1.6.147​

  • You can answer a note without leaving the page. The Feedback panel has only ever let you mark a note handled or delete it, so the reply that belongs with it — "rewritten, take a look" — had to go somewhere else, usually email, where it stopped being attached to the note it answered. Reply opens a box under the note and puts your answer in the thread, indented under what it answers.
  • Reply and Resolve is one press, and one request. Answering a note and marking it handled were two separate acts, and doing them as two requests has a gap in it: a dropped connection between them leaves your answer posted under a note still counted as outstanding, with nothing on screen to say which half landed. Both now happen in a single request, and the panel paints what the server actually did rather than what it was asked to do — so if the note could not be closed, you are told, and your answer is still there.
  • The person you are answering is told. A reply emails the author of the note, using the same branded message the panel's existing notifications use. Answering your own note emails nobody, and a reply can never mail the same person about the same answer twice.
  • A reply no longer holds the article open. The publish warning counts notes that still need dealing with. A reply is part of the note it answers, not a second thing to deal with, so answering a note no longer makes the article look like it has MORE outstanding work than before you answered.
  • The Feedback panel reads more like a conversation. The author and the actions now sit together on one line, with the file name and the date on a quieter second line — they used to run together as one sentence that wrapped in the middle of a long file name. Replies are indented under what they answer, and a run of replies from the same person does not repeat their initials.
  • Two long-standing panel glitches are fixed. A note added without reloading the page did not show which picture it was about until you reloaded; it does now. And a name beginning with an accented letter produced a broken or wrong initial in the circle, because the panel counted bytes where the rest of the plugin counts characters.

v1.6.146​

  • You can now pick which AI describes your pictures. The Content Pipelines settings gained an Image SEO AI section — its own provider, model and length limit, saved and reset alongside the others. It ships ahead of the feature that will use it, so there is nothing new to click yet; setting it up now means the feature works the moment it arrives.
  • Only providers that can actually see a picture are offered. A provider whose models read text alone is listed but cannot be selected. This was the point of the setting: a text-only model handed a picture answers from the words around it and invents a confident description of something it never saw, which is exactly the caption a reviewer would trust.
  • A picture that cannot be sent is refused with a reason. Too large, or a file whose contents do not match the type it claims to be — a photo saved with the wrong extension, say — is now caught before the request goes out, and you are told which. Previously an oversized picture could exhaust the server's memory partway through.
  • Provider errors are put in our own words. When a provider turns a request away you now see a plain sentence and the status it returned, rather than the provider's raw reply — which has been known to carry account details and server addresses in it.
  • OpenAI's newest models now work at all. Picking a GPT-5, GPT-6 or o-series model used to make every request in that area fail outright, because those models refuse the creativity setting the rest of them accept. The setting is now left off for them, so they answer normally. This affected every AI area, not just the new one.
  • A blank answer is now explained. A provider that returns nothing at all used to leave you looking at the reason the PREVIOUS picture failed. Each attempt now reports its own outcome.
  • The picture size limit adapts to the server. The limit is now whichever is smaller: what the providers accept, or what your server has memory to send. On a small hosting plan a picture that would have crashed the request is refused with a message instead.

v1.6.145​

  • Replacing an image no longer gets lost when it lands while the article is saving. Pressing Replace on an AI thumbnail swaps the picture into the article body and then saves. If a save was already in flight, that save was carrying the older version of the body, and finishing it marked the article clean again — which cancelled the save the Replace had just asked for. The record said the article used the new picture while the article went on showing the old one, and there was nothing on screen to say so. Replace now waits for a save in progress rather than racing it, tells you when it is waiting, and puts the article back the way it was if the swap fails.
  • Replace can now delete the picture it replaces. A new checkbox in the thumbnail strip, off by default and reset for every image you open, deletes the picture the article moved off once the swap is safely saved. It is a tidy-up and never a shortcut: the picture is kept, and you are told why, whenever the article still shows it, another image on the article uses it, another article uses it, a remix of it is still running, or it is the picture the article arrived with. The replacement itself always stands either way.

v1.6.144​

  • The image review popover no longer traps its own buttons off screen. The popover is fixed to the screen and used to measure where it should sit only once, at the moment it opened. Anything that made it taller afterward — opening "Image details," a new row of AI thumbnails arriving, a preview image loading in, or the progress bar appearing — pushed its bottom edge past the bottom of the viewport, taking the Apply and Cancel buttons with it, and scrolling could not bring them back. It now re-measures itself whenever its size changes and caps its own height to the space actually available below it, so the buttons stay reachable no matter what it grows to show.

v1.6.143​

  • Housekeeping, with nothing to see. One of the steps that strips server addresses out of error messages had no test covering the shape only it can catch, and was very nearly removed as unused. It is now covered. Nothing about what the plugin does has changed.

v1.6.142​

  • Two more kinds of credential are hidden from error messages. When something goes wrong with a picture, the message you see has secrets stripped out of it first. Two shapes were getting through: an access key written entirely in capitals, and a server address written with the full-width dots used in Chinese, Japanese and Korean typing. Both are now caught.
  • Setting names stay readable. The new rule deliberately leaves alone anything written in capitals with underscores, because that is what a setting name looks like and you need to be able to read the one an error is telling you about.

v1.6.141​

  • Housekeeping, with nothing to see. The permission checks in front of the picture tools were written out six times, once per tool. They now live in one place. Each tool keeps its own separate answer for what to say when the picture service itself is unavailable, because those answers genuinely differ. Nothing changes about who can do what.

v1.6.140​

  • Housekeeping, with nothing to see. A step in the image progress reporting that could never run has been removed, and the cleanup that happens when the plugin is uninstalled now names the saved credit-balance readings explicitly rather than relying only on a broad sweep. Neither changes what the plugin does.

v1.6.139​

  • A picture waiting its turn now says so. The image service can now tell us that your request is queued rather than being worked on, and where it sits in line. Before, "queued" and "started but nothing measurable yet" looked identical — both drew a bar at zero, which reads as a job that has stopped. There are now three honest states: waiting its turn, working with nothing to measure yet, and working with a real amount done. When the service tells us your place in line you are shown it; when it doesn't, you are told you are waiting without a number being invented.

v1.6.138​

  • The progress bar while a picture is being made now knows when it has a real reading. Until now it decided by looking at the number: anything at or below zero was treated as "no reading yet", which was right, because the image service reports zero for the whole run on the kinds of work it cannot measure. It stops being right the moment that service starts reporting a genuine queue position, because a truthful "queued, nothing done yet" would have been mistaken for no reading at all and the bar would have gone back to moving without meaning. The answer now travels with the reading instead of being guessed from it.

v1.6.137​

  • Pictures stop inheriting their own file name as a title. A picture whose title was nothing more than its file name could pass that file name on as the title of every copy made from it. That was already fixed for pictures changed with AI; it is now fixed everywhere else too — when an article is brought in, when a picture is imported, and when an archive image is rebuilt. It recognizes the names your site makes up on your behalf, including the smaller copy it saves of a very large photo and the turned-the-right-way-up copy.
  • Rebuilding an archive image can now reach photos it never could. The check that decided whether a rebuild should rename a picture compared the title against the file on disk — but for any photo large enough that your site saved a smaller copy, those two never match, so the rebuild always declined. It has therefore never renamed one of those photos. It can now.
  • A title you chose is never overwritten by any of this. Anywhere the code decides whether to replace a title that already exists, it will only do so when your site's own records say the title came from the file name — never on a guess. A title you typed, or one your photographer embedded in the image, is left alone.

v1.6.136​

  • A row of image versions now follows the picture it belongs to. If you started making a version of one picture and then swapped that picture for a different one while the work was still running, the finished row could be offered under the new picture — and choosing from it replaced your article's picture with an unrelated one. The row now stays with the picture it was made from, both straight away and when you reopen the panel later.
  • Actions on a picture you have since deleted no longer change the article. Replacing, reverting or importing a picture that is no longer in the article used to write into it anyway and mark your work unsaved. Those now stop, and each says what actually happened — including that the site still records the version you chose, so you can put it back.

v1.6.135​

  • Error messages from the image service no longer reveal your internal network. When an image edit fails, the reason shown to reviewers comes from the image service itself, which is what makes it useful — but that text could carry your server's internal host name and port, the email address on your billing account, or your account identifier. Reviewers include people you invite from outside your organization, so those details are now removed before the message is shown, while the explanation you actually need is kept. The image service's own name is deliberately preserved, so a message still reads as what it is rather than as an anonymous address.

v1.6.134​

  • See how much image-AI credit is left, from the image card. The Modify with AI section now shows the image service's remaining balance with a Refresh button beside it — the same figure your site administrator sees — so you can tell whether there is credit to spend before pressing Generate, rather than learning it from a generation that fails. Refresh re-checks every image service at once. If a balance cannot be read you are told why, instead of being shown a misleading $0.00, because a zero would read as an empty account rather than a lookup that did not work. The balance appears only where Modify with AI is available to you.

v1.6.133​

  • A remixed picture keeps its name and description. Pictures made by remixing arrived in your media library under a made-up name with no description, losing the wording you had given the original. A remix now inherits the original's title, alt text, caption and description. One deliberate exception: a title that is nothing more than the picture's own file name is not carried over, because a file name is not a name anyone chose. That covers the file names WordPress makes up for you as well as the one you uploaded — the numbered copy when the name is already taken, the smaller copy it saves of a very large photo, the turned-the-right-way-up copy, and the copy it saves when a picture is cropped. When the title is refused this way, the new picture is named after the original's alt text, and failing that after the article it belongs to. If the article itself has no title, there is nothing left to borrow, and the picture keeps its generated name.

v1.6.132​

  • Clicking a remixed picture no longer closes the panel. Picking one from the row of versions closed the whole panel, and reopening it lost both the picture you had picked and, for a picture not yet placed in the article, sometimes the row itself. The panel now stays open, remembers your pick, and finds the row again. The message shown when a new version is ready also now names the right picture to go back to, instead of pointing at whichever one you happen to be looking at.

v1.6.131​

  • The progress bar shown while a picture is being remixed now moves. It used to sit empty at zero for the entire wait, sometimes a minute or more, because the image service only reports how far along it is for certain kinds of work and reports nothing at all for the rest. An empty bar reads as a job that has stopped. When there is no reading to show, the bar now moves steadily rather than presenting the missing answer as zero, so work in progress is distinguishable from something that has gone wrong.

v1.6.130​

  • You can now tell the image AI what the article is about. A prompt like "make the text on the screen readable" gave the AI no way to know what that text should say, because it was never told anything about the article. A new tickbox, Tell the AI what this article is about, sends the article's title and summary alongside your prompt. It is off unless you tick it, and it applies to that one generation — these AI models are editing a photograph rather than drawing a new one, so extra description is not always wanted. The row of versions still shows the prompt in your own words; the added context never appears there as something you typed.

v1.6.129​

  • Choose any picture from your media library, for article images too. Only the featured image offered this; a picture inside the article could be changed only by pasting a link to it. Both now offer Choose from library. A picture chosen this way stays properly linked to your media library — something pasting a link could never do — and brings its own alt text with it. Its caption is left as you wrote it, since that is your words rather than the picture's.
  • The row of versions no longer mislabels a picture. After changing the thumbnail to something that was not made by remixing, one of the versions still carried In the article even though the article had stopped showing it. The label now follows the picture the article is actually using.

v1.6.128​

  • Clicking a remixed picture now shows it. Picking one from the row of versions only drew a dashed outline around the thumbnail and wrote its prompt underneath — there was no larger view anywhere in the panel, so there was no way to tell whether a remix had actually fixed what you asked about, and clicking the same one again took even the outline away. A picked version now appears at full width with the prompt that produced it beneath, and clicking it again closes it. Looking is still only looking: the article changes only when you press Replace.
  • The empty progress bar no longer sits in the picture panel. It was meant to appear only while a picture was being generated, but it stayed on screen permanently.
  • "Keep text and logos exactly as they are" reads as one line again, instead of the tickbox stranding on its own line above the words.
  • "Generating…" is no longer printed twice while a picture is being made.

v1.6.127​

  • Underlined text can be un-underlined again. When an article arrived carrying underlining from its own original styling rather than from the review editor, selecting the words and pressing Underline did nothing at all — and the button lit up as though it had worked, so the only way out was to delete the text and retype it. Pressing Underline now removes it, on a whole sentence or just part of one, and on a link too. Other styling on the same words, such as color, is left exactly as it was.

v1.6.126​

  • Two people working on the same article's pictures no longer undo each other. A version you keep, a replacement someone else makes and a version arriving from a finishing remix could land on top of one another, so one of the changes quietly vanished — and a version that had just been tidied away could reappear in the row. Each change is now applied to what the picture panel actually holds at that moment, and if it cannot be applied you are told, instead of being shown a row of thumbnails that does not match what was saved.
  • Pressing Replace on the picture your article is already showing is refused, even when a colleague put it there a moment earlier. Before, that could be recorded in the log as a swap nobody made.
  • Delete recognizes more of the places a picture can be in use. Alongside a page builder's own layout, it now also finds a picture referred to by nothing but its ID — in another page's layout, and in a gallery or shortcode in another article's text — so a picture something else is displaying can no longer be deleted by mistake.
  • A picture used in two places in the same article is protected from both. Deleting a version through one of them no longer destroys what the other is still listing.
  • A delete is refused, not allowed, when the check cannot be completed. If the article itself cannot be read, or the search for other uses runs out of room, the answer is now "this picture may be in use". When a busy site keeps reaching that limit, it is written to the debug log, so the reason a Delete never seems to work is visible rather than silent.
  • A remix that is turned down no longer leaves anything behind. A picture fetched for a generation you were not permitted to run is removed again, instead of sitting unused in your media library with your article quietly claiming it.

v1.6.125​

  • Remixing a picture now keeps every version you make. They line up as a row of thumbnails in the image panel — the picture the article arrived with first, then each version in the order you made them — so you can compare them instead of losing the last one each time.
  • Generating no longer changes your article. Press Replace on the version you want, whenever you want, including on the original to put things back exactly as they were — the only one you cannot pick is the version the article is already showing, which is refused rather than recorded as a change nobody made.
  • Versions you do not choose are tidied out of your media library for you, oldest first, so a long session of experimenting does not leave clutter behind. Keep holds on to one you want to save, and the version you just made is never tidied away.
  • A reviewer who is not allowed to change the featured image can no longer change it by remixing. Three of the image actions decided the permission from what the request claimed rather than from the picture it actually named, so the restriction could be stepped around in one direction or the other. All three now work it out from the picture, the same way.
  • A remix of a picture in the article body stays with the body picture, even when the same photo is also the featured image. Its versions used to be filed under the featured image, so pressing Replace moved the picture at the top of the article and left the one you were looking at untouched.
  • Delete removes a version for good, after asking you to confirm. It refuses — and says which reason applies — when the picture is the original, the one your article is showing, one another page is also using, or one a remix is still running on. That in-use check now recognizes pictures placed by a page builder, which name an image by its address rather than by an ID, so a picture another page is displaying can no longer be deleted by mistake. Notes left on a deleted version move to the picture your article is showing, rather than being left pointing at something nobody can see.

v1.6.124​

  • The robots panel now tells you when the file being served lists no sitemap at all, so a missing line is visible instead of silent.

v1.6.123​

  • The robots panel now offers the AI sitemap line only when that address is actually being served, instead of suggesting one that would lead nowhere.

v1.6.122​

  • A failed remix now says why. When a picture cannot be modified, the portal names the actual cause — the content policy refused the prompt, the account is out of credit, the source image could not be fetched — instead of showing one generic sentence for roughly eleven different failures.
  • A remix in progress shows a real progress bar, and can be stopped. Previously a run that went wrong left the picture locked for two minutes with a spinner and no way out.
  • Asking for a second remix while one is running now tells you which job it is refusing for, and offers to stop that one.
  • Finished remix records no longer build up on a picture without limit.

v1.6.121​

  • The Review Portal is named consistently everywhere it appears. On the Posts list, in the admin bar, in the settings descriptions, on the portal page itself, and in the button in every review notification email. It had been written several different ways.
  • The documentation matches the product. The longer "Review & Publish Portal" wording is gone; the docs now use the one name the interface actually shows.

v1.6.120​

  • "Runs" is now "Log", and it holds two records instead of one. The view still lists every pipeline run exactly as before. Underneath it, a new Editorial activity card shows what people did to your articles — published, reverted to draft, changes requested, notes raised and resolved, schedule changes, image work, and the refusals in between. Newest first, with who did it and when.
  • Every entry keeps the name the person had at the time, so renaming or removing an account later never rewrites the record of what they did.
  • Filter by person, or by what happened. Click a name or an event on any row and the Editorial activity card narrows to it — the runs list above is left as it was — and the choice follows you as you page. The two cards also page independently, so moving through the activity leaves the runs where they were.
  • Every filter that is on now says so. A summary line near the top of the view names each one — including the ones you set by clicking a row rather than a pill — and lets you drop them one at a time or clear the lot. Until now a filter could narrow a list with nothing on screen to undo it.
  • You can now see whether a review email was ever acted on. The first time somebody opens an article's review portal appears on the Editorial activity feed. Only that first open is listed — later visits by the same person deliberately add nothing, so a reviewer reloading the page never fills the feed with repeats.
  • "View full log" works. The button in a run's stage drawer had never done anything. It now reopens the view narrowed to that one article, giving you its whole history — runs and editorial activity together. A run that produced no article has nothing to narrow by, so the button is switched off on those rows.
  • Setup mode explains itself. Setup records no new pipeline runs but does record editorial activity, so the runs list stands still above a filling activity list — empty, on a site that has never left Setup. Nothing already recorded is removed. The card now says so for as long as Setup is on, instead of leaving the screen looking broken.

v1.6.119​

  • The theme-wiring reading no longer leaves an empty heading behind. With Crop a copy for listings switched off, "Where cards use this copy" printed its heading over an empty space — the one row on that card that said nothing at all, while every other control beside it at least grayed out to show it was off. The reading is now hidden entirely while the cropped copy is off, and comes back when you switch it on.
  • Switching the cropped copy off clears the reading immediately. The reading describes what was saved, so leaving it on screen after the switch went off meant a line saying cards were using the cropped copy sitting beside a row of freshly grayed controls. It now follows the switch as you click it.

v1.6.118​

  • "Clear all run history" is now "Clear all history" — and there is now more for it to clear. The button on Content Pipelines → Runs empties everything that view records, and as of this release that includes editorial activity as well as pipeline runs. The button and its confirmation both say so before you agree. There is no undo, and no way to clear only one of the two.
  • Editorial actions are now recorded alongside pipeline runs. Edits, notes, publishes, schedules and the refusals in between are kept with the run history, so a later update can show both on one screen. Apart from the renamed button, nothing on the page looks different yet.
  • Editorial activity is kept during Setup too. Pipeline runs are still held back while you configure a content source, but the review portal is fully usable in Setup, so the work people do there is no longer discarded.
  • Run history and editorial history each keep their own limit, so a busy week of editing can never push older pipeline runs out of the list. When the editorial history reaches its limit, routine autosaves are dropped first — the records of what was actually decided (published, scheduled, changes requested, a publish refused) are the last to go.

v1.6.116​

  • The publish confirmation now says how many notes are still unresolved. Approving or scheduling an article is the moment somebody walks away from it, and an open note is the thing nobody comes back to. The confirmation names the count before you commit — and that is all it does: notes have never blocked publishing and still do not, so you can read it and confirm straight past.
  • The count is the Feedback panel's own. It reads the list you are looking at rather than asking the server a second time, so resolving a note and pressing Publish reflects it immediately, and the sentence can never contradict the panel beside it.
  • The formatting toolbar stays put as you scroll. On a long article it used to scroll off the top, so making a heading halfway down meant traveling back up, applying it, and then finding your place again. It now pins below the top bar and follows you down the article. On phone-sized screens it still scrolls away with the article — pinned there it would take up more of the screen than the article itself.

v1.6.115​

  • Notify has moved to the article. The button used to sit inside the panel for one picture, while the email it sent had always covered every note on the whole article — so its position said one thing and its behavior did another. It now sits in the action bar beside Request changes, where it belongs. Nothing about the send changed; only the place you press it.
  • Notify takes a message of your own. Choose who should hear about it, type a note if you want to, and send. The message is optional in both directions: you can send the notes with no message, or a message with no notes — a hand-off at the end of your shift, for example.
  • Your message is kept with the article. It joins the Feedback panel, so the next person to open the article can see the hand-off happened rather than taking your word for it in an email they may never have seen.
  • The email now reports both directions. As well as the notes still open, it lists the ones dealt with since that person was last told — so somebody who heard about three problems last week can see that two are now fixed, instead of receiving the same three again.
  • Notify still saves the note you are looking at first, and a failed save still cancels the send. Pressing it no longer closes the image panel out from under you, which had quietly defeated that safeguard.
  • Every note can be resolved now, change requests included. Only notes about a picture could be marked handled before; a change request had no way to be closed at all. Anyone with access can resolve or reopen any note in the Feedback panel.
  • Resolving the last change request clears the queue flag with it. The review queue shows a Changes requested flag beside a count of outstanding notes, and the two were read from different places — so resolving a change request cleared the count and left the flag lit, and the same draft read as handled and not handled at once. Reopening one lights it again, and a second request still waiting keeps it lit.
  • Administrators can be told about an article's notes. They can already open every draft, so naming one grants them nothing — but until now a reviewer literally could not send their notes to an administrator who was not listed on the article. Everybody else who does not already have access is still refused.
  • The Image feedback email setting is now called Reviewer notes, since the control it governs covers the whole article.

v1.6.114​

  • Notes on a picture now lead its panel. Writing a note about the image is what most people open that panel to do, and it used to sit at the bottom, under three fields that are already correct on nearly every arriving picture. It now comes first, on a panel of its own.
  • The notes heading counts what is still unresolved on that picture, so you can tell at a glance whether it has something outstanding without reading the list. A picture with nothing outstanding says nothing at all.
  • The image link, alt text and caption are now a collapsed "Image details" section. Open it once and it stays open as you move from picture to picture, so working through a batch of images costs one click rather than one per image.
  • Nothing is removed by that — those three fields are one click away rather than in front of you. The alt text and the caption are still edited in this panel and nowhere else, and they still save the same way. The section opens itself whenever the panel has something to say back about one of those fields, such as asking you to describe a replacement image or reporting that a change to the picture failed. See Images inside the article.

v1.6.113​

  • A note you type about an image is no longer destroyed. The box had no memory at all: closing the popover, or clicking a second picture, discarded whatever was in it with no warning and nothing to recover it from. Text now waits on the picture it was written about until you save it — or clear it yourself.
  • The box says when a note is unsaved, and the browser warns before you leave the page with one outstanding. A note is stored by its own Save note button and never rides along with a draft save, so nothing else was ever going to catch it.
  • A started note follows its picture. Import an image, replace it, or change it with AI, and the text you were writing is still there against the new version — including when the change finishes after you have closed the panel. If the picture is removed from the article, the note goes with it and the page stops warning you about work it can no longer show you. Point two pictures at the same file and their started notes are joined rather than one being dropped, with a line marking the text that was carried over.
  • Notify saves the note you are looking at before it sends. Otherwise the email listing "the notes on this article" went out without the one you had just written. If that save fails, the send is cancelled and says so rather than going out incomplete. Pressing Save note and then Notify now files the note once instead of twice, and the confirmation counts the notes still waiting on other pictures accurately.

v1.6.112​

  • Resolve and reopen a note from the Feedback panel. An image note could only be marked handled from inside the picture's own panel, so clearing a list of notes meant hunting down every photo they were about — while the Feedback panel already dimmed the ones that were resolved, with no way to get them there or bring them back. Each image note in the panel now carries its own Resolve link, and Reopen once it is resolved. See The Feedback panel.
  • The two places agree. Resolving in the picture panel updates the Feedback panel and the other way round, so a note is never shown as open in one and handled in the other.
  • Change requests about the article itself are unchanged. Those are the record of the Request-changes conversation and do not carry the link.
  • A resolve that does not go through now says so. The link used to gray for an instant and come back reading exactly what it read before, whether the site had refused the change, the note was already gone, or the connection had dropped. The panel now says which it was.

v1.6.111​

  • Changing an image with AI no longer reshapes it. Nothing told the image model what shape the picture was, so it applied its own default of widescreen — a square or portrait photo came back cropped. It is now sent the picture's own proportions.
  • The model list names each model, and marks the ones that keep text and logos. It used to show raw technical identifiers, and the model chosen by default was one of the worst at preserving detail. Garbled signage and labels were largely a consequence of that choice being invisible.
  • New "Keep text and logos exactly as they are" option, on by default, under Content Pipelines → Review Portal → Modify images with AI. A reviewer can turn it off for one image when they want a genuine reinterpretation rather than an edit. See Changing an image with AI.
  • The source picture is sent at higher resolution. It was being sent a downscaled, recompressed copy — which is what destroys small text before the model has even started.
  • Quality now offers Standard, High and Ultra. The old HD setting was not a value the image service recognized, so it was quietly ignored — most models treated it as Standard — and the level you picked was never the one applied.
  • Strength is shown only where it does something — it is ignored by every model but one, while the description beside it claimed otherwise.

v1.6.110​

  • A note containing a backslash can be deleted again. Writing a Windows path or a network share into a note made it impossible to retract — by its author or by an administrator.
  • A note follows its picture through every change. Previously only the one-at-a-time Import button carried it across; importing on publish, remixing an image with AI, or reverting a remix all left the note describing a picture the article no longer showed.
  • "Sent" now means sent to the person you chose. It used to appear on every note as soon as anybody was notified, so reviewers stopped pressing Notify and a second colleague heard nothing.
  • The reviewer queue and the calendar card agree. Both now count only notes nobody has resolved.

v1.6.109​

  • An image-feedback email now credits the person who wrote each note. It previously headed the message with whoever pressed Notify — who is often not the author, since the send covers every note on the article.
  • Each person you notify gets their own copy. Telling the photographer and then the editor about the same notes now works; previously the first send consumed them for everyone.
  • A note about a picture hosted elsewhere survives importing that picture. Bringing the image onto your own site used to lose the note that said it needed bringing.
  • Notes stay attached to the picture you were looking at — editing the link box, or clicking another image while a note is saving, no longer moves it.
  • Resolving a note now tells you when it fails, notes show whether they have already been sent, and a colleague added to the article mid-session can be notified straight away.

v1.6.108​

  • Leave a note about a picture. Click any image in a draft — or the featured image — and the details panel now has a Notes on this image box. Saving a note emails nobody: it is attached to that picture for everyone who can open the article, which is what most notes are for.
  • One email, however many notes. When you do want somebody to know, pick a name and press Notify. That sends a single email covering every note not yet sent, so working through six photos produces one message rather than six. See Notes on an image.
  • Only people already on the article can be picked. Telling somebody else would also be giving them access to an unpublished draft, which is what Send to a colleague is for.
  • Anyone can resolve a note, not only whoever wrote it — the person who fixes the picture is usually the one who knows it is handled. Resolved notes stay in the record and can be reopened, and notes never block publishing.
  • A new Image feedback setting under Email notifications turns those emails off; the Notify control then disappears rather than accepting a press that would go nowhere.

v1.6.107​

  • The review portal saves more sensibly while you write. It was posting the entire article after every keystroke. It now waits until you pause for a moment, and — new — saves at least once every few seconds even if you never pause, so a long uninterrupted stretch of writing is checkpointed rather than sitting unsaved in the browser.

v1.6.106​

  • Pasting from Microsoft Word keeps its formatting. Word marks bold text in a way the previous release read backwards, so bold was being stripped on paste — and text Word had only hinted at was arriving bold. Both directions are fixed.
  • Marking several paragraphs as inline code no longer breaks them apart. Selecting across a paragraph boundary and clicking Inline code previously merged and duplicated the paragraphs; it now marks each one cleanly and leaves no stray marks in the gaps.
  • The formatting buttons no longer act on the wrong text after you revert images. Replacing the article's pictures used to leave the toolbar pointed at the top of the article; it now waits for you to select something again, and Undo keeps working throughout.
  • A picture pasted from a page that loads images lazily arrives as the real picture, rather than the blank placeholder that page was showing while it loaded.
  • Screen readers get an accurate description of the toolbar — buttons that are not on/off toggles no longer announce themselves as unpressed toggles, and the link button reports whether its picker is open.

v1.6.105​

  • The review portal's formatting buttons now work. Bold, italic, underline, headings, lists and the rest act on the text you have selected. Previously, pressing a button moved the cursor and did nothing else — the button took focus away from the article before the formatting could be applied.
  • A button shows you what is already applied. Select some text and the matching buttons light up, so you can tell at a glance whether a word is bold and click again to remove it. This is what makes it possible to strip formatting off text that arrived from a content source, rather than guessing.
  • A new setting chooses how much formatting the portal offers. Under Content Pipelines → Review Portal → Formatting controls: Minimal for emphasis only, Editorial (the default) for links, lists and headings, or Full to add block quotes, inline code, superscript, subscript and alignment. See Formatting and links.
  • Pasting from Word or Google Docs is cleaned up. The words come through, and so does the formatting your chosen level allows — but that document's own fonts, colors and spacing no longer travel into the article. This applies only to what you paste; formatting already in the article is never changed by this setting.

v1.6.104​

  • Publishing reminders and automatic rescheduling for the Review Portal. Reviewers and authors can now get a reminder email as an article's publishing time approaches, and — if a reserved time is missed too many times — a separate email saying the article needs a new one. A new Auto-defer stale drafts option moves a missed reservation forward on its own first, so a slipped review doesn't quietly leave an article pointing at a time that has already gone by. Nothing is ever published late either way: a reserved article stays a draft until somebody approves it. Both are off by default; see Rescheduling a slot nobody reviewed in time and Email notifications.
  • Who those two new emails reach. The reminder and the auto-defer notice go to the article's author and the reviewers it was already sent to — not to standing Default CCs. On a site that relies on a standing CC list, these two emails therefore reach fewer people than the ones sent when a draft first arrives. Everyone on an article's own list can open it; anybody else would get a link that asks them to sign in and then turns them away.
  • The reminder says which articles still need approving. Each row is marked either Publishing — already scheduled, going out on its own — or Planned, meaning it is still a draft and somebody has to approve it before that time means anything.
  • Cadence warnings now catch more collisions. The publishing-rhythm check that warns about a crowded day now also counts a reviewer's own chosen publishing time, not just already-reserved slots and scheduled articles — and it runs from the article's own Schedule control when you approve, not only from the calendar.
  • Notification emails can reach more addresses. Review Portal emails can now also be sent to a reviewer's alternate work or personal email address on file, in addition to their WordPress account email.
  • The reviewer queue and expired-link pages now carry your branding, matching the rest of the Review Portal.

v1.6.103​

  • The last dates that still followed the site's own display setting now match the rest. The Article date row in review emails and the date on the content calendar's article card were the two remaining hold-outs, so a single email could show two different date styles in one table. Every date a reviewer sees is now written the same way, wherever it appears.

v1.6.102​

  • Dates in the review queue now read the same way as the ones in your emails. The queue was rendering dates using the site's own display setting, so the same article could be "2 September 2026" on the queue and "Wednesday, September 2, 2026" in the review email it arrived with. Both now spell out the weekday, which is the part that tells you whether a deadline is tomorrow or next week. A scheduled article's time reads as "1:00pm" rather than "13:00".

v1.6.101​

  • A publishing time you set on a draft now shows up on the calendar. Ticking Schedule, choosing a time and pressing Save draft stored your choice — the portal filled the field back in every time you reopened the article — but the calendar never knew about it, so the article stayed under Unscheduled drafts and the day you picked was drawn empty. It now appears on that day, in the provisional style, and leaves the unscheduled list. Nothing about approval changes: the article is still a draft and an approver still has to publish it.
  • The portal no longer credits your publishing cadence for a time you chose yourself. The note beside the date said "Slot reserved by your cadence" whichever way the time got there. It now says which it was, and the calendar's article card makes the same distinction — Planned for a time a person named, Slot held for one the cadence reserved.
  • Save draft moved next to the approve button and has its own color. At the far left of the bar it was separated from the action most reviewers take next by every toggle in between, and being white it read as one more of those toggles rather than a button.

v1.6.100​

  • The calendar on the review page is wider, and unscheduled drafts moved underneath it. The month grid used to share a narrow column with a side panel listing drafts that have no date, which left each day too small to show anything but a clock time. The grid now takes the full width and the undated drafts sit in a strip below it, so a day can show which article is going out as well as when. The strip appears only when something is actually waiting.
  • Clock times read as "3:08pm" rather than "15:08". The calendar used to show whatever 24-hour or 12-hour format the site itself was set to. Reviewers do not see that setting, so times are now always written the plain way, matching the review emails.
  • A review email now spells out the weekday of a held publishing slot — "Thursday, September 3, 2026 @ 9:00am". A held slot is a deadline you are being asked to act on, and a date on its own does not tell you whether that is tomorrow or next week.

v1.6.099​

  • Rescheduling no longer fails while a save is running. The calendar refuses to run two writes at once on the same article, which is right — but it used to report "Reschedule failed" without contacting the site at all. Since typing arms an automatic save, editing an article and then moving it on the calendar could lose the change to an error about a request that was never sent. The write now waits for the save to finish and then goes through.
  • Reviewers who cannot publish can now set a preferred time. Choosing a date for your own draft is a note about when you would like it to go out, not a decision to publish it — so it no longer needs publish permission. The article stays a draft, and an approver still has to publish it; when they do, your time is the one it uses. Moving an article that is already scheduled still needs publish permission, because that changes when something approved goes live.

v1.6.098​

  • A publishing time you set on a draft now saves. Adjusting the time and clicking Save used to discard it silently — the panel said "Saved", and the next time you opened the article the field had gone back to the time reserved for it automatically. The time was only ever sent when you pressed Schedule. It is now saved like any other field.
  • Your own time beats the automatic one. If the publishing cadence reserved a slot for an article and you choose a different time, yours is what the article publishes at. Clearing the box hands it back to the reserved slot.
  • The schedule field now behaves like the rest of the form — it autosaves, it counts toward "Unsaved changes", and you are warned before navigating away with it unsaved.
  • The Publishing cadence card now tells you when a value was not accepted. A time box left half-filled reports an empty value, which the site declines to store; it used to keep the previous time and still say "Saved", which read as your edit reverting. Incomplete values are now caught before saving, and anything the server declines is named in the message.
  • Fixed: saving the Content Pipelines settings could discard unrelated settings on some sites.
  • Fixed: publishing with a malformed schedule value published the article immediately instead of refusing the request.

v1.6.097​

  • The review queue page — the one the Open my review queue button and your review emails link to — now has a Calendar button of its own. Until now the calendar lived only inside an individual article's review page, so seeing what else was coming up meant opening an article you may not have wanted to work on.
  • It is the same calendar, with the same color key and the same drag-to-reschedule behavior, and it respects the same permissions: you can only move articles you are allowed to edit.
  • The button appears only for people whose account can see the calendar. Signing in to the queue page as an ordinary site member shows no calendar rather than a button that fails when clicked.

v1.6.096​

  • Articles holding a reserved publishing slot now appear on the content calendar on the day they are holding. Until now they sat in the Unscheduled drafts list, dated by the day they arrived, so the moment the cadence had set aside for them was invisible — the only way to find it was to try scheduling something else into that day and read the warning.
  • A held article is drawn in its own color with a dashed edge, deliberately distinct from a scheduled one: a hold is waiting for your approval, and nothing publishes on its own.
  • Drag a held article to a different day to turn its hold into a real schedule. It keeps the time it was holding, and the usual cadence warning still applies.
  • A held article whose moment has already passed stays in Unscheduled drafts, because approving it then simply publishes it.
  • The calendar now shows a key explaining what each color means, on both the admin calendar and the one in the review portal.

v1.6.095​

  • Review notification emails now send the article's photo along with the message instead of linking to it. Some mail apps will not load a linked image, which left a broken-image placeholder where the photo should be. Sending the picture with the message removes that failure.
  • Trade-off worth knowing: forwarding or replying to a review email no longer carries the photo across in most mail apps, so whoever receives that forward sees a placeholder where the picture was. The Edit/View this article button still opens the full draft.
  • An unusually large photo is still sent as a link, so a message never becomes needlessly heavy.

v1.6.094​

  • Fixed a path where importing a saved configuration could drop the on/off state of the newer integrations. The import now always reads the current integration list rather than an internal copy that had fallen behind.
  • Internal maintenance: shared plugin-detection logic and a new build check that keeps the integration registries in step, so an integration can no longer be added in one place and forgotten in another.

v1.6.093​

  • Security: REST API restriction now identifies a request by the route WordPress will actually serve, rather than by the address the request was sent to. A request could previously present an allowed address while asking for a different, restricted endpoint — the restriction judged the address and let it through. The endpoint's own permission checks still applied, so this bypassed the pre-emptive block rather than granting access, but the restriction now holds on its own.
  • A request whose target cannot be determined is refused rather than allowed.
  • No configuration changes are needed, and no legitimate request shape is affected.

v1.6.092​

  • SyteHero is now a recognized integration, with its own tile alongside every other plugin SyteOps knows about.
  • SyteHero's consent and attribution endpoints keep working whenever SyteHero is installed, even with REST API restriction turned on. Previously they were blocked, and because SyteHero stops tracking when it cannot confirm a visitor's privacy rules, that quietly switched off all of its front-end analytics.
  • Only those two public endpoints are opened. SyteHero's settings, backup, slide and sales endpoints stay behind the restriction.
  • Because a blocked endpoint is invisible until someone notices the missing data, this does not wait on the new toggle: activate SyteHero and the endpoints work.

v1.6.091​

  • Articles arriving from a content source can now be given the next open slot in your publishing schedule, so posts space themselves out instead of arriving in clusters. Off by default; turn it on under Publishing cadence.
  • A source set to publish on arrival is scheduled for its slot instead of going live immediately.
  • The review email shows the reserved slot, and the reviewer opens the article with that date already filled in — they can still change it or publish right away.
  • The scheduled confirmation email now says exactly when the article goes live.

v1.6.090​

  • Notification emails now follow your dark mode setting instead of staying stubbornly light. Headings, cards, status pills, detail tables and the footer all shift together, so nothing is left as an unreadable bright slab. Your logo keeps its light plate so it stays legible whatever it is designed for.
  • Article photos in notification emails are no longer attached to the message, so they still appear when you forward an email or reply to one. Previously every picture collapsed to a filename placeholder, because no mail app carries attachments into a reply.
  • Notification emails are dramatically smaller as a result, which also stops longer ones being cut short by Gmail's size limit. Your logo is still attached, so it shows even in apps that block remote images.

v1.6.089​

  • Review Portal: a live article can now be taken back to draft from the portal. The button appears for reviewers who can publish, and the article keeps its original publication date and address, so putting it back restores it rather than re-launching it.
  • Review Portal: taking an article down also cancels any social posts scheduled for it, so nothing broadcasts a link to an article that is no longer there. Posts already sent are not recalled, and posts set to go out "on publish" are kept for when the article goes back up.
  • Review Portal: an article published with private visibility comes back private when you republish it straight away, instead of quietly becoming public.

v1.6.088​

  • Content Pipelines: the Coverage shortcut now sits before Calendar in the quick navigation, grouping it with the analysis views it belongs to.

v1.6.087​

  • Review emails: the Edit/View this article and See all my reviews buttons now sit directly under the article title and summary, instead of below the full-width photo. On a phone the action was previously pushed off the first screen by the image.

v1.6.086​

  • llms.txt — a held publication no longer fails in silence. When you edit an article's answers after it is published, SyteOps rebuilds the AI files in the background rather than through a pipeline run — so there is no row in the Runs table to look at. If LLMS Amplifier was holding publication until its headless settings are confirmed, those background rebuilds did nothing at all, and nothing anywhere said so: the files simply went stale. SyteOps now reports the hold as a note on the LLMS Amplifier settings screen, counting how many rebuilds it has attempted, and clears the note on the first one that completes. It deliberately does not keep retrying — a hold is cleared by confirming the settings, and retrying every couple of minutes would rebuild your whole site for nothing.

v1.6.085​

  • llms.txt — you are told when LLMS Amplifier moves ahead of us. SyteOps is checked against a specific range of LLMS Amplifier versions, and until now that range was recorded only in code comments nobody could see. If you update LLMS Amplifier past it, a note now appears in its own settings screen saying so. Nothing is switched off and nothing stops working — a version update has never removed anything SyteOps relies on. The note exists so that if the answer-engine files or the robots.txt guidance ever do look wrong, you know which detail to mention when reporting it. Do not delay an LLMS Amplifier update because of it.

v1.6.084​

  • llms.txt — the robots.txt advice no longer withholds a line you owe. A newer LLMS Amplifier decides each robots.txt line separately, so a site that publishes its AI index but not its sitemap gets the LLMS-Index: line and nothing else. SyteOps assumed the two always travel together and, on such a site, told you nothing was missing. It now checks each line independently. Sites with the sitemap turned on are unaffected — the advice there was already correct.
  • Content Pipelines — a held publication says so. When LLMS Amplifier pauses publishing until you verify a setting, it does no work and schedules no retry. That arrived as a plain failure, so the pipeline showed an error on every publish that retrying could never clear and that named the wrong problem. It now shows as Held, in amber, with the reason — so you know a person has to act, not a machine.
  • Content Pipelines — settings written to LLMS Amplifier are confirmed. A newer LLMS Amplifier can decline a settings change while another process is saving. SyteOps assumed its writes succeeded, so a declined change was reported as saved and could also trigger repeated rebuilds. Writes are now read back and a declined one is reported, with a suggestion to try again in a moment.

v1.6.083​

  • Review Portal — reviewers added later now get the email. The reviewer list for an article was fixed at the moment it arrived, so anyone you added to your Default reviewers or Default CC reviewers afterwards silently received none of that article's notifications and could not open it. Notifications for articles still awaiting review now use your current lists. Two limits are deliberate: articles that have already been published are never changed, so adding someone never hands them your published back catalog; and removing someone does not revoke access to drafts they were already assigned to.

v1.6.082​

  • Review Portal — open it from the live article. The Open review portal link now also appears in the WordPress toolbar while you are signed in and reading a published post on your own site. Previously it only appeared while editing the post, so spotting something wrong on the live page meant navigating back to the editor first. Who can see the link is unchanged — it still only appears for people who can already edit that post.

v1.6.081​

  • Review Portal — sign-in fixed. Opening a review link from an email and signing in could fail with "cookies are blocked or not supported by your browser", even when cookies were switched on. It affected any browser that had not already visited the WordPress sign-in page recently, which is why it appeared to strike some people and not others. The sign-in card now prepares the check correctly, so the message only appears when cookies really are blocked.

v1.6.080​

  • Content Pipelines — heading anchors. A new per-source option gives each heading in an ingested article a short, predictable anchor name ("What is DSCR?" becomes what-is-dscr), so a table-of-contents widget links to stable, shareable anchors instead of inventing its own. Repeated headings get -2, -3; a heading that already has a name keeps it. Applied when the page is displayed — your stored article is never changed, so switching it off leaves nothing behind.
  • The FAQ block SyteOps adds to an article now has a stable anchor of its own, so a page showing two tables of contents no longer produces conflicting links.

v1.6.079​

  • Added: A content source can hide a table of contents that the sending app embedded in the article body, for sites that render their own.
  • Added: A content source can hide an FAQ section that the sending app embedded in the article body, for sites that render their own. The section is recognized whether it is headed "Frequently asked questions" (any level) or the shorter "FAQ"/"FAQs" (top-level headings only).
  • Both settings default to off and apply only to the article being viewed. Nothing about how existing content renders changes until a content source opts in.

v1.6.078​

  • Fixed: Default author is used when the mapped webhook author is blank or does not match a WordPress user.
  • Added: Reviewers can change the post author in Review and Publish.

v1.6.077​

  • Fixed: New-draft review emails now go to everyone in Default reviewers and Default CC reviewers when the content source does not set its own list.
  • Changed: Article date on review emails uses 12-hour AM/PM in the site timezone.

v1.6.076​

  • Added: Export a content source setup and import it on another site.
  • Added: Import issues a new webhook secret; secrets are never in the file.

v1.6.075​

  • Fixed: Checking a content source ingest URL with GET or HEAD no longer looks like the endpoint is missing.
  • Changed: The Cloudflare skip for that ingest path should match the path for any method, not POST or a specific signature header.

v1.6.074​

  • Internal improvements and maintenance

v1.6.073​

  • Added: WordPress avatars use the profile photo from the associated user slot when one is set.

v1.6.072​

  • Changed: Modify with AI sits under Caption in image details.
  • Changed: The Strength hint spans the panel instead of wrapping under the Strength field.

v1.6.071​

  • Changed: Modify with AI now shows Model, Quality, and Strength labels.
  • Added: Operators can hide Modify with AI from specific reviewers when the companion image plugin is active.

v1.6.070​

  • Added: Reviewers can modify a picture in the review editor with AI when the companion image plugin is installed.
  • Added: Incoming articles can map image prompts so Generate is pre-filled; the original picture is kept for Revert.

v1.6.069​

  • Added: Command-click or Ctrl-click a link in a review article to open it in a new tab without leaving the editor.

v1.6.068​

  • Fixed: incomplete answers cut at the old 300-character limit are no longer listed on public question feeds.
  • Changed: Coverage analysis can replace those leftover answers with a new draft.

v1.6.067​

  • Changed: Coverage metric columns are centered from GEO analysis onward.

v1.6.066​

  • Fixed: titles in colored window headers stay white and readable, including larger heading sizes.

v1.6.065​

  • Fixed: FAQ questions stay on the article page, not in RSS or inside other posts on the same page.
  • Fixed: complete answers that do not end with a period still publish, and declining Coverage waits for the run lock to release.

v1.6.064​

  • Added: Coverage can mark existing answers as reviewed in a batch without re-running AI.

v1.6.063​

  • Added: articles with FAQ structured data now also show those questions and answers on the page.
  • Changed: duplicate questions that share the same answer are listed once in FAQ structured data and on the page.

v1.6.062​

  • Fixed: AI listing descriptions no longer append an internal field dump.

v1.6.061​

  • Fixed: newest published articles stay in the advertised AI index FAQ instead of dropping off the 100-question cap.
  • Fixed: incomplete mid-word answers are no longer listed on public question feeds.

v1.6.060​

  • Added: a View Live jump next to Edit in WordPress in the review portal. It says View Preview while the post is still a draft or scheduled.
  • Changed: lists and quoted blocks in the review portal have clearer spacing above, below, and between items.

v1.6.059​

  • Fixed: review portal answers are no longer cut off at 300 characters.
  • Changed: answers can be up to 2000 characters and are never truncated.
  • Note: answers that were already cut off stay that way until you edit them or tap Draft answer again.

v1.6.058​

  • Changed: on the article coverage screen, answers waiting for review now say they need approval (or needs approval when there is only one).
  • Changed: article titles on the coverage screen open the review portal instead of the WordPress editor.

v1.6.057​

  • Fixed: the Usual publishing time field showed only a clock icon with no visible time. The time you set is now readable in the field.
  • Fixed: the article coverage screen reads correctly — filters are grouped under headings, table headings line up with the columns they describe, the row checkboxes and column headings are labeled for screen readers, and the list now tells you how many articles you are viewing.

v1.6.056​

  • Added: describe your publishing rhythm once — which days you publish on, your usual time, the most articles you want in a single day, and the smallest gap you want between two of them.
  • Added: the content calendar now warns you when a date breaks that rhythm. It says what the problem is, names any articles already booked nearby, and offers the next date and time that fits. (Choosing a day you do not normally publish on is flagged on its own, with nothing to name.)
  • Added: the warning offers Use suggested time and Schedule anyway. It is advice, never a block — every date you could schedule before, you still can, and if the check itself cannot run the schedule simply goes through.
  • Added: the same check runs when you drag an article onto a day, where it appears as a short confirmation instead of a panel.
  • Note: cadence warnings are off until someone turns them on, in the Publishing cadence card on the Content Pipelines screen.

v1.6.055​

  • Added: a new Coverage view on the Content Pipelines screen lists every article the answer engines describe, alongside what has actually been run against it — the content that predates your pipeline included.
  • Added: each row shows whether the answer-engine analysis has never run, is stale, is current, or failed, plus the article's meta description, SEO title, focus keyword, and how many of its answers are still waiting for review.
  • Added: filter the list by any of those states, or by the gap you are chasing — answers awaiting review, no meta description, no focus keyword, no SEO title — and optionally include drafts and scheduled posts.
  • Added: select articles and analyze them together, up to 25 per run. Before anything is spent, a confirmation names the AI provider, the model and the per-article token ceiling, and reminds you that the "waiting for review" count will rise, because new answers are held back until someone checks them.
  • Improved: articles someone currently has open, and articles whose exact current text already failed, are skipped with the reason shown. Editing the article makes it eligible again.
  • Improved: every bulk run is recorded as one entry in the Runs list under a new Coverage source filter, with how many articles were analyzed, failed or skipped and which model was billed.

v1.6.054​

  • Changed: the questions and answers the AI writes for an article are now published to your answer-engine surfaces only after someone has ticked answers reviewed for that article. Before this, four of the five surfaces published them as soon as the analysis finished. This covers the per-article blocks in llms.txt, the site-wide questions section, FAQ structured data, the questions feed, and the answer-engine index.
  • Added: the Answer-engine publishing card now shows how many articles have answers waiting to be checked. If LLMS Amplifier is installed, its own health panel shows the same count.
  • Improved: ticking answers reviewed rebuilds your answer-engine files on its own, so the answers appear without any further step — and un-ticking it removes them again.
  • Improved: if an answer changes after it was checked — for example because the analysis was re-run — that article returns to waiting for review. A tick only ever covers the exact wording it was given for.

v1.6.053​

  • Fixed: the answer-engine setup review can be re-opened at any time from the Review answer-engine setup button. It previously disappeared once every issue was resolved, so on a correctly configured site the documented button was simply absent — indistinguishable from the settings panel failing to load.
  • Improved: opening the review when nothing is wrong now tells you so, rather than showing an empty dialog.

v1.6.052​

  • Added: a setup review appears when answer-engine publishing is switched on. It separates what SyteOps has already handled for you from what still needs your say-so, and you can re-open it any time from the Answer-engine publishing card.

v1.6.051​

  • Added: SyteOps can add the answer-engine discovery lines to your SEO plugin's robots file for you — one click, and a one-click undo. Your own crawl rules are never changed.
  • Added: those lines are removed automatically if you switch off the feature they point at, so you are never left advertising a file that is no longer published.
  • Added: a warning when one of your own crawl rules blocks a file the discovery lines point at.
  • Improved: robots.txt is cleared from your CDN cache after a change, and you are told when it could not be.

v1.6.050​

  • Internal improvements and maintenance.

v1.6.049​

  • Fixed: Some SEO plugins serve your site's robots.txt file themselves, and because of when that runs it replaces the version WordPress builds — silently dropping the lines that tell AI crawlers where to find your answer-engine files. SyteOps now spots this and shows you the exact lines that are missing, along with the screen to add them on. It checks what that plugin is already serving, so it only ever asks for lines you do not have, and the message clears itself once you have added them. SyteOps does not switch the other plugin's robots feature off — that file holds your own crawling rules, and they are yours to keep.

v1.6.048​

  • Fixed: A reminder that one of your hidden admin notices no longer appears on the page it was hidden on arrived as a stray line of text at the foot of an unrelated admin screen instead of a corner notification. It now appears as a proper notification that clears itself. Changed: The confirmation that a notice was hidden is now shown only while you are managing the hiding rules, so everyday admin screens stay quiet.

v1.6.047​

  • Improved: Applying the recommended answer-engine settings now also raises the amount of each article published to AI crawlers. The default of 500 words was quietly cutting most articles short — a 1,900-word post reached answer engines as 500 words. Sites already publishing more than the recommended amount are left exactly as they are.

v1.6.046​

Fixed: Some SEO plugins have added their own llms.txt feature, and because of when it runs it takes the /llms.txt address before SyteOps can answer it — so visitors and AI tools received that plugin's file instead of the one SyteOps builds, with nothing on screen to say so. When GEO is on, SyteOps now switches that feature off for you and takes the address back, leaving the other plugin's own AI usage rules and every other setting untouched. Switch GEO off, or deactivate SyteOps, and the feature is handed back automatically so your site is never left without an llms.txt. Added: A warning on the Answer-engine publishing card naming any plugin still holding the address. Fixed: The same class of clash affects FAQ structured data — an SEO plugin set to remove other plugins' structured data was silently deleting the reviewed questions and answers SyteOps publishes, so the feature looked switched on and reached no search engine. SyteOps now switches that setting off too, and only while it is actually publishing FAQ data. Added: SyteOps tells you each time it switches one of these settings off, warns you if one is switched back on, and explains the change on the other plugin's own settings screen. Added: Turning GEO on now finishes configuring the answer-engine files, so a site whose integration was already enabled no longer ends up publishing nothing.

v1.6.045​

Fixed: The review portal page was being marked publicly cacheable, so a per-reviewer link carrying a private draft could be stored by a CDN or page cache — the reviewer queue beside it was already protected, but the article page itself was not. It now tells every cache not to store it, and tells search engines not to index it.

v1.6.044​

  • Fixed: Icons inside buttons sat about a pixel above their label across the whole plugin, so text and icon never quite lined up. They now share one center line on every button — including the pagination controls in Content Pipelines, where the icon sat noticeably low.

v1.6.043​

  • Fixed: The SyteHero image provider in the AI balances popup had no logo, so its name sat out of line with every other provider on the list. It now shows the provider's mark like the rest, and any future image provider without one gets a matching placeholder rather than a gap.

v1.6.042​

  • Fixed: Rebuilding a listing image reported success even when the watermark could not be removed, so the card came back unchanged with nothing explaining why. The rebuild now says what went wrong in plain language, retries on its own when the image service timed out or errored, and offers a "Repair anyway" button when the safety check was what stopped it.
  • Added: A "Listing copy" column on the Media Library, so you can see which pictures still need attention after you close the rebuild window.
  • Added: When SyteHero is installed, its image API balance now appears in the balances popup beside your other AI providers. That is the account watermark removal is charged to.
  • Fixed: When a provider balance could not be read, the list showed only "Error" with no explanation. Hovering over it now tells you why — a missing key, an unreadable response, or the provider's own message.
  • Changed: The Quality setting has been removed from the Listing image panel. None of the available repair models used it, so the control could never do anything.

v1.6.041​

  • Added: After you change the card size, the crop, or the watermark settings, the Listing image panel now tells you how many copies were made with your previous settings and offers a Rebuild button beside the message.
  • Fixed: Saving the Listing image panel after editing something that does not affect how pictures are cropped no longer suggests a rebuild. Only a change that actually reached the pictures raises the message.

v1.6.040​

  • Added: Two new listing-image settings control how much work SyteOps does on its own. Featured images only skips pictures inside an article, which never appear on a card. Only rebuild existing pictures when I ask stops blog and archive visits remaking copies — the setting to keep on if watermark removal is billing you per picture.
  • Fixed: Deleting every listing copy and then rebuilding one article no longer quietly rebuilds others as pages are visited. Both new settings are on after this update, so rebuilds now happen when you ask for them.
  • Changed: Deleting listing copies is never narrowed by the new setting, so a copy made before you switched it on can still be removed. Newly uploaded pictures are still cropped, and a new article's featured image is still repaired.

v1.6.039​

  • Fixed: Replacing a listing card image no longer leaves a broken card for anyone whose page was already cached. The copy it replaces is now kept until the next rebuild, so a page held by a cache or CDN goes on working until it refreshes.

v1.6.038​

  • Changed: Watermark removal on listing cards now repaints only the marked corner and cannot alter the rest of the picture. Previously the whole image was sent to the AI with a written request to change one part of it, which is not something a picture model can promise.
  • Fixed: A repair that does not match the surrounding picture is now refused, and the card keeps the original photo. A corner could come back as a flat gray block, or a photo with no watermark at all could come back blurred.
  • Fixed: The whole marked corner is now replaced. The edge of the area was previously blended back toward the original, which left the top of a logo behind.
  • Changed: The default height of the watermark area is now 16%, up from 12%, which cleared the reference logo by only three pixels. Your saved setting is unchanged.

v1.6.037​

  • Fixed: Rebuilding a card image now reaches visitors right away. Each rebuild is saved as a new file, so browsers and image CDNs can no longer go on serving the copy you just replaced.

v1.6.036​

  • Added: Delete selected posts on listing-image settings deletes listing copies for only the articles you pick, so cards go back to the original photo without deleting every copy on the site.
  • Added: Deleting copies for selected posts has no 50-picture limit; posts with no copy to remove are grayed out, and the count is of copies rather than pictures. The confirmation says whether those copies will be prepared again, and whether doing so is billed.

v1.6.035​

  • Added: Rebuild selected posts on listing-image settings opens a searchable list of posts so you can rebuild only the cards that look wrong.
  • Added: The picker shows how many pictures each post has and how many already have a copy, remembers ticks while you search, and confirms the exact number before it starts.

v1.6.034​

  • Added: Delete listing copies on listing-image settings restores original photos on cards.
  • Added: Rebuild listing copies from the original, with a warning if watermark repair is still on. Turning that repair off no longer leaves remixed card files in place with no way to drop them.

v1.6.033​

  • Added: Choosing LLMS Amplifier as the GEO engine now turns on its JSON index when questions or business identity publish into it.
  • Added: Apply recommended Amplifier settings on the Answer-engine publishing card turns on the JSON index, sitemap, robots, and meta-tag discovery without leaving that card.

v1.6.032​

  • Added: Reprocess listing images now shows a spinner and one picture at a time while each one rebuilds.
  • Changed: Closing the progress window leaves remaining pictures queued in the background. Reload the listing after it finishes so cached copies update.

v1.6.031​

  • Added: Approve and Publish now confirms in a dialog, then shows live progress (including image copy counts) until it finishes.
  • Changed: Scheduling and publishing use that same progress dialog instead of the browser confirm box.

v1.6.030​

  • Fixed: Listing-card watermark repair now edits the whole cropped picture and the true corner, so leftover logo fragments no longer survive. After this update, reprocess pictures that already had a repair.
  • Fixed: Saving or publishing from the review portal now sends the current SEO keyword to Squirrly on that same save, and the published confirmation email no longer calls a live article a draft.

v1.6.029​

  • Changed: Listing-image settings now say whether blog cards are using the cropped copy.
  • Changed: Leftover theme sizes are a note, not a warning, when automatic use is on.

v1.6.028​

  • Changed: Review Portal Workflow settings descriptions are shorter.

v1.6.027​

  • Added: Watermark repair on listing cards lets you pick which connected image API and high-fidelity model to use, with quality and seed when the model supports them.

v1.6.026​

  • Changed: Listing cards keep the theme image until a repaired crop exists, Reprocess no longer deletes the current crop first, and the full-size clean-copy action is removed.
  • Changed: Watermark, card size, and force-on-blog stay gray until Crop a copy for listings is on.

v1.6.025​

  • Added: GEO analysis can run automatically the first time a new article arrives. Off by default, and it needs a GEO AI provider.

v1.6.024​

  • Fixed: The featured-image picker in the review portal no longer stacks screen-reader labels over its chrome.

v1.6.023​

  • Changed: Save settings sits under Social Publishing and saves it with the rest of the Review Portal panel.

v1.6.022​

  • Added: Social Publishing is now its own settings group on the Review Portal panel, with a jump button next to Workflow, What gets sent, and Setup.
  • Improved: those jump links now use the same pill buttons as the other settings tabs.

v1.6.021​

  • Fixed: Blog cards on block-theme Query Loop layouts and on a static home page now get the cropped listing picture and the theme-wiring reading the same way as the blog index.

v1.6.020​

  • Changed: Related-post and post-grid cards below an article now use the cropped listing picture when that setting is on. The article's own featured image stays the full, branded original.
  • Fixed: Large imports and WP-CLI featured-image sets now queue corner cleanup for every picture instead of stopping after the first few in one process.

v1.6.019​

  • Fixed: A blog card whose cropped copy had not been prepared yet was served the full-size original with its watermark intact. Cards now keep the size your theme asked for until the copy actually exists.
  • Fixed: Product and other custom archives were being given the blog card's crop and shape. Only blog posts are affected now, matching what the settings screen reports.

v1.6.018​

  • Added: The listing image now reaches themes that build their blog cards their own way, and cards that ask for an exact pixel size instead of a named one, so those cards get the cropped copy without you editing your theme. Article pages are still untouched.
  • Added: The settings screen now warns when your theme's cards expect a different shape from the card size you entered, naming both — a mismatch quietly re-crops the copy you just arranged to have cropped correctly.

v1.6.017​

  • Added: Rebuild a picture's listing version on demand, from the review portal or the media library, and have listing pages use it automatically without editing your theme. Newly featured pictures now have their corner cleaned straight away instead of waiting for the first visitor to a listing page.
  • Added: Make a clean full-size copy of a picture for use inside the article, leaving the original and everywhere else it appears untouched. Imported pictures now arrive with a real name instead of their filename.

v1.6.016​

  • Added: Review Portal settings groups now have an open/closed arrow, jump links at the top, and Open all / Close all, so you can reach a section without scrolling the whole page.

v1.6.015​

  • Fixed: The stacked actions on each pipeline run (Resend email, Re-run, Open in portal, Delete) now line up on one left edge, and the expand arrow sits at the top of the row instead of floating over the links.

v1.6.014​

  • Changed: The Review Portal settings screen now places each label directly above its control, so settings no longer float across a wide empty gap on large screens.
  • Changed: The reviewer and CC selection lists are taller, so more than two names are visible at once.

v1.6.013​

  • Fixed: Deleting a pipeline run now removes the row and updates the page's counts immediately, instead of graying the row out until the page is refreshed.
  • Changed: The run history's row actions (Resend email, Re-run, Open in portal, Delete) now stack vertically, so the rest of the row has room to breathe.

v1.6.012​

  • Changed: Watermark removal on blog and archive cards is now done by SyteHero's image AI, which reconstructs the background behind the watermark instead of smudging it in from the picture around it. The old fill was only convincing on a plain background and looked wrong on anything else. This needs SyteHero installed with an image AI key — without it the setting is switched off and says so. Each picture costs one image request against your own SyteHero balance, once per picture rather than once per visit, and repairs run in the background so a card may show its original crop for a minute after you turn it on. Fixed: A repair that could not run was recorded as if it had succeeded, so it was never tried again. On a server missing the image library that meant every picture was reprocessed once, nothing changed, and nothing said why.

v1.6.011​

  • Added: Articles that arrive without a summary now get one written for them. When a source sends no excerpt, SyteOps writes a short summary of the article and stores it as the excerpt and the meta description, so blog and archive cards stop showing the article's opening heading twice. A summary you or a reviewer has already written is never overwritten, and if your source sends an excerpt field of its own that field stays in charge. The Generate with AI button in the review portal now produces exactly the same kind of sentence.

v1.6.010​

  • Added: You can now delete a single entry from the pipeline run history. Until now the only way to remove anything was to clear the whole history, so tidying away one test delivery meant losing the record of everything else. Every row now carries its own Delete button, and it asks you to confirm before it removes anything.

v1.6.009​

  • Added: The listing image setting now tells you whether your theme is actually using it. SyteOps watches which picture size your cards ask for and reports what it saw on the same settings screen, naming the page and the size. Visit a listing page after you change your theme, then reload the settings screen — the reading updates itself, so it confirms the fix rather than needing to be cleared.
  • Note: SyteOps never changes a theme setting for you — it only reads your pages and reports what it saw, and it says so plainly when a theme renders its cards in a way it cannot follow. It also names the one case no theme setting can fix: a card that asks for an exact pixel size instead of a named one.

v1.6.008​

  • Added: A blog and archive card can now drop a watermark from its picture. SyteOps already prepares a second copy of each picture cut to your cards' shape; it can now repair the watermark's corner on that copy, filling it in from the picture around it. The article page, the media library and social previews all keep the watermark — only the card loses it, so branding stays where it is seen at full size and cards read as clean photographs. Choose the corner and how much of it to repair.
  • Fixed: On sites using an image CDN, the prepared listing copy was being ignored. The CDN built its own responsive versions from the original picture and the browser preferred one of those, so cards silently went back to a center crop of the untouched file — undoing the crop you chose and re-cropping any watermark. Cards now always use the copy SyteOps prepared.

v1.6.007​

  • Added: Yoast SEO and Rank Math can now be connected the same way Squirrly SEO already could. With one of them switched on, the meta description, focus keyword and cornerstone/pillar flag your articles get in the review portal are written straight into that plugin's own fields.
  • Added: Only one SEO plugin can be connected at a time. Switching one on switches the others off, in the browser as well as on save, so two plugins can never be writing the same page's title.
  • Note: With Yoast SEO or Rank Math connected, SyteOps leaves the per-article SEO title empty unless you type one yourself. That is deliberate — both plugins use your own title template (usually “Title | Site Name”) only while that field is blank, so filling it in automatically would quietly drop the site name from every article's search result.

v1.6.006​

  • Added: A listing image for blog and archive cards. SyteOps prepares a second copy of each picture, already cut to the shape your cards use, so nothing is cropped away at display time — you choose which part of the picture survives, and a corner logo can be kept out of the crop entirely. Article pages keep the original picture untouched. Existing pictures are prepared the first time a listing asks for them, so there is no batch job to run.
  • Fixed: The five image settings on the Review Portal panel — importing images on publish, and the four choices about what metadata comes with them — could be changed but never saved. They reverted to their previous state on the next page load.

v1.6.005​

  • Fixed: Posts published through the review portal now show their optimization score in the WordPress post list when Squirrly SEO is active. The score is calculated by Squirrly from the article’s keyword, and the portal was not passing the keyword along — so posts it published showed no score at all.

v1.6.004​

  • Added: Clicking an article on the calendar now opens a details card — its full title and featured image, when it publishes, who is reviewing it, and a checklist of what it still needs before it can go live.
  • Improved: The calendar opens faster and stepping between months is instant. Months you have already looked at are remembered, the months either side are fetched ahead of you, and the calendar starts loading the moment you reach for the button rather than after you click it.
  • Fixed: An article you cannot reschedule can now be clicked to read its details. It previously did nothing at all.
  • Fixed: The "This article is live" banner sits evenly between the top of the page and the panel below it.

v1.6.003​

  • Fixed: The "Received" date in your review queue now stays correct after a post is scheduled, moved, or has its schedule cancelled. It previously showed the moment the schedule was cancelled, and a scheduled post showed no received date at all.
  • Changed: The per-article history now records what a save actually changed, and writes nothing for a save that changed nothing — so an afternoon of editing no longer pushes the record of who published, scheduled or cancelled the article out of that history.

v1.6.002​

  • Fixed: Scheduling a post no longer says it "cannot be undone". A scheduled post can be edited, moved to another time, or cancelled at any point before it publishes, and the portal now says so.
  • Fixed: Reopening a scheduled post no longer shows the Schedule box unticked and the date blank. The post's badge, the Schedule box, and the date and time all come back exactly as you left them.
  • Added: An Unschedule button on scheduled posts, in the review portal and in the calendar picker. It returns the post to a draft and keeps the date you had chosen, so scheduling it again is one click.
  • Fixed: Choosing to publish a scheduled post immediately now actually publishes it. It previously reported success and quietly left the post scheduled.
  • Changed: Scheduling a post no longer ends your session with it. The action bar stays live so you can keep editing, move the date, or cancel.
  • Fixed: Requesting changes on a scheduled post now cancels its schedule, so it cannot publish itself while the author is still rewriting it.
  • Fixed: Scheduled posts now appear in your review queue, labeled with the date they will publish. They were previously missing from it entirely.
  • Fixed: A post that reaches its scheduled time while you are still editing now says so and updates its badge, instead of leaving a "Scheduled" label on a post that is already live.
  • Fixed: With scheduling turned off, an already-scheduled post can still be cancelled — and no longer offers to "update" a schedule it would in fact publish immediately.
  • Changed: The publish button now names what it will do — Approve & Publish, Approve & Schedule, or Update schedule — and warns you before publishing now would cancel an existing schedule.

v1.6.001​

  • Added: Click the featured image to open the same details panel the article's own images use — change where it loads from, choose one from your media library, and set its alt text and caption in one place.
  • Fixed: The publish bar no longer leaves "Approve & Publish" stranded on its own line, and no longer covers the last panel when you scroll to the bottom on a phone or tablet.
  • Fixed: An image's alt text and caption are now saved only when you actually edit them. Opening an article can no longer change how a picture is described everywhere else it is used.
  • Fixed: Replacing the featured image now asks you to describe the new picture, instead of carrying over the description of the one you replaced.
  • Fixed: Pasting a link to a picture that is already in your media library now reuses it, instead of storing a second copy of the same file.
  • Fixed: An image already in your media library that you set by pasting its link now keeps its own description, and you're told that is what happened, instead of your typed description being silently discarded.
  • Fixed: Correcting a description back to its original wording now saves. Previously the change was recognized as "no change" and quietly skipped.
  • Fixed: Saving while an image is still being fetched now says so, instead of appearing to do nothing.
  • Changed: The sign-in screen drops a line of technical wording that meant nothing to a reviewer.

v1.6.000​

  • Fixed: the featured image now sits at the top of the review panel instead of below the article, so it is visible without scrolling past a long piece.
  • Added: an Import images checkbox beside the publish button, so you can decide per article whether its borrowed pictures are copied into your media library. The site-wide default is set in Content Pipelines.
  • Added: settings for what comes across with each copied picture — its alt text and title, its caption, a record of where it came from, and optionally the metadata embedded in the file itself.
  • Added: a Revert images button that puts an article's pictures back on the links they came from. Nothing is removed from your media library, and an image someone has changed by hand since it was copied is left alone rather than overwritten. Reverting also switches Import images off for that article, so the next publish leaves the links alone.
  • Improved: an article with more pictures than one publish can safely fetch now finishes copying them in the background over the following minutes.
  • Fixed: copied images are recorded under your own site address rather than a content-delivery network's, so they keep working if that network is ever changed or switched off.
  • Fixed: changing an image's link and clicking Apply now saves straight away instead of waiting for the next automatic save.
  • Fixed: uninstalling the plugin now removes every background job it had scheduled. Jobs created for a specific article — social posts and answer-engine file rebuilds among them — were left behind and kept firing at a plugin that was no longer there.

v1.5.152​

  • Fixed: on a phone or a small tablet the review portal showed all of the review panels above the article. The title and article now come first, with feedback, reviewers, SEO, GEO and categories underneath.
  • Changed: feedback and reviewers now sit at the top of the review panels, above SEO, GEO and categories.
  • Fixed: tables and other formatting in the article body are now shown the way they will look on the published site, instead of falling back to plain browser defaults.
  • Added: click an image in the article to see and change the link it loads from, and import it into your media library.
  • Added: publishing now imports any article images that are still hosted elsewhere, so a published article no longer depends on another site keeping the file. An image that cannot be fetched is left as a link rather than blocking the publish.
  • Fixed: an image that is repointed or imported no longer keeps loading the old file from its previous host.
  • Fixed: backslashes in an article — a Windows file path, or a regular expression in a code block — are no longer stripped when the article is saved. Previously each save removed another one until they were gone.

v1.5.151​

  • Fixed: the content calendar in the review portal sat off to the left instead of lining up with the rest of the page.
  • Fixed: the admin screens now respect your device's "reduce motion" setting. Panels, cards and dialogs no longer fade and slide in, and status dots stop pulsing, when that setting is on. Loading spinners keep turning, since a frozen spinner looks like something has stalled.
  • Fixed: the SyteOps admin pages were falling back to the default WordPress page background instead of the plugin's own.
  • Fixed: the calendar now uses your site's timezone to decide which day is "today", so reviewers in other parts of the world see the same highlighted day and the calendar opens on the right month.
  • Fixed: when a post cannot be rescheduled, the calendar in the admin now says why — for example that the time must be in the future — instead of only "Reschedule failed".
  • Improved: the calendar now works properly on a tablet — on a smaller tablet screen the unscheduled drafts list moves below the month so the grid keeps its full width, and on any touchscreen buttons and posts are large enough to tap accurately.
  • Improved: on a phone the calendar shows a compact month overview with a dot on each day that has something scheduled, plus a schedule list underneath giving every post's time, title and status, and your unscheduled drafts. The date picker opens from the bottom of the screen.
  • Changed: the calendar description now says you can select a post to pick a new date. Dragging needs a mouse, so it no longer reads as the only way to reschedule.

v1.5.150​

  • Added: a Save button on the SEO, GEO and Categories & tags panels in the review portal, so work generated by AI in those panels can be saved without scrolling to the action bar. It saves everything on the page, exactly as shown.
  • Fixed: text written by the AI assists — a drafted answer, a generated meta description, suggested categories and tags — is now saved within a moment of being generated instead of waiting for the background save.
  • Fixed: an edit made while a save was already running could sit unsaved until you happened to type again.
  • Changed: the content calendar is easier to read. The month now draws instantly instead of leaving a blank space while it loads, the days form one clean grid rather than a field of separate boxes, today is marked on the date itself, and the unscheduled-drafts list shows a count and says so when it is empty.
  • Fixed: signing in to the review portal when your security plugin asks for a two-factor code or emails a device-verification link no longer reports it as a wrong username or password. You are taken to the standard sign-in screen so that plugin can tell you what it needs.
  • Fixed: the admin screens, emails and documentation now use US spelling throughout. A few British spellings had crept into on-screen text.

v1.5.149​

  • Added: the answer-engine settings now tell you when publishing for AI is switched off, with a Turn on button right there on the card. Previously every option on that page could be changed and saved while nothing was actually being published, and nothing on screen explained why.

v1.5.148​

  • Added: a "Content types" setting on the Review Portal settings chooses which content your AI files describe — llms.txt, the questions feed, FAQ structured data and the LLMS Amplifier index.
  • Changed: that setting starts at Posts only. Pages were previously included automatically, but they are site furniture rather than content an answer engine can cite. Tick Pages there if you want them back.
  • Fixed: changing what your AI files cover, or which questions they publish, now rebuilds those files straight away. Previously only the LLMS Amplifier files were rebuilt, so a site generating llms.txt itself kept serving the old content until the next day's scheduled rebuild.
  • Fixed: with LLMS Amplifier generating your AI files, publishing a content type Amplifier covers but SyteOps did not — a custom post type, say — rebuilt nothing at all, because SyteOps had already stood Amplifier's own scheduled rebuild down.
  • Added: where LLMS Amplifier runs a separate public front end, SyteOps now says which content types have no address on it, since their entries are published without a link. The warning appears beside the new setting and in Amplifier's own health panel.
  • Fixed: "exclude from llms.txt" on an individual article now holds for every content type LLMS Amplifier publishes, not only the types SyteOps analyzes. Previously, narrowing the content types could quietly bring an excluded page back into the generated files.
  • Fixed: media attachments can no longer end up in your AI files, and a content type stays selected while its plugin is temporarily deactivated instead of being dropped the next time you save the page.

v1.5.147​

  • Added: mark an article as a Pillar (cornerstone) in the review portal's GEO panel. A pillar is listed first in your AI index file so it survives the file's size limit, its questions and answers are kept ahead of other articles' when the index has to choose, and when several articles answer the same question the pillar is the one an AI tool is pointed to. It is also marked as cornerstone content in Squirrly SEO.
  • Fixed: editing or approving an article's answers after it was already published never reached your AI files, because nothing rebuilt them until some unrelated article was published. Those files now rebuild on their own shortly after such a change, batched so a run of edits produces one rebuild rather than one per save.
  • Fixed: publishing a page rebuilt nothing either — and neither did unpublishing, trashing or deleting an article, so a retracted article's details stayed in your AI files indefinitely. All of those now rebuild the files on their own.
  • Fixed: the two options that publish into the LLMS Amplifier index quietly did nothing when Amplifier's own JSON index file was switched off. SyteOps now says so, both beside the options and in Amplifier's own health panel.

v1.5.146​

  • Added: the review portal's "Signed in as" area is now a menu. Hover it (or tap it on a phone) for a Sign out option, so a reviewer on a shared or borrowed computer can end their session without leaving the portal.
  • Fixed: an article you excluded from llms.txt stayed out of llms.txt itself but reappeared in the LLMS Amplifier index file, its knowledge bundle, and any per-section files. The exclusion now applies to every file Amplifier produces, as intended.

v1.5.145​

  • Fixed: the passkey button on the review portal sign-in card could refuse to sign anyone in, showing "A request is already pending." Pressing it in the first seconds after the card appeared collided with the passkey plugin's own background sign-in check, which starts a moment later. The portal now holds that check back as soon as a reviewer presses the button.

v1.5.144​

  • Fixed: the LLMS Amplifier FAQ publishing feature added in the previous release was never actually switched on. The code that publishes your reviewed questions and answers into the Amplifier index file was written but never loaded, so it had no effect on any site. It is now active.
  • Added: company details now include country, a short business description, entity type, and business hours, plus LinkedIn and X profile links — all synced to FlowMattic alongside your existing company fields.
  • Added: your business profile (name, description, entity type, logo, address, social links, and hours) can now be published into the LLMS Amplifier AI index, so AI agents reading it learn who the business is. Turn it on or off under Content Pipelines, in Review Portal settings; contact emails and phone numbers are never published.
  • Added: business identity can now be read and updated through the secure control-plane API used by connected automation tools.
  • Improved: old company automation variables retire safely. One still referenced by a workflow stays available until that workflow is updated, and a notice lists exactly which workflows are still using it.
  • Fixed: the company postal code field now accepts international formats such as "SW1A 1AA" or "K1A 0B1". Previously anything other than a US ZIP code was silently erased when you saved, which mattered as soon as the new country field invited non-US addresses.

v1.5.143​

  • Added: the questions and answers your articles record can now be published into the LLMS Amplifier index file, so AI agents reading it find the answers you have already written and approved. The option appears only where that plugin is installed, and any FAQ entries you uploaded yourself are kept and take precedence.
  • Fixed: an article you excluded from llms.txt stayed excluded only while SyteOps generated that file. With LLMS Amplifier generating it instead, the article reappeared — your exclusion silently stopped applying. It now applies to every file Amplifier produces, including its new knowledge bundle.
  • Fixed: with recent versions of LLMS Amplifier, a successful file regeneration was recorded as a failure in the pipeline history, so the step always looked broken even when it worked.
  • Added: unchecked AI-written answers are now reported in Amplifier's own health panel, where you look before regenerating your files.

v1.5.142​

  • Fixed: the passkey button on the review portal still did nothing after the previous release. The fix shipped last release looked for the passkey plugin's code under a name that does not exist on a real install, so the button was left with nothing behind it.

v1.5.141​

  • Added: the review portal sign-in card now has a username and password form on the card itself, so signing in no longer sends you to the WordPress login screen and back.
  • Fixed: the passkey sign-in button on the review portal did nothing, because the portal never loaded the passkey plugin's script.
  • Fixed: the sign-in card offered two passkey buttons that did the same job. There is now one.

v1.5.140​

  • Fixed: module updates could not be installed. The trusted signing key set in the site configuration file was ignored unless written in one specific format, so sites set up the documented way refused every module package as untrusted.
  • Fixed: an installed module whose internal name differs from its package name was treated as a brand-new install, which skipped the safeguard that stops an older package replacing a newer one.
  • Fixed: a licensing server could not see its own published module updates, because it never receives the update list it publishes to every other site. It now reads its own copy.

v1.5.139​

  • Added: reviewers can now sign in with a passkey without leaving the review page. The passkey prompt appears on the sign-in card itself instead of sending them to the WordPress login screen and back. The ordinary sign-in button is still there and still works, so nobody is ever left without a way in.

v1.5.138​

  • Added: an "Open in portal" action on each processed article in the pipeline run history, so an article can be opened for review straight from the run that produced it instead of hunting for it in the posts list. It appears only for articles the portal can actually open, and the review link is issued when you click it rather than when the page loads.

v1.5.137​

  • Internal improvements and maintenance.

v1.5.136​

  • Fixed: three administrative actions in the licensing module refused unauthorized users but replied with a success status, so monitoring and firewall rules saw a normal page rather than a refusal. They now return the correct refused status. Also: internal development checks gained sweeps that verify every administrative endpoint is capability-checked and every refusal returns the right status.

v1.5.135​

  • Internal maintenance: the Review Portal's stored settings were renamed behind the scenes so they match the rest of Content Pipelines. Your settings are carried across automatically as soon as the update is in place — nothing to reconfigure, and nothing changes on screen.

v1.5.134​

  • Fixed: three places still named a product that is no longer used — the heading of the AI provider dialog for the shared content area, a review-portal message shown when no AI provider is set, and the webhook-secret hint shown when adding a content source.
  • Internal reorganization and maintenance. No settings, stored data or web addresses changed.

v1.5.133​

  • Changed: the review portal now offers reviewers a passkey sign-in rather than requiring one. A "Sign in with a passkey" button appears beside the usual sign-in wherever the Secure Passkeys plugin is active. Signing in with a password works exactly as before, so no reviewer — and no administrator — can be locked out of the portal. This replaces the requirement introduced in the previous release.
  • Added: the record kept against each article notes whether the person was signed in with a passkey, so you can see how an edit or a publish was authenticated.

v1.5.132​

  • Added: the review portal can now require reviewers to sign in with a passkey instead of a password. This is switched on automatically wherever the Secure Passkeys plugin is active, so reviewers already signed in with a password are asked to sign in again with their passkey. The portal tells them exactly what to do, and anyone without a passkey is shown where to register one. Administrators are included. Turn it off under Content Pipelines → Review Portal if you are not ready for it.
  • Fixed: the "AI answers reviewed" pre-publish requirement could be switched off but never saved — it reported success and then silently switched itself back on.

v1.5.131​

  • Changed: which sites may receive an internal-only module is now managed through the control API instead of a server configuration file, so adding or removing a site no longer requires editing configuration by hand

v1.5.130​

  • Changed: a module previously restricted to specific sites is distributed normally rather than as internal-only, so every site that runs it continues to receive updates

v1.5.129​

  • Changed: modules marked internal are no longer published at all — they are delivered only to the specific sites entitled to them, over the existing secure licensing connection
  • Changed: sites that are not entitled never see the module listed and never receive its files

v1.5.128​

  • Changed: the list of available modules is no longer published to a public web address. It is delivered to each site over the existing secure licensing connection instead, so your module names and versions are not readable by anyone who finds the URL
  • Note: module packages themselves were already encrypted and signed — that has not changed

v1.5.127​

  • Added: the reviewer queue page now lists live articles you can edit, alongside the drafts awaiting your review
  • Added: each live row shows how many of its questions have answers, and warns when published answers have not been signed off by a person
  • Added: a link to view the live article that is excluded from your site analytics
  • Added: an "Open review portal" link in the toolbar while editing a post, so you no longer have to hover a row in the posts list to find it
  • Added: a link to your review queue from the pipeline run history
  • Improved: the review portal action now appears for the content types your content sources produce, not just posts and pages
  • Fixed: the review queue page served stale styling to anyone who had opened it before, because its stylesheet was requested without a version

v1.5.126​

  • Added: published articles can now be edited in the review portal. The action bar changes to "Save changes", a banner states that the article is live and changes publish immediately, and scheduling is hidden since it cannot apply. Edits to live articles are recorded in the audit log.

v1.5.125​

  • Added: click any image in the review portal to edit its alt text and caption. Alt text is what screen readers announce and what AI search engines read, and it previously could only be changed by editing the HTML by hand.

v1.5.124​

  • Fixed: images in the review preview now have proper space above and below them, and the option to hide alt text on broken images now actually takes effect. Both were written against a container name the portal does not use, so neither had any visible effect.

v1.5.123​

  • Fixed: re-running the GEO analysis now fills in answers for questions that were left blank. Previously it only asked for new questions, so an article with unanswered questions stayed that way no matter how many times it was analyzed.
  • Fixed: articles whose images were damaged by an earlier save — showing a broken image, or the same picture twice — now repair themselves when opened in the review portal.
  • Fixed: expanding the questions on a pipeline run no longer pushes the rest of that row out of line.
  • Fixed: the calendar button now explains why it cannot open instead of doing nothing.
  • Improved: images in the review preview now have space above and below them.

v1.5.122​

  • Added: the pipeline run history now shows the questions and answers recorded for each article, with a count so an article that produced questions but no answers is obvious at a glance.
  • Improved: the Review Portal settings are grouped by how often you use them — Workflow, What gets sent and published, and Setup — instead of one long list. Setup starts collapsed, since branding and AI providers are configured once and then left alone.

v1.5.121​

  • Added: links to articles sent to reviewers and authors can now carry your site's internal-traffic parameter, so editorial visits are excluded from analytics. Links shown to readers are never tagged.
  • Added: a setting for how many questions the GEO analysis should ask for (default 8), and the AI is now told not to return the same question twice in different words.
  • Added: an option to hide alt text on images that fail to load, so editorial alt copy no longer appears as paragraph text. The alt text itself is kept for screen readers and search engines.
  • Fixed: the review portal served stale styles and scripts to anyone who had opened it before, because its files were requested without a version. Reviewers were seeing an old version of the editor no matter how many updates were installed.
  • Fixed: the "Sign in & open editor" button on the review portal had dark text on a dark background, making it unreadable.
  • Improved: requests to AI providers now identify this plugin, so usage shows up under a name instead of "App Unknown" in provider dashboards.

v1.5.120​

  • Fixed: the "Resend email" action in the pipeline run history returned a server error instead of sending. It now emails everyone on the article's reviewer list, and says plainly when an article has no reviewers with a usable email address rather than reporting a delivery failure.

v1.5.119​

  • Added: a field to store an Erlin AI key, so sites that use Erlin can keep their key alongside the other service credentials.

v1.5.118​

  • Fixed: the review portal's answer editor — drafting an answer while adding or removing another row could leave the answer invisible, and re-running the analysis from the pre-publish checklist could discard answers you had just typed.
  • Fixed: drafting a new answer with AI now clears the "I have reviewed these answers" confirmation, so freshly written text is never published as already-checked.
  • Fixed: the confirmation is now only accepted from reviewers who are allowed to edit this area, so it cannot be bypassed.

v1.5.117​

  • Added: the questions and answers published for AI search engines are now shown in the review portal, where they can be edited, added to, or removed before the article goes live.
  • Added: a "Draft answer" button writes a short answer to any question straight from the article. If the article genuinely does not answer it, it says so instead of inventing one.
  • Changed: re-running the GEO analysis no longer replaces your work. It keeps the wording and answers you have written, fills in only the blanks, and adds anything new it finds.
  • Added: Approve & Publish now asks someone to confirm they have checked the AI-written answers, since those answers are published to search engines. Skipped automatically when nothing publishes answers, or when an article has none.
  • Fixed: llms.txt and the questions feed were served with a "not found" status, which meant AI crawlers discarded them.
  • Fixed: only public content types can now appear in llms.txt and the questions feed.

v1.5.116​

  • Added: the questions each article answers — captured by the GEO analysis — are now published where AI answer engines will read them: under each article's entry in llms.txt, in a new site-wide "Questions this site answers" section, as an optional FAQ structured-data block on the article itself, and as a machine-readable feed at /llms-questions.json.
  • Added: each of the four answer-engine surfaces has its own switch under Content Pipelines, on the Review Portal settings. FAQ structured data starts switched off, because adding a second FAQ block to a page that already has one is invalid.
  • Changed: the GEO analysis now records a short answer alongside every question it finds, so the published surfaces carry the answer an engine can actually quote — not just the question.
  • Fixed: the pre-publish requirement switches (GEO analysis, up-to-date GEO analysis, meta description, categories and tags) could be moved but never saved, so every requirement silently stayed at its default.

v1.5.114​

  • Added: a "Resend email" action on each processed article in the pipeline run history, for when a review notification was missed or a reviewer was added after the article arrived.
  • Fixed: a held pipeline run no longer displays as "Post #0" — it now says plainly that no post was created and why.
  • Fixed: a held run stops offering "Reprocess" once its article has already been processed, or once a newer article has replaced the stored copy. It shows "Superseded" instead.

v1.5.113​

  • Fixed: article images and the featured image no longer appear blank in the review portal on sites that use image lazy-loading or an image CDN — and those blank placeholders can no longer be saved into the article, which previously added a broken image and a duplicate on every save.
  • Fixed: the image picker in the review portal now renders with its normal styling instead of appearing unformatted.
  • Changed: review notification emails now offer two buttons — "Edit/View this article" and "See all my reviews" — instead of one button and a text link.
  • Added: Approve & Publish now checks an article is finished before it can go live, listing anything outstanding with one-click buttons to complete it. Each requirement — GEO analysis, an up-to-date GEO analysis, a meta description, and categories and tags — can be switched off individually on the Review Portal settings, and any requirement the reviewer cannot act on is skipped automatically.

v1.5.112​

  • Fixed: an article delivered without a usable title or body is now held for review instead of creating a blank draft (or, when the article carries no id, a duplicate half-empty one) — while a source that maps only custom fields keeps publishing normally, with each article kept separate instead of overwriting one post.
  • Fixed: a delivery that carries only part of an article no longer wipes the other half of the SEO description/keyword pair, no longer reassigns the post to a different author (which could remove the real author's access to their own draft in the review portal), and no longer sends a "draft updated" email for content that did not actually change.
  • Improved: "Reprocess last payload" now tells you what happened on both the source card and the run history — including when nothing was written because the matching post is already published — instead of refreshing the page before you can read it.

v1.5.111​

  • Fixed: an incoming article that only carries some of its mapped fields no longer wipes the rest of an existing draft — fields the delivery didn't include keep the values already on the post (including the reviewer's edits).
  • Fixed: a delivery that carries neither an article id nor a title or body is now held for review instead of repeatedly overwriting one draft.
  • Fixed: "Reprocess last payload" no longer pauses a live content source or emails a "source held" alert, and no longer sends a duplicate article to a connected workflow when the draft already exists; it also now says plainly when nothing changed because the matching post is already published.

v1.5.110​

  • Fixed: a content source's live field mapping is no longer paused by a single field that happens to be missing from one delivery — only a delivery that doesn't match the mapping at all is held for review.
  • Added: a "Reprocess last payload" action — on a content source's card, right after approving a fixed mapping, and on held rows in the pipeline run history — replays the last captured article through the mapping to create its draft without waiting for the sending app to resend it.
  • Improved: held pipeline runs now show an honest amber "Held" status instead of a misleading "OK," and can be filtered on their own; the "source held" alert email now points you straight at Reprocess last payload.
  • Added: a review queue page listing every article awaiting a reviewer's review, linked from every review notification email — reviewers see only their own assigned drafts (administrators see everything), and once signed in a reviewer is never blocked by an expired review link.

v1.5.109​

  • Fixed: status toasts built from admin notices now render with proper spacing and separators — nested notice content no longer runs together as one unpunctuated line, and hidden notice states are no longer included in the toast text

v1.5.108​

  • Fixed: placeholder example text now renders exactly as written — "e.g." no longer displays as "E.G." and email or selector examples are no longer title-cased
  • Fixed: the Fetch Models button no longer stays stuck on "Fetching..." after a retried fetch completes
  • Improved: consistent spacing around the AI model and max-tokens controls across all AI settings areas

v1.5.107​

  • Fixed: the recipe-card border and card styling shipped in the previous release now actually display — the card frame was referencing a style name that no longer existed after an earlier styling isolation pass, leaving recipe cards without their border, rounded corners, and grid layout.

v1.5.106​

  • Improved: pipeline recipe cards now have a thin but clearly visible border, so each recipe stands out from the page instead of blending into the background. Added: a Reply-To address for portal notification emails — replies to reviewer-facing emails can now go to a person (such as your editor) instead of the site's sending address. The same option now exists for lead report emails: a Reply-To address on the email reports settings so replies to lead alerts and summaries reach the right person. Refreshed the email footer tagline example text.

v1.5.105​

  • Added: a complete Email notifications settings area for the Review Portal (Content Pipelines tab). Four independent switches control every automated email — New draft received, Draft updated by source (sent only when a re-delivered article actually changed), Published or scheduled, and a Source held alert that tells the site admin when a live content source stops matching its approved field mapping. Review emails gained a details table (source, article date, status) and every email now closes with a dark branded footer with optional tagline and click-to-call phone. The run history now records each email's outcome (sent, skipped and why, or failed), so a missing notification is never a mystery.

v1.5.104​

  • Fixed: all admin screens are now fully isolated from styling loaded by other installed plugins and themes. Every control the plugin renders — cards, buttons, badges, pills, tags, toggles, modals and filters — now uses its own private style names, so another plugin bundling a common CSS framework (such as Bootstrap) can no longer distort the SyteOps admin interface.

v1.5.103​

  • Fixed: the pipeline run-history filter controls could be distorted by styling from other installed plugins or themes — most visibly the "Source" label crowding against the Status pills with no space between them. The filter controls are now fully isolated from outside styles, so their spacing stays even everywhere.

v1.5.102​

  • Fixed: the filter pills on the pipeline run-history view (Recipe / Status / Source) could show their last label pressed against — or clipped by — the rounded edge of the filter group; every label now renders fully inside its track with clear spacing, at any window size.

v1.5.101​

  • Changed: articles arriving from a content source now always get their categories and tags chosen by AI — SyteOps reads each article and picks from your site's existing categories and tags, creating new ones only when nothing fits, so you no longer end up with a brand-new category for every article. Categories and tags can no longer be mapped from the incoming webhook payload, and each source's Target tag is still added to every post so display formatting keeps working.
  • Improved: the dropdowns in the review portal — “Send to a colleague” and the “Publish as” picker in the action bar — are now styled to match the portal’s other fields, with the same border, rounded corners, focus highlight and chevron, instead of the plain browser dropdowns they used before.

v1.5.100​

  • Changed: the licensing server can now require the private credential from requests that CLAIM to be one of your own sites. Set which domains count as yours, opt that check in, and a request naming one of them must present the credential — everything else, including every customer activation, is completely unaffected. Also fixed: the warning shown before turning the stricter mode on could never appear, and scoping a customer-facing endpoint applied before warning you.

v1.5.099​

  • Fixed: retired and built-in features could linger in the Modules list long after they were removed or folded into the plugin — showing a status and version that no longer meant anything. These leftover entries are now cleaned up automatically.

v1.5.098​

  • Fixed: a security issue in the licensing gateway. Requests that referred to a license or customer record by its ID number are now verified to belong to the license key making the request, so one site can no longer read or change another customer's license details by guessing ID numbers. Normal activation, validation and deactivation are unaffected.

v1.5.097​

  • Changed: the private credential on requests between your sites and the licensing server is now sent only to the licensing host itself, and the stricter checking mode is applied only to the specific endpoints you opt in — so turning it up can no longer affect customer license activations. Defaults are unchanged and nothing is rejected until you opt an endpoint in.

v1.5.096​

  • Changed: requests between your sites and the licensing server now carry a private credential in addition to the existing routing header, so the firewall allow rule can no longer be satisfied by copying a public header. Existing customer integrations are unaffected — the public header keeps working exactly as documented, and the new check starts in a monitor-only mode that rejects nothing.

v1.5.095​

  • Changed: FlowMattic's Variables screen no longer shows a "… Setting/Variable" label on every variable this plugin writes — the Description column is left blank by default so the list is easier to scan. A new "Label FlowMattic variables with a description" toggle under Admin > Other Options turns the labels back on. Only these auto-generated labels are added or removed; any description you wrote yourself is left untouched. When the labels are switched on, they now carry your own brand name on white-labeled installs.

v1.5.094​

  • Improved: Workflows imported into FlowMattic — from a template package or from a connected server — now carry FlowMattic's full native workflow settings, so an imported workflow opens in the current workflow builder and appears under the "All" folder, just like one created directly in FlowMattic.

v1.5.093​

  • Changed: SyteOps now supports FlowMattic 7.0. On FlowMattic's redesigned Variables screen your sensitive values (API keys, tokens, and secrets) stay hidden instead of appearing in plain text; installing FlowMattic from SyteOps no longer detours you to FlowMattic's own setup wizard; and importing a workflow into FlowMattic now saves correctly. FlowMattic 6.x installs keep working unchanged.

v1.5.092​

  • Improved: The "Send to webhook" and "Delete" actions on the leads list are now styled buttons — a brand-colored Send action and a red Delete action — instead of plain text links, making them easier to spot and harder to click by mistake.

v1.5.091​

  • Changed: The recommended Cloudflare firewall rule for allowing SyteOps licensing and management requests is now scoped to the plugin's own API path, so a forged request-marker header can no longer be reused to let other traffic bypass your firewall.

v1.5.090​

  • Fixed: Lead phone numbers now display in a consistent (NNN) NNN-NNNN format on the leads list and in lead emails, matching the office phone. Masked, international, and unusual numbers are shown unchanged.

v1.5.089​

  • Fixed: A form submitted without a tracking cookie now attaches to the visitor's existing lead instead of creating a duplicate, unattributed lead.
  • Fixed: Qualified-lead alerts now honor the same per-goal automation opt-out as new-lead alerts, and no longer re-send when a visitor re-submits the same answers.
  • Fixed: Phone-only (call) leads can now sync their pipeline status to the RingTonic CRM.
  • Fixed: Deleting a lead now fully removes its event history, and lead event counts stay accurate under rapid activity.

v1.5.088​

  • Added: "Auto-map with AI" on the leads form-field mapping. It reads a form's fields and suggests which are the name, email, phone, office phone, and message — and proposes named custom fields for the rest — pre-filled for you to review, edit, or remove before saving. Choose which AI provider to use in the new "AI mapping" card on the leads settings screen.

v1.5.087​

  • Fixed: On the leads settings, the form-to-lead field mapping controls now render at a consistent, full width, so long form and field names are no longer cut off, and the custom-field row is spaced out instead of cramped.

v1.5.086​

  • Added: Map any of your form's fields to a named custom field on the lead — with an optional "sensitive" flag so it follows your privacy setting. Custom fields show on the lead, in the CSV export, in lead emails, and in the outgoing webhook.
  • Added: Pull contact data from RingTonic into the lead. Your originally captured details are preserved; RingTonic's extra and differing fields are added alongside without duplicating what you already have — refreshed automatically on sync or on demand with a "Refresh from RingTonic" button, and included in the outgoing webhook.

v1.5.085​

  • Added: An optional office phone field when mapping a website form to leads — it shows on the Leads list, in the CSV export, and in lead emails alongside the other contact details.
  • Added: The outgoing lead webhook payload now includes the lead's contact details (name, email, phone, and office phone), each sent exactly as it is stored under your privacy setting.
  • Added: A one-click Backfill that applies your saved form mappings to existing leads, filling in contact details from each form's stored submissions. It matches submissions to leads by contact identity, never overwrites anything already set, and skips form tools that don't store submissions (Contact Form 7, WPForms Lite).

v1.5.084​

  • Added: The RingTonic CRM API key can now be set headlessly (encrypted, integration auto-enabled) — managed site launches push it automatically when the RingTonic MCP is selected.

v1.5.083​

  • Fixed: Form-selection dropdowns now list your forms on sites where they previously appeared empty even though forms existed.

v1.5.082​

  • Added: The RingTonic integration now displays its logo on the Integrations tab.

v1.5.081​

  • Changed: The RingTonic API key field on the Leads settings screen now appears only when the RingTonic integration is turned on.
  • Added: The RingTonic integration tile links directly to its API key field once the integration is enabled.

v1.5.080​

  • Added: The lead qualification form now honors Global Privacy Control. It still records what a visitor submits, but leaves out the tracking identifiers when a visitor's browser asks not to be tracked.
  • Changed: The leads list is redesigned to show each lead's name, how it was received, email, and phone — with a status you can set right from the list (New, Contacted, Qualified, Unqualified, Customer).
  • Added: Lead export — send a single lead to your automation webhook, or download the full list.
  • Added: RingTonic integration — keep a lead's status in sync with the RingTonic call-tracking CRM.

v1.5.079​

  • Added: Lead tracking is now consent-aware. When the WP Full Picture integration is enabled, the tracker follows Full Picture's consent choices and only records a lead — and sets its cookies / stores first-touch attribution — once analytics consent is granted. Global Privacy Control (GPC) is always honored, and visitors in the EU/EEA/UK are treated as opt-in (nothing stored or sent until they consent). The US and the rest of the world remain opt-out unless GPC is set.
  • Added: The cookies the leads tracker sets are now declared (name, lifetime, purpose), so your consent tool can register them.

v1.5.078​

  • Fixed: The Form Field Mapping tool on the Leads settings page now lists your Fluent Forms forms correctly. Previously the form dropdown could appear empty even when forms existed.

v1.5.077​

  • Added: A Form Field Mapping tool on the Leads settings page — pick a form plugin and a form, then map its fields to a lead's name, email, phone, and message with no code. Works with Fluent Forms, Gravity Forms, WPForms, and Contact Form 7.
  • Added: The privacy control for how contact details are stored on leads (full, masked, or off) is now set directly on the Leads settings page.

v1.5.076​

  • Added: Lead records now capture the contact name, email, phone, first-touch attribution, and the message submitted through a connected form, so each lead is a complete record on its own.
  • Added: A privacy control for how personal data on lead records is stored — keep it in full, store a masked version, or don't store it at all. Personal data is never written to the tamper-evident activity log.

v1.5.075​

  • Improved: Removed a redundant "Edit settings" link from the AI Search Discovery card on the Content Pipelines dashboard. The card's on/off switch and engine choice already live on the card itself, so the link had nowhere new to go.
  • Fixed: A large email logo no longer stops automated report and digest emails from sending. An oversized image is kept as a linked image instead of being embedded in the message, and the email logo stays small even when a resized version isn't available.

v1.5.074​

  • Changed: The AI Search Discovery (llms.txt) engine is now either/or — switch between the built-in generator and the LLMS Amplifier integration from one place on the Content Pipelines tab. Turning LLMS Amplifier on automatically sets it to manual updates and turns AI Search Discovery on; turning it off reverts to the built-in generator, so AI Search Discovery is never left off.
  • Changed: The AI Search Discovery on/off switch and engine choice, and the Social Publishing on/off switch, now live together with their other settings on the Content Pipelines tab instead of being scattered across separate settings screens.

v1.5.073​

  • Improved: The content calendar's "draft" status indicator now meets accessibility contrast standards, and rescheduling reports clearer, more accurate errors.

v1.5.072​

  • Fixed: Scheduled banners now display and report correctly across a daylight-saving-time change. Previously the banner would switch over at the right moment, but its on-screen visibility and the admin status pill could be off by an hour on sites that observe daylight saving.
  • Fixed: Choosing a clock time that doesn't exist on the spring-forward night (when clocks jump ahead) now moves the schedule forward past the skipped hour, the way calendars normally handle it.
  • Improved: The banner "Now", "Today", and "Tomorrow" quick-set buttons now fill in your site's local time instead of the time on whatever computer you're using.

v1.5.071​

  • Fixed: Scheduled social posts now fire at the intended time in your site's timezone, instead of the timezone of whoever's browser was used to schedule them.
  • Fixed: Banner activation and deactivation times are now read in your site's timezone, so a scheduled banner no longer switches on or off early (or late) on sites that aren't set to UTC.

v1.5.070​

  • Fixed: Scheduled and rescheduled times now use your site's timezone instead of the timezone of whoever's browser is being used, so a post set for "9:00 AM" goes live at 9:00 AM site time no matter where the editor is. This applies to the calendar, the Publish schedule control, and social scheduling.
  • Improved: Calendar text — post times and out-of-month day numbers — is now easier to read, meeting accessibility contrast standards.
  • Changed: Moving an already-scheduled post now respects the same publish permissions as scheduling a draft, so only people allowed to publish can change when a scheduled post goes live.
  • Fixed: Dragging a post scheduled for exactly midnight no longer resets its time, and the calendar no longer holds on to memory as you move between months.

v1.5.069​

  • Added: An editorial calendar showing your recent, draft, scheduled, and published posts, in both the Content Pipelines area and the review portal. Drag a post to a new day — or pick an exact date and time — to reschedule it, and drag an unscheduled draft onto a day to schedule it. You can only move posts you're allowed to edit, and scheduling a draft needs permission to publish.

v1.5.068​

  • Fixed: The content pipeline activity filters no longer cut off their last option (such as "Skipped"). When space is tight a filter group now wraps to the next row instead of being squeezed and clipped.

v1.5.067​

  • Changed: Renamed the content pipeline activity "Pipeline" source filter (and the matching per-row tag) to "Direct" so it's easier to tell apart from your content-source filters.

v1.5.066​

  • Improved: Security hardening across admin screens with better escaping of displayed data and clearer error messages when requests fail.
  • Fixed: Import preview now surfaces per-item conflicts so you can choose to skip or overwrite each one.

v1.5.065​

  • Internal improvements and maintenance.

v1.5.064​

  • Improved: Internal cleanup removing outdated code left over from retired modules; error logging now follows the plugin's logging system.

v1.5.063​

  • Improved: Admin screen requests now use a unified security check with clearer permission error messages.
  • Fixed: Configuration import and backup restore now report file read or write problems instead of failing silently.

v1.5.062​

  • Improved: Uninstalling the plugin now removes additional stored data (internal tables, update-checker state, scheduled sync tasks, and the backup folder) for a cleaner removal.
  • Fixed: Debug logging now follows the plugin's own debug mode setting, and module activation logs are written to per-module log files.

v1.5.061​

  • Fixed: The Content Pipelines screen no longer appears unstyled when opened by clicking its tab — it now displays correctly without needing a page refresh.

v1.5.060​

  • Improved: Licensing credentials saved from the server configuration screens are now encrypted at rest, matching how they are stored when saved from the settings form.
  • Fixed: Registry import preview and conflict lists render safely regardless of imported tab names, and REST log page permission errors now return the correct HTTP status.

v1.5.059​

  • Fixed: Minor admin wording polish — a punctuation fix on the setup-status notice and removal of a redundant explanatory note.

v1.5.058​

  • Fixed: A helper label placed right after a button now has proper spacing instead of sitting crammed against it.

v1.5.057​

  • Fixed: In the Content Sources editor, the config-variable and custom-field rows now line up in their columns instead of overflowing and overlapping their neighbors.

v1.5.056​

  • Fixed: The content source Ingest URL field now always shows the full URL instead of truncating to a narrow box.
  • Changed: Removed a provider-specific shortcut on the Content Sources add-source form — the standard signature-header fields cover the same setup.

v1.5.055​

  • Improved: The Cloudflare account ID and zone ID are now hidden on the FlowMattic Variables screen, matching how the Cloudflare API token is already masked there.
  • Fixed: A Cloudflare Zone ID entered on the System/API screen now saves reliably — previously the typed value could be dropped when saving.
  • Fixed: Non-secret System/API identifiers (such as the Cloudflare account and zone IDs) configured through automated (headless) setup now display correctly on the System/API screen instead of as scrambled text.

v1.5.054​

  • Fixed: AI model dropdowns now show the full model name instead of truncating to a narrow box.
  • Improved: A visual polish pass across the Content Pipelines admin screens — consistent card depth and titles, tidier spacing and alignment, and the field-mapping payload tree now stays beside the mapping fields while you scroll.

v1.5.053​

  • Added: A Setup / Production mode for content pipelines. In Setup mode drafts are still created so you can preview mappings, but runs aren't recorded and nothing is sent out — no reviewer emails, workflow forwards, or social posts — so you can test safely. Switch to Production when you're ready to go live. Note: every site starts in Setup after this update — if yours was already live, open Content Pipelines → Runs and switch to Production to resume recording and sending.
  • Added: A "Clear all run history" button in the Runs view.
  • Fixed: The Review Portal settings view no longer renders blank during setup — the AI provider, branding, and portal settings are available before any content source goes live.
  • Fixed: In Content Sources, the FlowMattic config-variable and custom-field editor tables no longer run off the right edge of the card on a narrow browser window.
  • Improved: Clearer helper text for where the Content AI provider is configured, plus a freshened example in the source config-variable editor.

v1.5.052​

  • Added: In the payload mapper, click into a mapping field to get a filterable dropdown of the incoming payload's paths — type to narrow it, arrow keys and Enter to pick — alongside the existing clickable tree.
  • Added: A "Delete all captured payloads" button clears every source's remembered payload in one click.

v1.5.051​

  • Added: Visual payload mapper for Content Sources — click a value in a received payload to map its field, while viewing the payload.
  • Added: FlowMattic config variables can now pull a value from each incoming payload (per-article), delivered with the forwarded workflow.
  • Improved: Content Sources remember the last payload each source received, so you can map against exactly what arrived.

v1.5.050​

  • Fixed: entering a custom inbound signature header on a content source no longer gets discarded when the header mode is left on "Standard" — the header you type is now saved. Previously this could cause a provider's webhooks (such as ContentPen) to fail verification.
  • Content Sources: a new "Prefill for ContentPen" button sets the correct ContentPen signature header in one click, so ContentPen webhooks verify without manual setup.
  • Content ingest now returns a clearer "Missing signature header" message when a webhook arrives without a signature, making it easier to tell a misconfigured header apart from a mismatched secret.

v1.5.049​

  • Content sources can now skip signature verification with a new "None" auth mode, for senders that cannot sign requests — the unguessable ingest URL is the only gate.
  • Content sources can now store a provider-supplied verification secret and a custom signature header name, so webhooks signed with the provider's own key are verified.

v1.5.048​

  • Deleting a content source now frees its ingest URL for reuse — recreating a source with the same name reclaims the original ingest URL instead of getting a numbered suffix.

v1.5.047​

  • The operator deploy tool now remembers the SyteOps Admin user you pick at its prompt — it writes the resolved id to the env files the next deploy reads, so subsequent deploys stop asking for it. Preset SYTEOPS_ADMIN_USER to skip the prompt entirely.

v1.5.046​

  • Added an integration enable|disable <slug> command to the System / API command family, so deployment tooling can toggle a SyteOps integration headlessly — turn an integration on when its plugin is installed or adopted, and off when it is removed.

v1.5.045​

  • Retired the standalone ContentPen integration. Everything it did — signed webhook ingest, AI-suggested categories and tags, author matching, target-tag rules, and display cleanup — is now built into Content Sources, and existing ContentPen setups are migrated over automatically.

v1.5.044​

  • Content Sources can now match what the ContentPen integration does — AI-suggested categories and tags, author matching, target-tag rules, display cleanup, and a configurable webhook signature header.

v1.5.043​

  • System / API — added a Cloudflare Zone ID field (with its FlowMattic sync variable), relabeled the Cloudflare token field to API Token (its option key and FlowMattic variable are unchanged), added copy buttons to all three Cloudflare fields, and widened the System / API set command so it also accepts the five AI-provider API keys (OpenAI, Anthropic, OpenRouter, Gemini, Perplexity).

v1.5.042​

  • Fixed the headless System / API WP-CLI setter added in 1.5.041: its --stdin flag was declared unbracketed, which WP-CLI rejected as an invalid synopsis, so the command never ran. It now uses [--stdin] and populates the fields as intended.

v1.5.041​

  • Added a headless WP-CLI command to populate System / API variables (such as the AWS IAM keys) from deployment tooling; values are stored encrypted and synced to FlowMattic.

v1.5.040​

  • Removed redundant helper text from the AWS credential fields on the System / API tab.

v1.5.039​

  • Fixed: scope-limited configuration backups for the Banners and Integrations areas now capture their settings (previously these targeted backups could come out empty).
  • Fixed: variable-set configuration backups can now be restored (they were previously rejected as incomplete).
  • Fixed: license activation now reports a clear product, plan, or email mismatch instead of a generic error, and shows an "activation pending — please try again shortly" message when the store hasn't finished registering your site.

v1.5.038​

  • Fixed: full configuration exports now preserve your Integrations module settings (such as the site-code header) — previously that data could be dropped from the exported file.

v1.5.037​

  • Added: AWS IAM Access Key and AWS IAM Access Key Secret fields in the AWS SES area of the System / API tab. Both are stored encrypted, sync to FlowMattic as masked variables, and include a copy button for the variable name; the secret can be cleared on save.

v1.5.036​

  • Fixed: Sending or scheduling a social post from the posts list now shows a clear, actually-visible confirmation before the dialog closes.
  • Improved: Review portal + scheduling refinements — internal validation and documentation cleanups.

v1.5.035​

  • Fixed: The publish-time post type change now only allows the same publishable types offered in the picker, closing a gap where a reviewer could otherwise switch a post to a hidden type.
  • Fixed: Schedule/send error messages in the social compose modal were hidden behind the modal itself.

v1.5.034​

  • Added: Schedule a composed social update to send at a specific time, or automatically once the post publishes — with a pending-sends list and cancel option.
  • Added: Choose the post type when publishing a draft from the review portal, instead of always publishing to the type it was created as.

v1.5.033​

  • Added: Social Publishing — compose an AI-summarized post in a chosen voice and send it to a webhook (LinkedIn via your automation tool, Slack, or any endpoint), from the review portal or the posts list.

v1.5.032​

  • Fixed: The automatic cleanup of leftover files from a removed feature now removes only the plugin's own package folders, never a same-named folder that belongs to another plugin.

v1.5.031​

  • Fixed: A removed legacy feature's leftover files could, in rare cases, cause a site error after an update. These are now detected and cleaned up automatically on load.

v1.5.030​

  • Internal improvements and maintenance.

v1.5.029​

  • Fixed: Removing a content source now also clears the automation configuration variables it created — no leftover variables.
  • Improved: Attribution records are now included in the backup created before the plugin is uninstalled.

v1.5.028​

  • Changed: Content Pipelines is now a built-in core feature — no separate module to install or activate; it's available out of the box.

v1.5.027​

  • Added: Content Sources can land drafts into any post type or a new custom type you define.
  • Added: Custom fields per source, mapped from incoming data.
  • Added: Per-source FlowMattic config variables and opt-in forwarding to a workflow.

v1.5.026​

  • Removed unused legacy internal modules, along with their settings and data-management screens, to simplify the plugin.
  • Internal reliability fixes.

v1.5.025​

  • Internal improvements and maintenance.

v1.5.024​

  • Improved: Each inbound card on the content pipeline dashboard now shows whether a source is one you added ("Manual source") or the built-in "Integration", so they are easy to tell apart.
  • Improved: A content source's ingest URL is now click-to-copy and sized to fit the address.
  • Fixed: "Finish setup" on a content source card now opens the Content Sources panel instead of the activity view.

v1.5.023​

  • Improved: The "Enable modules after installation" switch now remembers whether you left it on or off, rather than resetting each time the page loads. It remains off by default.

v1.5.022​

  • Fixed: Naming a content source "ContentPen" or "Pipeline" no longer merges its activity with the built-in source of the same name — each keeps its own dashboard card, filter pill, and stats.
  • Improved: The pipeline activity list can now be filtered to just the built-in ContentPen integration's events with a dedicated Source filter pill.

v1.5.021​

  • Improved: The pipeline activity dashboard now shows the built-in ContentPen integration's status (when it's in use) alongside your registered content sources.

v1.5.020​

  • Fixed: On the pipeline activity dashboard, the per-content-source filter now filters the activity list correctly (previously it had no effect for a custom source).

v1.5.019​

  • Improved: The pipeline dashboard now shows a card and filter for each content source you've registered (by its chosen name and live status) instead of a single fixed source.

v1.5.018​

  • Improved: Pick a content source's default author from a dropdown of WordPress users (by name) instead of typing a numeric user ID.

v1.5.017​

  • Improved: Cleaner spacing and layout on the content sources screen. Each source's inbound webhook is automatically allowed through the REST API restriction, with no manual whitelisting needed.

v1.5.016​

  • Improved: Re-sending content no longer overwrites a post a reviewer has already published (each source can opt into always-overwrite), repeat deliveries reuse the existing featured image instead of re-downloading it, and reviewers are notified once when a draft is created rather than on every delivery.

v1.5.015​

  • Fixed: Imported content keeps its featured-image alt text and handles original publish dates reliably; a source whose field mapping is incomplete now holds content for review instead of creating blank drafts.

v1.5.014​

  • Added: Register external apps as content sources that send content into the review portal, with AI-assisted field mapping and a secure webhook URL for each source.

v1.5.013​

  • Added: Reviewer editing permissions — limit which parts of a shared review link each reviewer type can change (view-only areas, existing-terms-only categories & tags), with per-user overrides. Admins are never restricted.

v1.5.010​

  • Fixed: Further review portal polish — the header, action bar, and side panels resize cleanly on narrow screens, long names and tags no longer overflow their columns, and the read-only preview banner no longer hides the header on scroll.

v1.5.009​

  • Fixed: Review portal display — the brand logo no longer clips, large featured images are scaled to a tidy preview, article bodies wrap correctly instead of overflowing, and the editor uses more of the available width.

v1.5.008​

  • Added: An Edit in WordPress link in the review portal opens the full block editor in a new tab.
  • Added: Open the secure review portal for any post straight from the Posts or Pages list.
  • Improved: The in-admin portal preview opens larger and adds clear Full screen and Open in new tab buttons.

Operator Tools — 2026-06-23​

Added​

  • Deploy tool: --avada / --no-avada toggle to reset Avada/Fusion caches after deploy (default on; no-op on non-Avada sites).

v1.5.007​

  • Security: The portal preview is now restricted to administrators and sends stricter framing and referrer headers.
  • Fixed: Reliability improvements to the portal preview window and the Content Pipelines navigation tabs.

v1.5.006​

  • Added: A "Preview Portal" button on the Review Portal branding settings opens a full read-only preview of the portal — with your current branding — right inside the admin, so you can see how it looks before sending a review link.

v1.5.005​

  • Improved: The Review Portal branding settings now show a single save button and a clearer "Saved" confirmation.
  • Improved: When you enable branding override, the color fields now start from your current branding instead of blank defaults.

v1.5.004​

  • Fixed: The Review Portal branding preview now shows your actual logo from General → Branding instead of a placeholder initial.

v1.5.003​

  • Fixed: The navigation tabs on the Content Pipelines screen (Runs, Recipes, Review Portal) now switch views correctly when clicked.

v1.5.002​

  • Improved: The review-and-publish portal now activates only when Content Pipelines is enabled; with it turned off, incoming content is handed to your configured webhook automation instead.

v1.5.001​

  • Fixed: Switching between Content Pipelines views (Runs, Recipes, Review Portal) now tabs over instantly instead of reloading the page.

v1.5.000​

  • Added: Live preview — reviewers can open a post exactly as it will appear on your site before publishing.
  • Added: AI-assisted meta description generation in the review and publish workflow.
  • Added: A dedicated SEO title field that stays in sync with your SEO plugin, with a clean automatic default.
  • Added: Publish notifications — the author and reviewers receive a branded email when a post is published or scheduled.
  • Added: Secondary keywords are captured from generated content and editable while reviewing.
  • Improved: The content editor toolbar gains numbered lists, underline, remove-link, clear-formatting, and undo/redo.
  • Improved: SEO titles now use the clean post title; the meta description is no longer appended to the page title.

v1.4.016​

  • Content Pipelines module: New module that automatically runs cross-linking, SEO, and llms.txt stages when posts are published. Manage recipes and view run history from the new Content Pipelines tab.
  • Improved: Primary action buttons now use your configured brand color instead of the default blue.
  • Improved: Button icons are now vertically centered with their labels throughout the admin.

v1.4.015​

  • Fixed: Team member variables no longer stop updating in connected workflows after certain background syncs.
  • Fixed: Forcing a variable re-sync now reliably rebuilds all team member variables instead of clearing them.

v1.4.014​

  • Internal improvements and maintenance.

v1.4.013​

  • Improved: Dialog headers now match your configured brand colors.
  • Improved: The user quick-navigation pills are restyled with larger, clearer profile pictures.

v1.4.012​

  • Improved: The fill-in box for adding a user now appears on the Users tab in settings as well, not only on the Roles & Users page.
  • Fixed: The add-user fill-in box can be closed with the Escape key.

v1.4.011​

  • Added: When adding a user, a quick fill-in form lets you pre-populate their details (name, email, company, and phone) before the user is created.
  • Improved: The lock/unlock button icon is now properly aligned with its label.

v1.4.010​

  • Fixed: Creating a new role no longer fails with a blank page or error.
  • Fixed: Adding a new user no longer fails with a server error.
  • Fixed: Owner, technical, and marketing contact badges display on the Users tab again.
  • Improved: The role identifier (slug) field now allows underscores, removes a trailing plural "s" automatically, and shows clearer guidance on which characters are allowed.
  • Improved: Minor admin interface alignment fixes.

v1.4.009​

  • Fixed: Activation checkboxes in the FlowMattic MCP Server settings now show their checkmark when enabled, instead of appearing blank even when the option is switched on.

v1.4.008​

  • Fixed: When FlowMattic is already installed but not active, setup now activates the existing copy in place instead of triggering a fresh license-gated download, so connecting FlowMattic completes reliably.

v1.4.006​

  • Added: Block public access to wp-content/debug.log — SyteOps maintains a deny rule in wp-content/.htaccess so the WordPress debug log can't be fetched directly over HTTP (REST API settings → User Enumeration Defense, default on).

v1.4.005​

  • Fixed: WordPress admin list screens (Orders, Products, Pages — any post-type list) no longer show a critical error on sites where the Leads module is not active.
  • Fixed: REST security logging no longer emits PHP warnings or records array query parameters as the literal string "Array"; nested values are preserved and secret keys inside them are redacted.

v1.4.004​

  • Fixed: The "Send test email" action returns a clear failure notice quickly when the site's mail transport is slow or unreachable, instead of leaving the page hanging.
  • Improved: Scheduled lead summary emails get the same fast-fail protection, so a slow mail transport won't stall them.

v1.4.003​

  • Fixed: Example hint text in lead settings fields (email addresses, webhook URLs, selectors) now displays in its proper format instead of title case.

v1.4.002​

  • Added: Your own logo can now appear at the top of lead notification emails — upload or pick one from the media library so emails match your brand.
  • Improved: The logo sits on a fixed white panel, so it stays legible in both light and dark email clients.
  • Improved: The logo is embedded directly in each email, so it displays even when an inbox blocks remote images.

v1.4.001​

  • Fixed: Tidied the Leads settings layout — removed an empty tab and corrected page spacing.
  • Fixed: The "which conversions to send" switches now reliably apply to form submissions captured on the server.
  • Fixed: The lead-scoring question builder keeps custom question IDs when you rename a question, so saved answers stay linked.
  • Fixed: Editing one advanced (raw JSON) box no longer clears the other.

v1.4.000​

  • Redesigned the Leads settings screen with clearer explanations, on/off switches, and a point-and-click builder for lead-scoring questions. Webhooks now work with any automation platform.
  • Added: A new Manage API lets trusted external tools and automations control SyteOps over a secure connection, using an API key you generate.
  • Added: Generate, rotate, or revoke your Manage API key from Admin → Other Options — the key is shown only once and stored encrypted.
  • Improved: Destructive actions performed through the API require explicit confirmation, and stored credentials are never returned in responses.

v1.3.049​

  • Fixed: Removing the custom admin branding logo now falls back to the default logo instead of leaving the branding area blank.

v1.3.048​

  • Fixed: The WordPress login screen logo now displays the full wordmark instead of appearing cut off on the right edge.
  • Fixed: Removing or replacing the custom login logo now saves reliably — it no longer reappears on the next page load or adds duplicate copies to your media library.

v1.3.046​

  • Refreshed: SyteOps and SyteWide branding across the admin UI (logos, primary teal color, login screen, footer, sidebar mark).
  • Improved: The brand library is now bundled locally so logos no longer depend on external image hot-links.

v1.3.045​

  • Fixed: Rolling Management Server credentials now reliably saves the new secret on each endpoint and overwrites the stored value
  • Added: Credential rolling now reports per-endpoint results and confirms the new secret was applied, clearly listing any endpoint that did not update
  • Fixed: License-activation consent checkboxes now show a visible checkmark when selected
  • Fixed: Admin dialogs no longer get clipped when opened from a settings card
  • Improved: The credential-roll dialog footer buttons are now laid out correctly
  • Fixed: Status notifications for Management Connection actions now show the correct heading

v1.3.044​

  • Improved: Quick Navigation links sit closer to their heading with tighter, balanced spacing
  • Improved: FlowMattic quick-action button icons are now clearly visible, with better spacing between icon and label

v1.3.043​

  • Fixed: Connection data could be cleared unexpectedly on sites that run scheduled tasks through the server's own scheduler instead of the built-in WordPress scheduler. The tool that resets connections now runs only when launched intentionally, never as a side effect of routine background processing.
  • Recommended for all sites. After updating, endpoints automatically re-establish their connection on the next status check.

v1.3.042​

  • Improved: Admin section headings restyled from button-like pills to a three-tier typographic system
  • Improved: Tab page headers now center the title at the top with the description italicized beneath
  • Improved: All cards across the admin UI use a more pronounced layered shadow for clearer visual separation

v1.3.041​

  • Added: User Enumeration Defense card on the REST API admin page (Security → REST API → "User Enumeration Defense"). Single toggle (default ON) that blocks the three classic WordPress user-enumeration attack surfaces for unauthenticated visitors:
    • ?author=N redirect leak (returns 404 instead of redirecting to /author/<login_slug>/)
    • /author/<slug>/ direct archive hits (also returns 404 — no signal whether the username exists)
    • /wp-json/wp/v2/users REST endpoint (returns 404 with rest_no_route for users without list_users capability, even when other plugins or themes re-register the route or restrict the broader REST API)
    • Also strips author_url from OEmbed responses (the URL contains the login slug)
  • Added: Independent of the existing "Restrict REST API" / "Block All REST API" controls. Use this when you want enumeration protection without locking down the full REST API.
  • Note: Default ON. Existing installs get the protection automatically on upgrade. Toggle off if you have any site that legitimately needs public ?author= or public /wp-json/wp/v2/users access (rare on marketing sites; common on headless WordPress setups).

v1.3.040​

  • Fixed: The Show button on the Management Server Secret now reveals the actual token instead of encrypted:sodium:… text
  • Fixed: Request Connection from an endpoint now succeeds — the token sent to the Management Server is the real secret, so authentication passes
  • Fixed: Plugin updates from the GitHub source now work after a fresh endpoint connection — the GitHub token is no longer scrambled when the Management Server returns it to the endpoint
  • Fixed: Re-pasting a secret that was previously revealed (and copied) no longer corrupts the stored value
  • Fixed: A stale "connection failed" notice no longer persists after a successful retry
  • Improved: The "unauthorized domain" message from the Management Server is now clean — no debug-flavored tail in the toast

v1.3.039​

  • Added: Row-based add/remove controls for the REST API custom allowlist — each saved endpoint is its own row with a small × remove button, plus a separate input + Add button that appends one path at a time
  • Added: Built-in rule collision check on the custom allowlist — paths already covered by a built-in rule are rejected with a clear message so you don't end up with redundant entries
  • Added: Integration tier system — every integration card now shows a discreet Basic, Extended, or AI-Powered badge so you can tell at a glance how involved each integration is
  • Added: Dedicated documentation pages for AWS SES, Fluent Forms, WooCommerce, Wordfence, and Google Site Kit integrations
  • Added: Dedicated documentation page for the Banners module
  • Changed: Notice Management unified into a single notice-suppression flow — paste a notice, capture the last one, or pick from visible notices on the page
  • Changed: Wordfence REST allowlist widened to the full v1 namespace so all Wordfence endpoints work under REST API Restriction (not just /authenticate)
  • Removed: Monday integration and its documentation
  • Improved: Custom allowlist changes save immediately — no longer coupled to the Save Access Control button
  • Improved: Variable Sets documentation rewritten in plain language — leads with a clear introduction before introducing technical terms
  • Improved: Documentation jargon cleanup across the overview, FlowMattic, and troubleshooting pages for easier reading
  • Improved: Documentation sidebar now includes every integration and feature page for complete navigation
  • Fixed: Notice Management no longer blanket-hides every SyteOps toast when suppressions exist — only the toasts you actually target
  • Fixed: WordPress "Dismiss this notice" button text is stripped before notice messages are captured in the picker or matched at render time
  • Fixed: LinkCentral AI label padding and a toast relay regression

v1.3.038​

  • Improved: AI provider HTTP response validation widened to accept all 2xx status codes
  • Improved: AI model caches automatically cleared on plugin update to ensure fresh model data

v1.3.037​

  • Added: Bulk processing for flagged keyword links with per-link status feedback and post-run refresh support
  • Improved: LinkCentral settings visibility now follows integration state and guidance text is clearer across settings and docs

v1.3.036​

  • Added: Live balance display for AI providers in the API Keys settings tile, with per-provider refresh and last-updated timestamps
  • Added: Provider branding modal showing documentation links and provider identity, accessible from the API Keys tile
  • Added: Systems/API navigation entry in the WordPress admin sidebar for direct access to provider configuration
  • Improved: AI model logging unified across all providers; balance display strings localized

v1.3.035​

  • Changed: Keyword enrichment prefers AI web search context over page metadata when the two disagree, and context mismatch no longer forces a flagged quality state by itself
  • Added: Flagged-links review for enrichment results that need attention, with admin UI aligned to existing card styling
  • Added: Per-link model and max-tokens overrides (including OpenRouter model-limit hints and a quick “max tokens” action)
  • Added: Option to include manual keywords when re-running enrichment; clearer Keyword vs Context AI labeling in the admin
  • Improved: AI timeouts, provider-specific limits, and enrichment retries tuned to reduce spurious failures; better handling of HTML and edge-case page fetches during enrichment
  • Improved: Product License gateway validate-by-key refresh behavior and related diagnostics; licensing integration packages updated
  • Fixed: Checkbox accent styling so check marks stay visible with themed controls

v1.3.034​

  • Fixed: Re-activating a previously activated site no longer returns an error; the gateway recovers gracefully and confirms active status
  • Fixed: Product License status is now always set to active on activation, regardless of upstream response ordering
  • Improved: Gateway responses include consistent license identifier fields and explicit success signals for reliable client-side detection

v1.3.033​

  • Added: Keyword enrichment now runs up to 5 concurrent workers in parallel, significantly reducing the time to enrich large link libraries
  • Added: New Concurrent Workers setting (1–5, default 2) in the keyword enrichment settings; batch size limit raised to 50
  • Improved: AI requests that time out are automatically retried once with an extended timeout before a link is marked as skipped

v1.3.032​

  • Added: AI keyword enricher — generates anchor-text keyword phrases for LinkCentral link posts that have no keywords, enabling automatic link insertion on previously-skipped links
  • Added: LinkCentral keyword editor is now always visible on link posts when the integration is active, with no manual settings change required
  • Added: Keyword Enrichment section in the LinkCentral settings card with AI provider/model configuration, a keyword status line, and a batch trigger button that supports multi-batch continuation
  • Added: Cross-link candidate discovery now falls back to title-keyword search when shared taxonomy terms are sparse, improving cross-link coverage on lightly-categorized sites
  • Improved: LinkCentral settings card reorganized into collapsible sections with adaptive multi-select inputs for category and post-type filters
  • Improved: Manual process UI now includes post-title search with autocomplete, rich per-link result tables showing keyword and cross-link details, and a dry-run preview mode
  • Improved: Cross-link scoring adds article vocabulary overlap and skips the opening paragraph to avoid over-linking near the top of content
  • Improved: Custom taxonomies can now be selected as the basis for cross-link candidate discovery

v1.3.031​

  • Fixed: Gutenberg block editor now saves correctly on pages managed by page-builder plugins
  • Fixed: Block editor saves no longer fail for non-admin roles when a page-builder plugin is active
  • Fixed: Connected-sites status card hidden correctly when server mode is disabled

v1.3.030​

  • Fixed: Admin removal action now correctly provides success or error feedback after completing
  • Improved: JavaScript bundle no longer loads on non-plugin admin screens

v1.3.028​

  • Fixed: Toggle knobs in checkbox-grid toggle layouts now vertically center within the track

v1.3.027​

  • Internal improvements and maintenance

v1.3.026​

  • Internal improvements and maintenance

v1.3.025​

  • Fixed: Toggle switch icons (checkmark and X) now vertically center inside the knob on all admin pages
  • Fixed: Empty "Connection Status" section label no longer displays when FlowMattic is already installed

v1.3.023​

  • Fixed: Toggle switches in category filter and post type grids now display with correct label spacing
  • Fixed: Webhook endpoint URL fields now display at full width on both integration cards

v1.3.022​

  • Improved: Cross-Link Post Types setting now uses selectable toggle switches instead of a text input
  • Improved: Category Filter checkboxes converted to toggle switches for visual consistency
  • Improved: Webhook endpoint URL field widened to display full URL without truncation
  • Added: "View Docs" links on all integration cards linking to the documentation portal
  • Added: Squirrly SEO documentation page on the public docs site
  • Improved: Squirrly SEO Post Types checkboxes converted to toggle switches

v1.3.021​

  • Fixed: AI provider configuration from the Integrations tab now persists correctly instead of requiring navigation to the feature settings tab
  • Fixed: Max tokens refresh button and model-maximum hint now appear automatically on page load for areas with a configured provider and model

v1.3.020​

  • Added: Multi-provider AI support for LinkCentral cross-linking (OpenAI, Anthropic, OpenRouter, Gemini)
  • Fixed: Cross-link scoring now uses the provider, model, and max tokens configured for LinkCentral instead of hardcoded defaults
  • Improved: Systems/API tab with quick navigation for all integration sections, configured-count badge on AI keys, and section entry animations

v1.3.019​

  • Fixed: "Active Modules" stat card on the Admin tab showed an inflated "available" count that included hidden internal modules
  • Fixed: Stat card now applies the same filtering as the Module Management panel

v1.3.018​

  • Added: Stats dashboard row on the General tab showing key system metrics
  • Added: Section divider labels between card groups on key admin tabs
  • Added: Inline max-tokens refresh button on all AI-consuming areas
  • Improved: Tab navigation redesigned from pill style to bottom accent line
  • Improved: Card hover shadows, focus glow, and entrance stagger animations
  • Improved: Toggle switch animations with lighter off-track color and spring-physics knob
  • Improved: Integration tile gradient border hover effect
  • Improved: Modal entrance transitions and animated status indicator dots
  • Improved: Typography with tighter heading tracking and monospace code elements

v1.3.017​

  • Added: Refresh button next to max tokens field resets the value to the selected model's maximum
  • Fixed: Max tokens hint and refresh button now appear when the AI provider modal opens with a previously saved model
  • Improved: AI provider modal description clarified for module and integration context

v1.3.016​

  • Added: Max tokens field auto-populates with the model's output token limit when a model is selected
  • Added: "Model maximum: X tokens" hint displays below the max tokens field in the provider modal
  • Improved: Max tokens input validation dynamically adjusts its upper bound to match the selected model

v1.3.015​

  • Added: "View provider documentation" link now updates to model-specific docs page when a model is selected

v1.3.014​

  • Fixed: AI Provider configuration modal opens correctly from integration tiles and module configuration
  • Improved: Modal overlay displays correctly inside nested admin layouts

v1.3.013​

  • Fixed: Fatal error on certain PHP versions when registering AJAX handlers

v1.3.011​

  • Fixed: Module configuration modal CSS now correctly applies after modal is repositioned

v1.3.010​

  • Fixed: Module configuration modals now display as centered overlay popups instead of rendering inline at the bottom of the page
  • Improved: Modal backdrop uses consistent blur effect matching standardized modal styling

v1.3.008​

  • Fixed: AI modal field alignment for uniform full width across all WordPress admin environments
  • Improved: Loading indicator replaced with styled CSS spinner for model-fetch feedback

v1.3.007​

  • Added: Multi-provider AI configuration supporting OpenAI, Anthropic, OpenRouter, Gemini, and Perplexity
  • Added: AI provider selection modal with per-area model and token configuration
  • Added: 7 new integration tiles with plugin detection and conditional REST allowlist entries
  • Added: Manual post processing UI for auto-linking integration
  • Improved: Secrets encryption now validates success and preserves existing value on failure
  • Improved: All API keys encrypted at rest with automatic FlowMattic sync

v1.3.006​

  • Added: LinkCentral integration documentation and logo asset on the integrations card
  • Added: End-user documentation page with setup guide and FlowMattic walkthrough

v1.3.005​

  • Added: LinkCentral auto-linking integration with keyword insertion and cross-linking
  • Added: Internal cross-linking engine with heuristic and AI-enhanced scoring modes
  • Added: Admin settings card on System/API tab with configurable density limits and link behavior

v1.3.004​

  • Fixed: FlowMattic variables silently stopped syncing after a configuration change
  • Fixed: Derived user variables now correctly sync when user data changes

v1.3.001​

  • Fixed: Module dropdown actions (enable, disable, export, uninstall) were unresponsive
  • Fixed: Enable All and Disable All buttons on the Modules card were also unresponsive

v1.3.000​

  • Added: Modernized JavaScript build system for improved performance
  • Changed: Admin interface loads optimized scripts with automatic fallback for compatibility

v1.2.083​

  • Fixed: Notice suppression no longer inadvertently blocks unrelated admin notices
  • Added: Admin sidebar menu pinned to top position

v1.2.081​

  • Updated: Primary brand colors aligned to unified SyteWide brand palette
  • Updated: Warning color default changed from red to amber, visually separating warning from error states

v1.2.080​

  • Added: ContentPen affiliate links on Integrations tab and System/API heading
  • Updated: Module documentation now describes packages as SyteWide-distributed only

v1.2.079​

  • Fixed: License status showing "Inactive" on all endpoints because the check only consulted stale connection data
  • Fixed: License status now checks both product license and connection cache — either being valid shows "Active"

v1.2.078​

  • Fixed: License check modal showing all endpoints as "Inactive" because status fields were not forwarded to the browser

v1.2.077​

  • Added: Per-site "Check Licenses" dropdown action — scans endpoint and displays modal with license status and versions
  • Added: Master "Licensing: Check All" bulk action — concurrent scan of all endpoints with summary table modal

v1.2.076​

  • Added: Encrypted package system for secure module and workflow distribution
  • Added: Package key delivery pipeline — keys automatically delivered via license activation and server webhooks
  • Added: Module auto-update checker with one-click installation
  • Added: Workflow import/export for encrypted FlowMattic workflow template distribution

v1.2.075​

  • Added: "Buy SyteOps" link in the docs site navbar and footer

v1.2.074​

  • Redesigned: Documentation portal with modern visual theme — improved typography, dark mode, glass-blur navbar, and multi-section homepage
  • Added: Local full-text search, Mermaid diagram support, and image zoom
  • Added: Server Connections feature page with architecture diagram
  • Added: Custom components (Callout, Card, Steps, Badge) for richer documentation

v1.2.073​

  • Added: EULA displayed in the activation consent modal alongside Privacy Policy, Terms & Conditions, and Refund Policy
  • Added: EULA expandable panel in the post-activation License & Privacy details modal
  • Changed: Consent checkbox text updated to list EULA first

v1.2.072​

  • Fixed: Double confirmation dialog eliminated when deleting a user on the Roles & Users page
  • Fixed: User swap now preserves deleted and locked flags alongside user data

v1.2.071​

  • Fixed: JavaScript error that prevented page initialization and blocked Delete User from functioning
  • Changed: Delete button repositioned to the right of Save/Export/Import buttons on user cards

v1.2.070​

  • Added: Delete User functionality with gap-aware slot reuse
  • Added: Configurable "Max Users" setting on Admin tab (1–20)
  • Changed: Admin Users tab replaces the user count dropdown with an Add User button and active count display

v1.2.062​

  • Improved: User cards include a slot identifier so duplicate display names are easier to distinguish
  • Improved: Quick navigation appends the user slot only when multiple cards share the same visible name

v1.2.061​

  • Improved: Users section adds a top border, padding, and a centered heading row for clearer separation from Roles
  • Improved: User cards show the contact name as the heading when set

v1.2.060​

  • Fixed: "This plugin has not been tested with your current version of WordPress" false compatibility warning resolved

v1.2.059​

  • Added: Rich HTML sections and banner images for the WordPress View Details modal
  • Improved: CRM Platforms tab layout uses a cleaner two-column structure

v1.2.058​

  • Added: Non-admin users now see grayed-out role toggles with a padlock icon when a unique role is held by a locked user
  • Fixed: Phone Type / Map Preference dropdown width now renders correctly for all users

v1.2.056​

  • Added: "Users" submenu item under Admin in the SyteOps sidebar menu
  • Added: "Edit in Admin" button on the Roles & Users page for quick access to full user settings

v1.2.055​

  • Fixed: User lock/unlock toggle now persists across page refresh
  • Changed: Expanded user card avatar enlarged for better visibility

v1.2.054​

  • Added: Role count displayed next to the Roles heading
  • Moved: Add New Role button relocated into the Roles section heading
  • Removed: Redundant Roles submenu from the admin menu

v1.2.048​

  • Added: Admin toggle to control Roles & Users menu visibility for non-admin users

v1.2.047​

  • Added: WordPress role badges on Roles & Users user cards
  • Added: Quick access navigation buttons above user cards with smooth scrolling
  • Added: Collapsible user cards — click header to collapse or expand
  • Added: Lock toggle button on Admin/Users tab

v1.2.046​

  • Fixed: Sidebar menu title and page heading now use the white-label brand name instead of hardcoded text

v1.2.045​

  • Moved: Roles & Users page from standalone top-level menu to a submenu under SyteOps
  • Added: Locked user cards display an amber notice explaining the lock reason with tech contact info

v1.2.043​

  • Fixed: Staging red theme not displaying on SyteOps admin pages

v1.2.042​

  • Fixed: Fatal error when upgrading to a new module version while the old file remains on the server

v1.2.041​

  • Converted: Fluent Forms GDPR capture fix extracted into a proper module with auto-activation on upgrade

v1.2.040​

  • Removed: Redundant "Users Tab Backup / Restore" card from Users tab; backups are managed entirely in the Backup tab

v1.2.039​

  • Removed: UpdraftPlus email suppression feature
  • Fixed: LSCF Force Token authentication now works correctly during LiteSpeed save-settings flow
  • Fixed: Variable Sets Registry table no longer renders system sets as clickable links

v1.2.038​

  • Added: UpdraftPlus integration with backup status monitoring
  • Added: Combined backup detection shows green when either WPVivid or UpdraftPlus is installed
  • Added: Third-Party Backup Status card on Backup tab showing last backup timestamps and schedule
  • Added: Dismissible admin notice when UpdraftPlus has no remote storage configured

v1.2.034​

  • Improved: Staging environment dark red theme now displays on all admin pages, not just SyteOps pages

v1.2.033​

  • Fixed: Shrink-to-fit styles no longer affect non-SyteOps admin pages, preventing layout breakage on core WordPress screens

v1.2.031​

  • Fixed: Bulk plugin update failure toasts now display the site name instead of a truncated license key
  • Fixed: Array parameters now reach endpoints correctly during bulk plugin updates

v1.2.030​

  • Improved: Bulk plugin update toast now shows the error message when a site fails instead of only incrementing the failure count

v1.2.029​

  • Fixed: Endpoint plugin updates silently skipping because update data was flushed before the upgrader could read it
  • Improved: Plugin update toasts now show per-plugin failure reasons instead of just counts
  • Removed: Blank SyteWide Licensing tab from main admin nav bar

v1.2.028​

  • Fixed: User card header top corners now round correctly
  • Removed: Tabs with no user-specific content from Users area
  • Changed: "Update Available on All Endpoints" button label shortened to "Update All"

v1.2.026​

  • Fixed: Notice suppression no longer corrupts WooCommerce product pages
  • Fixed: Removed redundant brand prefixes from Quick Links menu items
  • Added: View Documentation link in SyteHero Quick Links section

v1.2.025​

  • Changed: "Purge Woo Product Cache" link now requires WooCommerce to be the selected ecommerce platform, not just installed

v1.2.024​

  • Fixed: All admin bar Quick Links cache buttons (LiteSpeed, Avada, Elementor, Divi, Blocksy, SyteHero, WooCommerce) were non-functional

v1.2.023​

  • Added: New licensing module with multi-product management, encrypted API credentials, and admin UI
  • Added: Mutual exclusion enforcement between licensing modules

v1.2.022​

  • Fixed: REST allowlist entries added directly on the endpoint are now preserved during scans instead of being auto-wiped

v1.2.020​

  • Added: WooCommerce cache purge option in Quick Links cache menu
  • Improved: Server Connections dropdown with prefixed labels and logical grouping
  • Added: Type-to-confirm modal for "Uninstall SyteOps" requiring the domain name
  • Improved: FlowMattic actions hidden when FlowMattic is not installed on the endpoint

v1.2.018​

  • Fixed: Page reloads after any Quick Links cache clear so cache state is visible immediately
  • Added: LiteSpeed CDN purge option in Quick Links cache menu
  • Fixed: Divi dual-cache clear now works correctly

v1.2.017​

  • Improved: Cache features are now auto-detected at runtime instead of requiring a manual integration toggle
  • Added: Blocksy theme cache clear support in the admin bar Quick Links menu
  • Added: "Clear Divi Cache" now also clears Divi localStorage keys

v1.2.016​

  • Added: "Server" submenu item in the WordPress sidebar under SyteOps, visible only when server mode is enabled
  • Added: Mid-path wildcard support in REST allowlist entries

v1.2.014​

  • Added: Enable/Disable REST API Monitoring option in each connection's Actions dropdown
  • Added: REST API Monitoring status badge in the connection status column
  • Changed: Manage REST Allowlist option is now hidden when REST is unrestricted

v1.2.012​

  • Improved: REST API restriction hardened — discovery gated, WooCommerce routes no longer open by default, badge colors updated (restricted = green, unrestricted = red)

v1.2.010​

  • Improved: Reactivation flow with better CTA and auto-enable of modules after license reactivation
  • Fixed: REST whitelisted badge now shows correct color when allowlisted
  • Security: Module AJAX handler now requires authentication to prevent unauthenticated data access

v1.2.007​

  • Improved: Gateway REST routes return a structured maintenance message and support contact when disabled instead of a 404 error

v1.2.005​

  • Improved: All admin AJAX handlers now use a single verification helper for consistent security checks

v1.2.004​

  • Security: Block All REST API toggle now blocks all requests with no exceptions when enabled

v1.2.003​

  • Added: General-purpose "Block All REST API" toggle in Access Control that works on any install regardless of directory structure

v1.2.002​

  • Improved: Block REST API toggle now visible on both parent and subdirectory installs with contextual warnings

v1.2.001​

  • Security: REST API is now blocked on subdirectory installs when REST restriction is enabled

v1.2.000​

  • Major release: Plugin renamed from SyteFlow to SyteOps with full identifier migration
  • Added: Automated migration tool for existing SyteFlow sites — one-click admin banner, AJAX action, and WP-CLI command
  • Changed: ContentPen webhook URL updated to new namespace (reconfiguration required)