Tenía tres paquetes abiertos en el editor de políticas de Newton, vaults.fyi, RedStone, Chainalysis, comprobando si debía permitirse que se ejecutara una acción de bóveda.
Vaults.fyi devolvió un risk_score de 0.72. RedStone devolvió una divergence_bps de 38. Chainalysis devolvió su propio risk_score, "low", además de una marca sancionada establecida en false.
Dos de esas tres respuestas usan exactamente el mismo nombre de campo, risk_score, para dos cosas completamente diferentes. Una es una calificación numérica de la salud de la bóveda. La otra es una etiqueta categórica de sanciones. Nada en el JSON de ninguno de los dos proveedores te avisa con antelación, porque ninguno de los equipos creó su esquema sabiendo que el otro existía.
Si una fusión ingenua solo escribiera ambas respuestas en un único objeto, la segunda escritura gana. La de Vaults.fyi, 0.72, se reemplaza silenciosamente por "low". La política sigue ejecutándose. Sin error, sin advertencia, sin texto rojo en ningún lugar. Empieza a comparar un umbral contra un valor que ya no existe.
Busqué dónde Newton realmente detiene esto, porque claramente no se deja a quien escribe el archivo Rego para que se dé cuenta.
Cada pack nombra su salida bajo su propio id de pack antes de que se fusione algo. El score de riesgo de Vaults.fyi vive en data.wasm.vaultsfyi.risk_score. El de Chainalysis está en data.wasm.chainalysis.risk_score, una dirección completamente distinta, incluso con el mismo nombre de campo. El valor de divergencia de RedStone está en data.wasm.redstone.divergence_bps. Al ejecutar Simulate contra los tres a la vez, el panel de datos fusionados mostró exactamente eso: tres rutas separadas, ninguna tocándose entre sí.
No es una regla que le diga a los desarrolladores que tengan cuidado con el nombrado. Es la propia fusión negándose a permitir que ocurra la colisión, antes de que el autor de una política escriba siquiera una comparación.
Lo que se me quedó no fue el bug que no encontré. Fue lo poco glamoroso que en realidad es el arreglo. Nadie promociona las claves JSON con espacios de nombres. Pero ese detalle exacto está entre una política de bóveda que bloquea correctamente una acción riesgosa, y otra que la aprueba en silencio porque dos proveedores no relacionados casualmente coincidieron en una palabra.

