Ignore:
Timestamp:
08/06/2026 09:15:46 AM (5 weeks ago)
Author:
Claude (agent) <aiclaude@…>
Branches:
main
Children:
6bc5ebd
Parents:
14f7cb2
git-author:
Robin <roboburr@…> (08/06/2026 09:15:45 AM)
git-committer:
Claude (agent) <aiclaude@…> (08/06/2026 09:15:46 AM)
Message:

De halve schrijfactie kan niet meer (shaer-9e9 fase 3, deel 1)

markLiked, unmarkLiked, markBoosted, unmarkBoosted, setMyReaction,
getMyReactions en getTimelineReaction staan niet langer op het default-object
van ActivityPubService. Routes importeren dat object, dus daarmee is de helft
schrijven vanaf een route onmogelijk geworden in plaats van afgeraden. De named
exports blijven bestaan voor intern gebruik en voor de tests. Een test bewaakt
het oppervlak, want een afspraak in een comment overleeft geen half jaar.

Meteen ook de laatste halve schrijfactie weg, en die was van mijzelf: in de
interact-boost stond nog een kale setMyReaction "zodat de knop klopt voordat de
resolve terug is". Dat is nu setReaction, dus ook dat korte moment schrijft
beide bronnen; de resolve werkt hem daarna bij met de note zodat de post in je
tijdlijn belandt.

De kolommen zijn gedocumenteerd als afgeleide, op de plek waar iemand ze
tegenkomt. Met het onderscheid erbij: ap_timeline.boosted verdient zijn bestaan
als index (Cirkel-WHERE, boostedCount), ap_timeline.liked niet.

WAT IK BEWUST NIET DOE: ap_timeline.liked weggooien. Het plan zegt dat het kan,
en dat klopt, maar zolang die kolom gevuld blijft is terugdraaien een
code-revert en geen dataherstel. Weggooien hoort pas als fase 2 een tijd goed
heeft gestaan -- niet in dezelfde sessie waarin het leespad is omgezet.

Suite 431/431.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/reactions-characterization.test.js

    r14f7cb2 r68a4d1b  
    254254  assert.equal(AP.getReactionsFor('', [uri('g3')]).size, 0);
    255255});
     256
     257// ── Fase 3: het publieke oppervlak is versmald ───────────────────────────
     258
     259test('de primitieven zijn niet meer bereikbaar via het service-object', async () => {
     260  // Routes doen `import ActivityPubService from ...` en werken dus met het
     261  // default-object. Zolang markLiked daar in staat, kan een aanroeper de helft
     262  // schrijven -- en dat is niet hypothetisch: precies zo bleef shaer:liked
     263  // maandenlang false. De named exports blijven bestaan voor intern gebruik en
     264  // voor deze tests.
     265  const svc = (await import('../src/services/ActivityPubService.js')).default;
     266  for (const naam of ['markLiked', 'unmarkLiked', 'markBoosted', 'unmarkBoosted',
     267                      'setMyReaction', 'getMyReactions', 'getTimelineReaction']) {
     268    assert.equal(svc[naam], undefined, `${naam} hoort niet op het publieke oppervlak te staan`);
     269  }
     270  // Wat er WEL hoort te staan: het ene schrijfpad en het ene leespad.
     271  for (const naam of ['setReaction', 'getReaction', 'getReactionsFor']) {
     272    assert.equal(typeof svc[naam], 'function', `${naam} hoort er wel te zijn`);
     273  }
     274});
Note: See TracChangeset for help on using the changeset viewer.