diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 2e9c48c..b83b80e 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.0.5" + ".": "2.0.6" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 84260b1..0f338f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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- @@ -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 @@ -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 diff --git a/INSTALL.md b/INSTALL.md index 90c788c..806d2c3 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -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 @@ -9,12 +9,12 @@ 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 @@ -22,11 +22,11 @@ PostgreSQL capture requires `pg_dump` and `psql` for source metadata; restoring ### 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 @@ -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 @@ -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 ``` @@ -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" @@ -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__ubuntu24.04_amd64.deb`, `bbackup__ubuntu24.04_arm64.deb`, `bbackup__ubuntu26.04_amd64.deb`, and `bbackup__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. diff --git a/QUICKSTART.md b/QUICKSTART.md index 386b1ed..4dd6005 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -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 @@ -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) + -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 diff --git a/README.md b/README.md index 6c7434a..7d355b2 100644 --- a/README.md +++ b/README.md @@ -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) @@ -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 + -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 @@ -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 diff --git a/VERSION b/VERSION index e010258..157e54f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.5 +2.0.6 diff --git a/bbackup/__init__.py b/bbackup/__init__.py index 31f32e6..4d74c9e 100644 --- a/bbackup/__init__.py +++ b/bbackup/__init__.py @@ -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" diff --git a/bbackup/data/cli-skills.md b/bbackup/data/cli-skills.md index c13d983..3d6a017 100644 --- a/bbackup/data/cli-skills.md +++ b/bbackup/data/cli-skills.md @@ -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 diff --git a/docs/README.md b/docs/README.md index a271127..6a8ac4c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,10 +2,10 @@ bbackup is for Linux administrators, homelab and self-hosted operators, and small infrastructure teams who need encrypted local backups, verified file restores, and visible scheduled jobs. Choose a guide by the work you are doing. -These guides describe published v2.0.5 and the v2.0.6 release-candidate source. -Candidate downloads are not published yet. Check the -[qualification record](development/version-2.md) for the exact supported scope -before selecting a workflow. +These guides describe v2.0.6 and its release scope, which remains unchanged +from v2.0.5. Check the [GitHub Releases page](https://github.com/CruxExperts/BestBackup/releases/latest) +for tag and download availability, and consult the +[qualification record](development/version-2.md) before selecting a workflow. ## Choose a starting point @@ -25,26 +25,22 @@ before selecting a workflow. ## Version and support boundaries -Published v2.0.5 retains the v2.0.4 tested core scope. The v2.0.6 candidate -contains the maintenance updates below but adds no B2/AWS, ARM64, or Linux -recovery qualification. Experimental cloud and Linux workflows remain -unqualified; issues #23–#26 were canceled and closed as not planned. An -implemented path or a closed issue does not establish support. The -[qualification record](development/version-2.md) retains the dated evidence. +Version 2.0.6 retains the v2.0.5 tested core scope and includes the maintenance +updates below. It adds no B2/AWS, ARM64, or Linux recovery qualification. +Experimental cloud and Linux workflows remain unqualified; issues #23–#26 were +canceled and closed as not planned. An implemented path or a closed issue does +not establish support. The [qualification record](development/version-2.md) +retains the dated evidence. -The v2.0.6 candidate source includes [issue #30 maintenance](development/version-2.md#unreleased-maintenance-issue-30) +Version 2.0.6 includes [issue #30 maintenance](development/version-2.md#unreleased-maintenance-issue-30) for reviewed stale locks, local retention counts, strict Restic parsing, B2 -lifecycle-read compatibility and nested cache policy. The original section -anchor is retained. Follow the +lifecycle-read compatibility and nested cache policy. Follow the [maintenance quick start](../QUICKSTART.md#review-local-retention-and-stale-locks-unreleased) -before using those commands from the candidate source; they are not in the -published v2.0.5 downloads yet. +for setup and reviewed use. The [layout and dependency batch](development/version-2.md#unreleased-layout-and-dependency-maintenance) -is also included in the v2.0.6 candidate, with its existing section anchor -retained. It covers compact terminal forms, documentation navigation, and -reviewed Python and GitHub Actions maintenance; candidate downloads are pending -publication. +is included in v2.0.6. It covers compact terminal forms, documentation +navigation, and reviewed Python and GitHub Actions maintenance. Operators still using v2.0.2 can follow its [versioned documentation](https://github.com/CruxExperts/BestBackup/tree/v2.0.2/docs) @@ -54,7 +50,7 @@ until they migrate. - [Versioning](VERSIONING.md): Release Please drafts, canonical package version, signed release tags and validation. - [Publishing checklist](PUBLISHING_CHECKLIST.md): community files and release readiness. -- [Qualification record](development/version-2.md): candidate results and deferred assurance. +- [Qualification record](development/version-2.md): validation results and deferred assurance. - [Release dependency evidence](development/release-dependencies.json): reviewed versions, source timestamps, lock hash and audit limits. - [Documentation assets](assets/README.md): asset inventory and visual standards. diff --git a/docs/VERSIONING.md b/docs/VERSIONING.md index 331df35..e1a6811 100644 --- a/docs/VERSIONING.md +++ b/docs/VERSIONING.md @@ -1,6 +1,6 @@ # Versioning -`VERSION` is the canonical release version. The current version is `2.0.5`. +`VERSION` is the canonical release version. The current version is `2.0.6`. The earlier `v2.0.0` and `v2.0.1` tags did not produce release artifacts; the retained legacy line is `1.8.6`. Stable support is limited to the tested scope in [`docs/development/version-2.md`](development/version-2.md). diff --git a/docs/cli-skills.md b/docs/cli-skills.md index c13d983..3d6a017 100644 --- a/docs/cli-skills.md +++ b/docs/cli-skills.md @@ -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 diff --git a/docs/development/release-dependencies.json b/docs/development/release-dependencies.json index d9650bb..1419ef0 100644 --- a/docs/development/release-dependencies.json +++ b/docs/development/release-dependencies.json @@ -118,10 +118,10 @@ } }, "lockfile": { - "local_project_version": "2.0.5", + "local_project_version": "2.0.6", "locked_pypi_packages": 51, "path": "uv.lock", - "sha256": "f7aab4b971fb2bcc92889928d61f83fbe65f315fb590910b4a9cbbb89df8a4a4" + "sha256": "d55dea5727136d838fc42d93d94fd7ef967caf602b935d0651dc3c767214b5fa" }, "package_versions": [ { @@ -330,8 +330,8 @@ } ], "release": { - "release_date_utc": "2026-10-22", - "version": "2.0.5" + "release_date_utc": "2026-10-23", + "version": "2.0.6" }, "schema_version": 1, "external_build_tools": { @@ -376,7 +376,7 @@ } }, "source_checkout": { - "status": "unreleased", + "status": "release-source", "maintenance_pull_requests": [ 20, 28 @@ -385,8 +385,11 @@ "published_release_evidence": { "tag": "v2.0.5", "sha256": "3e3b833f1882a21365c286ddac2961cc11cb279e6c8a3eb1362be6f415a55739", - "url": "https://github.com/CruxExperts/BestBackup/blob/v2.0.5/docs/development/release-dependencies.json" - } + "url": "https://github.com/CruxExperts/BestBackup/blob/v2.0.5/docs/development/release-dependencies.json", + "note": "Historical evidence for the previous v2.0.5 release. This report binds v2.0.6 source; its release-provenance asset records the exact source, CI and build bindings." + }, + "qualification": "Maintenance release; historical provider, machine-recovery and platform qualification limits are unchanged.", + "version": "2.0.6" }, "github_actions_maintenance": { "status": "unreleased", diff --git a/docs/development/version-2.md b/docs/development/version-2.md index ae54841..0105c74 100644 --- a/docs/development/version-2.md +++ b/docs/development/version-2.md @@ -1,16 +1,17 @@ # Version 2 development -> Stable v2.0.5 production qualification retains the tested core scope recorded -> below. Experimental additions remain unqualified. The dated records retain -> historical evidence and limits without expanding that scope. The v2.0.6 -> release-candidate source now includes the maintenance batches below; its -> downloads are pending publication. Until publication, v2.0.5 remains the -> latest available release, and no new provider or Linux recovery qualification -> is claimed. +> Version 2.0.6 retains the v2.0.5 production-qualified core scope recorded +> below and includes the maintenance batches in this record. Experimental +> additions remain unqualified. The dated evidence remains historical and no +> B2/AWS, ARM64, Linux recovery, off-host, or complete-machine qualification is +> added. Check the [GitHub Releases page](https://github.com/CruxExperts/BestBackup/releases/latest) +> for tag and download availability. -## Unreleased layout and dependency maintenance + -The source checkout includes compact-terminal layout repairs for the production +## v2.0.6 layout and dependency maintenance + +Version 2.0.6 includes compact-terminal layout repairs for the production dashboard, guided setup and retained Rich dashboard. Forms scroll within the available viewport, setup navigation stays reachable, and compact status gives failures and cancel hints priority. Resource summaries retain each resource @@ -31,11 +32,11 @@ The retry regression covers both 429 and 503 responses, including the fallback when that header is absent. Inspection deadlines and cancellation still bound the SDK subprocess; this offline check adds no live provider qualification. -These changes are included in the v2.0.6 candidate source. The candidate is not -a published artifact and does not expand Docker, cloud-provider, off-host -recovery or complete-machine support. +This maintenance release scope is unchanged from v2.0.5 and does not expand +Docker, cloud-provider, off-host recovery or complete-machine support. -On 2026-10-23, the final local maintenance candidate passed 1,295 tests with +On 2026-10-23, the prior maintenance candidate, before the v2.0.6 version +bump, passed 1,295 tests with one skipped test in 114.24 seconds using three workers. This includes the 47 dashboard and TUI cases and the 45 B2 cases covering the upgraded SDK. Headless captures confirmed the populated/error-state Rich layout at 60x20 @@ -46,11 +47,22 @@ The skipped legacy Docker volume roundtrip still does not qualify that path. Ruff, Python compilation, version synchronization, generated CLI/schema checks, Markdown, artwork provenance, publishing readiness and whitespace checks passed. The wheel and source archive built and passed isolated installed-artifact smoke -checks. These checks validate the source candidate without publishing a release. +checks. These timings, captures and artifact checks belong to that earlier +candidate and are reused as evidence for unchanged production runtime code. + +The v2.0.6 preparation separately passed 37 focused release-preparation, +source/provenance and Markdown tests, version and generated-file alignment, +lint, compilation, documentation and publishing checks. Its versioned wheel +and source archive built and passed installed-artifact smoke checks. The +release's `release-provenance.json` asset binds the exact tagged source, trusted +CI and build runs. These checks do not add host, provider or recovery +qualification. + + -## Unreleased maintenance (issue #30) +## v2.0.6 maintenance (issue #30) -The v2.0.6 candidate source implements the reviewed portions of +Version 2.0.6 implements the reviewed portions of [#30](https://github.com/CruxExperts/BestBackup/issues/30): bounded repository lock inspection and explicitly approved stale unlock, optional `local_last` and `local_weekly` counts, strict parsing of valid Restic keep-all output, @@ -65,7 +77,8 @@ before applying exact snapshot IDs. See the [maintenance quick start](../../QUICKSTART.md#review-local-retention-and-stale-locks-unreleased) for configuration and commands. -On 2026-10-23, the local Python 3.12 suite passed with 1,287 tests and one +On 2026-10-23, before the v2.0.6 version bump, the issue #30 candidate's local +Python 3.12 suite passed with 1,287 tests and one skipped test, including integration tests with Restic 0.19.1 and an available Docker daemon. The disposable lock drill preserved an existing snapshot, planned keep-all retention with 12 last/14 daily/8 weekly counts, refused a live @@ -73,8 +86,8 @@ lock, and removed its reviewed stale lock after the owned process was killed. Ruff, compilation, version and generated-command checks, Markdown, artwork provenance, publishing readiness and whitespace checks passed. The wheel and source archive built and passed installed-artifact smoke checks. Independent -review found no remaining blocking correctness findings. These are development -results, not new published-artifact or production qualification. +review found no remaining blocking correctness findings. These are source and +artifact validation results, not new production qualification. The existing legacy Docker volume restore roundtrip skipped after its backup step returned failure. A focused rerun confirmed that skip; this validation @@ -86,10 +99,9 @@ during bounded startup; the production inspector still rejects changing lock sets, and uncertain unlocks are never retried. This covers slower hosted lock acquisition without weakening the maintenance safety checks. -These changes are included in the v2.0.6 release-candidate source, not -acceptance of private candidate builds or permission to modify deployed -installations. Published downloads remain at v2.0.5 until release publication. -No B2/AWS protection, off-host custody, thirty-day recovery window or +These v2.0.6 changes do not certify private builds or authorize modifications +to deployed installations. No B2/AWS protection, off-host +custody, thirty-day recovery window or complete-machine recovery qualification is added; the canceled scopes of #23-#26 remain canceled and unqualified. @@ -1799,7 +1811,7 @@ recovery limits rather than treating discoverability as additional qualification ## Dependency evidence The entries below record earlier candidates and released 2.0.x inputs. They -remain historical evidence. For the current v2.0.6 candidate dependency graph, use +remain historical evidence. For the v2.0.6 dependency graph, use the [source maintenance record](#unreleased-layout-and-dependency-maintenance) and [exact lockfile review](release-dependencies.json). diff --git a/docs/production-cli.md b/docs/production-cli.md index 1a64c32..0f0b93e 100644 --- a/docs/production-cli.md +++ b/docs/production-cli.md @@ -2,7 +2,7 @@ > Generated by `scripts/generate_cli_skills.py` from `bbackup/cli_metadata.py`. -The package version is v2.0.5. This reference follows the current source checkout, including any unreleased commands. Production qualification and release availability remain limited to the tested scope in [version 2 release evidence](development/version-2.md). +The package version is v2.0.6. This reference follows the current source checkout, including any unreleased commands. Production qualification and release availability remain limited to the tested scope in [version 2 release evidence](development/version-2.md). Prefix commands with `bbackup production --config CONFIG --bindings BINDINGS`. diff --git a/pyproject.toml b/pyproject.toml index e5c7fe9..86a7705 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bbackup" -version = "2.0.5" +version = "2.0.6" description = "Local-first encrypted Linux backups with restic and a visual dashboard" readme = "README.md" requires-python = ">=3.12" diff --git a/uv.lock b/uv.lock index f2f1c42..dad17a7 100644 --- a/uv.lock +++ b/uv.lock @@ -31,7 +31,7 @@ wheels = [ [[package]] name = "bbackup" -version = "2.0.5" +version = "2.0.6" source = { editable = "." } dependencies = [ { name = "b2sdk" },