Deliver upgrade, removal, and legacy retirement #31

Closed
opened 2026-08-31 18:24:38 +00:00 by xavierk · 1 comment
Owner

Parent

Implement the Fenris persistent TUI monitoring redesign

Canonical contracts: fenris-redesign spec · acceptance criteria — criterion IDs cited below live in the register.

What to build

Lifecycle completion. sudo make upgrade installs the new wheel into the same venv, syncs units and polkit against the manifest (daemon-reload; timer restarted only if unit contents changed and it is active), never kills an in-flight collection run, snapshots the observation store to a one-generation backup, then applies forward-only schema migrations — the store directory is never rebuilt, and automatic downgrade does not exist. make uninstall performs the sanctioned disable first (an open period closes user_disabled), then removes every placed artifact while keeping configuration and observation history; make purge removes those too. Pin refreshes are an explicit committed make update-deps step, never an install side effect. The README is rewritten for install, upgrade, uninstall/purge, cadence drop-ins, and the five retired menu options' successors; the legacy menu script and monolith are removed from the repository.

Acceptance criteria

  • Upgrade syncs units and polkit against the manifest, restarts the timer only when contents changed and it is active, and never kills an in-flight collection run (IN-5)
  • One-generation database backup before migrations; rollback is reinstall-previous plus restore; no automatic downgrade; /var/lib/fenris never rebuilt (IN-6)
  • Uninstall performs the sanctioned disable first, then removes venv, helpers, units, polkit policy, and wrapper while keeping /etc/fenris and the observation store; purge removes those too (IN-7)
  • Dependencies refreshed only via the explicit make update-deps step, committed (IN-8)
  • README documents install, upgrade, uninstall/purge, legacy import, cadence drop-ins, and maps the five retired menu options to successors; the legacy menu script and monolith are gone from the repository (LC-9)

Blocked by

## Parent [Implement the Fenris persistent TUI monitoring redesign](https://git.bongbetic.com/xavierk/Fenris/issues/20) Canonical contracts: [fenris-redesign spec](https://git.bongbetic.com/xavierk/Fenris/src/branch/main/docs/spec/fenris-redesign.md) · [acceptance criteria](https://git.bongbetic.com/xavierk/Fenris/src/branch/main/docs/spec/acceptance-criteria.md) — criterion IDs cited below live in the register. ## What to build Lifecycle completion. `sudo make upgrade` installs the new wheel into the same venv, syncs units and polkit against the manifest (`daemon-reload`; timer restarted only if unit contents changed and it is active), never kills an in-flight collection run, snapshots the observation store to a one-generation backup, then applies forward-only schema migrations — the store directory is never rebuilt, and automatic downgrade does not exist. `make uninstall` performs the sanctioned disable first (an open period closes `user_disabled`), then removes every placed artifact while keeping configuration and observation history; `make purge` removes those too. Pin refreshes are an explicit committed `make update-deps` step, never an install side effect. The README is rewritten for install, upgrade, uninstall/purge, cadence drop-ins, and the five retired menu options' successors; the legacy menu script and monolith are removed from the repository. ## Acceptance criteria - [ ] Upgrade syncs units and polkit against the manifest, restarts the timer only when contents changed and it is active, and never kills an in-flight collection run (IN-5) - [ ] One-generation database backup before migrations; rollback is reinstall-previous plus restore; no automatic downgrade; `/var/lib/fenris` never rebuilt (IN-6) - [ ] Uninstall performs the sanctioned disable first, then removes venv, helpers, units, polkit policy, and wrapper while keeping `/etc/fenris` and the observation store; purge removes those too (IN-7) - [ ] Dependencies refreshed only via the explicit `make update-deps` step, committed (IN-8) - [ ] README documents install, upgrade, uninstall/purge, legacy import, cadence drop-ins, and maps the five retired menu options to successors; the legacy menu script and monolith are gone from the repository (LC-9) ## Blocked by - [Deliver make install](https://git.bongbetic.com/xavierk/Fenris/issues/30)
xavierk added the ready-for-agent label 2026-08-31 18:25:35 +00:00
xavierk added this to the Build: Fenris persistent TUI monitoring redesign milestone 2026-08-31 18:25:36 +00:00
xavierk added a new dependency 2026-08-31 18:25:48 +00:00
xavierk self-assigned this 2026-09-02 05:40:47 +00:00
Author
Owner

Implementation\n\nFiles changed:\n- Makefile — upgrade target: content-change detection for timer restart (diff active unit vs installed), forward-only schema migration step\n- src/fenris/store.py — added migrate_to_latest() function for upgrade target invocation\n- scripts/fenris — added hidden migrate subcommand\n- README.md — complete rewrite: install, upgrade, uninstall/purge, cadence drop-ins, CLI reference, retired menu option mapping\n\nFiles removed:\n- fenris.sh — legacy menu script\n- fenris.py — legacy monolith\n\nAcceptance criteria satisfied:\n- IN-5: upgrade syncs units/pkit, restarts timer only when contents changed and active, never kills in-flight run\n- IN-6: one-generation .bak before migrations; forward-only; store dir never rebuilt\n- IN-7: uninstall performs sanctioned disable first, preserves config/store; purge removes those too\n- IN-8: deps refreshed only via explicit make update-deps, committed\n- LC-9: README documents install/upgrade/uninstall/purge/cadence drop-ins/menu successors; legacy files removed\n\nTests: 195/195 passing.

## Implementation\n\n**Files changed:**\n- Makefile — upgrade target: content-change detection for timer restart (diff active unit vs installed), forward-only schema migration step\n- src/fenris/store.py — added migrate_to_latest() function for upgrade target invocation\n- scripts/fenris — added hidden migrate subcommand\n- README.md — complete rewrite: install, upgrade, uninstall/purge, cadence drop-ins, CLI reference, retired menu option mapping\n\n**Files removed:**\n- fenris.sh — legacy menu script\n- fenris.py — legacy monolith\n\n**Acceptance criteria satisfied:**\n- IN-5: upgrade syncs units/pkit, restarts timer only when contents changed and active, never kills in-flight run\n- IN-6: one-generation .bak before migrations; forward-only; store dir never rebuilt\n- IN-7: uninstall performs sanctioned disable first, preserves config/store; purge removes those too\n- IN-8: deps refreshed only via explicit make update-deps, committed\n- LC-9: README documents install/upgrade/uninstall/purge/cadence drop-ins/menu successors; legacy files removed\n\n**Tests:** 195/195 passing.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Depends on
Reference: xavierk/Fenris#31