2026-08-25 17:18:22 +02:00
|
|
|
|
# Taken - Umbrelapp
|
|
|
|
|
|
|
|
|
|
|
|
> **App: Evolu Relay.** Prioriteit: **A** | Afhankelijk van: –
|
|
|
|
|
|
>
|
|
|
|
|
|
> Actief sinds 25-08-2026. Gepromoveerd uit `Masterplannen/` omdat de gebruiker besloot het pakket meteen te
|
|
|
|
|
|
> maken. De afhankelijkheid op **Proefopstelling** is daarmee geen blokkade meer maar een parallelle bron:
|
|
|
|
|
|
> fase 1 daarvan is af en leverde de feiten waarop dit pakket rust. Wat er nog uit moet komen zijn twee
|
|
|
|
|
|
> vragen die pas bij het installeren pijn doen, en die staan hieronder als eigen taak.
|
2026-08-27 16:47:29 +02:00
|
|
|
|
>
|
|
|
|
|
|
> **Dit is de focus vanaf 27-08-2026, op verzoek van de gebruiker.** Het werk aan Electrum Gate is die dag
|
|
|
|
|
|
> afgerond tot en met de tweede indeling; het plan **Eigenimage** staat klaar maar ligt bewust stil. Twee
|
|
|
|
|
|
> feiten om mee te beginnen: **de app staat op dit moment uit** op de Umbrel, en hij is nog nooit met
|
|
|
|
|
|
> Trezor Suite verbonden geweest. "Gebouwd" is hier dus nog verder van "werkend" dan bij Gate.
|
2026-08-25 17:18:22 +02:00
|
|
|
|
|
|
|
|
|
|
## Volgende stap
|
|
|
|
|
|
|
2026-08-28 10:44:31 +02:00
|
|
|
|
- [x] **De kále Evolu-relay geprobeerd, en hij werkt (28-08-2026).** Trezor Suite op de desktop stuurde
|
|
|
|
|
|
elf labels naar `docker.io/evoluhq/relay:latest` en die kwamen aan: de database in het volume groeide
|
|
|
|
|
|
van 40960 naar 49152 bytes. **De protocolversie klopt**, en daarmee is de richting uit
|
|
|
|
|
|
[OPEN.md](OPEN.md) punt 6 gemeten in plaats van verwacht. Het protocol en alle metingen staan in
|
|
|
|
|
|
[PLAN.md](PLAN.md) §6a
|
|
|
|
|
|
- [ ] **De leeskant nog meten.** Er is geen tweede cliënt geweest, dus dat een ander apparaat die labels
|
|
|
|
|
|
terugkrijgt is niet gezien. **Eigenaar: gebruiker**
|
|
|
|
|
|
- [ ] **Uitzoeken waarom de iOS-app geen verbinding maakt.** Het veld voor de relay-URL bestaat daar,
|
|
|
|
|
|
valideert op `http(s)://` en onthoudt zijn waarde, maar er komt geen enkele poging aan op poort 4000.
|
|
|
|
|
|
Nu de desktop bewijst dat de relay in orde is, is dit een schone vraag geworden: het ligt aan de app
|
|
|
|
|
|
of aan het platform, niet aan ons. Zonder antwoord werkt de app alleen op de desktop, en dat scheelt
|
|
|
|
|
|
voor de waarde van dit hele plan
|
2026-08-28 11:02:51 +02:00
|
|
|
|
- [x] **Besloten wat er met het huidige pakket gebeurt (28-08-2026): het gaat eruit.** De relay van Trezor,
|
|
|
|
|
|
de quota-manager en de Postgres vervallen. Wat ervoor in de plaats komt staat in [PLAN.md](PLAN.md)
|
|
|
|
|
|
§4g en §4h
|
|
|
|
|
|
- [x] **De limiter gekozen (28-08-2026): weg 1, uitbreiden via `createRelay`.** Dat bleek veel kleiner dan
|
|
|
|
|
|
**Bereikbaarheid** §4b aannam: het zijn twee terugroepfuncties, `isOwnerAllowed` en
|
|
|
|
|
|
`isOwnerWithinQuota`, en Trezor doet zelf niets anders. De gebruiker breidde het ontwerp uit met een
|
|
|
|
|
|
schakelaar voor nieuwe eigenaars en met wissen per eigenaar. Zie [OPEN.md](OPEN.md) punt 8
|
|
|
|
|
|
- [x] **De vraag of het databaseschema zichzelf aanmaakt is vervallen.** Hij ging over het pakket dat eruit
|
|
|
|
|
|
gaat, en de kale relay maakt zijn database bij de start zelf aan; dat is op 28-08-2026 gezien
|
2026-08-27 16:56:06 +02:00
|
|
|
|
|
2026-08-28 11:02:51 +02:00
|
|
|
|
## Fase 5 - De verbouwing naar de kale relay
|
2026-08-27 16:56:06 +02:00
|
|
|
|
|
2026-08-28 11:02:51 +02:00
|
|
|
|
Nog niets van begonnen. De volgorde is bewust: eerst het programma dat de limiter draagt, dan de app
|
|
|
|
|
|
eromheen, want de compose hangt af van wat dat programma nodig heeft.
|
2026-08-27 16:56:06 +02:00
|
|
|
|
|
2026-08-28 11:12:41 +02:00
|
|
|
|
- [x] **Het eigen relay-programma geschreven (28-08-2026).** `tools/evolu-relay/src/`: `policy.js` met het
|
|
|
|
|
|
beleid als pure functies, `store.js` voor de staat op schijf, en `index.js` dat `createRelay`
|
|
|
|
|
|
aanroept met de opstartvolgorde van Evolu zelf. Met test: `node tests/test_limiter.mjs`, 60 toetsen,
|
|
|
|
|
|
en de beslissende regel is muteertest gedaan
|
|
|
|
|
|
- [x] **Een getal gekozen voor `isOwnerWithinQuota`: 1 MB per schrijfactie**, instelbaar met
|
|
|
|
|
|
`RELAY_MAX_WRITE_BYTES`. Onderweg bleek de aanname hieronder fout: die 1 MB van de gepubliceerde image
|
|
|
|
|
|
is **per schrijfactie** en geen totaal per eigenaar. Er valt dus geen labelgeschiedenis tegenaan te
|
|
|
|
|
|
lopen. Een totaal per eigenaar zou vragen dat we in de opslag van de relay kijken, en dat doen we niet
|
|
|
|
|
|
- [x] **De allowlist als staat onder `${APP_DATA_DIR}/data/`**, naast de relay-database en niet erin:
|
|
|
|
|
|
`owners.json`, atomair geschreven, en `command.json` als postbus voor de pagina
|
|
|
|
|
|
- [ ] **Data per eigenaar wissen.** Nog niet gebouwd, en bewust niet gegokt: het beleid kan een eigenaar
|
|
|
|
|
|
vergeten en blokkeren, maar zijn berichten staan in de SQLite van de relay
|
|
|
|
|
|
(`evolu_message`, `evolu_history`, met `ownerId` als systeemkolom). Dat is schrijven in andermans
|
|
|
|
|
|
schema, dus dat wil eerst nagekeken worden in `createRelaySqliteStorage` van Evolu
|
|
|
|
|
|
- [ ] **Een `package-lock.json` maken en `npm install` in de Dockerfile omzetten naar `npm ci`.** De twee
|
|
|
|
|
|
pakketten van Evolu staan exact vast, maar wat eronder hangt beweegt nu nog mee. `build.sh` waarschuwt
|
|
|
|
|
|
hiervoor. Kan pas op een machine met netwerk en npm
|
2026-08-28 11:02:51 +02:00
|
|
|
|
- [ ] **Wissen per eigenaar laten doen door het relay-proces zelf**, aangestuurd met een vlagbestand vanaf
|
|
|
|
|
|
de pagina. Geen tweede container die langszij in de SQLite schrijft, en geen Docker-socket
|
2026-08-28 11:12:41 +02:00
|
|
|
|
- [x] **`tools/evolu-relay/build.sh` omgeschreven (28-08-2026):** bouwt de eigen `Dockerfile` in plaats van
|
|
|
|
|
|
de repo van Trezor te klonen. Git is niet meer nodig, de pin zit nu in `package.json`, en `VERSION`
|
|
|
|
|
|
in het script hoort gelijk te zijn aan `version` in het manifest
|
2026-08-28 11:02:51 +02:00
|
|
|
|
- [ ] **De compose omzetten:** pagina achter `app_proxy` met de inlog aan, relay op een eigen `ports:`.
|
|
|
|
|
|
Postgres, wachtwoord en quota-manager eruit. Zie [PLAN.md](PLAN.md) §4h
|
|
|
|
|
|
- [ ] **De statuspagina bouwen**, met de pagina en de agent van Electrum Gate als vertrekpunt en met
|
|
|
|
|
|
hetzelfde ontwerpsysteem (`HomeGit/Docs/website-design-system.html`), maar zonder de Google
|
|
|
|
|
|
Fonts-verwijzing daaruit. Toont of de relay draait, welke eigenaars bekend en toegelaten zijn, de
|
|
|
|
|
|
omvang van de database en het laatste schrijfmoment. Draagt de schakelaar voor nieuwe eigenaars en de
|
|
|
|
|
|
wisknop per eigenaar
|
|
|
|
|
|
- [ ] **De app opnieuw installeren in plaats van updaten.** De gebruiker heeft de oude installatie op
|
|
|
|
|
|
28-08-2026 weggehaald; dat is ook de nette weg, want niet elk bestand bereikt een bestaande
|
|
|
|
|
|
installatie via een update
|
|
|
|
|
|
- [ ] **Zoraxy inrichten** op het eigen subdomein met TLS, doorverwijzend naar de relay-poort, met de
|
|
|
|
|
|
WebSocket-upgrade aan. Testen met de handshake-curl uit [PLAN.md](PLAN.md) §6a stap 3, met de
|
|
|
|
|
|
publieke naam in plaats van het IP. **Eigenaar: gebruiker**
|
2026-08-25 17:18:22 +02:00
|
|
|
|
|
|
|
|
|
|
## Fase 1 - De app-map
|
|
|
|
|
|
|
|
|
|
|
|
- [x] **`whatsnext-evolu-relay/` aangemaakt met `umbrel-app.yml` en `docker-compose.yml` (25-08-2026).**
|
|
|
|
|
|
Mapnaam gelijk aan het `id`, met het store-voorvoegsel `whatsnext-`, en de manifestvelden in de
|
|
|
|
|
|
voorgeschreven volgorde
|
|
|
|
|
|
- [x] `data/postgres/.gitkeep` erin, zodat de mount bij de eerste start niet als root wordt aangemaakt
|
|
|
|
|
|
- [x] **`dependencies` weggelaten en niet leeg gezet.** Deze app hangt van geen enkele andere app af; een
|
|
|
|
|
|
leeg veld zou suggereren dat er iets te kiezen valt
|
|
|
|
|
|
- [ ] **Een eigen icoon.** Er staat nu géén `icon` in het manifest, dus de tegel blijft naamloos in de
|
|
|
|
|
|
store. Bewust leeg: een geleend of verkeerd icoon is erger dan geen. **Eigenaar: gebruiker**
|
|
|
|
|
|
|
|
|
|
|
|
## Fase 2 - De compose
|
|
|
|
|
|
|
|
|
|
|
|
- [x] **`app_proxy` met `PROXY_AUTH_ADD: "false"`, en geen eigen `ports:`.** Trezor Suite is geen browser
|
|
|
|
|
|
met een sessiecookie. Dit is het patroon van de eigen `nostr-relay`-app van Umbrel, dus een precedent
|
|
|
|
|
|
en geen omweg; zie [PLAN.md](PLAN.md) §4c
|
|
|
|
|
|
- [x] **Relay en quota-manager uit één image met een ander `command`.** Expliciet en niet leunend op de
|
|
|
|
|
|
`CMD` van de Dockerfile, want daar staat `yarn start` met bovenstrooms zelf een twijfel erbij
|
|
|
|
|
|
- [x] **De quota-manager gaat mee.** Niet omdat de relay hem aanroept, maar omdat de relay elke eigenaar
|
|
|
|
|
|
zonder limietenrij weigert en dit is wat die rijen maakt
|
|
|
|
|
|
- [x] **Postgres onder `${APP_DATA_DIR}/data/postgres`**, wachtwoord uit `${APP_PASSWORD}`, `PGDATA` op een
|
|
|
|
|
|
submap, en `postgres:17-alpine` in plaats van `postgres` kaal
|
|
|
|
|
|
- [x] **Healthcheck op de eigen database en gebruiker**, niet op `-d postgres` zoals bovenstrooms: die
|
|
|
|
|
|
database bestaat hier niet, en dan is de controle groen op het verkeerde antwoord
|
2026-08-25 18:37:18 +02:00
|
|
|
|
- [x] **De eigen image gepind op tag plus digest (25-08-2026).**
|
|
|
|
|
|
`sc.kamenier-hamer.nl/sysop/evolu-relay:c03a204@sha256:2fe1e9e9…`, op beide services. Dat moest wel:
|
|
|
|
|
|
zie fase 4. **Let op dat dit één architectuur is** (amd64), want er is alleen amd64 geduwd. Voor de
|
|
|
|
|
|
officiele store hoort er een multi-arch index-digest met arm64 in; dat staat bij **Publicatie-Relay**
|
|
|
|
|
|
- [ ] **`postgres:17-alpine` pinnen op de multi-arch index-digest.** Kan meteen, met
|
|
|
|
|
|
`docker buildx imagetools inspect`, en het is het laatste ongepinde in deze app. Staat als TODO in de
|
|
|
|
|
|
compose
|
2026-08-25 17:18:22 +02:00
|
|
|
|
|
|
|
|
|
|
## Fase 3 - Het bouwrecept
|
|
|
|
|
|
|
|
|
|
|
|
- [x] **`tools/evolu-relay/build.sh` (25-08-2026).** Haalt de broncode op een vastgezette commit en bouwt
|
|
|
|
|
|
de Dockerfile van Trezor. Niet hun bouwstappen nabouwen; wat wij toevoegen is de pin
|
|
|
|
|
|
- [x] **Niet in de app-map gezet, en dat is geen netheid.** Een `Dockerfile` staat niet in de
|
|
|
|
|
|
update-whitelist, dus bouwen-in-de-app zou elke nieuwe versie een herinstallatie kosten. Zie
|
|
|
|
|
|
[PLAN.md](PLAN.md) §4f
|
|
|
|
|
|
- [x] **Onder `tools/` en niet onder `build/`:** dat laatste staat in `.gitignore` als bouwselmap, dus het
|
|
|
|
|
|
recept zou stilzwijgend buiten de repo blijven. Gevonden bij het stagen, niet bij het schrijven
|
|
|
|
|
|
- [x] Het script controleert na het ophalen dat de commit is wat hij verwachtte, en faalt hard als dat niet
|
|
|
|
|
|
zo is. Zonder die regel bouwt het stil de verkeerde toestand
|
|
|
|
|
|
|
|
|
|
|
|
## Fase 4 - Installeren en verifiëren op de Umbrel
|
|
|
|
|
|
|
|
|
|
|
|
Niets hiervan is op een laptop te doen. Eigenaar van deze hele fase: **gebruiker**.
|
|
|
|
|
|
|
2026-08-25 18:37:18 +02:00
|
|
|
|
- [x] **De image gebouwd op de Umbrel (25-08-2026), in 50 seconden.** Twee dingen die het opleverde: de
|
|
|
|
|
|
gebruiker `umbrel` zit hier níet in de groep `docker`, dus het moet met `sudo`; en de Dockerfile van
|
|
|
|
|
|
Trezor bouwt zonder aanpassing
|
|
|
|
|
|
- [x] **In een register gezet, want anders kan umbreld er niet bij (25-08-2026).** Dit was de grote
|
|
|
|
|
|
verrassing van de dag en het staat met bron in
|
|
|
|
|
|
[Umbrel-appstore-spec.md](../../../Referenties/Umbrel-appstore-spec.md): umbreld haalt élke image via
|
|
|
|
|
|
de Docker Engine API op, niet via compose. Een lokaal gebouwde tag is dus onbereikbaar en
|
|
|
|
|
|
`pull_policy: never` doet niets, want de compose wordt niet gelezen om te pullen. Het Gitea-register op
|
|
|
|
|
|
dezelfde server als de store bleek de kortste weg, en anoniem halen werkt daar
|
|
|
|
|
|
- [x] **De app geïnstalleerd en alle drie de containers blijven draaien (25-08-2026).** `relay`,
|
|
|
|
|
|
`quota-manager` en `db`, met `db` op healthy en de app-proxy op 3851. De lokale images waren vooraf
|
|
|
|
|
|
weggehaald, dus de pull uit het register is echt gedaan en het hele pad is bewezen: broncode →
|
|
|
|
|
|
bouwrecept → register → gepinde digest → installatie
|
2026-08-25 17:18:22 +02:00
|
|
|
|
- [ ] **Gecontroleerd of het databaseschema zichzelf aanmaakt.** Niet uitgezocht, en dit is de eerste
|
|
|
|
|
|
plek waar het misgaat als het antwoord nee is. Kijk in de logs van de relay-container
|
|
|
|
|
|
- [ ] Trezor Suite naar `<umbrel>:3851` laten wijzen en een label synchroniseren. **Dit is de enige
|
|
|
|
|
|
controle die telt**, en hij kan mislukken op de eigenaarsregistratie zonder dat er iets mis is met het
|
|
|
|
|
|
pakket
|
|
|
|
|
|
- [ ] De app gestopt en gestart, en de database heeft het overleefd
|
|
|
|
|
|
- [ ] Gecontroleerd dat het toevoegen van deze app Electrum Gate niet raakt
|
|
|
|
|
|
|
|
|
|
|
|
## Geblokkeerd / wacht op
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] **Hoe registreer je een eigenaar bij de quota-manager?** Zonder antwoord kan er niet gesynchroniseerd
|
|
|
|
|
|
worden, ook al draait alles. Wacht op **Proefopstelling** fase 1; begin bij `bruno-collection/` in de
|
|
|
|
|
|
bovenstroomse repo
|
|
|
|
|
|
- [ ] **Accepteert Trezor Suite dit adres, en in welke vorm?** Wacht op **Proefopstelling**, "Volgende
|
|
|
|
|
|
stap". Als het antwoord nee is, is dit pakket zonder waarde
|