Eén app store, twee apps

umbrelOS leest per store één repo, dus twee apps in twee repo's kan niet. Deze
repo is de store en bevat vanaf nu Electrum Gate en het werk aan Evolu Relay.
Opgezet als verse repo op verzoek van de gebruiker: de historie van ElectrumTLS
en van EvoluRelay komt niet mee.

Dat heeft één gevolg dat verder gaat dan opruimen. In de historie van
ElectrumTLS staat het domein van de gebruiker en het certificaatpad, van vóór de
opschoning van 19-08. Die komt hier niet in. Zolang die repo op de Git-server
blijft staan verandert dat niets, dus het weghalen ervan is het laatste stuk van
open punt 3 van het plan Appstore, en geen bijzaak.

De store zelf hoefde niet te veranderen: store-id whatsnext, en dus blijft het
app-id whatsnext-electrum-gate. Dat hangt aan het store-id en niet aan de URL,
dus voor umbrelOS is dit dezelfde app in een andere store. Dat de store op 19-08
naar de maker genoemd werd in plaats van naar deze ene app, betaalt zich hier
uit.

Wat de documentatie betreft is dit één wortel voor beide apps, en dat was de
reden om samen te voegen en niet de prijs ervan: de appstore-spec, het pinnen
van images en de werkwijze golden al voor allebei en stonden in twee repo's naast
elkaar. De kruisverwijzing die daarvoor nodig was (Referenties/Umbrel-appstore.md
in de oude EvoluRelay-repo) is verdwenen; wat daarin stond over de plekken waar
de relay een ander geval is, staat nu als ontwerp in het masterplan Umbrelapp §4.

Botsende namen kregen een achtervoegsel met de app, en alleen die: Publicatie
werd Publicatie-Gate en Publicatie-Relay, CHANGELOG.md werd
CHANGELOG-electrum-gate.md. Proefopstelling kreeg 007, tussen de twee bestaande
nummers, zodat de bovenkant van de reeks op tier-orde blijft staan.
CONTINUE_HERE.md heeft een kolom App, maar de tiers lopen over beide apps heen:
er is één volgorde van werken.

Electrum Gate gaat naar 0.0.15, want website, repo, support, submission en icon
wijzen nu naar UmbrelApps en zonder versieverhoging rolt dat niet uit. De release
notes leggen aan de gebruiker uit dat hij de store opnieuw moet toevoegen. Of een
geïnstalleerde app een wisseling van store-URL overleeft is nog steeds niet
uitgezocht; dat blijkt bij het omzetten.

Twee dingen in de plannen van Electrum Gate waren door deze verhuizing niet meer
waar en zijn bijgewerkt: de taak "de repo hernoemen" in fase 7 is afgevinkt, en
de repo-vorm in PLAN.md §4a toonde nog de store-id electrumtls, die al sinds
fase 7 achterhaald was.

