Phyllix changelog
=================

The full history of every release. readme.txt keeps only the latest few,
because WordPress.org shows the first 5,000 characters of a changelog.

= 2.3.5 =
* Fixed: automation's daily page improvements could stall for days. Your homepage and menu pages are never improved automatically, but they were still being chosen first (they get the most visits from Google), which used up the day's share and left the log saying "no page is ready to improve right now" while other pages were waiting. They are now left out before choosing, and if a chosen page cannot be started, the next one takes its place.
* Changed: one set of rules now decides when a page can be improved, on Results, Improve pages, Keywords, AI visibility and in automation alike. A new page settles for 28 days. After an improvement, a page is measured for two months and then judged only on Google's figures since the change, for the search it was improved for (fetched from Search Console) where there is enough: if it climbed at least three places, gets half again as many clicks, or is shown half again as often, it is left alone; if it is still on page two or barely clicked it can be improved again. Pages that are winning or climbing are left alone. After three improvements with no movement, the page says so and is not rewritten again. The improve buttons only appear when a page is due; until then the row says when it will be judged.
* Fixed: page improvements that an older version of Phyllix started and stopped half way (plan made, page never rewritten) blocked those pages for good. Automation now sets them aside and improves those pages afresh.
* Fixed: competitor gaps now reach your articles. Ideas the duplicate check was unsure about waited for a person forever, and almost every competitor gap is one of those, so automation never wrote them. After a week with nobody deciding, automation now decides: kept as its own idea when it differs (another area, angle, season and so on), or set aside, with the uncovered alternative it suggested looked at instead.
* New: a plan you start yourself (Boost this page, Improve) that waits a week without "Improve it" or "Not now" is approved by automation and carried through to the live page, as its own would be. The plan card shows the date; correcting the plan gives you another week. Not for your homepage or menu pages.
* Changed: ideas from each source (local, general, competitor gaps, AI visibility) take fair turns: the source with the fewest ideas approved in the last month goes next, instead of a random draw.
* Changed: the Competitor gaps screen says what automation decided about each gap: already an idea, the same as an idea you have, or judged not worth an article yet (with its score, in a folded section). A gold button now only means nobody has looked yet. The resolved list shows each gap once.
* Changed: on the Published screen, "Published pages" folds away like the other sections, with the number of pages on its heading.
* Fixed: local articles now reach every area you serve, in turn. The area list in your business profile is read properly (a heading such as "including service areas:" and full stops are no longer taken for places, so no area is lost). Turns go to the areas with the fewest local articles from Phyllix, so older pages on your site that mention a town no longer make it look done. When local ideas are approved, the area with the fewest local articles goes first rather than the best-known one, and a new round of local ideas starts as soon as fewer than a full round are waiting, instead of once a month.
* Fixed: AI visibility now renews and moves on its own. The weekly check runs every week (it was skipped while any AI-visibility idea was waiting). Your own questions and the suggested ones share each check, the longest-waiting first, so every question gets its turn; a long list of your own used to fill every check with the same questions. New questions are suggested whenever fewer than half a check's worth are still unasked, and they are told what is already tested so they are new. Losing questions now say what automation decided, as on Competitor gaps, and its weekly look at losing questions, competitor gaps and keyword gaps is no longer held back for a month by ideas already waiting.
* Fixed: articles no longer link to Google's temporary research addresses (vertexaisearch.cloud.google.com/grounding-api-redirect/…). Those addresses stop working within weeks, and the writer cited whatever address a source came with, so articles collected dead links. Sources are now stored with the real page they lead to; one that cannot be followed keeps its name and loses its link, so it is never cited. Any such link that still reaches a page or a new draft is pointed at the real page while it can still be followed, or unlinked once it has expired (its words are kept). Site health finds any already on your pages.
* Fixed: Site health checks every page. Each weekly scan stopped after about 40 seconds and started from the top again next time, so on a site with many links the later pages were never checked for anything. It now carries on where it stopped until the whole list is done, remembering for a day which links it has already checked.
* Fixed: good links are no longer removed as "broken". A link counted as broken when a site turned away the quick automatic check (common on large sites), did not answer it, replied slowly or had a server hiccup — and with automatic fixes on, those links were unlinked. Now a link is broken only when the page is really gone: "not found" when asked the way a browser asks, or a domain that no longer exists.
* Changed: page speed. Without a PageSpeed key Google now turns speed checks away. After the first refusal the rest of that round is skipped, and the Site health page says plainly that speed is not being measured and that a free key fixes it (it used to say speed still worked without one).
* Fixed: an idea whose draft failed is written again. A failed draft put its idea back on the list "to try again", but the failed draft still counted as the idea's article, so automation skipped the idea for good and Write now said it was already being written. Failed drafts no longer count; automation tries an idea at most twice and then leaves it to you (Write now always works).
* Fixed: links that open an idea's draft follow it: once the article is live they open it on Published (the folded section opens and the row is highlighted), and they always point at the newest draft, not an older failed one.
* Fixed: the "edit" link on suggested links to a new article was empty when automation had written the article. It is now made when you open the screen.
* Changed: the Technical SEO screen remembers its check of your llms.txt for six hours (and checks again as soon as the file is rebuilt) instead of asking your site on every visit, which made the screen wait up to eight seconds on some hosts.
* Fixed: on a phone, no screen scrolls sideways any more: tabs wrap, long button labels wrap, and wide tables (Keywords, Activity) scroll on their own.
* Fixed: a button pressed with its box still empty (Add or direct on AI visibility, and the instruction boxes when improving a page) now says what to type, under the box, and puts you in it. Before, nothing visible happened.

