feat(card): WireCard + extensions — forward-compat sin romper postcard
Restaura el campo extensions de Card que había caído al adoptar postcard (serde_json::Value usa secuencias/maps de longitud dinámica). La solución es separar dos formas: - Card (la rica): para JSON/TOML. Tiene extensions: BTreeMap<String, serde_json::Value> con #[serde(flatten, skip_serializing_if = is_empty)]. Los campos desconocidos del archivo sobreviven el roundtrip. - WireCard (la slim): para postcard. Mismo schema sin extensions y con genesis: Vec<WireCard> recursivo. Postcard-friendly por construcción. Conversiones From<Card> for WireCard (descarta extensions) y From<WireCard> for Card (extensiones quedan vacías post-wire). El contrato es explícito: extensions son anotaciones locales que sobreviven file I/O pero NO cruzan al Init. brahman-handshake::Hello.card cambia de Card a WireCard. Client hace card.into() al enviar; Server hace hello.card.into() para volver a Card antes de validar/registrar. Tests: - 3 nuevos en brahman-card: extensions_preserved_in_json_roundtrip, wire_card_roundtrip_strips_extensions, wire_card_postcard_friendly (verifica que postcard::to_allocvec(&wire) NO falla — caso que rompía con Card.extensions populadas). - 1 ajuste en handshake/tests/handshake.rs (struct-literal de Hello ahora con card: sample_card(...).into()). - brahman-card: postcard como dev-dep. Tests acumulados: 35 (card 11, broker 11, handshake codec+transport 2 + integ 7, card-wit 4, admin 0). 0 errores, 0 warnings (vienen del commit anterior9420eae). CHANGELOG.md actualizado con esta entrada y con el commit9420eae("probando" del usuario, limpieza de 17 warnings dead-code). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,43 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-08
|
||||
|
||||
### feat(card): WireCard + extensions — forward-compat sin romper postcard
|
||||
- `Card.extensions: BTreeMap<String, serde_json::Value>` restaurado con
|
||||
`#[serde(flatten, default, skip_serializing_if = is_empty)]`. Los
|
||||
campos JSON/TOML desconocidos sobreviven el roundtrip de archivos.
|
||||
- Nuevo `WireCard`: proyección postcard-friendly (sin `extensions`,
|
||||
`genesis: Vec<WireCard>` recursivo). Conversiones `From<Card>` y
|
||||
`From<WireCard>` con descarte/recreación de extensions.
|
||||
- `brahman-handshake::Hello.card` pasa de `Card` a `WireCard`. Client
|
||||
hace `card.into()` antes de enviar; Server hace `hello.card.into()`
|
||||
para volver a Card antes de validar/registrar.
|
||||
- 3 tests nuevos en brahman-card:
|
||||
`extensions_preserved_in_json_roundtrip`,
|
||||
`wire_card_roundtrip_strips_extensions`,
|
||||
`wire_card_postcard_friendly` (postcard encode/decode efectivo).
|
||||
- brahman-card gana `postcard` como dev-dep para el último test.
|
||||
- Contrato documentado: extensions = anotaciones locales que NO cruzan
|
||||
al Init; sólo viven en archivos.
|
||||
|
||||
### `9420eae` chore: limpia warnings dead-code en arje (commit del usuario)
|
||||
- `ente-zero/src/events.rs`: `#![allow(dead_code)]` a nivel módulo —
|
||||
es vocabulario de eventos con variantes/campos reservados para flujos
|
||||
no cableados aún (CapabilityRequested, ShutdownReason::Signal,
|
||||
CapabilityGrant::{Granted, Denied, QuotaExceeded}, ExitStatus
|
||||
fields).
|
||||
- `ente-zero/src/graph/mod.rs`: comentado el re-export ahora innecesario
|
||||
de `SHUTDOWN_GRACE`. `DEFAULT_GRANT_TTL` con `#[allow(dead_code)]`
|
||||
+ nota "reservado para capability granting".
|
||||
- `ente-zero/src/graph/capabilities.rs`: `renew_grant` con
|
||||
`#[allow(dead_code)]` (capability renewal pendiente).
|
||||
- `ente-kernel/src/surface.rs`: drop de `use anyhow::Context` (no se
|
||||
usaba).
|
||||
- `ente-hostnamed-compat/src/main.rs`: drop de `Connection` (no se
|
||||
usaba).
|
||||
- `ente-polkit-compat/src/main.rs`: `PolicyDecision.source` con
|
||||
`#[allow(dead_code)]` (sólo aparece en `Debug` para logging).
|
||||
- `cargo check --workspace`: 17 warnings → 0.
|
||||
|
||||
### feat(sidecar): WIT al sidecar — módulos conscientes vivos
|
||||
- `brahman-card::WitInterface` deriva `Serialize`, `Deserialize`,
|
||||
`PartialEq`, `Eq` para cruzar el wire postcard.
|
||||
|
||||
Reference in New Issue
Block a user