De leeskant is bewezen, en daarmee is het doel van Umbrelapp gehaald

Getest met een tweede gebruikersaccount op dezelfde Mac, en dat is schoner dan een
tweede apparaat: die installatie begint met een lege lokale Evolu-database, dus
alles wat daar verschijnt kan alleen van de relay komen. De labels kwamen door, en
een wijziging aan die kant komt ook weer terug. Beide richtingen dus, met bewijs.

Daarmee staat er wat dit plan beloofde: een tweede app in deze store,
geinstalleerd op de Umbrel, met Trezor Suite die erop synchroniseert. Het restwerk
is klein en wacht nergens op: een herstart van de app overleven, twee images
pinnen, en data per eigenaar kunnen wissen.

Prioriteitsherziening die daarbij hoort. Umbrelapp zakt van A naar B. Eigenimage
gaat naar A, want dat lag alleen stil omdat de gebruiker eerst Evolu Relay wilde
afmaken; het is hernummerd naar 004 zodat de bovenkant van de reeks weer op
tier-orde staat. Proefopstelling zakt naar B en is klaar voor het archief: alle
vragen die het bezat zijn hier beantwoord, en de rest gaat over een pakket dat niet
meer bestaat.

De takenlijst is opgeschoond van regels die over het oude pakket gingen: de
Postgres-pin, de schemavraag, het adres op 3851 en de twee blokkades. In plaats
daarvan staan de twee images die nu nog ongepind zijn. En de controle of deze app
Electrum Gate raakt is afgevinkt met wat er werkelijk gebeurde: dat deed hij, via
een gedeelde containernaam, en dat is gerepareerd.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Harmen
2026-08-28 13:59:15 +02:00
co-authored by Claude Opus 5
parent af7857251d
commit e4a8747307
8 changed files with 54 additions and 34 deletions
+3 -3
View File
@@ -23,14 +23,14 @@
| Plan | App | Volgende stap | Status | | Plan | App | Volgende stap | Status |
|-|-|-|-| |-|-|-|-|
| [Umbrelapp](Plannen/Actief/008-Umbrelapp/TAKEN.md) | Relay | **Dit is de focus vanaf 27-08-2026, gekozen door de gebruiker, en de app staat op dit moment uit.** Uit de broncode van Suite: bij een eigen relay-URL registreert de cliënt geen eigenaar, terwijl Trezor's relay iedereen zonder limietenrij weigert. **Richting gekozen op 27-08-2026: kaal, met een eigen limiter en een statuspagina erop.** **Op 28-08-2026 verbouwd, uitgerold als 0.3.0 en in gebruik.** De kale relay met een eigen eigenaars-allowlist, een statuspagina achter de umbrelOS-inlog, en TLS via Zoraxy op een eigen subdomein; de desktop synchroniseert eroverheen. **iOS is verklaard en het ligt niet aan dit pakket:** de `OwnerId` wordt op de Trezor afgeleid, en een model dat niet aan een iPhone kan geeft geen sleutel, dus slaat Suite een label daar lokaal op en doet verder niets, zonder melding (open punt 9, met bronregels). **Wat daardoor open blijft is de leeskant:** dat een tweede apparaat de labels terugkrijgt is nooit gezien, en daar is een tweede cliënt voor nodig die wél een sleutel kan afleiden Let op: kaal gaan haalt de énige bescherming weg die er nu is, dus de limiter is voorwaarde en geen extraatje, en de huidige quota-manager is er niet voor te hergebruiken. Zie open punt 6, 8 en 2 | 🔶 | | [Eigenimage](Plannen/Actief/004-Eigenimage/TAKEN.md) | Gate | **Gepromoveerd op 28-08-2026, want waar het op wachtte is klaar:** de gebruiker wilde eerst Evolu Relay afmaken en dat doel is gehaald. Het register is beslist (Gitea, bij inlevering opnieuw kijken), dus fase 1 kan zo starten: het bouwrecept in `tools/electrum-gate/`, multi-arch, anoniem te halen. Er ligt nu ook een voorbeeld naast: `tools/evolu-relay/` doet precies dit, inclusief de valkuil dat een lokaal gebouwde tag voor umbreld onbereikbaar is. Let op §1: het lost níet het updateprobleem op, want dat bestaat niet meer | |
| [Eigenimage](Plannen/Actief/006-Eigenimage/TAKEN.md) | Gate | **Klaar om te beginnen, maar ligt stil op verzoek van de gebruiker** (27-08-2026): hij gaat eerst verder met Evolu Relay. Het register is beslist (Gitea, bij inlevering opnieuw kijken), dus fase 1 kan zo starten: het bouwrecept in `tools/electrum-gate/`, multi-arch, anoniem te halen. Let op §1: het lost níet het updateprobleem op, want dat bestaat niet meer | ⬜ |
| [Proefopstelling](Plannen/Actief/007-Proefopstelling/TAKEN.md) | Relay | **Dit plan is op 28-08-2026 volledig ingehaald en kan waarschijnlijk naar het archief.** Beide vragen die het nog bezat zijn beantwoord door **Umbrelapp**: Trezor Suite accepteert een eigen relay op de desktop, en een eigenaar registreren is niet meer nodig sinds de quota-manager eruit is. Wat er in fase 2 en 3 stond gaat over een pakket dat niet meer bestaat. **Eén beslissing van de gebruiker: opheffen of laten staan** | 🔶 |
## B - Los oppakbaar (geen blokkade, geen vaste volgorde) ## B - Los oppakbaar (geen blokkade, geen vaste volgorde)
| Plan | App | Volgende stap | Status | | Plan | App | Volgende stap | Status |
|-|-|-|-| |-|-|-|-|
| [Umbrelapp](Plannen/Actief/008-Umbrelapp/TAKEN.md) | Relay | **Van A naar B op 28-08-2026: het doel is gehaald.** De app draait als 0.3.0 met een eigen eigenaars-allowlist, een statuspagina achter de umbrelOS-inlog en TLS via Zoraxy op een eigen subdomein, en Trezor Suite synchroniseert eroverheen **heen én terug**; die tweede richting is bewezen met een tweede gebruikersaccount op de Mac dat met een lege database alle labels binnenkreeg. iOS doet niet mee en dat ligt niet aan dit pakket: de `OwnerId` wordt op de Trezor afgeleid, en een model dat niet aan een iPhone kan geeft geen sleutel (open punt 9, met bronregels). Wat nog openstaat is klein en wacht nergens op: een herstart van de app overleven, `python:3-alpine` en `nginx:alpine` pinnen, en data per eigenaar kunnen wissen | 🔶 |
| [Proefopstelling](Plannen/Actief/007-Proefopstelling/TAKEN.md) | Relay | **Volledig ingehaald op 28-08-2026 en klaar voor het archief.** Beide vragen die het nog bezat zijn beantwoord door **Umbrelapp**: Trezor Suite accepteert een eigen relay, en een eigenaar registreren is niet meer nodig sinds de quota-manager eruit is. Wat er in fase 2 en 3 stond gaat over een pakket dat niet meer bestaat. **Eén beslissing van de gebruiker: opheffen of laten staan** | 🔶 |
| [Webinterface](Plannen/Actief/005-Webinterface/TAKEN.md) | Gate | **De pagina is af en goedgekeurd, op een breed scherm én op een telefoon (27-08-2026).** Op 28-08-2026 kapotgegaan door de tweede app en gerepareerd in 0.0.23: de korte containernaam `agent` is op het gedeelde Docker-netwerk niet uniek. Van A naar B: wat er nog staat wacht op tijd (het activiteitenlog een etmaal laten lopen) of is een beslissing van de gebruiker (waar Nginx Proxy Manager zijn certificaten neerzet, en of Zoraxy een harde afhankelijkheid wordt) | 🔶 | | [Webinterface](Plannen/Actief/005-Webinterface/TAKEN.md) | Gate | **De pagina is af en goedgekeurd, op een breed scherm én op een telefoon (27-08-2026).** Op 28-08-2026 kapotgegaan door de tweede app en gerepareerd in 0.0.23: de korte containernaam `agent` is op het gedeelde Docker-netwerk niet uniek. Van A naar B: wat er nog staat wacht op tijd (het activiteitenlog een etmaal laten lopen) of is een beslissing van de gebruiker (waar Nginx Proxy Manager zijn certificaten neerzet, en of Zoraxy een harde afhankelijkheid wordt) | 🔶 |
| [Appstore](Plannen/Actief/010-Appstore/TAKEN.md) | Gate | De repo `ElectrumTLS` weghalen op de Git-server; daar staat het domein nog in de historie. **De omschakeling naar Fulcrum is op 27-08-2026 gelukt zonder aanpassing**, dus daarvan is alleen de herstartcontrole nog over, en die komt vanzelf bij de eerstvolgende herstart | 🔶 | | [Appstore](Plannen/Actief/010-Appstore/TAKEN.md) | Gate | De repo `ElectrumTLS` weghalen op de Git-server; daar staat het domein nog in de historie. **De omschakeling naar Fulcrum is op 27-08-2026 gelukt zonder aanpassing**, dus daarvan is alleen de herstartcontrole nog over, en die komt vanzelf bij de eerstvolgende herstart | 🔶 |
@@ -1,6 +1,9 @@
# Taken - Proefopstelling # Taken - Proefopstelling
> Prioriteit: **A** | Afhankelijk van: - > Prioriteit: **B** | Afhankelijk van: -
>
> Van A naar B op 28-08-2026: er valt hier niets meer te doen behalve beslissen of het plan wordt
> opgeheven. Alle vragen die het bezat zijn door **Umbrelapp** beantwoord.
> >
> Actief sinds 25-08-2026, bij het inrichten van dit project. > Actief sinds 25-08-2026, bij het inrichten van dit project.
> >
@@ -23,9 +23,13 @@ van de gebruiker: de `OwnerId` wordt op de Trezor afgeleid, en zijn model kan no
apparaat kent de app geen device state, en dan slaat Suite een label lokaal op en doet verder niets, zonder apparaat kent de app geen device state, en dan slaat Suite een label lokaal op en doet verder niets, zonder
melding. Bronregels in [OPEN.md](OPEN.md) punt 9. melding. Bronregels in [OPEN.md](OPEN.md) punt 9.
Daardoor blijft de leeskant ongemeten, en dat is nu de belangrijkste openstaande controle. Er is een tweede **En de leeskant is aan het eind van de dag alsnog bewezen**, met een tweede gebruikersaccount op dezelfde
cliënt voor nodig die wél een sleutel kan afleiden; een tweede desktop met dezelfde Trezor is de kortste Mac. Dat is zelfs schoner dan een tweede apparaat: die installatie begint met een lege lokale
weg. Evolu-database, dus alles wat daar verschijnt kan alleen van de relay komen. De labels kwamen door.
**Daarmee is het doel van dit plan gehaald:** een tweede app in deze store, geïnstalleerd op de Umbrel, met
Trezor Suite die erop synchroniseert, heen en terug. Wat er nog openstaat is klein: een herstart van de app
overleven, twee images pinnen, en het wissen van data per eigenaar.
**Geraakt:** de hele app-map, `tools/evolu-relay/`, `tests/`, `CLAUDE.md`, `whatsnext-electrum-gate/` en de **Geraakt:** de hele app-map, `tools/evolu-relay/`, `tests/`, `CLAUDE.md`, `whatsnext-electrum-gate/` en de
documentatie. **Tests:** alle vier groen. documentatie. **Tests:** alle vier groen.
+40 -27
View File
@@ -1,6 +1,8 @@
# Taken - Umbrelapp # Taken - Umbrelapp
> **App: Evolu Relay.** Prioriteit: **A** | Afhankelijk van: > **App: Evolu Relay.** Prioriteit: **B** | Afhankelijk van:
>
> Van A naar B op 28-08-2026: het doel van dit plan is gehaald en het restwerk wacht nergens op.
> >
> Actief sinds 25-08-2026. Gepromoveerd uit `Masterplannen/` omdat de gebruiker besloot het pakket meteen te > 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: > maken. De afhankelijkheid op **Proefopstelling** is daarmee geen blokkade meer maar een parallelle bron:
@@ -24,11 +26,11 @@
gekoppeld worden. Zonder apparaat kent de app geen `deviceStaticSessionId`, en dan slaat Suite een gekoppeld worden. Zonder apparaat kent de app geen `deviceStaticSessionId`, en dan slaat Suite een
label lokaal op en doet verder niets, zonder melding. De hele redenering met bronregels staat in label lokaal op en doet verder niets, zonder melding. De hele redenering met bronregels staat in
[OPEN.md](OPEN.md) punt 9 [OPEN.md](OPEN.md) punt 9
- [ ] **De leeskant nog meten.** Er is nooit een tweede werkende cliënt geweest, dus dat een ander apparaat - [x] **De leeskant gemeten en in orde (28-08-2026).** Getest met een tweede gebruikersaccount op dezelfde
de labels terugkrijgt is niet gezien. **Dit is nu de belangrijkste openstaande controle van dit plan**, Mac, en dat is schoner dan een tweede apparaat: die installatie heeft een **lege** lokale
en er is een tweede cliënt voor nodig die wél een sleutel kan afleiden: een tweede desktop met Evolu-database, dus alles wat daar verschijnt kan alleen van de relay komen. Dezelfde Trezor en
dezelfde Trezor is de kortste weg. iOS valt af zolang het apparaat niet aan de telefoon kan. dezelfde wallet, dus dezelfde `OwnerId` en geen nieuwe eigenaar. De labels kwamen door. Daarmee zijn
**Eigenaar: gebruiker** beide richtingen bewezen
- [x] **Besloten wat er met het huidige pakket gebeurt (28-08-2026): het gaat eruit.** De relay van Trezor, - [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) de quota-manager en de Postgres vervallen. Wat ervoor in de plaats komt staat in [PLAN.md](PLAN.md)
§4g en §4h §4g en §4h
@@ -91,12 +93,12 @@ Wat er niet staat: iOS doet niets mee, en daardoor is de leeskant nooit gemeten.
- [x] **De fout die dat opleverde is gerepareerd:** de korte containernaam `agent` is op het gedeelde - [x] **De fout die dat opleverde is gerepareerd:** de korte containernaam `agent` is op het gedeelde
Docker-netwerk niet uniek, dus de helft van de verzoeken kwam bij Electrum Gate uit. Beide apps Docker-netwerk niet uniek, dus de helft van de verzoeken kwam bij Electrum Gate uit. Beide apps
wijzen nu naar `<app-id>_agent_1`, en `test_appstore_vorm.py` toetst dat voortaan wijzen nu naar `<app-id>_agent_1`, en `test_appstore_vorm.py` toetst dat voortaan
- [ ] **De app opnieuw installeren in plaats van updaten.** De gebruiker heeft de oude installatie op - [x] **De app opnieuw geïnstalleerd in plaats van geüpdatet (28-08-2026).** De oude installatie was er
28-08-2026 weggehaald; dat is ook de nette weg, want niet elk bestand bereikt een bestaande eerst afgehaald, en dat was ook de nette weg: niet elk bestand bereikt een bestaande installatie via
installatie via een update een update
- [ ] **Zoraxy inrichten** op het eigen subdomein met TLS, doorverwijzend naar de relay-poort, met de - [x] **Zoraxy ingericht (28-08-2026)** op een eigen subdomein met TLS, doorverwijzend naar de relay-poort,
WebSocket-upgrade aan. Testen met de handshake-curl uit [PLAN.md](PLAN.md) §6a stap 3, met de met de WebSocket-upgrade aan. De handshake-curl uit [PLAN.md](PLAN.md) §6a stap 3 geeft daar
publieke naam in plaats van het IP. **Eigenaar: gebruiker** `101 Switching Protocols`, en de desktop synchroniseert eroverheen
## Fase 1 - De app-map ## Fase 1 - De app-map
@@ -127,9 +129,11 @@ Wat er niet staat: iOS doet niets mee, en daardoor is de leeskant nooit gemeten.
`sc.kamenier-hamer.nl/sysop/evolu-relay:c03a204@sha256:2fe1e9e9…`, op beide services. Dat moest wel: `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 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** 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 - [x] **De Postgres-pin is vervallen (28-08-2026):** die database zit niet meer in de app
`docker buildx imagetools inspect`, en het is het laatste ongepinde in deze app. Staat als TODO in de - [ ] **`python:3-alpine` en `nginx:alpine` pinnen op hun multi-arch index-digest.** Dat zijn de twee laatste
compose ongepinde images van deze app, en ze staan als TODO in de compose. Met
`docker buildx imagetools inspect` op de Umbrel. Electrum Gate heeft precies dezelfde twee openstaan,
dus dit is één handeling voor beide apps
## Fase 3 - Het bouwrecept ## Fase 3 - Het bouwrecept
@@ -160,18 +164,27 @@ Niets hiervan is op een laptop te doen. Eigenaar van deze hele fase: **gebruiker
`quota-manager` en `db`, met `db` op healthy en de app-proxy op 3851. De lokale images waren vooraf `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 → weggehaald, dus de pull uit het register is echt gedaan en het hele pad is bewezen: broncode →
bouwrecept → register → gepinde digest → installatie bouwrecept → register → gepinde digest → installatie
- [ ] **Gecontroleerd of het databaseschema zichzelf aanmaakt.** Niet uitgezocht, en dit is de eerste - [x] **De schemavraag is vervallen (28-08-2026):** de kale relay maakt zijn SQLite bij de start zelf aan,
plek waar het misgaat als het antwoord nee is. Kijk in de logs van de relay-container en de Postgres waar deze vraag over ging zit niet meer in de app
- [ ] Trezor Suite naar `<umbrel>:3851` laten wijzen en een label synchroniseren. **Dit is de enige - [x] **Trezor Suite synchroniseert (28-08-2026), heen én terug.** Niet naar 3851 zoals hier stond maar naar
controle die telt**, en hij kan mislukken op de eigenaarsregistratie zonder dat er iets mis is met het 3852: de poorten zijn omgedraaid, want 3851 draagt nu de statuspagina. Zie de "Volgende stap"
pakket hierboven
- [ ] De app gestopt en gestart, en de database heeft het overleefd - [ ] De app gestopt en gestart, en de data heeft het overleefd. **Nog niet gedaan**, en het is de laatste
- [ ] Gecontroleerd dat het toevoegen van deze app Electrum Gate niet raakt controle van dit plan die er echt toe doet: de allowlist en de labels staan onder
`${APP_DATA_DIR}/data/relay`, dus een herstart hoort niets te kosten. **Eigenaar: gebruiker**
- [x] **Gecontroleerd of het toevoegen van deze app Electrum Gate raakt (28-08-2026), en dat deed het.**
Niet zoals verwacht via poorten of geheugen, maar via een naam: beide apps hadden een service `agent`
op hetzelfde Docker-netwerk, en Docker verdeelde de naam over allebei. De pagina van Gate ging daardoor
stuk. Gerepareerd in beide apps, met een toets in `test_appstore_vorm.py` zodat het niet stil
terugkomt
## Geblokkeerd / wacht op ## Geblokkeerd / wacht op
- [ ] **Hoe registreer je een eigenaar bij de quota-manager?** Zonder antwoord kan er niet gesynchroniseerd **Leeg sinds 28-08-2026.** Beide blokkades zijn opgeheven en ze staan hier voor de geschiedenis.
worden, ook al draait alles. Wacht op **Proefopstelling** fase 1; begin bij `bruno-collection/` in de
bovenstroomse repo - [x] **"Hoe registreer je een eigenaar bij de quota-manager?"** is vervallen: de quota-manager zit niet
- [ ] **Accepteert Trezor Suite dit adres, en in welke vorm?** Wacht op **Proefopstelling**, "Volgende meer in de app, en de kale relay kent geen limietentabel. De vraag bestond alleen bij het pakket van
stap". Als het antwoord nee is, is dit pakket zonder waarde Trezor
- [x] **"Accepteert Trezor Suite dit adres, en in welke vorm?"** is beantwoord: ja, met `http(s)://` en
desgewenst een pad, zowel via het dev-utils-veld als via de gewone "Custom server"-instelling. Gemeten
op de desktop, heen en terug