Changeset 44dfbd2 in Klonkt
- Timestamp:
- 08/13/2026 08:32:21 PM (4 weeks ago)
- Branches:
- main
- Children:
- 4766720
- Parents:
- 54b027a
- Files:
-
- 2 edited
-
src/services/ActivityPubService.js (modified) (2 diffs)
-
test/move-guardianship.test.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ActivityPubService.js
r54b027a r44dfbd2 5783 5783 return 202; // decline to act; no 4xx, the sender may be a well-meaning retrying server 5784 5784 } 5785 // EERST de guardianship, DAARNA pas de follows. Die volgorde is geen netheid 5786 // maar de hele werking, en hij is met bloed geschreven: bij Robins verhuizing 5787 // op 13-8 stond het andersom en het log liet precies zien wat er dan gebeurt. 5788 // 5789 // [AP] outgoing Follow beta → .../robo (gated, awaiting guardians) 5790 // 5791 // Beta is zelf een ward. Zijn UITGAANDE follow naar de verhuisde guardian werd 5792 // gepoort (§5.3), want op dat moment stond het nieuwe adres nog niet in zijn 5793 // guardian-lijst: de code hieronder had de relatie nog niet bijgewerkt. En de 5794 // INKOMENDE kant heeft hetzelfde probleem, want de ward gate't een Follow van 5795 // een onbekende. Dus beide richtingen bleven hangen op goedkeuring die niemand 5796 // hoefde te geven, omdat het om een guardian ging die er al was. 5797 // 5798 // Met de relatie eerst is de verhuisde actor al een erkende guardian als de 5799 // follows langskomen, en gaat de auto-acceptatie gewoon door. 5800 // 5801 // Een Move is een Move: de guardian is dezelfde guardian, het kind is hetzelfde 5802 // kind, alleen het adres is nieuw. Zelfde bescherming als de re-follow: alleen 5803 // na een geverifieerde Move, en niet naar een geblokkeerde bestemming (daar 5804 // zijn we hierboven al uitgestapt). De twee harde randen van shaer-tge staan 5805 // hier LOS van: weigeren te verhuizen naar een instance die shaer:guardians 5806 // niet kan dragen is een controle aan de UITGAANDE kant, en het 5807 // terugkeren-zonder-set is een alsoKnownAs-kwestie. 5808 try { 5809 const g = db.prepare('SELECT slug, role FROM ap_guardianships WHERE other_uri = ? AND status = ?').all(oldUri, 'accepted'); 5810 if (g.length) { 5811 const r = db.prepare('UPDATE ap_guardianships SET other_uri = ? WHERE other_uri = ? AND status = ?').run(newUri, oldUri, 'accepted'); 5812 console.log('[AP] guardianship moved:', oldUri, '→', newUri, `(${r.changes}x)`, g.map((x) => `${x.role}:${x.slug}`).join(', ')); 5813 } 5814 } catch (e) { console.warn('[AP] guardianship move failed:', e && e.message); } 5815 5785 5816 for (const row of rows) { 5786 5817 const site = db.prepare('SELECT * FROM sites WHERE slug = ?').get(row.slug); … … 5795 5826 } 5796 5827 } 5797 // Een Move is een Move: de guardian is dezelfde guardian, het kind is hetzelfde5798 // 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 de5800 // oude URI. Dat leverde de vervelendste toestand op: de guardian ziet de posts5801 // nog binnenkomen, terwijl alles dat op other_uri matcht omvalt (de gate op een5802 // nieuwe volger, het escalatiepad, listGuardians bij het kind). Half een5803 // vangnet ziet eruit als een heel vangnet.5804 //5805 // Zelfde bescherming als de re-follow hierboven: alleen na een geverifieerde5806 // 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 verhuizen5808 // naar een instance die shaer:guardians niet kan dragen is een controle aan de5809 // UITGAANDE kant, en het terugkeren-zonder-set is een alsoKnownAs-kwestie.5810 try {5811 const g = db.prepare('SELECT slug, role FROM ap_guardianships WHERE other_uri = ? AND status = ?').all(oldUri, 'accepted');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); }5817 5828 return 202; 5818 5829 } -
test/move-guardianship.test.js
r54b027a r44dfbd2 92 92 }); 93 93 94 // De VOLGORDE, niet de uitkomst. De tests hierboven slagen ook als de relatie pas 95 // na de follows wordt bijgewerkt, en juist dat ging mis bij Robins verhuizing: 96 // 97 // [AP] outgoing Follow beta → .../robo (gated, awaiting guardians) 98 // 99 // Beta is zelf een ward, dus zijn uitgaande follow naar de verhuisde guardian werd 100 // gepoort omdat het nieuwe adres nog niet in zijn guardian-lijst stond. Beide 101 // richtingen bleven hangen op een goedkeuring die niemand hoefde te geven. 102 test('de guardianship is al bijgewerkt VOORDAT de follow uitgaat', async () => { 103 let standTijdensFollow = null; 104 const stil = console.log; console.log = () => {}; 105 try { 106 await AP.handleMoveInbox(move, { 107 ...stubs, 108 followFn: async () => { 109 // Op dit moment moet de gate aan de andere kant ons al kennen. 110 standTijdensFollow = db.prepare('SELECT other_uri FROM ap_guardianships').get().other_uri; 111 return true; 112 }, 113 }); 114 } finally { console.log = stil; } 115 116 assert.equal(standTijdensFollow, NIEUW, 117 'staat de relatie hier nog op het oude adres, dan gate\'t de ward de follow van zijn eigen guardian'); 118 }); 119 94 120 test('een Move naar een geblokkeerde bestemming verandert niets', async () => { 95 121 db.prepare('INSERT INTO ap_blocks (slug, target, kind) VALUES (?,?,?)').run('voogd', NIEUW, 'actor');
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)