Changeset fa33214 in Klonkt for src/services/guardianship


Ignore:
Timestamp:
08/04/2026 12:55:55 PM (5 weeks ago)
Author:
Bart <bart@…>
Branches:
main
Children:
04aca12, 12bed59
Parents:
3d882bd
Message:

FEP-633c §5.3 andersom: een ward vraagt eerst of het iemand mag volgen

Uitgaande follows gingen ongehinderd de deur uit; de guardians kregen achteraf
een bericht (1a2f206). Dat is informeren, niet gaten — de deur staat al open als
het bericht aankomt. Bead shaer-p729, ontwerp in
docs/ward-outbound-follows-design.md.

De regel: per geval goedkeuring, met twee uitzonderingen die geen gunst zijn
maar dezelfde beslissing die al genomen is. Je eigen guardian volgen is geen
vraag. En iemand die de ward al volgt DOOR DE POORT heen is door een guardian
bij naam goedgekeurd; die vraag nog eens stellen leert mensen alleen om de vraag
niet meer te lezen.

Daarvoor moet je weten wie er door de poort kwam, dus ap_followers krijgt
gate_approved, gezet bij acceptGatedFollow. Iedereen die al volgde toen die
kolom erbij kwam wordt eenmalig gegrandfatherd (Barts besluit): exact vanaf nu,
in plaats van met terugwerkende kracht wantrouwig tegen wat er al was.

Eigen tabel, want ap_pending_follows is gesleuteld met de ward als DOEL. Eigen
wachtrij (outgoingFollows), want een guardian moet "iemand wil je ward volgen"
kunnen onderscheiden van "je ward wil iemand volgen" — de AS2-test ving netjes
dat de nieuwe term aangemeld moest worden. En een tegengehouden follow reist als
derde uitkomst naar de app (state: awaiting_guardian), zodat Shaer "wacht op
toestemming" kan tonen in plaats van een tegel die er al volgend uitziet.

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

Location:
src/services/guardianship
Files:
1 added
3 edited

Legend:

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

    r3d882bd rfa33214  
    1919export { wireDelivery, c2sVisibility, deliverDirectNote } from './delivery.js';
    2020export { wireHandshake, handleOutbox as handleGuardianshipOutbox, handleInbox as handleGuardianshipInbox, parseRelationship, parseUndoRelationship, endGuardianship } from './handshake.js';
    21 export { offersCollection, followsCollection, wardsCollection, guardiansCollection } from './queues.js';
     21export { offersCollection, followsCollection, outgoingFollowsCollection, wardsCollection, guardiansCollection } from './queues.js';
    2222export * as availability from './availability.js';
    2323export { wireAvailability } from './availability.js';
    2424export * as follows from './follows.js';
     25export * as outgoing from './outgoing.js';
    2526export { listForParty as listOffersForParty, getOffer, findOfferAnywhere } from './offers.js';
    2627export {
  • src/services/guardianship/queues.js

    r3d882bd rfa33214  
    1212import * as relations from './relations.js';
    1313import * as availability from './availability.js';
     14import * as outgoing from './outgoing.js';
    1415import * as handshake from './handshake.js';
    1516
     
    3940}
    4041
     42/** §5.3 outbound: this ward's own follow requests, waiting for its guardians. */
     43export function outgoingFollowsCollection(id, slug, me) {
     44  return collection(id, outgoing.listForWard(slug).map((o) => outgoing.queueItem(o, me)));
     45}
     46
    4147/** The guardian's committed wards, with cached handle for display. */
    4248export function wardsCollection(id, slug) {
     
    5359}
    5460
    55 export default { offersCollection, followsCollection, wardsCollection, guardiansCollection };
     61export default { offersCollection, followsCollection, outgoingFollowsCollection, wardsCollection, guardiansCollection };
  • src/services/guardianship/relations.js

    r3d882bd rfa33214  
    7373      offers: `${id}/queues/offers`,
    7474      follows: `${id}/queues/follows`,
     75      // Both directions of §5.3, kept apart on purpose: a guardian must be able
     76      // to tell "someone wants to follow your ward" from "your ward wants to
     77      // follow someone". Same mechanism, opposite question, different words in
     78      // the interface (shaer-p729).
     79      outgoingFollows: `${id}/queues/outgoing-follows`,
    7580      wards: `${id}/queues/wards`,
    7681      guardians: `${id}/queues/guardians`,
Note: See TracChangeset for help on using the changeset viewer.