` with the appropriate microformat anchor tags. No live page fetch, no nginx dependency, no networking failures. Logs which properties were found per post. Upgrades from any prior version (v1–v5) in-place.
**`patch-webmention-sender-retry.mjs`**
-Predecessor to livefetch, now fully superseded. Silently skips when livefetch v2 marker is present so it does not log misleading "package updated?" warnings. Kept in case livefetch fails to find its target (acts as a partial fallback).
+Predecessor to livefetch, now fully superseded. Silently skips when any livefetch version marker is detected (regex: `/\[patched:livefetch(?::v\d+)?\]/`). Kept as safety fallback in case livefetch fails to find its target.
-**`patch-webmention-sender-reset-stale.mjs`** (v9)
-One-time migration (guarded by a `migrations` MongoDB collection entry, currently `webmention-sender-reset-stale-v9`) that resets posts incorrectly marked as webmention-sent with empty results. Matches both old numeric-zero format and new v1.0.6+ empty-array format. Bump the `MIGRATION_ID` to re-run after future bugs.
+**`patch-webmention-sender-reset-stale.mjs`** (v11)
+One-time migration (guarded by a `migrations` MongoDB collection entry, currently `webmention-sender-reset-stale-v11`) that resets posts incorrectly marked as webmention-sent with empty results. Matches both old numeric-zero format and new v1.0.6+ empty-array format. Bump the `MIGRATION_ID` to re-run after future bugs.
### Bluesky syndicator
@@ -906,6 +899,23 @@ Removed a stray extra closing quote (`h-entry""`) introduced in the v2 patch, wh
---
+### 2026-03-27
+
+**fix(webmention): livefetch v6 — synthetic h-entry from stored properties, no live fetch**
+Root cause of persistent webmention failures: the livefetch patch was fetching the live page through nginx port 80, which `000-defaults.conf` answered with HTTP 444 (silent connection drop) for any request whose `Host` header didn't match a known `server_name`. The poller sent `Host: 10.100.0.10` (the nginx jail IP), which matched nothing.
+
+v6 eliminates the live-page fetch entirely. Instead, it reads the stored post properties from MongoDB and builds a minimal synthetic `
` with anchor tags for each microformat property (`in-reply-to`, `like-of`, `bookmark-of`, `repost-of`, `syndication`) plus the stored `content.html`. This is reliable, fast, and requires no networking.
+
+Additional changes:
+- livefetch v6: adds `console.log` per post showing which properties produced links — makes future debugging possible without server access
+- livefetch v6: upgrades from any prior version (v1–v5) in-place via per-version end-marker detection
+- retry patch: regex now matches `[patched:livefetch]` and `[patched:livefetch:vN]` for all versions
+- reset-stale v11: bumped to retry posts stuck before v6 deployment
+- start.sh: poller now uses `INDIEKIT_DIRECT_URL=http://INDIEKIT_BIND_HOST:PORT` instead of `INTERNAL_FETCH_URL` (nginx); poller was timing out for 180s every restart due to the 444 responses
+
+**chore: `sharp_from_source=true` in `.npmrc`**
+Builds the `sharp` native module from source for FreeBSD compatibility (no prebuilt binary available).
+
### 2026-03-19
**feat: deliver likes as bookmarks, revert announce cc, add OG images** (`45f8ba9` in svemagie/indiekit-endpoint-activitypub)