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
@@ -0,0 +1,50 @@
# Open punten - Proefopstelling
> 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
1. **Waar draait de proefopstelling?**
Er zijn twee plekken en ze meten niet hetzelfde. Een machine met Docker onder handbereik is het
snelst en het makkelijkst opruimen. De Umbrel zelf lijkt dichter bij het doel, maar dat is
schijnnauwkeurigheid: je draait dan nog steeds niet als umbrelOS-app, je hebt wel meteen last van
poortbotsingen met wat er al draait, en een mislukte poging laat rommel achter op een
productiemachine.
Voorstel: de losse machine, tenzij er een reden is dat het daar niet kan. De echte controle op de
Umbrel hoort bij het masterplan **Umbrelapp**.
**Moment:** voor fase 2 · **Eigenaar:** gebruiker
2. **Welke Trezor Suite telt?**
Desktop, web en mobiel zijn drie verschillende programma's, en het is niet gegeven dat ze alle drie
een eigen sync-server accepteren. Het antwoord bepaalt wat "het werkt" betekent, en het bepaalt ook
het masterplan **Bereikbaarheid**: alleen desktop op het thuisnetwerk vraagt veel minder dan een
telefoon onderweg.
**Moment:** valt samen met de "Volgende stap" van fase 1 · **Eigenaar:** gebruiker
3. **Is er een tweede apparaat om mee te synchroniseren?**
Fase 3 heeft er een nodig, want dat is de enige controle die bewijst dat de relay doet waarvoor hij
bestaat. Een tweede installatie van Suite op dezelfde machine kan misschien ook, maar dat is niet
uitgezocht en het is zwakker bewijs: dezelfde machine, hetzelfde netwerk.
**Moment:** voor fase 3 · **Eigenaar:** gebruiker
4. **Wat als de quota-manager verplicht blijkt én zelf een externe dienst nodig heeft?**
Dan is dit geen pakketteerprobleem meer. Denkrichtingen, niet in volgorde: de quota-manager mee
pakketteren met een minimale configuratie die niets betaalt; uitzoeken of er een schakelaar is die de
controle uitzet; of concluderen dat zelf hosten niet bedoeld is en het project hier stoppen. Dat
laatste is een geldige uitkomst en zou de goedkoopste zijn die dit plan kan opleveren.
**Moment:** zodra fase 1 of fase 2 het antwoord geeft · **Eigenaar:** gebruiker beslist, op basis van
wat er dan bekend is
5. **Wordt de proefopstelling zelf vastgelegd in deze repo?**
Een `compose/`-map met de gebruikte compose en een `.env.sample` maakt het herhaalbaar, en dat is
veel waard als er over twee weken pas verder gewerkt wordt. Er zit een prijs aan: deze repo wordt
publiek, dus er mag geen enkel echt geheim in, en een tweede compose naast die van het pakket kan
later verwarren welke de echte is.
Voorstel: wel, in een map die duidelijk `proefopstelling/` heet, met uitsluitend een `.env.sample`
en nooit een `.env`.
**Moment:** bij de eerste geslaagde start in fase 2 · **Eigenaar:** gebruiker
@@ -0,0 +1,89 @@
# Proefopstelling - plan
> Ontwerp en afbakening. **Dit bestand lees je zelden**, alleen bij twijfel over scope of architectuur.
> Status staat in [TAKEN.md](TAKEN.md), geschiedenis in [PROGRESS.md](PROGRESS.md), onbesliste punten in
> [OPEN.md](OPEN.md).
## 1. Doel
Uitzoeken of Evolu Relay zelf gehost bruikbaar is voor Trezor Suite, en met welke **minimale** set
containers en omgevingsvariabelen. Dat gebeurt lokaal, buiten Umbrel om, want een pakket bouwen voor iets
waarvan je niet weet of het draait is de dure volgorde.
Als dit plan af is, is er één zin die het volgende plan kan aannemen: "de relay draait met deze containers
en deze variabelen, en Trezor Suite synchroniseert ermee." Zonder die zin is elk manifest een gok.
## 2. Afbakening
Alles tot en met een label dat op apparaat A gezet wordt en op apparaat B verschijnt, via een relay die op
het thuisnetwerk draait en die niets van Trezor nodig heeft.
Binnen dit plan valt ook het opschrijven van wat er nodig bleek: welke variabelen, welke poorten, welke
volumes, en waar de images vandaan komen. Dat is niet de bijvangst maar het eigenlijke product; het
volgende plan leest het.
## 3. Niet-doelen
- **Geen `umbrel-app.yml` en geen `docker-compose.yml` in Umbrel-vorm.** Dat is het masterplan
**Umbrelapp**, en het heeft de uitkomst van dit plan nodig.
- **Geen bereikbaarheid van buiten, geen TLS, geen Tailscale.** Masterplan **Bereikbaarheid**. Hier
volstaat een IP op het eigen netwerk.
- **Geen eigen image bouwen of publiceren.** Blijkt dat nodig, dan is dat een bevinding van dit plan en
werk van het volgende.
- **Niets met quota's of betalen.** De quota-manager is hier een obstakel dat je wegwerkt of moet
meenemen, geen functionaliteit die we willen.
- **Geen bijdrage aan `trezor/trezor-suite-sync`.** Ook niet als er onderweg iets stuk blijkt.
## 4. Ontwerp
### 4a. De volgorde is: eerst wat het project kan doden
Het vooronderzoek zet "clone en draai" als eerste stap. Dat is niet de goedkoopste weerlegging. Er zijn
twee aannames waarop dit project stukloopt, en de eerste kost een minuut:
1. **Kan Trezor Suite überhaupt naar een eigen relay wijzen?** Het vooronderzoek gaat uit van een
"Custom server"-veld. Bestaat dat niet in de Suite-versie van de gebruiker, of alleen op een platform
dat hij niet gebruikt, dan is er niets te pakketteren. Dit is te controleren in de interface, zonder
iets te installeren.
2. **Is de quota-manager verplicht?** Zie [Upstream-evolu-relay.md](../../../Referenties/Upstream-evolu-relay.md)
§3. Dit is te lézen in `.env.sample`, de compose en de broncode, en pas daarna te bewijzen door hem weg
te laten.
Pas als die twee goed staan, is "clone en draai" de moeite waard.
### 4b. Wat er gedraaid wordt
De compose van Trezor zelf, ongewijzigd waar het kan, met de quota-manager uitgeschakeld. Ongewijzigd is
hier een doel op zich: elke aanpassing die je maakt, is een aanpassing waarvan je later niet meer weet of
hij nodig was. Werkt het niet zonder wijziging, dan is de wijziging zelf een bevinding.
### 4c. Wat er opgeschreven wordt
Per container: image en herkomst, poorten, volumes, en de omgevingsvariabelen die **echt** nodig bleken,
niet de hele `.env.sample`. Dat onderscheid is het verschil tussen een manifest van tien regels en een van
veertig, en het is achteraf niet meer te maken.
Daarbij twee dingen die het volgende plan hard nodig heeft en die je alleen hier tegenkomt: **komt de
image uit een registry of alleen uit een Dockerfile**, en **hoe authenticeert Suite zich tegen de relay**.
Die tweede bepaalt of de app achter de inlog van umbrelOS kan staan; zie het masterplan **Umbrelapp**,
§4b.
## 5. Raakvlakken
- **Umbrelapp** is hard afhankelijk van dit plan: het aantal containers, de variabelen en de
authenticatievraag komen hier vandaan.
- **Bereikbaarheid** leunt op één bevinding hier: accepteert Suite een `http://`-adres, of eist het TLS?
- **Publicatie** leunt op de herkomst van de image. Zonder een gepinde multi-arch image uit een registry
komt dat plan niet van de grond.
## 6. Verificatie
Wat als bewijs telt, in oplopende sterkte:
1. de relay start en blijft draaien zonder quota-manager;
2. Trezor Suite accepteert het adres en meldt geen fout;
3. een label dat op apparaat A gezet wordt, verschijnt op apparaat B na een synchronisatie. **Dit is de
enige die telt.** De eerste twee kunnen slagen terwijl er niets gesynchroniseerd wordt.
Wat hier per se **niet** bewezen wordt, en wat dus niet als "werkt" gemeld mag worden: gedrag op arm64,
overleven van een herstart, gedrag onder umbrelOS, en bereikbaarheid van buiten het thuisnetwerk.
@@ -0,0 +1,25 @@
# Voortgang - Proefopstelling
> Chronologisch sessielog, nieuwste bovenaan. Kort: 3 tot 6 regels per entry. Wat er is gebeurd en
> waarom, niet wat er nog moet: dat staat in [TAKEN.md](TAKEN.md).
## 25-08-2026 - plan werd actief
Dit project bestond uit één document, `trezor-suite-sync-umbrel-app-plan.md`, met het vooronderzoek van
dezelfde dag erin. Dat is bij het inrichten van de repo over vier plannen verdeeld; dit is het enige dat
meteen actief werd, omdat het als enige nu al iets te doen heeft en omdat de andere drie er hard van
afhangen. Het origineel staat ongewijzigd in `Plannen/Masterplannen/Archief/Vooronderzoek.PLAN.md`, want
het is de bron onder elke regel die met "onderzocht 25-08-2026" gemerkt is.
**Eén ding is bij het verdelen omgedraaid.** Het vooronderzoek zet "clone en draai" als eerste stap. Er
zit een goedkopere weerlegging vóór: of Trezor Suite überhaupt naar een eigen sync-server kan wijzen. Dat
kost een minuut in de interface, en is het antwoord nee, dan is er niets te pakketteren. Dat staat nu als
"Volgende stap"; de clone is fase 2.
**De remote is anoniem bereikbaar, en dat is hier een eis en geen hygiëne.** Getest met de
credential-helper leeg gezet, want een gewone `ls-remote` slaagt op deze machine ook als de repo dicht
staat. De repo is nog leeg, dus dit bewijst bereikbaarheid en nog niet dat umbreld de store-inhoud kan
ophalen; die controle hoort bij het masterplan **Umbrelapp**.
**Geraakt:** de hele `Docs/`-boom, `.gitignore`, `.gitattributes`, `CLAUDE.md`, `README.md`.
**Tests:** niet van toepassing, er is nog geen bron. Zie `Docs/README.md`, "Projectspecifiek".
@@ -0,0 +1,58 @@
# Taken - Proefopstelling
> Prioriteit: **A** | Afhankelijk van: -
>
> Actief sinds 25-08-2026, bij het inrichten van dit project. Dit is het enige plan met een tier: de drie
> masterplannen wachten allemaal op de uitkomst hiervan.
## Volgende stap
- [ ] **Controleren of Trezor Suite een eigen sync-server accepteert, en op welk platform.** Dit is de
goedkoopste weerlegging van het hele project en het kost een minuut in de interface. Noteer waar het
veld staat, hoe het adres eruit moet zien (met of zonder schema, met of zonder poort), en of het
alleen op desktop bestaat. **Eigenaar: gebruiker**
## Fase 1 - Kan dit überhaupt
- [ ] Het veld voor een eigen sync-server in Trezor Suite gevonden, met de vorm die het verwacht
- [ ] `.env.sample`, `docker-compose.yaml` en de relay-broncode van `trezor/trezor-suite-sync` gelezen op
de vraag of de quota-manager verplicht is. **Lezen, nog niet draaien:** als het antwoord in de
broncode staat, scheelt dat een halve middag proberen
- [ ] Vastgesteld of Trezor een image publiceert of alleen een Dockerfile levert. Zie
[Upstream-evolu-relay.md](../../../Referenties/Upstream-evolu-relay.md) §4 punt 1; dit bepaalt of
het masterplan **Publicatie** haalbaar is
## Fase 2 - De stack lokaal draaien
- [ ] `trezor/trezor-suite-sync` gekloond
- [ ] `docker compose up` met **alleen** Postgres en `evolu-relay`, de quota-manager weggelaten
- [ ] De relay antwoordt op poort 4000 en blijft draaien. Blijft hij niet draaien, dan is de foutmelding
de bevinding: schrijf hem letterlijk op in [PROGRESS.md](PROGRESS.md)
- [ ] **Blocker-check:** is de relay hard afhankelijk van de quota-manager? Zo ja, die erbij en
uitzoeken wat hij zelf nodig heeft. Vraagt hij een externe dienst, dan is dat geen taak meer maar
open punt 4 in [OPEN.md](OPEN.md)
## Fase 3 - Echt synchroniseren
- [ ] Trezor Suite op apparaat A naar `http://<ip-van-de-machine>:4000` laten wijzen
- [ ] Een label toevoegen op apparaat A
- [ ] Datzelfde label zien verschijnen op apparaat B. **Dit is de enige controle die telt**; de twee
hierboven kunnen slagen terwijl er niets gesynchroniseerd wordt
- [ ] Geprobeerd wat er gebeurt als de relay even weg is en terugkomt. Niet omdat het nu moet werken,
maar omdat het gedrag straks op een Umbrel bij elke update voorkomt
## Fase 4 - Vastleggen wat het pakket moet worden
- [ ] Per container opgeschreven: image en herkomst, poorten, volumes, en de variabelen die **echt** nodig
bleken. Niet de hele `.env.sample` overnemen
- [ ] Opgeschreven hoe Trezor Suite zich tegen de relay authenticeert, of dat het helemaal niet doet. Dit
bepaalt of de app achter de inlog van umbrelOS kan staan; zie het masterplan **Umbrelapp**, §4b
- [ ] Opgeschreven of Suite een `http://`-adres accepteert of TLS eist. Hier hangt het masterplan
**Bereikbaarheid** aan
- [ ] [Upstream-evolu-relay.md](../../../Referenties/Upstream-evolu-relay.md) bijgewerkt: alles wat daar
als "onderzocht 25-08-2026" staat en nu bevestigd of weerlegd is, met de nieuwe datum erbij
- [ ] Het masterplan **Umbrelapp** herzien met wat hier uitkwam, en pas daarna promoveren
## Geblokkeerd / wacht op
- [ ] Fase 3 wacht op een tweede apparaat met Trezor Suite. Zie [OPEN.md](OPEN.md) punt 3