v1.5.0
The proof release. v1.4.0 made Nine Lives a full backup-and-restore orchestrator with safety nets; 1.5.0 makes it prove things — that backups restore, how exposed every database is right now, and that the person responsible hears about it wherever they are. 1,542 tests, up from 1,485.
Proof, not hope
- Restore rehearsal — one button restores the chosen chain to a scratch database, proves the data with
DBCC CHECKDB, and drops the scratch copy. The History entry is the receipt an audit asks for, and the duration is your real RTO number. Safety by construction: generated name refused if it exists, neverWITH REPLACE, every file relocated, and the guarded DROP runs last so any failure retains the evidence (#238) - The Exposure dashboard — every user database on every configured server: "if this server died now, everything after 14:32 is gone — up to 47m of work", traffic-lit worst-first. Never-backed-up, FULL recovery with no log backups, stopped chains — and an unreachable server is itself an alarm, because unknown is not the same as fine. Rehearsal receipts appear as a Proven column (#239)
- Run notifications to Teams, Slack, or any JSON endpoint — when a backup, restore or copy starts, finishes, or hits a problem, including per-database failures in a multi-database backup at the moment they happen. Teams MessageCard (connectors and Power Automate), Slack Block Kit, and plain JSON. Webhook URLs are treated as the secrets they are and never leave the machine in a config export (#242)
For the worst day
- Export a restore runbook — one self-contained Markdown document per restore point: the chain file by file, prerequisites in worst-day order (credential, TDE certificates by thumbprint, disk space), the exact script, what to do when it stops part-way, what finishes the job (#240)
- The retention referee — what a keep-N-days rule keeps, deletes (with bytes reclaimed), must keep despite its age (base fulls, bridge logs), and what is already broken. Report-only: deleting stays a human act (#241)
- STOPATMARK — restore to a named transaction discovered from
logmarkhistory, stopping just before it by default. The mark is the target, not a clock time reconstructed from chat messages (#243)
Sharpened
- One console. The run's output lives in its window, and only there — a "View the last run's output" button reopens the full record (previously every line rendered twice)
- Every restore option in every mode — WITH MOVE, point-in-time, the advanced options: modes narrow which screens exist, never which restore options do
- The Generate Script button is gone — the script builds itself live; an empty pane says why, where the eye already is
- CHECKDB shows progress and speaks its outcome on the finishing panel — a bar from the server's own
percent_complete, and "found nothing wrong — the restore is proven, not just finished" stays on screen after the console scrolls on - The metadata inspector now states the taking version and the backup's protection — TDE, encrypted, or "Not encrypted", because absence is information too (#222)
Fixed
- The orphaned-user scan crashed with a collation conflict on cross-collation restores — both sides of the login-name comparison are now forced to one collation
- A drive the target does not have was described as "0.0 B free"; absent is now said as absent, with the fix named (MOVE, or a different target)
Full detail in the changelog.