Divi Autopilot

Changelog

Every release since the 1.0 commercial launch, newest first. This page is written from the plugin’s own readme, so it says what actually shipped.

1.7.2

current

 

  • Second dogfood find, same client site: The plugin was auditing its own test fixtures as the customer’s content: probe pages stranded by runs the 1.7.1 lock bug killed showed up as SEO and QA failures on pages the customer never made. Both audits went clean the moment the debris was removed.
  • The fix: The probes now carry the swept fixture prefix, the old name is legacy-swept so pages leaked by earlier versions are reclaimed automatically on the next run, and two new self-test checks pin both.

1.7.1

 

  • Found dogfooding, fixed same day: We ran the plugin on a real client site on WP Engine and its own self-test could not finish: chunked runs pinned at the same cursor forever. Diagnosed, fixed, and verified on that same site within the hour.
  • The cause: On hosts with a persistent object cache, a transient with a TTL lives only in the cache — never the database — so eviction erased the run lock mid-pause and the resume path reaped the paused run as abandoned.
  • The fix: The lock is now a database-backed option with its own expiry, and every read and write of the lock and the paused state flushes the object-cache key. The host cache can neither evict a run nor serve it stale.
  • Honest fixtures: Two self-test checks assumed a fresh site whose typography the fixtures could control. On a lived-in site whose own headings join the vote, they now pin what is actually guaranteed — and say why they skipped the rest.

1.7.0

 

  • The connection pill: Every screen of the app now says, at a glance, when the site last heard from Claude — green while requests are fresh, amber after a silent week, grey when no client has ever called in. The pill links to the Connection tab.
  • Honest by design: A stateless connector holds no socket open, so there is no true “connected right now” to show. The pill shows the one thing the server actually knows — the time of the last authenticated call — and never pretends otherwise.
  • Durable: The timestamp is a latch recorded on every authenticated request, so it survives the activity log aging out or being switched off. The Connection tab reads the same latch and no longer claims a bare “connected” with no time on long-idle sites.
  • Pinned: Uninstall removes the latch, and new self-test checks pin the recorder, the reader, the pill states and the cleanup.

1.6.1

 

  • Agent sweep, round two: Four independent adversarial review agents against the whole surface. Twelve confirmed findings, all fixed same-day and pinned in a new self-test group.
  • Paywall hardened: A crafted request could run a Pro site-level fix on Free by riding a page id past the gate — closed on both doors, wp-admin and the connector.
  • Tokenize verify fixed: A page that also displays one of its colours (a code sample, a style guide) no longer rolls back a clean tokenize with an error.
  • Honest contrast math: rgb() channels above 255 now clamp to what the browser paints, so an overdriven value can no longer slip past the AA gate.
  • Specimens everywhere: Type-scale findings sourced from your site’s own mined convention now render their specimens too.
  • Controls survive errors: A network blip or expired session no longer removes Fix buttons until reload; review panels load once; one audit loop per screen.
  • Fix All: An apply must present the plan token of the plan it displayed, and plan and apply now agree on their arithmetic.

1.6.0

 

  • Search previews: SEO title and description findings now show the page as a Google result — the part search engines keep bright, the part they cut struck through, missing fields flagged in red.
  • Heading outline: Heading findings open the page’s real outline: every heading indented by level, skipped levels and extra H1s flagged amber. Opens automatically.
  • Image evidence: Performance image findings list the actual offending images — thumbnail, file size, and width badges — with honest skips for images the plugin cannot read.
  • Type specimens: Font-size drift findings render both sizes as real type, so you can see the drift instead of comparing numbers.
  • Color dots: Every hex color named in any finding now carries a swatch dot showing the color itself.
  • Fix: Escaped apostrophes are no longer mistaken for three-digit hex colors.

1.5.0

 

 

  • Fix alt text where you see it. Missing-alt findings arrive with the review already open — the image thumbnail, the best suggestion pre-filled, and the input ready. Describe the picture and Apply, right in the row; the builder link stays for anyone who wants the full page around the image.
  • Every audit pill says when it last ran. A compact age on each of the six pills — 35m, 3h, 6d — with the full time in the tooltip. A run older than a week, or an audit never run, shows amber: the point at which the counts stop describing the site.

