Plan Eigenimage, fase 1 tot en met 3. De vier templates verhuizen naar tools/electrum-gate/ zonder extensie; daarnaast Dockerfile (nginx:1.30-alpine plus python3), entrypoint.sh (het command-blok van de compose, zonder $$) en build.sh naar het voorbeeld van Evolu Relay. Een image voor beide containers, gebouwd op de Umbrel; open punt 2 en 3 daarmee beslist. Inhoudelijk anders dan alleen verplaatst: het log_format staat in stream.conf zelf, het backend-adres komt via twee plaatshouders zonder dollarteken uit de omgeving (ook in de server-service), en de pagina haalt versie en adres uit status.json via GATE_APP_VERSION. Tests mee verhuisd en uitgebreid: entrypoint.sh en Dockerfile in plaats van het command-blok, en de tag in de compose gelijk aan VERSION in build.sh voor elke eigen image. Mutatie-getest met drie ingrepen. Nog niet gebouwd: er is hier geen Docker. De tag staat ongepind tot de eerste push; dat is fase 4 en die is van de gebruiker. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
75 lines
4.8 KiB
Markdown
75 lines
4.8 KiB
Markdown
# Duurzame kennis over UmbrelApps
|
|
|
|
Cross-plan kennis: dingen die blijven gelden en die geen enkel plan bezit. Wat bij één plan hoort staat
|
|
daar; wat naslag is staat in [Referenties/](Referenties/). Geldt een stuk maar voor één van de twee apps,
|
|
dan staat dat in de kop.
|
|
|
|
## Pinnen komt ná een eigen image, niet ervoor (beide apps)
|
|
|
|
Vastgelegd 30-08-2026 op aanwijzing van de gebruiker, nadat de suite voor de zoveelste keer meldde dat
|
|
`python:3-alpine` en `nginx:alpine` niet gepind zijn. De verleiding is dan om dat "even te doen". **Doe het
|
|
niet in die volgorde.**
|
|
|
|
De keten die eronder ligt, van achter naar voren:
|
|
|
|
1. **de officiële appstore eist gepinde images.** Dat is de reden dat het op de lijst staat, en het staat in
|
|
de masterplannen **Publicatie-Gate** en **Publicatie-Relay**;
|
|
2. **maar vóór inleveren gaat de app-inhoud eerst een eigen image in**, want dat is wat het plan
|
|
**Eigenimage** doet. De agent en de pagina zitten nu als `*.template` in de app-map en worden door
|
|
`python:3-alpine` en `nginx:alpine` uitgevoerd;
|
|
3. **en dan bestaan die twee images er niet meer**, of in elk geval niet meer als de plek waar onze code
|
|
uitgevoerd wordt. Wat je gepind had, is dan weg.
|
|
|
|
**De regel: pin alleen een image die er na Eigenimage nog staat.** In de praktijk is dat de image die je
|
|
zelf uitgeeft, en die is er precies één per app.
|
|
|
|
Stand op 07-09-2026: Electrum Gate heeft die eigen image sinds 0.1.0 en zijn twee vreemde images zijn weg;
|
|
de pin komt erbij zodra de gebruiker hem gebouwd en geduwd heeft. Bij Evolu Relay staan `python:3-alpine`
|
|
en `nginx:alpine` er nog voor de agent en de pagina, en daarvoor geldt de regel hierboven onverkort.
|
|
|
|
Twee dingen die dit níet zegt, want anders slaat het de andere kant op door:
|
|
|
|
- **de eigen image pinnen doe je wél meteen**, bij elke verhoging. Dat is geen toekomstig werk maar de
|
|
gewone gang van zaken; Evolu Relay doet dat sinds 25-08-2026. Zie de valstrik in de compose daar: een
|
|
óude digest onder een níeuwe tag levert stilzwijgend de oude image, dus laat de digest er even ván af
|
|
zolang de nieuwe niet geduwd is;
|
|
- **de melding in de suite blijft staan en dat is goed.** `test_appstore_vorm.py` drukt de pinstatus af en
|
|
toetst hem met opzet níet, juist zodat dit zichtbaar blijft zonder de suite rood te maken. Zet die toets
|
|
er dus niet "even" bij: dan staat de suite rood tot Eigenimage klaar is, en een suite die altijd rood
|
|
staat wordt niet gelezen.
|
|
|
|
Waarom dit hier staat en niet in één plan: de eis komt uit **Publicatie**, de oorzaak zit in **Eigenimage**,
|
|
en de taak staat in **Umbrelapp** en **Appstore**. Vier plannen, en geen van de vier bezit het. De
|
|
onderbouwing van punt 3 staat wel al uitgeschreven in **Eigenimage**, `PLAN.md` §3: met een eigen image pin
|
|
je één ding dat je zelf uitgeeft, in plaats van twee images van iemand anders die bij elke
|
|
beveiligingsupdate opnieuw gepind moeten worden.
|
|
|
|
## De app is voor eigen gebruik, niet voor distributie (Electrum Gate)
|
|
|
|
Vastgelegd 18-08-2026 op aangeven van de gebruiker. De repo is publiek, maar dat is een **technische
|
|
voorwaarde en geen publicatiedoel**: umbreld kloont een community app store anoniem en kan geen
|
|
inloggegevens aanbieden, dus privé kan niet. De app is bedoeld voor één Umbrel, die van de gebruiker.
|
|
|
|
Waarom dit opgeschreven staat: het is het soort context dat een latere sessie niet kan afleiden uit de
|
|
code, en dat zonder vermelding tot werk leidt dat niemand gevraagd heeft. Concreet stuurt het deze
|
|
afwegingen:
|
|
|
|
- **Generiek maken is geen doel op zich.** Configuratie uit de code halen blijft nuttig, maar de reden is
|
|
dat een domeinwijziging of een poortbotsing anders een zoektocht door drie bestanden wordt, niet dat
|
|
iemand anders de app moet kunnen draaien. Weeg extra instelbaarheid dus tegen die maatstaf.
|
|
- **Presentatie mag mager blijven.** Een eigen icoon is nuttig, want dat is de tegel die de gebruiker
|
|
dagelijks ziet. Gallery-afbeeldingen, uitgebreide release notes en een nette `submitter` zijn dat
|
|
nauwelijks: die zijn er voor een winkelpagina die niemand bezoekt. Doe wat het manifest verplicht en
|
|
niet meer.
|
|
- **Het domein in de publieke historie is een geaccepteerd feit.** De repo is gepusht vóór de opschoning,
|
|
bewust, met als afweging dat een niet-aangekondigde repo op een eigen server niet gevonden wordt. Haal
|
|
dat niet opnieuw op als bezwaar en stel er geen werk voor uit; zie het plan **Appstore**, `OPEN.md`
|
|
punt 3.
|
|
- **Achterwaartse compatibiliteit is geen eis.** Er zijn geen andere installaties. Een wijziging die de
|
|
configuratie of de app-id verandert mag gewoon, mits de gebruiker weet dat hij één keer opnieuw moet
|
|
installeren.
|
|
|
|
Wat het **niet** verandert: de eisen van umbrelOS zelf. Prefix in het app-id, `app_proxy`, gepinde images
|
|
en een geldig manifest zijn geen etiquette maar voorwaarden om te starten. Zie
|
|
[Referenties/Umbrel-appstore-spec.md](Referenties/Umbrel-appstore-spec.md).
|