52 lines
5.6 KiB
Markdown
52 lines
5.6 KiB
Markdown
# CONTEXT — app-catalog-felhom.eu working state
|
|
|
|
> Created with the REUSE.md rollout (2026-07-03). History: `CHANGELOG.md`; format spec: `README.md`.
|
|
|
|
- **2026-10-10 — Grocy and LubeLogger added; Monica STOPPED at checklist 0.2 — the operator ruled KEEP IT OUT (R-927, closed).**
|
|
**The operator's decision of 2026-10-10** was to add Grocy, Monica and LubeLogger, chosen from
|
|
`audits/pikapods-scan-2026-10-10/FINDINGS.md` §2 because no catalog app covers what they do. Grocy and
|
|
LubeLogger are published with complete records (`onboarding/grocy.md`, `onboarding/lubelogger.md`); Monica is
|
|
not built — no release in 17 months, no stable release in 29, the stable branch dead since 2024-05-04, and an
|
|
upstream notice that the hosted instance and its data go at the end of December 2026 before a rewrite.
|
|
**60 template directories, 58 offered.**
|
|
Two conventions earned here and written into `REUSE.md`: **an `after_install` command may not contain `$`**
|
|
(the controller expands every `$name` and refuses one it was not given — PHP cannot be inlined, and the way out
|
|
is a file the compose entrypoint writes), and **a fifth healthcheck family** for an image with no HTTP client at
|
|
all (bash `/dev/tcp`, measured in both directions). Grocy also needed its persisted `config.php` made a derived
|
|
file: the image copies it once and never again, so a 4.6 → 4.7 move answered HTTP 500 on every page.
|
|
- **2026-10-02 (afternoon) — the persistence re-sweep:** the gate now sends requests (R-801), an empty declared volume is
|
|
UNDETERMINED (R-788), and it calls the app's own fixture seed. All 58: CLEAN 40 · UNDETERMINED 18 · BROKEN 0. papra 768M
|
|
(R-803). Remove keeps the household's userdata — `09` §3 decision 67 (controller v0.288.0 names it).
|
|
- **2026-10-02 — THE FAMILY GATE in the catalog (controller v0.287.0, golden 0.287.0):** `family_gate:` /
|
|
`family_gate_except:` / `min_controller:`; gate `family-gate`. Grimmory (exceptions OPDS/Kobo/KOReader/Komga) and MeTube
|
|
(none) published with complete records. A family app's exceptions must be literal prefixes and each measured as a
|
|
stranger + a look-alike; never an exception on an app with no login. Licences of all 58 templates read
|
|
(`felhom.eu/documentation/audits/licences-2026-10-02/TABLE.md`); decisions are operator rows R-784, R-789..R-795.
|
|
- **2026-10-01 (night, later) — the visitor's address (R-753, controller v0.286.1):** traefik now keeps the tunnel's
|
|
X-Forwarded-For chain; readers take it from the RIGHT. Leftmost readers carry `<router>-xff` (19 apps); a right-walking
|
|
reader gets `172.16.0.0/12` (bookstack done; kimai, zipline, vikunja, nextcloud open — R-776). Checklist 3.10. SparkyFitness
|
|
record added; its licence is non-commercial only (R-784, operator). Licence sweep of the catalog owed (R-787).
|
|
- **2026-10-01 (night) — FIRST NEW APPS through the checklist:** Radicale `195129c`, Karakeep `882ac14`, Dawarich `72247a3`
|
|
published with complete records; Grimmory tested but held (R-775, operator); Grimoire/MeTube/Pinchflat stopped on the
|
|
fit check; Invidious/moonlight-web fit only (`felhom.eu/documentation/audits/new-apps-2026-10-01/FIT.md`).
|
|
- **Ruling 2026-10-01 (operator) — wger HIDDEN** (`lifecycle: hidden`) until R-762 and R-763 are fixed; the fix session
|
|
un-hides it.
|
|
- **2026-10-01 (evening) — THE NEW-APP CHECKLIST.** `NEW-APP-CHECKLIST.md` (60 rows, `since` per id) + `onboarding/`
|
|
(`_TEMPLATE.md`, `wger.md` pilot, `EXISTING-APPS-GAPS.md`) + gate `onboarding` (`check-onboarding.py`, `--fast`, decoys).
|
|
The 53 published apps exempt by name (operator default, may reverse). A new app = template + complete record in one
|
|
commit. Open from the pilot: R-758..R-764 (R-762/R-763 P2 on wger).
|
|
- **2026-09-24 (morning) — STEP DEFINITIONS (`5ed599c`).** Every ladder entry but the newest has its own compose at
|
|
`templates/<app>/steps/<ladder.step_key(to)>.yml` (sha256 of `to`, canonical JSON, 16 hex = controller
|
|
`stacks.StepKey`); gate rule 4 + decoys; the writer keeps the superseded step; 8 backfilled
|
|
(`steps_backfill.py`, one-off, from the NEWEST commit naming the step's images). Controller v0.268.0 reads them:
|
|
one press = one step (proven live, romm two steps). R-653/R-656 fixed in the bench; the two suites that typed
|
|
live pins now read them (R-663). Open: R-652, R-655, R-664 (a step has no `.felhom.yml` of its own).
|
|
- **2026-09-24 (night 2026-09-23) — THE TEST RECORD.** An `image:` move needs a proven `update_ladder:` entry
|
|
(`scripts/ladder.py`; gates `check-test-record.py` + `check-test-record-move.py`; the only writer
|
|
`upgrade-test.py --write-ladder`). 21 older moves backfilled; 12 steps published tonight. Harness v3: box fixtures
|
|
on the bench (`upgrade_boxport.py`), anon memory (`09` decision 22), `files_may_change`. Open: R-652, R-653,
|
|
R-655 (adventurelog), R-656; the box does not read the ladder yet (`09` §6.4 part 5).
|
|
- **2026-07-12 — `:latest` banned from catalog — pin rule recorded.** 5 templates pinned (bentopdf v2.8.6, calibre-web v4.0.6 = running digest on 9201, papra 26.6.1-rootless, recipe-importer v0.9.11, termix 2.5.0; all digest-equal to that day's `:latest` — no-op for running apps). Standing rule in CLAUDE.md + gate `scripts/check-image-pins.py` (run after any compose change). Deployed apps pin to their RUNNING digest; pin ≠ upgrade.
|
|
- **2026-07-03 — CLAUDE.md expanded** (repo purpose, push-to-main deploy contract, pointers); still intentionally light.
|
|
- **2026-07-03 — `REUSE.md` exists at the repo root** (catalog conventions, healthcheck families, canonical example app = paperless-ngx, traps); maintenance rule active: update it in the same commit that changes a catalog-wide convention.
|