c1c136954e
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>
58 lines
2.6 KiB
Markdown
58 lines
2.6 KiB
Markdown
# 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.
|