-
Onebox v32.10.0
StableRelease / build-and-release (push) Successful in 21m10sreleased this
2026-09-25 08:00:04 +00:00 | 13 commits to main since this release2026-09-25 - 32.10.0
Features
- Move the backup archive to the index generations of
@serve.zone/containerarchive0.7.0. The data version moves to0.23.0through the stepbackup-archive-index-generations, which converts an existing repository withContainerArchive.migrate()at the first start, before the archive is opened, and logs the previous format and the number of indexed chunks and index segments. An install without a repository passes; a repository that cannot be inspected or converted refuses the boot asbackup-archive-migration-blocked: <stage>, and the ContainerArchive error behind it is logged. The conversion is one-way: Onebox releases up to 32.9.0 refuse the0.23.0ledger by name, and ContainerArchive 0.6.x refuses the converted repository, so recovery after the upgrade is forward only unless a copy of both the database and the backup repository was taken before it. - Reclaim the storage of deleted backups. The daily archive prune now runs as garbage collection only,
prune({}, false): it keeps every snapshot and deletes the whole packs that no remaining snapshot references. Onebox's backup rows alone decide which backups expire. Each run logs one line with the packs removed, the bytes freed, the snapshots kept, the interrupted deletions it finished and left, and the ids of the snapshots that no backup row names and no pin holds, which are kept. A prune result that removed a snapshot is reported asbackup-archive-prune-removed-snapshots. - Mark a backup before deleting it. A deletion sets
deletionStartedAton the row, deletes the snapshot, then deletes the row; a marked row is hidden from listing, restore, download and retention, and is finished when the archive opens and before each archive prune, so a crash between the two deletions no longer leaves a row that names a missing snapshot. onebox auth reset-passkeystakes--state-root <path>instead of--database-path <path>and defaults to the daemon's state root (/var/lib/onebox, orONEBOX_STATE_ROOT), because opening the database runs the startup migrations, and the backup archive step resolves the repository against the state root.OneboxDatabaseis now constructed from the runtime paths, and the backup archive path is resolved in one place for the daemon, offline commands and the data migration. The old--database-pathand a--state-rootwithout a path are refused by name before any database is opened, so the command never falls back to the default state root.
Fixes
- Keep backups when the archive prune runs under ContainerArchive 0.7.0. The prune passed the most generous schedule retention as a repository-wide policy, which 0.6.x refused and 0.7.0 would have applied: it keeps one snapshot per calendar day, week or month across all services, so it would have deleted the snapshots of other services, of manual and of imported backups while their rows remained.
- Refuse by name, as
backup-archive-migration-required, a backup repository that is still in ContainerArchive'sindex/layout when the archive is opened, instead of attempting to initialize a new repository over it. A non-empty repository path that can be neither opened nor inspected is refused asbackup-archive-unreadablewith both errors named.
Maintenance
- Update
@serve.zone/containerarchivefrom 0.6.2 to 0.7.0 inpackage.json,pnpm-lock.yamland the binary'sdeno.lock. Add the development dependencycontainerarchive-legacy-index, an npm alias of@serve.zone/containerarchive@0.6.2, which writes repositories in theindex/layout for the migration tests.
Downloads
- Move the backup archive to the index generations of