2026-08-25 16:27:57 +02:00
|
|
|
# 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.
|
|
|
|
|
|
2026-08-27 16:28:54 +02:00
|
|
|
## [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.
|
|
|
|
|
|
2026-08-27 16:22:33 +02:00
|
|
|
## [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.
|
|
|
|
|
|
2026-08-27 16:16:31 +02:00
|
|
|
## [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.
|
|
|
|
|
|
2026-08-27 16:14:19 +02:00
|
|
|
## [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.
|
|
|
|
|
|
2026-08-27 16:04:13 +02:00
|
|
|
## [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).
|
|
|
|
|
|
2026-08-27 15:49:38 +02:00
|
|
|
## [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.
|
|
|
|
|
|
2026-08-27 15:24:24 +02:00
|
|
|
## [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.
|
|
|
|
|
|
2026-08-25 16:27:57 +02:00
|
|
|
## [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**.
|