Commit Graph

315 Commits

Author SHA1 Message Date
Sven
359db32858 docs: document pin/unpin status implementation (b5ebf6a)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 11:17:07 +01:00
Sven
ec856c962d chore: update AP fork lockfile pin to b5ebf6a (pin/unpin status)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 11:16:34 +01:00
Sven
ba1dbc6ceb docs: document timezone-aware status lookup fix (2660a1a)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 10:54:16 +01:00
Sven
7b5d1ed2c6 chore: update AP fork lockfile pin to 2660a1a (timezone-aware status lookup)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 10:53:47 +01:00
Sven
36c7f33a34 feat(changelog): add chore and refactor commit categories
The patch now recognises chore: and refactor: commit prefixes as their
own categories instead of lumping them into "other".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 10:05:04 +01:00
Sven
bc73558641 docs: document upstream raw signed fetch fallback merge (b33932f)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 09:33:41 +01:00
Sven
42e06f31f8 chore: update AP fork lockfile pin to b33932f (raw signed fetch fallback)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 09:32:59 +01:00
Sven
989ae4cb5d chore: update AP fork lockfile pin to 01f6f81 (favourite + profile fixes)
package-lock.json was pinned to 7b838ea, meaning all fixes since
(favourite 404, resolveAuthor timeout, avatar cache, created_at
normalisation) were never installed on the server.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 08:52:25 +01:00
Sven
25bcce2f1a docs: document resolveAuthor timeout fix for favourite/reblog (01f6f81)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 08:40:04 +01:00
Sven
78b9f77d96 docs: document favourite 404 fix and profile avatar/created_at fixes (a259c79, da89554)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 08:31:36 +01:00
Sven
5f388bc9d5 docs: document follower created_at fix and URL-type AP lookup (6c13eb8)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 07:31:23 +01:00
Sven
615dcd849d docs: document DM no-data and 404 follow-up fixes (4816033, 7b838ea)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 21:25:40 +01:00
Sven
61fbdcd7ae docs: document remote profile fix (lookupWithSecurity + timeouts)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 21:24:42 +01:00
Sven
728fa9d682 fix(deps): update activitypub fork (addTimelineItem wrong arg in DM path)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 21:04:03 +01:00
Sven
777b2cc306 fix(deps): update activitypub fork (DM no data — full status response)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:57:50 +01:00
Sven
2379a5e1d5 docs: document Mastodon API DM public post leak fix
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:48:43 +01:00
Sven
6678c67972 fix(deps): update activitypub fork (DM visibility=direct public post leak)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:45:28 +01:00
Sven
df4e4061a1 docs: document Mastodon client like/reblog fix and patch cleanup
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:29:27 +01:00
Sven
ab1912b24b fix(deps): update activitypub fork (resolveAuthor collection.get fix)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:28:24 +01:00
Sven
6f6641b34d docs: document removal of 11 obsolete AP patches
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:23:58 +01:00
Sven
18a946c9ea chore(patches): remove 10 obsolete AP patches now baked into fork
All of the following are now native in svemagie/indiekit-endpoint-activitypub:
- patch-ap-url-lookup-api (AP URL lookup endpoint)
- patch-ap-allow-private-address (allowPrivateAddress in federation-setup)
- patch-ap-like-note-dispatcher (fake-Note revert)
- patch-ap-like-activity-id (canonical Like activity id URI)
- patch-ap-like-activity-dispatcher (Like setObjectDispatcher)
- patch-ap-url-lookup-api-like (likeOf URL in /api/ap-url)
- patch-ap-remove-federation-diag (inbox diagnostic log removed)
- patch-ap-og-image (orphan, not in package.json)
- patch-ap-normalize-nested-tags (orphan, no-op)
- patch-ap-object-url-trailing-slash (orphan, no-op)

