james.maesandClaude Opus 5.5 acf51b6749 feat(help): ship the qbit-backups help bundle through QQQ help bundles, with coverage gate
Host-neutral help (deployment-specific facts removed), registered with
HelpBundles, gated by HelpBundleAssertions. QQQ 4.1.0-RC.7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:17:05 -05:00

QBit Backups

License Java

QQQ QBit: logical backup, restore and verification of QQQ data to S3-compatible storage.

Status: design: QRun-IO/qqq#1091; implementation in progress. Nothing is published yet.

Requirements

  • Java 21.
  • QQQ 4.1.0-RC.7 or later.

Install

Not yet published. Once released, add com.kingsrook.qbits:qbit-backups and produce the qbit into your QInstance:

new BackupsQBitProducer()
   .withQBitConfig(new BackupsQBitConfig().withBackendName("rdbms"))
   .produce(qInstance);

Setup

This qbit ships no DDL and seeds nothing from a changelog: its one setup value, the storage bucket alias, belongs to your application. On a fresh install open Backups, read the Setup card, and run Create default plan on Backup plans (it asks only for the alias of a bucket your storage resolver provides). It creates the insert-only "Nightly full" plan: whole instance, data and audit tables, JSONL and gzip, 02:00 UTC, verified Sundays 04:00 UTC. Edit any setting afterwards. Help for every table, including how its rows get created, ships in help/qbit-backups.yaml.

Naming

Tables are backups_<name> (lowercase snake_case, backend name equal to the table name). Permissions are backups.<action>.

Adopting in another app

Follow the QQQ adoption checklist once the first release is published.

Build

./mvnw verify

See the RC.6 migration notes for fingerprint compatibility, paging guarantees and restore permissions.

In-app help

The producer registers help/qbit-backups.yaml as a QBIT bundle. Hosts can register a layer: HOST bundle with matching entry keys and roles to override its text. Core's help startup sync applies the bundle when the host installs the help content table; registration also works without that table.

BackupPlanScheduleTest checks coverage with HelpBundleAssertions, including live references and optional scheduler processes. BackupsTablesGuardrailTest checks empty-state, widget and possible-value-source coverage. Run it with ./mvnw verify. Keep the bundle's literal version aligned with the POM version.

Always use the Maven wrapper (Maven 3.9.11); Maven 3.10 cannot read the parent POM.

License

Apache License 2.0. See LICENSE and NOTICE.

Alerts integration

Backups binds directly to core QAlerts in QQQ 4.1.0-RC.5 and declares its nine alert types on each instance. Hosts install an AlertSinkInterface through AlertsInstanceMetaData.withSink(QCodeReference). Without a configured sink, backup alert calls remain no-ops (they do not use core's logging fallback). Custom BackupAlertSink bindings are preserved. Core handles dispatch failures; adapter failures are caught and logged once, so alerting cannot fail a backup. Raise and resolve follow core's transaction-aware dispatch; heartbeats run immediately. The backup SLA checker still owns expected intervals and grace periods.

RC.5 requires hyphenated alert names: backups.run.missing-in-storage and backups.plan.owner-invalid replace the former underscore spellings, including their deduplication keys. Update host routing rules that used those spellings.

S
Description
QQQ QBit: logical backup, restore and verification of QQQ data to S3-compatible storage
Readme
20 MiB
0 Stars 3 Watchers 0 Forks
Languages
Java 100%