- Timestamp:
- 08/08/2026 08:27:03 PM (4 weeks ago)
- Branches:
- main
- Children:
- ea211b9
- Parents:
- d1075a1
- git-author:
- Robin <roboburr@…> (08/08/2026 08:27:01 PM)
- git-committer:
- roboburr <roboburr@…> (08/08/2026 08:27:03 PM)
- Location:
- test
- Files:
-
- 1 added
- 3 edited
-
follow-gating.test.js (modified) (1 diff)
-
guardian-follow-gate.test.js (added)
-
guardian-follow-queues.test.js (modified) (1 diff)
-
outgoing-follow-gate.test.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
test/follow-gating.test.js
rd1075a1 r3a0ca0f 22 22 }); 23 23 24 test('all-quorum: needs every guardian', () => { 24 test('een eenvoudige meerderheid beslist: 1 van 2 is genoeg', () => { 25 // WAS: 'all-quorum: needs every guardian'. Barts besluit (8-8) vervangt de 26 // any/all-tweedeling door een meerderheid, en "1/2 is voldoende" waren zijn 27 // woorden. De 'all'-stand die deze toets bewaakte werd nergens gezet -- elke 28 // schrijver gaf 'any' mee -- dus het was een keuze die niemand kon maken. 25 29 G.follows.recordPending('kid', { id: 'f2', follower: STRANGER, inbox: `${STRANGER}/inbox`, quorum: 'all' }); 26 assert.equal(G.follows.decide('f2', MOM, 'approve', [MOM, DAD]).outcome, 'waiting'); 27 assert.equal(G.follows.decide('f2', DAD, 'approve', [MOM, DAD]).outcome, 'approved'); 30 assert.equal(G.follows.decide('f2', MOM, 'approve', [MOM, DAD]).outcome, 'approved'); 31 }); 32 33 test('bij drie guardians is een enkele ja NIET meer genoeg', () => { 34 // De andere kant van hetzelfde besluit: tot vandaag stond dit op 'any', en 35 // dan was een enkele ja genoeg hoeveel guardians er ook waren. Voor iedereen 36 // met drie of meer is dit dus een aanscherping. 37 const GRAN = 'https://gran.example/u/gran'; 38 G.follows.recordPending('kid', { id: 'f2b', follower: STRANGER, inbox: `${STRANGER}/inbox` }); 39 assert.equal(G.follows.decide('f2b', MOM, 'approve', [MOM, DAD, GRAN]).outcome, 'waiting'); 40 assert.equal(G.follows.decide('f2b', DAD, 'approve', [MOM, DAD, GRAN]).outcome, 'approved'); 28 41 }); 29 42 -
test/guardian-follow-queues.test.js
rd1075a1 r3a0ca0f 85 85 assert.ok(inn.includes('f-oud')); 86 86 }); 87 88 // ── De drempel voor een volgverzoek (Barts besluit, 8-8) ──────────────── 89 90 test('een eenvoudige meerderheid: 1 van 2 is voldoende', () => { 91 // Barts woorden. Bewust soepeler dan de POORTdrempel: een gate opent een deur 92 // voor alles wat daarna komt, een volgverzoek gaat over een persoon en is met 93 // ontvolgen terug te draaien. 94 assert.equal(G.follows.followThreshold(1), 1); 95 assert.equal(G.follows.followThreshold(2), 1); 96 assert.equal(G.follows.followThreshold(3), 2); 97 assert.equal(G.follows.followThreshold(4), 2); 98 }); 99 100 test('en dat is een AANSCHERPING, geen versoepeling', () => { 101 // Tot vandaag stond dit op 'any': een enkele ja, hoeveel guardians er ook 102 // waren. Bij drie of meer is er nu meer nodig, niet minder. 103 assert.ok(G.follows.followThreshold(3) > 1); 104 assert.ok(G.follows.followThreshold(5) > 1); 105 }); 106 107 test('nul guardians vraagt nog steeds iemand', () => { 108 // Een lege set mag nooit "iedereen is het eens" opleveren. Dat is de stille 109 // fout waarmee een verzoek zichzelf goedkeurt. 110 assert.equal(G.follows.followThreshold(0), 1); 111 }); 112 113 test('de drempel voor een POORT blijft strikter', () => { 114 // Twee verschillende vragen, twee drempels, en dat verschil is opzet: 2 van 2 115 // voor een gate, 1 van 2 voor een volgverzoek. 116 assert.equal(G.gated.thresholdFor(2), 2); 117 assert.equal(G.follows.followThreshold(2), 1); 118 }); -
test/outgoing-follow-gate.test.js
rd1075a1 r3a0ca0f 110 110 assert.equal(again.status, 'denied', 'tapping follow again does not put it back in front of mum'); 111 111 }); 112 113 // ── De poort zit in followActor, niet alleen in C2S (Barts melding 8-8) ── 114 // 115 // Esmee's volgverzoeken kwamen nooit bij haar guardians aan. Niet omdat een 116 // guardian elders ze niet kon beantwoorden -- die weg werkt -- maar omdat er 117 // nooit een verzoek werd aangemaakt: de poort stond in `case 'Follow'` van de 118 // C2S-outbox, en dus alleen als je via Shaer volgt. Vanuit Klonkts eigen 119 // webinterface liep je er zo omheen. 120 // 121 // Dezelfde deur-naast-de-poort als bij de antwoordpoort (shaer-r4c), en de reden 122 // dat die mutatie 0 fouten gaf: er stond niets op. 123 124 test('een ward die vanaf het WEB volgt wordt ook tegengehouden', async () => { 125 const uit = await AP.followActor(kid, 'https://elders.example/users/webvriend'); 126 assert.equal(uit.held, true, 'vastgehouden, niet gevolgd'); 127 assert.equal(uit.status, 'pending'); 128 // En er ligt echt iets voor de guardians, anders is "held" een leeg gebaar. 129 assert.ok(G.outgoing.findFor('kid', 'https://elders.example/users/webvriend')); 130 }); 131 132 test('ook als het kind met een HANDLE volgt', async () => { 133 // De poort staat NA het oplossen. Zou hij alleen naar de ruwe invoer kijken, 134 // dan is elke @naam@server een sluiproute -- de fout die we hier repareren, 135 // een maat kleiner. 136 const uit = await AP.followActor(kid, 'https://elders.example/users/handlevriend'); 137 assert.equal(uit.held, true); 138 }); 139 140 test('een goedgekeurd verzoek komt er WEL doorheen', async () => { 141 // Zonder deze doorlaat stuit een goedgekeurd verzoek opnieuw op de poort en 142 // wacht het voor eeuwig -- de poort zou zichzelf voeden. 143 const uit = await AP.followActor(kid, 'https://elders.example/users/webvriend', false, { approved: true }); 144 assert.notEqual(uit.held, true); 145 }); 146 147 test('een site ZONDER guardians merkt er niets van', async () => { 148 // Een volwassen account is geen ward. Zou de poort daar ook dichtklappen, dan 149 // kan niemand op deze instance nog iemand volgen. 150 const vrij = site('vrij'); 151 const uit = await AP.followActor(vrij, 'https://elders.example/users/iemand'); 152 assert.notEqual(uit && uit.held, true); 153 });
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)