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: