Parte III — Rami, linfa e semi
08 · I semi: federazione
Il vento e gli animali portano lontano i semi del baobab. La federazione porta i saberes pubblici fuori dalla rete delle mucua: ai client di chat (XMPP) e al Fediverso (ActivityPub).
File da leggere
federacao/visibilidade.py— il cancello: esce solo ciò che èprotecao: publico+visibility: public+ non cifrato.federacao/mapeador.py,federacao/atores.py— saber → Dublin Core / ActivityStreams; mucua, galassia, mocambola → attori.federacao/adaptadores/base.pye gli adattatori (xmpp*.py,activitypub.py).federacao/ingestao.py— ciò che arriva da fuori entra nell'archivio.federacao/xmpp_bot.py+xmpp_i18n.py+bot_backend.py— il bot che pubblica e cerca via chat.federacao/xmpp_ponte.py,xmpp_extauth.py,api/v3/xmpp.py— l'XMPP della mucua stessa (ciò che il protocollo chiama server) XMPP che usa gli account di Baobáxia.federacao/http_sig.py,api/v3/activitypub.py.
Adattatori collegabili
classDiagram
class Adaptador {
<<abstract>>
+nome
+habilitado
+publicar(saber)
+consumir(atividade)
+status()
}
class XMPPAdaptador
class ActivityPubAdaptador {
+documento_ator()
+documento_outbox()
-_assina_entrega()
}
class Transporte {
<<xmpp>>
}
class TransporteHTTP {
<<activitypub>>
}
class SlixmppTransporte
class ComponenteTransporte
class HttpxTransporte
Adaptador <|-- XMPPAdaptador
Adaptador <|-- ActivityPubAdaptador
XMPPAdaptador --> Transporte
ActivityPubAdaptador --> TransporteHTTP
Transporte <|-- SlixmppTransporte : cliente
Transporte <|-- ComponenteTransporte : XEP-0114
TransporteHTTP <|-- HttpxTransporte
Ogni adattatore si accende con BBX_FED_<NOME>=on (federacao/config.py).
Ciò che arriva da fuori (versione 3.3)
sequenceDiagram
participant R as mucua remota
participant I as POST /ap/galaxia/{uuid}/inbox
participant H as _remetente_verificado
participant G as ingestao.ingerir
R->>I: Create + Signature(keyId=…/ap/mucua/X#main-key) + Digest + Date
I->>H: verifica Digest, Date (±5 min) ed Ed25519 con la pubkey della mucua X
alt firma assente o non valida
I-->>R: 401
end
I->>G: saber esterno
G->>G: uuid ben formato? la nature non è di identità?
G->>G: l'uuid esiste già ed è LOCALE? → rifiuta
G->>G: segna origem_externa, origem_mucua, _verificado
G-->>I: saber acquisito (entra nella ricerca normale)
Fino alla 3.2 questa rotta era sempre montata, senza firma, e l'upsert accettava l'uuid di qualsiasi saber locale — vedi il modulo 11.
Il bot
Il bot parla in diverse lingue (xmpp_i18n.py): buscar pesca, publicar, mandare una foto, titulo …, enviar. Usa lo stesso strato publica/operacoes.py della CLI. Messaggi e comandi sono separati dalla logica — una lingua nuova è un dizionario nuovo.
Esercizi
- Leggi
visibilidade.pode_federared elenca tre saberes che non escono mai. - In
test_xmpp_bot_i18n.py, aggiungi un comando in un'altra lingua. - Esegui
testes/test_federacao_inbox_segura.py. Cambia una riga del cancello iningestao.pye guarda quale test si rompe.
Da discutere
- Quali saberes una comunità vuole spargere al vento, e quali vuole custodire solo tra le proprie mucua?