1.4.3

 

 

  • The contrast screen passes its own test. The suggested-swatch caption sits on the pair’s own colour, so it now rides in a solid chip that is legible on anything — the one screen about contrast no longer fails it.
  • Findings read human-first in Simple mode. The type-scale finding leads with what the Fix button will do before the technical route.

1.4.2

 

 

  • Hardened by an adversarial review sweep. Three independent QA reviews ran against the new panel code; thirteen verified findings, all fixed same-day.
  • Contrast review is stricter about identity. An approval made for one text colour refuses to overwrite a colour an editor chose after the list was made; a value with junk after a valid colour is no longer “a colour”; and every alpha spelling is recognised, so a translucent replacement can never sneak past the AA gate.
  • Fix All’s confirm is bound to the plan it showed. If the stored audit changes between plan and confirm, the write is refused and the button re-plans — the write set can never silently differ from the shown set.
  • Smaller honesty fixes. The broken-token cause stops offering a fix that couldn’t fix it; the legal publish guard also recognises WordPress core’s own template Privacy Policy draft; waiver-driven score moves say so instead of blaming coverage; draft-page findings link to the editor instead of a 404.

1.4.1

 

  • Design panel render fix. A shadow role’s value printed as raw JSON in a cell that could not wrap, pushing the adopted-roles table’s Override column off the screen. Shadows now read as the shorthand a designer knows — offsets, blur, spread, colour — with the exact stored object in the tooltip. Render-only; no behaviour changes.

1.4.0

  • Every audit panel catches up to Design Guardian. One question asked of each audit: can you understand what is wrong and fix it without leaving the panel? All six now answer yes.
  • Contrast gets a review screen with swatches. Each failing pair renders as it really is, beside the nearest colour from this site’s own palette that clears WCAG AA — approve it or type your own, with a live preview. An approved suggestion writes the design-system token, and a replacement that would itself fail AA is refused with the ratio it would have had.
  • Hardcoded values get a one-click tokenize. Every literal matching exactly one design-system colour becomes that colour’s token, verified with zero modules lost. Ambiguous literals are listed with their candidates, never guessed.
  • Fix All shows its plan first. The first click runs the batch dry and lists, page by page, what would change; only the re-armed second click writes.
  • Open in builder, everywhere. Every finding row links straight into the Visual Builder on the page it names.
  • Simple mode finally reaches the findings. Token JSON reads as its label and tool-speak steps aside for the Advanced view; nothing is ever hidden entirely.
  • The score delta explains itself. Open “−1 since yesterday” and it names which audits moved, from per-suite snapshots the score history now keeps.
  • Legal drafts publish from the panel — refused while they still carry [REVIEW] placeholders, because a live legal page with blanks in it is worse than a missing one.

1.3.10

 

  • Missing alt text gets a review screen. The audit finding now shows each image, pre-fills the Media Library’s suggestion where one exists, and takes your own words instead — applied per item, journaled, undoable. Empty alt stays the deliberate decorative marker, and an approved description is refused if the image changed since the list was made.
  • Design Guardian’s four checks all grow Fix buttons. Slider autoplay switches off in one click — arrows, dots and swipe keep working — heading sizes snap back to this site’s own resolved type scale, and H1 repairs route through the headings engine’s existing guards.
  • Generic CTA copy is review-only, deliberately. No rule writes a good button label, so the screen shows each button, where it links, and a mechanical suggestion — an internal link becomes “See that page’s title” — for you to approve or rewrite. A replacement that is itself generic is refused: a fix that re-flags on the next audit fixed nothing.
  • Every review write carries every gate a Fix click carries — the free tier’s bound-page rule included — and the self-test grows to 1,714 checks.

1.3.9

  • Fixed: the paywall could fail open, and it was a fix in 1.3.8 that did it. 1.3.8 made the free-page binding heal itself when the bound page had been deleted — but it did that inside the read the page gate calls on every single tool call, and that gate does no existence check by design. A binding that could not be resolved became no binding, and all 21 page-scoped tools were waved onto any page.
  • The self-test caught it on the first run after the deploy: eight failures in Licensing & tiers, one of them reading “a second page is refused — NO ERROR, FREE TIER REACHED A SECOND PAGE”. It never reached a customer.
  • The healing moved to the Overview screen, where a human can see it: a binding pointing at a deleted page now says so and offers to release it, and that release does not count against the three-rebind cap. A paywall that heals itself into having no limit is worse than the stuck state it was fixing.

