1 Commits
Author SHA1 Message Date
davidherranandClaude Fable 5 4bdd0409f9 test(identity): la condición de Mathi — el DID no porta el kind, y el test sabe reprobar
Cierra la ÚLTIMA condición viva del DC ORIGIN IDENTITY UNIFICATION V1.

CONTEXTO: Mathi RETIRÓ su condición #4 (meter `kind` en el material hasheado del
KDF) tras mi objeción, y su ruling la retiró con un argumento mejor que el mío:
si `kind` entra al KDF, un Human que pasa a Hybrid —transición que el Inmutable
#41 PERMITE— rota su identidad entera. No es un trade-off: es una contradicción
de diseño, porque el sistema declararía legal una transición que destruye al
sujeto que la hace. Una identidad tiene que sobrevivir a aquello en lo que se le
permite convertirse.

Pero la retiró CON UNA CONDICIÓN, y es esta: el prefijo `did:origin:<kind>:` es
etiqueta de DISPLAY, jamás autoridad — «ningún consumidor puede decidir leyendo
el prefijo, y debe existir un test que lo demuestre».

LO QUE PRUEBA EL TEST (`kind_authority_is_the_attestation_never_the_did`):
En mi capa la condición se satisface de RAÍZ, no por convención: si el DID no
PORTA el kind, ningún consumidor puede inferirlo de él aunque quiera. Es una
imposibilidad aritmética, no una regla de etiqueta.
  1. El DID de un HYBRID registrado es byte-idéntico a `derive_did(pubkey)` puro
     — un Human con la misma llave tendría EXACTAMENTE el mismo DID.
  2. El kind autoritativo vive en `Identities[account].kind`, respaldado por la
     firma de binding del registro. Ahí es donde hay que preguntarlo.
  3. CONTRAFACTUAL incorporado: computa el DID que resultaría de meter el kind al
     material (lo que proponía la #4) y verifica que DIFIERE del real.
  4. Corolario: cambiar de rol deja el DID intacto — la identidad SOBREVIVE a la
     transición que el #41 permite.

Y MEDIDO EN MI PALLET, no asumido: cero `did:origin`, cero `starts_with`, cero
`prefix` en el camino de decisión. Mi cadena nunca ve el prefijo de display.

EL TEST SABE REPROBAR — verificado, no prometido: saboteé `derive_did` inyectando
el discriminante del kind al material (exactamente la condición #4) y el test se
puso ROJO con su diagnóstico propio («la condición #4 RETIRADA volvió a entrar
por la puerta de atrás»); restaurado, verde. Un test que solo se ha visto pasar
no prueba nada.

Sin cambio de runtime: es test puro, RUNTIME_VERSION sigue en 11.
Verificado: 289 tests verdes en el workspace, 0 fallos.

Con esto el DC 35e764d3 queda cerrado de verdad: #3 cumplida (Did newtype, RV11),
#4 resuelta por retirada razonada — no por caducidad ni por omisión.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 19:10:12 -05:00