Commit Graph
12 Commits
Author SHA1 Message Date
HarmenandClaude Opus 5 63f1557713 Gate 0.0.26 en Relay 0.5.3: Running weer accent, gloed uit op mobiel
Twee bijstellingen op de opfrisbeurt van vanochtend, allebei op verzoek van de gebruiker.

"Running" staat weer in de accentkleur. In Evolu Relay hing die tekst aan --pos, en die ging van
oranje naar groen omdat --pos het accent volgde en dat als merkkleur las in plaats van als
betekenis. In Electrum Gate hing hij aan niets en was hij gewoon --text-primary. Beide staan nu op
--accent-text, met een eigen .stat-val.ok: "Running" is de eigen toestand van de app en geen
positief cijfer, en --pos blijft groen voor "het staat in de plus". In Gate wordt die klasse
alleen bij state 'ok' gezet; 'off' en 'pending' zijn niet fout maar ook niet in orde en houden de
gewone tekstkleur.

Op een telefoon valt de pagina terug op de vlakke stand. De gloed is 58rem breed, ongeveer 928
pixels, dus op een telefoonscherm is het beeld smaller dan de gloed zelf en wordt het een egale
waas in plaats van een verloop. De blur gaat in dezelfde stap eruit, en dat is geen extraatje:
doorzichtigheid met niets erachter is gewoon grijs, terwijl een backdrop-filter op een telefoon wel
per frame rekenwerk kost. Rand, schaduw en randlicht blijven staan. Grens 900 pixels.

De selector is html[data-depth] en niet :root, want :root heeft dezelfde specificiteit als de
[data-theme]-blokken en zou dan alleen winnen zolang hij er in het bestand onder staat.

Alleen de pagina's, dus opnieuw geen nieuwe images.

Suite groen: 22 + 43 + 22 + 115 op de geraakte delen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 11:47:30 +02:00
HarmenandClaude Opus 5 45dd50fb0b De opfrisbeurt uit het designsysteem: Gate 0.0.25, Relay 0.5.2
Beide pagina's volgen nu HomeGit/Docs/website-design-system.html, in dezelfde ronde als AssetApp.
Drie dingen, en de volgorde is niet willekeurig:

- een accentgloed achter de pagina, uit de linkerbovenhoek. Dit is de VOORWAARDE voor de rest en
  niet de finishing touch: een backdrop-filter op een egale ondergrond levert per definitie niets
  op, dus er moet eerst iets achter de vlakken staan;
- kaarten doorschijnend, met een randlicht bovenlangs en een schaduw uit een token;
- één hoek voor elk buitenste kader. De kaart van --radius-xl naar --radius-lg, gelijk aan het
  logkader, dat zijn geneste hoek daarvan afleidt.

Het volle accentpalet van AssetApp (vijf kleuren, licht en donker) staat erin; beide apps blijven
op oranje en krijgen bewust geen knop. Om dezelfde reden staat de diepte hier vast aan, terwijl het
in AssetApp een instelling is: dit zijn statuspagina's met licht/donker en verder geen bediening.

--pos is groen geworden in plaats van oranje. Hij volgde het accent, en dat las als merkkleur in
plaats van als betekenis; zichtbaar gevolg is dat de badge "Running" nu groen is.

Meegevonden en meteen gerepareerd: 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; samen in één query bleef er van de hele opmaak niets
over. Ze staan apart, en reduced-motion haalt alleen de overgang weg.

Alleen de pagina's, dus geen nieuwe images: VERSION in tools/evolu-relay/build.sh blijft staan en
alleen de manifesten gaan omhoog.

Suite groen: 22 + 43 + 54 + 22 + 65 + 39 + 115.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 11:28:11 +02:00
HarmenandClaude Opus 5 b3b1881af2 De pagina van Evolu Relay op de lijst van de gebruiker
Negen punten uit echt gebruik met 0.4.0, alle negen gedaan. Twee ervan waren
onderzoeksvragen en die staan onderaan.

Evolu Relay 0.5.0
- Een tijdvenster van twee minuten voor nieuwe eigenaars, met een stopknop. De
  teller zit in het relay-proces en niet in de pagina: een teller in een tabblad
  dat je sluit, sluit de deur niet. policy.js kreeg learningUntil, isLearningOpen
  en expireLearning.
- decideOwner kijkt naar isLearningOpen en niet naar het veld learning. De lus die
  een verlopen venster opruimt loopt elke twee seconden, en in dat gat zou een
  onbekende alsnog binnenkomen.
- Zonder STATE_VERSION te verhogen, met een toets die dat verdedigt: een verhoging
  zou de allowlist van de draaiende installatie laten afwijzen en de deur sluiten
  voor eigenaars die er al in stonden.
- Labels op een eigenaar-id, in een eigen labels.json met de agent als enige
  schrijver. Een label zegt niets over toegang, dus de relay hoeft het niet te
  weten; het is daardoor meteen opgeslagen en werkt ook als de relay omligt.
- Geblokkeerde en geweigerde eigenaars in een kader, met een badge die zegt welke
  van de twee het is. De badge staat buiten het hover-blok, anders is dat
  onderscheid onzichtbaar tenzij je over de regel gaat.
- Maatvoering gelijk aan Electrum Gate: 1760px, hetzelfde raster, icoon van 64
  pixels, dezelfde kop, versienummer erachter. Uitleg uit de kaders, knoppen pas
  bij hover, geen voetregel.

Electrum Gate 0.0.24
- Menu-item "About this app", in beide apps.
- De statuswidget zei "Answering" met "answered in 7 ms, from inside the app" en
  zegt nu "Running" met de meting eronder. De nuance dat de controle van container
  naar container loopt is verplaatst naar een eigen kopje in die dialoog, waar er
  ruimte voor is; vier woorden waren te weinig.

Toetsen en gereedschap
- tests/test_relay_agent.py (nieuw, 65 toetsen) en tests/test_paginas_parsen.mjs
  (nieuw). Muteertests gedraaid op de beslissende regels.
- Een dollarteken-toets in test_appstore_vorm.py. Het commentaar in drie bestanden
  beweerde al dat die test bestond; nu is dat waar.
- Een toets dat er geen werkbestanden in een app-map staan. umbreld kopieert de
  hele map naar het apparaat en in de back-up.
- tools/voorbeeldpagina.mjs maakt van een *.template een pagina die je in een
  browser kunt openen. Dat vond meteen twee echte opmaakfouten.

De twee onderzoeksvragen
- Een geweigerde eigenaar komt niet in de database: isOwnerAllowed zit in de
  WebSocket-upgrade, dus het is een 401 en een gesloten socket. Het gewenste gevolg
  treedt wel op, via de client: die is local-first en levert bij toelating de hele
  geschiedenis. Blokkeren werkt daarentegen pas bij de volgende verbinding, en dat
  staat als open punt.
- De blobs zijn niet met een xpub te ontcijferen; een OwnerId komt daar niet uit.
  Met de SLIP-21-node van het apparaat kan het wel, maar die geeft volledige
  zeggenschap, dus dat hoort niet in een relay. Als plan-punt opgenomen bij de tool
  in HomeGit/Trezor.

Nog niet uitgerold: de image 0.5.0 moet gebouwd en geduwd worden. De digest staat
daarom niet in de compose, want een oude digest onder een nieuwe tag levert stil de
oude relay.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 12:26:56 +02:00
HarmenandClaude Opus 5 2b17f79181 De korte containernaam 'agent' wees naar de verkeerde app
Alle apps van umbrelOS delen een Docker-netwerk, dus een servicenaam als 'agent'
is daar niet uniek. Electrum Gate heeft er een op poort 8000 en Evolu Relay sinds
vandaag ook, en Docker verdeelde de naam netjes over allebei. Gemeten op het
apparaat: van tien verzoeken vanuit de nginx-container kwamen er vijf bij de
verkeerde app uit, met een 404 tot gevolg. Op de statuspagina zag dat eruit als
een status die wisselde tussen "running" en "agent unreachable".

Dit raakte twee apps, en de tweede is de vervelende: de pagina van Electrum Gate
proxyde ook naar http://agent:8000 en werkte alleen omdat die app tot vandaag de
enige met die naam was. Het installeren van Evolu Relay heeft die pagina dus
kapotgemaakt. Beide gaan nu naar <app-id>_agent_1, en beide manifesten gaan
omhoog, want zonder verhoging bereikt een gewijzigde template geen bestaande
installatie.

Dezelfde les stond al in de compose van Electrum Gate, over de servicenaam
'server', en die is bij het schrijven van de nginx-config genegeerd. Daarom nu een
toets erop: test_appstore_vorm controleert voor elke app dat een proxy_pass en
elke *_HOST-variabele een naam gebruiken die met het app-id begint. Muteertest
gedaan, de toets viel om op precies de korte naam.

Bijgewerkt in build.sh: VERSION daar is het etiket op de image, en `version` in
het manifest is een ander nummer dat erop vooruit mag lopen. Ze lopen uiteen zodra
er een reparatie in de app-map zit zonder dat de image wijzigt, en dat is nu het
geval.

Tests: alle vier groen (34, 54, 39 en 60 goed, 0 fout).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 11:41:58 +02:00
HarmenandClaude Opus 5 bcf88b62c9 Een schaduw op wit geeft diepte maar geen rand, en dat scheelt in het lichte thema
Overgenomen uit AssetApp op verzoek van de gebruiker: de kaders krijgen in het
lichte thema een rand naast hun schaduw, en --border en --border-mid gaan van
0,07 en 0,11 naar 0,12 en 0,18 zwart. De schaduw wordt daarom strakker, 2 en 16
pixels in plaats van 3 en 24, zodat het samen niet zwaar wordt.

Het donkere thema verandert niet. Daar staat een lichte rand op een donkere
ondergrond en die zie je hoe dan ook; dit is een probleem dat alleen op wit
bestaat.

De opgehoogde randkleur raakt meer dan de kaders: ook de scheidingslijnen tussen
lijstregels, het menupaneel, de dialoog en de invoervelden. Dat is de bedoeling.

Dezelfde wijziging staat nu in het gedeelde ontwerpdocument onder HomeGit/Docs,
want anders neemt de volgende app die dat document volgt de oude waarden weer
over. Die map staat niet onder versiebeheer, dus die wijziging zit niet in deze
commit.

Verder twee verificaties van de gebruiker verwerkt: de pagina is op een telefoon
in orde, en de uploadtest met een verkeerde sleutel is op zijn verzoek vervallen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 16:28:54 +02:00
HarmenandClaude Opus 5 dcb9b93faa Een blokhoogte oogde belangrijker dan de rest, en dat lag aan drie lettermaten
De waarde van een widget had er drie: 1,9rem voor een getal, 1,5rem voor unknown
en 1,3rem voor een woord. Elk voor zich verdedigbaar, naast elkaar op een rij
niet: 964 307 oogde zwaarder dan Fulcrum of Answering ernaast, terwijl ze even
belangrijk zijn.

Nu 1,55rem voor alle gevallen. Dat is de maat waarop Wrong certificate op een
vijfde van de breedte binnen twee regels blijft en een blokhoogte zijn gewicht
houdt. De klasse voor woorden regelt nog alleen het afbreken.

De dialoog sluit met een kruisje in plaats van het woord Close. Het maalteken en
geen letter x, kaal met een accent bij hover zoals het menu en de chevron, en
niet rood: er gaat niets kapot van sluiten. Het aria-label blijft Close, want
een schermlezer die "maalteken" voorleest zegt niets over wat de knop doet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 16:22:33 +02:00
HarmenandClaude Opus 5 3b722d2da9 Toch iets hoger: ik las een tikfout als een besluit
De widgets op de bovenste rij gaan van 10,5rem naar 12rem. In 0.0.19 stond
opgeschreven dat de gebruiker uitdrukkelijk geen extra hoogte wilde, en dat
berustte op "mag niet iets groter" waar "wel" bedoeld was.

De uitlijning uit 0.0.19 blijft de eigenlijke oplossing voor de leegte onder de
tekst; dit is daar los van, en gaat over lucht tussen titel en waarde.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 16:16:31 +02:00
HarmenandClaude Opus 5 628c20c494 Een tegel leek uitgelijnd en vier niet, en dat lag aan waar de tekst begon
De sparkline is precies even hoog als het vak dat stat-sub reserveert, dus die
raakte de onderrand. Een regel tekst in datzelfde vak begon bovenaan en liet er
leegte onder. Vandaar dat de reactietijd uitgelijnd oogde en de rest niet.

Opgelost met grid plus align-items: end, en niet met flex: dan blijft de tekst
een gewoon blok dat afbreekt zoals het hoort, ook de mono-variant met een lange
domeinnaam erin.

De hoogte van de bovenste rij is niet verder vergroot. Dat was de andere weg naar
hetzelfde beeld en die wilde de gebruiker uitdrukkelijk niet.

De chevron van het instelkader staat links voor de titel in plaats van rechts aan
de rand, en kleurt mee bij hover zoals het menu rechtsboven. Links is waar het
driehoekje van de browser ook gestaan zou hebben, en het staat bij het woord waar
het iets over zegt.

De zelfcontrole is op het apparaat bevestigd: Answering, handdruk in 10 ms.
Daarmee klopte de verklaring uit 0.0.18 en is open punt 5 helemaal rond.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 16:14:19 +02:00
HarmenandClaude Opus 5 498b0fe695 De nieuwe widget vond meteen een fout, en die zat in de widget zelf
De Status-widget meldde "Not answering" met Errno 111 op een gateway die gewoon
werkte. Die foutmelding was het bewijs: geweigerd betekent dat de naam oploste,
alleen niet naar ons. GATE_TLS_HOST stond op de servicenaam "server", en dat is
een naam die meer apps op een Umbrel gebruiken; op een gedeeld netwerk is het
dus een gok wie je krijgt. Nu de volledige containernaam, precies de vorm die
umbrelOS van APP_HOST verlangt en die twee regels hoger in dezelfde compose al
stond.

Wat dit zegt over de aanname van gisteren: er stond dat dit "dezelfde weg is die
nginx andersom gebruikt". Dat klopte voor de richting maar niet voor de naam, en
het was opgeschreven als redenering in plaats van als meting.

De rest zijn bijstellingen van de gebruiker na het bekijken van 0.0.17. Het menu
is drie kale punten met een accent bij hover in plaats van een knop, de eerste
regel heet Settings zonder de certificaatnaam erachter, de dialoog opent in het
midden in plaats van linksboven, de widgets zijn hoger met hun waarde langs de
onderrand, reactietijd en blokhoogte zijn omgedraaid zodat de reactietijd naast
de server staat waar hij over gaat, en het log is half zo hoog.

De manifest-toets ving onderweg een echte fout: bij het herschrijven van de
release notes was de sleutel releaseNotes zelf weggeknipt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 16:04:13 +02:00
HarmenandClaude Opus 5 be91125cce De tweede indeling gebouwd, en er ging meer weg dan erbij kwam
Vijf widgets op de bovenste rij, de certificaatkeuze in een dialoog achter een
puntjesmenu, het activiteitenlog vol breed, en het instelkader dichtgeklapt met
twee kopieerknoppen. Uitgeleverd als 0.0.17. De zelfcontrole uit 0.0.16 heeft
daarmee eindelijk een plek om te verschijnen.

Wat opvalt is wat er verdween. Twee mechanismen bestonden alleen omdat er kaders
naast elkaar stonden: het meerekken van de tegels met de hoogte van hun buur, en
het samen groeien en krimpen van log en certificaatkader. Dat tweede was de hele
inhoud van 0.0.13. Vijf gelijke widgets en een vol breed log hebben geen buur,
dus beide zijn weg, samen met .col-5 en .col-7.

De harde eis staat in de code en niet alleen in het plan: de foutmelding "geen
certificaat in gebruik" heeft de knop die de dialoog opent. Een verse installatie
heeft geen certificaat en de pagina is de enige plek waar je er een kiest; dat
achter een menu verstoppen zou de klem van 0.0.3 in een andere vorm zijn.

Twee dingen onderweg bijgestuurd. Het menu werd drie punten in plaats van een
hamburger, op aanwijzing van de gebruiker, want dat is wat umbrelOS bij zijn
eigen apps toont. En het ontwerp beweerde dat de certificaatlijst een lijst was,
terwijl die op 20-08 al een dropdown geworden is; dat is rechtgezet in 4a2 en de
dropdown is ongewijzigd meeverhuisd.

Niet geverifieerd: niets hiervan is in een browser gezien, op geen enkele
schermbreedte. Dat staat als taak met de gebruiker als eigenaar.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 15:49:38 +02:00
HarmenandClaude Opus 5 c8d9765cb3 De app kijkt naar zijn eigen voordeur, en meet minder dan het plan beloofde
Open punt 5 van Webinterface, goedgekeurd en gebouwd. De agent verbindt met de
eigen TLS-poort, maakt de handdruk af en vergelijkt het getoonde certificaat
byte voor byte met het gekozen bestand.

Die vergelijking blijkt waardevoller dan de handdruk. Ze vangt een
certificaatwissel die nginx nooit heeft toegepast, en dat is precies het geval
waar een controle op vertrouwen blind voor is. Er wordt daarom bewust niet tegen
de certificaatwinkel van het besturingssysteem geverifieerd: een zelfondertekend
certificaat uploaden is een ondersteunde bron en die opstelling zou dan als kapot
gemeld worden.

Twee dingen liepen anders dan het plan zei en staan nu rechtgezet in PLAN 4a2,
OPEN punt 5 en de changelog. De belofte "luisteren, certificaat en doorverbinding
in een keer" klopt voor twee van de drie: na de handdruk wordt er niets
verstuurd. Een echt verzoek zou de sessie bytes geven, en sessies met bytes
worden nooit uit het activiteitenlog gefilterd, want die kunnen een storing zijn.

En dat filteren was de tweede verrassing. Elke meting is voor nginx een gewone
sessie en levert dus een logregel op; zonder rem ging het log over onszelf in
plaats van over wallets. Er zit nu een rem van vijf minuten op, er wordt niet
gemeten vlak na een herlading omdat het vorige certificaat er dan nog staat, en
de eigen regels worden weggelaten op grond van het moment.

Tests: 22 nieuw, met de nadruk op de niet-gelukkige paden en op de rem, want dat
is wat het log bruikbaar houdt. Alle vier de beslissende regels mutatie-getest.
De changelog kreeg ook de ontbrekende 0.0.15 erbij.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 15:24:24 +02:00
HarmenandClaude Opus 5 67ed9b603b Eén app store, twee apps
umbrelOS leest per store één repo, dus twee apps in twee repo's kan niet. Deze
repo is de store en bevat vanaf nu Electrum Gate en het werk aan Evolu Relay.
Opgezet als verse repo op verzoek van de gebruiker: de historie van ElectrumTLS
en van EvoluRelay komt niet mee.

Dat heeft één gevolg dat verder gaat dan opruimen. In de historie van
ElectrumTLS staat het domein van de gebruiker en het certificaatpad, van vóór de
opschoning van 19-08. Die komt hier niet in. Zolang die repo op de Git-server
blijft staan verandert dat niets, dus het weghalen ervan is het laatste stuk van
open punt 3 van het plan Appstore, en geen bijzaak.

De store zelf hoefde niet te veranderen: store-id whatsnext, en dus blijft het
app-id whatsnext-electrum-gate. Dat hangt aan het store-id en niet aan de URL,
dus voor umbrelOS is dit dezelfde app in een andere store. Dat de store op 19-08
naar de maker genoemd werd in plaats van naar deze ene app, betaalt zich hier
uit.

Wat de documentatie betreft is dit één wortel voor beide apps, en dat was de
reden om samen te voegen en niet de prijs ervan: de appstore-spec, het pinnen
van images en de werkwijze golden al voor allebei en stonden in twee repo's naast
elkaar. De kruisverwijzing die daarvoor nodig was (Referenties/Umbrel-appstore.md
in de oude EvoluRelay-repo) is verdwenen; wat daarin stond over de plekken waar
de relay een ander geval is, staat nu als ontwerp in het masterplan Umbrelapp §4.

Botsende namen kregen een achtervoegsel met de app, en alleen die: Publicatie
werd Publicatie-Gate en Publicatie-Relay, CHANGELOG.md werd
CHANGELOG-electrum-gate.md. Proefopstelling kreeg 007, tussen de twee bestaande
nummers, zodat de bovenkant van de reeks op tier-orde blijft staan.
CONTINUE_HERE.md heeft een kolom App, maar de tiers lopen over beide apps heen:
er is één volgorde van werken.

Electrum Gate gaat naar 0.0.15, want website, repo, support, submission en icon
wijzen nu naar UmbrelApps en zonder versieverhoging rolt dat niet uit. De release
notes leggen aan de gebruiker uit dat hij de store opnieuw moet toevoegen. Of een
geïnstalleerde app een wisseling van store-URL overleeft is nog steeds niet
uitgezocht; dat blijkt bij het omzetten.

Twee dingen in de plannen van Electrum Gate waren door deze verhuizing niet meer
waar en zijn bijgewerkt: de taak "de repo hernoemen" in fase 7 is afgevinkt, en
de repo-vorm in PLAN.md §4a toonde nog de store-id electrumtls, die al sinds
fase 7 achterhaald was.

Tests: 39 goed 0 fout en 54 goed 0 fout, niets overgeslagen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 16:27:57 +02:00