Changeset c8e03c6 in Klonkt for src/services/guardianship
- Timestamp:
- 07/29/2026 10:29:55 AM (6 weeks ago)
- Branches:
- main
- Children:
- 6d5ce0c
- Parents:
- 329873e
- File:
-
- 1 edited
-
src/services/guardianship/handshake.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/guardianship/handshake.js
r329873e rc8e03c6 317 317 for (const g of relations.listGuardians(site.slug).map((x) => x.other_uri)) { 318 318 if (g === actor) continue; // the proposer already answered 319 // The forward goes out AS THE WARD, because the ward's key signs 320 // it. Keeping the proposer in `actor` made every receiver answer 321 // 401 signer mismatch, and rightly so: the body claimed one author 322 // and the signature proved another. §5.3 forwards a gated follow 323 // the same way. Who proposed it rides along separately, for the 324 // guardian's screen. 319 325 deps.deliverTo(site, g, { 320 id: offerId, type: 'Offer', actor, to: [g], object: activity.object, 326 id: offerId, type: 'Offer', actor: me, to: [g], object: activity.object, 327 'shaer:proposer': actor, 321 328 }).catch(() => { /* the delivery queue retries */ }); 322 329 } … … 333 340 gated.recordGatedReview(site.slug, { 334 341 id: offerId, wardUri: gs.ward, wardInbox: wardDoc && wardDoc.inbox, 335 proposer: actor, feature: gs.feature, value: gs.value, 342 // A forward is signed by the ward, so `actor` is the ward; the 343 // guardian who opened it travels in shaer:proposer. 344 proposer: (typeof activity['shaer:proposer'] === 'string' ? activity['shaer:proposer'] : actor), 345 feature: gs.feature, value: gs.value, 336 346 }); 337 347 notify(site.slug, { kind: 'gated_review', feature: gs.feature, value: gs.value, ward: gs.ward });
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)