1.3.8

superseded

  • Superseded by 1.3.9 within the hour — a fix in this release made the free-tier page limit fail open. Do not run 1.3.8.
  • Fixed: the client report was downloadable without a licence. The handler had a capability check, a nonce, and no licence check at all, and the button was drawn on every audit screen, on every tier, in the default view. Free deliberately gets the whole site-wide audit, so one click turned a free install’s findings into the branded deliverable an agency resells.
  • The free tier’s one-page limit could be released and rebound without limit, and the message the agent receives named wp-admin as the place to do it — so it read as the sanctioned remedy. Release, build the next page, release again. Rebinding is now capped at three: enough for someone who bound the wrong page, nowhere near enough to walk a site.
  • Snapshot restore is free again. A rollback behind a paywall is worse than no rollback, and the people who need it most — a lapsed trialist, a lapsed customer — are on the free tier by definition.
  • Scheduled audits used to render the whole form on Free and refuse at the save, discarding what had been typed. It says it is Pro before the effort now.
  • Client report links expire after 14 days and nothing said so; a monthly schedule was deleting last month’s report, including a link already sent to a client.
  • The self-test now checks the wp-admin door as a class, not one handler at a time. That is why the report leak survived five releases after six others were fixed.

1.3.7

  • First-run pass. The Connection screen states the prerequisite nothing stated: you need a Claude account on a plan that can add custom connectors.
  • “Didn’t attach? Run the connection checks” now appears under the last step while a site has never connected. Diagnostics is Advanced-only and Simple is where a new install starts, so the one person who needed the checks was the only one who could not see them.
  • Connection says whether Claude has actually called in, and when. “Endpoint live” only ever meant the REST route answers.
  • The audit opens the most severe group you actually have, instead of only opening failures — on a site with warnings and no failures, every group used to render closed.
  • “How this is scored” on the score card. The reasoning was written out in full where only Claude ever read it.
  • Safety switches no longer look saved when they are not.

1.3.6

  • Fixed: three writes kept no step back, and one of them said it did. Tokenizing a page’s colour literals rewrote every module’s attributes, wrote directly, and returned “A revision holds the prior content” — with no revision and no undo slot anywhere in the function. False on every site, not only the ones with revisions disabled.
  • Theme Builder and Divi Library writes used a bare WordPress revision save, which does nothing on a site with revisions switched off. A header write there had no undo of any kind, and one bad header write is every page on the site. Both now get the same one-step-back guarantee as a page write.
  • The self-test says when a run was short of full coverage. Four groups need Divi’s builder framework, which wp-admin does not load, so they are skipped there and run through the connector. Both surfaces behaved correctly and both wrote a “Skipped” row, but the wp-admin headline read “All 1,494 checks passing” while the same suite reported 1,673 through the connector, with nothing explaining the gap.
  • The rescue scan lists at most 40 pages per category while its counts are complete, so a site with 200 Divi 4 pages was told 200 and handed 40. The result now says which lists were shortened and by how much.
  • “Every finding has a one-click fix” on the first-flight checklist. There are 83 check types and 11 have a Fix button.
  • Two strings still called tier gating off by default, which stopped being true in 0.90.0 — one of them in the payload Claude reads at the start of every session.

1.3.5

  • The score is now labelled “Autopilot Site Score” wherever it appears. “Site score” read like a WordPress feature; it is this plugin’s arithmetic and it should say so.
  • The dashboard’s own capability copy carried the same overstated claims that were corrected on this site, which is worse — that is the copy an evaluator reads while deciding whether to trust the thing. All four now match the code: alt text and heading fixes are journaled and undoable while legal pages arrive as drafts to review; one step back before every page write and a snapshot before every design-system write; rescue classifies up to 300 pages, not “every page”; five auditors read every page while legal reads the site.

