restic (Go, one binary restic-backups like the licence manager) holds node-backup: one repository per machine, a nightly snapshot per module at 03:00 (and at start when a night was missed), 14 daily / 8 weekly / 6 monthly, restores beside the live data as <path>.restored-<date> and never over it, a weekly restic check reading 5% of the data. The repository key is an own-secret.
Dumps: postgres (pg_dump -Fc per database into store-data/dumps), mssql (BACKUP DATABASE … COPY_ONLY, CHECKSUM into data/backup), mongodb (mongodump --archive). Each command was run against the live servers into /tmp first.
Tests: 8/8 in Go, one with the real restic (back up, delete by mistake, restore beside, refuse a second restore over the first); vets and builds against mesh-sdk/go main. The controller's catalogue check passes over this branch.
After merging: assign restic to the control node and the home server.
Merge order: mesh-controller first, and let it deploy; then mesh-catalog; then hq. A controller without the node-backup seat refuses a module contributing to it, so the catalog's rebuilt store modules would not register before it.
- **`restic`** (Go, one binary `restic-backups` like the licence manager) holds `node-backup`: one repository per machine, a nightly snapshot per module at 03:00 (and at start when a night was missed), 14 daily / 8 weekly / 6 monthly, restores beside the live data as `<path>.restored-<date>` and never over it, a weekly `restic check` reading 5% of the data. The repository key is an own-secret.
- **Dumps**: postgres (`pg_dump -Fc` per database into `store-data/dumps`), mssql (`BACKUP DATABASE … COPY_ONLY, CHECKSUM` into `data/backup`), mongodb (`mongodump --archive`). Each command was run against the live servers into `/tmp` first.
- **Directories**: minio, influxdb, mesh-vault, mailu (mail, dkim, data, dav, webmail), gitea, nextcloud (html: config.php).
Tests: 8/8 in Go, one with the real restic (back up, delete by mistake, restore beside, refuse a second restore over the first); vets and builds against mesh-sdk/go main. The controller's catalogue check passes over this branch.
After merging: assign `restic` to the control node and the home server.
**Merge order: mesh-controller first, and let it deploy; then mesh-catalog; then hq.** A controller without the `node-backup` seat refuses a module contributing to it, so the catalog's rebuilt store modules would not register before it.
ADR 0214 / to-be 43. restic keeps one repository per machine and takes a nightly snapshot per
module — 14 daily, 8 weekly, 6 monthly — and restores beside the live data, never over it. postgres,
mssql and mongodb contribute a consistent dump; minio, influxdb, the vault, mailu, gitea and
nextcloud the directories that hold their data.
Go is the default for new module code; the holder is one binary like the licence manager, serving
the seat's verbs over the SDK and running the nights beside them. Same behaviour and tests.
Deliverynovox/mesh-catalog@96ee0d7ad6f8 — held since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.
Delivery plan — builds gitea, influxdb, mailu, mesh-vault, minio, mongodb, mssql, nextcloud, postgres, restic → ace, g14, novox, shanks; no bus step; 6 wait(s) for a person
ace: receives influxdb, restic; waits for a person: mssql, postgres
g14: receives restic
novox: receives gitea, mailu, mesh-vault, nextcloud, restic; waits for a person: minio, mongodb, mssql, postgres
shanks: receives restic
gitea provides npm-package-registry, git: its consumers are sent again after it
gitea keeps data (ADR 0233): what it holds is backed up before it moves
influxdb provides influxdb-api: its consumers are sent again after it
influxdb keeps data (ADR 0233): what it holds is backed up before it moves
mailu provides smtp: its consumers are sent again after it
mailu keeps data (ADR 0233): what it holds is backed up before it moves
mesh-vault provides secret: its consumers are sent again after it
mesh-vault keeps data (ADR 0233): what it holds is backed up before it moves
minio waits for a person: its policy records (module)
minio provides s3-bucket: its consumers are sent again after it
minio keeps data (ADR 0233): what it holds is backed up before it moves
mongodb waits for a person: its policy records (module)
mongodb provides mongodb-database: its consumers are sent again after it
mongodb keeps data (ADR 0233): what it holds is backed up before it moves
mssql waits for a person: its policy records (module)
mssql provides mssql-database: its consumers are sent again after it
mssql keeps data (ADR 0233): what it holds is backed up before it moves
nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
postgres waits for a person: its policy records (module)
postgres provides postgres-database: its consumers are sent again after it
postgres keeps data (ADR 0233): what it holds is backed up before it moves
restic keeps data (ADR 0233): what it holds is backed up before it moves
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#49 merged; its head was not heard by this owner, so it is made from the forge's word
2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@96ee0d7ad6f8` — **held** since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on.
**Delivery plan** — builds gitea, influxdb, mailu, mesh-vault, minio, mongodb, mssql, nextcloud, postgres, restic → ace, g14, novox, shanks; no bus step; 6 wait(s) for a person
- tier 0: gitea, influxdb, mailu, mesh-vault, minio, mongodb, mssql, nextcloud, postgres, restic
- ace: receives influxdb, restic; waits for a person: mssql, postgres
- g14: receives restic
- novox: receives gitea, mailu, mesh-vault, nextcloud, restic; waits for a person: minio, mongodb, mssql, postgres
- shanks: receives restic
- gitea provides npm-package-registry, git: its consumers are sent again after it
- gitea keeps data (ADR 0233): what it holds is backed up before it moves
- influxdb provides influxdb-api: its consumers are sent again after it
- influxdb keeps data (ADR 0233): what it holds is backed up before it moves
- mailu provides smtp: its consumers are sent again after it
- mailu keeps data (ADR 0233): what it holds is backed up before it moves
- mesh-vault provides secret: its consumers are sent again after it
- mesh-vault keeps data (ADR 0233): what it holds is backed up before it moves
- minio waits for a person: its policy records (module)
- minio provides s3-bucket: its consumers are sent again after it
- minio keeps data (ADR 0233): what it holds is backed up before it moves
- mongodb waits for a person: its policy records (module)
- mongodb provides mongodb-database: its consumers are sent again after it
- mongodb keeps data (ADR 0233): what it holds is backed up before it moves
- mssql waits for a person: its policy records (module)
- mssql provides mssql-database: its consumers are sent again after it
- mssql keeps data (ADR 0233): what it holds is backed up before it moves
- nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
- postgres waits for a person: its policy records (module)
- postgres provides postgres-database: its consumers are sent again after it
- postgres keeps data (ADR 0233): what it holds is backed up before it moves
- restic keeps data (ADR 0233): what it holds is backed up before it moves
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#49 merged; its head was not heard by this owner, so it is made from the forge's word
- 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
restic(Go, one binaryrestic-backupslike the licence manager) holdsnode-backup: one repository per machine, a nightly snapshot per module at 03:00 (and at start when a night was missed), 14 daily / 8 weekly / 6 monthly, restores beside the live data as<path>.restored-<date>and never over it, a weeklyrestic checkreading 5% of the data. The repository key is an own-secret.pg_dump -Fcper database intostore-data/dumps), mssql (BACKUP DATABASE … COPY_ONLY, CHECKSUMintodata/backup), mongodb (mongodump --archive). Each command was run against the live servers into/tmpfirst.Tests: 8/8 in Go, one with the real restic (back up, delete by mistake, restore beside, refuse a second restore over the first); vets and builds against mesh-sdk/go main. The controller's catalogue check passes over this branch.
After merging: assign
resticto the control node and the home server.Merge order: mesh-controller first, and let it deploy; then mesh-catalog; then hq. A controller without the
node-backupseat refuses a module contributing to it, so the catalog's rebuilt store modules would not register before it.Delivery
novox/mesh-catalog@96ee0d7ad6f8— held since 2026-10-06T23:05:28ZHeld for a person: merged without a passing check: only a person decides that it goes on —
mesh-delivery.releasewith why lets it go on.Delivery plan — builds gitea, influxdb, mailu, mesh-vault, minio, mongodb, mssql, nextcloud, postgres, restic → ace, g14, novox, shanks; no bus step; 6 wait(s) for a person
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.