Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "2.0.5"
".": "2.0.6"
}
7 changes: 5 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ current uv-based install, development, and release instructions.

## [Unreleased]

## [2.0.6] - 2026-10-23

### Added

- Release Please draft PRs using the official CLI with a reviewed, integrity-
Expand Down Expand Up @@ -39,7 +41,7 @@ current uv-based install, development, and release instructions.
including execution without `HOME` or `XDG_CACHE_HOME`.

These source changes address issue [#30](https://github.com/CruxExperts/BestBackup/issues/30).
They do not publish a new release or expand cloud or machine-recovery qualification.
This maintenance release does not expand cloud or machine-recovery qualification.

### Changed

Expand Down Expand Up @@ -710,7 +712,8 @@ are still under development. See [implementation status](docs/development/versio

The `Unreleased` comparison is a live `HEAD` link for navigation, not an immutable historical citation.

[Unreleased]: https://github.com/CruxExperts/BestBackup/compare/v2.0.5...HEAD
[Unreleased]: https://github.com/CruxExperts/BestBackup/compare/v2.0.6...HEAD
[2.0.6]: https://github.com/CruxExperts/BestBackup/compare/v2.0.5...v2.0.6
[2.0.5]: https://github.com/CruxExperts/BestBackup/compare/v2.0.4...v2.0.5
[2.0.4]: https://github.com/CruxExperts/BestBackup/compare/v2.0.3...v2.0.4
[2.0.3]: https://github.com/CruxExperts/BestBackup/compare/v2.0.2...v2.0.3
Expand Down
24 changes: 12 additions & 12 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Install bbackup

The latest published stable release is v2.0.5, with its tested file, database, dashboard, and AMD64 package scope. The current v2.0.6 source candidate includes reviewed issue #30 maintenance and compact-terminal fixes, but its release downloads are not published yet; the install commands and package examples below therefore remain pinned to v2.0.5. The candidate adds no B2/AWS, ARM64, or Linux recovery qualification. The retained 1.x tag remains available as v1.8.6.
Version 2.0.6 retains the tested file, database, dashboard, and AMD64 package scope of v2.0.5 and includes the reviewed issue #30 maintenance and compact-terminal fixes. These changes add no B2/AWS, ARM64, or Linux recovery qualification. Check the [GitHub Releases page](https://github.com/CruxExperts/BestBackup/releases/latest) for tag and download availability. The retained 1.x tag remains available as v1.8.6.

## Version 2 stable release

Expand All @@ -9,24 +9,24 @@ The stable release uses Python 3.12 or newer and the `restic` executable. Instal
Install the pinned stable release with uv:

```bash
uv tool install --force 'git+https://github.com/CruxExperts/BestBackup.git@v2.0.5'
uv tool install --force 'git+https://github.com/CruxExperts/BestBackup.git@v2.0.6'
bbackup --version
bbackup production --help
```

The command is pinned to the `v2.0.5` source tag. To inspect or modify the source, use the development checkout below.
The command is pinned to the `v2.0.6` source tag. Check the [Releases page](https://github.com/CruxExperts/BestBackup/releases/latest) before installing to confirm the tag and its assets are available. To inspect or modify the source, use the development checkout below.

### Optional native database clients

PostgreSQL capture requires `pg_dump` and `psql` for source metadata; restoring into PostgreSQL requires `psql` and `pg_restore`. MySQL capture requires `mysql` and `mysqldump`, or the compatible MariaDB clients. Database clients are not installed by the Python package. MySQL/MariaDB capture requires an explicit read-lock policy and pauses database writes during the dump.

### Optional systemd scheduling

Version 2.0.5 supports explicit user-level installation through `service install`, with activation only when `--activate` is supplied. Scheduled file capture/copy/restore, missed-timer catch-up, and abrupt interruption without replay passed isolated Ubuntu 24.04/26.04 AMD64 guest drills; this does not qualify every host configuration or the root-owned Debian templates. Review [the quick start](QUICKSTART.md#apply-a-schedule-deliberately) and the [development candidate reboot qualification](docs/development/version-2.md#development-candidate-rebootable-systemd-qualification) before enabling a schedule. A user timer needs a user systemd manager and may need administrator-managed lingering to run after logout or at boot.
Version 2.0.6 retains the v2.0.5 user-level installation behavior through `service install`, with activation only when `--activate` is supplied. Scheduled file capture/copy/restore, missed-timer catch-up, and abrupt interruption without replay passed isolated Ubuntu 24.04/26.04 AMD64 guest drills; this does not qualify every host configuration or the root-owned Debian templates. Review [the quick start](QUICKSTART.md#apply-a-schedule-deliberately) and the [development candidate reboot qualification](docs/development/version-2.md#development-candidate-rebootable-systemd-qualification) before enabling a schedule. A user timer needs a user systemd manager and may need administrator-managed lingering to run after logout or at boot.

### Cloud repositories

Restic repositories can use local storage, Backblaze B2 through the S3 API, or Amazon S3. Cloud providers are configurable but not production-qualified; the v2.0.6 source candidate does not change that status. Configure credentials in the supervised process environment. Do not place credentials in portable JSON policy or a repository URL. See [cloud storage](docs/cloud-storage.md) for experimental provider setup and limits.
Restic repositories can use local storage, Backblaze B2 through the S3 API, or Amazon S3. Cloud providers are configurable but not production-qualified in v2.0.6. Configure credentials in the supervised process environment. Do not place credentials in portable JSON policy or a repository URL. See [cloud storage](docs/cloud-storage.md) for experimental provider setup and limits.

## Existing 1.x release

Expand All @@ -52,7 +52,7 @@ See [docs/management.md](docs/management.md) for legacy setup, health, remote, a

## Development checkout

The checkout contains the current v2.0.6 release-candidate source, including guided setup, schema-3 enrollment, issue #30 maintenance, and compact-terminal fixes. The candidate is not yet available as a published download. Follow its quick start and deliberately migrate existing schema-2 policy; migration preserves the original files.
The checkout contains v2.0.6 source, including guided setup, schema-3 enrollment, issue #30 maintenance, and compact-terminal fixes. Its release scope remains unchanged from v2.0.5. Follow its quick start and deliberately migrate existing schema-2 policy; migration preserves the original files.

```bash
git clone https://github.com/CruxExperts/BestBackup.git
Expand Down Expand Up @@ -81,7 +81,7 @@ sudo env \
UV_TOOL_DIR=/opt/uv/tools \
UV_TOOL_BIN_DIR=/usr/local/bin \
"$UV" tool install --force \
'git+https://github.com/CruxExperts/BestBackup.git@v2.0.5'
'git+https://github.com/CruxExperts/BestBackup.git@v2.0.6'

bbackup --version
```
Expand Down Expand Up @@ -113,12 +113,12 @@ Install a newer release tag with `uv tool install --force` and the exact tag. Pr

## Debian package installation

Native Ubuntu packages target Ubuntu 24.04 with Python 3.12 and Ubuntu 26.04 with Python 3.14, on amd64 or arm64. The v2.0.5 production-qualified package scope is amd64 only; ARM64 artifacts, if built, are unqualified pending functional capture/restore smoke tests. Use a package built natively for the target release, architecture, and Python version; the package builder refuses cross-build labels.
Native Ubuntu packages target Ubuntu 24.04 with Python 3.12 and Ubuntu 26.04 with Python 3.14, on amd64 or arm64. The v2.0.6 production-qualified package scope remains amd64 only; ARM64 artifacts are unqualified pending functional capture/restore smoke tests. Use a package built natively for the target release, architecture, and Python version; the package builder refuses cross-build labels.

Inspect the package, contents, manifest, and checksum before installing. For the Ubuntu 24.04 AMD64 artifact:
When the Ubuntu 24.04 AMD64 package is available from the [v2.0.6 release](https://github.com/CruxExperts/BestBackup/releases/latest), inspect its contents, manifest, and checksum before installing:

```bash
PACKAGE=dist/deb/bbackup_2.0.5_ubuntu24.04_amd64.deb
PACKAGE=dist/deb/bbackup_2.0.6_ubuntu24.04_amd64.deb
(cd "$(dirname "$PACKAGE")" && sha256sum -c "$(basename "${PACKAGE%.deb}.sha256")")
dpkg-deb --info "$PACKAGE"
dpkg-deb --contents "$PACKAGE"
Expand All @@ -130,13 +130,13 @@ cat "$REVIEW_DIR/usr/share/doc/bbackup/build-manifest.json"
Install only after reviewing that output:

```bash
sudo apt install ./dist/deb/bbackup_2.0.5_ubuntu24.04_amd64.deb
sudo apt install ./dist/deb/bbackup_2.0.6_ubuntu24.04_amd64.deb
bbackup --version
bbman --help
```

The release build matrix targets four uniquely named native packages: `bbackup_<version>_ubuntu24.04_amd64.deb`, `bbackup_<version>_ubuntu24.04_arm64.deb`, `bbackup_<version>_ubuntu26.04_amd64.deb`, and `bbackup_<version>_ubuntu26.04_arm64.deb`. A configured matrix is not evidence that all four artifacts have been built or qualified. Each package contains the versioned Python package, its locked dependencies, and the verified restic binary. Installation does not install Python packages into system Python, access a package index at runtime, enable or start services, or remove configuration, private bindings, credentials, repositories, or backup state.
The v2.0.5 release workflow also builds ARM64 packages, but its install smoke does not qualify backup/restore functionality on ARM64. Treat those packages as experimental.
The v2.0.6 release workflow also builds ARM64 packages, but its install smoke does not qualify backup/restore functionality on ARM64. Treat those packages as experimental.

Package upgrades and removals refuse while either command is active. A root-owned marker blocks both launchers while package files are changing. Successful configuration verifies the installed payload checksum manifest before clearing the marker. On abort, a marker requires the exclusive process lock and complete payload validation before removal. Without a marker, the abort hook takes a shared lock, verifies the payload and launchers, and returns without clearing anything; existing clients can continue while transition writers remain excluded.

Expand Down
17 changes: 9 additions & 8 deletions QUICKSTART.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Your first backup and verified restore

This guide covers the published v2.0.5 setup and its schema-3 policy. The current v2.0.6 release-candidate source also includes the issue #30 and compact-terminal changes below, but those candidate downloads are not published yet. For an older v2.0.2 installation, use its [versioned quick start](https://github.com/CruxExperts/BestBackup/blob/v2.0.2/QUICKSTART.md) until you migrate. Keep an independently retrievable copy of each repository password.
This guide covers v2.0.6 and its schema-3 policy, including the issue #30 maintenance and compact-terminal changes below. Version 2.0.6 retains the v2.0.5 tested support scope; check the [GitHub Releases page](https://github.com/CruxExperts/BestBackup/releases/latest) for tag and download availability. For an older v2.0.2 installation, use its [versioned quick start](https://github.com/CruxExperts/BestBackup/blob/v2.0.2/QUICKSTART.md) until you migrate. Keep an independently retrievable copy of each repository password.

## Start with the guided dashboard

Expand Down Expand Up @@ -128,15 +128,16 @@ qualify complete-machine disaster recovery.

Persistent timers can catch up after an idle interruption. An interrupted mutation remains uncertain and blocks automatic replay until explicit reconciliation. Retention remains a separate reviewed action; scheduling does not silently prune data.

## Review local retention and stale locks (unreleased)
<a id="review-local-retention-and-stale-locks-unreleased"></a>

The current v2.0.6 candidate source includes the following maintenance features
for issue [#30](https://github.com/CruxExperts/BestBackup/issues/30). The
candidate is not yet a published download, so these commands require this source
checkout rather than the published v2.0.5 artifacts. Use an explicitly enrolled
policy and bindings; the examples below use the default configuration paths.
## Review local retention and stale locks in v2.0.6

The candidate dashboard layout keeps forms and setup navigation reachable in
Version 2.0.6 includes the following maintenance features for issue
[#30](https://github.com/CruxExperts/BestBackup/issues/30), while retaining the
v2.0.5 tested support scope. Use an explicitly enrolled policy and bindings;
the examples below use the default configuration paths.

The v2.0.6 dashboard layout keeps forms and setup navigation reachable in
compact terminals. Use `Tab` and `Shift+Tab` to move between controls; the
focused control scrolls into view. Use `F1` for field help. The legacy live
dashboard summarizes resource categories and keeps failures and cancel hints
Expand Down
19 changes: 12 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

bbackup is an encrypted, restic-based backup tool for Linux system administrators, homelab and self-hosted operators, and small infrastructure teams. It brings local file backups, selected database workflows, verified file restores, and observable scheduled jobs into one operator workflow.

[![Python 3.12+](https://img.shields.io/badge/python-3.12%2B-3776ab?style=flat-square&logo=python&logoColor=white)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/license-MIT-22c55e?style=flat-square)](LICENSE) [![Version 2.0.5](https://img.shields.io/badge/version-2.0.5-22c55e?style=flat-square)](https://github.com/CruxExperts/BestBackup/releases/latest)
[![Python 3.12+](https://img.shields.io/badge/python-3.12%2B-3776ab?style=flat-square&logo=python&logoColor=white)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/license-MIT-22c55e?style=flat-square)](LICENSE) [![Version 2.0.6](https://img.shields.io/badge/version-2.0.6-22c55e?style=flat-square)](https://github.com/CruxExperts/BestBackup/releases/latest)

![bbackup: encrypted snapshot layers, an additional copy, and a restored document](docs/assets/bbackup-banner-v2.png)

Expand Down Expand Up @@ -40,9 +40,11 @@ uv run bbackup production tui

Choose a source folder, encrypted storage, and a schedule. Review and enroll once. The dashboard then guides you through initializing storage, running the first backup, and restoring into a new folder. Advanced settings and the command line remain available. The [quick start](QUICKSTART.md) covers migration, password custody, replica setup, and deliberate schedule activation.

## v2.0.5 tested scope
<a id="v205-tested-scope"></a>

The qualified scope is unchanged from v2.0.4: local file capture and restore;
## v2.0.6 tested scope

The qualified scope is unchanged from v2.0.5 and v2.0.4: local file capture and restore;
live capture and restore for PostgreSQL 17.11, MySQL 8.4.12, and MariaDB 11.8.9;
headless dashboard happy paths; and AMD64 Ubuntu 24.04/26.04 packages. User-timer
reboot qualification covers only the components and conditions in the
Expand All @@ -64,18 +66,21 @@ trials do not prove prune completion, elapsed expiry, physical reclamation or
provider protection. The [qualification record](docs/development/version-2.md)
owns the complete evidence and support limits.

### Current source changes
### Maintenance in v2.0.6

The source checkout also includes [unreleased issue #30 maintenance](docs/development/version-2.md#unreleased-maintenance-issue-30):
v2.0.6 includes [issue #30 maintenance](docs/development/version-2.md#unreleased-maintenance-issue-30):
reviewed stale-lock handling, optional local last/weekly retention, strict
keep-all parsing, B2 lifecycle-read compatibility and nested cache handling.
These changes are separate from the v2.0.5 downloads. Follow the
Follow the
[maintenance quick start](QUICKSTART.md#review-local-retention-and-stale-locks-unreleased)
for the new commands.

The [current maintenance batch](docs/development/version-2.md#unreleased-layout-and-dependency-maintenance)
also repairs compact-terminal layouts and refreshes reviewed Python and CI
dependencies. Those changes are likewise unreleased.
dependencies. Release preparation uses the official Release Please CLI with
a reviewed lockfile and patched Node runtime; publication still requires the
signed candidate, tag, checksums and artifact verification described in
[versioning](docs/VERSIONING.md).

## Choose a guide

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.0.5
2.0.6
2 changes: 1 addition & 1 deletion bbackup/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
Encrypted restic-based workflows; legacy Docker commands remain available.
"""

__version__ = "2.0.5"
__version__ = "2.0.6"
__author__ = "Slavic Kozyuk / Crux Experts LLC"
2 changes: 1 addition & 1 deletion bbackup/data/cli-skills.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# CLI skills catalog

> Generated from the bbackup/bbman CLI metadata. Version: 2.0.5. This catalog is authoritative for this version.
> Generated from the bbackup/bbman CLI metadata. Version: 2.0.6. This catalog is authoritative for this version.
> Source: `bbackup/cli_metadata.py` rendered by `scripts/generate_cli_skills.py`; run the generator's `--check` mode before publishing.

## bbackup
Expand Down
Loading
Loading