Changeset c8e3b98 in Klonkt


Ignore:
Timestamp:
08/21/2026 07:21:09 AM (3 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
1294c36
Parents:
2fbced5
Message:

Changelog: 1.7.0 dekt nu ook de 226 commits na de bump

De sectie stond op 07-08 en beschreef alleen de toestand van toen, terwijl de
release-commit 234 commits terug ligt en er sindsdien geen enkele
changelog-commit is geweest. Uitgebreid in nl/en/de en de datum meegezet.

Wat erbij komt, kort: muziek federeert als muziek (Audio-objecten, albums,
playlist-collecties, Funkwhale-vormen), accountmigratie met alles erin
(FEP-1580), de leesweergave, gastlogin via OpenWebAuth, acht werkende
guardianship-poorten, paginering op elke collectie, en zes beveiligingsfixes
waarvan het lek in betaalde posts de zwaarste is.

Co-Authored-By: Claude Opus 5 <noreply@…>

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • CHANGELOG.de.md

    r2fbced5 rc8e3b98  
    66## [Unreleased]
    77
    8 ## [1.7.0] · 2026-08-07
    9 
    10 ### Hinzugefügt
     8## [1.7.0] · 2026-08-21
     9
     10### Hinzugefügt
     11- **Deine Musik reist als Musik, nicht als Verweis darauf.** Ein Track ging als
     12  Notiz mit angehängter Datei über die Leitung, ein fremder Server sah also Text
     13  mit Anhang und nichts, was sagte: „das ist eine Veröffentlichung dieser
     14  Künstlerin oder dieses Künstlers“. Tracks sind jetzt vollwertige Audio-Objekte,
     15  ein Album ist ein eigenes Objekt auf der Leitung, und der Outbox trägt die
     16  Diskografie mit. Playlists föderieren als ActivityPub-Sammlungen und sind als
     17  solche auffindbar. Die Formen folgen dem, was Funkwhale bereits spricht, damit
     18  eine Klonkt-Veröffentlichung in einer Funkwhale-Bibliothek landet, statt
     19  verworfen zu werden.
     20- **Der Beitrag ist die Veröffentlichung.** Einzelne Tracks in einem Beitrag
     21  werden zu einer Sammlung, Veröffentlichungsdatum und MusicBrainz-Release-ID
     22  reisen mit, und die Hashtags werden aus dem Rohtext gelesen statt aus der
     23  gesetzten Fassung — deshalb kamen sie vorher als Unsinn an, oder gar nicht.
     24- **Beanspruche dich selbst in MusicBrainz.** Unter Verwaltung → Audio kannst du
     25  dich suchen und bestätigen, dass du das bist. Die Verknüpfung geht als
     26  `schema:sameAs` auf die Leitung, sodass andere Server dein Klonkt mit der
     27  Künstlerin oder dem Künstler verbinden können, die oder der du anderswo längst
     28  bist.
     29- **Die ganze Seite als Musikkanal.** `/tracks.xml` veröffentlicht alles, was du
     30  herausgebracht hast, als einen Feed — für Player, die RSS sprechen und kein
     31  ActivityPub.
     32- **Zieh mit deinem Konto um und nimm alles mit (FEP-1580).** Deine Beiträge,
     33  deine Audios, die Cover, die Playlists und die GUIDs ziehen mit, deine
     34  Folgeliste reist als CSV zum Hochladen oder Einfügen, und die Guardianship zieht
     35  vor dem Folgen um — in der anderen Reihenfolge stand ein Ward kurz ohne
     36  Aufsicht da. Ein umgezogenes Konto verriegelt die ausgehende Seite, damit von
     37  einer Adresse, die du nicht mehr nutzt, nichts Neues mehr abgeht. Das steht
     38  jetzt auf einer Seite, in Schritten, statt verstreut.
     39- **Eine Leseansicht, neben Zeitleiste und Raster.** Ein Beitrag füllt den
     40  Bildschirm, die Nachbarn stehen links und rechts bereit, und das Scrollen
     41  rastet am oberen Rand des nächsten Beitrags ein. Jede Seite entscheidet selbst:
     42  Lesen, Zeitleiste, oder Zeitleiste am Rechner und Lesen am Telefon.
     43- **Gäste melden sich mit dem Konto an, das sie schon haben (OpenWebAuth).** Ein
     44  Fan meldet sich über sein eigenes Klonkt an und wird hier Follower, nicht noch
     45  ein Kontoinhaber mit noch einem Passwort. Zwei Klonkts können einander
     46  anmelden, das funktioniert also in beide Richtungen.
     47- **Acht Guardianship-Tore, die wirklich schalten.** Das Torpanel ist ein
     48  Cockpit: jedes Tor sichtbar, jeder Chip trägt seinen eigenen Stand, und die
     49  Apps wissen vorab, was zu ist. Antworten ist ein eigenes Tor, Folgeanfragen
     50  werden bei mehreren Guardians per Mehrheit entschieden, ein Ward kann selbst
     51  eine Frage stellen, und ein Logbuch bewahrt, warum eine Entscheidung fiel.
     52- **Follower zuerst genehmigen, wenn du magst.** Eine Folgeanfrage wartet auf
     53  dein Ja, und bis dahin sieht die anfragende Person nichts von deinen Beiträgen.
     54- **Jede Sammlung paginiert.** Der Outbox liefert jetzt `first` und `last` und
     55  blättert wirklich durch seine Seiten. Funkwhale wies ihn ohne diese beiden
     56  rundweg ab — eine Sammlung ohne Paginierung war also kein Schönheitsfehler,
     57  sondern eine verschlossene Tür.
     58- **Gespräche wissen, was du gelesen hast.** Ungelesen zählt pro Gespräch, eine
     59  Lesung ist ein Ereignis statt einer Vermutung, und eine wartende Lesung
     60  antwortet mit der Differenz — kein Abholen einer ganzen Liste mehr, um eine
     61  neue Zeile zu finden.
     62- **Apple-Music- und YouTube-Playlists betten sauber ein**, mit derselben
     63  Auswertung wie im Hub und einer Höhe, die zu dem passt, was du tatsächlich
     64  eingebettet hast.
    1165- **Nachrichten ist eine einzige Gesprächsansicht.** Nachrichten, Gespräche und
    1266  Gesendet waren drei getrennte Filter, wodurch ein Austausch auseinanderfiel:
     
    3690
    3791### Behoben
     92- **Der Verlauf unter einem fremden Beitrag wird über deinen eigenen Server
     93  geholt und nie gespeichert.** Antworten, Like- und Boost-Status und die
     94  FEP-9098-Emoji kommen jetzt mit, und die nächste Seite wird ebenfalls gelesen —
     95  vorher brach ein langer Verlauf auf halber Strecke ab.
     96- **Die Ratenbegrenzung zählte die ganze Seite statt der aufrufenden Stelle**,
     97  sodass eine viel besuchte Seite allen 429er gab. Dazu gehört: ob du einem Proxy
     98  traust, hängt davon ab, wo du läufst, nicht davon, ob du in Entwicklung oder
     99  Produktion bist.
     100- **Eine mitlaufende Uhr in der Antwort machte aus dem langen Poll eine
     101  Schleife.** Die Antwort änderte sich jede Sekunde, also wartete er nie — er kam
     102  nur immer wieder zurück.
     103- **Der Editor übersteht einen Seitenwechsel.** An Elemente gebundene Module
     104  starten bei jeder Navigation neu, die Bearbeitungsseite lädt ihren Editor nach
     105  einem Zurück also wieder, und Speichern ohne Modul löscht nicht mehr, was du
     106  geschrieben hattest.
     107- **Ein Slug ist ein lokaler Schlüssel, kein Name auf der Leitung.** Halbe Namen,
     108  fehlende Namen und drei Schreibweisen desselben Namens kamen alle daher, dass
     109  das eine für das andere gehalten wurde.
     110- **Der Zirkel fiel über ein Medienfeld, das keine Liste war**, und riss dann die
     111  ganze Seite mit, statt nur diesen einen Beitrag.
    38112- **Menschen auf datenschutzstrengen Servern können dir wieder folgen.** Manche
    39113  Server geben den öffentlichen Schlüssel eines Kontos nur an eine signierte
     
    65139
    66140### Sicherheit
     141- **Bezahlte Beiträge gaben ihren vollen Inhalt über den Outbox und den
     142  Follower-Backfill preis.** Die Schwärzung selbst funktionierte; die Abfragen
     143  reichten ihr eine Zeile ohne die Spalte `paid`, also las das Tor `undefined`,
     144  ließ alles durch und sagte nichts. Beide Abfragen holen jetzt, worüber sie
     145  entscheiden, und ein Test bewacht die Art des Fehlers statt dieses einen Falls.
     146- **Fan-only-Beiträge gingen mit einem öffentlichen Etikett hinaus.** Sie waren
     147  richtig adressiert, aber falsch beschrieben — und so einen Widerspruch löst ein
     148  fremder Server genau in die falsche Richtung auf.
     149- **Ein Leck zwischen Seiten im Tracker-Export.** Eine Seite kam über den
     150  Exporter an die Zeilen einer anderen.
     151- **Das Playlist-Tor öffnet jetzt nur noch Dateien der Seite selbst.**
     152- **Ein Schlüssel ist an den Akteur gebunden, für den er spricht.** Eine Signatur
     153  wird nur akzeptiert, wenn Schlüssel, Eigentümer und Akteur übereinstimmen;
     154  vorher konnte ein Schlüssel für jemanden bürgen, zu dem er keine Beziehung
     155  hatte.
     156- **OpenWebAuth entpackt PKCS#1 v1.5 selbst**, ohne frühen Ausstieg und mit einer
     157  Obergrenze für Versuche. Node hat den Padding-Modus, der das erledigte,
     158  entfernt, weil er über Timing leckt (CVE-2023-46809, der Marvin-Angriff); es
     159  von Hand zu tun hält den Pfad gleich lang und schließt das Orakel, statt es
     160  wieder zu öffnen.
    67161
    68162- **Aktualisierte Komponenten schließen sieben Sicherheitshinweise.** Der
  • CHANGELOG.md

    r2fbced5 rc8e3b98  
    66## [Unreleased]
    77
    8 ## [1.7.0] · 2026-08-07
    9 
    10 ### Added
     8## [1.7.0] · 2026-08-21
     9
     10### Added
     11- **Your music travels as music, not as a link to it.** A track used to federate
     12  as a note with a file hanging off it, so a remote server saw a text with an
     13  attachment and nothing that said "this is a release by this artist". Tracks are
     14  now first-class Audio objects, an album is its own object on the wire, and the
     15  outbox carries the discography. Playlists federate as ActivityPub collections
     16  and are discoverable as such. The shapes follow what Funkwhale already speaks,
     17  so a Klonkt release lands in a Funkwhale library instead of being dropped.
     18- **A post is the release.** Loose tracks in one post are gathered into a
     19  collection, the release date and the MusicBrainz release id ride along, and the
     20  hashtags are read from the raw text rather than the rendered version — which is
     21  why they used to arrive as nonsense, or not at all.
     22- **Claim yourself in MusicBrainz.** Under Admin → Audio you can look yourself up
     23  and confirm "this is me". The link goes on the wire as `schema:sameAs`, so
     24  other servers can tie your Klonkt to the artist you already are elsewhere.
     25- **The whole site as a music channel.** `/tracks.xml` publishes everything you
     26  released as one feed, for players that speak RSS rather than ActivityPub.
     27- **Take your account somewhere else, and take everything with you (FEP-1580).**
     28  Your posts, your audio, the covers, the playlists and the GUIDs all move, your
     29  following list travels as a CSV you can upload or paste, and the guardianship
     30  moves before the follow does — the other order left a ward briefly unwatched.
     31  A moved account locks on the outgoing side, so nothing new leaves an address
     32  you no longer use. It is one page now, in steps, instead of scattered options.
     33- **A reading view, next to Timeline and Grid.** One post fills the screen, the
     34  neighbours stand ready on either side, and scrolling snaps to the top of the
     35  next post. Each site chooses for itself: reading, timeline, or timeline on
     36  desktop with reading on a phone.
     37- **Guests can sign in with the account they already have (OpenWebAuth).** A fan
     38  logs in through their own Klonkt and becomes a follower here, not another
     39  account holder with another password. Two Klonkts can introduce each other, so
     40  this works in both directions.
     41- **Eight guardianship gates that actually switch.** The gate panel is a cockpit:
     42  every gate visible, each chip carrying its own state, and the apps are told
     43  what is gated before they try. Replying is its own gate, follow requests are
     44  decided by majority when there are several guardians, a ward can raise a
     45  question itself, and a logbook keeps the reason a decision was made.
     46- **Approve followers first, if you want to.** A follow request waits for your
     47  yes, and until then the requester sees none of your posts.
     48- **Every collection paginates.** The outbox now serves `first` and `last` and
     49  really walks its pages. Funkwhale refused it outright without them, so an
     50  unpaginated collection was not a cosmetic issue but a closed door.
     51- **Conversations know what you have read.** Unread is counted per conversation,
     52  a read is an event rather than a guess, and a waiting read answers with the
     53  difference — no more polling for a whole list to find one new line.
     54- **Apple Music and YouTube playlists embed properly**, with the same parsing the
     55  hub uses and a height that matches what you actually embedded.
    1156- **Messages is one conversation view.** Messages, Conversations and Sent were
    1257  three separate filters, so a single exchange fell apart: what you sent sat
     
    3277
    3378### Fixed
     79- **The thread under a remote post is fetched through your own server and never
     80  stored.** Replies, like and boost status and the FEP-9098 emoji now come along,
     81  and the next page is read too — before, a long thread stopped halfway.
     82- **The rate limiter counted the whole site instead of the caller**, so a busy
     83  site handed out 429s to everyone. Related: whether to trust a proxy belongs to
     84  where you run, not to whether you are in development or production.
     85- **A live clock in the response turned the long poll into a loop.** The answer
     86  changed every second, so it never waited — it just kept coming back.
     87- **The editor survives a page change.** Modules wired to elements restart on
     88  every navigation, so the edit page loads its editor again after a back button,
     89  and saving without a module no longer wiped what you wrote.
     90- **A slug is a local key, not a name on the wire.** Half names, missing names
     91  and three spellings of the same name all came from treating one as the other.
     92- **The circle fell over on a media field that was not a list**, which took the
     93  whole page with it rather than the one post.
    3494- **People on privacy-strict servers can follow you again.** Some servers only
    3595  hand out an account's public key to a signed request. Klonkt asked without
     
    58118
    59119### Security
     120- **Paid posts leaked their full content through the outbox and the follower
     121  backfill.** The redaction itself worked; the queries handed it a row without
     122  the `paid` column, so the gate read `undefined`, waved everything through and
     123  said nothing. Both queries now select what they decide on, and a test guards
     124  the class of mistake rather than this one instance of it.
     125- **Fan-only posts went out with a public label.** They were addressed correctly
     126  but described as public, which is exactly the sort of contradiction a remote
     127  server resolves in the wrong direction.
     128- **A cross-tenant leak in the tracker export.** One site could reach another
     129  site's rows through the exporter.
     130- **The playlist gate now opens only files that belong to the site itself.**
     131- **A key is bound to the actor it speaks for.** A signature is only accepted
     132  when the key, its owner and the actor agree; before, a key could vouch for
     133  someone it had no relationship with.
     134- **OpenWebAuth unpacks PKCS#1 v1.5 itself**, without an early exit and with a
     135  cap on attempts. Node removed the padding mode that used to do this because it
     136  leaks timing (CVE-2023-46809, the Marvin attack); doing it by hand keeps the
     137  path constant-time and closes the oracle rather than reopening it.
    60138
    61139- **Updated components close seven security advisories.** The heaviest one sat
  • CHANGELOG.nl.md

    r2fbced5 rc8e3b98  
    66## [Unreleased]
    77
    8 ## [1.7.0] · 2026-08-07
    9 
    10 ### Toegevoegd
     8## [1.7.0] · 2026-08-21
     9
     10### Toegevoegd
     11- **Je muziek reist als muziek, niet als een verwijzing ernaartoe.** Een track
     12  ging de draad op als een bericht met een bestand eraan, dus een andere server
     13  zag tekst met een bijlage en niets wat zei "dit is een uitgave van deze
     14  artiest". Tracks zijn nu volwaardige Audio-objecten, een album is een eigen
     15  object op de draad, en de outbox draagt de discografie mee. Playlists federeren
     16  als ActivityPub-collecties en zijn als zodanig vindbaar. De vormen volgen wat
     17  Funkwhale al spreekt, zodat een Klonkt-uitgave in een Funkwhale-bibliotheek
     18  belandt in plaats van te worden weggegooid.
     19- **De post is de uitgave.** Losse tracks in één post worden een collectie, de
     20  uitgavedatum en het MusicBrainz release-id gaan mee, en de hashtags worden uit
     21  de ruwe tekst gelezen in plaats van uit de opgemaakte versie — daardoor kwamen
     22  ze eerder als onzin binnen, of helemaal niet.
     23- **Claim jezelf in MusicBrainz.** Bij Beheer → Audio kun je jezelf opzoeken en
     24  bevestigen dat jij dat bent. De koppeling gaat als `schema:sameAs` de draad op,
     25  zodat andere servers je Klonkt kunnen verbinden met de artiest die je elders al
     26  bent.
     27- **De hele site als muziekkanaal.** `/tracks.xml` publiceert alles wat je hebt
     28  uitgebracht als één feed, voor spelers die RSS spreken en geen ActivityPub.
     29- **Verhuis je account, en neem alles mee (FEP-1580).** Je berichten, je audio,
     30  de hoezen, de playlists en de GUID's gaan mee, je volglijst reist als CSV die
     31  je kunt uploaden of plakken, en de guardianship verhuist vóór de follow — in de
     32  andere volgorde stond een ward even zonder toezicht. Een verhuisd account gaat
     33  op slot aan de uitgaande kant, zodat er niets nieuws vertrekt vanaf een adres
     34  dat je niet meer gebruikt. Het staat nu op één pagina, in stappen, in plaats
     35  van verspreid.
     36- **Een leesweergave, naast Tijdlijn en Grid.** Eén bericht vult het scherm, de
     37  buren staan links en rechts klaar, en het scrollen snapt naar de bovenkant van
     38  het volgende bericht. Elke site kiest zelf: lezen, tijdlijn, of tijdlijn op
     39  desktop met lezen op een telefoon.
     40- **Gasten loggen in met het account dat ze al hebben (OpenWebAuth).** Een fan
     41  meldt zich aan via zijn eigen Klonkt en wordt hier volger, geen extra
     42  accounthouder met nog een wachtwoord. Twee Klonkts kunnen elkaar aanmelden, dus
     43  dit werkt in beide richtingen.
     44- **Acht guardianship-poorten die echt schakelen.** Het poortenpaneel is een
     45  cockpit: elke poort zichtbaar, elke chip draagt zijn eigen stand, en de apps
     46  weten vooraf wat er dichtstaat. Antwoorden is een eigen poort, volgverzoeken
     47  worden bij meerderheid beslist als er meerdere guardians zijn, een ward kan
     48  zelf een vraag stellen, en een logboek bewaart waaróm een besluit viel.
     49- **Volgers eerst goedkeuren, als je dat wilt.** Een volgverzoek wacht op jouw
     50  ja, en tot die tijd ziet de aanvrager niets van je berichten.
     51- **Elke collectie pagineert.** De outbox serveert nu `first` en `last` en
     52  bladert echt door zijn pagina's. Funkwhale weigerde hem zonder die twee
     53  ronduit, dus een collectie zonder paginering was geen schoonheidsfoutje maar
     54  een dichte deur.
     55- **Gesprekken weten wat je gelezen hebt.** Ongelezen telt per gesprek, een
     56  lezing is een gebeurtenis in plaats van een gok, en een wachtende lezing
     57  antwoordt met het verschil — niet langer een hele lijst ophalen om één nieuwe
     58  regel te vinden.
     59- **Apple Music- en YouTube-playlists sluiten netjes in**, met dezelfde parsing
     60  als de hub en een hoogte die past bij wat je werkelijk insluit.
    1161- **Berichten is één gesprekkenweergave.** Berichten, Gesprekken en Verzonden
    1262  waren drie losse filters, waardoor één uitwisseling uit elkaar viel: wat jij
     
    3484
    3585### Opgelost
     86- **De draad onder een vreemde post wordt via je eigen server opgehaald en nooit
     87  bewaard.** Antwoorden, like- en booststatus en de FEP-9098-emoji komen nu mee,
     88  en de volgende pagina wordt ook gelezen — eerder stopte een lange draad
     89  halverwege.
     90- **De snelheidsbegrenzer telde de hele site in plaats van de beller**, waardoor
     91  een drukke site iedereen 429's gaf. Daarbij hoort: of je een proxy vertrouwt
     92  hangt af van waar je draait, niet van of je in ontwikkeling of productie zit.
     93- **Een levende klok in het antwoord maakte van de lange poll een lus.** Het
     94  antwoord veranderde elke seconde, dus hij wachtte nooit — hij kwam alleen maar
     95  terug.
     96- **De editor overleeft een paginawissel.** Modules die aan elementen hangen
     97  starten bij elke navigatie opnieuw, dus de bewerkpagina laadt zijn editor weer
     98  na een terugknop, en opslaan zonder module wist niet langer wat je had
     99  geschreven.
     100- **Een slug is een lokale sleutel, geen naam op de draad.** Halve namen,
     101  ontbrekende namen en drie spellingen van dezelfde naam kwamen er allemaal uit
     102  voort dat het een voor het ander werd aangezien.
     103- **De cirkel viel om op een mediaveld dat geen lijst was**, en nam dan de hele
     104  pagina mee in plaats van dat ene bericht.
    36105- **Mensen op privacy-strenge servers kunnen je weer volgen.** Sommige servers
    37106  geven de publieke sleutel van een account alleen aan een ondertekend verzoek.
     
    61130
    62131### Beveiliging
     132- **Betaalde posts lekten hun volledige inhoud via de outbox en de
     133  volger-backfill.** De redactie zelf werkte; de queries gaven hem een rij zónder
     134  de kolom `paid`, dus las de poort `undefined`, liet alles door en zei niets.
     135  Beide queries halen nu op waarop ze beslissen, en een test bewaakt de soort
     136  fout in plaats van dit ene geval.
     137- **Fan-only posts gingen de deur uit met een publiek etiket.** Ze waren juist
     138  geadresseerd maar verkeerd omschreven, en zo'n tegenspraak lost een andere
     139  server precies de verkeerde kant op.
     140- **Een lek tussen sites in de tracker-export.** De ene site kon via de exporter
     141  bij de rijen van een andere.
     142- **De playlist-poort opent nu alleen bestanden van de site zelf.**
     143- **Een sleutel is gebonden aan de actor waarvoor hij spreekt.** Een handtekening
     144  wordt alleen aanvaard als de sleutel, zijn eigenaar en de actor het eens zijn;
     145  eerder kon een sleutel instaan voor iemand waar hij geen relatie mee had.
     146- **OpenWebAuth pakt PKCS#1 v1.5 zelf uit**, zonder vroege uitgang en met een
     147  grens op het aantal pogingen. Node heeft de padding-modus die dit deed
     148  verwijderd omdat die via timing lekt (CVE-2023-46809, de Marvin-aanval); het
     149  met de hand doen houdt het pad even lang en sluit het orakel in plaats van het
     150  opnieuw te openen.
    63151
    64152- **Bijgewerkte onderdelen sluiten zeven beveiligingsadviezen.** Het zwaarste
Note: See TracChangeset for help on using the changeset viewer.