Vier punten van de gebruiker na een dag met 0.7.0. Drie zijn woordkeuze: "Accepted owners" en "Waiting list" heten "Accepted" en "Waiting", de badge "Waiting" is weg en de regel onder het adres is weg. De badge kon eruit zonder verlies, want het onderscheid waarvoor hij er was blijft staan: een geblokkeerde eigenaar is nu precies de regel met badge. Het vierde punt was echt werk: elke rij is nu even hoog. Een rij werd hoger op het moment dat je hem een naam gaf, want het label duwde het id naar een derde regel. Nu deelt het id de onderregel met de tijden, afgekapt met een puntje en volledig in de tooltip. Een vaste hoogte in CSS laat witruimte achter onder een rij zonder label en leest dan als een weergavefout. Nagekeken in voorbeeld/: vijf rijen, alle vijf 68px, ook tijdens het labelen. Op het apparaat nog ongezien, want er is geen image: VERSION, het manifest en de compose staan op 0.7.1 zonder digest. Suite groen: 42, 90, 36, 22, 54 en 68 goed, 0 fout. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
285 lines
18 KiB
Markdown
285 lines
18 KiB
Markdown
# Versiegeschiedenis - Evolu Relay
|
|
|
|
Nieuwste bovenaan. Elke regel hier hoort bij een `version` in
|
|
`whatsnext-evolu-relay/umbrel-app.yml`; zonder verhoging van dat nummer rolt umbrelOS een wijziging niet
|
|
uit.
|
|
|
|
**Er hoort een tweede nummer bij: `VERSION` in `tools/evolu-relay/build.sh`, het etiket op de image.** Die
|
|
twee lopen uiteen zodra er iets in de app-map wijzigt zonder dat de relay-code verandert, en dat hóórt ook
|
|
zo: een `*.template` bereikt een installatie via de update-whitelist, en daarvoor een image bouwen en duwen
|
|
is werk zonder opbrengst. Het manifest loopt dus vóór op de image.
|
|
|
|
De regel is: **verhoog je `VERSION`, dan verhoog je ook het manifest; andersom niet.**
|
|
|
|
> Hier stond op 30-08-2026 dat ze "sinds 0.5.0 gelijkgehouden worden". Dat was diezelfde dag al onwaar, want
|
|
> 0.5.1 raakt alleen de pagina. De regel hierboven is wat er bedoeld werd.
|
|
|
|
> **Deze geschiedenis is op 30-08-2026 bijgewerkt en liep tot dat moment achter:** er stond alleen 0.0.1,
|
|
> terwijl de app op 0.4.0 zat. De entries voor 0.2.0 tot en met 0.4.0 zijn met terugwerkende kracht
|
|
> geschreven uit de `releaseNotes` in het manifest en uit `PROGRESS.md` van het plan **Umbrelapp**. Ze zijn
|
|
> daarom korter dan de rest.
|
|
|
|
## 0.7.1 - 10-09-2026
|
|
|
|
**Nog niet gebouwd.** De compose staat op `evolu-relay:0.7.1` zónder digest, zodat een installatie hard
|
|
faalt tot de image bestaat in plaats van stil de oude te draaien. Bouwen, duwen en pinnen ligt bij de
|
|
gebruiker, op de Umbrel.
|
|
|
|
Vier dingen aan de twee eigenaarskaders, alle vier op verzoek van de gebruiker na een dag met 0.7.0:
|
|
|
|
- **"Accepted owners" en "Waiting list" heten "Accepted" en "Waiting".** Kortere koppen op een pagina waar
|
|
de rest van de kaders ook één woord heeft.
|
|
- **De regel onder het adres is weg.** Die vertelde sinds 0.7.0 wat het adres achter een reverse proxy
|
|
wordt; het kader is nu het adres en niets anders. Wat er over bereikbaarheid van buiten te zeggen valt,
|
|
staat in "About this app".
|
|
- **De badge "Waiting" is weg.** In een kader dat "Waiting" heet zei hij niets extra. Het onderscheid
|
|
waarvoor de badge er was, blijft: een geblokkeerde eigenaar is nu precies de regel mét badge.
|
|
- **Elke rij is even hoog, in alle lijsten.** Een rij werd hoger op het moment dat je hem een naam gaf,
|
|
want het label duwde het id naar een eigen regel; het id staat nu op de onderregel bij de tijden. Een
|
|
waarde die niet past wordt afgekapt met een puntje en staat volledig in de tooltip.
|
|
|
|
## 0.7.0 - 09-09-2026
|
|
|
|
**Gebouwd en geduwd op 10-09-2026**, door de gebruiker op de Umbrel. De compose staat op
|
|
`evolu-relay:0.7.0@sha256:10f654a8` (drie keer: relay, agent en server).
|
|
|
|
**Eén weg naar binnen: de wachtlijst.** De getimede leerstand is eruit, op voorstel van de gebruiker en met
|
|
zijn redenering: allebei de wegen vragen iemand die bij de app kan, dus het was dubbelop, en het venster was
|
|
de zwakste van de twee omdat het iederéén toeliet die er toevallig in verbond. Dat weegt zwaarder nu de
|
|
relay op een publiek wss-adres kan staan. De oorspronkelijke reden voor de leerstand was dat je je eigen
|
|
`OwnerId` nergens kon aflezen, en die verviel toen de weigerlijst dat id ging tonen.
|
|
|
|
Wat daarmee mee verdween is een verwarring die de gebruiker dezelfde dag meldde: een eigenaar die via de
|
|
leerstand binnenkwam bleef in de weigerlijst staan totdat je daar "allow" koos, terwijl hij ondertussen wél
|
|
kon verbinden, schrijven en lezen. `decideOwner` haalde een geleerde eigenaar niet van die lijst af; de
|
|
knop "allow" deed dat wel. Nu is er nog maar één pad en kan dat niet meer uiteenlopen.
|
|
|
|
**"Refused owners" heet "Waiting list".** Dat is wat het is: kandidaten die op een beslissing wachten. De
|
|
badge op zo'n regel heet "Waiting" in plaats van "Turned away", en de widget die het tijdvenster toonde telt
|
|
nu hoeveel eigenaars er wachten. Het veld in `owners.json` heet nog `rejected`; hernoemen zou een migratie
|
|
zijn voor een woord dat niemand ziet.
|
|
|
|
**Het adres onderaan zei `http://` en dat kan nergens werken:** de relay is een WebSocket-server en spreekt
|
|
nooit HTTP tegen een cliënt. Nu `ws://<host>:3852`, met een regel eronder over wat het achter een reverse
|
|
proxy wordt: `wss://<domein>` **zonder** poort, want de proxy luistert op 443. Dat is precies de fout die op
|
|
09-09-2026 een ronde kostte bij het koppelen van de testcliënt.
|
|
|
|
**De melding bij elke klik is weg.** Er verscheen bij elke knop "Sent. The relay applies changes within a
|
|
few seconds." in de balk bovenaan, en die balk staat in de gewone stroom van de pagina: alles eronder schoof
|
|
omlaag en bij het verdwijnen weer omhoog. Gemeld door de gebruiker. In plaats daarvan gaan de knoppen in de
|
|
lijsten even op slot tot de ronde de nieuwe stand heeft opgehaald. De foutmeldingen blijven wél staan: die
|
|
zeggen iets wat je nergens anders ziet.
|
|
|
|
**Bestaande installaties lezen door.** `STATE_VERSION` blijft 1 en `normalizeState` accepteert een
|
|
`owners.json` van 0.6.0 met `learning` en `learningUntil` erin; die velden worden gelezen, genegeerd en niet
|
|
teruggeschreven. Een verhoging zou het bestand laten afwijzen, en dan schuift `store.js` de allowlist van
|
|
een werkende installatie opzij en gaat de deur dicht voor eigenaars die er al in stonden.
|
|
|
|
## 0.6.0 - 08-09-2026
|
|
|
|
Gebouwd en geduwd op de Umbrel op 08-09-2026, gepind als
|
|
`sc.kamenier-hamer.nl/sysop/evolu-relay:0.6.0@sha256:4dc56b8a…08b5b54`, drie keer in de compose. De bouw
|
|
slaagde in één keer.
|
|
|
|
**Alles in één image.** Tot 0.5.6 zat alleen de relay in de eigen image en draaiden de agent en de pagina
|
|
als `*.template` op `python:3-alpine` en `nginx:alpine`. Nu zitten `agent.py`, `nginx.conf` en `index.html`
|
|
in dezelfde image als de relay, in `tools/evolu-relay/` naast `src/`. De basis blijft `node:24-slim` (om
|
|
`better-sqlite3`), met nginx en python3 uit apt erbij. Drie containers uit één image: de relay als
|
|
gebruiker `node` via de compose, de agent en nginx als root. Beslist door de gebruiker op 08-09-2026, na
|
|
dezelfde stap bij Electrum Gate; zie het plan **Eigenimage**, `PLAN.md` §8.
|
|
|
|
Wat er daardoor anders is dan alleen verplaatst:
|
|
|
|
- nginx draait als `www-data`, want Debian heeft geen gebruiker `nginx`;
|
|
- de pagina haalt de versie uit `api/status`; de agent krijgt hem als `RELAY_APP_VERSION` uit de compose.
|
|
umbreld vulde hem tot nu rechtstreeks in de pagina in;
|
|
- `icon.png` zit in de image en is daarmee updatebaar. Het blijft ook in de app-map, want het manifest
|
|
wijst ernaar;
|
|
- de app-map bevat nog `docker-compose.yml`, `umbrel-app.yml`, `icon.png` en `data/`.
|
|
|
|
## 0.5.6 - 07-09-2026
|
|
|
|
**Alleen de pagina, dus geen nieuwe image.** `VERSION` in `tools/evolu-relay/build.sh` blijft op 0.5.0.
|
|
|
|
**De eigenaars staan op volgorde van laatst gezien, meest recent bovenaan**, in beide kaders en over de
|
|
groepen heen: een blokkade van vanmorgen staat boven een afgewezen poging van vorige week. Tot nu stonden
|
|
de rijen in de volgorde van het bestand, dus van binnenkomst. Op verzoek van de gebruiker. De volgorde
|
|
schuift mee zonder herladen, want de ronde van vijf seconden bouwt de lijsten toch al opnieuw op.
|
|
|
|
"Laatst gezien" is wat het relay-proces bijhoudt: het tijdstip van de laatste **verbinding**. Een sync
|
|
over een verbinding die al openstaat verandert dat tijdstip niet; daar is een wijziging in de relay-code
|
|
voor nodig, en dus een nieuwe image.
|
|
|
|
## 0.5.5 - 04-09-2026
|
|
|
|
**Alleen de pagina, dus geen nieuwe image.** `VERSION` in `tools/evolu-relay/build.sh` blijft op 0.5.0.
|
|
|
|
**De accentgloed achter de pagina staat uit**, op verzoek van de gebruiker en gelijk aan Electrum Gate
|
|
0.0.29. Hij kwam in 0.5.2 en deed wat hij moest doen, maar dit is een pagina waar je een blik op werpt,
|
|
en een gekleurde waas over het hele venster is daar veel opsmuk voor. De rand, de schaduw, het randlicht
|
|
en de doorschijnende kleur van de vlakken blijven; alleen het licht erachter is uit.
|
|
|
|
**Het is een schakelaar geworden en geen verwijdering:** `data-glow="on"` op het html-element zet hem
|
|
terug, en dat werkt alleen samen met `data-depth="deep"`. Die eis is van de gebruiker en hij is juist: de
|
|
gloed is de onderste van de vier dieptelagen, dus hem aanzetten op een vlakke pagina legt een verloop
|
|
achter vlakken die er dekkend voor staan.
|
|
|
|
De blur gaat met de gloed mee, want een `backdrop-filter` op een egale ondergrond levert per definitie
|
|
niets op. Daarmee verviel het mobiele blok uit 0.5.3 volledig: dat viel onder 900 pixels terug op de
|
|
vlakke stand, en zette nu drie dingen om die al uit stonden. Meegevonden en gerepareerd: de selector met
|
|
twee attributen wint van de `:root` in de `prefers-reduced-transparency`-query, die daardoor de blur niet
|
|
meer uit kreeg; die query noemt de gloedselector nu letterlijk.
|
|
|
|
## 0.5.4 - 31-08-2026
|
|
|
|
**Alleen de pagina, dus geen nieuwe image.**
|
|
|
|
De statuswidget staat nu **rechts** in de bovenste rij in plaats van links, en heet **Status** in
|
|
plaats van **Relay** (keuze gebruiker). Gelijk aan Electrum Gate, en dat is de reden: de twee
|
|
pagina's zijn één app store en horen op dezelfde manier te lezen. Het is bovendien de widget die als
|
|
enige begrijpelijk is zonder buur, dus hij is de juiste om alleen op een regel te belanden als het
|
|
scherm versmalt.
|
|
|
|
De id's `relay-state` en `relay-sub` blijven zoals ze zijn: dat is nog steeds waar de waarde vandaan
|
|
komt, en hernoemen zou alleen het JavaScript raken zonder dat iemand er iets aan heeft.
|
|
|
|
## 0.5.3 - 31-08-2026
|
|
|
|
**Alleen de pagina, dus geen nieuwe image.** `VERSION` in `tools/evolu-relay/build.sh` blijft op 0.5.0.
|
|
|
|
Twee bijstellingen op 0.5.2, allebei op verzoek van de gebruiker en allebei ook in Electrum Gate:
|
|
|
|
- **"Running" staat weer in de accentkleur.** Die tekst hing aan `--pos`, en die ging in 0.5.2 van
|
|
oranje naar groen omdat hij het accent volgde en dat als merkkleur las. Nu staat hij op
|
|
`--accent-text`: "Running" is de eigen toestand van de app en geen positief cijfer. `--pos` blijft
|
|
groen en betekent "het staat in de plus", dus de twee betekenissen blijven uit elkaar.
|
|
- **Op een telefoon valt de pagina terug op de vlakke stand.** De gloed is 58rem breed, ongeveer 928
|
|
pixels; op een telefoonscherm is het beeld dus smaller dan de gloed zelf en wordt het een egale waas
|
|
in plaats van een verloop. De blur gaat mee eruit, want doorzichtigheid met niets erachter is gewoon
|
|
grijs terwijl een `backdrop-filter` op een telefoon wel per frame rekenwerk kost. Grens: 900 pixels.
|
|
|
|
## 0.5.2 - 31-08-2026
|
|
|
|
**Alleen de pagina, dus geen nieuwe image.** `VERSION` in `tools/evolu-relay/build.sh` blijft staan; het
|
|
manifest gaat naar 0.5.2. Precies het geval waar de regel bovenaan dit bestand over gaat.
|
|
|
|
De opfrisbeurt uit het gedeelde designsysteem (`HomeGit/Docs/website-design-system.html`), in dezelfde
|
|
ronde doorgevoerd in Electrum Gate en in AssetApp:
|
|
|
|
- **een accentgloed achter de pagina**, uit de linkerbovenhoek, met een zwakker tegenlichtje rechtsboven.
|
|
Dit doet het meeste werk en het is de vóórwaarde voor de rest: een `backdrop-filter` op een egale
|
|
ondergrond levert per definitie niets op, dus er moet eerst iets áchter de vlakken staan;
|
|
- **kaarten zijn doorschijnend met een randlicht en een schaduw**, zodat ze lezen als panelen die op de
|
|
pagina liggen in plaats van als vlakken die erop geschilderd zijn;
|
|
- **één hoek voor élk buitenste kader**: de kaart van 28 naar 20 pixels, gelijk aan het logkader en aan
|
|
AssetApp. De geneste hoek van dat logkader rekent mee.
|
|
|
|
De vijf accentkleuren van AssetApp staan nu in het palet; deze app blijft op oranje en heeft er bewust
|
|
geen knop voor. Om dezelfde reden staat de diepte hier vást aan, terwijl het in AssetApp een instelling
|
|
is. `--pos` is groen geworden in plaats van oranje: hij volgde het accent, en dat las als merkkleur in
|
|
plaats van als betekenis.
|
|
|
|
**Eén valkuil is meteen ingebouwd en verdient het om onthouden te worden.** `prefers-reduced-motion` en
|
|
`prefers-reduced-transparency` mogen niet in één media-query: Windows heeft een schakelaar
|
|
"Animatie-effecten" die bij veel mensen uit staat en die zet `reduced-motion` op `reduce`, waarna er van
|
|
de hele opmaak niets overbleef. Ze staan apart, en `reduced-motion` haalt alleen de overgang weg.
|
|
|
|
## 0.5.1 - 30-08-2026
|
|
|
|
**Reparatie, gemeld door de gebruiker binnen een uur na 0.5.0.** De melding bovenaan de pagina ging nooit
|
|
weg. "Sent. The relay applies changes within a few seconds." bleef staan tot je de pagina herlaadde, dus ook
|
|
lang nadat hij niet meer waar was.
|
|
|
|
De oorzaak was één ontbrekende tak: de ronde die elke vijf seconden loopt zette die melding wel áán maar
|
|
nooit uit. Nu is de melding van de ronde en niet van de klik: hij verdwijnt zodra het relay-proces de
|
|
opdracht heeft opgepakt, en blijft alleen staan zolang de opdracht nog in de postbus ligt. Dát is het geval
|
|
waarin er iets te melden valt, want normaal is dat binnen twee seconden gebeurd.
|
|
|
|
**Een weigering is de uitzondering en blijft wél staan**, tot je een volgende opdracht geeft. Die mag niet
|
|
binnen vijf seconden verdwijnen, want het is de enige uitleg van wat er misging. Hij is bovendien rood
|
|
geworden; dat was hij niet, en een geweigerde opdracht in de neutrale stijl leest als een mededeling.
|
|
|
|
Alleen `index.html.template` geraakt, dus **geen nieuwe image**: `build.sh` blijft op 0.5.0.
|
|
|
|
## 0.5.0 - 30-08-2026
|
|
|
|
**De statuspagina op de lijst van de gebruiker, na een week met 0.4.0 gewerkt te hebben.** Negen punten,
|
|
alle negen gedaan.
|
|
|
|
**Een tijdvenster van twee minuten in plaats van een schakelaar.** Openzetten, apparaat koppelen, en de deur
|
|
sluit zichzelf; vroegtijdig sluiten of de twee minuten opnieuw starten kan ook. **De teller loopt in het
|
|
relay-proces en niet in de pagina**, want een teller in een tabblad dat je sluit, sluit de deur niet.
|
|
`policy.js` heeft er `learningUntil`, `isLearningOpen` en `expireLearning` voor gekregen, zonder
|
|
`STATE_VERSION` te verhogen: een verhoging zou de allowlist van de draaiende installatie laten afwijzen.
|
|
|
|
**Labels op een eigenaar-id.** Een `OwnerId` is een reeks tekens zonder betekenis; nu kun je er een naam aan
|
|
hangen. De labels staan in een eigen `labels.json` met de agent als enige schrijver, dus ze zijn meteen
|
|
opgeslagen en labelen werkt ook als de relay omgevallen is.
|
|
|
|
**Geblokkeerde en geweigerde eigenaars in één kader**, met een badge die zegt welke van de twee het is. Wat
|
|
je ermee doet was toch hetzelfde: toelaten of vergeten.
|
|
|
|
**De pagina is gelijkgetrokken met Electrum Gate**: dezelfde breedte van 1760 pixels, hetzelfde raster,
|
|
hetzelfde icoon van 64 pixels, dezelfde kop en het versienummer erachter. Knoppen verschijnen bij hover over
|
|
een regel, de uitleggende alinea's zijn verdwenen, en de voetregel is vervangen door een menu-item "About
|
|
this app" waar die uitleg nu staat.
|
|
|
|
**Wat er aan toetsen bij kwam**, want de pagina's waren met bijna drieduizend regels ongetoetst:
|
|
`tests/test_relay_agent.py` (nieuw), `tests/test_paginas_parsen.mjs` (nieuw), een dollarteken-toets waarvan
|
|
het commentaar al beweerde dat hij bestond, en een toets dat er geen werkbestanden in een app-map staan.
|
|
Verder `tools/voorbeeldpagina.mjs`, waarmee een `*.template` in een browser te bekijken is; dat vond meteen
|
|
twee echte fouten in de nieuwe pagina.
|
|
|
|
## 0.4.0 - 28-08-2026
|
|
|
|
**Reparatie.** De statuspagina wisselde tussen werken en een foutmelding: hij bereikte zijn agent via de
|
|
korte containernaam `agent`, en Electrum Gate in deze store heeft er ook een. Ongeveer de helft van de
|
|
verzoeken kwam bij de verkeerde app uit, en het maakte de pagina van Gate mee kapot. Beide apps wijzen nu
|
|
naar `<app-id>_agent_1`.
|
|
|
|
Verder de tekst die de app aan één cliënt verbond eruit: het is een algemene Evolu-relay. En de uitleg onder
|
|
de schakelaar voor nieuwe eigenaars klopte niet, die beschreef de open stand ook als hij dicht stond.
|
|
|
|
Let op: het manifest stond hier op 0.4.0 terwijl de image 0.3.0 bleef, want er wijzigde niets in het
|
|
relay-programma.
|
|
|
|
## 0.3.0 - 28-08-2026
|
|
|
|
**De eerste versie die op de Umbrel draait en gebruikt wordt.** De eigen eigenaars-allowlist erin, met de
|
|
statuspagina achter de umbrelOS-inlog, en TLS via Zoraxy op een eigen subdomein. Trezor Suite
|
|
synchroniseert eroverheen, heen én terug; die tweede richting is gemeten met een tweede gebruikersaccount
|
|
dat met een lege database alle labels binnenkreeg.
|
|
|
|
De poorten zijn omgedraaid ten opzichte van 0.0.2: de **pagina** hangt achter de app-proxy mét de inlog, en
|
|
de **relay** publiceert zijn eigen host-poort 3852. Een sync-cliënt is geen browser met een sessiecookie en
|
|
zou achter de inlog een inlogpagina krijgen.
|
|
|
|
## 0.2.0 - 28-08-2026
|
|
|
|
**De relay is vervangen.** Tot 0.0.2 pakketteerde deze app de eigen uitrol van een leverancier, met een
|
|
quota-manager en een PostgreSQL erbij, en die kon buiten hun eigen dienst in de kern niet werken: cliënten
|
|
slaan de quota-manager over zodra je ze naar een eigen relay wijst, terwijl die relay elke eigenaar weigert
|
|
die de quota-manager nooit geregistreerd heeft.
|
|
|
|
Hiervoor in de plaats komt de relay van het Evolu-project zelf, aangeroepen uit ons eigen programma in
|
|
`tools/evolu-relay/`. Gemeten en niet aangenomen: een cliënt synchroniseerde ernaartoe en de data kwam aan.
|
|
Drie containers werden een relay plus een statuspagina, en de database met zijn wachtwoord is verdwenen.
|
|
|
|
Wat wij toevoegen zijn de twee terugroepfuncties die `createRelay` daarvoor heeft, `isOwnerAllowed` en
|
|
`isOwnerWithinQuota`. De relay zelf is niet nagebouwd en niet aangepast.
|
|
|
|
## 0.0.1 - 25-08-2026
|
|
|
|
Eerste versie, nog niet geinstalleerd.
|
|
|
|
Drie containers: de relay en de quota-manager uit dezelfde zelfgebouwde image met een ander `command`, en
|
|
een Postgres eronder. De quota-manager gaat mee omdat de relay elke eigenaar zonder limietenrij weigert.
|
|
|
|
De app-proxy staat op `PROXY_AUTH_ADD: "false"`, want Trezor Suite is geen browser met een sessiecookie.
|
|
Dat is het patroon van de eigen nostr-relay-app van Umbrel. Poort 3851.
|
|
|
|
De image komt uit `tools/evolu-relay/build.sh`, gepind op commit `c03a204` van
|
|
`trezor/trezor-suite-sync`. Trezor publiceert zelf geen image.
|
|
|
|
Nog niets van dit alles is op een Umbrel gedraaid.
|