Changeset 4425cc2 in Klonkt for src/routes/activitypub.js


Ignore:
Timestamp:
09/04/2026 11:36:18 AM (4 days ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
369aa60
Parents:
59f404a
Message:

Featured: de kolommen die buildNote nodig heeft (shaer-6oth, laatste punt)

De bead vroeg nog na te gaan of dezelfde kolommen ergens anders ontbraken
waar buildNote op een DB-rij wordt losgelaten. Alle acht aanroeppunten
langsgelopen: zes zijn schoon (twee lezen SELECT *, backfillNewFollower is
15-8 al bijgewerkt, en de drie handgebouwde rijen in de webroutes geven de
velden mee). De featured-collectie was het gat.

De gok in de bead was half raak. Featured filtert wel op fan_only --
daarom leek hij goed -- maar selecteert ap_visibility, paid en excerpt
niet, en filtert daar ook niet op. Twee gevolgen, op een route die
publiek en onbetekend opvraagbaar is:

een vastgezette BETAALDE post lekte zijn volledige tekst, want
buildNote slaat zijn redactie over zodra post.paid undefined is. Precies
het mechanisme van Barts melding van 15-8; toen zijn outboxSlice en
backfillNewFollower bijgewerkt en is deze route gemist.

een vastgezette QUIET-post kreeg to: as:Public in plaats van zijn
volgers -- luider dan de schrijver koos, dezelfde vorm als shaer-6oth.

excerpt hoort erbij, anders valt de teaser na de reparatie terug op de
eerste alinea van precies de tekst die verborgen moet blijven. Het
visibility-filter erbij: niet-publiek hoort niet in een publieke
collectie, ook niet vastgezet.

De toets is een LUS over de publieke collecties die posts dragen, niet
een toets op deze ene query -- dezelfde reden die ap-collection-paging
al noemt: het gat ontstond doordat de ene plek het wel had en de andere
niet, en een toets per plek vraagt om dezelfde vergeetachtigheid. Over
HTTP, want de query zit in de route.

Tegenbewijs: met de kolommen er weer uit vallen precies de twee
featured-toetsen (het lek is dus gemeten, niet beredeneerd), blijft de
outbox groen omdat die al gerepareerd was, en blijft de vrienden-toets
groen -- wat bevestigt dat het fan_only-filter er altijd al was. Eerste
poging tot dat tegenbewijs sloeg niet aan doordat de mutatie niet
matchte; die is overgedaan met controle dat hij er echt in zat.

Volle suite 1245 groen.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/activitypub.js

    r59f404a r4425cc2  
    11531153  // last-processed-first). So we emit it reversed (lowest pin priority first,
    11541154  // rank 1 last) → Mastodon flips it back to pin-rank ascending on the profile.
     1155  // fan_only, ap_visibility, paid en excerpt MOETEN mee, om dezelfde reden als
     1156  // in outboxSlice en backfillNewFollower (shaer-6oth, en Barts melding van
     1157  // 15-8). buildNote beslist op deze velden, en een ontbrekende kolom is daar
     1158  // `undefined` -- wat stilletjes het ruimste gedrag oplevert:
     1159  //
     1160  //   zonder `paid`    slaat buildNote zijn redactie over en gaat de VOLLEDIGE
     1161  //                    tekst van een betaalde post mee. Deze collectie is
     1162  //                    publiek en onbetekend opvraagbaar, dus dat is de post
     1163  //                    gewoon te lezen. `excerpt` hoort erbij, anders valt de
     1164  //                    teaser terug op de eerste alinea van precies de tekst
     1165  //                    die verborgen moet blijven.
     1166  //   zonder ap_vis    krijgt een quiet/unlisted post `to: as:Public` in plaats
     1167  //                    van zijn volgers -- luider dan de schrijver koos.
     1168  //
     1169  // Het filter erbij: fan_only stond er al, ap_visibility ontbrak. Een post die
     1170  // niet publiek bedoeld is hoort niet in een publieke collectie, ook niet als
     1171  // hij vastgezet is.
    11551172  const posts = db.prepare(
    1156     `SELECT id, slug, title, content, cover_image_url, cover_video_url, nsfw, content_warning, c2s_attachments, published_at, created_at
     1173    `SELECT id, slug, title, content, cover_image_url, cover_video_url, nsfw, content_warning, c2s_attachments, published_at, created_at,
     1174            fan_only, ap_visibility, paid, paid_min_cents, excerpt
    11571175     FROM posts WHERE site_id = ? AND status = 'published' AND (fan_only IS NULL OR fan_only = 0)
     1176       AND IFNULL(ap_visibility, 'public') IN ('public', 'quiet')
    11581177       AND pinned IS NOT NULL AND pinned > 0
    11591178     ORDER BY pinned DESC, COALESCE(published_at, created_at) ASC LIMIT 20`
Note: See TracChangeset for help on using the changeset viewer.