source: Klonkt/CHANGELOG.nl.md@ dd568e7

main
Last change on this file since dd568e7 was dd568e7, checked in by Robin <roboburr@…>, 7 weeks ago

Feature: OAuth C2S outbox POST — apps can drive the account (phase 1 done)

Second half of AP Client-to-Server: a bearer-authenticated POST to
/ap/users/:slug/outbox accepts activities and translates them onto the existing
delivery machinery (deliverReply / sendInteraction / followActor /
deliverCreate) rather than reimplementing federation.

  • ingestOutboxActivity(site, user, activity) dispatches Create(Note) (reply -> resolveRemoteNote + deliverReply; top-level -> a sanitized microblog post + deliverCreate), Like, Announce (+upsertBoostedNote), Follow, and Undo of Like/Announce/Follow. A bare Note is wrapped in a Create per AP section 6. Client "source" (plain) is preferred over "content" (HTML) for replies; top-level content is HtmlSanitizerService.sanitize()d. Unhandled verbs return a clear 400 rather than a silent no-op.
  • Route: bearer via OAuthService.verifyBearer; the token is scoped to one site, so a slug mismatch is 403 and a readonly account is 403; no token is 401 with WWW-Authenticate. 201+Location for created objects, 202 for side-effect verbs. Declared after apJson (shared with the inbox handler) to avoid a TDZ on the const.

Verified live end to end against a running server with a real OAuth token:
top-level Note -> 201 + Location, stored published + sanitized (script stripped)
+ served as a valid Note at /ap/notes/<id>; Like/Follow -> 202; unresolvable
reply -> honest 502; no-token 401, wrong-site 403, unsupported type 400. 7 new
unit tests for the deterministic dispatch paths (80 green).

Ivory and other Mastodon-API clients are NOT supported by this: they speak
Mastodon's REST API (/api/v1/apps, /api/v1/instance, secret-based OAuth), not AP
C2S. That's a separate track (klonkt-demo-mastapi). Delete/Update of arbitrary
objects deferred (klonkt-demo-c2sdel). Beads: klonkt-demo-1w4.

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

  • Property mode set to 100644
