From e4b0aa5df921c591cfec4b609dd29c1a448d786a Mon Sep 17 00:00:00 2001 From: Harmen Date: Thu, 10 Sep 2026 09:54:22 +0200 Subject: [PATCH] Relay 0.7.1: de twee eigenaarskaders opgeruimd 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 --- Docs/CHANGELOG-evolu-relay.md | 19 ++++ Docs/CONTINUE_HERE.md | 2 +- Docs/Plannen/Actief/008-Umbrelapp/PROGRESS.md | 17 ++++ Docs/Plannen/Actief/008-Umbrelapp/TAKEN.md | 15 ++- tools/evolu-relay/build.sh | 2 +- tools/evolu-relay/index.html | 96 ++++++++++--------- whatsnext-evolu-relay/docker-compose.yml | 6 +- whatsnext-evolu-relay/umbrel-app.yml | 17 ++-- 8 files changed, 114 insertions(+), 60 deletions(-) diff --git a/Docs/CHANGELOG-evolu-relay.md b/Docs/CHANGELOG-evolu-relay.md index 76d34b5..88c8136 100644 --- a/Docs/CHANGELOG-evolu-relay.md +++ b/Docs/CHANGELOG-evolu-relay.md @@ -19,6 +19,25 @@ De regel is: **verhoog je `VERSION`, dan verhoog je ook het manifest; andersom n > 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 diff --git a/Docs/CONTINUE_HERE.md b/Docs/CONTINUE_HERE.md index 06dcb12..9133a6f 100644 --- a/Docs/CONTINUE_HERE.md +++ b/Docs/CONTINUE_HERE.md @@ -23,7 +23,7 @@ | Plan | App | Volgende stap | Status | |-|-|-|-| -| [Umbrelapp](Plannen/Actief/008-Umbrelapp/TAKEN.md) | Relay | **0.7.0 bouwen, duwen en pinnen op de Umbrel. Eigenaar: gebruiker, en dit blokkeert twee plannen.** De compose staat op `evolu-relay:0.7.0` zónder digest, zodat een installatie hard faalt tot de image bestaat. Wat er in zit (09-09-2026, vier punten van de gebruiker): de getimede leerstand is eruit en de **wachtlijst** is de enige weg naar binnen, "Refused owners" heet "Waiting list", het adres onderaan zegt `ws://` in plaats van `http://`, en de melding bij elke klik is vervangen door knoppen die even op slot gaan. `STATE_VERSION` blijft 1, dus een bestaand `owners.json` leest door. **Alles nog ongezien op het apparaat** | 🔶 | +| [Umbrelapp](Plannen/Actief/008-Umbrelapp/TAKEN.md) | Relay | **0.7.1 bouwen, duwen en pinnen op de Umbrel. Eigenaar: gebruiker.** De compose staat op `evolu-relay:0.7.1` zónder digest, zodat een installatie hard faalt tot de image bestaat. **0.7.0 draait sinds 10-09-2026** en de wachtlijst is daar de enige weg naar binnen; 0.7.1 is wat een dag gebruiken opleverde, vier punten van de gebruiker over de twee eigenaarskaders. Eén ervan was meer dan een woordkeuze: een rij werd hoger op het moment dat je hem een naam gaf, en nu zijn alle rijen even hoog | 🔶 | | [Testclient](Plannen/Actief/003-Testclient/TAKEN.md) | Relay | **Wacht op 0.7.0 op het apparaat.** De cliënt is af en werkt: register, negen opdrachten, een bedieningsvlak op `127.0.0.1:4380` met `Start.bat` en `Start.command`, en `test` die de HTTP-status van de WebSocket-upgrade toont. De eerste proef is geslaagd: een onbekende eigenaar krijgt 401 over `wss://` via de reverse proxy, en dat stond tot dan alleen als redenering in `Upstream-evolu-relay.md` §10. De rest van fase 4 vraagt een relay die eigenaars toelaat. Uitkomst die het meeste stuurt: `@evolu/nodejs` bevat géén cliënt, dus de afhankelijkheden voor `createEvolu` worden zelf samengesteld; de valstrikken staan in `PLAN.md` §4e | 🔶 | ## B - Los oppakbaar (geen blokkade, geen vaste volgorde) diff --git a/Docs/Plannen/Actief/008-Umbrelapp/PROGRESS.md b/Docs/Plannen/Actief/008-Umbrelapp/PROGRESS.md index 248d04c..c893625 100644 --- a/Docs/Plannen/Actief/008-Umbrelapp/PROGRESS.md +++ b/Docs/Plannen/Actief/008-Umbrelapp/PROGRESS.md @@ -3,6 +3,23 @@ > 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). +## 10-09-2026 - 0.7.0 op het apparaat, en 0.7.1 met gelijke rijen + +**0.7.0 draait.** De gebruiker bouwde en duwde de image; de digest staat drie keer in de compose. Het +duwen liep eerst vast op `unauthorized: reqPackageAccess` van Gitea, en dat bleek niets met dit pakket te +maken te hebben: het is de rechtencontrole op packages. + +**Vier punten na een dag gebruiken, samen 0.7.1.** 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 mét 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. Een vaste hoogte in CSS zou hetzelfde lijken te doen, maar laat witruimte achter onder een rij +zonder label. Wat het kost: op een halve kaartbreedte wordt die onderregel afgekapt, met de volledige +waarde in de tooltip. Nagekeken in `voorbeeld/`: vijf rijen, alle vijf 68px, ook tijdens het labelen. + ## 09-09-2026 - 0.7.0: één weg naar binnen, en de melding bij elke klik weg Vier punten van de gebruiker, opgekomen tijdens het beproeven met de testcliënt. Drie ervan waren diff --git a/Docs/Plannen/Actief/008-Umbrelapp/TAKEN.md b/Docs/Plannen/Actief/008-Umbrelapp/TAKEN.md index 36645b9..db5fdc4 100644 --- a/Docs/Plannen/Actief/008-Umbrelapp/TAKEN.md +++ b/Docs/Plannen/Actief/008-Umbrelapp/TAKEN.md @@ -20,10 +20,21 @@ ## Volgende stap -- [ ] **0.7.0 bouwen, duwen en pinnen op de Umbrel. Eigenaar: gebruiker.** De compose staat op - `evolu-relay:0.7.0` **zonder digest**, zodat een installatie hard faalt tot de image bestaat in +- [ ] **0.7.1 bouwen, duwen en pinnen op de Umbrel. Eigenaar: gebruiker.** De compose staat op + `evolu-relay:0.7.1` **zonder digest**, zodat een installatie hard faalt tot de image bestaat in plaats van stil de oude te draaien. Na het duwen: de index-digest erbij, drie keer in de compose. De commando's staan in [Images-pinnen.md](../../../Referenties/Images-pinnen.md) +- [x] **0.7.1 klaargezet (10-09-2026): de twee eigenaarskaders opgeruimd.** Vier punten van de gebruiker + na een dag met 0.7.0, en één ervan is meer dan een woordkeuze: **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; + het id staat nu bij de tijden op de onderregel, afgekapt met een puntje en volledig in de tooltip. + Verder: "Accepted owners" en "Waiting list" heten "Accepted" en "Waiting", de badge "Waiting" is weg + (een geblokkeerde eigenaar is nu precies de regel mét badge) en de regel onder het adres is weg. + Nagekeken in `voorbeeld/`: alle vijf de rijen zijn 68px, ook tijdens het labelen. **Op het apparaat + nog ongezien**, want er is geen image +- [x] **0.7.0 gebouwd, geduwd en gepind (10-09-2026, gebruiker).** De digest staat drie keer in de + compose. Bij het duwen liep de gebruiker eerst op `unauthorized: reqPackageAccess`; dat is de + packages-rechtencontrole van Gitea en geen fout in dit pakket - [x] **0.7.0 klaargezet (09-09-2026): één weg naar binnen, en de melding bij elke klik weg.** Vier punten van de gebruiker, opgekomen tijdens het beproeven met de testcliënt: - de getimede leerstand is eruit; de **wachtlijst** is de enige weg naar binnen. Zijn redenering: diff --git a/tools/evolu-relay/build.sh b/tools/evolu-relay/build.sh index 06e49ec..e40bee8 100644 --- a/tools/evolu-relay/build.sh +++ b/tools/evolu-relay/build.sh @@ -42,7 +42,7 @@ set -eu # want anders rolt umbrelOS hem niet uit. Dat heeft hier een keer een dag gekost. # Sinds alles in de image zit lopen ze meestal gelijk; de regel blijft: verhoog je # VERSION, dan ook het manifest. -VERSION="0.7.0" +VERSION="0.7.1" # Het register staat er expres in en dit is geen smaakkwestie: umbreld haalt élke # image op via de Docker Engine API, dus een tag die alleen lokaal bestaat is voor diff --git a/tools/evolu-relay/index.html b/tools/evolu-relay/index.html index acee525..6b8f789 100644 --- a/tools/evolu-relay/index.html +++ b/tools/evolu-relay/index.html @@ -431,32 +431,33 @@ body { color: var(--accent); } -/* De regel onder het adres: hoe het van buiten heet. Geen kader eromheen, want - het is uitleg bij de waarde erboven en geen tweede waarde. */ -.note { - margin: 0.7rem 0 0; - font-size: 0.85rem; - line-height: 1.5; - color: var(--text-sec); -} -.note code { - font-family: var(--font-mono); - font-size: 0.95em; - color: var(--accent); -} - /* ── Lijstregels ────────────────────────────────────────────────────────── */ .list-item { display: flex; justify-content: space-between; align-items: center; gap: 1rem; padding: 0.85rem 0; border-bottom: 1px solid var(--border); } .list-item:last-child { border-bottom: none; } -.list-item-title { font-size: 0.88rem; font-weight: 500; overflow-wrap: anywhere; } +/* Elke rij is twee regels hoog, in alle lijsten, en dat wordt hier dichtgehouden + op de drie manieren waarop het alsnog kon verschuiven: een lange waarde die + afbreekt naar een derde regel (afkappen met een puntje, de volledige waarde + blijft als tooltip), een onderregel zonder inhoud (min-height reserveert de + regel), en het invoerveld tijdens labelen, dat lager is dan twee regels tekst + (min-height op owner-who). Waarom dit een eis is: de hoogte veranderde zodra je + een rij labelde. Verzoek van de gebruiker, 10-09-2026. */ +.list-item-title { + font-size: 0.88rem; font-weight: 500; line-height: 1.5; + white-space: nowrap; overflow: hidden; text-overflow: ellipsis; +} .list-item-title.mono { font-family: var(--font-mono); font-size: 0.8rem; font-weight: 400; } -.list-item-sub { font-size: 0.72rem; color: var(--text-sec); margin-top: 0.1rem; overflow-wrap: anywhere; } +.list-item-sub { + font-size: 0.72rem; color: var(--text-sec); margin-top: 0.1rem; line-height: 1.5; + min-height: 1.5em; + white-space: nowrap; overflow: hidden; text-overflow: ellipsis; +} .list-item-sub.mono { font-family: var(--font-mono); } .list-empty { font-size: 0.78rem; color: var(--text-ter); padding: 0.7rem 0; } -.owner-who { min-width: 0; } +/* 0.88 × 1.5 voor de titel, 0.72 × 1.5 plus 0.1 marge voor de onderregel. */ +.owner-who { min-width: 0; min-height: 2.5rem; } /* De badge duwt zichzelf naar rechts en de knoppen komen erachter. Zo staat de badge op elke regel op dezelfde plek, ook op een regel zonder knoppen in beeld. */ .owner-tags { display: flex; gap: 0.5rem; flex-shrink: 0; margin-left: auto; } @@ -533,7 +534,6 @@ body.is-busy .list-item button { cursor: progress; } } .badge-pos { background: var(--pos-bg); color: var(--pos); } .badge-neg { background: var(--neg-bg); color: var(--neg); } -.badge-neutral { background: var(--neutral-bg); color: var(--text-sec); } /* ── Het menu rechtsboven ───────────────────────────────────────────────── */ .menu { position: relative; flex-shrink: 0; } @@ -765,7 +765,7 @@ body.is-busy .list-item button { cursor: progress; }
-

