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 TranslationsPt extends Translations with BaseTranslations<AppLocale, Trans
@override late final _Translations$chatList$pt chatList = _Translations$chatList$pt._(_root);
@override late final _Translations$chat$pt chat = _Translations$chat$pt._(_root);
@override late final _Translations$trust$pt trust = _Translations$trust$pt._(_root);
@override late final _Translations$wot$pt wot = _Translations$wot$pt._(_root);
@override late final _Translations$yourPeople$pt yourPeople = _Translations$yourPeople$pt._(_root);
@override late final _Translations$notifications$pt notifications = _Translations$notifications$pt._(_root);
@override late final _Translations$plantare$pt plantare = _Translations$plantare$pt._(_root);
@override late final _Translations$sale$pt sale = _Translations$sale$pt._(_root);
@ -785,35 +785,24 @@ class _Translations$trust$pt extends Translations$trust$en {
@override String get vouch => 'Conheço esta pessoa';
@override String get vouched => 'Avalizas esta pessoa';
@override String get circle => 'No teu círculo';
@override String get member => 'Membro de confiança da rede';
}
// Path: wot
class _Translations$wot$pt extends Translations$wot$en {
_Translations$wot$pt._(TranslationsPt root) : this._root = root, super.internal(root);
// Path: yourPeople
class _Translations$yourPeople$pt extends Translations$yourPeople$en {
_Translations$yourPeople$pt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get title => 'Rede de confiança';
@override String get open => 'Rede de confiança';
@override String get help => 'Como se decide quem é membro de confiança: as pessoas avalizam-se entre si, e a confiança estende-se a partir de um conjunto de raízes fundadoras.';
@override String get roots => 'Raízes de confiança';
@override String get rootsHelp => 'As identidades fundadoras que ancoram a rede. Adiciona quem confias (cola o seu código de identidade); a filiação mede-se para fora a partir delas.';
@override String get noRoots => 'Ainda não há raízes de confiança — não se pode calcular a filiação até semear a rede.';
@override String get addRoot => 'Adicionar uma raiz de confiança';
@override String get rootHint => 'Cola um código de identidade (npub…)';
@override String get add => 'Adicionar';
@override String get rootAdded => 'Raiz de confiança adicionada';
@override String get rootInvalid => 'Esse não é um código de identidade válido';
@override String get remove => 'Remover';
@override String get params => 'Parâmetros avançados';
@override String get paramsHelp => 'Regras Duniter. Afrouxa-as para uma rede jovem; aperta-as à medida que cresce.';
@override String get sigQty => 'Avais para ser membro';
@override String get stepMax => 'Distância máxima a uma raiz';
@override String get validityDays => 'Validade do aval (dias)';
@override String get reset => 'Repor para valores Duniter';
@override String get saved => 'Guardado';
@override String get title => 'A tua gente';
@override String get help => 'Pessoas que conheces e avalizas, e pessoas que te avalizam.';
@override String get youVouchFor => 'Tu avalizas';
@override String get vouchesForYou => 'Avalizam-te';
@override String get youVouchForEmpty => 'Ainda não avalizas ninguém. Quando conheceres alguém, abre a vossa conversa e toca em "Conheço esta pessoa".';
@override String get vouchesForYouEmpty => 'Ainda ninguém te avaliza';
@override String get revoke => 'Deixar de avalizar';
@override String get revokeConfirm => 'Deixar de avalizar esta pessoa?';
@override String get offline => 'Sem ligação — tenta novamente quando estiveres em linha';
}
// Path: notifications
@ -1627,26 +1616,15 @@ extension on TranslationsPt {
'trust.vouch' => 'Conheço esta pessoa',
'trust.vouched' => 'Avalizas esta pessoa',
'trust.circle' => 'No teu círculo',
'trust.member' => 'Membro de confiança da rede',
'wot.title' => 'Rede de confiança',
'wot.open' => 'Rede de confiança',
'wot.help' => 'Como se decide quem é membro de confiança: as pessoas avalizam-se entre si, e a confiança estende-se a partir de um conjunto de raízes fundadoras.',
'wot.roots' => 'Raízes de confiança',
'wot.rootsHelp' => 'As identidades fundadoras que ancoram a rede. Adiciona quem confias (cola o seu código de identidade); a filiação mede-se para fora a partir delas.',
'wot.noRoots' => 'Ainda não há raízes de confiança — não se pode calcular a filiação até semear a rede.',
'wot.addRoot' => 'Adicionar uma raiz de confiança',
'wot.rootHint' => 'Cola um código de identidade (npub…)',
'wot.add' => 'Adicionar',
'wot.rootAdded' => 'Raiz de confiança adicionada',
'wot.rootInvalid' => 'Esse não é um código de identidade válido',
'wot.remove' => 'Remover',
'wot.params' => 'Parâmetros avançados',
'wot.paramsHelp' => 'Regras Duniter. Afrouxa-as para uma rede jovem; aperta-as à medida que cresce.',
'wot.sigQty' => 'Avais para ser membro',
'wot.stepMax' => 'Distância máxima a uma raiz',
'wot.validityDays' => 'Validade do aval (dias)',
'wot.reset' => 'Repor para valores Duniter',
'wot.saved' => 'Guardado',
'yourPeople.title' => 'A tua gente',
'yourPeople.help' => 'Pessoas que conheces e avalizas, e pessoas que te avalizam.',
'yourPeople.youVouchFor' => 'Tu avalizas',
'yourPeople.vouchesForYou' => 'Avalizam-te',
'yourPeople.youVouchForEmpty' => 'Ainda não avalizas ninguém. Quando conheceres alguém, abre a vossa conversa e toca em "Conheço esta pessoa".',
'yourPeople.vouchesForYouEmpty' => 'Ainda ninguém te avaliza',
'yourPeople.revoke' => 'Deixar de avalizar',
'yourPeople.revokeConfirm' => 'Deixar de avalizar esta pessoa?',
'yourPeople.offline' => 'Sem ligação — tenta novamente quando estiveres em linha',
'notifications.newMessageFrom' => ({required Object name}) => 'Nova mensagem de ${name}',
'plantare.title' => 'Plantares',
'plantare.help' => 'Um Plantare é o compromisso de reproduzir uma semente e devolver uma parte — assim uma variedade continua a viajar de mão em mão. Não é uma venda.',