Ignore:
Timestamp:
08/09/2026 04:59:31 PM (4 weeks ago)
Author:
Bart <bart@…>
Branches:
main
Children:
89d3c06
Parents:
e62eee4
Message:

Twee richtingen, twee poorten: shaer:following naast shaer:follows

In de catalogus stond één rij voor twee mechanismen. Het paneel telde
listReviewsByDirection(slug, 'incoming') en zette dat getal onder
shaer:follows, dus een guardian las "3 wachtend" en wist niet of er drie
vreemden bij zijn kind wilden of dat zijn kind drie keer had gevraagd of het
iemand mocht volgen. Dat zijn niet dezelfde zorg, en sinds shaer-p729 bestaan
ze allebei echt.

Nu twee poorten, en het verschil ertussen is opzet. §5.3 EIST dat een Follow
naar een ward langs de guardians gaat: shaer:follows blijft dus fixed. Over de
andere richting zegt de FEP niets — wat je verder gated is expliciet aan de
implementatie gelaten — dus shaer:following is onze keuze, en dan hoort hij ook
echt losgelaten te kunnen worden. Verstelbaar, met gate_following als kolom en
dezelfde automatiek als de rest: onbeslist is dicht voor een ward en open voor
ieder ander. Een kind dat erin groeit hoeft niet eeuwig te blijven vragen.

Geen eigen ownFollowsAllowed(): wardGateAllowed() is er al en zegt er zelf bij
dat het één implementatie hoort te zijn. Een derde kopie zou precies de tweede
plek zijn die er anders over kan gaan denken.

De labels zijn nog aan de clients: de server geeft de feature-naam door, de
Guardian PWA en Shaer moeten er nog woorden bij kiezen.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ActivityPubService.js

    re62eee4 r709dc6f  
    54765476  const guardians = Guardianship.listGuardians(slug).map((g) => g.other_uri);
    54775477  if (!guardians.length) return null;                                   // not a ward: nothing to gate
     5478  // shaer:following (shaer-p729) — its own gate, apart from shaer:follows,
     5479  // which governs the OTHER direction. §5.3 fixes the inbound one on: a Follow
     5480  // aimed at a ward MUST pass the guardians. About this direction the FEP says
     5481  // nothing, so it is ours to set and ours to let go of, and the guardians can
     5482  // relax it for a child who has grown into it. Undecided means gated for a
     5483  // ward, the same automatiek as the rest of the family.
     5484  const gateRow = db.prepare('SELECT gate_following FROM sites WHERE slug = ?').get(slug);
     5485  if (Guardianship.wardGateAllowed(gateRow && gateRow.gate_following, true)) return null;
    54785486  if (guardians.includes(targetUri)) return null;                       // your own guardian
    54795487  if (Guardianship.outgoing.isMutual(slug, targetUri)) return null;     // already vetted by name
Note: See TracChangeset for help on using the changeset viewer.