backup classification: backup: blocks for the 13 bind-bearing apps
Adds the referential-coupling backup: block to every app that binds
${HDD_PATH}/${USERDATA_PATH} (immich, paperless-ngx, nextcloud, calibre-web,
audiobookshelf, komga, navidrome, radarr, sonarr, emby, jellyfin, plex, romm).
Each lists its userdata:/hdd: binds with class mandatory|optional|excluded
(operator-ruled + spike SQ2).
Requires controller v0.132.0 (deployed) which parses+validates these blocks.
INERT — no backup tier changes behavior yet (Task 3/4 consume it). All 13
verified against the shipped parser: parse-clean, every bind resolves explicit.
audiobookshelf media/audiobooks = optional (PENDING Viktor veto to excluded).
Ref: felhom.eu/documentation/audits/SPIKE-backup-classification-2026-07-14.md
This commit is contained in:
@@ -1,5 +1,24 @@
|
||||
# Changelog
|
||||
|
||||
## 2026-07-14 — backup classification `backup:` blocks for the 13 bind-bearing apps (controller v0.132.0)
|
||||
|
||||
Adds the referential-coupling `backup:` classification block to every catalog app that binds
|
||||
`${HDD_PATH}`/`${USERDATA_PATH}` (13 apps: immich, paperless-ngx, nextcloud, calibre-web,
|
||||
audiobookshelf, komga, navidrome, radarr, sonarr, emby, jellyfin, plex, romm). Each block lists its
|
||||
`userdata:`/`hdd:` binds with a `class ∈ {mandatory, optional, excluded}` (COUPLED /
|
||||
DECOUPLED-precious / DECOUPLED-bulk); classes are operator-ruled (Viktor, 2026-07-14) + spike SQ2.
|
||||
|
||||
Requires **controller v0.132.0**, which parses + validates these blocks (Task 2 of the
|
||||
backup-classification-redesign arc, `felhom.eu/documentation/audits/SPIKE-backup-classification-2026-07-14.md`).
|
||||
The classification is **INERT** — no backup tier changes behavior yet; Task 3 (tier policy engine)
|
||||
and Task 4 (manual `.fab` UI) consume it. All 13 blocks were verified against the shipped controller
|
||||
parser: parse-clean, every bind resolves `explicit` to its ruled class (zero validation errors).
|
||||
|
||||
Notes: audiobookshelf `media/audiobooks` = **optional** (consistency with komga/romm curated media;
|
||||
the spike proposed excluded — PENDING a Viktor veto). radarr/sonarr `downloads` = excluded (transient
|
||||
cross-app queue). emby/jellyfin/plex `media` = excluded (`:ro` readers; state in volumes). The 42
|
||||
volume-only apps get no block (classification moot — state rides in the recovery unit's volume dumps).
|
||||
|
||||
## 2026-07-12 — image pinning sweep: `:latest` eliminated from all templates (5 pins) + standing gate
|
||||
|
||||
A catalog sweep found 5/53 templates with unpinned images. Beyond version discipline, `:latest`
|
||||
|
||||
@@ -16,6 +16,16 @@ resources:
|
||||
pi_compatible: true
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
userdata:
|
||||
- path: media/audiobooks
|
||||
class: optional # PENDING-VETO: spike chose excluded; ruled optional for consistency
|
||||
# with komga/romm (curated, often personally ripped — precious).
|
||||
# If Viktor rules excluded, flip THIS LINE ONLY before committing.
|
||||
- path: media/podcasts
|
||||
class: excluded # re-downloadable by definition
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -16,6 +16,14 @@ resources:
|
||||
pi_compatible: false
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
userdata:
|
||||
- path: media/books
|
||||
class: mandatory # metadata.db lives INSIDE the tree — DB and books are one unit
|
||||
- path: import/calibre
|
||||
class: excluded # ingest inbox, transient
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -16,6 +16,12 @@ resources:
|
||||
pi_compatible: false
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
userdata:
|
||||
- path: media
|
||||
class: excluded # pure reader of the shared tree (:ro); state lives in volumes
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -21,6 +21,15 @@ resources:
|
||||
pi_compatible: false
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
hdd:
|
||||
- path: appdata/immich
|
||||
class: mandatory # managed upload library — DB-referenced (SQ3: restore-without = broken)
|
||||
userdata:
|
||||
- path: media/photos
|
||||
class: optional # external library, :ro — precious but re-scanned (explicit overrides ro-default)
|
||||
|
||||
# --- Deploy fields ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -16,6 +16,12 @@ resources:
|
||||
pi_compatible: false
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
userdata:
|
||||
- path: media
|
||||
class: excluded # pure reader of the shared tree (:ro); state lives in volumes
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -16,6 +16,12 @@ resources:
|
||||
pi_compatible: true
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
userdata:
|
||||
- path: media/comics
|
||||
class: optional # ruled: precious-decoupled (re-scanned, hand-curated)
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -16,6 +16,12 @@ resources:
|
||||
pi_compatible: true
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
userdata:
|
||||
- path: media/music
|
||||
class: excluded # re-rippable bulk, :ro, shared tree
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -16,6 +16,12 @@ resources:
|
||||
pi_compatible: false
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
hdd:
|
||||
- path: appdata/nextcloud
|
||||
class: mandatory # THE user files — oc_filecache/shares reference them
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -32,6 +32,17 @@ resources:
|
||||
pi_compatible: true # Runs on Raspberry Pi 3B+
|
||||
needs_hdd: true # Needs external storage for user data
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
hdd:
|
||||
- path: appdata/paperless/media
|
||||
class: mandatory # document originals+archive — DB hashes/paths reference them
|
||||
- path: appdata/paperless/export
|
||||
class: excluded # transient export target
|
||||
userdata:
|
||||
- path: import/paperless
|
||||
class: excluded # consume inbox — deleted after ingest by contract
|
||||
|
||||
# --- Deploy fields ---
|
||||
# Shown to the user during first deployment.
|
||||
# After deployment, values are saved to app.yaml in the stack directory.
|
||||
|
||||
@@ -16,6 +16,12 @@ resources:
|
||||
pi_compatible: false
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
userdata:
|
||||
- path: media
|
||||
class: excluded # pure reader of the shared tree (:ro); state lives in volumes
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -16,6 +16,14 @@ resources:
|
||||
pi_compatible: true
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
userdata:
|
||||
- path: media/movies
|
||||
class: excluded # re-downloadable by design
|
||||
- path: downloads
|
||||
class: excluded # ruled: transient queue (cross-app shared with sonarr)
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -16,6 +16,15 @@ resources:
|
||||
pi_compatible: false
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
userdata:
|
||||
- path: roms
|
||||
class: optional # ruled: curated ROM sets often not re-acquirable
|
||||
hdd:
|
||||
- path: appdata/romm/resources
|
||||
class: excluded # scraper cache, re-derivable
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
@@ -16,6 +16,14 @@ resources:
|
||||
pi_compatible: true
|
||||
needs_hdd: true
|
||||
|
||||
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
|
||||
backup:
|
||||
userdata:
|
||||
- path: media/tv
|
||||
class: excluded
|
||||
- path: downloads
|
||||
class: excluded
|
||||
|
||||
# --- Deploy fields (first deployment only) ---
|
||||
deploy_fields:
|
||||
- env_var: DOMAIN
|
||||
|
||||
Reference in New Issue
Block a user