refactor(trust): ego-centric trust replaces the global Duniter membership

The global membership rule (curated bootstrap referents + sigQty/stepMax
parameters) solved sybil-proof identity for a UBI — a problem this app
doesn't have — and its screen leaked graph jargon (npub roots, parameter
steppers). Trust is now computed from the user's own position only:
you vouch / vouched by people you know (distance <=2) / vouched by N.

- TrustCubit: drop networkMember tier, referents and params; keep the
  circle rule and the 365-day vouch expiry (renewable, self-pruning).
- Delete TrustReferents, WotSettings, TrustNetworkScreen and the bundled
  referents asset; unwire injector/bootstrap/app/chat.
- New 'Your people' screen (/your-people, from the profile): who you
  vouch for (revocable) and who vouches for you, names via ProfileCache.
- i18n: wot.* removed, yourPeople.* added (en/es/pt/ast); trust.member
  removed. Kind 30777 events on relays stay fully compatible — only the
  interpretation changes.
This commit is contained in:
vjrj 2026-07-11 13:03:20 +02:00
parent a5f50314e4
commit fef174e8c4
25 changed files with 595 additions and 863 deletions

View file

@ -76,7 +76,7 @@ class TranslationsEs extends Translations with BaseTranslations<AppLocale, Trans
@override late final _Translations$chatList$es chatList = _Translations$chatList$es._(_root);
@override late final _Translations$chat$es chat = _Translations$chat$es._(_root);
@override late final _Translations$trust$es trust = _Translations$trust$es._(_root);
@override late final _Translations$wot$es wot = _Translations$wot$es._(_root);
@override late final _Translations$yourPeople$es yourPeople = _Translations$yourPeople$es._(_root);
@override late final _Translations$notifications$es notifications = _Translations$notifications$es._(_root);
@override late final _Translations$plantare$es plantare = _Translations$plantare$es._(_root);
@override late final _Translations$sale$es sale = _Translations$sale$es._(_root);
@ -788,35 +788,24 @@ class _Translations$trust$es extends Translations$trust$en {
@override String get vouch => 'Conozco a esta persona';
@override String get vouched => 'Avalas a esta persona';
@override String get circle => 'En tu círculo';
@override String get member => 'Miembro de confianza de la red';
}
// Path: wot
class _Translations$wot$es extends Translations$wot$en {
_Translations$wot$es._(TranslationsEs root) : this._root = root, super.internal(root);
// Path: yourPeople
class _Translations$yourPeople$es extends Translations$yourPeople$en {
_Translations$yourPeople$es._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get title => 'Red de confianza';
@override String get open => 'Red de confianza';
@override String get help => 'Cómo se decide quién es miembro de confianza: la gente se avala entre sí, y la confianza se extiende desde un conjunto de raíces fundadoras.';
@override String get roots => 'Raíces de confianza';
@override String get rootsHelp => 'Las identidades fundadoras que anclan la red. Añade a quien te fíes (pega su código de identidad); la membresía se mide hacia fuera desde ellas.';
@override String get noRoots => 'Aún no hay raíces de confianza — no se puede calcular la membresía hasta sembrar la red.';
@override String get addRoot => 'Añadir una raíz de confianza';
@override String get rootHint => 'Pega un código de identidad (npub…)';
@override String get add => 'Añadir';
@override String get rootAdded => 'Raíz de confianza añadida';
@override String get rootInvalid => 'Ese no es un código de identidad válido';
@override String get remove => 'Quitar';
@override String get params => 'Parámetros avanzados';
@override String get paramsHelp => 'Reglas Duniter. Aflójalas para una red joven; apriétalas según crece.';
@override String get sigQty => 'Avales para ser miembro';
@override String get stepMax => 'Distancia máxima a una raíz';
@override String get validityDays => 'Validez del aval (días)';
@override String get reset => 'Restablecer a valores Duniter';
@override String get saved => 'Guardado';
@override String get title => 'Tu gente';
@override String get help => 'Personas que conoces y avalas, y personas que te avalan.';
@override String get youVouchFor => 'Tú avalas a';
@override String get vouchesForYou => 'Te avalan';
@override String get youVouchForEmpty => 'Aún no avalas a nadie. Cuando conozcas a alguien, abre vuestro chat y toca "Conozco a esta persona".';
@override String get vouchesForYouEmpty => 'Nadie te avala todavía';
@override String get revoke => 'Dejar de avalar';
@override String get revokeConfirm => '¿Dejar de avalar a esta persona?';
@override String get offline => 'Sin conexión — inténtalo cuando estés en línea';
}
// Path: notifications
@ -1633,26 +1622,15 @@ extension on TranslationsEs {
'trust.vouch' => 'Conozco a esta persona',
'trust.vouched' => 'Avalas a esta persona',
'trust.circle' => 'En tu círculo',
'trust.member' => 'Miembro de confianza de la red',
'wot.title' => 'Red de confianza',
'wot.open' => 'Red de confianza',
'wot.help' => 'Cómo se decide quién es miembro de confianza: la gente se avala entre sí, y la confianza se extiende desde un conjunto de raíces fundadoras.',
'wot.roots' => 'Raíces de confianza',
'wot.rootsHelp' => 'Las identidades fundadoras que anclan la red. Añade a quien te fíes (pega su código de identidad); la membresía se mide hacia fuera desde ellas.',
'wot.noRoots' => 'Aún no hay raíces de confianza — no se puede calcular la membresía hasta sembrar la red.',
'wot.addRoot' => 'Añadir una raíz de confianza',
'wot.rootHint' => 'Pega un código de identidad (npub…)',
'wot.add' => 'Añadir',
'wot.rootAdded' => 'Raíz de confianza añadida',
'wot.rootInvalid' => 'Ese no es un código de identidad válido',
'wot.remove' => 'Quitar',
'wot.params' => 'Parámetros avanzados',
'wot.paramsHelp' => 'Reglas Duniter. Aflójalas para una red joven; apriétalas según crece.',
'wot.sigQty' => 'Avales para ser miembro',
'wot.stepMax' => 'Distancia máxima a una raíz',
'wot.validityDays' => 'Validez del aval (días)',
'wot.reset' => 'Restablecer a valores Duniter',
'wot.saved' => 'Guardado',
'yourPeople.title' => 'Tu gente',
'yourPeople.help' => 'Personas que conoces y avalas, y personas que te avalan.',
'yourPeople.youVouchFor' => 'Tú avalas a',
'yourPeople.vouchesForYou' => 'Te avalan',
'yourPeople.youVouchForEmpty' => 'Aún no avalas a nadie. Cuando conozcas a alguien, abre vuestro chat y toca "Conozco a esta persona".',
'yourPeople.vouchesForYouEmpty' => 'Nadie te avala todavía',
'yourPeople.revoke' => 'Dejar de avalar',
'yourPeople.revokeConfirm' => '¿Dejar de avalar a esta persona?',
'yourPeople.offline' => 'Sin conexión — inténtalo cuando estés en línea',
'notifications.newMessageFrom' => ({required Object name}) => 'Nuevo mensaje de ${name}',
'plantare.title' => 'Plantares',
'plantare.help' => 'Un Plantare es el compromiso de reproducir una semilla y devolver una parte — así una variedad sigue viajando de mano en mano. No es una venta.',