feat(agorapura): identidad humana federada — core + grafo de confianza

agorapura-core: identidades fractales (persona/comunidad/alianza/
institución) sobre claves ed25519, Claims sujeto-predicado-valor y
Attestations firmadas y autoverificables (la prueba viaja con el
dato). agorapura-graph: TrustGraph guarda sólo atestaciones con firma
válida; corroboration() devuelve evidencia cruda y TrustPolicy —un
umbral negociado, no una verdad del sistema— la traduce a sí/no.

22 tests. Cero red, cero estado global, #![forbid(unsafe_code)].

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-20 16:38:20 +00:00
parent ad9781c2ee
commit c1c136954e
10 changed files with 847 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
# modules/agorapura/ — Identidad humana federada
**Propósito.** Un ágora de identidad sin autoridad central. Cada
identidad —persona, comunidad, alianza, institución— es una clave
pública; cada afirmación sobre ella, un claim; cada respaldo, una
atestación firmada que viaja con su propia prueba. La verdad no la dicta
un servidor: emerge de quién atestigua qué, ponderado por la política
que negocie quien lee.
## Crates
| crate | tipo | rol |
| ----------------- | ---- | ------------------------------------------------------------ |
| `agorapura-core` | lib | `Identity`/`Keypair` (ed25519), `Claim`, `Attestation` firmada y autoverificable |
| `agorapura-graph` | lib | `TrustGraph` (atestaciones verificadas) + `Corroboration` + `TrustPolicy` negociada |
## Modelo
```text
Keypair ──► Identity (kind: Person|Community|Alliance|Institution)
Claim (subject · predicate = value) ──firmado──► Attestation
│ │
└──────────► TrustGraph ◄──────────────┘
corroboration(claim) → Corroboration
TrustPolicy.accepts() → sí / no
```
- **Fractal**: persona, comunidad, alianza e institución comparten
estructura idéntica. Que una institución atestigüe sobre una persona
o una alianza sobre una comunidad es la misma operación.
- **Autoverificable**: una `Attestation` lleva la clave pública del
atestador y su firma — cualquiera la valida sin consultar a nadie.
- **Sin veredicto central**: el grafo devuelve evidencia cruda
(`Corroboration`); la validez la decide una `TrustPolicy` *negociada*.
Dos consumidores con políticas distintas pueden discrepar legítimamente
sobre la misma red.
## Dependencias
- `core``ed25519-dalek`, `blake3` (id = BLAKE3 de la clave pública).
- `graph``agorapura-core`. Ambos `#![forbid(unsafe_code)]`.
- Cero red, cero estado global — tipos puros. El transporte y el
descubrimiento (DHT, Cards) van en capas superiores.
## Determinismo
`Keypair::from_seed` es determinista — tests y derivación jerárquica de
claves dependen de ello. Una identidad real siembra desde un CSPRNG.
## Estado
`core` + `graph` implementados y verdes (22 tests). **Pendiente**:
integración con `CardKind` (variantes Person/Community/Alliance/
Institution en el protocolo) y descubrimiento federado vía DHT.