Commit Graph

96 Commits

Author SHA1 Message Date
a55868be52 README.md aktualisiert 2026-03-31 10:21:46 +02:00
Sven
7ce1112c4e docs(readme): document all patch scripts, production deployment, and env vars
Adds documentation for 14 previously undocumented patch scripts:
- AP threading patches (federation-bridge-base-url, compose-default-checked,
  mastodon-reply-threading)
- Conversations Bluesky patches (cursor-fix, self-filter)
- Micropub session token fix
- Microsub compose draft guard and AP dispatch (fixed // comment prefix)
- Indiekit endpoint URLs protocol fix
- Webmention sender hentry syntax fix
- Endpoint posts fetch diagnostic

Adds Production deployment section covering:
- start.example.sh structure and webmention poller architecture
- FreeBSD rc.d service script (indiekit.rcd.example)
- Prometheus metrics shim (metrics-shim.cjs, port 9209)

Extends Setup section with required and key optional env var tables.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 09:05:16 +02:00
svemagie
034e944c9d Merge branch 'main' into claude/fix-activitypub-og-image-CrCGI 2026-03-27 20:00:25 +01:00
Sven
e34decb59e docs: document inbox signature suppression and OAuth state fix 2026-03-27 16:55:54 +01:00
Sven
9126058df7 fix(docs): INTERNAL_FETCH_URL must point to Indiekit directly, not nginx
nginx HTTP/80 returns 301 → HTTPS; pf has no hairpin NAT for jail traffic,
so following the redirect causes UND_ERR_SOCKET on every internal POST.
Correct value: http://10.100.0.20:3000 (direct to node jail).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 10:53:11 +01:00
Sven
88c988947b docs: document livefetch v6, poller direct-connect fix, nginx 444 root cause
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 09:57:31 +01:00
Sven
8464e2140c docs: document 2026-03-27 upstream merge and post-merge fixes 2026-03-27 09:49:18 +01:00
Sven
ad58bc45db chore: update AP fork lockfile pin to 230bfd1 (upstream v3.9.x merge)
Fedify 2.1.0, 5 FEPs (Tombstone, Activity Intents, indexable, NodeInfo,
Collection Sync), security audit fixes, architecture refactor (syndicator.js,
batch-broadcast.js, init-indexes.js, CSS split). All fork patches retained:
DM support, pin/unpin, edit post, timeout guard, signed fetch, ap_timeline mirror.
2026-03-27 09:31:51 +01:00
Sven
77442ec837 chore: update AP fork lockfile pin to 42f8c2d (own posts in ap_timeline)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 20:46:14 +01:00
Sven
3b2925d764 docs: document linkify trailing punctuation fix (bd3a623)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 19:57:48 +01:00
Sven
a7b48a2606 docs: document edit post implementation (e319c34)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 11:33:41 +01:00
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
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
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
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
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
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
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
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
Claude
ad5e6b2235 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:19:27 +00:00
Claude
9511b96a89 fix(ap): fix OG image not included in ActivityPub activities
Root cause: jf2-to-as2.js (both 842fc5af and 45f8ba9) uses a regex
expecting date-based URLs like /articles/YYYY/MM/DD/slug/ to extract
the post date for the OG image filename. This blog uses flat URLs like
/articles/slug/ so the regex never matches — no `image` property is
set on Note/Article ActivityPub objects and fediverse clients show no
preview card.

Fix:
- Add scripts/patch-ap-og-image.mjs: replaces the URL-pattern regex with
  slug-from-last-path-segment + date-from-properties.published, producing
  /og/{year}-{month}-{day}-{slug}.png matching the Eleventy OG filenames.
  Handles both 842fc5af (slug-only URL) and 45f8ba9 (date+slug) variants.
  Applied to both jf2ToActivityStreams() and jf2ToAS2Activity().
- Register patch in package.json postinstall and serve after patch-ap-repost-commentary.
- Bump package-lock.json to 45f8ba9 fork commit (correct date+slug filename
  format, likes-as-bookmarks, announce cc reverted).

https://claude.ai/code/session_0124D41vdLYE3DkJxhPqYthX
2026-03-21 20:18:09 +00: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
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
Claude
1cf5b01788 fix(ap): fix OG image not included in ActivityPub activities
Root cause: jf2-to-as2.js (both 842fc5af and 45f8ba9) uses a regex
expecting date-based URLs like /articles/YYYY/MM/DD/slug/ to extract
the post date for the OG image filename. This blog uses flat URLs like
/articles/slug/ so the regex never matches — no `image` property is
set on Note/Article ActivityPub objects and fediverse clients show no
preview card.

Fix:
- Add scripts/patch-ap-og-image.mjs: replaces the URL-pattern regex with
  slug-from-last-path-segment + date-from-properties.published, producing
  /og/{year}-{month}-{day}-{slug}.png matching the Eleventy OG filenames.
  Handles both 842fc5af (slug-only URL) and 45f8ba9 (date+slug) variants.
  Applied to both jf2ToActivityStreams() and jf2ToAS2Activity().
- Register patch in package.json postinstall and serve after patch-ap-repost-commentary.
- Bump package-lock.json to 45f8ba9 fork commit (correct date+slug filename
  format, likes-as-bookmarks, announce cc reverted).

https://claude.ai/code/session_0124D41vdLYE3DkJxhPqYthX
2026-03-20 14:39:21 +00:00
Sven
c2f05deda4 docs: document webmention livefetch v2, reset-stale v9, and poller fix
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 21:53:15 +01:00
Sven
8e304e4fc1 docs: document likes-as-bookmarks, OG images, and announce revert
- Update README: likes delivered as bookmarks, announces use upstream
  addressing, OG images added to AP objects
- Update fork reference to 45f8ba9
- Remove unused patch-ap-like-announce-addressing.mjs (now in fork)
- Update package-lock.json for new fork commit

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 01:39:08 +01:00
Sven
7419e37832 docs: add blog theme soft-delete and content-warning to changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 01:00:43 +01:00
Sven
e7bc37f282 chore: merge upstream AP fork v2.13–v2.15.4, remove 5 obsolete patches
Upstream features merged into svemagie/indiekit-endpoint-activitypub:
- v2.13.0: FEP-8fcf/fe34, custom emoji, manual follow approval
- v2.14.0: server blocking, Redis caching, key refresh, async inbox
- v2.15.0-4: outbox failure handling, reply forwarding, CW property,
  soft-delete filtering, as:Endpoints stripping

Patches removed (now baked into fork):
- patch-ap-object-url-trailing-slash
- patch-ap-normalize-nested-tags
- patch-ap-like-announce-addressing
- patch-inbox-skip-view-activity-parse
- patch-inbox-ignore-view-activity

Patches updated:
- patch-ap-allow-private-address: match v2.15 comment style

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 00:49:13 +01:00
Sven
e0e78c6296 docs: document Like/Announce addressing patch and update fork reference
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 00:17:52 +01:00
Sven
bd255cc03f docs: document YouTube likes store integration and draft behavior
- Update sync flow diagram to show store.createFile step
- Note draft status and "Title - Author" content format
- Add reset route to routes table

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 23:01:16 +01:00
Sven
c13b8a02dd docs: add YouTube likes sync section to README
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 21:43:31 +01:00
Sven
f7e8eba46a feat: integrate YouTube likes sync via forked endpoint
Switch @rmdes/indiekit-endpoint-youtube to forked repo with OAuth 2.0
liked-videos sync. Add OAuth client config and likes sync settings.
Also document outgoing webmentions architecture in README.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 21:05:15 +01:00
Sven
e5b0db3d00 chore: update README.md with activitpub implementation 2026-03-18 20:07:21 +01:00
Sven
421a2944f8 docs: fix nginx proxy Host header to blog.giersig.eu
Internal requests arrive with Host: 10.100.0.10 which Indiekit doesn't
recognize, causing auth redirects. Hardcode the public hostname so
Indiekit's session/token handling works correctly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 16:34:45 +01:00
Sven
e98c704e78 docs: add server architecture, jail setup, and nginx config to README
Documents the two-jail FreeBSD setup (web + node), INTERNAL_FETCH_URL
mechanism, nginx port 80 internal listener config, and static file
paths at /usr/local/www/blog. Also documents the bluesky-syndicator
and micropub-fetch-internal-url patches.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 16:21:58 +01:00
Sven
dac2411a08 test: delete patch-microsub-reader-ap-dispatch 2026-03-16 11:47:06 +01:00
Sven
b24d38ba74 docs: add changelog section to README for last 20 commits
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 23:19:45 +01:00
Sven
af7c89b2c5 update: fix npm 2026-03-14 13:56:54 +01:00
svemagie
3f367610f5 fix: force one-time ai: block resync for posts with stale files
The v3 patch bug allowed Micropub to update MongoDB with aiTextLevel/
aiCodeLevel values but write post files without the ai: frontmatter
block (supportsAiDisclosure was always false). Re-saving with the same
values correctly returned "no properties changed" — but the file on disk
remained stale.

New patch (patch-micropub-ai-block-resync.mjs) adds _aiBlockVersion to
each post document in MongoDB. On update, if a post has AI fields but
_aiBlockVersion != "v4", the no-change check is bypassed and the file
is force-rewritten exactly once. Subsequent no-change saves behave
normally.

Also adds AI transparency section to README documenting the full
implementation, patch chain, v4 root cause, and re-save instructions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 09:03:22 +01:00
svemagie
13d662cff6 Add comments endpoint locale patch and translations 2026-03-09 22:13:39 +01:00
svemagie
31129c48e1 Fix FreeBSD rc.d restart behavior and poller lifecycle 2026-03-09 21:08:56 +01:00
svemagie
529fa81cd0 Add webmention sender auto-poll for bare-metal 2026-03-09 20:10:16 +01:00
svemagie
1365f696f0 fix(activitypub): handle publication host private DNS lookups 2026-03-09 19:39:04 +01:00
svemagie
fed5657957 Add webmentions proxy endpoint integration 2026-03-09 14:10:59 +01:00