patch-ap-skip-draft-syndication kept — draft guard in syndicate() not yet in fork.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:21:26 +01:00
Sven
81abaee160 chore(patches): remove patch-ap-repost-commentary (baked into fork)
Repost commentary changes are now native in svemagie/indiekit-endpoint-activitypub.
Patch is no longer needed and was causing a duplicate repost block on every deploy.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:16:22 +01:00
Sven
dc850c350f fix(patches): update repost-commentary patch to detect native fork implementation
Fix D's old snippet (the bare `} else {` content block) still matched after
the fork absorbed the repost-commentary changes natively, causing a duplicate
`} else if (postType === "repost") {` block to be inserted on every deploy
and preventing startup. Added NATIVE_MARKER check for the fork's own repost
branch so the patch skips cleanly when the changes are already present.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:13:48 +01:00
Sven
c230feff7f docs: document 2026-03-22 activitypub upstream sync and merge artifact fixes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:03:37 +01:00
Sven
7087ad5375 chore(deps): sync activitypub fork with upstream/main
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:02:36 +01:00
Sven
9336705179 fix(deps): update activitypub fork (tags.pub direct follow workaround)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:01:00 +01:00
Sven
4b1dfa20be fix(patches): update federation-diag silence patch for new fork version
The fork added an Accept-header upgrade block between the diagnostic
log and the return statement, breaking the OLD_SNIPPET match. Patch
now handles both the original form and the updated form.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 17:26:12 +01:00
Sven
49e8a109c8 fix(deps): update activitypub fork (remove duplicate cachedUrl merge artifact)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 16:33:24 +01:00
Sven
c5a905b9be fix(deps): update activitypub fork (remove duplicate import merge artifact)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 16:30:14 +01:00
Sven
599312ba2f fix: bookmark main version 2026-03-22 16:27:44 +01:00
Sven
786cf5b7e9 fix(deps): update activitypub fork (duplicate import fix)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 15:56:24 +01:00
Sven
64b489d2bc chore(deps): sync activitypub fork with upstream/main (merge 14 behind commits)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 15:52:10 +01:00
Sven
33c10eafaf fix(deps): update activitypub fork (tags.pub AP JSON + signature fixes)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 15:31:48 +01:00
Sven
67eacf6b99 fix(webmention): livefetch v6 with diagnostic log + reset-stale v11
livefetch v6:
- Adds console.log showing which property links were built per post
  (e.g. "in-reply-to" for replies) — makes it debuggable without server access
- Fixes retryPatchedBlock to include the two comment lines the retry patch
  actually inserts (was missing them, causing "Target block not found" on
  fresh upstream → retry → livefetch path)
- Adds v5 to priorMarkersNoContinue with contentToProcess-line end detection
  so v5 → v6 in-place upgrade works correctly

reset-stale: bump to v11 to retry ca3d8 and any other posts stuck
before v5/v6 deployment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 11:40:57 +01:00
Sven
3d361c85aa chore(deps): update activitypub fork to v3.8.1 (tags.pub hashtag discovery)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 11:27:03 +01:00
Sven
2a674c8eea feat(draft): prevent draft posts from being syndicated or federated
Add two new patches:
- patch-ap-skip-draft-syndication: guards the AP syndicator's syndicate()
  method against draft posts (mirrors existing unlisted visibility check)
- patch-microsub-compose-draft-guard: forwards post-status from microsub
  compose to Micropub and suppresses mp-syndicate-to targets for drafts

The syndicate endpoint DB queries already filter post-status != draft
(patch-federation-unlisted-guards). These patches add defence in depth
at the AP syndicator and at the microsub compose submission layer.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 11:10:23 +01:00
Sven
072b803308 chore: update youtube endpoint fork (fix double video embed)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 10:00:43 +01:00
svemagie
ad05bf3f04 Merge pull request #1 from svemagie/claude/fix-activitypub-og-image-CrCGI
fix(ap): fix OG image not included in ActivityPub activities
2026-03-21 21:17:13 +01:00
svemagie
58478f1885 Merge branch 'main' into claude/fix-activitypub-og-image-CrCGI 2026-03-21 21:16:59 +01:00
Claude
769720b33f fix(ap): use slug-only OG image path /og/{slug}.png
The previous fix incorrectly generated /og/{year}-{month}-{day}-{slug}.png
but the Eleventy blog generates OG images at /og/{slug}.png (e.g. /og/2615b.png).
Remove the unnecessary date extraction and simplify to slug-only.

