docs: document 2026-03-19–21 changes (webmention, AP likes, repost commentary, AI patches)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
65
README.md
65
README.md
@@ -648,6 +648,63 @@ Environment variables are loaded from `.env` via `dotenv`. See `indiekit.config.
|
||||
|
||||
## Changelog
|
||||
|
||||
### 2026-03-21
|
||||
|
||||
**chore(deps): update activitypub fork to v3.6.8** (`fad383dfe`)
|
||||
Pulls the merged upstream `feat/mastodon-client-api` branch into svemagie/indiekit-endpoint-activitypub (`f029c31`). Ships a full Mastodon Client API compatibility layer (`lib/mastodon/`), 13 additional locale files, and builds `signatureTimeWindow`/`allowPrivateAddress` directly into `federation-setup.js` — `patch-ap-allow-private-address` now cleanly detects "already up to date".
|
||||
|
||||
**fix(activitypub): serve AP-likes with canonical id and proper Like dispatcher** (`99d2e380`)
|
||||
Replaces the fake-Note approach with strict AP protocol compliance. Four new patch scripts:
|
||||
- `patch-ap-like-note-dispatcher`: reverts 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 post on the remote instance
|
||||
|
||||
**fix(activitypub): add Like vocab import in activity dispatcher patch** (`535e6f5e`)
|
||||
On fresh installs where the old wrong patch was never applied, `Like` was absent from the `@fedify/fedify/vocab` import block, causing a `ReferenceError` at startup. The dispatcher patch now adds `Like` to the import if missing.
|
||||
|
||||
**fix(syndicate): normalize syndication property to array before dedup check** (`34d5fde5`)
|
||||
Micropub's `replaceEntries()` stores single-value arrays as plain strings. Spreading a string into `[...str]` gives individual characters, so `hasSyndicationUrl()` never matched and `alreadySyndicated` was always false — causing re-syndication on every webhook trigger. Fix: use `[].concat()` which safely handles both string and array values.
|
||||
|
||||
**feat(deploy): trigger syndication webhook after successful deployment** (`b16c60ad`)
|
||||
Added a `workflow_dispatch`-compatible step to `.github/workflows/deploy.yml` that fires a configurable webhook URL after a successful deploy. Subsequently reverted (`9668485b`) and moved to the blog repo.
|
||||
|
||||
**fix(activitypub): remove federation-diag inbox logging** (`109d39dd`)
|
||||
New `patch-ap-remove-federation-diag.mjs` strips the verbose federation diagnostics log added during debugging.
|
||||
|
||||
**chore: silence github contribution log** (`25488257`)
|
||||
New `patch-endpoint-github-contributions-log.mjs` suppresses the noisy per-contribution log line from the GitHub store endpoint.
|
||||
|
||||
---
|
||||
|
||||
### 2026-03-20
|
||||
|
||||
**fix(ap): include commentary in repost ActivityPub activities** (`b53afe2e`)
|
||||
Reposts with a body were silently broken in two ways: (1) `jf2ToAS2Activity()` always emitted a bare `Announce` pointing at an external URL that doesn't serve AP JSON, so Mastodon dropped the activity from followers' timelines; (2) `jf2ToActivityStreams()` hard-coded Note content to `🔁 <url>`, ignoring `properties.content`. New `patch-ap-repost-commentary.mjs` (4 targeted replacements): skips the `Announce` early-return when commentary is present and falls through to `Create(Note)` instead; formats Note as `<commentary>\n\n🔁 <url>`; extracts commentary in the content-negotiation path. Pure reposts (no body) keep the `Announce` behaviour unchanged.
|
||||
|
||||
**chore(ai): remove custom AI patches superseded by upstream endpoint-posts@beta.44** (`fe0f347e`)
|
||||
Removed 6 patch scripts now handled natively by upstream:
|
||||
- `patch-preset-eleventy-ai-frontmatter` — upstream writes AI frontmatter with hyphenated keys natively
|
||||
- `patch-endpoint-posts-ai-cleanup` — upstream beta.44 removes empty AI fields natively
|
||||
- `patch-endpoint-posts-ai-fields` — upstream beta.44 has AI form UI inline in `post-form.njk`
|
||||
- `patch-micropub-ai-block-resync` — one-time stale-block migration, no longer relevant
|
||||
- `patch-endpoint-posts-prefill-url` — upstream beta.44 has native prefill from query params
|
||||
- `patch-endpoint-posts-search-tags` — upstream beta.44 has native search/filter/sort UI
|
||||
|
||||
Also bumped `@rmdes/indiekit-endpoint-posts` beta.25→beta.44 and removed `camelCase` AI field names from all `postTypes.fields` in `indiekit.config.mjs`.
|
||||
|
||||
**fix(webmention): livefetch evolution v3→v5** (`11d600058`, `7f9f02bc3`, `17b93b3a2`)
|
||||
Three successive fixes to the webmention sender livefetch patch, driven by split-DNS and jail networking constraints:
|
||||
|
||||
- **v3** (`11d600058`): Send `Host: blog.giersig.eu` on internal fetches so nginx routes to the correct vhost; add `fetchUrl` diagnostics and response body preview on h-entry check failure
|
||||
- **v4** (`7f9f02bc3`): Remove `INTERNAL_FETCH_URL` rewrite for live page fetches — post URLs require authentication on the internal nginx vhost (returns login page). Fetch from `postUrl` (public URL) directly. Add `WEBMENTION_LIVEFETCH_URL` as an opt-in override
|
||||
- **v5** (`17b93b3a2`): Replace live page fetch entirely with a synthetic h-entry HTML snippet built from `post.properties` stored in MongoDB (`in-reply-to`, `like-of`, `bookmark-of`, `repost-of`, `content.html`). No network fetch required — eliminates all split-DNS / auth reliability issues
|
||||
|
||||
**fix: h-entry double-quote typo in livefetch patch** (`750267b17`)
|
||||
Removed a stray extra closing quote (`h-entry""`) introduced in the v2 patch, which broke the string match on case-sensitive systems.
|
||||
|
||||
---
|
||||
|
||||
### 2026-03-19
|
||||
|
||||
**feat: deliver likes as bookmarks, revert announce cc, add OG images** (`45f8ba9` in svemagie/indiekit-endpoint-activitypub)
|
||||
@@ -663,6 +720,14 @@ Merged 15 upstream commits adding: manual follow approval, custom emoji, FEP-8fc
|
||||
|
||||
**fix: update patch-ap-allow-private-address for v2.15 comment style** — The upstream `createFederation` block changed its comment format; updated the patch to match.
|
||||
|
||||
**fix: patch webmention-sender syntax error** (`c6b0e702`)
|
||||
`@rmdes/indiekit-endpoint-webmention-sender@1.0.8` shipped with a typo: `_html.includes("h-entry"")` — the extra closing quote causes a `SyntaxError` at startup and prevents the background sync from ever running. New `patch-webmention-sender-hentry-syntax.mjs` fixes the typo before any other webmention-sender patches run.
|
||||
|
||||
**fix: livefetch v2 patch improvements** (`711958b8`)
|
||||
- retry patch: silently skips when livefetch v2 marker is present (no more misleading "target snippet not found (package updated?)" noise on every startup)
|
||||
- livefetch: match `h-entry"` or `h-entry ` instead of bare `h-entry` to avoid false positives from body text containing the string
|
||||
- reset-stale: update comment to reference livefetch v2 as the patch that prevents recurrence
|
||||
|
||||
**fix(webmention): validate live page has .h-entry before processing** (`c4f654fe`)
|
||||
Root cause of stuck webmentions: the livefetch got a 200 OK response that was actually an nginx 502 or login-redirect HTML page. No `.h-entry` → `extractLinks` found 0 links → post permanently marked as sent with empty results.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user