1.3.4

  • Fixed: the step back kept for sites with WordPress revisions disabled was written and unreachable. Where wp_save_post_revision() does nothing — WP_POST_REVISIONS off, which several managed hosts ship and every “optimise your database” plugin offers — Divi Autopilot stashes the outgoing page content in post meta, then told the operator to restore it with revision_id 0. There was no branch for 0, and the function that reads the slot back had no callers anywhere in the plugin. On exactly the sites least likely to have another backup, the recovery instruction was false.
  • divi_restore_revision now accepts revision_id 0, with the same dry run, the same module-count verification and the same refusal to touch another page’s content as any revision restore. divi_list_revisions lists the slot as its own row, first, with its module count and an explanation of what it is.
  • Restoring is undoable on both kinds of site now. The restore path called wp_save_post_revision() directly, which does nothing where revisions are off, so restoring the slot consumed the only step back and left none.
  • Three tool descriptions and the History screen claimed “every write saves a revision first” — true on most sites, false on the ones this feature exists for. All corrected.
  • New self-test group, “Undo slot”, which writes the slot the way a revisions-off site would and drives the whole round trip. The bug survived because every test ran on a site with revisions on, where the slot is never written.

1.3.3

  • Fixed: six paid capabilities were reachable without a licence in wp-admin — fixing a cause across every page, scheduled audits, the emailed client report, installing legal drafts, adopting a design system, and restoring one. All six are gated on both surfaces now, and the scheduler refuses to arm or to fire without a licence, so a lapsed site stops rather than quietly continuing.
  • Fixing from wp-admin now respects the Free tier’s bound page — the rule the tool surface already applied.
  • divi_restore_snapshot joined the design-system group, so “Protect the design system” covers it. It rewrites colours, variables and presets site-wide and was the one write that switch could not see.
  • The Free tool count is 42, not 43.
  • One icon set across the plugin and this site. The ten dashboard icons were Unicode glyphs from six different blocks, two of them emoji codepoints the operating system rendered in colour while the rest stayed monochrome. All inline SVG now, on one 24px grid.
  • New “Next” row on Overview: at most three tiles naming the next action and what it does, ordered by what blocks what.

1.3.2

  • Fixed: every surgical write — edit, add, move, delete module — was returning the whole page’s token digest instead of the warnings for the node just written. Forty consecutive edits each came back with the same eleven warnings and their full node lists. New warnings still come back in full; pre-existing ones now collapse to one counted line.

1.3.1

  • Fixed: the full self-test reported eight failures on a Free site when nothing was wrong. Six were the licence gates correctly refusing paid writes, and two were an adopted design system correctly outranking the miner. Every one of those refusals is now asserted as the correct behaviour it is, on both tiers.
  • The full suite is meant to be run from wp-admin on any tier. It now stays green there whether or not the site is licensed, and whether or not a design system has been adopted.

1.3.0

design system

  • Reads the design system your site already has. Scans pages, posts, Theme Builder layouts and the Library — presets resolved, newest work weighted heaviest — and proposes your real colours, type, radii, shadows and spacing as a scale rather than an inventory. Adopt it and Claude resolves every design question against it first.
  • Four new resolver domains — elevation, radius, spacing, sizing — that answer with a paste-ready Divi 5 attribute fragment at the correct root for the module you name.
  • Group presets are now resolved when auditing. Styling that lived only in a group preset was previously invisible to the contrast, accessibility and performance engines.

1.2.0

  • Licence keys can be activated after the fact: a masked key field on Diagnostics → Licensing, a one-line prompt on Overview, licence detail with seats used, and a “release this site” control so a seat can be moved.

1.1.0

  • Admin UI translated into French, German, Spanish, Italian, Brazilian Portuguese, Dutch, Polish and Japanese.

1.0.2

  • Findings table readability: primary finding text at full contrast (10.2:1).

1.0.1

  • Self-test reliability: content-classifier checks made deterministic across WordPress parser versions.

1.0.0

launch

  • Commercial launch. Tier enforcement on by default; GPL license file; pre-launch security audit fixes — design-guard bypass closed, uninstall data hygiene, endpoint rate-limiting, log secret-scrubbing.

Before 1.0 there were ninety-odd development releases. The two that matter: 0.98.x introduced the unreadable-content architecture, where audits declare what render-time modules they cannot read instead of reporting false counts or false cleans, and closed an API-key leak in page rendering. 0.91–0.97 brought the site score with disclosed arithmetic, per-finding owner waivers, first-flight onboarding, and auto-continuing chunked runs with progress.