https://claude.ai/code/session_0124D41vdLYE3DkJxhPqYthX
2026-03-21 20:04:19 +00:00
Sven
c0b9878033 fix(webmention): silence retry noise for all livefetch versions, bump stale migration to v10
retry patch: regex now matches [patched:livefetch] and [patched:livefetch:vN]
so it silently skips for any livefetch version, not just v2.

reset-stale: bump to v10 to retry posts stuck during v5 rollout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 20:56:02 +01:00
Sven
bf97dab2ef docs: document upstream activitypub v3.7.1–3.7.5 merge
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 20:23:55 +01:00
Sven
bcbc2a284d docs: document 2026-03-19–21 changes (webmention, AP likes, repost commentary, AI patches)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 17:35:51 +01:00
Sven
2548825793 chore: silence github contribution log 2026-03-21 17:31:01 +01:00
Sven
109d39dd25 fix(activitypub): remove federation-diag inbox logging
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 15:47:23 +01:00
Sven
fad383dfee chore(deps): update activitypub fork to v3.6.8 (Mastodon Client API merge)
Pulls the merged upstream feat/mastodon-client-api branch into our fork
(svemagie/indiekit-endpoint-activitypub@f029c31). The fork now tracks
upstream v3.6.8 while retaining our custom additions.

What's new in the installed package:
- lib/mastodon/ — full Mastodon Client API compatibility layer (entities,
  middleware, routes, helpers, backfill-timeline, router)
- 13 additional locale files (es, fr, de, hi, id, it, nl, pt, sr, sv, zh, …)
- signatureTimeWindow and allowPrivateAddress built into federation-setup.js
  (patch-ap-allow-private-address now cleanly detects "already up to date")

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 15:27:04 +01:00
Sven
535e6f5e9c fix(activitypub): add Like vocab import in activity dispatcher patch
On fresh installs where the old wrong patch was never applied, Like was
absent from the @fedify/fedify/vocab imports, causing a ReferenceError
at startup. The dispatcher patch now adds Like to the import block if
missing, making it self-contained and install-order independent.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 09:05:34 +01:00
Sven
99d2e38066 fix(activitypub): serve AP-likes with canonical id and proper Like dispatcher
Replace the semantically incorrect fake-Note approach with strict AP protocol compliance:

- patch-ap-like-note-dispatcher: rewritten to revert the fake-Note block
- patch-ap-like-activity-id: adds canonical id URI to Like activities (AP §6.2.1)
- patch-ap-like-activity-dispatcher: registers setObjectDispatcher(Like, ...) so
  /activitypub/activities/like/{id} is dereferenceable (AP §3.1)
- patch-ap-url-lookup-api-like: /api/ap-url now returns the likeOf URL for AP-likes
  so the "Also on: Fediverse" widget's authorize_interaction flow opens the
  original Mastodon post on the remote instance

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 08:58:15 +01:00
Sven
34d5fde54d fix(syndicate): normalize syndication property to array before dedup check
Micropub's replaceEntries() stores single-value arrays as plain strings
(JF2 normalization). Spreading a string into [...str] gives individual
characters, so hasSyndicationUrl() never matches existing syndication URLs
and alreadySyndicated is always false — causing re-syndication on every
webhook trigger.

Fix: use [].concat() which safely handles both string and array values.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 07:49:18 +01:00
Sven
9668485b57 revert(deploy): remove syndication webhook (moved to blog repo)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 07:39:39 +01:00