catalog: lifecycle field replaces the retired/ directory move

Moving a template out of templates/ un-offers it but also makes the
controller's orphan detector see it as GONE for anyone already running the
app - flagging their working install Elavult with a Torles button. Withdrawing
an app must never take a working app away from a customer.

Optional lifecycle: available|hidden|abandoned in .felhom.yml instead.
plant-it returns to templates/ as the first abandoned app; retired/ removed.
Resolvability gate skips (and reports) non-available apps.
This commit is contained in:
2026-07-21 16:19:49 +02:00
parent 857ba53233
commit a32541684a
8 changed files with 161 additions and 32 deletions
+29
View File
@@ -1,5 +1,34 @@
# Changelog
## 2026-07-21 (later) — app lifecycle replaces the `retired/` directory move
**The `retired/` mechanism shipped earlier today was wrong and is withdrawn.** Moving a template out
of `templates/` does un-offer it — but it also makes the controller's orphan detector see the
template as GONE for anyone already running the app, flagging their working install `Elavult` and
offering a Törlés button. Withdrawing an app must never take a working app away from a customer.
Replaced by an optional top-level `lifecycle:` field in `.felhom.yml` (controller v0.158.0):
- `available` — default. Absent or empty means this, so all existing templates are unchanged.
- `hidden` — not offered for new installs; nothing shown to anyone already running it.
- `abandoned` — not offered for new installs, and every box already running it shows a permanent
„Nem karbantartott" badge plus a notice that updates and security fixes will no longer arrive.
Deployed instances keep full function in every state; the controller refuses a deploy of a
non-available template server-side. An unknown value degrades to `available` with one WARN.
- **`plant-it` returns to `templates/`** with `lifecycle: abandoned` — the first user of the
mechanism, and the case that motivated it. Its compose is deliberately unchanged: it pins
`msdeluise/plant-it:0.10.0`, a repository that does not exist (the real one is `-server`), and the
app is not installable, so rewriting it would imply it is. `retired/` is removed.
- **The resolvability gate is now lifecycle-aware.** Non-available apps are skipped by default and
REPORTED, not silently dropped; `--all` includes them. An abandoned app's dead image is the
expected end state, not a finding — counting it would leave the gate permanently red for something
nobody intends to fix, and a gate that is always red is a gate nobody reads. 6 new fixture tests
(19 total), including one asserting an all-skipped run is a pass rather than an error.
Catalog is back to **53 apps** (52 offered + plant-it abandoned).
## 2026-07-21 — catalog honesty: wanderer re-pinned, plant-it retired, and a standing rot gate (R-41 slice 1)
Campaign 7 left two apps sitting behind a working "Telepítés" button with images that did not