KapsuleHost Migrator: every release's notes, in full.

= 1.6.12 =
* Updated to the new KapsuleHost branding.

= 1.6.11 =
* Fixed: while a move ran in the background (from WordPress's scheduler), or an export for a manual move was being packaged, the plugin packaged your site at the same time as it counted it, and worked out its progress from the total it had counted so far. On the first piece of a large site that total was barely larger than the piece itself, so the figure could read close to 100% with almost all of the site still to go. Until the whole site has been counted, this screen now says it is still counting and shows no percentage, and your KapsuleHost panel is only given the total once it is final. Moves started from this screen count the whole site first and were not affected.
* Fixed: the copy of your database is written to a temporary file on your server, and if a write to that file failed or fell short (most often because the server's disk was full), nothing noticed: the copy carried on, was checked, compressed and sent with part of your database missing. Every write is now checked, and so are the compressed copy (it is read back and must match the original exactly) and every table read. The first one that falls short stops the move with a clear message, the temporary files are removed, and nothing incomplete is ever checked, compressed or sent.
* Every other place this plugin writes a file, builds an archive or relies on an answer was checked for the same two problems: the pieces of your site (zip, tar and PharData), the list of files each piece holds, the parts of a piece too large for one request, the temporary folder and its access rules, the checks run on your database copy before it is sent, and the answers your KapsuleHost panel and its update service give. Each now stops the move with a clear message and removes what it had written, instead of carrying on with something incomplete.
* This plugin no longer runs any shell command. On a server without PHP's zip extension it used to pack your site with the server's own tar program; it now uses PHP's own archive support (PharData) there instead, which writes the same format.
* The KapsuleHost address this plugin talks to must use https: an address set by another plugin or setting is only accepted over a secure connection.
* This plugin no longer writes lines of its own into your site's PHP error log (wp-content/debug.log when WordPress debugging is on). Every failure is still shown to you on this screen in plain words, with a support reference that KapsuleHost receives as well.
* Fixed: an export made for a manual move offered only the database for download. The pieces of your site were removed as they were made, before the list of downloads was put together. Every piece is now kept and listed, each with its size checked.

= 1.6.10 =
* Security: symbolic links are no longer followed or packed, and archive names are always relative to your WordPress folder. The status check no longer puts the migration key in the address.
* Why it matters: the part of this plugin that packages your site for sending used to follow a symbolic link if one existed anywhere under your WordPress folder, whether it pointed at another file or at a whole folder elsewhere on your server, and it worked out the name to store a file under by resolving the real location on disk. A link reaching outside your WordPress folder could therefore have what it points to packaged and sent, under a name that was not always a plain, safe one. Every symbolic link is now left out of the piece your site is packaged into, the number left out is recorded in your site's error log for our support team, and every name is built from the folder your site was actually found in, checked once more right before it is written in, so nothing can be packaged under a name starting with a slash or containing "..".
* Also fixed: the request this plugin makes to ask KapsuleHost how your move is going used to carry your migration key as part of the web address, which a server keeps in its own access log. It now carries that key the same way every other request this plugin makes does: in the request itself, not the address. A plugin already installed on your site from before this release keeps working exactly as it did while you update it.
* Also fixed: removing this plugin through WordPress left one small housekeeping setting behind, a timer this plugin used to check once an hour whether an old, abandoned attempt at a move needed clearing away. It is now removed along with everything else this plugin keeps, the same way every other setting already was.

= 1.6.9 =
* New: this plugin now tells KapsuleHost which database table prefix your site uses (the start every WordPress table name shares, such as wp_ in wp_posts). It is read from WordPress itself, from the same setting your site's wp-config.php gives it, so it is not a guess. KapsuleHost writes that prefix into your new site's settings, and uses it only after checking that your database copy really holds your site's tables under it.
* Why it matters: until this release KapsuleHost had to work the prefix out from the database copy alone. A table added by another plugin can end in the same words as WordPress's own (a privacy plugin's settings table, for example), and a database can hold two WordPress sites side by side. KapsuleHost reads the database copy with care and never picks between two sites without evidence, so in that case the move stopped until our team had confirmed the right one with you. With this release your site says which one it is, and the move carries on.
* On a WordPress network (multisite), the prefix sent is the network's own, the one in its wp-config.php, whichever site's screen the move is started from. A sub-site's own tables carry a longer prefix (such as wp_2_), which would not be right for the network's settings.

= 1.6.8 =
* New: if your site is a WooCommerce shop, it keeps taking orders here after your site has been copied, until every visitor reaches KapsuleHost. Those orders used to stay here only. Where your KapsuleHost panel supports it, this plugin now tells KapsuleHost what your shop takes after the copy (new orders and refunds with their items and notes, customers who register, and stock changes), and KapsuleHost adds them to your new site when your domain points there, again as more arrive, and a last time when the switch-over has finished. Nothing already on your new site is overwritten, and each order keeps the number your customer was given. It only reads your shop: nothing here is changed. Keep this plugin active until your panel says the switch-over has finished.
* Fixed: when a move did not finish, the support reference at the end of the red note (the code starting KH- that you quote to our support team) could be split across two lines at one of its hyphens. In German, for example, "KH-" sat at the end of one line and the rest of the code started the next, and in Arabic the code broke after its second hyphen. Read out or copied by hand, a split code is easy to get wrong. The reference now always stays on one line, in every language this plugin ships in and on narrow screens, and it always reads left to right, including inside an Arabic sentence. One click on it selects exactly the reference, nothing either side of it.
* Fixed: on a site whose database is bigger than the memory this server gives PHP (often 256 MB), the move stopped at "99% database" and stayed there, with nothing on screen to say why. Your database copy is checked before it is sent, and that check read the whole copy into memory at once. It now reads it a line at a time, so a database of any size is checked and sent. Measured on a test site with a 390 MB database copy and a 256 MB limit.
* Fixed: a site holding one large file, such as a video or a backup archive whose packed piece came to more than about 100 MB, could not move at all: the piece was refused and the move stopped. Such a piece is now sent in smaller parts, each checked on arrival, and KapsuleHost puts them back together and checks the whole file before anything is placed. Measured with a single 3 GB file, which arrived byte for byte. This needs a KapsuleHost panel that accepts parts; where it does not, the plugin says so before sending anything rather than after.
* Fixed: when this plugin stopped a move it could not finish, your KapsuleHost panel went on showing the move as running, with a percentage and a time left. The plugin now tells KapsuleHost that it stopped and why, so the panel shows the same stop and the next step, and both screens show one reference to quote to our support team.
* Fixed: if PHP stopped with an error while your database was being copied (most often by running out of memory), the move sat at "99% database" with no message. This screen now says what happened and what to do, with a reference, and the panel is told.
* Fixed: after a move stopped, the piece of your site that could not be sent was left behind in your server's temporary folder. It is now removed as soon as the move stops.
* This release brings the plugin in line with WordPress.org's plugin checks. Nothing changes in how a move looks or what you do.
* Fixed: on a server without PHP's zip extension, where this plugin packs your site with the server's own tar program, the last piece of your site was never sent when the move ran in the background (from WordPress's scheduler), and the same last piece was missing from an export made for a manual move. A site smaller than one piece sent no files at all. Every piece is now sent, the last one included. Moves started from this screen were not affected.
* Fixed: a file whose name contained a line break could change what the tar program packed, so a specially named file could pull in a file this plugin never sends, such as wp-config.php, which holds your database password. The list of files is now handed to tar in a form no file name can break out of, and a file at the top of your site whose name starts with a dash is left out and named in your site's error log.
* Fixed: on a server with neither the zip extension nor a usable tar program, one file whose name held a line break, a tab, a backslash, * or ? stopped the whole move. That file is now left out and named in your site's error log, and the rest of your site moves.
* Your site is now sent through WordPress's own connection system only: this plugin makes no connections of its own through curl. It still reads each piece from disk while it sends it, so a large site needs no extra memory.
* The copy of this plugin from WordPress.org is updated by WordPress.org only and carries no update code of its own. The copy from your KapsuleHost panel still updates itself from KapsuleHost as before.
* Your site is now sent through WordPress's own connection system wherever this server has curl, so the proxy and security settings your host has given WordPress apply to the move as well. Each piece of your site is still read from disk while it is sent, so a large site needs no extra memory, and a connection that stops moving is still given up on after a minute and tried again.
* The queries that copy your database now name each table the way WordPress itself does. A table whose name contains an unusual character (a quote, a backslash or a backtick) is now copied under its real name. Before this release it could arrive under a slightly different name, or not at all.
* Temporary files made while packaging your site are removed through WordPress's own tools.
* A message explaining why a move stopped is now made safe to display at the moment it is written, as well as where it is shown. You see the same words as before, apostrophes and all.
* The copy of this plugin from WordPress.org no longer asks WordPress to load translation files it does not carry: WordPress delivers its translations. The copy from your KapsuleHost panel still carries its own translations and loads them as before.

= 1.6.7 =
* Fixed: on a server whose PHP did not have the curl extension, a move started, KapsuleHost created it, and then the first piece of your site failed with WordPress's "There has been a critical error on this website" message. Your KapsuleHost panel went on saying the move was queued. Nothing had been changed on your site, but neither screen told you why nothing was happening. This plugin now sends your site without curl wherever WordPress itself can reach the internet, the same way WordPress does, reading each piece from disk as it goes so a large site does not need more memory. Secure connections are still checked against WordPress's own list of trusted certificates, and WordPress's proxy settings are used if your host has any.
* If this server genuinely has no way to send anything, this screen now says so before a move is started, names what PHP is missing, and tells you what to ask your host for. Nothing is started on KapsuleHost in that case, and your KapsuleHost panel is told, so it shows the same reason instead of waiting.
* A host that turns off some of PHP's curl functions but not others no longer breaks the move: this plugin now needs exactly the curl functions WordPress itself needs, and uses the other way of sending when any of them is missing.

= 1.6.6 =
* Fixed: on eight of the steps a move can be on, this screen said only "Working" while your KapsuleHost panel named the step. 1.6.0 said the wording of each step is sent to this screen by KapsuleHost in your own language, and that was true of the fourteen steps this plugin had its own words for and of no others: for the rest it fell back to one generic word. Your panel was already sending the real sentence for every step, in your language, every few seconds, and this screen was discarding it. It now shows the step KapsuleHost sent whenever it has no wording of its own, so "Taking a snapshot first", "Building your site for its new address" and "With the migration team" read the same here as they do in your panel. This also covers steps added to KapsuleHost after you installed this plugin, which used to be exactly the ones it had no word for.
* If a move did not finish, this screen now tells you why in more cases, in your own language. Until this release it had its own sentence for only a few reasons a move can end, and for anything else it fell back to one general line: "KapsuleHost did not finish putting your site together". Your KapsuleHost panel already had the right sentence for your move, translated, and now sends it here too. This screen still uses its own words wherever it has them, and uses your panel's words only where it has none, so the two screens say the same thing about the same move. This also covers reasons added to KapsuleHost after you installed this plugin.
* If the cause was a message from your old host rather than from us, it is now shown as a quotation, under our own explanation, exactly as your host wrote it. It is not translated, because it is not ours to reword, and it is set apart so it cannot be mistaken for something KapsuleHost said.
* If you stopped a move yourself, this screen now always says the move was stopped, never that it failed.
* If you started a second move in the same browser tab after an earlier one ended, and the second one also did not finish, this screen could keep showing it as still in progress instead of telling you it had ended. It now shows the ending every time.
* Moves that ended because the upload stopped part way (for example because the browser tab was closed), or that never started, now say exactly that, rather than suggesting your files reached KapsuleHost. Nothing is half moved in either case, and you can simply start again.
* Our server's own technical record of a failure is no longer sent to your browser at all. It was never shown there, and now it cannot be. It still goes to your site's error log, where your host or our support team can read it.

= 1.6.5 =
* Fixed: two brand asset files carried an `@` in their names (`kapsulehost-light@1x.png`, `@2x`), which the WordPress.org automated scan rejects as a special character. Renamed to `-1x`/`-2x` and the two references updated in the same change.

= 1.6.4 =
* If a move did not finish, the red box explaining why is now in your own language, and it is a sentence rather than a code. Until this release that box printed whatever our server had recorded about the failure, word for word. Sometimes that was a reference code like "kh-fault:migration_job_failed:KH-MFJ3K2-A7B9C1", which means nothing to anybody outside our team. Sometimes it was several lines of English written for our engineers, naming our own internal systems, shown to you even if you read this screen in German or Arabic. Everything else on that card was already translated, so the one line telling you what went wrong was the one line you could not read.
* The reference you need when you contact us is still there, on its own, in plain words: "If you contact support, quote KH-...". It is what lets us find exactly what happened to your move in seconds instead of asking you to describe it. It now also reads correctly in right-to-left languages, where the parts of the code used to come out in the wrong order.
* Nothing is hidden from us by this. The full technical detail still goes to your site's error log, where your host or our support team can read it.

= 1.6.3 =
* Removing this plugin now removes everything it kept. Until this release, deleting the Kapsule Migrator through WordPress left more than twenty rows of our own bookkeeping behind in your site's database, for good, and you had no way to clear them: counts of files and pieces moved, when a move started, and a note of which version of this plugin you had. Nothing private or secret was ever left there, and we checked that rather than assuming it. But it was ours, you had told us to go, and it stayed. It now leaves with us.
* If a move was interrupted, the packaged copy of your files and database was left sitting on your server too. Removing the plugin now deletes that as well, so nothing of ours is left on your site or in your database.
* "Remove the plugin and install it again" now really does give you a clean start. It never did before, because nothing was cleared on the way out, so anyone who tried that as a fix got the same state back and had no idea why.
* On a WordPress network, every site is cleaned up, not only the one you happened to be looking at when you removed the plugin.

= 1.6.2 =
* Fixed: the plugin screen built its status icons into HTML without escaping them, and four attributes were written the same way. Nothing could be injected through them, because every one was markup this plugin authors itself, but a reader cannot tell that from the code and neither can an automated check. The icons are now emitted from one place as fixed markup, so there is no value to escape, and the attributes are escaped.
* The text domain is now "kapsulehost-migrator", matching the plugin slug, so translations contributed through translate.wordpress.org reach this plugin.
* The WordPress.org package no longer carries bundled translation files or an internal .sql reference file. Translations for that channel come from translate.wordpress.org, and the .sql was a development reference the plugin never reads.

= 1.6.1 =
* Fixed: when a migration had been cancelled or removed on the KapsuleHost side, this screen said "KapsuleHost answered 401 when we asked about your move" and then went on retrying for ever, under a progress bar frozen near the end that could never advance. A status code is not a sentence, and "your migration is no longer there" is not "we could not reach KapsuleHost": the first is final and you need to know it, the second is worth waiting out. The two are now told apart. A migration that is gone says so in plain words and stops, and a moment when we cannot be reached says that instead and keeps trying. The technical code is still recorded for support, where a customer never reads it.

= 1.6.0 =
* Fixed: the step name at the top of this screen stopped changing once the page had loaded, so it could say "Checking the connection" while the heading underneath described KapsuleHost assembling your site, twenty minutes later. An earlier release tried to fix this and the fix could not work: it wrote to a part of the page that only exists on the upload screen, so on this screen it changed nothing. The step name, the heading and the text beneath them now all come from one value and change together.
* Fixed: when this site could not read how your move was going, it replaced the step description with the raw technical reason, so a customer read "cURL error 28: Operation timed out after 15002 milliseconds with 0 bytes received" in the middle of an otherwise ordinary screen. The move was fine and carried on. A failure to read the status is now said in plain words, on its own line, and everything else on the card holds still rather than pretending to make progress.
* The wording of each step is now sent to this screen by KapsuleHost, already in your language, instead of this plugin keeping its own copy of the same fourteen phrases. There were three copies of that list across the plugin and your panel; there is now one, so the two screens cannot describe the same moment differently.

= 1.5.11 =
* Fixed: while KapsuleHost was finishing your move, this screen reloaded itself over and over, flashing every few seconds for as long as you left it open. Nothing was wrong with the move and nothing was failing. The screen was watching for your migration to finish, and it had already finished: your copy is complete as soon as your files and database are across, which is usually some minutes before you point your domain at us. So it kept seeing "finished", reloading to show you, and then starting to watch all over again. It now checks whether the move has already finished before it starts watching, and it will not reload twice to show you the same thing.
* Fixed: three lines on this screen were shown in English to everyone reading it in the other fifteen languages. They had been translated, but the files WordPress actually reads had not been rebuilt since.

= 1.5.10 =
* Fixed: the first screen of a move was headed "Step 1 of 1", and then you watched thirteen steps go past. It was trying to say that pasting the token is the only thing YOU have to do, and it read as though the whole move were one step. It now says that plainly: "The one thing you need to do". Translated in all fifteen languages rather than left in English.

= 1.5.8 =
* Fixed: this screen and your KapsuleHost panel described the same step of your move in different words, in every language except English. The two screens were given matching English wording in an earlier release, and that was done properly, but each screen was then translated separately, so the agreement only ever survived in English. Measured across the fifteen languages KapsuleHost sells in, 125 of 210 step descriptions differed: in German this screen said your files were being brought to the right place while your panel said they were being placed, and in Japanese thirteen of the fourteen steps were worded differently on the two screens. Both wordings were correct and there were simply two of them. The step wording now comes from KapsuleHost in the language you are reading this page in, so both screens use one set of words and cannot drift apart again.
* If KapsuleHost cannot answer in your language for any reason, this screen keeps using its own wording rather than falling back to English.

= 1.5.7 =
* Fixed: the status label at the top of this screen did not change as your move progressed. It showed whatever step was running when the page loaded, so it could read one step while the line under the percentage read another.
* When we cannot read your migration's status, this screen now always records why, so a failure can be explained rather than guessed at.

= 1.5.6 =
* The wait screen now shows KapsuleHost's own percentage and step wording, so this screen and your panel say the same thing at the same moment.
* Phase names match your panel word for word. Nine of them used to differ.
* A status check that fails now names the right party. It used to say KapsuleHost was unreachable when the failure was inside this site.

= 1.5.5 =
* Fixed: this screen showed 95%, then 97%, then dropped back to 48% when it heard from KapsuleHost. The
  jumps were this screen's own numbers, hardcoded at the moments the database started and the upload
  finished. Every percentage now comes from KapsuleHost, so the figure here and the figure in your
  KapsuleHost panel are the same number at all times.
* The steps here now follow the real state of your move rather than this screen's guess, and once your
  files are across it says so plainly: everything after that is happening on KapsuleHost, not in your
  browser.
* The time remaining is KapsuleHost's single estimate, so the two screens can no longer say "less than
  a minute" and "about a minute" at the same moment.

= 1.5.4 =
* Fixed: the percentage on this screen could go BACKWARDS, reading 95, then 97, then 48. When a reply
  from KapsuleHost came back without a progress figure, this screen quietly substituted its own upload
  percentage, which measures a different thing: how far the upload has got, rather than how far the
  whole move has got. Two honest numbers alternating in one place. It now keeps showing the last figure
  KapsuleHost gave, so the bar can pause for a moment but can never run backwards or change what it is
  counting.

= 1.5.3 =
* Fixed: this screen said "piece 3 of 10" while your KapsuleHost panel said "piece 2 of 10" at the same
  moment, and this screen's own PIECES SENT box said 2 as well. One count, three renderings, two of
  them a step ahead. The count of pieces that have arrived is now rendered the same way everywhere.

= 1.5.2 =
* Fixed: this screen and your KapsuleHost panel showed different amounts moved, 473.6 MB here against 495 MB there. They were two different counts, not two ways of writing one: this screen showed what your browser believed it had sent, and the panel showed what had actually arrived. Both now show what has arrived, which is the one that matters.
* Fixed: the time remaining differed between the two screens, and the panel's wording could read "about 1 minutes left". There is one estimate now, worked out in one place, and both screens show it.
* Fixed: if KapsuleHost did not answer the moment this page loaded, you were told we could not be reached. A single lost answer is now retried once before that, so a brief hiccup no longer looks like an outage. When we genuinely cannot be reached the screen still says so plainly, and still refuses to guess.

= 1.5.1 =
* Fixed, and it is the reason for this release: this plugin has never been able to update itself. WordPress asks a plugin with its own update address for a version, and requires that answer to contain a field called "version". This plugin sent the same number under a different name, so WordPress discarded the answer without an error and every site stayed on whatever version it was first installed with, no matter how many releases came out. That is why fixes reported as done kept coming back: they were correct, they were published, and they could not reach you. Update to this release once by hand and every release after it arrives on its own.

= 1.5.0 =
* Fixed: the percentage on this screen and the percentage on your KapsuleHost panel were different numbers. Both were honest and they were answering different questions: this screen showed how far through the upload you were, and the panel showed how far through the whole move, which carries on after the upload with unpacking, importing and rewriting the addresses inside your site. There is now one number and both screens show it.
* Fixed: the piece count differed between the two screens for the same reason. This screen counted what it had sent and KapsuleHost counted what had arrived, which are never the same while a piece is in flight. Both now show what has actually arrived.
* Fixed: stopping a move from your KapsuleHost panel did not reach this screen, so it carried on showing a live transfer for a move that had ended. It now finds out on the very next piece and shows you that it was stopped, and which screen stopped it.
* Fixed: a long value in the fourth box, such as your new web address, ran outside its box instead of wrapping.
* The white underlines under the buttons on this screen are gone. They were fixed in the previous release and could not reach you: that release went out under a version number that had already been used, so WordPress never offered it to sites that already had that version, and browsers kept serving the stylesheet they had already cached. This release has a new version number, which is what makes the fix arrive.

= 1.4.1 =
* Fixed, and it is the whole reason for this release: starting a migration could make your existing site slow to a crawl or stop loading altogether, including the Kapsule screen you started it from. The plugin kept the list of every file it was going to move in a place WordPress reads back into memory on every single visit to your site. On a site with 127,977 files that list was 34 MB, and reading it needed 150 MB of memory, more than most hosting plans allow. The list now sits in a file next to the copy being prepared, and each piece reads only its own part of it.
* That list was also never removed once a migration finished, so a site that had already moved kept paying for it on every visit indefinitely. Updating to this version removes it.
* If your browser tab was closed or the page stopped responding part way through, it always did pick up where it left off rather than starting again, and it still does.

= 1.4.0 =
* Fixed, and it is the whole reason for this release: the copy of your database this plugin made replaced every percent sign in your content with a 66 character internal marker, and never put it back. A percent sign is in every percent-encoded link and image name, in stylesheets, in prices, and inside stored settings, where the change also breaks the length count WordPress uses to read them back, so the setting is discarded entirely. On one real site there were 120,410 of them. Percent signs now survive the copy exactly as they are.
* That marker was also what made some pages fail to move at all. It made page addresses longer than the column that holds them, so the database refused the row or shortened it silently, and pages that arrived with a shortened address would have returned "not found" on the moved site.
* The export now checks its own work before sending anything, and refuses to hand over a copy that still carries the marker rather than uploading a damaged one.
* The copy now starts with the same settings a standard database export uses, including the time zone. Without it, every date and time in your site could shift by the difference between your old server's clock setting and the new one, with nothing to say it had happened.

= 1.3.1 =
* Fixed: when this site could not continue a move (a piece the server no longer knows about, or an
  administrator permission that has gone), the plugin retried five times and then said "We could not
  reach KapsuleHost after 5 tries", quoting KapsuleHost's own clear answer inside its own apology. It
  had reached KapsuleHost perfectly. A permanent answer is now shown as what it is, straight away.

= 1.3.0 =
* Fixed, and it is the reason for this release: this screen used to say "Move complete. Your site is
  on KapsuleHost" the moment the upload finished, with "Database: Copied" printed beside it. The
  upload finishing is not the move finishing. Everything that can go wrong (unpacking your files,
  putting them in place, importing your database, rewriting your addresses, checking the result
  serves) happens afterwards, on our side. One customer read that screen while their database import
  was about to fail.
* The plugin now reports the state of the JOB, read from KapsuleHost, and cannot say a move finished
  until KapsuleHost says it finished. If the move fails, this screen says so, says which step it
  stopped on, and shows what our server actually reported.
* "Database: Copied" is now a fact rather than a word: it says Imported or Not imported, from what
  the import actually did.
* If we cannot reach KapsuleHost to check on your move, the screen says that, instead of showing you
  the last thing it happened to know.
* Your site is still only ever read, never changed, at every one of these steps.

= 1.2.0 =
* The plugin now speaks all 16 languages KapsuleHost sells in, including right-to-left Arabic. Every
  screen, every button and every error message, not just the front page.
* Fixed: choosing "start over" could make the next migration skip files it believed were already
  sent, and report success having transferred nothing.
* Fixed: a dropped connection is now retried in your browser, where you can see it happening, with
  the piece being retried and the time until the next attempt shown. Running out of attempts pauses
  the move rather than failing it, because everything already copied is kept.
* Fixed: resuming a migration no longer rebuilds pieces the server already has.
* Fixed: prepared pieces are now deleted as soon as they are delivered, so migrating no longer needs
  double your site's size in free space.
* Fixed: a migration run from the scheduler uploaded the database under a name the server did not
  recognise, and reported it as a failed upload.
* Rebuilt the interface around what is actually moving: pieces sent, data transferred, files counted.

= 1.0.7 =
* Improved upload reliability: server now tracks which chunks have been received, so interrupted transfers resume correctly without re-uploading complete chunks
* Upload manifest now includes chunk count to improve progress accuracy

= 1.0.6 =
* PharData fallback for PHP hosts without the zip extension (previously only ZipArchive and system tar were tried)
* Added cancel button so in-progress migrations can be cleanly aborted

= 1.0.5 =
* Fixed skip-pattern matching for top-level directories (was incorrectly including some cache dirs)
* Added automated test suite for the packager component

= 1.0.4 =
* WP.org compliance: added capability check on all AJAX endpoints, improved SQL escaping, added text domain, added screenshots

= 1.0.3 =
* Improved accessibility: focus states on interactive elements; mobile-responsive admin CSS

= 1.0.2 =
* Added standalone export mode (no Kapsule account required)
* Dual-distribution: separate CDN and WordPress.org builds to ensure correct update channel

= 1.0.1 =
* Security: wp-config.php and wp-config-sample.php excluded from all exports and migration packages

= 1.0.0 =
* Initial release: direct migration to KapsuleHost
