diff --git a/README.md b/README.md
index 6b99f21..74f58e7 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
-
+
@@ -39,6 +39,7 @@ Use this only on systems you own or are explicitly authorized to administer.
## Contents
+- [What's New in 2.0.0](#whats-new-in-200)
- [What's New in 1.9.0](#whats-new-in-190)
- [What's New in 1.8.5](#whats-new-in-185)
- [What's New in 1.8.0](#whats-new-in-180)
@@ -59,6 +60,42 @@ Use this only on systems you own or are explicitly authorized to administer.
---
+## What's New in 2.0.0
+
+A **survivability** release: the fleet now rides out the things that used to need a human — a network
+blip, a lost report, an expired session — and, for the first time, an **OS swap under the server**.
+**No database schema change since 1.9.0.**
+
+**Surviving the server's own OS**
+- `deploy/backup.sh` + `deploy/restore.sh` capture and re-adopt the **fleet's identity**: the CA that
+ issued every client certificate, the command-signing key, the bastion SSH host key each agent pins, and
+ the database. Devices are never "imported" — their identity lives on the device; restore these and an OS
+ swap is invisible to all of them. Miss the SSH host key and every tunnel breaks: `04-server` rebuilds
+ `bastion.env` from whatever key is present, so the restore goes **first**, and the installer (which only
+ generates secrets that are *missing*) then adopts the fleet instead of locking it out.
+- The same backup from the console: **Server settings → Backup**. A root helper does the privileged part
+ (the server cannot read the host key), and the archive is **always passphrase-encrypted** — it leaves
+ the box through an 8-hour admin session, and the keys inside cannot be revoked. The server keeps no copy
+ of the passphrase and drops the archive as it hands it over.
+
+**VNC that comes back on its own**
+- **A network blip no longer kills VNC for ~6 minutes.** The bastion released a dropped session's reverse
+ port only after a 120s×3 keepalive, while the agent gave up in 45s — so a returning agent could not
+ rebind its own (deterministic) port and `ExitOnForwardFailure` killed the tunnel. The bastion now
+ mirrors the agent (15×3), the agent **retries** across the window, and the console **waits for the RFB
+ greeting** instead of launching a viewer at a tunnel that isn't there.
+- The **VNC-secret report retries until the server confirms it**. A lost one-shot report used to leave a
+ device with no server-side password until someone restarted the agent — the failure mode of fresh
+ installs on mobile / CG-NAT links.
+
+**Fewer dead ends**
+- **Restart RACD** (Devices → Commands): restarts VNC → Helper → agent, in that order, and **verifies the
+ Helper is alive before the agent goes down** — it is the only thing that can revive a stopped agent.
+- An **expired session** now says so and returns to sign-in, instead of surfacing a raw `401`.
+- Dependency bumps (NuGet + Actions, Avalonia 12.1) and a warning-free Linux console build.
+
+---
+
## What's New in 1.9.0
A **client redesign and power-telemetry** release. This is the first release to **change the database schema
diff --git a/src/RemoteAgent.Updater/RemoteAgent.Updater.csproj b/src/RemoteAgent.Updater/RemoteAgent.Updater.csproj
index 9df7244..f6baf32 100644
--- a/src/RemoteAgent.Updater/RemoteAgent.Updater.csproj
+++ b/src/RemoteAgent.Updater/RemoteAgent.Updater.csproj
@@ -7,7 +7,7 @@
RemoteAgent.Updater
RemoteAgent.Updater
Exe
- 1.9.0.0
+ 2.0.0.0
..\..\icon\app.ico
diff --git a/src/RemoteAgent/RemoteAgent.csproj b/src/RemoteAgent/RemoteAgent.csproj
index 6f535ad..1572489 100644
--- a/src/RemoteAgent/RemoteAgent.csproj
+++ b/src/RemoteAgent/RemoteAgent.csproj
@@ -7,7 +7,7 @@
enable
RemoteAgent
RemoteAgent
- 1.9.3.0
+ 2.0.0.0
..\..\icon\app.ico
diff --git a/src/RemoteClient.Linux/RemoteClient.Linux.csproj b/src/RemoteClient.Linux/RemoteClient.Linux.csproj
index 9e53f1e..a900e5c 100644
--- a/src/RemoteClient.Linux/RemoteClient.Linux.csproj
+++ b/src/RemoteClient.Linux/RemoteClient.Linux.csproj
@@ -12,7 +12,7 @@
false
RemoteClient.Linux
RemoteClient.Linux
- 1.9.1.0
+ 2.0.0.0
diff --git a/src/RemoteClient.Lite/RemoteClient.Lite.csproj b/src/RemoteClient.Lite/RemoteClient.Lite.csproj
index 24cd66d..83cb0d8 100644
--- a/src/RemoteClient.Lite/RemoteClient.Lite.csproj
+++ b/src/RemoteClient.Lite/RemoteClient.Lite.csproj
@@ -14,7 +14,7 @@
RemoteClient.Lite
RemoteClient.Lite
..\..\icon\app.ico
- 1.9.0.0
+ 2.0.0.0
win-x64
true
true
diff --git a/src/RemoteClient/RemoteClient.csproj b/src/RemoteClient/RemoteClient.csproj
index 8d7d909..7e1fad0 100644
--- a/src/RemoteClient/RemoteClient.csproj
+++ b/src/RemoteClient/RemoteClient.csproj
@@ -17,7 +17,7 @@
..\..\icon\app.ico
- 1.9.3.0
+ 2.0.0.0
diff --git a/src/RemoteServer/RemoteServer.csproj b/src/RemoteServer/RemoteServer.csproj
index 036a690..5398b31 100644
--- a/src/RemoteServer/RemoteServer.csproj
+++ b/src/RemoteServer/RemoteServer.csproj
@@ -26,7 +26,7 @@
net10.0
enable
enable
- 1.9.2.0
+ 2.0.0.0