= 2.3.4 =
* New: after setup, Home says which automation level is on and what that leaves you to do (on Full, nothing). Under it, a "Happening now" box shows what Phyllix is doing at that moment, wherever it was started, and updates as it happens. When nothing is running it says when the next automatic run is.
* Changed: the Free plan card moved down, between Controls and Recent activity, so it no longer sits in the middle of your work.
* Fixed: the three buttons in the automation choice after setup now line up.
* Changed: the automatic rounds now do everything the Home buttons used to: they also re-check your site's health every week, look for your competitors (weekly until some are found, then monthly; ones you named in your profile are added, others wait for you), and propose more ideas the same day writing runs out of them, instead of waiting for the weekly ideas day.
* Changed: rebuilding the business profile (by hand or in the weekly round) builds on your work instead of starting again. Sections you edited and your answers were already never touched; now the rebuild is also told them, so the sections it refreshes agree with what you said, a section it finds nothing new for keeps its earlier text instead of being blanked, and a question you answered or marked "Not relevant" is never asked again (new questions still appear).

= 2.3.3 =
* New: one-button setup. After you connect, Home shows a single Start button. Phyllix then reads your site, learns your business, maps your content, finds the gaps, researches your market, proposes local and article ideas and runs the free site checks, one after another, with a meter showing what it is doing. You can close the page; it carries on. When it has finished, you check your business profile and answer its questions, and Phyllix offers to keep working on its own (Settings → Automation).
* Changed: Home is simpler. Once set up, it shows what is waiting for you and four boxes: Find the gaps, Research the market, Local content and Service areas page. Every other step runs from its own page; Rebuild the profile and Re-read the website are now on the Business Profile page, and Run the full setup again is under Controls on Home.
* New: once setup is finished and your profile lists your services and the areas you serve, Home suggests creating your service areas page as the next step (one click, saved as a draft, and it says how many of your plan's articles it uses). "Not now" hides the suggestion; the box stays on Home.
* New: on the Free plan, Home shows how many of your free articles are left and what a paid plan adds, with a button to the plans in Settings. When setup offers automation, it says plainly that on Free automation stops writing once the free articles are used.
* Changed: a question Phyllix could not answer is no longer asked once you have filled in that part of the business profile yourself.
* Changed: when Phyllix could not work out a required part of your business profile (for example what the business does or its current priorities), setup does not continue until it is filled in. Home and the Business Profile page list what is missing, each a link straight to its section, and the Continue button appears once they are saved.
* Changed: the foot of the Business Profile page is tidier: Rebuild the profile and Re-read the website sit together in one card, and the next step says where you are (continue setup, answer Phyllix's questions on Home, or back to Home).
* Fixed: "Go to Home" on the Business Profile page and "Propose more ideas" on the Ideas page went to a page that does not exist ("Sorry, you are not allowed to access this page"). They now go to Home.
* New: articles are no longer all built the same way. Each article gets its own shape: the kind of piece (for example a step-by-step, a comparison, a decision guide, troubleshooting, myths and facts, a job from start to finish), how it opens, how it is laid out and how it ends, chosen to suit the topic and kept different from the site's recent articles. Tables appear where a comparison or cost breakdown needs one, not in every article.
* Changed: every article still answers the questions people actually ask (what AI assistants quote), in one of three ways: an FAQ at the end, questions as the section headings, or a short "Quick answers" section near the top. FAQ schema follows whichever one the article uses.
* Changed: the quality review and revisions keep each article's shape, instead of asking for a table, list or FAQ section the article was not meant to have.
* Fixed: the buttons on the Home screen (Research the market, Propose local content and others) showed as idle again while the AI was still working, which invited a second click and a second, paid run. They now show as running until the work is done.
* New: a licence key entered before Phyllix is connected is kept and activated automatically as soon as you connect, and the message now has a "Connect Phyllix now" button.
* Changed: when the welcome screen does not offer automatic updates, it says why (for example, they are already on, or the host has switched them off).
* Fixed: after an update, Phyllix's screens could keep the previous version's look (for example a small Start button) because the browser or host kept the old stylesheet. The stylesheet and script now get a new address whenever they change.

= 2.3.1 =
* Fixed: the 2.3.0 download from WordPress.org was missing two files, so Phyllix could stop with an error after installing or updating. 2.3.1 includes everything; update to it.
* New: Phyllix offers, once, to switch on WordPress's own automatic updates for itself (the same setting as "Enable auto-updates" on the Plugins screen). On a new install it asks on the welcome screen, with two buttons: connect and keep Phyllix up to date, or connect and update it yourself. Sites that are already connected see a one-time notice instead. Nothing changes unless you click; "No thanks" hides it for good.
* Fixed: since 2.3.0 the Phyllix home screen (and the welcome screen) was shown twice, one copy under the other.
* New: on sites managed through an agency, the agency can keep Phyllix up to date from its console.
* Changed: your homepage and the pages in your site menu are never rewritten and never given a call-to-action block, by automation or from any button (Improve pages, Search pages, Results, AI visibility, Site health, Win enquiries). They are usually designed by hand, often with a page builder, and an automatic change could break the layout. Quick fixes still covers their meta descriptions, links and schema.
* Fixed: an approved idea could say "Research did not finish" while its research was still running. It now shows research in progress until it is ready, and only says it did not finish when it really failed, with the reason. Write draft also waits for it, so the same research is not paid for twice.
* Faster: when a new draft is missing its focus keyphrase in the opening, Phyllix now rewrites just that opening paragraph (a few seconds) instead of writing the whole article again. If that doesn't work, it writes it again as before.
* Changed: AI visibility now shows how you were named for each question: in the recommended list, or only mentioned (for example, an article of yours being quoted), with the sentence from the answer. A new tile counts how often you are in the recommended list. The screen also says which assistant does the checking (Google's Gemini, searching Google); ChatGPT and others can answer differently.
* Fixed: a picture used as the Phyllix menu icon (for example by a site builder's own branding) is always shown at normal icon size; before, a large image could cover the whole left of the WordPress screen. A brand logo can now appear at the top of the Phyllix home screen (filter: phyllix_header_logo).
* New: a site builder can hide the automation part of Settings (level, schedule, pace and budget) when they run it for the site (filter: phyllix_show_settings_section). The settings themselves are kept exactly as they are.

= 2.3.0 =
* New: Phyllix can be shown under another name. Site builders and agencies can rename it in the menu and screens, change its menu icon, point "See plans" links to their own page, and keep plan, licence and credit screens to the people who manage the account. These are standard WordPress filters (documented in includes/class-aimos-brand.php); nothing changes unless a site uses them.
* Changed: the small labels Phyllix leaves behind (the comment above its FAQ schema, the line it adds to robots.txt, and the section names it adds in Divi) follow that name too.
* Changed: local content now covers every area in your Business Profile, not just the best-known ones. Each run works on the areas with the least local content so far (counting the articles Phyllix has already written), at most two ideas per area, and areas take turns. Every idea is a different topic, never the same article with the town swapped.
* New: two plans for agencies, Power Agency (30 sites) and Enterprise (prepaid credit bundles, unlimited sites), in Settings → Your plan.
* New: a site can keep some Phyllix pages from some users (they leave that person's menu and tabs), and settings managed from elsewhere show read-only with a note instead of an input that would not stick.
* New: "Keep my schedule on time" (Settings → Automation → Advanced, on by default). With a licence connected, the Phyllix service reminds your site every few minutes to run its queue, so work starts on time even on a quiet site or one with WP-Cron switched off. Only calls signed with your licence key are accepted.
* New: the licence check includes a short health report (counts and dates only), so the licence owner is emailed when a site stops writing, gets stuck, or has articles failing.

= 2.2.1 =
* Fixed: Phyllix's internal linking (Quick fixes' orphan-page links, and links to new articles) could put a link inside a page's hidden structured data (schema). That made the schema invalid, so Google could not read it, and on a background save WordPress then stripped its wrapper and the code showed to visitors. Every linker now goes through one safe placer that never writes inside schema, scripts, code or block settings.
* Fixed: schema that a link was pushed into is now repaired too — whether it is showing as code or still hidden but broken. The link is taken out and the page's own schema put back. These pages are listed with the free schema repairs at the top of Quick fixes ("Repair all"), and are repaired automatically when Quick fixes automation is on.
* Fixed: a background save no longer turns a schema block with a pushed-in link into visible code; the block is cleaned and kept.

= 2.2.0 =
* Changed: automation now works every day instead of all at once on one day a week. Research still runs through the week; articles are approved, written and published each day at the time set in Settings, spread evenly across the week, and page improvements follow a few hours later — so the two never land on your server together. A day that gets missed is made up the next day, never in a burst.
* New: Settings → Automation → "Articles per week" and "Articles per day (max)". The per-day maximum replaces "Start at most this many at once".
* Changed: ideas are approved as each day's articles need them, so the rest stay open for you to reject or reorder until they are needed.
* Changed: the split between new articles and improving pages now protects both sides properly. Each side keeps its own share of the month; one side may only use the other's spare — for example when the other is switched off or has had nothing to do for a week. Before, a single run with nothing to improve let articles take the whole month, and switching improvements off left their share unused.
* Changed: page improvements are paced through the month within their share, instead of spending it all in the first week, and take fair turns between Improve pages (nearly ranking, and under-clicked), Results, Keywords and Site health. Broken pages go first, but never twice in a row while other kinds wait.
* Changed: on plans with several sites, each site now gets its plan's full number of page improvements; the shared allowance decides how far it goes.
* Changed: "Run automation now" does one day's worth of everything switched on, right away, and no longer uses up automation's week or its shares. Your own clicks are never limited by automation's pace either.
* Changed: on an Agency plan, a site that runs out of allowance says the account owner needs to add credits, instead of showing a buy button to whoever is logged in.
* Improved: Activity shows each day's articles and page improvements in plain words, including why anything was held back.
* New: when the AI assistants stop naming you for a question they used to name you for, and a page on your site already answers it, Phyllix now strengthens that page — as its own kind of page improvement, taking fair turns with the others, shown as "AI visibility" under Found via. Before, these dropped out of sight because a page already covered the topic, and nothing acted on them. The AI Visibility screen lists them under "Questions you used to win", with a button to do the same by hand.
* Fixed: on AI Visibility, questions that come back "Yes" (the AI names you) now move straight from the main list to the collapsible list of questions you're already named for, instead of staying on the main list until the next check. Your own typed questions now do the same instead of being asked every time. Each won question is checked again about once a month, ahead of brand-new questions; if it no longer names you, it moves back to the main list and to "Questions you are losing". "Clear and rebuild" no longer removes won questions for good.

= 2.1.2 =
* Changed: live pages that went out broken are now listed where they get fixed. Pages showing schema code to visitors sit at the top of Quick fixes, with a free "Repair all". Pages with leftover AI text sit at the top of Improve pages as "Fix these first", ahead of the ranking suggestions — shown even before Search Console is connected. Before, both lists were tucked into Site health.
* New: the Quick fixes and Improve pages tabs show a small count when broken pages are waiting there, so they get noticed without going looking.
* Changed: Site health now shows one line pointing to where those pages are fixed, instead of a second copy of each list.

= 2.1.1 =
* Fixed: Improve pages and Win enquiries refused to run on a page whose structured data (schema) had lost its hidden wrapper and was showing to visitors as a block of code. WordPress's own save filter does this when a page is saved in the background — earlier versions of Phyllix triggered it when they changed a page on a schedule, which 2.1.0 already stopped. Phyllix now puts the schema back where it belongs as part of the change instead of refusing, and Undo still restores the page exactly as it was.
* New: Site health lists every page with schema showing as text, with a free one-click repair per page and "Repair all" — no AI, nothing rewritten, the original kept. Before, the only offer was a full paid rewrite, or deleting the schema.
* New: automation now covers Site health too. With Quick fixes switched on, schema showing as text is repaired automatically (free). With Improve pages switched on, a page Site health finds with leftover AI text is cleaned up by automation, ahead of other improvements. Pages in your navigation menu are still always left for you.
* New: "Found via" on Published's list of improved pages now also shows Site health.
* Fixed: the floating progress banner at the bottom of the screen was see-through — only its border showed, and its white text was invisible against the page behind it. A typo in a stylesheet comment was making browsers skip the line that sets its background. It is solid dark green again, with white text.
* Improved: Settings → Content to read shows each content type as its own tidy box with its item count, instead of one crowded line.

= 2.1.0 =
* New: Improve pages now works on any page, however it was built — the block editor, the classic editor, Elementor, Divi (4 and 5), WPBakery, Avada, Beaver Builder and Bricks. It rewrites only the text inside your existing layout, leaves every section, column, image, form, embed and style exactly where it was, and adds any new section in your builder's own format. Before, a page built with a page builder was refused outright. Oxygen, Breakdance, Brizy, Thrive and SiteOrigin pages are still left alone, and the message now names the builder.
* New: "Fix a detail" and Win enquiries also work on page-builder pages, and a call to action added to an Elementor or Divi page is now built as a real section of that page, so it actually shows.
* New: Undo on an improved page puts back exactly what was there — body and page-builder data alike, byte for byte.
* New: the preview of an improved page shows the real result on Elementor pages too, not the old version.
* New: Settings → Automation is now one section of its own: pick a level (Off, Light, Balanced, Full) and every switch below it is set for you, then fine-tune. The switches are grouped by what they touch — finding ideas, writing and publishing articles, improving live pages — each with a one-line summary and the full explanation one click away. Schedule, "Run it now", pace and budget sit in the same place. Nothing about how automation behaves has changed.
* New: a fresh look — a new colour scheme, and consistent buttons, cards, tabs, tables and form fields across every screen.
* Fixed: saving a page could quietly damage it. WordPress strips one layer of backslashes from everything saved, which broke block settings that contain quotes or an ampersand (for example an image caption) and page-builder data. Every save Phyllix makes now protects against this — applying an improvement, Undo, your own edits in Search pages and Drafts, and adding a call to action.
* Fixed: a change applied by automation in the background could strip embedded videos, maps and scripts from the page, because WordPress's HTML filter runs when no user is logged in. Content you put on the page yourself is now kept exactly as it was.
* Fixed: publishing a draft or updating a meta description in the background could quietly re-filter the whole article body. Only the field being changed is touched now.
* Fixed: improving a very long classic-editor page could lose the end of the page. Long pages are now improved section by section.
* Fixed: the safety check could refuse a perfectly good change on a Divi or WPBakery page because it read the builder's shortcodes as page text.
* Fixed: reading your site skipped the text inside Divi and WPBakery sections and read an out-of-date copy of Elementor pages. It now reads what visitors actually see.
* Fixed: the Search pages editor offered raw editing of page-builder pages, which would have flattened them. It now links straight to the page's own builder instead.
* Fixed: the next scheduled run times in Settings showed in UTC instead of your site's timezone.
* Removed: the automatic dark mode. WordPress's own admin is always light, so on a computer set to dark mode Phyllix used to show dark cards inside a light admin.

= 2.0.24 =
* Added: a note on the Licence panel when a site has not yet connected — activating a key was silently refused with no visible message in that state (the request never left the site), which looked exactly like a rejected or broken key. It now says plainly that connecting comes first.
* Housekeeping: cleared the last few Plugin Check findings ahead of resubmission — two admin-log columns (who fixed a call to action / a Boost rewrite) were plain text with no possible dynamic content but went through the table cell unescaped; both now run through esc_html() at output like everywhere else. One AJAX handler (the automation "run now" poll) was missing the same "nonce already verified above" annotation every other handler in this file already carries, so the scanner flagged its one $_POST read even though check_ajax_referer() already covers it.

= 2.0.23 =
* Fixed: the "Write the approved ones" step on Home could show "Running" / "Writing N articles" forever, with no way to clear it — even a hard refresh or an incognito window made no difference. The cause: once an article's own record is updated to reflect that its page actually went live, that status was never added to the list of "this one is finished, stop counting it" statuses used in three places, so a genuinely finished, published article kept being counted as still being written, indefinitely. Fixed at the source with one shared list instead of three separate copies, so it can't happen again.
* Fixed a related, more serious risk this same gap caused: the "Stop everything currently being written" button did not recognise an already-published article as something it must never touch, unlike an already-drafted one. It's now refused the same way, so a stuck-looking step can never be "stopped" into silently marking a live, published article as failed and sending its idea back to be written all over again.

= 2.0.22 =
* Changed: Quick fixes and Win enquiries now also get applied on the regular 5-minute check, not only on the weekly run — so a fix that recovers (for example, a call to action that failed only because no destination was configured yet) doesn't have to wait up to a week for its next chance. This never applies more than your weekly settings already allow; it only means less waiting when something becomes fixable between scheduled runs.

= 2.0.21 =
* Fixed: the floating "automation is running" progress banner could end up unreadable — white text with no visible background, only its border showing — when something else on the page (a WordPress core notice, the active theme, another plugin) won a styling conflict against it. Its colour and stacking are now locked down against that regardless of what else is on the page.

= 2.0.20 =
* Fixed: a call to action that failed to auto-apply because no destination was configured at the time stayed stuck in that state forever — every automated run kept retrying the exact same broken, empty-button proposal from when it was first composed, failing the same way every time, even long after real destinations were added in Settings. It's now reset for a fresh attempt when this specific failure happens, so it genuinely recovers on the next run instead of being permanently stuck.

= 2.0.19 =
* Changed: each group under Published's "Other automated actions" (Competitor gaps, AI Visibility, Win enquiries, and the rest) is now its own collapsible section, closed by default — a much shorter page at a glance, with the full detail still one click away.

= 2.0.18 =
* Added: Published's "Pages Boost has improved" list now shows where each improvement was originally found — Results, Improve pages, or Keywords — next to who fixed it and when. Covers both automation's own picks and your own manual clicks from those three screens.

= 2.0.17 =
* Fixed: Quick Fixes' "link an orphaned page in" almost always failed with "Nothing could be linked safely," even across pages that clearly had a natural place to link from. The step choosing which phrase to turn into a link was only ever shown a short, paraphrased summary of each candidate page — never its real text — so it was effectively guessing at wording it had never actually read, then presenting that guess with the confidence of an exact quote. It now reads the real text of a handful of the most topically relevant candidates (narrowed first, for free, using topic data already captured when each page was crawled) before choosing a phrase, so what it picks is a genuine quote rather than a coincidence.
* Fixed: a phrase could pass verification and still fail to apply, because the two steps checked different things — verification used a loose substring search that said "found" for a phrase sitting inside a heading, while applying it used a stricter rule that correctly refuses to turn a heading into a random inline link. Both now share the exact same rule, so a fix is never marked as findable and then silently fail later.

= 2.0.16 =
* Fixed: automated page improvements (Boost, drawing on Results, Improve pages and Keywords) always stopped after diagnosing a plan and sat waiting for approval forever, even with automation turned on and even on a page with nothing stopping it — the setting's own description already promised full automatic prepare-and-apply, but nothing ever actually carried an automated diagnosis through to the rewrite. It now does, under the exact same conditions the setting already describes (never on a page in your navigation menu).
* Fixed: a call to action's automatic destination was picked by whichever contact link happened to be listed first, regardless of type — a page with several WhatsApp numbers and one quote page could end up offering two WhatsApp numbers instead of a quote page and a WhatsApp number. Automation now picks by destination type (a page on your site, then email, then WhatsApp, then phone, then text message), one of each of the top two types present, however many links you've added or however they're ordered.
* Added: Published now shows every call to action and every page improvement that has actually gone live, whether you added it yourself or automation did — collapsed by default, with who did it, when, a link to view it live, and an "Edit here" that lets you change the wording or destination and update the live page, or undo it back to how it was before.
* Fixed: undoing an applied page improvement didn't update its own record, so it could still show as "applied" after being reverted. Undoing a call to action or a page improvement now correctly puts it back to waiting for review either way.

= 2.0.15 =
* The real fix for the daily automated cycle stalling after reading the site and pulling Search Console data, then going quiet on some hosting — every AI call outside the article-writing pipeline (reading a page, building the knowledge base, mapping content, finding SEO/keyword gaps, checking AI Visibility, checking competitors, proposing ideas, scoring findings, composing a Win-enquiries call to action, writing the service-areas page, learning from a published edit) was still holding its own WordPress request open for the length of the call — exactly the exposure the article pipeline's own async rework already closed. On a host whose CDN/edge layer or PHP-FPM kills a long-held connection, that call just vanished mid-run with no error, which is what read as automation reliably completing the early, cheap steps and then stopping. All of it now starts the call and returns immediately, resuming once the result actually lands, the same pattern the writer already used.
* Found and fixed two real, already-live bugs while doing this: competitor discovery's own docblock said it fired asynchronously, but the actual call passed extra arguments to the synchronous method instead — PHP silently drops arguments a function doesn't declare, so this ran fully blocking for months and its result was thrown away every time, meaning discovered competitors were never actually added. Separately, the three automated "is this worth an idea" sweeps (competitor gaps, keyword gaps, AI Visibility losses) scored every finding with a blocking AI call inside a loop, one call per finding, back to back, in a single request — now each finding is queued as its own async job instead.
* A synchronous helper only ever used inside an already-async job (competitor-name extraction inside the AI Visibility check) also moved onto the same async pattern, plus a couple of confirmed-dead synchronous functions removed where an async twin had already fully replaced them.

= 2.0.14 =
* Fixed: the real bug behind two remaining translator-comment warnings — the comment sat above the variable assignment, not directly above the translated string two lines below it (a multi-line ternary). Moved to the correct line, above each branch.
* Fixed every remaining "output not escaped" warning on the admin screens, root and branch. A `phpcs:ignore`/`phpcs:disable` comment does not reliably suppress this check, however correct the reasoning underneath it, so every instance of two patterns was rebuilt to need no suppression at all: (1) a card-building method that returned a pre-built HTML string for another method to `echo` — `render_pipeline()`, `render_idea()`, `render_knowledge_card()`, `rules_list_html()`, `render_prep_state()`, `render_conversion()`, `render_seo_check()` and `step_bar()` now print their own output directly, and the few places that still need the HTML as a string (an AJAX response) capture it locally instead; (2) a value already cast to a number earlier in the method, then printed several lines later — every such value is now cast again at the exact point it is printed, which is what the check is actually able to verify.

= 2.0.11 =
* Fixed: three untranslated placeholders in automated keyword/competitor-gap proposals were missing their "translators:" comments — added.
* Fixed: the review panel's status line had its translator comments sitting above the wrong line for the sniff that checks for them — moved directly above each translated string.
* Fixed: `Tested up to` used a patch version (7.1.1); wp.org only accepts major.minor — trimmed to 7.1.
* Fixed: the short description was cut off at wp.org's 150-character limit — shortened to fit.

= 2.0.10 =
* Major release: optional automation. Off by default — Phyllix keeps working exactly as before (drafts only, every page edit shown as a proposal first) until you deliberately turn something on in Settings → Automation.
* Granular, opt-in levels: automatically send findings to your Ideas queue, approve ideas, write drafts, publish articles, and apply quick fixes/calls to action/page improvements — each its own toggle, so you can automate one stage and keep the rest manual. A configurable pace and a budget split between new articles and improving existing pages.
* Full audit trail: every idea, draft and published article records when it was proposed, approved, written and published, and by whom — visible everywhere that matters, distinguishing your own actions from automation's.
* Navigation-menu pages are never touched by any automated action, at any setting, with no override — including automatic internal linking, a gap closed in this release.
* Automatic publishing now checks for finished drafts every few minutes rather than once a week, and works through a backlog oldest-first rather than newest-first, so nothing genuinely finished is ever left stuck waiting behind newer work.
* Published pages: "Edit here" now opens everything in one place — the SEO fields, the article body, then Update/Unpublish/Trash/View/Cancel, with the full review (score, what was fixed automatically, what is still open) underneath. Unpublish and Trash reach a published article for the first time; "Mark ready to publish" does the same for your own drafts. "Reconnect Phyllix" in Settings covers a stuck connection, and "Clear error & try again" fixes a failed step showing a stale error.
* AI Visibility question generation rebuilt on genuine AI reasoning instead of a template. Win-enquiries calls to action can compose and apply themselves automatically when you turn that on. A "possible duplicate" flag on drafts that weakly overlap an existing page.
* A number of correctness and billing-accuracy fixes found in an internal audit ahead of this release: several real-money AI calls that were running untagged (never double-charged to you, but invisible to our own cost tracking), a queue retry-counting bug, a budget-reservation race between overlapping automation runs, and one AI-research destination missing from External Services — added.
* Every automation feature above is entirely optional. If you do nothing in Settings → Automation, Phyllix behaves exactly as it always has.

= Versions before 2.0.0 =
Full version-by-version history available in the plugin's own repository. Every version before 2.0.0 predates the automation feature entirely — each one describes Phyllix's manual-only, draft-and-propose behaviour, which remains the default today.
