Docs: changelog + WebKit OOM lessons for v0.12.8

Add v0.12.8 entry to CHANGELOG.md with Blossom regex root cause,
WebKit rendering fix, and notification dedup. Add hard-won
Linux/WebKitGTK lessons section to CLAUDE.md (bitmap eviction,
MemoryPressureSettings process boundary, bisect-first, cache vs
leak) and flag safe Blossom URL auto-detection as pending for
v0.12.9.
This commit is contained in:
Jure
2026-04-17 14:16:09 +02:00
parent bc4c72d6a0
commit 704e738d3a
2 changed files with 18 additions and 0 deletions

View File

@@ -1,5 +1,15 @@
# Changelog
## v0.12.8 — Fix Linux OOM crash (2026-04-16)
### Fixed
- Linux WebKit web process no longer grows unbounded to 812 GB and self-kills. Memory now oscillates at ~0.851.6 GB during heavy scrolling on Linux and Windows. Root cause: the Blossom SHA-256 URL auto-detection regex introduced in v0.12.6 caused 35× more `<img>` elements per feed page, which combined with WebKitGTK's weak bitmap eviction pushed the WebProcess past its self-kill threshold. Blossom URL auto-detection is temporarily disabled pending proper validation in v0.12.9.
- WebKit rendering: `WEBKIT_FORCE_SOFTWARE_RENDERING=1` on Linux to keep the Wayland compositor path intact on Hyprland.
- `fetchNotifications` was firing 3× in the first 8 seconds of login; now fires once and the first background poll is delayed to 90s.
### Changed
- v0.12.7 OOM firefighting reverted: follow feed back to 100 events, global feed caches up to 200 — matching pre-crisis v0.12.6 behavior.
## v0.12.7 — Upload Fixes (2026-04-13)
### Fixed

View File

@@ -175,3 +175,11 @@ CI triggers on the tag and builds all three platforms (Ubuntu, Windows, macOS AR
**Not yet implemented:**
- NIP-96 file storage
- Custom feeds / lists
- Safe Blossom URL auto-detection (temporarily disabled in v0.12.8 after OOM regression — needs HEAD `Content-Type` validation or known-server whitelist before reintroduction)
## Hard-won Linux/WebKitGTK lessons
- **WebKitGTK does not evict decoded bitmaps** under memory pressure the way Chromium does. Any path that multiplies `<img>` elements per feed page will translate ~linearly into WebProcess RSS. Validate new "render as image" heuristics (e.g. Blossom SHA-256 URLs) with a real content-type probe before shipping.
- **`MemoryPressureSettings` set on `WebsiteDataManager` only affects the NetworkProcess**, not the WebProcess where decoded bitmaps live. Setting a WebProcess cap requires reaching `WebContext` at construction time (construct-only GObject property) — wry does not currently expose this.
- **Bisect regression windows before investigating root cause.** If memory behavior changed between versions, `git bisect` the release tags first. Four days of WebKit-level investigation was avoidable once the regression was traced to a single commit in v0.12.6.
- **Distinguish caches from leaks.** Oscillating memory = elastic cache (fine). Monotonic growth = leak or uncapped working set (fix it).