Ignore:
Timestamp:
08/04/2026 12:30:11 PM (5 weeks ago)
Author:
Bart <bart@…>
Branches:
main
Children:
fa33214
Parents:
30d0e2c
Message:

FEP-633c §4.1: een kapotte guardian kost een kind niet de goede

Een "guardian" met eigen guardians is er geen (§1), en een escalatie daarheen
komt nergens aan: er is geen grand-guardian om naar door te vertakken. Klonkt
handhaafde dat nergens. De daemon doet het vanaf het begin, en dat verschil is
precies waar shaer-6d9 voor bestaat.

Nu zacht falen zoals §4.1 vraagt: dat ene doelwit valt af, de rest krijgt de
hulpvraag gewoon. Andersom zou één verkeerd geconfigureerd account van een
volwassene de noodroep van een kind helemaal laten mislukken.

Alleen bij een hulpvraag. Een gewoon direct bericht is geen escalatie, en een
ward mag een andere ward best iets sturen — daar stilletjes ontvangers uit
slopen zou een bug zijn met een spec-verwijzing eromheen.

Als ELKE guardian kapot is, is er niets om naar door te leveren. §4 dekt dat
niet, want §4.1 gaat ervan uit dat er anderen zijn. Dan komt de hulpvraag bij
niemand aan, en dat is het enige wat deze FEP juist moet voorkomen: dat faalt
dus luid in de log in plaats van een aflevering te melden die niet gebeurde.

carriesGuardians() staat nu in context.js, waar de rest van het vocabulaire ook
woont: §3 en §5.2 stellen dezelfde vraag en moeten hem hetzelfde lezen.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/guardianship/handshake.js

    r30d0e2c r3d882bd  
    1616 * arrive once via wireHandshake(deps); nothing here imports ActivityPubService.
    1717 */
    18 import { isGuardianRelationship, GUARDIAN_RELATIONSHIP_COMPACT } from './context.js';
     18import { isGuardianRelationship, GUARDIAN_RELATIONSHIP_COMPACT, carriesGuardians } from './context.js';
    1919import * as offers from './offers.js';
    2020import * as relations from './relations.js';
     
    139139  const doc = await deps.fetchActor(candidateUri).catch(() => null);
    140140  if (!doc) return 'unverified';
    141   const g = doc['shaer:guardians'];
    142   const has = Array.isArray(g) ? g.length > 0
    143     : typeof g === 'string' ? g.length > 0
    144       : (g && typeof g === 'object') ? (Array.isArray(g.items) ? g.items.length > 0 : true)
    145         : false;
    146   return has ? 'malformed' : 'ok';
     141  return carriesGuardians(doc) ? 'malformed' : 'ok';
    147142}
    148143
Note: See TracChangeset for help on using the changeset viewer.