runbook: el contrato de capacidades, al lado del diff-back

`diff-back` contesta «¿el .config honra el PLAN?»; el contrato contesta la otra
mitad, «¿el kernel trae lo que el userland usa por nombre?». Son distintas: un
kernel puede honrar su plan al pie de la letra y no tener MEMCG, que nunca
estuvo en ningún plan porque nadie lo pidió.

Queda dicho también que hoy sale ROJO a propósito (2 de 11) y por qué.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ACUcwo9mZsE5ocYVE9npih
This commit is contained in:
Sergio
2026-08-29 19:36:17 +00:00
co-authored by Claude Opus 5
parent bfa3c6445a
commit 72159adb32
+30
View File
@@ -208,6 +208,36 @@ Clasifica cada símbolo pedido en cumplido / **incumplido** (el `.config` dice o
(el kernel ni lo menciona: la bandera fue un no-op), con la procedencia de quién lo pidió. Sale
distinto de cero si el config no honra el plan.
## 6. El contrato de capacidades — antes de dar un kernel por bueno
`diff-back` contesta «¿el `.config` honra el PLAN?». Falta la otra mitad: **«¿el kernel trae lo que
el userland usa por nombre?»**. Son preguntas distintas — un kernel puede honrar su plan al pie de
la letra y no tener `CONFIG_MEMCG`, que nunca estuvo en ningún plan porque nadie lo pidió (SDD 25
§4: por eso `memory.max` no existe y arje escribe al vacío dejando sólo un `warn!`).
```sh
hammer --store ./store kernel contract --sealed # todos los kernels sellados del store
hammer kernel contract --config <art>/boot/config-7.1.2 # uno suelto (el perfil sale del nombre)
hammer kernel contract --profile anfitrion-cards # el kernel VIVO de esta máquina
hammer kernel contract --list # qué promete hammer, y quién lo consume
```
Sale distinto de cero si falta una capacidad **exigida por el perfil**. Tres cosas que conviene
saber antes de leer su salida:
- **Corre por perfil.** `docs/state/kernel-contract.toml` mapea artefacto → perfil. `linux` es
`qemu-serial` (no hospeda Cards, y su hash es el baseline del selfhost-verify); los demás son
`anfitrion-cards`. Un artefacto **sin fila** sale **SIN COMPROBAR**, que no es lo mismo que
aprobado.
- **Se mira contra el `.config` producido**, nunca contra la receta: entre el `scripts/config -e X`
y el `.config` está `olddefconfig`.
- **Hoy sale rojo a propósito**: 2 de 11 configs sellados cumplen. Es H1 de SDD 25 sin pagar
(`-e MEMCG -e PSI` re-hashea los kernels ⇒ va en tanda). Cuando se pague, este comando es la
prueba.
**Una capacidad nueva entra al contrato con consumidor —ruta y símbolo— o no entra.** «Estaría
bueno tenerlo» pertenece a un bundle del catálogo, no acá.
---
## Lo que todavía NO está