kernel: el contrato admite capacidades de INTERFAZ — el test llevaba rojo desde el 03-09
`cargo test` del workspace fallaba en `el_contrato_del_repo_cierra_sobre_si_mismo`: «proceso-por-descriptor no declara símbolos». No es un descuido del alta: `abda7d3` dio de alta pidfd con `symbols = []` y dedicó ocho líneas a explicar por qué va vacío — pidfd no depende de ningún `CONFIG_*`, es interfaz del core desde Linux 5.3. Lo que no se actualizó fue el invariante, así que el dato quedó bien y el test quedó rojo. Dos días sin que nadie lo viera, que es lo que pasa cuando una suite falla por algo que «ya se sabe»: deja de mirarse entera. El invariante correcto no es «toda capacidad tiene símbolos» sino **«toda capacidad afirma algo comprobable»**: sin símbolos vale, pero entonces hay que nombrar la INTERFAZ. Sin una ni la otra, la capacidad no dice nada que se pueda verificar y lo más probable es que sea un campo a medias — que es el caso que el assert original quería atrapar y sigue atrapando. Hoy hay exactamente una capacidad así y declara `interface = ["pidfd_open(2)", "pidfd_send_signal(2)"]`. Workspace: 541 tests en verde, 0 fallos.
This commit is contained in:
@@ -413,7 +413,17 @@ profile = "anfitrion"
|
||||
);
|
||||
}
|
||||
for cap in &c.capabilities {
|
||||
assert!(!cap.symbols.is_empty(), "{} no declara símbolos", cap.id);
|
||||
// Una capacidad SIN símbolos es legítima sólo si es de INTERFAZ: algo que el kernel da
|
||||
// siempre a partir de cierta versión y que ningún `CONFIG_*` enciende ni apaga (pidfd
|
||||
// desde 5.3). Entra al contrato igual, porque el contrato es la lista de lo que se USA
|
||||
// —no la de lo que puede faltar— y es la línea que lo dice si mañana baja el mínimo de
|
||||
// kernel. Pero entonces TIENE que nombrar la interfaz: sin símbolos ni interfaz, la
|
||||
// capacidad no afirma nada comprobable y lo más probable es que sea un campo a medias.
|
||||
assert!(
|
||||
!cap.symbols.is_empty() || !cap.interface.is_empty(),
|
||||
"{} no declara símbolos NI interfaz: no afirma nada comprobable",
|
||||
cap.id
|
||||
);
|
||||
assert!(!cap.consumer.trim().is_empty(), "{} no declara consumidor", cap.id);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user