Changeset 47db4b5 in Klonkt


Ignore:
Timestamp:
08/13/2026 07:53:48 PM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
54b027a
Parents:
f926d13
Message:

Een Move is een Move: de guardianship verhuist mee

Robins redenering, en die is korter dan de mijne: de guardian is nog steeds
dezelfde guardian, dus dat mag gewoon gebeuren. Dat klopt met de spec. FEP-633c §5
zegt dat toezicht een gewone Follow is, en die verhuisde hier al mee, inclusief de
uitgelicht-stand.

Alleen de RELATIE bleef aan de oude URI hangen. Daar stond een console.warn met
"left untouched (shaer-tge)" en verder niets. Dat gaf de vervelendste toestand van
allemaal: de guardian ziet de posts van het kind gewoon binnenkomen, terwijl alles
dat op other_uri matcht omvalt (de gate op een nieuwe volger, het escalatiepad,
listGuardians bij het kind). Half een vangnet ziet eruit als een heel vangnet, en
dan merk je het pas op het moment dat het nodig is.

Nu een UPDATE naast de re-follow, met dezelfde bescherming eromheen: alleen na een
geverifieerde Move, alleen voor een geaccepteerde relatie, en niet naar een
geblokkeerde bestemming.

De twee harde randen van shaer-tge blijven staan en gaan over iets anders dan ik
eerst dacht: weigeren te verhuizen naar een instance die shaer:guardians niet kan
dragen is een controle aan de UITGAANDE kant, en terugkeren-zonder-set is een
alsoKnownAs-kwestie. Die bead blijft dus open, maar smaller.

Changed files:
src/services/ActivityPubService.js

  • handleMoveInbox werkt ap_guardianships.other_uri bij in plaats van te waarschuwen

New file:
test/move-guardianship.test.js

  • de relatie wijst na de Move naar het nieuwe adres, en verdubbelt niet
  • de Follow verhuist mee met de uitgelicht-stand
  • een NIET-geverifieerde Move raakt hem niet aan (anders haalt een vreemde een kind bij zijn guardians weg met een verzonnen Move)
  • een nog niet geaccepteerde relatie blijft staan
  • een geblokkeerde bestemming verandert niets

remarks: tegenproef gedaan. Zonder de fix valt alleen test 1 om en blijven de vier
bewakingstests groen, dus ze meten de reparatie en niet zichzelf. Suite 932 groen in
UTC en Europe/Amsterdam. Onderweg had ik de kolomnaam van ap_blocks verkeerd
(target, niet actor_uri); dat was mijn test, niet de code.

FEP-633c zegt NIETS over verhuizen. Dat is een gat in de spec, niet alleen in
Klonkt, en het is een paragraaf waard.

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

Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ActivityPubService.js

    rf926d13 r47db4b5  
    57955795    }
    57965796  }
     5797  // Een Move is een Move: de guardian is dezelfde guardian, het kind is hetzelfde
     5798  // kind, alleen het adres is nieuw. Toezicht IS een gewone Follow (FEP-633c §5),
     5799  // en die is hierboven al meeverhuisd -- maar de relatie zelf hing nog aan de
     5800  // oude URI. Dat leverde de vervelendste toestand op: de guardian ziet de posts
     5801  // nog binnenkomen, terwijl alles dat op other_uri matcht omvalt (de gate op een
     5802  // nieuwe volger, het escalatiepad, listGuardians bij het kind). Half een
     5803  // vangnet ziet eruit als een heel vangnet.
     5804  //
     5805  // Zelfde bescherming als de re-follow hierboven: alleen na een geverifieerde
     5806  // Move, en niet als de bestemming geblokkeerd is (daar zijn we al uitgestapt).
     5807  // De twee harde randen van shaer-tge staan hier LOS van: weigeren te verhuizen
     5808  // naar een instance die shaer:guardians niet kan dragen is een controle aan de
     5809  // UITGAANDE kant, en het terugkeren-zonder-set is een alsoKnownAs-kwestie.
    57975810  try {
    57985811    const g = db.prepare('SELECT slug, role FROM ap_guardianships WHERE other_uri = ? AND status = ?').all(oldUri, 'accepted');
    5799     if (g.length) console.warn('[AP] Move touches a guardianship party — left untouched (shaer-tge):', oldUri, '→', g.map((r) => `${r.role}:${r.slug}`).join(', '));
    5800   } catch { /* table absent on fresh init */ }
     5812    if (g.length) {
     5813      const r = db.prepare('UPDATE ap_guardianships SET other_uri = ? WHERE other_uri = ? AND status = ?').run(newUri, oldUri, 'accepted');
     5814      console.log('[AP] guardianship moved:', oldUri, '→', newUri, `(${r.changes}x)`, g.map((x) => `${x.role}:${x.slug}`).join(', '));
     5815    }
     5816  } catch (e) { console.warn('[AP] guardianship move failed:', e && e.message); }
    58015817  return 202;
    58025818}
Note: See TracChangeset for help on using the changeset viewer.