Tests: 39 goed 0 fout en 54 goed 0 fout, niets overgeslagen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Harmen
2026-08-25 16:27:57 +02:00
co-authored by Claude Opus 5
commit 67ed9b603b
45 changed files with 8652 additions and 0 deletions
+144
View File
@@ -0,0 +1,144 @@
# Open punten - Appstore
> Beslissingen die nog een **eigenaar** of een **moment** nodig hebben. Staat een punt hier zonder
> allebei, dan is dat de eerste fout om op te lossen. Wordt een punt een taak, dan verhuist het naar
> [TAKEN.md](TAKEN.md).
>
> **Nummers blijven staan**, ook als een punt beslist is: er kan elders naar verwezen worden, ook vanuit
> codecommentaar. Beslissen betekent verplaatsen naar de kop hieronder, niet hernummeren.
## Nog te beslissen
2. **Wat gebeurt er met de bestaande handmatige installatie?** - **In twee stappen, en de eerste is niet
meer uit te stellen** (bijgewerkt 20-08-2026).
De container is gestopt maar de compose staat er nog: een `alpine:latest` met een `apk add stunnel` bij
elke start, met `restart: unless-stopped` en een mount op de certificaten van Zoraxy. Wat er nu aan de
orde is:
- **de container weghalen, nu.** Hij bindt poort **50002**, en dat is precies de poort die Fulcrum op de
host wil. Zolang hij bestaat kan het omschakelen naar Fulcrum niet slagen, en dat staat in fase 6 als
taak. `restart: unless-stopped` betekent bovendien dat hij een herstart van de Umbrel overleeft;
- **de map laten staan tot de herstart-controle gedaan is.** Dat is een compose plus een
`entrypoint.sh` en het kost niets. Het is de gedocumenteerde weg terug, en die vervalt pas als
bewezen is dat de app na een herstart vanzelf terugkomt. Let op de volgorde: de container mount zijn
`entrypoint.sh` uit die map, dus eerst de container weg en dan de map.
**Moment:** stap 1 nu, stap 2 na de herstart-controle · **Eigenaar:** gebruiker
4. **Eigen icoon en gallery.**
Het manifest wijst nu naar het Electrs-icoon en een screenshot van Electrs in `getumbrel/umbrel-apps`,
dus naar andermans bestanden en naar plaatjes van een andere app. Er moet een eigen SVG komen. De
gallery is minder dringend: die is er voor een winkelpagina die hier niemand bezoekt, zie
[KNOWLEDGE.md](../../../KNOWLEDGE.md). Vraag is wie het icoon maakt en of het in de repo komt of extern
gehost wordt.
**Moment:** fase 5 · **Eigenaar:** gebruiker
7. **Hoe wordt de herstart-controle alsnog gedaan?**
Dit is de controle waar het hele plan om begon: komt de app na een herstart van de Umbrel vanzelf
terug. Hij is op 18-08-2026 uitgesteld omdat de Umbrel een productiemachine is en niet op verzoek
herstart wordt. Dat is een geldige reden, maar het betekent wel dat het plan **niet afgerond kan
worden**: alles wat er nu ligt is een sterke aanwijzing en geen bewijs.
Wat er specifiek niet mee getest is, en waar de enige echte twijfel zit: de **volgorde bij het
opstarten**. Zoraxy kan later klaar zijn dan deze app, en dan bestaat het certificaat nog niet.
Bijgewerkt op 20-08-2026: hier stond dat de compose daarvoor een wachtlus heeft. Die is er niet meer,
want juist die lus was de klem van 0.0.3. De opvolger is de vangnettak in de herlaadlus, die TLS
aanzet zodra `cert.conf` verschijnt zonder dat er een vlag bij hoort. Dat is precies het
Zoraxy-is-later-klaar-geval, en het is nog nooit echt voorgekomen; alleen getoetst tegen tijdelijke
bestanden.
**Moment:** bij de eerstvolgende herstart die er toch komt, bijvoorbeeld een umbrelOS-update of een
stroomonderbreking. Noteer de uitkomst dan in `PROGRESS.md`. · **Eigenaar:** gebruiker
9. **Volgt de app-map de conventie van andere apps?** Gevraagd door de gebruiker op 20-08-2026, die
opmerkte dat hij bij andere apps geen app-code in `app-data` ziet. Uitgezocht en vastgelegd in
[Umbrel-appstore-spec.md](../../../Referenties/Umbrel-appstore-spec.md); de korte versie is dat
config-in-app-data een bestaand patroon is (`electrs` mount zijn `torrc` zo) en dat code-in-app-data
het gevolg is van geen eigen image bouwen, wat een besluit is en geen ongeluk.
**Beide vervolgpunten zijn diezelfde dag gedaan in 0.0.9**, nadat de gebruiker zei dat hij de app wil
publiceren als standaard-app: de data staat onder `data/` met een `.gitkeep` per map, en `backupIgnore`
noemt de sessielog en `status.json`. Niet `data/runtime/config`, want daar zit de certificaatkeuze.
Wat het uitzoeken daarna opleverde is groter dan dit punt en staat daarom in een eigen masterplan
**Publicatie**: de eisen van de officiële store, wat er al aan voldoet, en het risico dat niet in een
checklist staat, namelijk de leesmount op de certificaten van Zoraxy.
**Moment:** afgerond · **Eigenaar:**
## Beslist
8. **Wordt de repo hernoemd, en wat wordt dan het store-id?** - **Store-id `whatsnext`, app-id
`whatsnext-electrum-gate`, repo-naam nog niet** (19-08-2026, gebruiker).
Het app-id **moet** met het store-id beginnen en de mapnaam moet gelijk zijn aan het app-id (zie
[Umbrel-appstore-spec.md](../../../Referenties/Umbrel-appstore-spec.md)). De aanname bij het stellen
van deze vraag was dat de repo-naam daar ook in zat, want de store-URL ís de repo-URL. **Dat klopte
niet:** het store-id is gewoon een veld in `umbrel-app-store.yml` en staat los van de naam van de
repo. Daardoor kon het store-id meteen goed gezet worden en kan de repo-naam wachten.
De store heet nu naar de maker en niet naar deze ene app. Dat is de variant die later een tweede app
toelaat zonder opnieuw te hernoemen, en dat weegt hier zwaarder dan de kosten, want die zijn nul: de
gebruiker gaf aan de app zonder bezwaar opnieuw te kunnen installeren.
**Afgerond op 25-08-2026, en eerder dan gedacht.** Hier stond dat de repo nog `ElectrumTLS` heette en
dat het hernoemen zou meeliften op een publieke versie op GitHub. Wat het versnelde was Evolu Relay:
umbrelOS leest per store één repo, dus een tweede app dwong de vraag af. De repo is
`UmbrelApps` geworden, met `website`, `repo`, `support`, `submission` en `icon` mee, in 0.0.15.
**Het app-id is niet meegegaan** en dat is de reden dat dit goedkoop was: `whatsnext-electrum-gate`
hangt aan het store-id en niet aan de URL. Voor umbrelOS is het dus dezelfde app in een andere store.
**Wat er wél open blijft, en nu voor het eerst echt aan de orde is:** of een geïnstalleerde app een
wisseling van **store-URL** overleeft, of dat de store verwijderd en opnieuw toegevoegd moet worden en
de app daarna opnieuw geïnstalleerd. Niet uitgezocht, en niet aannemen dat het meevalt. **Eigenaar:**
gebruiker, bij het omzetten van de store in umbrelOS.
1. **Draait `nginx:alpine` met de `stream`- en `stream_ssl`-module?** - **Ja** (18-08-2026).
Op de Umbrel gecontroleerd met `docker run --rm nginx:alpine nginx -V`. Aanwezig zijn
`--with-stream`, `--with-stream_realip_module`, `--with-stream_ssl_module` en
`--with-stream_ssl_preread_module`, alle vier statisch meegebouwd, dus zonder `load_module`.
Daarmee gaat het ontwerp uit [PLAN.md](PLAN.md) §4c door in de kleine variant: één container die de
web-UI serveert én TLS termineert, geen stunnel-installatie bij het starten, geen losse
`cert-monitor`, en de Docker-socket-mount vervalt.
Twee dingen die deze uitkomst meebracht en die het opschrijven waard zijn. nginx wil de **volledige
keten** in `ssl_certificate`, terwijl stunnel het gesplitst wilde; de `awk`-splitsing uit
`entrypoint.sh` is daarmee overbodig in plaats van overgenomen. En dit antwoord geldt voor de tag
`nginx:alpine` van vandaag: bij het pinnen op een digest wordt dezelfde controle op díe digest
herhaald, anders is er iets anders bewezen dan er uitgeleverd wordt.
6. **Hoe komen `entrypoint.sh` en `web/` in `${APP_DATA_DIR}`?** - **Bij installatie automatisch, bij
een update niet** (18-08-2026).
umbreld doet bij installatie `rsync --archive` van de hele app-map naar `${APP_DATA_DIR}`, dus de
mounts in de compose kloppen. Bij een **update** wordt alleen een whitelist ververst:
`docker-compose.yml`, `*.template`, `exports.sh`, `torrc`, `hooks` en `umbrel-app.yml`.
Gevolg dat het ontwerp stuurt: een gewijzigde `entrypoint.sh` bereikt een bestaande installatie nooit,
zonder foutmelding. Logica die later nog moet kunnen wijzigen hoort daarom in de compose, in de image,
of in een `*.template`-bestand; dat laatste staat in de whitelist én wordt bij elke start met de
omgevingsvariabelen ingevuld. Zie de naslag
[Umbrel-appstore-spec.md](../../../Referenties/Umbrel-appstore-spec.md).
3. **Wanneer wordt er voor het eerst gepusht?** - **Meteen, vóór de opschoning** (18-08-2026).
De repo staat sindsdien publiek op `https://sc.kamenier-hamer.nl/sysop/ElectrumTLS.git`, met het
domein en het certificaatpad er nog in. Publiek zijn was geen keuze (umbreld kloont anoniem), alleen
de volgorde was dat. Afweging van de gebruiker: de repo is voor eigen gebruik en wordt niet
aangekondigd, dus vindbaarheid is laag.
Gevolg dat vastligt: die waarden staan nu in de **historie**. Het plan **Configuratie** haalt ze uit de
bestanden, niet uit de historie; dat laatste zou een herschrijving vragen. Behandel het domein dus als
bekend, en laat het geen reden zijn om Configuratie uit te stellen of juist te haasten.
**Bijgewerkt 25-08-2026: die historie is bij de verhuizing achtergebleven.** `UmbrelApps` is als lege
repo begonnen met alleen de huidige toestand erin, op verzoek van de gebruiker die de historie niet
nodig had. Daarmee vervalt de vaststelling hierboven, maar **pas als de oude repo weg is**: zolang
`ElectrumTLS` op de Git-server staat, staat het domein daar nog in de historie. Dat weghalen is dus
geen opruimwerk maar het laatste stuk van deze beslissing. **Eigenaar:** gebruiker
5. **Mag de app-id later nog wijzigen?** - **Ja** (18-08-2026).
Er zijn geen andere installaties, dus achterwaartse compatibiliteit is geen eis. Een wijziging kost
één keer opnieuw installeren. Genoteerd omdat de prefix-regel anders zwaarder lijkt dan hij is: de
keuze `electrumtls-electrum-tls` mag herzien worden zolang dat vóór fase 6 gebeurt.