File size: 19.4 KB
Line 
1# Wijzigingen — Klonkt
2
3Alle noemenswaardige wijzigingen aan Klonkt. Nieuwste bovenaan.
4Versies volgen [SemVer](https://semver.org/lang/nl/) (`1.0.0-beta.N` tijdens de beta).
5
6## [Unreleased]
7
8### Toegevoegd
9- **App-toegang via OAuth 2.0 (ActivityPub Client-to-Server, fase 1).** Klonkt
10 spreekt nu de standaard AP C2S-authenticatie, zodat native en web-apps (de
11 Shaer-apps als eerste) kunnen verbinden: dynamische client-registratie
12 (RFC 7591), een PKCE authorization-code-flow met een toestemmingsscherm waarop
13 je kiest namens welke site de app mag posten, en bearer-tokens (gehasht
14 opgeslagen, eenmalige codes). De actor-doc adverteert de OAuth- en
15 uploadMedia-endpoints en `/.well-known/oauth-authorization-server` (RFC 8414)
16 geeft de metadata, dus apps ontdekken alles in plaats van paden vast te
17 spijkeren. Alleen publieke clients + PKCE, geen client-secrets.
18- **De outbox accepteert posts van apps (C2S, fase 1 compleet).** Een
19 `POST` met bearer-token naar `/ap/users/:slug/outbox` bestuurt nu je account
20 vanuit een app: een bericht plaatsen, reageren, liken, boosten, volgen en dat
21 allemaal ongedaan maken. Activities gaan via dezelfde bezorg-machinerie als de
22 web-UI; een kale Note wordt in een Create verpakt (spec); content wordt
23 gesanitized; het token is aan één site gebonden dus kan niet namens een andere
24 posten. Let op: dit is ActivityPub C2S, wat de Shaer-apps spreken.
25 Mastodon-clients (Ivory e.d.) gebruiken Mastodons eigen API en worden hier niet
26 ondersteund.
27
28### Opgelost
29- **Bezoekers kunnen reageren op de eigen reacties van de site-eigenaar.** De
30 knop "reageer via de fediverse" verscheen alleen bij reacties van anderen; bij
31 de eigen reacties van de site in een thread kregen bezoekers niets, waardoor
32 je de auteur niet vanaf je eigen instance kon beantwoorden.
33
34## [1.5.0] · 2026-07-18
35
36### Toegevoegd
37- **Berichten: je reacties en meldingen op één pagina.** Eén Berichten-tab
38 vervangt Reacties en Meldingen. Eén stroom met filterchips (Alles, Gesprekken,
39 Activiteit, Verzonden): je eigen verzonden reacties staan mee in het gesprek
40 (met bewerken en verwijderen), likes en boosts op dezelfde post groeperen tot
41 één regel, privéreacties dragen een slotje, en items nieuw sinds je laatste
42 bezoek krijgen een stip. De interactie-bookmarklet verhuisde mee. Oude
43 /fediverse- en /notifications-links leiden door naar /messages.
44- **Connect: wie je volgt en wie jou volgt op één pagina.** Eén Connect-tab
45 vervangt de aparte Volgend- en Volgers-pagina's, met per connectie de richting
46 (volgend →, volger ←, wederzijds ↔) en, voor accounts waaraan je bezorgt,
47 wanneer ze voor het laatst bereikt zijn. Accounts die je niet meer bereikt
48 schuiven naar een ingeklapte "Niet bereikbaar"-sectie om op te ruimen. Oude
49 /following- en /followers-links leiden door naar /connect.
50- **Modereer inkomende reacties op je eigen posts.** Als site-eigenaar kun je een
51 reactie nu uit je thread verwijderen (en die blijft weg: opnieuw bezorgen en
52 thread-aanvulling worden geblokkeerd door een tombstone) en rapporteren bij de
53 server van de auteur, rechtstreeks vanuit de thread. Werkt ook voor
54 privéreacties, die niet via de fediverse-interactieflow te behandelen zijn.
55
56### Opgelost
57- **Een geboostte videopost houdt zijn video in de Cirkel.** Een video-only post
58 (Loops.video) boosten sloeg hem op zonder media, waardoor de Cirkel een kale
59 teksttegel toonde in plaats van een videothumbnail; opnieuw boosten kon de
60 video zelfs wissen uit een al-gecachte kopie. Boosts dragen nu de volledige
61 getypeerde media mee, en een refresh wist gecachte media nooit meer.
62- **De titel van de interactiepagina volgt je taal.** "Interacteer via de
63 fediverse" stond hardcoded in het Nederlands in het browsertabblad, ook op een
64 Engelstalige site.
65- **Het Apple Music-icoon lijkt weer op het Apple-logo.** Het oude icoon was een
66 verminkte vorm.
67- **Statistiekkolommen verspringen niet meer in de 30- en 90-dagenweergave.**
68 Kolommen zonder datumlabel klapten iets in; elke kolom houdt nu zijn
69 labelregel.
70- **Privéreacties staan niet meer op de publieke postpagina.** Een followers-only
71 of directe (DM-)reactie op je post werd voor iedereen in de publieke thread
72 getoond. Inkomende reacties slaan nu hun fediverse-adressering op; de publieke
73 thread toont alleen publieke en unlisted reacties. Privéreacties bereiken je
74 nog steeds via meldingen, mét de post waar ze bij horen.
75- **Kale video/audio-embeds lopen niet meer buiten de kolom.** Een `.webm` /
76 `.mp4` / `.mp3`-speler past nu netjes in de kolombreedte, net als de
77 iframe-embeds; de breedte-regel gold voorheen alleen voor `iframe`.
78
79## [1.4.0] · 2026-07-14
80
81### Toegevoegd
82- **Volgerslijst met bezorgstatus.** Een nieuw Fediverse-tabblad laat zien wie je
83 volgt en wanneer elk account voor het laatst bereikt is, zodat dode accounts
84 opvallen en je ze na een check kunt verwijderen.
85- **Kale media-links spelen direct af.** Een losse `.webm`, `.mp4` of `.mp3` wordt
86 nu een echte speler in plaats van een dode link.
87- **Hashtags, links en mentions zijn ook op je site klikbaar.** `#tags`, URLs en
88 `@mentions` in een post worden nu links op de site zelf, niet alleen op de
89 gefedereerde kopie. Mentions worden één keer bij opslaan opgezocht, dus pagina's
90 blijven snel.
91
92### Opgelost
93- **Reacties, verwijderde reacties en bewerkte reacties komen altijd aan.** Ze
94 verdwenen als een server even onbereikbaar was; ze gaan nu via de retry-wachtrij,
95 net als posts.
96- **Videothumbnails voor meer video's.** Covers van video's met hun metadata
97 achteraan (Loops.video, telefoon-exports) krijgen nu een thumbnail in plaats van
98 niks.
99- **Een cover die alleen een video is, toont nu een posterbeeld op de postpagina.**
100 Hij blijft niet meer leeg in de Solo-weergave.
101- **De geïnstalleerde app toont geen oude data meer bij een wankele start.** Een
102 koude start op een slechte verbinding ververst nu, in plaats van een verouderde
103 pagina te tonen.
104- **De Updates-pagina volgt jouw branch.** Draai je de stable-branch, dan zie je
105 niet langer de wijzigingen van main als "nieuwste".
106
107## [1.3.5] — 2026-07-04
108
109### Opgelost
110- **Polls behouden hun cover als ze geboost worden.** Een poll met muziek of een
111 embed federeerde zonder cover, waardoor een geboooste poll een leeg vak toonde;
112 de cover reist nu mee.
113- **De Updates-pagina van de Android-app toont wat er écht te installeren valt.**
114 Hij las de nieuwste release-branch, die korte tijd vóór kon lopen op de
115 telefoon-build — bijwerken installeerde dan dezelfde versie opnieuw. Hij leest
116 nu de versie van de telefoonbundel zelf.
117
118## [1.3.4] — 2026-07-04
119
120### Opgelost
121- **Boosts die hun cover kwijt waren krijgen 'm automatisch terug.** Posts die
122 je vóór de cover-fix boostte waren zonder artwork opgeslagen; die worden bij
123 de volgende herstart eenmalig ververst. Is de thuis-server van een post op dat
124 moment even onbereikbaar, dan wordt het bij volgende herstarts opnieuw
125 geprobeerd in plaats van voorgoed overgeslagen. Een post opnieuw boosten
126 ververst nu ook de opgeslagen kopie (cover, inhoud) — vanuit de feed én de
127 interact-pagina.
128
129## [1.3.3] — 2026-07-03
130
131### Opgelost
132- **Geboooste muziekposts houden hun cover.** Als je een nummer boostte van
133 iemand die je niet volgt, ontbrak de cover; die verschijnt nu wel, net als bij
134 mensen die je wél volgt.
135
136## [1.3.2] — 2026-07-02
137
138### Opgelost
139- **De Updates-pagina werkt nu in de Android-app.** Hij toont voortaan de
140 nieuwste beschikbare versie, en de bijwerk-knop downloadt en installeert die
141 direct op je telefoon (je posts en instellingen blijven staan).
142
143## [1.3.1] — 2026-07-02
144
145### Opgelost
146- **Muziek blijft op Android doorspelen in de achtergrond.** Als een nummer
147 afliep terwijl je telefoon op slot zat of de app in de achtergrond stond,
148 startte het volgende nummer en stopte het na een seconde weer. De speler
149 voert de wachtrij nu als één doorlopende stream aan, waardoor het doorgaan
150 naar het volgende nummer niet meer telt als "nieuw" afspelen dat de browser
151 mag pauzeren.
152
153## [1.3.0] — 2026-07-02
154
155### Toegevoegd
156- **Kies een lichte of donkere deel-kaart.** De automatisch gemaakte deel-afbeelding volgt je
157 site-thema; onder Beheer → SEO kun je 'm nu geforceerd licht of donker zetten.
158- **Een vermelding is nu een melding.** Als iemand op de fediverse je noemt in een post — ook
159 eentje die geen reactie op jou is — verschijnt dat in je fediverse-meldingen met een link naar
160 het origineel.
161- **Cover-art op openbaar gedeelde audio.** Een track die je openbaar op de fediverse deelt draagt
162 nu z'n cover-art mee (of de post-cover), zodat audiospelers die artwork ondersteunen die tonen in
163 plaats van een leeg vlak.
164- **Rapporteer een post op de fediverse.** Vanaf een fediverse-post kun je die nu melden bij de
165 moderators van de eigen server van die post, met een optionele reden — en meldt iemand jouw site,
166 dan verschijnt die melding in je fediverse-meldingen.
167- **Stel de taal van een post in.** Kies in welke taal je een post schreef — op de fediverse
168 werkt daarmee het taalfilter van de tijdlijn en de vertaal-knop.
169- **Alt-tekst voor afbeeldingen.** Geef je cover een beschrijving (en inline-afbeeldingen behouden
170 hun eigen alt-tekst) — die federeert mee naar de fediverse en laat schermlezers de afbeelding beschrijven.
171- **Noem mensen in een post.** `@gebruiker@server` in een post linkt nu naar hun profiel en stuurt
172 ze een melding op de fediverse — ook als ze je niet volgen — net als een vermelding in een reactie.
173- **Korte video's in de feed spelen automatisch af en loopen.** Een geanimeerde cover of een korte
174 (≤30s) clip in de News-feed speelt nu automatisch geluidloos in een lus, als een GIF; langere
175 video's houden hun bediening.
176- **Stem op fediverse-polls.** Een poll van een account dat je volgt verschijnt nu in de News-feed
177 met opties en de huidige resultaten, en je kunt je stem uitbrengen — die federeert terug zoals een
178 gewone Mastodon-stem.
179- **Maak je eigen polls.** Een post kan nu een poll bevatten (enkel- of meerkeuze, met een looptijd).
180 Die federeert als een echte fediverse-poll, dus je Mastodon-volgers kunnen stemmen vanuit hun eigen
181 app; de live-resultaten staan op de post en de poll sluit zichzelf zodra de tijd om is.
182
183### Gewijzigd
184- **Audio openbaar delen is nu onomkeerbaar.** Zodra een track openbaar op de fediverse is gedeeld,
185 is het bestand verspreid — weer "sluiten" zou schijnveiligheid zijn. De editor vergrendelt de keuze
186 na het openen en waarschuwt je voordat je 'm aanvinkt.
187
188### Opgelost
189- **Remote video's tonen een preview-frame.** Een video in de News-feed of op een Cirkel-tegel
190 (bv. van Loops of PeerTube) verscheen als zwart vlak tot je op afspelen drukte; er staat nu een
191 echt poster-frame. (Langere video's houden bewust hun bediening — alleen clips onder de 30
192 seconden spelen automatisch als een GIF.)
193- **Vermeldingen, hashtags en links tussen haakjes werken nu.** Een vermelding als
194 `(@gebruiker@server)`, een `(#hashtag)` of een URL tussen haakjes federeerde als platte tekst —
195 en de genoemde persoon kreeg nooit een melding. Ze linken (en melden) nu net als zonder haakjes.
196- **Kale webadressen worden links op de fediverse.** Een losse URL in een post of reactie federeert
197 nu als klikbare link in plaats van platte tekst.
198
199## [1.2.0] — 2026-07-01
200
201### Toegevoegd
202- **PeerTube-video's in de feed.** Een PeerTube-link in een post toont nu een ingesloten speler in de
203 News-feed, net zoals YouTube, Spotify en SoundCloud al deden.
204- **Lichte deel-afbeeldingen.** Sites met een licht standaardthema krijgen nu een bijpassende lichte
205 Open Graph-kaart bij het delen van een pagina, in plaats van altijd een donkere.
206- **Je eigen bezoeken buiten de statistieken laten.** Als beheerder kun je nu je eigen IP-adres
207 uitsluiten van je sitestatistieken, voor een eerlijker beeld van echte bezoekers.
208- **Rechtsklik "Opslaan" is uitgeschakeld op covers, afbeeldingen en video's** — een lichte drempel
209 zodat de artwork niet met één klik op te slaan is (frictie, geen bescherming).
210
211### Opgelost
212- **Geanimeerde video-covers tonen nu overal correct.** In de Cirkel en het raster konden ze
213 verschijnen als een kapotte afbeelding of een leeg vak; ze tonen nu als een echte doorlopende video
214 die het vierkant vult, gecentreerd. Rechtsklikken op een cover geeft het normale link-menu in plaats
215 van de video-bediening van de browser.
216- **Iemand volgen blijft niet meer hangen.** Een volg-verzoek waarvan de eerste bezorging faalt (de
217 andere server even onbereikbaar) wordt nu automatisch opnieuw geprobeerd, in plaats van eeuwig op
218 "in behandeling" te blijven staan.
219- **Geboooste posts tonen hun echte tekst** in de Cirkel, in plaats van een "RE: <link>"-prefix.
220- **Steviger fediverse-afhandeling** — strengere handtekening-controles op inkomende activiteit,
221 blokkades dekken nu ook een boost van een geblokkeerde auteur, en het synchroniseren van gepinde
222 posts racet niet meer als je snel achter elkaar opslaat.
223
224## [1.1.0] — 2026-06-30
225
226### Toegevoegd
227- **Geanimeerde covers spelen overal soepel.** Upload een geanimeerde WebP als cover en Klonkt maakt
228 er ook een geluidloze, doorlopende video van. iOS Safari — waar geanimeerde WebP hapert — krijgt de
229 soepele video, elke andere browser houdt de scherpe WebP, en op de fediverse federeert de cover als
230 een video die in Mastodon en z'n apps speelt. Te zien op de post, het grid, de feed en gerelateerde posts.
231- **Mediabibliotheek (Beheer → Media).** Zie elke geüploade afbeelding, waar elke wordt gebruikt,
232 kopieer de URL, en ruim ongebruikte bestanden in één klik op — inclusief de overgebleven video/poster
233 van een geanimeerde cover. Afbeeldingen, Audio en Playlists delen nu één tab-balk.
234- **Deel-knop** onderaan elke post (native deelmenu, of link kopiëren).
235- **Vervang het audiobestand van een track** zonder de track opnieuw aan te maken.
236- **Muziek op de fediverse (eerste stap).** Audio-posts dragen nu schema.org *MusicRecording* /
237 *MusicAlbum*-data, en een per-post-schakelaar kan een gehoste track delen als een echte
238 fediverse-audiobijlage die in de feeds van volgers speelt.
239
240### Gewijzigd
241- **Nettere embeds op Mastodon.** Een post met een YouTube/Spotify/SoundCloud-link laat Mastodon nu
242 z'n player-kaart tonen; link-only tracks delen hun streaming-links. De cover blijft zichtbaar in
243 andere Klonkt-feeds. (Op je eigen site verandert niets — de speler en cover renderen zoals voorheen.)
244- **Cirkels blijven gesynct op de fediverse-manier** — bewerkingen en gemiste posts lopen automatisch
245 bij via standaard ActivityPub, zodat een Cirkel niet meer uit sync raakt.
246- **Alles wat Klonkt federeert is nu valide AS2 / JSON-LD**, bewaakt door een test, zodat striktere
247 servers het accepteren.
248- De tracklijst staat **nieuwste eerst**.
249
250### Opgelost
251- **Geanimeerde WebP-covers worden niet meer tot één frame bevroren** (de crop-editor en de
252 thumbnailer maakten ze statisch).
253- **Link-only tracks** (Spotify/YouTube, geen geüpload bestand) zijn weer in een post in te voegen.
254- **Link-previews** (og:image / Twitter-kaart) gebruiken nu absolute afbeeldings-URL's, zodat ze op
255 Signal, WhatsApp en andere scrapers verschijnen.
256- Diverse **fediverse-bezorgings-fixes**: covers/links worden geen zwarte tegel meer op Mastodon, rauwe
257 audiobestanden vervuilen geen post die al een speler heeft, en dode links van een hernoemde remote
258 post helen zichzelf.
259- De **mobiele feed** laadt covers op volledige resolutie; lange titels breken af i.p.v. over te lopen.
260- **Self-host-updates** zijn betrouwbaarder: de installer opnieuw draaien behoudt je kanaal, en de
261 updater herstart niet meer (of claimt geen update) als je al up-to-date bent.
262
263## [1.0.0] — 2026-06-30
264
265### Toegevoegd
266- **Klonkt zit nu op de fediverse (ActivityPub).** Je site is een echt
267 fediverse-account: mensen op **Mastodon** — of een andere **Klonkt** — kunnen je
268 volgen, en je berichten komen in hun feed. Je kunt zelf accounts volgen en hun
269 berichten lezen in een **News**-feed, **notificaties** krijgen, en berichten **liken,
270 boosten en erop reageren**. Inkomende activiteit wordt geverifieerd, dus nep-reacties,
271 -likes en -volgers worden geweigerd.
272- **Iedereen kan vanaf de fediverse op je berichten reageren, ze liken of boosten** —
273 bezoekers reageren vanuit hun eigen account (ze vullen alleen hun server in); een
274 account op jouw site is niet nodig.
275- **Circles**: volg andere Klonkt-sites en toon elkaars openbare berichten in je
276 Circle — decentraal, zonder centraal platform.
277- **Gevoelige (NSFW) berichten** met je eigen waarschuwingstekst: vervaagd met
278 klik-om-te-tonen op de hele site, en getoond als inhoudswaarschuwing op de fediverse.
279- **Blokkeer** een account of een heel domein waar je liever niets van hoort.
280- Zoeken vindt nu ook **tracks** (op titel, artiest en album), direct af te spelen vanuit
281 de resultaten met een link naar het bericht waarin ze voorkomen — en bij berichten zoek
282 je al terwijl je typt.
283- **Live thema-voorbeeld** in Beheer → site-instellingen: accent, thema en palet worden
284 direct bijgewerkt, nog vóór je opslaat.
285- Geüploade afbeeldingen worden automatisch geoptimaliseerd naar **WebP** voor snellere
286 pagina's.
287- Een ruimere **schrijfervaring op mobiel**: tik om een afleidingsvrije, schermvullende
288 editor te openen, met de opmaakbalk die boven het toetsenbord in beeld blijft.
289
290### Gewijzigd
291- **Paletten teruggebracht naar 8**: het neutrale **Klonkt** (goud accent) is de nieuwe
292 standaard, plus zeven volkleurige thema's — **Forest**, **Ocean**, **Teal**, **Lilac**,
293 **Sunset**, **Candy** en **Amber**.
294
295### Verwijderd
296- **Hub-modus** — Klonkt is nu **solo of Circles**; je bouwt een collectief of label
297 via **Circles** (gefedereerde, zelfstandige sites).
298- **Eigen reacties en Google-login** — reageren, liken en boosten loopt nu volledig
299 via de fediverse.
300- **Lokale favorieten (♥)** — vervangen door de ⭐ fediverse-like.
301
302### Opgelost
303- De mini-speler springt en scrollt naar de track die speelt — ook vanuit een album of
304 afspeellijst — en houdt die gemarkeerd.
305- Lege album-/afspeellijst-covers vallen nu terug op de cover van de eerste track.
306- Een profielfoto die na de overstap naar **WebP** kapotging in de koptekst, herstelt
307 zichzelf nu.
308- Veel verbeteringen aan de **mobiele berichten-editor**: betrouwbaar scrollen, een
309 opmaakbalk die op z'n plek blijft, geen pagina-sprongen als je op een knop tikt, en een
310 Opslaan-balk die net boven het toetsenbord zit.
311
312## [1.0.0-beta.2] — 2026-06-19
313
314Eerste release waarbij we de versie actief bijhouden (te zien in de footer — klik erop voor
315deze pagina).
316
317### Toegevoegd
318- Releasetracking: het versienummer in de footer linkt naar deze wijzigingenpagina.
319- Acht premiumfuncties (achter **Patreon**): nieuwsbrief/mailinglijst, download-voor-e-mail,
320 release-planning + previews alleen voor fans, **EPK**/perskit, pro-statistieken,
321 link-in-bio + klikstatistieken, insluitbare speler, en showagenda + houd-me-op-de-hoogte.
322- Nieuwsbrief-aanmeldveld in de footer (aan/uit in Beheer → Instellingen).
323- **SMTP**-instellingen in te stellen in Beheer → Instellingen (geen aanpassing van een
324 configuratiebestand meer nodig), met een testmail-knop.
325
326### Gewijzigd
327- Nettere instellingenformulieren (gestapelde labels, volledig brede invoervelden).
328- **EPK**/perskit toont de top 10 meest beluisterde tracks.
329- Mooiere 404-pagina (mobielvriendelijk) en duidelijkere inlogfoutmeldingen.
330
331### Opgelost
332- De sitebrede audiospeler laadde geen enkele track.
333- Knoptekst werd onleesbaar bij hover.
334- Datumkiezers volgen nu het thema.
335- Vooruit/terug-navigatie toont geen dubbele koptekst meer.
Note: See TracBrowser for help on using the repository browser.