Parte III — Ramas, savia y semillas
08 · Las semillas: federación
El viento y los animales llevan lejos las semillas del baobab. La federación lleva los saberes públicos fuera de la red de mucuas: a clientes de chat (XMPP) y al Fediverso (ActivityPub).
Archivos para leer
federacao/visibilidade.py— la traba: solo sale lo que esprotecao: publico+visibility: public+ no cifrado.federacao/mapeador.py,federacao/atores.py— saber → Dublin Core / ActivityStreams; mucua, galaxia, mocambola → actores.federacao/adaptadores/base.pyy los adaptadores (xmpp*.py,activitypub.py).federacao/ingestao.py— lo que llega de afuera entra en el acervo.federacao/xmpp_bot.py+xmpp_i18n.py+bot_backend.py— el bot que publica y busca por chat.federacao/xmpp_ponte.py,xmpp_extauth.py,api/v3/xmpp.py— el XMPP de la propia mucua (lo que el protocolo llama servidor), usando las cuentas de Baobáxia.federacao/http_sig.py,api/v3/activitypub.py.
Adaptadores enchufables
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
Cada adaptador se enciende con BBX_FED_<NOMBRE>=on (federacao/config.py).
Lo que llega de afuera (versión 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: comprueba Digest, Date (±5 min) y Ed25519 con la pubkey de la mucua X
alt firma ausente o inválida
I-->>R: 401
end
I->>G: saber externo
G->>G: ¿uuid bien formado? ¿la nature no es de identidad?
G->>G: ¿el uuid ya existe y es LOCAL? → rechaza
G->>G: marca origem_externa, origem_mucua, _verificado
G-->>I: saber ingerido (entra en la búsqueda normal)
Hasta la 3.2 esta ruta estaba siempre montada, sin firma, y el upsert aceptaba el uuid de cualquier saber local — ver el módulo 11.
El bot
El bot conversa en varios idiomas (xmpp_i18n.py): buscar pesca, publicar, mandar una foto, titulo …, enviar. Usa la misma capa publica/operacoes.py que la CLI. Mensajes y comandos están separados de la lógica — un idioma nuevo es un diccionario nuevo.
Prácticas
- Lee
visibilidade.pode_federary lista tres saberes que nunca salen. - En
test_xmpp_bot_i18n.py, agrega un comando en otro idioma. - Corre
testes/test_federacao_inbox_segura.py. Cambia una línea de la traba eningestao.pyy mira qué test se rompe.
Para conversar
- ¿Qué saberes quiere una comunidad esparcir al viento, y cuáles quiere guardar solo entre sus mucuas?
