Reply op een ander gefixt: gesigneerd resolven, eigen replies terug in de feed, duplicaat idempotent
Robins waarneming (30-7) legde de keten bloot: reply op jezelf lukt,
reply op een ander geeft 502. Drie oorzaken, drie fixes.
Een: resolveRemoteNote haalde de parent-note ANONIEM op. Een publieke
note (je eigen post) geeft dat, maar een friends-only note (de
Shaer-standaard!) weigert een anonieme GET terecht. Het reply-, like-
en boost-pad over C2S resolven nu gesigneerd als de eigen actor
(asSlug), zodat de andere server ziet wie er vraagt en serveert wat de
vriendschap verdient. Zelfde principe als friends-get-the-history, nu
ook aan de vraagkant.
Twee: je eigen verzonden replies (ap_outbox) werden nergens over C2S
geserveerd. Je reply bestond overal behalve in je eigen app: dus je
probeerde het opnieuw. De C2S inbox-read krijgt een derde leg:
getSentNotes bouwt ze via buildReplyNote (inReplyTo, Mention-tags,
attachments, friends-adressering), met de eigen shaer:author erop en de
leidende mention gestript zoals de DM-leg dat doet.
Drie: die herhaalpoging liep in de duplicate-guard, die zonder id
antwoordde; de ingest maakte daar 502 reply_failed van. Een duplicaat
is nu idempotent succes met het BESTAANDE id.
Changed files:
src/services/ActivityPubService.js
- resolveRemoteNote(url, {asSlug}): gesigneerde fetches (note, actor
en de ancestor-keten); reply/like/boost/undo geven site.slug mee
- getSentNotes(base, site): eigen ap_outbox-rijen als AS2 Notes
- duplicate-guard geeft het bestaande id terug
src/routes/activitypub.js
- C2S inbox-read: sent-leg naast timeline en messages, zelfde vorm
New file:
test/sent-notes.test.js
- sent reply komt terug als threadbare Note (parent in to, Mention,
media absoluut, ISO-published); duplicaat = zelfde id
-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>