Changeset 8f8b40f in Klonkt


Ignore:
Timestamp:
07/26/2026 07:26:03 AM (6 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
eb36688
Parents:
97bacf2
Message:

FEP-9098 self-heal (v8): re-capture custom-emoji tags op bestaande timeline-rijen

Optie B: bestaande timeline-posts (van voor de emit-fix) misten emoji_json, dus
oude posts toonden nog :shortcode:. De data is niet lokaal te reconstrueren
(tags waren weggegooid), dus de bestaande versie-gestuurde self-heal haalt elke
note toch al opnieuw op; ik vang daar nu ook de Emoji-tags af en zet emoji_json.
SELFHEAL_VERSION 7 -> 8 triggert een eenmalige heal-pass per instance bij deze
release (achtergrond, retry-until-clean voor kort-offline origins).

Changed files:
src/services/ActivityPubService.js

  • selfHealTimeline: emoji_json in SELECT + change-detection + UPDATE; extractEmojiTags(note.tag)
  • SELFHEAL_VERSION 8

remarks: npm test 173/173. Heelt de recentste 200 timeline-notes per instance
(re-fetch), best-effort; verwijderde/verlopen remote-notes blijven kaal.

-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ActivityPubService.js

    r97bacf2 r8f8b40f  
    26782678// during a flux window, e.g. a fleet-wide update), and drops notes that are gone
    26792679// (404/410). Bump SELFHEAL_VERSION only on a release that warrants a re-sync.
    2680 const SELFHEAL_VERSION = 7; // v7: rerun v6 with retry-until-clean semantics (origins briefly offline no longer stay stale forever)
     2680const SELFHEAL_VERSION = 8; // v8: also re-capture FEP-9098 custom-emoji tags (emoji_json) onto already-cached posts
    26812681async function fetchNoteAP(url) {
    26822682  try {
     
    28592859    if (cur >= SELFHEAL_VERSION) return; // already healed for this version — skip on normal boots
    28602860    let rows = [];
    2861     try { rows = db.prepare('SELECT id, content, media_json, nsfw, cw, url FROM ap_timeline ORDER BY rowid DESC LIMIT 200').all(); } catch { /* no table */ }
     2861    try { rows = db.prepare('SELECT id, content, media_json, nsfw, cw, url, emoji_json FROM ap_timeline ORDER BY rowid DESC LIMIT 200').all(); } catch { /* no table */ }
    28622862    let healed = 0, failed = 0;
    28632863    for (const r of rows) {
     
    28712871        const cw = note.summary || null;
    28722872        const url = note.url || null;          // re-sync the human url (catches a remote slug rename)
    2873         if ((html && html !== r.content) || media !== (r.media_json || '[]') || nsfw !== (r.nsfw || 0) || (cw || '') !== (r.cw || '') || (url && url !== r.url)) {
    2874           db.prepare('UPDATE ap_timeline SET content = ?, media_json = ?, nsfw = ?, cw = ?, url = COALESCE(?, url) WHERE id = ?').run(html || r.content, media, nsfw, cw, url, r.id);
     2873        const emoji = extractEmojiTags(note.tag);   // FEP-9098: re-capture custom-emoji tags (v8)
     2874        if ((html && html !== r.content) || media !== (r.media_json || '[]') || nsfw !== (r.nsfw || 0) || (cw || '') !== (r.cw || '') || (url && url !== r.url) || (emoji || '') !== (r.emoji_json || '')) {
     2875          db.prepare('UPDATE ap_timeline SET content = ?, media_json = ?, nsfw = ?, cw = ?, url = COALESCE(?, url), emoji_json = ? WHERE id = ?').run(html || r.content, media, nsfw, cw, url, emoji, r.id);
    28752876          healed++;
    28762877        }
Note: See TracChangeset for help on using the changeset viewer.