De gebruiker merkte op dat hij op de Mac per wallet op de hardware wallet moest goedkeuren, en dat zijn model nog niet aan een iPhone te koppelen is. Dat sluit de keten, en die is in de broncode van Suite na te lezen. De OwnerId wordt op het apparaat afgeleid: createRetrieveSuiteSyncOwner begint met een harde controle op device.connected. selectIsSuiteSyncInitPossible eist connected plus ondersteuning. En selectSuiteSyncInteraction geeft null zodra er geen deviceStaticSessionId is, waarna useTurnOnSuiteSyncGuard in dezelfde tak belandt als 'unsupported' en gewoon ok() teruggeeft. Dat verklaart elke waarneming tegelijk: de schakelaar liet zich aanzetten, want dat is alleen een instelling; er kwam geen foutmelding; er was geen groen bolletje; en onze relay zag nooit een eigenaar. Zonder een Trezor die aan de telefoon kan is er geen eigenaar, en zonder eigenaar valt er niets te synchroniseren, met of zonder relay. Dit is dus geen tekortkoming van dit pakket en er valt niets aan te repareren. Wat het wel betekent voor de app-tekst is dat werken op een telefoon niet beloofd moet worden zolang dat van het model afhangt. Wat erdoor open blijft is de leeskant: dat een tweede apparaat de labels terugkrijgt is nooit gezien, en iOS zou die tweede client zijn geweest. Dat is nu de belangrijkste openstaande controle, en er is een client voor nodig die wel een sleutel kan afleiden. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
13 KiB
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.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.
Volgende stap
- 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:latesten 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 punt 6 gemeten in plaats van verwacht. Het protocol en alle metingen staan in PLAN.md §6a - Uitgezocht waarom iOS niets doet (28-08-2026): het ligt aan het apparaat en niet aan dit pakket.
De
OwnerIdwordt op de Trezor afgeleid, en het model van de gebruiker kan nog niet aan een iPhone gekoppeld worden. Zonder apparaat kent de app geendeviceStaticSessionId, en dan slaat Suite een label lokaal op en doet verder niets, zonder melding. De hele redenering met bronregels staat in OPEN.md punt 9 - De leeskant nog meten. Er is nooit een tweede werkende cliënt geweest, dus dat een ander apparaat de labels terugkrijgt is niet gezien. Dit is nu de belangrijkste openstaande controle van dit plan, en er is een tweede cliënt voor nodig die wél een sleutel kan afleiden: een tweede desktop met dezelfde Trezor is de kortste weg. iOS valt af zolang het apparaat niet aan de telefoon kan. Eigenaar: gebruiker
- 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 §4g en §4h
- De limiter gekozen (28-08-2026): weg 1, uitbreiden via
createRelay. Dat bleek veel kleiner dan Bereikbaarheid §4b aannam: het zijn twee terugroepfuncties,isOwnerAllowedenisOwnerWithinQuota, 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 punt 8 - 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
Fase 5 - De verbouwing naar de kale relay
Op 28-08-2026 in één sessie gedaan en op het apparaat draaiend, versie 0.3.0. Wat er staat: het eigen relay-programma met de allowlist, het bouwrecept, de compose met de omgedraaide poorten, de statuspagina, en TLS via Zoraxy op een eigen subdomein. De Mac synchroniseert eroverheen, met een geleerde eigenaar en een gesloten deur erna.
Wat er niet staat: iOS doet niets mee, en daardoor is de leeskant nooit gemeten. Beide staan hierboven bij "Volgende stap".
- Het eigen relay-programma geschreven (28-08-2026).
tools/evolu-relay/src/:policy.jsmet het beleid als pure functies,store.jsvoor de staat op schijf, enindex.jsdatcreateRelayaanroept met de opstartvolgorde van Evolu zelf. Met test:node tests/test_limiter.mjs, 60 toetsen, en de beslissende regel is muteertest gedaan - Een getal gekozen voor
isOwnerWithinQuota: 1 MB per schrijfactie, instelbaar metRELAY_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 - De allowlist als staat onder
${APP_DATA_DIR}/data/, naast de relay-database en niet erin:owners.json, atomair geschreven, encommand.jsonals 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, metownerIdals systeemkolom). Dat is schrijven in andermans schema, dus dat wil eerst nagekeken worden increateRelaySqliteStoragevan Evolu - Een
package-lock.jsonmaken ennpm installin de Dockerfile omzetten naarnpm ci. De twee pakketten van Evolu staan exact vast, maar wat eronder hangt beweegt nu nog mee.build.shwaarschuwt hiervoor. Kan pas op een machine met netwerk en npm - 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
tools/evolu-relay/build.shomgeschreven (28-08-2026): bouwt de eigenDockerfilein plaats van de repo van Trezor te klonen. Git is niet meer nodig, de pin zit nu inpackage.json, enVERSIONin het script hoort gelijk te zijn aanversionin het manifest- De compose omgezet (28-08-2026): pagina achter
app_proxymét de inlog, relay op host-poort 3852. Postgres, wachtwoord en quota-manager eruit; drie containers werden relay, agent en nginx. De image is gepind op tag plus digest - De statuspagina gebouwd (28-08-2026):
index.html.template,nginx.conf.templateenagent.py.template, met het ontwerpsysteem van Electrum Gate en zonder de Google Fonts-verwijzing. Toont of de relay draait, de omvang en het laatste schrijfmoment van de database, het adres dat je in Suite invult, en de eigenaars in drie lijsten met knoppen om te blokkeren, alsnog toe te laten of te vergeten. Nog nooit in een browser gezien - Het relay-programma op het apparaat geverifieerd (28-08-2026). Losgedraaid uit het register,
buiten de app om. Het log meldde
learned a new owner, en in/app/datastonden daarnaevolu-relay.dbvan 49152 bytes (dezelfde omvang als bij de proef van vanochtend, dus de labels zijn geland) enowners.jsonvan 241 bytes. Daarmee is de hele keten gemeten:isOwnerAllowedwordt aangeroepen met iets wat het beleid begrijpt, de leerstand werkt, en de allowlist gaat naar schijf - De pagina en de agent op het apparaat geverifieerd (28-08-2026). De pagina rendert, toont de
gegevens van de relay, en de knop Close werkt: de leerstand ging naar
closeden de geleerde eigenaar staat in de lijst met eerste en laatste verschijning. Daarmee is de hele keten gemeten, pagina → agent → postbus → relay-proces → schijf → pagina - De fout die dat opleverde is gerepareerd: de korte containernaam
agentis op het gedeelde Docker-netwerk niet uniek, dus de helft van de verzoeken kwam bij Electrum Gate uit. Beide apps wijzen nu naar<app-id>_agent_1, entest_appstore_vorm.pytoetst dat voortaan - 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 §6a stap 3, met de publieke naam in plaats van het IP. Eigenaar: gebruiker
Fase 1 - De app-map
whatsnext-evolu-relay/aangemaakt metumbrel-app.ymlendocker-compose.yml(25-08-2026). Mapnaam gelijk aan hetid, met het store-voorvoegselwhatsnext-, en de manifestvelden in de voorgeschreven volgordedata/postgres/.gitkeeperin, zodat de mount bij de eerste start niet als root wordt aangemaaktdependenciesweggelaten 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 (28-08-2026).
icon.pngaangeleverd door de gebruiker, met deicon-regel in het manifest die naar de rauwe versie in deze repo wijst. Als laatste regel, want bij inlevering in de officiële store hoort hij weg
Fase 2 - De compose
app_proxymetPROXY_AUTH_ADD: "false", en geen eigenports:. Trezor Suite is geen browser met een sessiecookie. Dit is het patroon van de eigennostr-relay-app van Umbrel, dus een precedent en geen omweg; zie PLAN.md §4c- Relay en quota-manager uit één image met een ander
command. Expliciet en niet leunend op deCMDvan de Dockerfile, want daar staatyarn startmet bovenstrooms zelf een twijfel erbij - 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
- Postgres onder
${APP_DATA_DIR}/data/postgres, wachtwoord uit${APP_PASSWORD},PGDATAop een submap, enpostgres:17-alpinein plaats vanpostgreskaal - Healthcheck op de eigen database en gebruiker, niet op
-d postgreszoals bovenstrooms: die database bestaat hier niet, en dan is de controle groen op het verkeerde antwoord - 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-alpinepinnen op de multi-arch index-digest. Kan meteen, metdocker buildx imagetools inspect, en het is het laatste ongepinde in deze app. Staat als TODO in de compose
Fase 3 - Het bouwrecept
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- Niet in de app-map gezet, en dat is geen netheid. Een
Dockerfilestaat niet in de update-whitelist, dus bouwen-in-de-app zou elke nieuwe versie een herinstallatie kosten. Zie PLAN.md §4f - Onder
tools/en niet onderbuild/: dat laatste staat in.gitignoreals bouwselmap, dus het recept zou stilzwijgend buiten de repo blijven. Gevonden bij het stagen, niet bij het schrijven - 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.
- De image gebouwd op de Umbrel (25-08-2026), in 50 seconden. Twee dingen die het opleverde: de
gebruiker
umbrelzit hier níet in de groepdocker, dus het moet metsudo; en de Dockerfile van Trezor bouwt zonder aanpassing - 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: umbreld haalt élke image via
de Docker Engine API op, niet via compose. Een lokaal gebouwde tag is dus onbereikbaar en
pull_policy: neverdoet 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 - De app geïnstalleerd en alle drie de containers blijven draaien (25-08-2026).
relay,quota-managerendb, metdbop 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 - 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>:3851laten 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