diff --git a/Docs/CONTINUE_HERE.md b/Docs/CONTINUE_HERE.md index 7636b63..e15ccca 100644 --- a/Docs/CONTINUE_HERE.md +++ b/Docs/CONTINUE_HERE.md @@ -24,7 +24,7 @@ | Plan | App | Volgende stap | Status | |-|-|-|-| | [Webinterface](Plannen/Actief/005-Webinterface/TAKEN.md) | Gate | 0.0.10 op een telefoon nakijken, en het uploaden op het niet-gelukkige pad proberen met een sleutel die niet bij het certificaat hoort. Daarna open punt 5: laten controleren of de TLS-poort zélf antwoordt | 🔶 | -| [Proefopstelling](Plannen/Actief/007-Proefopstelling/TAKEN.md) | Relay | Controleren of Trezor Suite een eigen sync-server accepteert, en op welk platform. Dat is de goedkoopste weerlegging van het hele project en het kost een minuut in de interface | ⬜ | +| [Proefopstelling](Plannen/Actief/007-Proefopstelling/TAKEN.md) | Relay | Controleren of Trezor Suite een eigen sync-server accepteert, en op welk platform. Dat is de goedkoopste weerlegging van het hele project en het kost een minuut in de interface. Fase 1 is verder af: de quota-manager blijkt in de praktijk verplicht en er is geen publieke image, dus die moet zelf gebouwd worden | 🔶 | ## B - Los oppakbaar (geen blokkade, geen vaste volgorde) diff --git a/Docs/Plannen/Actief/007-Proefopstelling/PROGRESS.md b/Docs/Plannen/Actief/007-Proefopstelling/PROGRESS.md index 1200400..4ceb3b0 100644 --- a/Docs/Plannen/Actief/007-Proefopstelling/PROGRESS.md +++ b/Docs/Plannen/Actief/007-Proefopstelling/PROGRESS.md @@ -3,6 +3,34 @@ > 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 - de bovenstroomse repo gelezen, en twee aannames sneuvelden + +De gebruiker wil de app meteen pakketteren en een installatie proberen. Daarvoor moest fase 1 eerst +gedaan worden, want een compose schrijven op aannames is precies wat dit plan moet voorkomen. Alles staat +met bron per feit in [Upstream-evolu-relay.md](../../../Referenties/Upstream-evolu-relay.md). + +**De quota-manager is in de praktijk verplicht.** Niet omdat de relay hem aanroept (er is geen HTTP-koppeling +en geen URL in de configuratie), maar omdat `isOwnerAllowed()` een rij in de limietentabel eist en de +quota-manager die aanmaakt. Zonder hem is de relay dus niet open maar dicht voor iedereen. Dat is de +tegengestelde uitkomst van waar het vooronderzoek op hoopte, en het maakt de tweede weg interessant: de +tabel is ook met de hand te vullen, want ze delen alleen de Postgres. + +**Er is geen publieke image.** Trezor bouwt er wel een, maar duwt hem naar een eigen Amazon ECR; op Docker +Hub staat niets. Zelf bouwen en publiceren, of geen Umbrel-app, en dat is een doorlopende verplichting en +geen eenmalige handeling. Bijvangst die een risico wegneemt: datzelfde werkproces bouwt amd64 én arm64, dus +de Dockerfile is bovenstrooms bewezen op een Raspberry Pi. + +Twee kleinere correcties op het vooronderzoek: de compose van Trezor draait de relay **niet** (alleen +Postgres en Prometheus, het is een ontwikkelopstelling), en alle processen komen uit **één** image met per +service een ander `command`, dus het worden geen drie images. + +Wat er onopgelost bleef en waar niet op gegokt moet worden: `.env.sample` zegt dat `SERVER_ENV=prod` +authenticatie aanzet, maar in de code die ik las bepaalt die vlag alleen het logniveau en staan de controles +onvoorwaardelijk aan. Eén van de twee is achterhaald; met één keer starten te meten. + +**Geraakt:** `Referenties/Upstream-evolu-relay.md` (van vooronderzoek naar nagetrokken), `TAKEN.md`, +`Docs/CONTINUE_HERE.md`. **Tests:** niet van toepassing, alleen documentatie. + ## 25-08-2026 - plan werd actief Dit project bestond uit één document, `trezor-suite-sync-umbrel-app-plan.md`, met het vooronderzoek van diff --git a/Docs/Plannen/Actief/007-Proefopstelling/TAKEN.md b/Docs/Plannen/Actief/007-Proefopstelling/TAKEN.md index 7439367..d41dd3d 100644 --- a/Docs/Plannen/Actief/007-Proefopstelling/TAKEN.md +++ b/Docs/Plannen/Actief/007-Proefopstelling/TAKEN.md @@ -15,19 +15,38 @@ ## 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 +- [x] **`.env.sample`, `docker-compose.yaml`, `Dockerfile`, `README.md` en de relay-broncode gelezen + (25-08-2026).** Dat leverde meer op dan de vraag stelde en het staat met bron per feit in + [Upstream-evolu-relay.md](../../../Referenties/Upstream-evolu-relay.md). De drie uitkomsten die het + pakket bepalen: + **(a) de quota-manager is in de praktijk verplicht** - de relay weigert elke eigenaar die geen rij in + de limietentabel heeft, en de quota-manager maakt die rijen. Er is geen HTTP-koppeling tussen de twee, + ze delen alleen de Postgres, dus de tabel gevuld krijgen is wat telt en niet de dienst zelf; + **(b) er is geen publieke image** - Trezor duwt naar een eigen Amazon ECR. Zelf bouwen en publiceren, + of geen app; + **(c) alle processen komen uit één image** met per service een ander `command`, dus geen drie images +- [x] **Vastgesteld dat Trezor geen image publiceert (25-08-2026).** Zie hierboven. Bijvangst die een + risico wegneemt: hun eigen werkproces bouwt `linux/amd64` én `linux/arm64`, dus de Dockerfile is + bovenstrooms bewezen op arm64 +- [x] **De compose van Trezor draait de relay niet** (25-08-2026), tegen wat het vooronderzoek aannam. Er + staan alleen Postgres en Prometheus in; het is een ontwikkelopstelling. Wat Trezor zelf uitrolt staat + in `.k8s/` +- [ ] **Uitzoeken hoe je een eigenaar bij de quota-manager registreert**, en of daar iets extern voor nodig + is. Dit is nu de vraag die bepaalt of dit een bruikbare app wordt. Begin bij `bruno-collection/` in + de repo; de README verwijst voor de API-spec naar Notion +- [ ] **Uitzoeken wat `SERVER_ENV=prod` doet dat `dev` niet doet.** `.env.sample` zegt dat prod + authenticatie aanzet, maar in de code die ik las bepaalt die vlag alleen het logniveau en staan de + controles onvoorwaardelijk aan. Niet aannemen dat dev de deur opent, en ook niet dat hij dicht 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 +- [ ] Postgres uit de compose van Trezor gestart, en de relay ernaast met `yarn start-evolu-relay` of uit + een zelfgebouwde image. **Niet "docker compose up en klaar":** die compose draait de relay niet - [ ] 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) +- [ ] Gemeten wat er gebeurt bij een eigenaar zónder limietenrij, in `dev` én in `prod`. Dat beslecht de + tegenspraak uit fase 1 in één keer - [ ] **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) diff --git a/Docs/Referenties/Upstream-evolu-relay.md b/Docs/Referenties/Upstream-evolu-relay.md index 2adf620..31245d8 100644 --- a/Docs/Referenties/Upstream-evolu-relay.md +++ b/Docs/Referenties/Upstream-evolu-relay.md @@ -1,72 +1,152 @@ # Upstream: `trezor/trezor-suite-sync` en Evolu Relay -Naslag, geen plan. Wat er over de bovenstroomse repo bekend is, plus per feit hoe hard het is. Dat -onderscheid staat er expres in: **alles hieronder komt uit het vooronderzoek van 25-08-2026 en is in deze -repo nog niet nagetrokken tegen de bron.** Het plan **Proefopstelling** doet precies dat, en de eerste -sessie die daar iets van bevestigt of weerlegt, werkt dit document bij met de datum erbij. +Naslag, geen plan. **Nagetrokken tegen de bron op 25-08-2026**, met de URL's onderaan. Dat is een andere +status dan de eerste versie van dit document had: die leunde op vooronderzoek van dezelfde dag en meldde +per regel dat het niet geverifieerd was. Wat hieronder staat komt uit de bestanden zelf. + +Op drie punten week de werkelijkheid af van het vooronderzoek, en alle drie raken het pakket. Ze staan in +§2, §3 en §4. ## 1. Wat het is Trezor Suite kan labels en accountnamen synchroniseren tussen apparaten. De server die dat doet heet in de interface "custom sync server"; het onderdeel zelf heet **Evolu Relay** en staat in de repo -`trezor/trezor-suite-sync`. +`trezor/trezor-suite-sync` (standaardbranch `main`, licentie in `LICENSE.md`, door GitHub geclassificeerd +als "other"). Evolu is een local-first synchronisatielaag: de client houdt zijn eigen kopie bij en de relay is een -doorgeefluik voor versleutelde wijzigingen. Dat is ook waarom zelf hosten hier kán zonder dat je iets aan -de beveiliging opgeeft: volgens Trezor is de data client-side end-to-end versleuteld, dus de relay ziet -niets leesbaars. **Zelf hosten haalt Trezor uit de vergelijking, het verandert de privacygaranties niet.** +doorgeefluik voor versleutelde wijzigingen. Volgens Trezor is de data client-side end-to-end versleuteld, +dus de relay ziet niets leesbaars. **Zelf hosten haalt Trezor uit de vergelijking, het verandert de +privacygaranties niet.** -## 2. Wat de repo bevat +## 2. Eén codebase, vier processen, en een compose die de app niet draait -| Onderdeel | Poort | Waarvoor | Hardheid | -|-|-|-|-| -| `evolu-relay` | 4000 | de eigenlijke sync-relay, dit is wat we nodig hebben | onderzocht 25-08-2026 | -| `quota-manager` | 4001 | quota- en betaalserver, noemt een "Payment Server" en een Notion API-spec | onderzocht 25-08-2026 | -| Postgres | standaard | opslag achter de relay | onderzocht 25-08-2026 | -| `Dockerfile` en `docker-compose.yaml` | | Trezor containeriseert zelf al | onderzocht 25-08-2026 | -| `.k8s/` | | Kubernetes-configuratie, voor Umbrel niet relevant | onderzocht 25-08-2026 | +**Correctie op het vooronderzoek.** Daar stond dat er een `Dockerfile` en een `docker-compose.yaml` in de +repo staan en dat containeriseren dus "al gedeeltelijk gedaan is door Trezor zelf". Het eerste klopt, het +tweede niet: **de compose van Trezor draait de relay niet.** Er staan precies twee diensten in, en dat is +een ontwikkelopstelling: -Laatste release genoemd in het vooronderzoek: **v0.1.8, april 2026**. Dat maakt het een jong en actief -project, en dat is een risico dat verder gaat dan een versienummer: de architectuur kan nog schuiven. +- `db`: `image: postgres`, ongepind, met `PGDATA: /data/postgres` en `5432:5432` naar buiten; +- `prometheus`: `network_mode: host`, die `localhost:4003` afloopt. -## 3. De vraag die alles bepaalt +De README bevestigt de bedoeling: `docker compose up` in de ene terminal voor de database, en in de andere +`yarn start-quota-manager`, `yarn start-evolu-relay` en `yarn start-metrics`. Wat Trezor zélf uitrolt staat +niet in de compose maar in `.k8s/`, met Kustomize-overlays voor dev en prod. -**Is de quota-manager verplicht?** De naam en de beschrijving wijzen op Trezor's eigen gehoste, -quota-gebaseerde dienst, en voor privégebruik op één Umbrel is dat niet iets wat je wilt draaien. Maar -"bedoeld voor" is geen "optioneel": als de relay bij het starten een verbinding met de quota-manager -verwacht, moet hij mee in het pakket. +**Alle processen komen uit dezelfde codebase en dus uit dezelfde image.** Dat is de belangrijkste +pakketteerwinst van dit hele onderzoek: je hebt geen drie images nodig, maar één image met per service een +ander `command`. De `Dockerfile` is `node:24-alpine`, twee fasen, Yarn 4.12.0, met `EXPOSE 4000 4001` en +`CMD ["yarn", "start"]`. Bij dat `CMD` staat bovenstrooms zelf een commentaar dat het misschien +`start-quota-manager` of `start-evolu-relay` had moeten zijn, dus reken er niet op dat `yarn start` het +juiste doet; zet het commando expliciet. -Het verschil in uitkomst is groot genoeg om het als eerste te beantwoorden: +De poorten, met hun standaardwaarde uit `src/config.ts`: -- **niet verplicht** → een pakket van twee containers, relay plus Postgres; -- **wel verplicht** → drie containers, plus de vraag wat de quota-manager zelf nodig heeft. Als dat een - Notion-sleutel of een betaalprovider is, is dat geen pakketteerprobleem meer maar een blokkade. +| Proces | Poort | Waarvoor | +|-|-|-| +| evolu-relay | 4000 | de sync-relay, dit is wat we nodig hebben | +| quota-manager | 4001 | quota- en betaalserver | +| health | 4002 | statuscontrole | +| metrics | 4003 | Prometheus | -Waar je het antwoord vindt zonder te draaien: `.env.sample`, de compose van Trezor zelf, en de plek in de -broncode van de relay waar de quota-manager wordt aangeroepen. Waar je het antwoord bewijst: hem starten -zonder. +In `.env.sample` staan ze alle vier uitgecommentarieerd, dus de standaardwaarden gelden tenzij je ze zet. +`DATA_DIR` heeft standaard de waarde `data`. -## 4. Wat er nog helemaal niet uitgezocht is +## 3. Is de quota-manager verplicht? Ja, in de praktijk wel -Deze vier staan hier omdat ze het pakket bepalen en omdat het vooronderzoek er niets over zegt. Ze zijn -geen taak (dat zijn ze in **Proefopstelling** en **Umbrelapp**), maar een lezer moet niet denken dat de -tabel hierboven het hele plaatje is. +**Dit is de vraag waar het vooronderzoek op hoopte dat het antwoord nee zou zijn.** Dat is het niet, en de +reden is preciezer dan "de relay heeft de quota-manager nodig". -1. **Publiceert Trezor een image in een registry, of is er alleen een Dockerfile?** Dit is de vraag met de - grootste gevolgen na de quota-manager. Umbrel wil een image gepind op - `repo:versie@sha256:`, met `linux/amd64` én `linux/arm64` erin. Alleen een Dockerfile betekent - dat je zelf bouwt en zelf publiceert, en dan ben je onderhouder van een image geworden. -2. **Draait het op arm64?** De helft van de Umbrels is een Raspberry Pi. Een image die alleen amd64 kent, - valt daar om, en dat merk je pas op het apparaat. -3. **Hoe authenticeert Trezor Suite zich tegen de relay, en over welk protocol praat het?** Dit bepaalt of - de app achter de inlog van umbrelOS kan staan. Zie het masterplan **Umbrelapp**, §4b. -4. **Accepteert Trezor Suite een `http://`-adres, of eist het TLS?** Daar hangt het masterplan +De relay bevat twee controles, in `src/evoluRelay/createEvoluRelay.ts`: + +- **`isOwnerAllowed()`** vraagt `getLimitsForOwner({ ownerId })` op en staat de eigenaar alleen toe als daar + iets terugkomt dat niet leeg is; +- **`isOwnerWithinQuota()`** controleert bij schrijven of `usedBytes + requiredBytes` binnen de limiet + blijft. + +De strekking: **een eigenaar zonder rij in de limietentabel wordt geweigerd.** En de quota-manager is +precies het onderdeel dat die rijen aanmaakt. Zonder hem is de relay dus niet "open", maar dicht voor +iedereen. + +Twee dingen die dit relativeren en die het pakket bepalen: + +- **er is geen HTTP-koppeling tussen de twee.** In `src/config.ts` staat geen URL of hostnaam voor de + quota-manager, alleen een poort waarop hij zelf luistert. Ze delen de Postgres. Praktisch gevolg: de + relay hoeft de quota-manager niet te kunnen bereiken, alleen de tabel moet gevuld zijn; +- **daarmee zijn er twee wegen**, en ze zijn allebei legitiem: de quota-manager meepakketteren en er één + eigenaar in registreren, of de limietenrij één keer zelf in de database zetten. Het tweede is minder + bewegende delen, maar het is wél zelf in andermans schema schrijven, en dat breekt bij een migratie. + +**Wat hier niet is uitgezocht**, en het is de eerste vraag voor wie hier verder gaat: hoe je bij de +quota-manager een eigenaar registreert, en of daar iets extern voor nodig is. De README verwijst voor de +API-specificatie naar Notion en voor het uitproberen naar Bruno; er zit een `bruno-collection/` in de repo +die dat waarschijnlijk laat zien. + +### De onopgeloste tegenspraak rond dev en prod + +In `.env.sample` staat `SERVER_ENV="dev" # dev | prod (PROD enables evolu relay authentication)`. Dat +suggereert dat de controles in dev uit staan, en dat zou een self-hosted relay eenvoudig maken. + +**Dat is niet terug te vinden in de code die ik gelezen heb.** In `src/config.ts` wordt +`isDevServer = SERVER_ENV === 'dev'` gezet, en in `createEvoluRelay.ts` bepaalt die vlag alleen het +logniveau (`debug` tegenover `info`). `createEvoluRelayCompositionRoot.ts` hangt `getLimitsForOwner` +onvoorwaardelijk in, zonder tak voor dev. + +Dus: óf het commentaar in `.env.sample` gaat over iets anders dan deze twee controles, óf het is +achterhaald. **Ga er niet van uit dat `SERVER_ENV=dev` de deur opent**, en ga er ook niet van uit dat hij +dicht is: dit is precies het soort aanname waar een middag in gaat zitten. Het is met één keer starten te +meten en dat hoort in **Proefopstelling** fase 2. + +## 4. Er is geen publieke image, en dat is de grootste consequentie + +**Tweede correctie op het vooronderzoek**, en de duurste. Trezor bouwt wel een image, maar publiceert hem +niet ergens waar jij hem kunt halen. + +Uit `.github/workflows/build-and-push-image.yml`: de image gaat via `aws-actions/amazon-ecr-login` naar een +**Amazon ECR in eu-central-1**, met de registry-hostnaam als uitvoer van die stap en de naam als +invoerparameter. Er is geen Docker Hub en geen ghcr in dat werkproces. Onder de namespace `trezor` op +Docker Hub staat niets dat hierop lijkt. + +Wat daaruit volgt voor dit project: + +- **je bouwt en publiceert de image zelf**, of er is geen Umbrel-app. Dat is geen eenmalige handeling maar + een doorlopende verplichting: bij elke nieuwe versie van Trezor bouw je opnieuw; +- **`linux/arm64` is geen risico meer.** Datzelfde werkproces bouwt `platforms: linux/amd64,linux/arm64` + met QEMU, dus de Dockerfile is bovenstrooms bewezen op arm64. Dat was punt 2 van de oude versie van dit + document en die vraag is hiermee weg; +- **de licentie wordt nu wél een vraag.** GitHub classificeert `LICENSE.md` als "other". Zolang je alleen + zelf draait is dat academisch; zodra je een image publiceert, distribueer je hun software. Lees dat + bestand voordat er iets in een openbaar register komt. + +## 5. Wat er nog helemaal niet uitgezocht is + +Deze staan hier omdat ze het pakket bepalen en omdat er in deze ronde geen antwoord op kwam. Ze zijn geen +taak (dat zijn ze in **Proefopstelling** en **Umbrelapp**). + +1. **Kan Trezor Suite überhaupt naar een eigen sync-server wijzen, en op welk platform?** Onveranderd de + goedkoopste weerlegging van het hele project, en niets in deze repo zegt er iets over: dit is de + serverkant. +2. **Accepteert Trezor Suite een `http://`-adres, of eist het TLS?** Daar hangt het masterplan **Bereikbaarheid** aan. +3. **Hoe registreer je een eigenaar bij de quota-manager**, en heeft die daarvoor iets extern nodig? Zie + §3. Begin bij `bruno-collection/`. +4. **Wat doet `SERVER_ENV=prod` dat `dev` niet doet?** Zie de tegenspraak in §3. +5. **Wat staat er in `LICENSE.md`?** Zie §4. -## 5. Bronnen +## 6. Bronnen -Het vooronderzoek van 25-08-2026 staat ongewijzigd in -[Vooronderzoek.PLAN.md](../Plannen/Masterplannen/Archief/Vooronderzoek.PLAN.md); daar is elke regel -hierboven vandaan gekomen. De onderliggende bronnen (de repo van Trezor zelf, de release-pagina) zijn nog -niet opnieuw geraadpleegd; zet de URL erbij zodra dat gebeurt, zoals de andere referenties in deze map dat -doen. +Alles hierboven komt uit deze bestanden, geraadpleegd op 25-08-2026: + +- [`docker-compose.yaml`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/docker-compose.yaml) +- [`.env.sample`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/.env.sample) +- [`Dockerfile`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/Dockerfile) +- [`README.md`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/README.md) +- [`src/config.ts`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/src/config.ts) +- [`src/evoluRelay/createEvoluRelay.ts`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/src/evoluRelay/createEvoluRelay.ts) +- [`src/evoluRelay/createEvoluRelayCompositionRoot.ts`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/src/evoluRelay/createEvoluRelayCompositionRoot.ts) +- [`.github/workflows/build-and-push-image.yml`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/.github/workflows/build-and-push-image.yml) +- Docker Hub, namespace `trezor`: geen image die hierop lijkt + +Het oorspronkelijke vooronderzoek van 25-08-2026 staat ongewijzigd in +[Vooronderzoek.PLAN.md](../Plannen/Masterplannen/Archief/Vooronderzoek.PLAN.md). Wat daar niet meer klopt, +staat hierboven in §2 en §4.