Index: src/routes/activitypub.js
===================================================================
--- src/routes/activitypub.js	(revision f549cf53247e0d8d7ccbd330dac9f3f4040c3e92)
+++ src/routes/activitypub.js	(revision 3bbf73d1fa44d3393eeff82f89790687762e1983)
@@ -289,5 +289,5 @@
 // dat evenveel kopieen worden -- en een poort die op een van die plekken
 // vergeten wordt, levert stil iets uit dat dicht hoorde te staan.
-function leesPoorten(site) {
+function gatesFor(site) {
   const isWard = (() => { try { return Guardianship.listGuardians(site.slug).length > 0; } catch { return false; } })();
   const embeds = Guardianship.externalEmbedsAllowed(site.external_embeds, isWard);
@@ -314,5 +314,5 @@
 
 /** De naam waaronder deze lezer zichzelf herkent in een Mention. */
-function eigenHandle(base, slug) {
+function ownHandle(base, slug) {
   try { return `@${slug}@${new URL(base).host}`; } catch { return `@${slug}`; }
 }
@@ -323,5 +323,5 @@
 // opschrijven is twee vormen die uit de pas kunnen lopen, en dat merk je pas
 // als een kaart ergens anders rendert dan waar je keek.
-function berichtItem(m, { base, me, myHandle, p }) {
+function messageItem(m, { base, me, myHandle, p }) {
   return {
     id: `${m.object_uri}#create`,
@@ -359,5 +359,5 @@
 
 /** Een eigen verzonden note als AS2-item, zelfde vorm als de inbox-leg. */
-function verzondenItem(n, { me, mine }) {
+function sentItem(n, { me, mine }) {
   return {
     id: `${n.id}#create`,
@@ -383,32 +383,32 @@
 // ophoudt.
 //
-// Beide lopen langs dezelfde poorten als de inbox-lezing (leesPoorten) en
-// dezelfde kaartvorm (berichtItem/verzondenItem). Messages dicht sluit ook
+// Beide lopen langs dezelfde poorten als de inbox-lezing (gatesFor) en
+// dezelfde kaartvorm (messageItem/sentItem). Messages dicht sluit ook
 // hier vreemden en vrienden, maar nooit het guardian-kanaal en nooit de boei.
-function gesprekItems(req, auth, refs) {
+function conversationItems(req, auth, refs) {
   const base = baseUrl(req);
-  const P = leesPoorten(auth.site);
+  const P = gatesFor(auth.site);
   const me = AP.actorId(base, auth.site.slug);
-  const ctx = { base, me, myHandle: eigenHandle(base, auth.site.slug), p: P };
+  const ctx = { base, me, myHandle: ownHandle(base, auth.site.slug), p: P };
   const mine = AP.selfAuthor(base, auth.site);
   const guardianUris = (() => { try { return new Set(Guardianship.listGuardians(auth.site.slug).map((g) => g.other_uri)); } catch { return new Set(); } })();
 
-  const binnen = new Map(AP.messageRowsByUri(auth.site.slug, refs.filter((r) => r.richting === 'in').map((r) => r.ref))
+  const incoming = new Map(AP.messageRowsByUri(auth.site.slug, refs.filter((r) => r.direction === 'in').map((r) => r.ref))
     .map((m) => [m.object_uri, m]));
-  const uit = [];
+  const items = [];
   for (const r of refs) {
-    if (r.richting === 'in') {
-      const m = binnen.get(r.ref);
+    if (r.direction === 'in') {
+      const m = incoming.get(r.ref);
       if (!m) continue;
       if (!(P.messagesAllowed || m.help_request || guardianUris.has(m.actor_uri))) continue;
-      uit.push(berichtItem(m, ctx));
+      items.push(messageItem(m, ctx));
     } else {
       const n = AP.getOutboxNote(base, r.ref);
       // Je eigen woorden blijven van jou: een dichte messages-poort verbergt
       // niet wat je zelf gezegd hebt.
-      if (n) uit.push(verzondenItem(n, { me, mine }));
+      if (n) items.push(sentItem(n, { me, mine }));
     }
   }
-  return uit;
+  return items;
 }
 
@@ -416,6 +416,6 @@
   const auth = OAuth.verifyBearer(req.headers.authorization);
   if (!auth || auth.site.slug !== req.params.slug) return res.status(403).end();
-  const koppen = AP.conversationHeads(auth.site.slug);
-  const items = gesprekItems(req, auth, koppen);
+  const heads = AP.conversationHeads(auth.site.slug);
+  const items = conversationItems(req, auth, heads);
   AP.sendAP(res, {
     '@context': AP.AP_CONTEXT,
@@ -433,24 +433,24 @@
   const other = String(req.query.with || '');
   if (!/^https?:\/\//i.test(other)) return res.status(400).json({ error: 'with must be an actor URI' });
-  const uit = AP.conversationHistory(auth.site.slug, other, {
+  const page = AP.conversationHistory(auth.site.slug, other, {
     before: req.query.before ? String(req.query.before) : null,
     limit: req.query.limit,
   });
-  const items = gesprekItems(req, auth, uit.rijen);
+  const items = conversationItems(req, auth, page.rows);
   // De paginagrootte reist mee in next: vroeg je om 30, dan hoort de volgende
   // pagina er ook 30 te zijn. Zonder dit wordt hij stilletjes de standaard, en
   // dan klopt het ritme van een 'load more' niet meer met wat de gebruiker ziet.
-  const maat = req.query.limit ? `&limit=${encodeURIComponent(String(req.query.limit))}` : '';
-  const zelf = `${baseUrl(req)}/ap/users/${encodeURIComponent(auth.site.slug)}/messages?with=${encodeURIComponent(other)}`;
+  const size = req.query.limit ? `&limit=${encodeURIComponent(String(req.query.limit))}` : '';
+  const self = `${baseUrl(req)}/ap/users/${encodeURIComponent(auth.site.slug)}/messages?with=${encodeURIComponent(other)}`;
   AP.sendAP(res, {
     '@context': AP.AP_CONTEXT,
-    id: req.query.before ? `${zelf}${maat}&before=${encodeURIComponent(String(req.query.before))}` : `${zelf}${maat}`,
+    id: req.query.before ? `${self}${size}&before=${encodeURIComponent(String(req.query.before))}` : `${self}${size}`,
     type: 'OrderedCollectionPage',
-    partOf: zelf,
+    partOf: self,
     orderedItems: items,
     // De volgende pagina is de standaardvorm van 'er is meer' (AS2). Ontbreekt
     // hij, dan is het gesprek op -- en dat mag de client weten zonder gokken,
     // want anders kan een 'load more' niet eerlijk verschijnen.
-    next: uit.meer && uit.oudste ? `${zelf}${maat}&before=${encodeURIComponent(uit.oudste)}` : undefined,
+    next: page.more && page.oldest ? `${self}${size}&before=${encodeURIComponent(page.oldest)}` : undefined,
   }, 'private, no-store');
 });
@@ -587,8 +587,8 @@
   // here, at serialisation: a blocked embed is never sent, because an embed the
   // client merely hides has still been delivered to the device.
-  // De poorten van deze lezer (leesPoorten): een plek waar ze berekend worden,
+  // De poorten van deze lezer (gatesFor): een plek waar ze berekend worden,
   // zodat de gesprekslezingen dezelfde stand eerbiedigen en niet hun eigen
   // kopie krijgen die kan gaan afwijken.
-  const P = leesPoorten(auth.site);
+  const P = gatesFor(auth.site);
   const {
     embedsAllowed, playbackAllowed, imagesAllowed, musicAllowed, quotesAllowed,
@@ -676,8 +676,8 @@
   // beschermt niemand. De hulpvraag zelf gaat aan de innamekant al altijd voor.
   const guardianUris = (() => { try { return new Set(Guardianship.listGuardians(auth.site.slug).map((g) => g.other_uri)); } catch { return new Set(); } })();
-  const berichtCtx = { base, me, myHandle, p: P };
+  const messageCtx = { base, me, myHandle, p: P };
   const messages = AP.getDirectMessages(auth.site.slug, 60)
     .filter((m) => messagesAllowed || m.help_request || guardianUris.has(m.actor_uri))
-    .map((m) => berichtItem(m, berichtCtx));
+    .map((m) => messageItem(m, messageCtx));
   // Inbound REPLIES on your own posts: stored as interactions (the web's
   // comment machinery), never as mentions, so this read missed them and a
Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision f549cf53247e0d8d7ccbd330dac9f3f4040c3e92)
+++ src/services/ActivityPubService.js	(revision 3bbf73d1fa44d3393eeff82f89790687762e1983)
@@ -4210,12 +4210,12 @@
 // visibility 'direct'. Een publiek antwoord is geen gesprek en hoort niet als
 // gezicht in de hemel.
-const GESPREK_UNIE = `
+const CONVERSATION_UNION = `
   SELECT m.actor_uri AS other, COALESCE(m.published, m.created_at) AS stamp,
-         'in' AS richting, m.object_uri AS ref
+         'in' AS direction, m.object_uri AS ref
     FROM ap_mentions m
    WHERE m.slug = @slug AND m.actor_uri IS NOT NULL AND m.actor_uri <> ''
   UNION ALL
   SELECT j.value AS other, o.created_at AS stamp,
-         'uit' AS richting, o.id AS ref
+         'out' AS direction, o.id AS ref
     FROM ap_outbox o
     JOIN json_each(COALESCE(NULLIF(o.to_actors, ''), json_array(o.to_actor))) j
@@ -4233,7 +4233,7 @@
   try {
     return db.prepare(`
-      SELECT other, stamp, richting, ref FROM (
+      SELECT other, stamp, direction, ref FROM (
         SELECT *, ROW_NUMBER() OVER (PARTITION BY other ORDER BY stamp DESC, ref DESC) AS rn
-          FROM (${GESPREK_UNIE})
+          FROM (${CONVERSATION_UNION})
       ) WHERE rn = 1
       ORDER BY stamp DESC, ref DESC`).all({ slug });
@@ -4260,27 +4260,27 @@
  * ontbreekt alleen iets in het midden.
  */
-const cursorVan = (r) => (r ? `${r.stamp}|${r.ref}` : null);
+const cursorOf = (r) => (r ? `${r.stamp}|${r.ref}` : null);
 
 export function conversationHistory(slug, other, { before = null, limit = 60 } = {}) {
   try {
     const n = Math.min(Math.max(parseInt(limit, 10) || 60, 1), 200);
-    const knip = String(before || '').indexOf('|');
-    const bStamp = before && knip > 0 ? String(before).slice(0, knip) : null;
-    const bRef = before && knip > 0 ? String(before).slice(knip + 1) : null;
-    const rijen = db.prepare(`
-      SELECT other, stamp, richting, ref FROM (${GESPREK_UNIE})
+    const sep = String(before || '').indexOf('|');
+    const bStamp = before && sep > 0 ? String(before).slice(0, sep) : null;
+    const bRef = before && sep > 0 ? String(before).slice(sep + 1) : null;
+    const rows = db.prepare(`
+      SELECT other, stamp, direction, ref FROM (${CONVERSATION_UNION})
        WHERE other = @other
          AND (@bStamp IS NULL OR stamp < @bStamp OR (stamp = @bStamp AND ref < @bRef))
        ORDER BY stamp DESC, ref DESC LIMIT @n`).all({ slug, other, bStamp, bRef, n: n + 1 });
-    const meer = rijen.length > n;
-    const uit = meer ? rijen.slice(0, n) : rijen;
-    return { rijen: uit, meer, oudste: cursorVan(uit[uit.length - 1]) };
-  } catch { return { rijen: [], meer: false, oudste: null }; }
+    const more = rows.length > n;
+    const page = more ? rows.slice(0, n) : rows;
+    return { rows: page, more, oldest: cursorOf(page[page.length - 1]) };
+  } catch { return { rows: [], more: false, oldest: null }; }
 }
 
 // De kolommen die een bericht tot kaart maken. Een constante, want de
-// gesprekslezing haalt dezelfde rijen op: twee lijsten die uiteenlopen leveren
+// gesprekslezing haalt dezelfde rows op: twee lijsten die uiteenlopen leveren
 // een kaart die op de ene plek een plaatje heeft en op de andere niet.
-const BERICHT_KOLOMMEN = `
+const MESSAGE_COLUMNS = `
       m.object_uri, m.note_url, m.actor_uri, m.actor_name, m.actor_handle, m.actor_icon, m.actor_url,
       m.content, m.published, m.created_at, m.wave, m.help_request,
@@ -4293,5 +4293,5 @@
   try {
     const gaten = lijst.map(() => '?').join(',');
-    return db.prepare(`SELECT ${BERICHT_KOLOMMEN} FROM ap_mentions m
+    return db.prepare(`SELECT ${MESSAGE_COLUMNS} FROM ap_mentions m
                         WHERE m.slug = ? AND m.object_uri IN (${gaten})`).all(slug, ...lijst);
   } catch { return []; }
@@ -4301,5 +4301,5 @@
   try {
     return db.prepare(`
-      SELECT ${BERICHT_KOLOMMEN}
+      SELECT ${MESSAGE_COLUMNS}
       FROM ap_mentions m
       WHERE m.slug = ?
Index: test/conversations.test.js
===================================================================
--- test/conversations.test.js	(revision f549cf53247e0d8d7ccbd330dac9f3f4040c3e92)
+++ test/conversations.test.js	(revision 3bbf73d1fa44d3393eeff82f89790687762e1983)
@@ -26,8 +26,8 @@
 const VREEMDE = 'https://elders/u/vreemde';
 
-const binnen = (uri, van, stamp) =>
+const arrived = (uri, van, stamp) =>
   db.prepare(`INSERT INTO ap_mentions (slug, object_uri, actor_uri, actor_name, content, published)
               VALUES ('kind', ?, ?, 'iemand', '<p>hoi</p>', ?)`).run(uri, van, stamp);
-const verstuurd = (id, naar, stamp, visibility = 'direct') =>
+const sent = (id, naar, stamp, visibility = 'direct') =>
   db.prepare(`INSERT INTO ap_outbox (id, site_slug, post_id, to_actor, to_actors, content, visibility, created_at)
               VALUES (?, 'kind', 'p1', ?, ?, '<p>terug</p>', ?, ?)`)
@@ -35,10 +35,10 @@
 
 // Een DRUK gesprek met oma: genoeg om in de oude lezing de rest weg te drukken.
-for (let i = 0; i < 80; i++) binnen(`https://elders/n/oma-${i}`, OMA, `2026-08-09T10:${String(i % 60).padStart(2, '0')}:00Z`);
+for (let i = 0; i < 80; i++) arrived(`https://elders/n/oma-${i}`, OMA, `2026-08-09T10:${String(i % 60).padStart(2, '0')}:00Z`);
 // En een stil gesprek met tante, ouder dan al die drukte.
-binnen('https://elders/n/tante-1', TANTE, '2026-08-01T09:00:00Z');
-verstuurd('mijn-1', TANTE, '2026-08-01T09:30:00Z');
+arrived('https://elders/n/tante-1', TANTE, '2026-08-01T09:00:00Z');
+sent('mijn-1', TANTE, '2026-08-01T09:30:00Z');
 // Een PUBLIEK antwoord aan een vreemde is geen gesprek.
-verstuurd('mijn-publiek', VREEMDE, '2026-08-09T12:00:00Z', 'public');
+sent('mijn-publiek', VREEMDE, '2026-08-09T12:00:00Z', 'public');
 
 test('de oude lezing verliest tante achter een druk gesprek -- dat is de bug', () => {
@@ -49,6 +49,6 @@
 
 test('een rij per tegenpartij, hoe druk de drukste ook is', () => {
-  const koppen = AP.conversationHeads('kind');
-  assert.deepEqual(koppen.map((k) => k.other), [OMA, TANTE], 'nieuwste gesprek eerst, allebei aanwezig');
+  const heads = AP.conversationHeads('kind');
+  assert.deepEqual(heads.map((k) => k.other), [OMA, TANTE], 'nieuwste gesprek eerst, allebei aanwezig');
 });
 
@@ -58,8 +58,8 @@
 
 test('het gesprek draagt beide kanten onder EEN limiet', () => {
-  const g = AP.conversationHistory('kind', TANTE, { limit: 60 });
-  assert.equal(g.rijen.length, 2);
-  assert.deepEqual(g.rijen.map((r) => r.richting), ['uit', 'in'], 'nieuwste eerst, mijn antwoord bovenaan');
-  assert.equal(g.meer, false);
+  const talk = AP.conversationHistory('kind', TANTE, { limit: 60 });
+  assert.equal(talk.rows.length, 2);
+  assert.deepEqual(talk.rows.map((r) => r.direction), ['out', 'in'], 'nieuwste eerst, mijn antwoord bovenaan');
+  assert.equal(talk.more, false);
 });
 
@@ -67,21 +67,21 @@
   // De 80 berichten van oma delen stempels (i % 60), en dat is met opzet:
   // twee berichten in dezelfde seconde is bij DM's een gesprek, geen randgeval.
-  const eerste = AP.conversationHistory('kind', OMA, { limit: 30 });
-  assert.equal(eerste.rijen.length, 30);
-  assert.equal(eerste.meer, true, 'er is meer, en dat mag de client weten');
+  const first = AP.conversationHistory('kind', OMA, { limit: 30 });
+  assert.equal(first.rows.length, 30);
+  assert.equal(first.more, true, 'er is meer, en dat mag de client weten');
 
-  const tweede = AP.conversationHistory('kind', OMA, { limit: 30, before: eerste.oudste });
-  assert.equal(tweede.rijen.length, 30);
-  // Geen overlap en geen gat: de tweede pagina begint waar de eerste ophield.
-  const ids = new Set(eerste.rijen.map((r) => r.ref));
-  assert.ok(tweede.rijen.every((r) => !ids.has(r.ref)), 'geen dubbele');
+  const second = AP.conversationHistory('kind', OMA, { limit: 30, before: first.oldest });
+  assert.equal(second.rows.length, 30);
+  // Geen overlap en geen gat: de second pagina begint waar de first ophield.
+  const ids = new Set(first.rows.map((r) => r.ref));
+  assert.ok(second.rows.every((r) => !ids.has(r.ref)), 'geen dubbele');
 
-  const derde = AP.conversationHistory('kind', OMA, { limit: 30, before: tweede.oudste });
-  assert.equal(derde.rijen.length, 20, 'de staart');
-  assert.equal(derde.meer, false, 'en dan is het op');
+  const third = AP.conversationHistory('kind', OMA, { limit: 30, before: second.oldest });
+  assert.equal(third.rows.length, 20, 'de staart');
+  assert.equal(third.more, false, 'en dan is het op');
   // Alles bij elkaar: precies 80, geen dubbele en niets overgeslagen. Met een
   // cursor op alleen de stempel zou de grensseconde hier stil wegvallen.
-  const alles = new Set([...eerste.rijen, ...tweede.rijen, ...derde.rijen].map((r) => r.ref));
-  assert.equal(alles.size, 80, 'elke berichtje precies een keer');
+  const allRefs = new Set([...first.rows, ...second.rows, ...third.rows].map((r) => r.ref));
+  assert.equal(allRefs.size, 80, 'elke berichtje precies een keer');
 });
 
@@ -101,5 +101,5 @@
   t.after(() => server.close());
   await new Promise((r) => server.once('listening', r));
-  const haal = async (pad) => {
+  const get = async (pad) => {
     const r = await fetch(`http://127.0.0.1:${server.address().port}${pad}`,
       { headers: { Authorization: `Bearer ${bearer}` } });
@@ -108,30 +108,30 @@
   const slug = '/ap/users/kind';
 
-  const g = await haal(`${slug}/conversations`);
-  assert.equal(g.status, 200);
-  assert.equal(g.body.totalItems, 2, 'oma en tante, en niet de publieke vreemde');
+  const list = await get(`${slug}/conversations`);
+  assert.equal(list.status, 200);
+  assert.equal(list.body.totalItems, 2, 'oma en tante, en niet de publieke vreemde');
   // De byline zit in de ingesloten actor, net als overal sinds shaer-nmw.
-  assert.ok(g.body.orderedItems.every((i) => i.object.attributedTo));
+  assert.ok(list.body.orderedItems.every((i) => i.object.attributedTo));
 
-  const eerste = await haal(`${slug}/messages?with=${encodeURIComponent(OMA)}&limit=30`);
-  assert.equal(eerste.body.orderedItems.length, 30);
-  assert.ok(eerste.body.next, 'er is meer, en de standaardvorm zegt het');
-  assert.ok(eerste.body.next.includes('limit=30'), 'de paginagrootte reist mee');
+  const first = await get(`${slug}/messages?with=${encodeURIComponent(OMA)}&limit=30`);
+  assert.equal(first.body.orderedItems.length, 30);
+  assert.ok(first.body.next, 'er is meer, en de standaardvorm zegt het');
+  assert.ok(first.body.next.includes('limit=30'), 'de paginagrootte reist mee');
 
   // De next-link volgen doet wat hij belooft: geen dubbele, en uiteindelijk op.
-  const pad2 = eerste.body.next.replace(/^https?:\/\/[^/]+/, '');
-  const tweede = await haal(pad2);
-  const eersteIds = new Set(eerste.body.orderedItems.map((i) => i.object.id));
-  assert.ok(tweede.body.orderedItems.every((i) => !eersteIds.has(i.object.id)), 'geen overlap');
-  const derde = await haal(tweede.body.next.replace(/^https?:\/\/[^/]+/, ''));
-  assert.equal(derde.body.orderedItems.length, 20);
-  assert.equal(derde.body.next, undefined, 'op is op, en dat staat er ook');
+  const path2 = first.body.next.replace(/^https?:\/\/[^/]+/, '');
+  const second = await get(path2);
+  const firstIds = new Set(first.body.orderedItems.map((i) => i.object.id));
+  assert.ok(second.body.orderedItems.every((i) => !firstIds.has(i.object.id)), 'geen overlap');
+  const third = await get(second.body.next.replace(/^https?:\/\/[^/]+/, ''));
+  assert.equal(third.body.orderedItems.length, 20);
+  assert.equal(third.body.next, undefined, 'op is op, en dat staat er ook');
 
   // Een gesprek draagt beide kanten; het eigen antwoord aan tante hoort erbij.
-  const tante = await haal(`${slug}/messages?with=${encodeURIComponent(TANTE)}`);
-  assert.equal(tante.body.orderedItems.length, 2);
-  assert.ok(tante.body.orderedItems.some((i) => i.actor === 'https://klonkt.test/ap/users/kind'), 'mijn eigen kant zit erin');
+  const withAunt = await get(`${slug}/messages?with=${encodeURIComponent(TANTE)}`);
+  assert.equal(withAunt.body.orderedItems.length, 2);
+  assert.ok(withAunt.body.orderedItems.some((i) => i.actor === 'https://klonkt.test/ap/users/kind'), 'mijn eigen kant zit erin');
 
-  const stuk = await haal(`${slug}/messages?with=nonsens`);
-  assert.equal(stuk.status, 400, 'geen actor-uri, geen gesprek');
+  const broken = await get(`${slug}/messages?with=nonsens`);
+  assert.equal(broken.status, 400, 'geen actor-uri, geen gesprek');
 });
Index: test/standard-shapes.test.js
===================================================================
--- test/standard-shapes.test.js	(revision f549cf53247e0d8d7ccbd330dac9f3f4040c3e92)
+++ test/standard-shapes.test.js	(revision 3bbf73d1fa44d3393eeff82f89790687762e1983)
@@ -117,16 +117,16 @@
     { headers: { Authorization: `Bearer ${bearer}` } })).json();
 
-  const tekst = JSON.stringify(doc);
-  // Op de SLEUTEL, niet op een stuk tekst: 'shaer:quote' zit ook in
+  const text = JSON.stringify(doc);
+  // Op de SLEUTEL, niet op een stuk text: 'shaer:quote' zit ook in
   // shaer:quoteCards, en dat is een poortnaam die blijft. Een te grove zeef
   // zou hier rood staan om iets dat klopt -- of erger, groen om iets dat niet
   // klopt.
-  for (const weg of ['shaer:author', 'shaer:booster', 'shaer:quote', 'shaer:embed']) {
-    assert.ok(!tekst.includes(`"${weg}":`), `${weg} hoort weg te zijn`);
+  for (const gone of ['shaer:author', 'shaer:booster', 'shaer:quote', 'shaer:embed']) {
+    assert.ok(!text.includes(`"${gone}":`), `${gone} hoort weg te zijn`);
   }
   // Wat WEL mag blijven, en waarom: per-lezer-interactiestatus heeft in AS2
   // geen tegenhanger (Mastodon lost het in zijn eigen REST-API op), en de
   // FEP-633c-termen zijn bewust van ons en in standaardisatie.
-  assert.ok(tekst.includes('shaer:liked'), 'interactiestatus blijft, die heeft geen standaard');
+  assert.ok(text.includes('shaer:liked'), 'interactiestatus blijft, die heeft geen standaard');
 
   const item = doc.orderedItems.find((i) => i.object.id === 'https://elders/n1');
Index: test/thread.test.js
===================================================================
--- test/thread.test.js	(revision f549cf53247e0d8d7ccbd330dac9f3f4040c3e92)
+++ test/thread.test.js	(revision 3bbf73d1fa44d3393eeff82f89790687762e1983)
@@ -55,5 +55,5 @@
 // een ECHT verzoek aan een testserver op localhost, en dat mag de stub niet
 // beantwoorden met zijn 404.
-const echteFetch = globalThis.fetch;
+const realFetch = globalThis.fetch;
 
 globalThis.fetch = async (url) => {
@@ -171,14 +171,14 @@
   t.after(() => server.close());
   await new Promise((r) => server.once('listening', r));
-  const haal = async () => (await (await echteFetch(
+  const get = async () => (await (await realFetch(
     `http://127.0.0.1:${server.address().port}/ap/users/kind/thread?object=${encodeURIComponent(BRON)}`,
     { headers: { Authorization: `Bearer ${bearer}` } })).json());
 
-  const doc = await haal();
+  const doc = await get();
   assert.ok(!JSON.stringify(doc).includes('"shaer:author":'), 'geen dialect meer op deze leg');
-  const vanTante = doc.orderedItems.find((n) => n.id.endsWith('/replies/2'));
-  assert.equal(vanTante.attributedTo.name, 'tante', 'de byline zit in attributedTo');
-  assert.equal(vanTante.attributedTo.preferredUsername, 'tante');
-  assert.ok((vanTante.tag || []).some((x) => x.type === 'Emoji'), 'open poort: de emoji van het antwoord blijft');
+  const fromAunt = doc.orderedItems.find((n) => n.id.endsWith('/replies/2'));
+  assert.equal(fromAunt.attributedTo.name, 'tante', 'de byline zit in attributedTo');
+  assert.equal(fromAunt.attributedTo.preferredUsername, 'tante');
+  assert.ok((fromAunt.tag || []).some((x) => x.type === 'Emoji'), 'open poort: de emoji van het antwoord blijft');
 
   // Poort dicht: FEP-9098 zit in de tag van de ingesloten actor, dus daar
@@ -188,8 +188,8 @@
   db.prepare("INSERT INTO ap_guardianships (slug, other_uri, role, status) VALUES ('kind', ?, 'guardian', 'accepted')")
     .run('https://203.0.113.20/users/tante');
-  const dicht = await haal();
-  const na = dicht.orderedItems.find((n) => n.id.endsWith('/replies/2'));
-  assert.ok(!(na.tag || []).some((x) => x.type === 'Emoji'), 'dichte poort: geen emoji meer');
-  assert.ok(!na.attributedTo.tag, 'ook niet in de byline');
+  const closed = await get();
+  const after = closed.orderedItems.find((n) => n.id.endsWith('/replies/2'));
+  assert.ok(!(after.tag || []).some((x) => x.type === 'Emoji'), 'dichte poort: geen emoji meer');
+  assert.ok(!after.attributedTo.tag, 'ook niet in de byline');
 });
 
@@ -217,6 +217,6 @@
   const vorige = globalThis.fetch;
   t.after(() => { globalThis.fetch = vorige; });
-  const vraag = async (uri) => {
-    const r = await echteFetch(
+  const ask = async (uri) => {
+    const r = await realFetch(
       `http://127.0.0.1:${server.address().port}/ap/users/kind/thread?object=${encodeURIComponent(uri)}`,
       { headers: { Authorization: `Bearer ${bearer}` } });
@@ -226,16 +226,16 @@
   // De bron zegt nee -- precies wat boiert.eu doet met een friends-only post
   // voor iemand die de auteur niet (meer) volgt.
-  const DICHT = 'https://203.0.113.50/notes/dicht';
+  const SHUT = 'https://203.0.113.50/notes/dicht';
   globalThis.fetch = async () => new Response('nope', { status: 404 });
-  const nee = await vraag(DICHT);
-  assert.equal(nee.status, 404);
-  assert.equal(nee.body.error, 'not shared by source');
-  assert.equal(nee.body.sourceStatus, 404);
+  const refused = await ask(SHUT);
+  assert.equal(refused.status, 404);
+  assert.equal(refused.body.error, 'not shared by source');
+  assert.equal(refused.body.sourceStatus, 404);
 
   // De bron ligt eruit. Dezelfde lege uitkomst, een andere waarheid.
-  const STUK = 'https://203.0.113.51/notes/stuk';
+  const BROKEN = 'https://203.0.113.51/notes/stuk';
   globalThis.fetch = async () => new Response('boem', { status: 500 });
-  const stuk = await vraag(STUK);
-  assert.equal(stuk.status, 502);
-  assert.equal(stuk.body.error, 'source unreachable');
-});
+  const broken = await ask(BROKEN);
+  assert.equal(broken.status, 502);
+  assert.equal(broken.body.error, 'source unreachable');
+});
