Changeset 3b43e4c in Klonkt for test/thread.test.js


Ignore:
Timestamp:
08/08/2026 02:33:28 AM (5 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
06bae1e
Parents:
50e80ac
Message:

De gate-familie functioneel: acht poorten die echt schakelen (shaer-ahy.1)

Barts opdracht (8-8): "maak ze allemaal maar functioneel." Alle
setting-gates uit de catalogus hebben nu een kolom, zijn voorstelbaar en
beslisbaar via de bestaande tally, en worden ECHT afgedwongen -- bij de
aflevering (wat dicht is wordt nooit geserialiseerd, de regel die de
embeds al hadden) of bij de inname (wat de ward niet mag versturen
weigert de outbox met een eerlijke 403).

externalThreads de thread-kring (shaer-9y2): dicht is de kring van de

guardians met telling, open is alles; per verzoek en
buiten de threadcache om, want een poort die net
dichtging mag niet twee minuten open nawerken

images/music bijlagen gefilterd op mediaType, ook in de thread
quoteCards shaer:quote niet geserialiseerd
customEmoji Emoji-tags en byline-emoji niet geserialiseerd; de

:shortcode: blijft als tekst staan, dat is eerlijk

messages de berichten-poot dicht voor vreemden en vrienden,

maar NOOIT voor het guardian-kanaal, en de outbox
weigert directe berichten -- behalve de reddingsboei:
een poort die het hulpkanaal afsnijdt beschermt
niemand

compose de outbox weigert eigen posts; een antwoord valt

onder het gesprek, niet onder een eigen podium

accountMove de harde weigering van shaer-tge is een gate

geworden met dezelfde standaard: guardians kunnen
hem nu openzetten

De capabilities dragen de hele familie, zodat de app VOORAF weet wat hij
mag aanbieden -- de (+) kaart leest shaer:compose al. De voorstelroute
herschreef een onbekende feature stilletjes naar externalEmbeds; dat is
nu een 400, want een voorstel dat op de verkeerde poort landt mag een
guardian nooit overkomen. Het paneel leest de standen catalogusbreed.

TWEE blijven bewust gepland. publicProfile is niet een veld dat je
wegfiltert maar het hele publieke web-oppervlak (de ontwerpvraag van
shaer-hj0); een half slot leest als een heel slot en dat is gevaarlijker
dan geen. independence draagt gezag over een kind over en zijn vorm
hoort bij shaer-90v beslist te worden, niet hier geimproviseerd.

Zestien nieuwe/aangepaste toetsen, alle 640 groen.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/thread.test.js

    r50e80ac r3b43e4c  
    6565
    6666test('een gewone lezer krijgt alles behalve de geblokkeerde, oudste eerst, geschoond', async () => {
    67   const uit = await AP.getThread('kind', BRON, { isWard: false });
     67  const uit = await AP.getThread('kind', BRON);
    6868  assert.equal(uit.found, true);
    6969  assert.equal(uit.notes.length, 2);
     
    7474  assert.ok(!uit.notes[1].content.includes('<script'), 'script weggeschoond');
    7575  assert.ok(uit.notes[1].content.includes('Hoi!'));
    76   // Een blokkade is onzichtbaar: niet in de lijst en NIET in de telling.
    77   assert.equal(uit.hidden, 0);
     76  // Een blokkade is onzichtbaar: niet in de lijst en NIET in een telling --
     77  // getThread telt sindsdien niets meer, dat doet de kringfilter in de route.
     78  assert.equal(uit.hidden, undefined);
    7879  assert.ok(uit.notes.every((n) => n.attributedTo !== GEBLOKT));
    7980  // FEP-9098: alleen de echte emoji komt door -- niet de hashtag, niet de
     
    8687});
    8788
    88 test('een ward ziet alleen de kring van de guardians, de rest wordt geteld', async () => {
    89   // Eigen cache-sleutel per (slug, uri) zou hier de vorige uitkomst hergeven;
    90   // een andere slug dwingt een verse opbouw af zonder aan de cache te morrelen.
     89test('de kringfilter houdt goedgekeurd volk en telt de rest (de dichte stand van de gate)', async () => {
     90  // Sinds de gate (shaer-9y2) zit de kring in de ROUTE, per verzoek en buiten
     91  // de threadcache om -- een poort die net dichtging mag niet twee minuten
     92  // open nawerken. Hier de functie zelf.
    9193  db.prepare("INSERT INTO sites (id, slug, title, owner_id) VALUES ('s2', 'pupil', 'Pupil', 'u1')").run();
    9294  db.prepare("INSERT INTO ap_following (slug, actor_uri, status) VALUES ('pupil', ?, 'accepted')").run(TANTE);
    93   db.prepare("INSERT INTO ap_blocks (slug, kind, target) VALUES ('pupil', 'actor', ?)").run(GEBLOKT);
    94   const uit = await AP.getThread('pupil', BRON, { isWard: true });
    95   assert.equal(uit.notes.length, 1);
    96   assert.equal(uit.notes[0]['shaer:author'].name, 'tante');
     95  const uit = await AP.getThread('kind', BRON);
     96  const kring = AP.filterThreadToCircle('pupil', uit.notes);
     97  assert.equal(kring.notes.length, 1);
     98  assert.equal(kring.notes[0]['shaer:author'].name, 'tante');
    9799  // De vreemde is er, en dat mag gezegd: geteld, niet stil weggelaten.
    98   assert.equal(uit.hidden, 1);
     100  assert.equal(kring.hidden, 1);
    99101});
    100102
    101103test('een onbereikbare note zegt dat, in plaats van een lege thread te veinzen', async () => {
    102   const uit = await AP.getThread('kind', 'https://203.0.113.99/weg', { isWard: false });
     104  const uit = await AP.getThread('kind', 'https://203.0.113.99/weg');
    103105  assert.equal(uit.found, false);
    104106  assert.equal(uit.notes.length, 0);
     
    126128    return vorige(url);
    127129  };
    128   const uit = await AP.getThread('kind', MPOST, { isWard: false });
     130  const uit = await AP.getThread('kind', MPOST);
    129131  globalThis.fetch = vorige;
    130132  assert.equal(uit.notes.length, 1, 'het antwoord op de next-pagina is gevonden');
     
    136138  const vorige = globalThis.fetch;
    137139  globalThis.fetch = async (...a) => { calls += 1; return vorige(...a); };
    138   const uit = await AP.getThread('kind', BRON, { isWard: false });
     140  const uit = await AP.getThread('kind', BRON);
    139141  assert.equal(uit.notes.length, 2);
    140142  assert.equal(calls, 0, 'alles uit de cache, nul fetches');
Note: See TracChangeset for help on using the changeset viewer.