Accepted owners

+

Accepted

@@ -782,7 +782,7 @@ body.is-busy .list-item button { cursor: progress; } heet in owners.json nog `rejected`; hernoemen zou een migratie zijn voor een woord dat niemand ziet. -->
-

Waiting list

+

Waiting

@@ -791,16 +791,11 @@ body.is-busy .list-item button { cursor: progress; } de rij bovenin is wat je nakomt. -->

Relay address

+
unknown
- -

- That address works inside your own network. Through a reverse proxy with a certificate it - becomes wss://your.domain, without a port number: the proxy - listens on 443 and forwards to this one. -

@@ -1112,12 +1107,33 @@ body.is-busy .list-item button { cursor: progress; } // Met een label staat het label bovenaan en het id eronder; zonder label is // het id de titel. Zo staat het meest zeggende altijd op de eerste regel. + // + // ALTIJD TWEE REGELS, en dat is de kern van deze opzet (verzoek gebruiker, + // 10-09-2026). Tot 0.7.0 kwam er een derde regel bij zodra er een label + // stond, want de tweede was dan het id; het gevolg was dat een rij hoger + // werd op het moment dat je hem labelde en dat de rijen in de twee lijsten + // niet meer gelijk stonden. Nu deelt het id de onderregel met de tijden. Een + // vaste hoogte in CSS zou hetzelfde lijken te doen, maar dan staat er witruimte + // onder een rij zonder label en dat leest als een weergavefout. if (entry.label) { title.className = 'list-item-title'; title.textContent = entry.label; - sub.className = 'list-item-sub mono'; - sub.textContent = shorten(entry.id); - sub.title = entry.id; + title.title = entry.label; + sub.className = 'list-item-sub'; + // Het id houdt zijn eigen letter, ook op een gedeelde regel: het is het + // enige hier dat je teken voor teken vergelijkt. + var idDeel = document.createElement('span'); + idDeel.className = 'mono'; + idDeel.textContent = shorten(entry.id); + idDeel.title = entry.id; + sub.appendChild(idDeel); + var rest = describe(entry, kind); + if (rest) { + var restDeel = document.createElement('span'); + restDeel.textContent = ' · ' + rest; + restDeel.title = describeExact(entry); + sub.appendChild(restDeel); + } } else { title.className = 'list-item-title mono'; title.textContent = shorten(entry.id); @@ -1129,16 +1145,6 @@ body.is-busy .list-item button { cursor: progress; } who.appendChild(title); who.appendChild(sub); - // Met een label is er een derde regel nodig voor de tijden, want de tweede is - // dan het id. - if (entry.label) { - var extra = document.createElement('div'); - extra.className = 'list-item-sub'; - extra.textContent = describe(entry, kind); - extra.title = describeExact(entry); - who.appendChild(extra); - } - row.appendChild(who); // De badge staat BUITEN het hover-blok, en dat is geen slordigheid maar het @@ -1146,10 +1152,14 @@ body.is-busy .list-item button { cursor: progress; } // is niet te zien wélke van de twee soorten een regel is zolang je er niet // overheen gaat: precies de informatie waarvoor de twee kaders zijn // samengevoegd. + // + // Alleen "Blocked" nog, sinds 10-09-2026 op verzoek van de gebruiker. Een + // badge "Waiting" in een kader dat "Waiting" heet zegt niets extra; het + // onderscheid dat de badge moest maken blijft staan, want een geblokkeerde + // regel is nu precies de regel mét badge. var tags = document.createElement('div'); tags.className = 'owner-tags'; if (kind === 'blocked') { tags.appendChild(badge('Blocked', 'badge-neg')); } - if (kind === 'rejected') { tags.appendChild(badge('Waiting', 'badge-neutral')); } row.appendChild(tags); var actions = document.createElement('div'); diff --git a/whatsnext-evolu-relay/docker-compose.yml b/whatsnext-evolu-relay/docker-compose.yml index e9b4a1a..96c299e 100644 --- a/whatsnext-evolu-relay/docker-compose.yml +++ b/whatsnext-evolu-relay/docker-compose.yml @@ -59,7 +59,7 @@ services: # store hoort er een multi-arch index-digest met arm64 in; zie het masterplan # Publicatie-Relay. relay: - image: sc.kamenier-hamer.nl/sysop/evolu-relay:0.7.0@sha256:10f654a8856e81ffe2cf4237d87835391839afa5622059231e49ddc338dd4fb7 + image: sc.kamenier-hamer.nl/sysop/evolu-relay:0.7.1 restart: on-failure # Als node en niet als root, zoals de image tot 0.5.6 zelf al deed met USER. # Nu de image ook nginx en de agent draagt, staat er geen USER meer in en @@ -96,7 +96,7 @@ services: # zelf leegmaakt. Twee processen die in dezelfde allowlist schrijven is een # wedloop die je een keer per jaar treft en dan niet kunt reproduceren. agent: - image: sc.kamenier-hamer.nl/sysop/evolu-relay:0.7.0@sha256:10f654a8856e81ffe2cf4237d87835391839afa5622059231e49ddc338dd4fb7 + image: sc.kamenier-hamer.nl/sysop/evolu-relay:0.7.1 restart: on-failure command: - python3 @@ -125,7 +125,7 @@ services: # nginx met de pagina, uit dezelfde image. Geen mounts: pagina, configuratie en # icoon zitten in de image, en de pagina heeft geen eigen staat. server: - image: sc.kamenier-hamer.nl/sysop/evolu-relay:0.7.0@sha256:10f654a8856e81ffe2cf4237d87835391839afa5622059231e49ddc338dd4fb7 + image: sc.kamenier-hamer.nl/sysop/evolu-relay:0.7.1 restart: on-failure command: - nginx diff --git a/whatsnext-evolu-relay/umbrel-app.yml b/whatsnext-evolu-relay/umbrel-app.yml index 8b8e896..27de616 100644 --- a/whatsnext-evolu-relay/umbrel-app.yml +++ b/whatsnext-evolu-relay/umbrel-app.yml @@ -11,7 +11,7 @@ manifestVersion: 1 id: whatsnext-evolu-relay category: files name: Evolu Relay -version: "0.7.0" +version: "0.7.1" tagline: Encrypted sync and backup for your local-first apps description: >- Local-first apps keep your data on your own device and work whether or not you have a @@ -43,17 +43,14 @@ description: >- your app at the address shown there. Away from home you will need a way in, such as Tailscale or a reverse proxy with your own domain. releaseNotes: >- - There is now one way in: the waiting list. An owner that connects for the first time is turned away and - shows up there with its owner id, and you decide whether it may stay. The timed window that let in - whoever connected within two minutes is gone; it did the same job less carefully, and both ways need - someone at this page anyway. An owner you allow now leaves the waiting list instead of staying in both - panels at once. + Tidying up the two owner panels. They are called Accepted and Waiting now, the note under the relay + address is gone, and a row on the waiting list no longer carries a "Waiting" tag: the panel it sits in + already says that, and a blocked owner is now the only row with a tag. - Two smaller things. Clicking a button no longer pushes the page down with a notice; the buttons freeze - until the change has landed, and only real problems still get a message. And the relay address now - reads ws:// instead of http://, with a line about what it becomes behind a reverse proxy: the relay - speaks WebSocket and never HTTP, so the old address could not work anywhere. + Every row is the same height as well, in both panels. A row used to grow the moment you gave it a + name, because the name pushed the owner id onto a line of its own; the id now shares the second line + with the timestamps. Everything in 0.6.0: