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>
674 lines
41 KiB
Markdown
674 lines
41 KiB
Markdown
# Changelog
|
|
|
|
Alle belangrijke wijzigingen aan dit project worden hier vastgelegd. Het formaat volgt
|
|
[Keep a Changelog](https://keepachangelog.com/nl/1.0.0/) en het project volgt
|
|
[Semantic Versioning](https://semver.org/lang/nl/).
|
|
|
|
Wat er nog moet gebeuren staat **niet** hier maar in de plannen; zie [CONTINUE_HERE.md](CONTINUE_HERE.md).
|
|
Een lijst met geplande features op twee plekken loopt uit elkaar, en dan is geen van beide meer te
|
|
vertrouwen.
|
|
|
|
## [0.0.25] - 2026-08-31
|
|
|
|
### Changed
|
|
|
|
- **De opfrisbeurt uit het gedeelde designsysteem** (`HomeGit/Docs/website-design-system.html`), in
|
|
dezelfde ronde doorgevoerd in Evolu Relay en in AssetApp. Drie dingen:
|
|
|
|
- **een accentgloed achter de pagina**, uit de linkerbovenhoek, met een zwakker tegenlichtje
|
|
rechtsboven. Dit is het deel dat het meeste doet, en het is ook 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.** Ze lezen daardoor als panelen
|
|
die op de pagina liggen in plaats van als vlakken die erop geschilderd zijn;
|
|
- **één hoek voor élk buitenste kader.** De kaart ging van 28 naar 20 pixels, gelijk aan het
|
|
logkader en aan AssetApp; twee radii naast elkaar lezen als een fout in plaats van als een
|
|
keuze. De geneste hoek van het logkader rekent mee.
|
|
|
|
De vijf accentkleuren van AssetApp (oranje, blauw, lila, teal, magenta) staan nu in het palet;
|
|
deze app blijft op oranje. Wisselen kan door `data-accent` op `<html>` te zetten, er is bewust
|
|
geen knop voor: dit is een statuspagina met licht/donker en verder geen bediening. 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. Zichtbaar gevolg: de badge "Running" is groen.
|
|
|
|
### Fixed
|
|
|
|
- **`prefers-reduced-motion` zette per ongeluk de hele opmaak plat.** Die wens stond samen met
|
|
`prefers-reduced-transparency` in één media-query. Windows heeft een schakelaar "Animatie-
|
|
effecten" die bij veel mensen uit staat, en die zet `reduced-motion` op `reduce`; op zo'n machine
|
|
bleef er van de nieuwe opmaak niets over. De twee zeggen ook echt iets anders: de ene gaat over
|
|
doorschijnende vlakken, de andere over beweging. Ze staan nu apart, en `reduced-motion` haalt
|
|
alleen de overgang weg.
|
|
|
|
## [0.0.24] - 2026-08-30
|
|
|
|
### Added
|
|
|
|
- **Een menu-item "About this app…", met een dialoog erachter.** De marketingtekst stond alleen in
|
|
`umbrel-app.yml` en dus alleen in de winkel, terwijl je juist ná het installeren nog eens wil kunnen
|
|
nalezen wat de app voor je doet. Vijf kopjes: waar het voor is, het certificaat, wat er niet in het midden
|
|
zit, wat de statuswidget bewijst, en welke wallets.
|
|
|
|
**Dezelfde toevoeging zit in Evolu Relay**, op verzoek van de gebruiker: het is één store en de twee
|
|
pagina's horen zich hetzelfde te gedragen.
|
|
|
|
### Changed
|
|
|
|
- **De statuswidget zei "Answering" en zegt nu "Running".** Gemeld door de gebruiker: die tegel is
|
|
onduidelijk, en die van Evolu Relay leest meteen. Dat klopt om twee redenen die los van elkaar staan.
|
|
|
|
"Answering" is een tegenwoordig deelwoord en leest dus als een handeling die bezig is, niet als een
|
|
toestand; "Checking" ernaast is er wél een, en dat maakt het erger. En de onderregel "answered in 7 ms,
|
|
from inside the app" probeerde in vier woorden een nuance te dragen waar vier woorden te weinig voor zijn:
|
|
wie het niet al weet, leest er niets uit.
|
|
|
|
De onderregel is nu "the TLS port answered in 7 ms". **De nuance is niet weggelaten maar verplaatst** naar
|
|
de nieuwe dialoog, onder een eigen kopje: de controle loopt van container naar container, dus een router
|
|
die de poort niet meer doorstuurt leest hier alsnog als Running. Haal dat kopje niet weg zonder in de
|
|
widget iets terug te zetten, want dan staat die bewering nergens meer.
|
|
|
|
## [0.0.23] - 2026-08-28
|
|
|
|
### Fixed
|
|
|
|
- **De pagina kon leeg blijven of oude waarden tonen zodra er een tweede app uit deze store bijkwam.** Hij
|
|
bereikte zijn agent via de korte containernaam `agent`, en Evolu Relay heeft er ook een op poort 8000.
|
|
Alle apps van umbrelOS delen één Docker-netwerk, dus Docker verdeelde die naam over beide containers en
|
|
ongeveer de helft van de verzoeken kwam bij de verkeerde app uit.
|
|
|
|
Beide apps wijzen nu naar de volledige naam `<app-id>_agent_1`, en die vorm is per app uniek.
|
|
`tests/test_appstore_vorm.py` toetst dit voortaan voor élke app in de store, want dit is precies het soort
|
|
fout dat stil terugkomt bij de volgende app die iemand toevoegt.
|
|
|
|
## [0.0.22] - 2026-08-27
|
|
|
|
### Changed
|
|
|
|
- **Meer diepte en contrast in het lichte thema**, overgenomen uit AssetApp op verzoek van de gebruiker.
|
|
Twee dingen samen: de kaders krijgen 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 reden is dat een zachte schaduw op wit wel diepte geeft maar geen begrenzing: waar een kader ophoudt
|
|
bleef een kwestie van kijken. De rand doet dat werk, en de schaduw is daarom strakker geworden (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.
|
|
|
|
De opgehoogde randkleur raakt meer dan de kaders: ook de scheidingslijnen tussen lijstregels, het
|
|
menupaneel, de dialoog en de invoervelden. Dat is de bedoeling en het is dezelfde stap die AssetApp al
|
|
gezet had.
|
|
|
|
**Dezelfde wijziging is doorgevoerd in het gedeelde ontwerpdocument**
|
|
`HomeGit/Docs/website-design-system.html`, dat de bron is waar deze pagina op gebaseerd is. Zonder dat
|
|
zou de volgende app die het document volgt de oude waarden weer overnemen. Let op: die map staat niet
|
|
onder versiebeheer.
|
|
|
|
## [0.0.21] - 2026-08-27
|
|
|
|
### Changed
|
|
|
|
- **Eén lettergrootte voor de waarde van alle vijf de widgets.** Er waren er drie: 1,9rem voor een getal,
|
|
1,5rem voor `unknown` en 1,3rem voor een woord. Naast elkaar op één rij viel dat op, en terecht:
|
|
`964 307` oogde belangrijker dan `Fulcrum` of `Answering` ernaast, terwijl ze even belangrijk zijn. Nu
|
|
1,55rem voor alle drie de 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 dialoog sluit met een kruisje in plaats van het woord `Close`.** Het maalteken (U+00D7) en geen
|
|
letter x, en niet rood: er gaat niets kapot van sluiten, en rood is op deze pagina voor het geval waar
|
|
je iets aan moet doen. Het `aria-label` blijft `Close`, want een schermlezer die "maalteken" voorleest
|
|
zegt niets over wat de knop doet.
|
|
|
|
## [0.0.20] - 2026-08-27
|
|
|
|
### Changed
|
|
|
|
- **De widgets op de bovenste rij van 10,5rem naar 12rem.** In 0.0.19 stond hier dat de gebruiker
|
|
uitdrukkelijk géén extra hoogte wilde; dat berustte op een tikfout in zijn bericht ("mag niet iets
|
|
groter" waar "wel" bedoeld was) en is diezelfde dag rechtgezet. De uitlijning uit 0.0.19 blijft de
|
|
eigenlijke oplossing voor de leegte; dit is er los van een kwestie van lucht tussen titel en waarde.
|
|
|
|
## [0.0.19] - 2026-08-27
|
|
|
|
### Changed
|
|
|
|
- **De onderregel van een widget staat nu onderin het vak in plaats van bovenin.** Dit was het verschil
|
|
dat de gebruiker zag: de sparkline is precies 34 pixels hoog en raakt dus de onderrand van het vak dat
|
|
`.stat-sub` reserveert, terwijl een regel tekst in datzelfde vak bovenaan begon en er leegte onder
|
|
overliet. Eén widget leek daardoor uitgelijnd en de andere vier niet. Opgelost met `display: 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.
|
|
|
|
**De hoogte van de bovenste rij is niet verder vergroot.** Dat was de andere weg naar hetzelfde beeld en
|
|
de gebruiker wilde hem uitdrukkelijk niet.
|
|
|
|
- **De chevron van `Setting up your wallet` staat links vóór de titel** in plaats van rechts aan de rand,
|
|
en kleurt mee bij hover, net als 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. Dicht wijst hij naar rechts,
|
|
open naar beneden.
|
|
|
|
## [0.0.18] - 2026-08-27
|
|
|
|
### Fixed
|
|
|
|
- **De zelfcontrole verbond met de verkeerde container.** De Status-widget meldde `Not answering` met
|
|
`[Errno 111] Connection refused` op een gateway die gewoon werkte. De fout was veelzeggend: geweigerd
|
|
betekent dat de naam wél 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 `whatsnext-electrum-gate_server_1`, dezelfde vorm die umbrelOS
|
|
van `APP_HOST` verlangt.
|
|
|
|
Dit was de eerste keer dat de widget zijn nut bewees, en meteen op zichzelf: zonder de foutmelding op de
|
|
pagina was dit een stille verkeerde meting geweest.
|
|
|
|
### Changed
|
|
|
|
Bijstellingen van de gebruiker na het bekijken van 0.0.17, allemaal op de pagina.
|
|
|
|
- **Het menu is drie kale punten met een accent bij hover**, geen knop meer. Een rand en een vlak voegden
|
|
niets toe naast een kop die verder alleen het merk bevat.
|
|
- **De eerste menuregel heet `Settings…`** en herhaalt de naam van het actieve certificaat niet meer; die
|
|
stond al als onderregel van de certificaatwidget. De dialoog heet nu ook `Settings`, want anders klik je
|
|
op het ene woord en kom je op het andere uit.
|
|
- **De dialoog opent in het midden van het scherm** in plaats van linksboven. Niet op de standaardopmaak
|
|
van de browser vertrouwen: die plaatst een `dialog` ten opzichte van zijn dichtstbijzijnde geplaatste
|
|
voorouder, en deze staat in het raster van de pagina.
|
|
- **De widget `Gateway` heet `Status`.**
|
|
- **De widgets zijn iets hoger, met hun waarde langs de onderrand.** Zonder een minimumhoogte bepaalde de
|
|
hoogste widget de rij, en dan stond de titel vrijwel tegen de waarde aan.
|
|
- **Reactietijd en blokhoogte zijn omgedraaid**, zodat de reactietijd naast de server staat waar hij over
|
|
gaat. Dat is meteen de stapelvolgorde op een smal scherm; er staat nergens een `order` in de CSS.
|
|
- **Het activiteitenlog is half zo hoog** (30vh in plaats van 60vh).
|
|
|
|
## [0.0.17] - 2026-08-27
|
|
|
|
### Changed
|
|
|
|
- **De tweede indeling: vijf kleine widgets op de bovenste rij.** Electrum-server, blokhoogte,
|
|
reactietijd, certificaat en de zelfcontrole uit 0.0.16, die daarmee eindelijk ergens te zien is.
|
|
Opgegeven door de gebruiker; ontwerp in het plan **Webinterface**, `PLAN.md` §4a2.
|
|
|
|
Dit is minder mechaniek dan er stond, niet meer. Twee koppelingen vervallen die er alleen waren omdat
|
|
kaders naast elkaar stonden: de tegels hoefden niet meer mee te rekken met de hoogte van hun buur, en
|
|
het logblok en de certificaatlijst hoefden niet meer samen te groeien en te krimpen. Dat laatste was de
|
|
hele inhoud van 0.0.13.
|
|
|
|
Vijf past niet in het twaalfkolomsraster, dus die rij heeft een eigen raster van vijf. De stappen bij
|
|
het versmallen staan expliciet in de CSS en zijn niet aan `auto-fit` overgelaten: met vijf items levert
|
|
elke stap een ongelijke laatste rij op, en dan wil je zelf bepalen welke widget alleen komt te staan.
|
|
|
|
- **Kiezen, uploaden en de certificaatdetails naar een dialoog** achter een menu rechtsboven, samen met de
|
|
licht/donker-schakelaar. Het menu toont drie punten en geen hamburger, op aanwijzing van de gebruiker:
|
|
dat is wat umbrelOS bij zijn eigen apps doet.
|
|
|
|
**De eis die dat oproept staat in de code en niet alleen in het plan.** Een verse installatie heeft geen
|
|
certificaat, en de pagina is de enige plek waar je er een kiest; dat achter een menu verstoppen is de
|
|
klem van 0.0.3 in een andere vorm. De foutmelding bovenaan blijft daarom staan en heeft nu een knop die
|
|
de dialoog opent. Het menu is de weg terug voor later, die knop is de weg erheen nu.
|
|
|
|
- **Het activiteitenlog over de volle breedte**, en `Setting up your wallet` dichtgeklapt en compacter.
|
|
Twee kopieerknoppen in plaats van één per wallet: er zijn feitelijk maar twee vormen van hetzelfde
|
|
adres, dus tien knoppen waren negen keer dezelfde handeling. Dat draait een besluit van 19-08-2026
|
|
terug, met één voorwaarde die in het plan staat: de wallets blijven gegroepeerd onder de vorm die ze
|
|
vragen, want zonder die groepering staat er wel een adres maar niet meer waar het bij hoort.
|
|
|
|
- **De licht/donker-regel toont de huidige stand en niet de handeling.** Als losse knop stond er "Light"
|
|
terwijl de pagina donker was, en dát klopte: een knop belooft wat er gebeurt als je hem indrukt. Als
|
|
menuregel met een waarde erachter leest dezelfde tekst als een bewering over hoe het nu staat, en dan is
|
|
hij fout.
|
|
|
|
### Removed
|
|
|
|
- `.col-5` en `.col-7` uit de CSS. Er is geen rij meer die in tweeën valt, en een ongebruikte klasse
|
|
nodigt uit tot een indeling die er niet meer is.
|
|
|
|
## [0.0.16] - 2026-08-27
|
|
|
|
### Added
|
|
|
|
- **De zelfcontrole: de agent verbindt met de eigen TLS-poort.** Tot nu toe keek de app of de
|
|
Electrum-server antwoordde, maar niet of hij zélf antwoordde, en dat laatste is zijn enige taak. De agent
|
|
zet nu een TLS-verbinding op naar poort 50022 van de nginx-container ernaast, maakt de handdruk af en
|
|
vergelijkt het getoonde certificaat **byte voor byte** met het gekozen bestand.
|
|
|
|
Die vergelijking is het punt, en niet de handdruk. Een certificaatwissel die nginx nooit heeft toegepast
|
|
ziet er van buiten goed uit en loopt pas bij de wallet stuk op naamverificatie; 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.
|
|
|
|
De uitkomst staat in `status.json` onder `tls.self_check`, met vier toestanden: `off` (geen certificaat
|
|
gekozen, dus geen poort), `ok`, `wrong-certificate` en `failed`. Bij een **wijziging** komt er een regel
|
|
in het activiteitenlog; elke ronde dezelfde regel zou ruis zijn.
|
|
|
|
**Wat het niet bewijst, en dat is minder dan het plan beloofde.** Er wordt na de handdruk niets
|
|
verstuurd, dus de doorverbinding naar de Electrum-server zit er niet in; die wordt apart bevraagd. En de
|
|
verbinding loopt van container naar container, dus de poortmapping naar de host en de doorstuurregel in
|
|
de router blijven ongetest.
|
|
|
|
### Changed
|
|
|
|
- **De controle draait niet elke ronde, en zijn eigen sessies worden uit het activiteitenlog gefilterd.**
|
|
Elke verbinding met poort 50022 is voor nginx een gewone sessie en levert dus een logregel op. Zonder rem
|
|
zou het log elke minuut over onszelf gaan in plaats van over wallets. Er wordt daarom hoogstens elke vijf
|
|
minuten gemeten, en de agent onthoudt wanneer hij zelf verbond om de bijbehorende regel weg te laten.
|
|
|
|
Twee eigenschappen van die filter horen erbij: hij laat **alleen** regels weg waarin niets is doorgegeven,
|
|
want een sessie met verkeer kan een storing zijn en die verbergen is erger; en hij kan een échte scan
|
|
missen die toevallig in hetzelfde venster van twee seconden eindigde.
|
|
|
|
- **Vlak na een certificaatwissel wordt er juist niet gemeten.** nginx herlaadt binnen tien seconden, dus
|
|
een meting op dat moment ziet nog het vorige certificaat en zou dat als storing melden. De meting schuift
|
|
één ronde op, en dan is het meteen de interessantste die er is.
|
|
|
|
## [0.0.15] - 2026-08-25
|
|
|
|
Deze regel is op 27-08-2026 alsnog toegevoegd; bij de verhuizing is de changelog overgeslagen.
|
|
|
|
### Changed
|
|
|
|
- **De app store is verhuisd naar `UmbrelApps`**, en `website`, `repo`, `support`, `submission` en `icon`
|
|
wijzen daarheen. De app zelf is ongewijzigd: het app-id hangt aan het store-id `whatsnext` en niet aan de
|
|
URL. Aanleiding was Evolu Relay, want umbrelOS leest per store één repo en een tweede app maakte een naam
|
|
naar deze ene app onhoudbaar.
|
|
|
|
Wat hierbij geleerd is en verder gaat dan deze release: **een geïnstalleerde app overleeft een wisseling
|
|
van store-URL niet.** umbrelOS tóónde de update wel en voerde hem niet uit, zonder foutmelding.
|
|
Deïnstalleren plus opnieuw installeren loste het op, en de prijs daarvan is de certificaatkeuze.
|
|
|
|
## [0.0.14] - 2026-08-20
|
|
|
|
### Added
|
|
|
|
- **`probe` naast `refused` in het activiteitenlog.** Aanleiding was een vraag van de gebruiker over een
|
|
regel `refused ... status 500` met nul bytes: dat is een TLS-handdruk die niet is afgemaakt, en op een
|
|
poort die in de router doorgestuurd staat vrijwel altijd een scanner. Elke scan gaf dus een rode regel die
|
|
suggereerde dat de app iets geweigerd had, terwijl er niets gebeurd was.
|
|
|
|
**Het onderscheid ligt bij de bytes, niet bij de duur of de status.** Nul in beide richtingen betekent dat
|
|
er nooit iets doorgegeven is; die tellers gaan over de doorgegeven verbinding en niet over de handdruk, wat
|
|
af te lezen was aan de sessies van de gebruiker. Een scan die tien seconden open blijft is nog steeds een
|
|
scan, en een sessie die na een halve seconde omvalt maar wél verkeer had is nog steeds een storing. Rood
|
|
blijft dus voor `refused`, en dat is nu het geval waar je iets aan moet doen.
|
|
|
|
De notitie bij een probe blijft feitelijk ("nothing exchanged, status 500") en beweert niet dat het de
|
|
handdruk was; bij status 500 is dat de bijna zekere oorzaak, en bijna is hier niet genoeg. De bytes worden
|
|
bij nul weggelaten, want "0 B from wallet" naast die notitie is dubbelop en "wallet" is dan ook het
|
|
verkeerde woord.
|
|
|
|
### Changed
|
|
|
|
- **Meer ruimte tussen de kaders**, van 1 naar 1,5rem, op verzoek van de gebruiker. De kaders hebben 1,8rem
|
|
ruimte binnenin en een radius van 28 pixels; met 1rem ertussen was de ruimte tússen twee kaders kleiner
|
|
dan die erbinnen, en dan plakken ze aan elkaar.
|
|
|
|
## [0.0.13] - 2026-08-20
|
|
|
|
### Fixed
|
|
|
|
- **De twee kaders van die rij groeien en krimpen nu samen.** Dit was de echte oorzaak van het hoogteprobleem
|
|
dat 0.0.12 alleen kleiner maakte: het logblok stond op `flex: 1 1 auto`, en met basis `auto` telt zijn
|
|
inhoud mee voor de natuurlijke hoogte van zijn kader. Een log met tien regels duwde de rij dus hoger dan
|
|
het certificaatkader nodig had, en dat kwam aan de andere kant terug als leegte onder de knop, precies de
|
|
leegte die verdween als je het uploadblok uitklapte.
|
|
|
|
Nu `flex: 1 1 0`: het logblok draagt niets bij aan die natuurlijke hoogte, het certificaatkader bepaalt de
|
|
rij, en uitklappen laat beide kaders meegroeien. Wat er niet in past scrolt in het logblok, en daar is een
|
|
log voor. De `max-height` van 620 pixels kon eruit, want de rij is nu begrensd door het kader ernaast.
|
|
|
|
**Op één kolom geldt het omgekeerde** en daar staat het log op zijn eigen hoogte, met een plafond van 60%
|
|
van het venster: er staat dan geen kader naast om de hoogte van te lenen, en een etmaal aan regels zou
|
|
anders één lange pagina worden.
|
|
|
|
## [0.0.12] - 2026-08-20
|
|
|
|
### Changed
|
|
|
|
- **Het certificaatkader en het activiteitenlog zijn minder hoog.** Gevraagd door de gebruiker. Het
|
|
mechanisme erachter is het opschrijven waard: de twee kaders staan in één rij met `align-items: stretch`,
|
|
dus het hoogste bepaalt de hoogte. Het certificaatkader is dat, en alles wat daar aan ruimte overbleef
|
|
kwam als leegte terug ónder het log ernaast. Krappere marges rond de keuzekop en de knop, minder ruimte om
|
|
het uploadblok, en de bodem van het logblok van 180 naar 150 pixels.
|
|
- **De regel over Nginx Proxy Manager is eruit.** Die stond er als bron van certificaten, terwijl die mount
|
|
nog uitgecommentarieerd in de compose staat omdat het pad niet geverifieerd is; wat er stond kón dus niet
|
|
waar zijn. De uitleg is nu één regel, en waar een certificaat vandaan komt staat toch al in de optie zelf.
|
|
|
|
## [0.0.11] - 2026-08-20
|
|
|
|
### Fixed
|
|
|
|
- **De kopieerknoppen staan op een telefoon weer op één lijn.** Regressie van 0.0.10: door het omvouwen
|
|
volgde de knop de tekst, en het ene adres is langer dan het andere. Nu `margin-left: auto` op de knop, en
|
|
bewust niet `space-between` op de rij: bij de gesplitste weergave staat er ook een notitie naast de
|
|
waarde, en die hoort daar tegenaan te blijven staan.
|
|
|
|
### Changed
|
|
|
|
- **De winkeltekst zegt nu wat er níet in het pad zit.** De gebruiker merkte op dat het vermijden van
|
|
tunneldiensten en VPN-producten bij hem juist de aanleiding voor deze opstelling is, en dat dat goed is
|
|
voor de marketing. Dat is ook het scherpere argument: een tunneldienst termineert je verkeer onderweg en
|
|
een mesh-VPN vraagt een account plus een client op elk apparaat, terwijl deze app geen van beide vraagt.
|
|
Eén alinea in `description`, met de doorgestuurde poort erbij als wat het wél vraagt. Zie
|
|
[Vergelijkbare-apps.md](Referenties/Vergelijkbare-apps.md), waar ook de Engelse formulering staat voor
|
|
hergebruik in de PR bij inlevering.
|
|
- **Het uploadblok staat nu boven de keuzelijst**, tussen de rij "Last reload" en de kop "Choose a
|
|
certificate". Voorgesteld door de gebruiker om een horizontale lijn uit te sparen: de lijstregel erboven
|
|
trekt er al een, dus het blok heeft geen eigen `border-top` meer nodig. Het is bovendien de logische
|
|
volgorde, want wat je uploadt komt in die keuzelijst terecht: eerst toevoegen, dan kiezen.
|
|
|
|
### Bevestigd
|
|
|
|
- **`0.0.10` na `0.0.9` levert een update op.** Nagekeken op de Umbrel toen de melding gewoon verscheen.
|
|
Daarmee is de aanname uit 0.0.10 bevestigd en een tekstvergelijking met groter-dan uitgesloten;
|
|
tweecijferige versiedelen zijn dus veilig. Vastgelegd in
|
|
[Umbrel-appstore-spec.md](Referenties/Umbrel-appstore-spec.md).
|
|
- **De mobiele weergave werkt**, gecontroleerd op een telefoon door de gebruiker. Daarmee is 0.0.10
|
|
geverifieerd op het enige punt dat niet te toetsen was.
|
|
|
|
## [0.0.10] - 2026-08-20
|
|
|
|
### Fixed
|
|
|
|
- **Op een telefoon liep de pagina buiten beeld.** Gemeld door de gebruiker. De directe oorzaak was
|
|
`minmax(420px, 1fr)` op de clientlijst: dat eist een track van minstens 420 pixels, ook op een scherm dat
|
|
smaller is, dus liep de hele lijst met kopieerknoppen eruit. Nu `minmax(min(420px, 100%), 1fr)`, waarmee
|
|
de track tot de schermbreedte mag krimpen.
|
|
- **De lijstregels en de logregels vouwen onder 700 pixels om.** Wat op een brede kaart rechts staat, komt
|
|
daar onder de titel te staan. Voor de logregels is dat een herziening van een eerdere keuze: die scrollen
|
|
liever dan dat ze afkappen, en dat blijft zo op een breed scherm, maar op een telefoon betekende het dat
|
|
je de bytes nooit zag. `overflow-wrap: anywhere` erbij, want `host:poort:protocol` heeft geen spatie en
|
|
kan nergens afbreken.
|
|
|
|
### Changed
|
|
|
|
- **De tegel met het aantal dagen tot het certificaat verloopt is eruit**, op verzoek van de gebruiker. De
|
|
kaart Certificate zegt hetzelfde en noemt de datum, en onder de dertig dagen staat er een melding
|
|
bovenaan de pagina. **Backend response** neemt de vrijgekomen ruimte en is nu twee kolommen breed; dat is
|
|
het enige op die rij dat met breedte iets doet, want daar hangt de sparkline in.
|
|
|
|
Over het nummer: **0.0.10 en niet 0.1.0**. Dat is alleen een risico als umbreld versies als tekst zou
|
|
vergelijken, want dan is `0.0.10` kleiner dan `0.0.9`. Elke app in de officiële store gaat ooit van `.9`
|
|
naar `.10`, dus dat zou daar overal stuklopen; de aanname is dat het een gelijkheids- of semver-vergelijking
|
|
is. Blijft de update-melding weg, dan is dít de plek om te kijken.
|
|
|
|
## [0.0.9] - 2026-08-20
|
|
|
|
### Changed
|
|
|
|
- **Alles wat de app schrijft staat onder `data/`.** `${APP_DATA_DIR}/runtime` en `.../certs` zijn
|
|
`${APP_DATA_DIR}/data/runtime` en `.../data/certs` geworden. Gevraagd door de gebruiker met het oog op
|
|
publicatie in de officiële appstore, en de packaging-documentatie van umbrel zegt het woordelijk:
|
|
gebruikersstaat, config, uploads en gegenereerde geheimen horen onder `${APP_DATA_DIR}/data/...`, met
|
|
een `.gitkeep` in de repo voor elke map die bij de eerste start moet bestaan. Die twee `.gitkeep`s staan
|
|
er nu.
|
|
|
|
**Dit vraagt opnieuw kiezen, of opnieuw installeren.** Bij een update kijkt de app niet meer in de oude
|
|
map, dus zelf geüploade certificaten en de gemaakte keuze zijn weg. Certificaten uit Zoraxy niet.
|
|
|
|
### Added
|
|
|
|
- **`backupIgnore`** in het manifest, voor `data/runtime/stream.log` en `data/runtime/status.json`. Die
|
|
twee groeien of veranderen elke minuut en zijn nergens voor nodig in een back-up. Wat er bewust **niet**
|
|
in staat is `data/runtime/config`: daar zit de certificaatkeuze, en dat is het enige in die map dat niet
|
|
opnieuw te bedenken is. Paden zijn relatief aan de app-datamap; nagekeken in `app.ts` van umbreld.
|
|
- Een toets die deze conventie vasthoudt. Bij de volgende mount die iemand toevoegt is dit precies het
|
|
detail dat je vergeet, en er gaat niets van stuk; het valt pas op bij het inleveren.
|
|
|
|
### Het manifest op orde, zonder eigen versienummer
|
|
|
|
Later diezelfde dag, en met opzet **geen** verhoging naar 0.0.10: de winkeltekst leest umbrelOS uit de
|
|
repo-kloon, dus dit is zichtbaar zonder update, en aan de app verandert niets.
|
|
|
|
- **De velden staan in de voorgeschreven volgorde.** Die is geen smaak; de packaging-documentatie van de
|
|
officiële store schrijft hem voor. Wat de spec niet noemt (`icon`, `backupIgnore`) staat nu áchter die
|
|
reeks, zodat de kop van het bestand letterlijk op orde is en er bij inlevering alleen iets weg hoeft.
|
|
`icon` staat als laatste, want dat is precies de regel die dan verdwijnt.
|
|
- **`defaultUsername` en `defaultPassword` zijn eruit.** Ze stonden er leeg in. Deze app heeft geen eigen
|
|
inlog, de app_proxy van umbrelOS zet er zijn eigen voor, en een leeg veld suggereert dat er iets te
|
|
vullen valt.
|
|
- **De release notes zijn opgeschoond, en dat was een echte fout.** Drie versies achter elkaar kwam er een
|
|
nieuwe kop bovenop terwijl de oude tekst eronder bleef staan: er stond drie keer "Earlier releases" en
|
|
twee keer dezelfde regel over 0.0.4. Nu is het één verhaal over deze versie en één regel per eerdere
|
|
versie. Een toets let erop, want niemand leest zijn eigen release notes nog een keer na.
|
|
- De beschrijving noemt nu ook dat je een eigen certificaat kunt uploaden. Dat kan sinds 0.0.7 en stond
|
|
nog niet in de winkeltekst.
|
|
|
|
## [0.0.8] - 2026-08-20
|
|
|
|
### Changed
|
|
|
|
- **De pagina draagt dezelfde tagline als de appstore.** Er stond "TLS in front of your own Electrum
|
|
server", en dat was de achterblijver van de oude naam: bij het hernoemen naar Electrum Gate op
|
|
19-08-2026 was de reden juist dat de tekst over de opbrengst gaat en niet over TLS als middel. Die
|
|
maatstaf gold nog niet voor deze regel. Beslist door de gebruiker, die het verschil opmerkte.
|
|
`tests/test_server_start_zonder_certificaat.py` houdt de twee plekken nu gelijk, want niemand die het
|
|
manifest aanpast opent daarna de pagina.
|
|
|
|
## [0.0.7] - 2026-08-20
|
|
|
|
### Added
|
|
|
|
- **Een certificaat uploaden via de pagina**, open punt 6 van het plan **Webinterface**. De bron
|
|
`Own folder` bestond al, maar `${APP_DATA_DIR}/certs` is zonder SSH niet te bereiken, dus die bron was
|
|
alleen bruikbaar voor wie de shell op durft. Dat was de helft van de reden dat hij bestaat.
|
|
|
|
Wat er onder de motorkap voor nodig was, in vier stukken:
|
|
|
|
- de mount `${APP_DATA_DIR}/certs` is bij de **agent** beschrijfbaar geworden. Bij nginx blijft hij
|
|
alleen-lezen: die hoeft er nooit iets neer te zetten;
|
|
- `GATE_UPLOAD_DIR` zegt welke map dat is. Expliciet en niet afgeleid uit `GATE_CERT_SOURCES`, want
|
|
welke bron beschrijfbaar is hoort naast de mount te staan die dat toestaat. Leeg zetten schakelt
|
|
uploaden uit;
|
|
- een eigen `location` in nginx met een limiet van 96k, want een sleutel plus keten haalt de 1k van
|
|
`/api/` ruim. Een exacte match, dus die grotere limiet geldt nergens anders;
|
|
- **de validatie, en dat is het eigenlijke werk.** Het paar gaat eerst onder een `.tmp`-naam naar de
|
|
doelmap en wordt daar door `ssl.SSLContext.load_cert_chain` geopend. Dat is dezelfde OpenSSL die nginx
|
|
straks gebruikt, dus wat hier doorkomt komt daar ook door. Zonder die controle levert een verkeerde
|
|
sleutel een nginx die niet meer herlaadt, en dat is dezelfde klasse storing als waardoor 0.0.3
|
|
helemaal niet startte. Geweigerd worden verder: rommel in plaats van PEM, een versleutelde sleutel,
|
|
een verlopen certificaat, en een certificaat zonder hostnaam.
|
|
|
|
**De bestandsnaam komt uit het certificaat zelf** en niet uit het verzoek. Dat is geen detail: een naam
|
|
die van buiten komt moet je tegen padtrucs verdedigen, een naam die je uit het certificaat leest niet.
|
|
Een hostnaam met `../` erin wordt een platte naam en kan de doelmap niet uit.
|
|
|
|
**Uploaden kiest niet.** De nieuwe komt voorgeselecteerd in de lijst en de gebruiker drukt op dezelfde
|
|
knop als altijd, zodat er precies één plek blijft waar TLS van certificaat wisselt.
|
|
|
|
### Changed
|
|
|
|
- **Het app-icoon in de kop**, groter, in plaats van het generieke schildje. De pagina valt terug op dat
|
|
schildje als de mount er niet is, want een gebroken-afbeeldingicoon in de kop is erger dan een generiek
|
|
merkje. Ook als favicon voor het tabblad.
|
|
- **De badges in de hoek van de kaders zijn eruit**, op verzoek van de gebruiker. Bij de Electrum-server
|
|
stond dezelfde meting twee keer in één kader ("answered 7 seconds ago" naast de rij "Last checked"), en
|
|
bij het activiteitenlog is het log zelf genoeg. Wat er niet verloren gaat is het slechte geval: een
|
|
backend die niet antwoordt geeft nog steeds de rode melding bovenaan.
|
|
- **"your choice" staat niet meer achter het actieve certificaat.** De gebruiker merkte op dat het altijd
|
|
zijn keuze is. Het redenveld blijft voor de gevallen die niet vanzelf spreken, zoals een app die niets
|
|
koos of er zelf een pakte.
|
|
- **Een wallet die al verbonden was levert nu ook een `connected`-regel op.** De teller vergeleek met het
|
|
vorige aantal en zweeg dus over een verbinding die er al hing voor de agent begon, en dat is precies het
|
|
geval waarin iemand op de pagina komt kijken.
|
|
- **Trezor Suite staat niet meer als "desktop only".** De gebruiker heeft het op iOS nagekeken en de
|
|
instelling zit er wel; de documentatie van Trezor sprak zichzelf tegen en had het mis. Zie
|
|
[Clients.md](Referenties/Clients.md) §3.
|
|
|
|
## [0.0.6] - 2026-08-20
|
|
|
|
### Added
|
|
|
|
- **Een verbindingsteller, dus de pagina laat zien dat er nú een wallet verbonden is.** Dit was het open
|
|
punt uit §4e van het plan **Webinterface**: nginx `stream` schrijft zijn logregel pas bij het sluiten van
|
|
een sessie, en een wallet houdt zijn verbinding uren open. Een werkende opstelling zag er daardoor uit
|
|
als een stille. Het antwoord is `/proc/net/tcp`, geteld door de achtergrondlus van de nginx-container,
|
|
want die geldt per netwerk-namespace en de agent zit in een andere. Het aantal komt via een bestand in
|
|
`status.json`, net als bij de herlaadvlag, en de agent zet er een `connected`-regel bij als er één
|
|
bijkomt. Alleen het aantal: geen adres en geen bronpoort, net als in het log_format.
|
|
|
|
### Changed
|
|
|
|
- **De certificaatkeuze is een dropdown.** Op verzoek van de gebruiker: met veertien certificaten op de
|
|
machine was de lijst met keuzerondjes het drukste onderdeel van de pagina, voor iets wat je één keer
|
|
doet. Alles staat nu in de tekst van de optie, inclusief "expired" en "in use", want opmaak binnen een
|
|
option verschilt per browser. De keuzeknop eronder blijft.
|
|
- **Een keuze overleeft een verversing.** De oude lijst zette zichzelf elke ronde terug op wat er in
|
|
gebruik was, dus een keuze die je net gemaakt had verdween binnen tien seconden.
|
|
- **`disconnected` heet nu `session ended`, en de details zeggen wat ze betekenen.** De gebruiker vroeg
|
|
wat die regel betekende, en dat was terecht: er stond een tijd, een duur en twee aantallen bytes, en
|
|
niets zei dat de tijd het einde is en de duur teruggaat. Ook "up" en "down" zijn eruit; er staat nu bij
|
|
wie er stuurt.
|
|
- **Blockstream Green heet nu Blockstream** in de clientlijst en in de winkelbeschrijving; de app is
|
|
omgedoopt. Gemeld door de gebruiker. De historische entries hieronder houden hun oude naam.
|
|
- **Vijf stukken tekst eruit**, alle vijf op verzoek van de gebruiker: de voetnoot onder het
|
|
activiteitenlog, de regel "only ever read, never requested by this app" bij Certificate, de stip voor de
|
|
badges, de zin dat apps op de Umbrel zelf deze gateway niet nodig hebben, en de uitleg dat de ene wallet
|
|
één regel wil en de andere twee velden. Wat overblijft bij de verbindingsregels is de SSL-instructie en
|
|
de waarschuwing over een afwijkende externe poort.
|
|
|
|
### Niet gebouwd, met opzet
|
|
|
|
- **De `traffic`-regel uit de §4e-tabel.** Bytes van een lopende sessie zijn binnen de container niet af
|
|
te lezen: `/proc/net/tcp` heeft geen tellers en de interfacetellers van de container zitten vol met
|
|
dashboard- en backendverkeer. Het zou dus een schatting worden die als meting leest. De sessieregel bij
|
|
het sluiten geeft de echte aantallen, en de teller geeft de aanwezigheid.
|
|
|
|
## [0.0.5] - 2026-08-20
|
|
|
|
### Changed
|
|
|
|
- **De reden bij meerdere kandidaten noemt het aantal, niet de namen.** Op de Umbrel van de gebruiker
|
|
vond de agent veertien certificaten, en de melding somde ze alle veertien op. Dat is een muur tekst die
|
|
zegt wat de keuzelijst eronder al toont, en die lijst is waar je klikt. Het aantal blijft erin, want dat
|
|
verklaart waarom de app niets koos. De weigering zelf verandert niet: bij twijfel kiest de app niet.
|
|
|
|
## [0.0.4] - 2026-08-20
|
|
|
|
### Fixed
|
|
|
|
- **De app kwam niet omhoog zonder certificaat, en dat was een klem.** Het stream-blok met
|
|
`listen 50022 ssl` stond in `nginx.conf.template` en includeerde de `cert.conf` van de agent. nginx
|
|
weigert te starten als dat certificaat er niet is, dus startte ook de web-UI niet, en de web-UI is
|
|
precies waar je een certificaat kiest. Wie geen reverse proxy draait, of twee kandidaten heeft, zag
|
|
daardoor niets en had geen weg vooruit. Aangetroffen bij de eerste echte installatie van 0.0.3; de
|
|
logregels wezen ergens anders heen, want de app_proxy meldde alleen dat de server niet te bereiken was.
|
|
|
|
De reparatie: het stream-blok staat nu in `stream.conf.template`, en het `command`-blok van de compose
|
|
legt het in `/var/lib/gate/tls/` zodra `cert.conf` bestaat. `nginx.conf` haalt die map op met een
|
|
jokerteken, en een jokerteken dat niets matcht is voor nginx geen fout. Geen certificaat betekent dus
|
|
geen poort 50022, maar wel een pagina die vertelt waarom en waaruit je kunt kiezen. Een keuze zet de
|
|
poort erbij met een herlading, zonder herstart.
|
|
- **Een mislukte herlading brak de herlaadlus af.** Die lus draait onder `set -e`, dus een certificaat dat
|
|
nginx niet aanneemt liet hem verdwijnen. Daarna werd geen enkele latere wijziging meer opgepikt, zonder
|
|
dat er iets te zien was.
|
|
|
|
### Added
|
|
|
|
- **`tests/test_server_start_zonder_certificaat.py`**, dat de bovenstaande reparatie vastlegt. Het stream-
|
|
blok "netjes" terugzetten in `nginx.conf` brengt de klem terug, en geen van de bestaande toetsen zou dat
|
|
merken.
|
|
|
|
## [0.0.3] - 2026-08-19
|
|
|
|
**De nummering begint opnieuw, onder 1.0.** Besloten door de gebruiker bij het opnieuw installeren van de
|
|
app. De oude nummers, `1.0.0` en daarna `2.0.0` en `2.0.1`, beweerden een rijpheid die er niet was: het
|
|
ging om één met de hand neergezette installatie op één machine. Het project gaat naar `1.0.0` wanneer het
|
|
dat verdiend heeft.
|
|
|
|
Twee dingen die daarbij horen, zodat dit later niet als een fout leest:
|
|
|
|
- **de oude entries blijven staan onder hun oude nummer.** Er wordt niets met terugwerkende kracht
|
|
omgenummerd; dat zou de commit-historie en deze changelog uit elkaar laten lopen. `0.0.1` en `0.0.2` zijn
|
|
dus nooit onder die naam uitgeleverd. De `3` is te lezen als "de derde opzet": met de hand neergezet, toen
|
|
een echte Umbrel-app, en nu deze;
|
|
- **een stap terug in het nummer is eenmalig en veilig**, want dit is een nieuwe app-id zonder
|
|
geïnstalleerde voorganger en de gebruiker deïnstalleert de oude app. Vanaf hier moet het nummer altijd
|
|
omhoog: de spec zegt alleen dat umbreld "de versie vergelijkt", niet of dat een ongelijkheid of een
|
|
semver-groter-dan is, dus op een omlaaggaand nummer valt niet te bouwen.
|
|
|
|
### Changed
|
|
|
|
- **De app heet Electrum Gate**, met store-id `whatsnext` en app-id `whatsnext-electrum-gate`. De oude naam
|
|
beschreef het middel (TLS) en niet wat je ermee kunt. Voor umbrelOS is dit een andere app, dus het vraagt
|
|
een verwijdering en een herinstallatie.
|
|
- **De TLS-poort is 50022** in plaats van 50002. Fulcrum bezet 50002 op de host, en met Fulcrum als backend
|
|
zou de container niet starten; dat is precies het omschakelen dat deze app moet ondersteunen. **Dit vraagt
|
|
eenmalig een andere doorstuurregel in de router.**
|
|
- **De web-UI is herbouwd** op het design-systeem, in het Engels, en haalt alles uit `status.json`. De oude
|
|
pagina zette `Online` als platte tekst in de HTML en had een verzonnen logvenster; hij loog dus precies op
|
|
het moment dat je hem raadpleegt.
|
|
- **Het domein en het certificaatpad staan niet meer in de app.** Ze zijn uit `docker-compose.yml` en
|
|
`nginx.conf.template` verdwenen: de agent bepaalt ze en schrijft een `cert.conf` die nginx includeert.
|
|
- De teksten in `umbrel-app.yml` gaan nu over de afweging tussen Tor en snelheid, en over voor welke
|
|
wallets dit nuttig is, in plaats van over TLS als middel.
|
|
|
|
### Added
|
|
|
|
- **Een `agent`-container** op `python:3-alpine` die `status.json` schrijft, de certificaatmappen scant, de
|
|
Electrum-server bevraagt en de certificaatkeuze aanneemt. Geen eigen image, dus geen bouwstap en geen
|
|
registry. Hij herlaadt nginx niet zelf, want dat zou de Docker-socket vragen; hij zet een vlagbestand neer
|
|
en de nginx-container herlaadt zichzelf.
|
|
- **Certificaatkeuze op het dashboard**, uit de mappen van Zoraxy of een eigen map. Bij meer dan één
|
|
kandidaat zonder keuze weigert de app en noemt hij de kandidaten, in plaats van te gokken: een verkeerd
|
|
certificaat geeft een verbinding die het lijkt te doen en pas bij de wallet stukloopt op naamverificatie.
|
|
- **Verbindingsregels per client** met een kopieerknop, voor Trezor Suite, Electrum, Sparrow, BlueWallet,
|
|
Nunchuk, Blockstream Green en BitBoxApp.
|
|
- **Een activiteitenlog** met een regel per sessie. Zonder client-adres en zonder bronpoort, en zonder regel
|
|
per protocolaanroep: die zitten in de versleutelde verbinding en ze uitlezen zou precies het verkeer
|
|
aantasten waarvoor deze app bestaat.
|
|
- **De eerste tests van dit project**, in `tests/`. Ze toetsen de X.509-lezer van de agent tegen `ssl` op
|
|
echte certificaten, en de guards rond de certificaatkeuze. Hoe je ze draait staat in `CLAUDE.md`.
|
|
- Documentatie ondergebracht in `Docs/` volgens de HomeGit-methode. `ARCHITECTURE.md`, `STRUCTURE.md` en
|
|
`QUICKSTART.md` uit de repo-root zijn opgegaan in `Docs/Referenties/Architectuur-huidig.md`; ze
|
|
beschreven grotendeels hetzelfde in drie versies.
|
|
- `Docs/Referenties/Umbrel-appstore-spec.md`: wat umbrelOS van een community app store verwacht, met
|
|
bronvermelding per feit. Belangrijkste vondsten: umbreld doet géén hostnaamcontrole op de store-URL,
|
|
dus een eigen Gitea kan de store zijn, mits publiek en over HTTPS; en wisselen tussen Electrs, Fulcrum
|
|
en ElectrumX vraagt geen eigen mechanisme, want die aliassen zichzelf naar `APP_ELECTRS_*`.
|
|
- `Docs/Referenties/Clients.md`: welke wallets naar een eigen Electrum-server kunnen wijzen, en wanneer Tor
|
|
de betere keuze is.
|
|
|
|
### Niet geverifieerd
|
|
|
|
Hoort erbij, want dit is een release-entry en niet een plan. **De agent heeft bij het uitbrengen van deze
|
|
versie nog nooit op de Umbrel gedraaid.** Wat er getoetst is, is de X.509-lezer en de keuze-guards, met
|
|
unittests. De certificaatscan op een echte Zoraxy-map, de Electrum-vraag, het herladen via de vlag en de
|
|
keuze via de API zijn ongetest in bedrijf.
|
|
|
|
## [2.0.1] en [2.0.0] - 2026-08-18
|
|
|
|
Uitgeleverd onder de oude naam en de oude nummering; zie de noot bij `0.0.3`. Nooit als entry in deze
|
|
changelog opgenomen, en dat wordt hier alleen vastgelegd zodat de reeks niet met een gat begint.
|
|
|
|
- **2.0.0:** herbouwd als echte Umbrel-app in een eigen community app store, met nginx en de
|
|
`stream`-module in plaats van stunnel. Daarmee vervielen de installatie bij het starten, de losse
|
|
certificaatmonitor en de mount van de Docker-socket. Fulcrum en ElectrumX werken sindsdien als backend.
|
|
- **2.0.1:** de wallet-verbinding lag er na ongeveer tien minuten uit. `proxy_timeout` staat bij nginx
|
|
standaard op tien minuten en verbrak een stille verbinding; stunnel hanteerde twaalf uur, en dat verschil
|
|
was bij de overstap over het hoofd gezien. Op 19-08-2026 bevestigd dat de verbinding de nacht doorstond.
|
|
|
|
## [1.0.0] - 2024-01-15
|
|
|
|
Eerste werkende opzet, met de hand op de Umbrel neergezet.
|
|
|
|
### Added
|
|
|
|
- SSL/TLS-terminatie via stunnel voor Electrum-verbindingen, op poort 50002.
|
|
- Certificaatmonitor die elke vijf minuten de mtime van het Zoraxy-certificaat vergelijkt en stunnel
|
|
herstart bij een wijziging.
|
|
- Read-only mount van de Zoraxy-certificaten.
|
|
- Statuspagina op nginx.
|
|
- `install.sh` en `uninstall.sh` voor installatie op de Umbrel.
|
|
- Documentatie: README, ARCHITECTURE, QUICKSTART, STRUCTURE.
|
|
|
|
---
|
|
|
|
**Noot bij de 1.0.0-entry, toegevoegd 18-08-2026.** Deze entry is ingekort. De oorspronkelijke versie
|
|
noemde onder meer "TLS 1.2+ enforcement", "geen root-rechten in containers" en "minimale
|
|
Docker-socket-rechten" als geleverde beveiligingskenmerken. Die claims houden geen stand: de
|
|
stunnel-configuratie legt geen minimale TLS-versie vast, de containers draaien als root, en een
|
|
read-only mount van de Docker-socket beperkt niets, want wie de socket kan lezen kan containers starten
|
|
en is daarmee root op de host. Ze zijn geschrapt in plaats van bijgesteld, omdat een changelog-entry
|
|
beschrijft wat er geleverd is en dit niet geleverd is. De onderliggende punten zijn opgenomen in het plan
|
|
**Appstore**.
|