El tweet de la discordia

| 9 min read

La mirada "científica" del Ingeniero Bryan Montes

A finales de septiembre de 2025, en medio de la campaña electoral para la presidencia de Bolivia, comenzaron a circular videos que mostraban supuestos tweets racistas del candidato a Vicepresidente por la Alianza Libre, Juan Pablo Velasco. La primera aparición parece ser en un canal de un streamer argentino poco conocido. La cuenta de twitter de Juan Pablo Velasco fue borrada rápidamente, con lo cuál solo tres tweets aparecen guardados:

A partir de ese momento comenzaron intentos de demostrar que todo era una campaña sucia y que esos tweets habían sido fabricados. Dos organizaciones de verfificación de datos de Bolivia (Bolivia Verifica y Chequea Bolivia) publicaron notas al respecto, y el periodista Joaquín Martela realizó un reporte sobre la veracidad o no de los mismos.

Por otro lado, el 2 de octubre, el Ingeniero Bryan Montes publicó en la plataforma Medium un texto en el que intentaba demostrar la falsedad del primero de los tweets en la misma plataforma de X y la forma en que estructura los números de publicación. Me voy a detener principalmente en lo que dice el Ingeniero Montes, tanto en los videos en el programa de Valverde (primera parte y segunda parte como en su publicación (actualizada el 16 del mismo mes) porque ha tenido mayor repercusión mediática y porque creo que esconde bajo términos técnicos una investigación deficiente[2].

Tanto en la versión original del texto como en los videos, basa su conclusión de que era un tweet falso en la extensión del identificador del tweet (un valor único que le da twitter a cada tweet y que puede verse, por ejemplo, en la barra de navegación). Al principio dijo que ese número nunca había sido de 15 cifras, que primero habían tenido 11 y después 17. Esto de demostró rápidamente falso y por eso actualizó el posteo a la nueva versión, que es la que discutiremos.

El status ID, Snowflake y los números sospechosos

El status ID de un tweet es el número que puede verse en la url, en el caso de este supuesto tweet es 982371956428800 (la url completa es "https://x.com/Jpvel/status/982371956428800")

Según Bryan Montes el número del ID del supuesto tweet es sospechoso porque, cito:

Los IDs de Twitter de la transición a Snowflake (noviembre de 2010) oscilan típicamente en el rango bajo de 5 × 1014 a 9 × 1014. Los IDs auténticos de esa época (ej., Doria Medina 6.25 × 1014, Macri 8.95 × 1014) confirman este rango.

Al examinar el ID polémico 982371956428800 (9.82 × 1014):

  • Este valor se encuentra en el extremo superior y ligeramente fuera del patrón de densidad de tweets reales generados entre el 4 y el 26 de noviembre de 2010.
  • Los datos históricos de la plataforma (datasets de SNAP Stanford y análisis comunitarios) demuestran que la generación de IDs era mucho más densa y predecible en el rango inferior.

Es extraño que no haya un gráfico con toda esta información (sobre todo hablando del patrón de densidad que se podría ver mejor en un gráfico que con cinco tweets relacionados). Él incluye otros cuatro tweets para mostrar que los números estaban dentro de ese rango, todos publicados anteriormente al supuesto tweet de Velasco. Yo tomé otro tweets del 6 de noviembre, y el status ID siguió creciendo y desmentiría la afirmación de un rango entre el 5x1014 y el 9x1014.

Status IDURLFechaNot. Científica
862119335567360https://x.com/deimidis/status/8621193355673606 nov 2010 10:48:39 GMT8,62 x 1014
982371956428800https://x.com/Jpvel/status/9823719564288006 nov 2010 18:46:30 GMT9,82 x 1014
985675805499392https://x.com/HoraBolivia/status/9856758054993926 nov 2010 18:59:38 GMT9.85 x 1014
985824543903744https://x.com/southernpulse/status/9858245439037446 nov 2010 19:00:13 GMT9.85 x 1014
987267954909184https://x.com/C0nversad0R/status/9872679549091846 nov 2010 19:05:57 GMT9.87 x 1014
994290184486912https://x.com/LaughterChemist/status/9942901844869126 nov 2010 19:33:51 GMT9,94 x 1014
1027197477326848https://x.com/hugomiranda/status/10271974773268486 nov 2010 21:44:37 GMT1,02 x 1015

El supuesto tweet de JP Velasco es el que está destacado en negrita. En esta cronología no parece un ID extraño ni fuera de un rango que nos pudiera hacer sospechar que estuviera inventado. Y solo busqué una serie de tweets en el que se mencionara la palabra Bolivia, para conseguir un número de tweets de ese día.

El segundo punto que menciona es que la captura del tweet que se encuentra en archive.li es diferente a cómo se muestra una captura de un tweet que aún existe, por lo que concluye que es una página creada para parecerse a twitter, pero que no lo es. También me resulta extraño que haya una tabla, pero no muestras del código [3].

Hay que tener en cuenta que la forma en que funciona archive.li es la de incorporar la página que uno quiere guardar dentro del marco de su página, por lo tanto el código no es tan limpio como si fuera la estructura de la página de twitter.

Por poner un ejemplo, vamos a tomar la captura de archive.li que él mismo cita del tweet de Doria Medina que aún puede encontrarse en twitter. Elijo solamente la etiqueta <article> como ejemplo que es la que contiene el tweet. En la versión original se ve así:

<article aria-labelledby="id__qj66gy7wbh id__b3d136plbqv id__1ir0v601dj3 id__z4z79u6cp9b id__g9mb8bsstsq id__bg8py7233ae id__bj0p10qknvv id__0ntnsnilu9ba id__joequ27p1n id__e4agweymm4 id__5ffzk1kgnoi id__bvbqpai0skj id__ipn40od3oo id__m44swmsds3a id__0euzn0iptmm8 id__p4g1hlqfu0h id__6rdjhz2gtmt id__grutehrzvk id__ot9fpfzohyl id__ihcy1u4s94j" role="article" tabindex="-1" class="css-175oi2r r-18u37iz r-1udh08x r-1c4vpko r-1c7gwzm r-1ny4l3l" data-testid="tweet">

En la versión de archive.li se ve de la siguiente forma:

<article aria-labelledby="id__mn6v5l5du8 id__20ww32t1s5e id__7wqpx5b0fkf id__8mqbekw0yd4 id__gbov38ti0e id__82xfho9ztgb id__gb85lp9pzmu id__4ltebzv1uca id__dpct9swwkkt id__17txef5fb36 id__uemrm8xne3 id__5ox6snrbxj id__7gwl3ufmfoa id__iexphbllty id__4ad2d5hqkc8 id__6socl2qpuwr id__8l42qj6lu3o id__izushvus24 id__dgjhygba2wh id__tah9e7dnux" role="article" tabindex="-1" style="z-index:0;align-items:stretch;background-color:rgba(0, 0, 0, 0);border-bottom-color:rgb(0, 0, 0);border-bottom-style:solid;border-bottom-width:0px;border-image-outset:0;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-left-color:rgb(0, 0, 0);border-left-style:solid;border-left-width:0px;border-right-color:rgb(0, 0, 0);border-right-style:solid;border-right-width:0px;border-top-color:rgb(0, 0, 0);border-top-style:solid;border-top-width:0px;box-sizing:border-box;display:flex;flex-basis:auto;flex-direction:row;flex-shrink:0;list-style-image:none;list-style-position:outside;list-style-type:none;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;min-height:0px;min-width:0px;outline-style:none;overflow-x:hidden;overflow-y:hidden;padding-bottom:0px;padding-left:16px;padding-right:16px;padding-top:0px;position:relative;text-decoration-color:rgb(0, 0, 0);text-decoration-line:none;text-decoration-style:solid;text-decoration-thickness:auto;">

Y lo mismo pasa con las otras etiquetas. Si bien se ven de forma similar, el código HTML es bastante diferente. Pero recordemos que esta es la copia citada por Montes del tweet de Doria Medina que aún se encuentra en X y en archive.li. Pueden probar con el de cualquier otra persona.

Ahora, si analizamos esta versión de archive.li del tweet de Doria Medina y el supuesto tweet de JP Velasco, no notaremos mayores diferencias (a pesar de lo que dice pero no demuestra Montes). La mayor diferencia (fuera del texto) es que los botones para compartir, retuitear, etc, en el de Doria Medina los muestra con la etiqueta <a> y en el caso de JPVel con la etiqueta <button>. Sin embargo, si vamos al tweet original en X vemos que X muestra esos botones justamente con la etiqueta <button>, con lo cual el más "real" si nos basáramos en las transformaciones de archive.li sería el supuesto de JPVel.

Otro dato llamativo en el texto actualizado de medium es que habla de metadatos que no están, pero al mirar el código fuente de la página si los vemos. Es en el punto 2.3 que llama El silencio de los metadatos faltantes (la prueba del SEO):

Falso (HnSpJ): Las etiquetas <meta> son genéricas y suelen omitir datos técnicos cruciales (falta twitter:site=”@x”, twitter:card=”summary” o timestamps en formato ISO 8601).

Sin embargo, si desde el enlace hacemos clic derecho y miramos el código fuente, encontramos la información que dice que falta[4][5]:

<!DOCTYPE html><html style="background-color:#EEEEEE" prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#" itemscope itemtype="http://schema.org/Article"><head><!--                         36a111dd8fda559ddde3cfc117680f83
                         Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36
--><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/><meta name="referrer" content="no-referrer-when-downgrade"/><meta name="robots" content="nocache,noarchive"/><meta property="twitter:card" content="summary_large_image"/><meta property="twitter:site" content="@archiveis"/><meta property="twitter:title" content="Juan Velasco on X: &quot;A los collas hay q matarlos a todoooosss!!&quot; / X"/><meta property="twitter:url" content="https://archive.li/HnSpJ"/><meta property="twitter:domain" content="archive.li"/><meta property="og:type" content="article"/><meta property="og:site_name" content="archive.li"/><meta property="og:url" content="https://archive.li/HnSpJ" itemprop="url"/><meta property="og:title" content="Juan Velasco on X: &quot;A los collas hay q matarlos a todoooosss!!&quot; / X"/><meta property="twitter:title" content="Juan Velasco on X: &quot;A los collas hay q matarlos a todoooosss!!&quot; / X"/><meta property="twitter:description" content="archived 24 Aug 2025 18:22:43 UTC" itemprop="description"/><meta property="article:published_time" content="2025-08-24T18:22:43Z" itemprop="dateCreated"/><meta property="article:modified_time" content="2025-08-24T18:22:43Z" itemprop="dateModified"/><link rel='dns-prefetch' href='//d86n8n19qp277z.archive.li'/><base href='//d86n8n19qp277z.archive.li'/><link rel="image_src" href="/HnSpJ/9f093329e66811328ecb0df81021fd5e99f0ca30/scr.png"/><meta property="og:image" content="/HnSpJ/9f093329e66811328ecb0df81021fd5e99f0ca30/scr.png" itemprop="image"/><meta property="twitter:image" content="/HnSpJ/9f093329e66811328ecb0df81021fd5e99f0ca30/scr.png"/><meta property="twitter:image:src" content="/HnSpJ/9f093329e66811328ecb0df81021fd5e99f0ca30/scr.png"/><meta property="twitter:image:width" content="1024"/><meta property="twitter:image:height" content="768"/><link rel="icon" href="https://www.google.com/s2/favicons?domain=x.com"/><link rel="canonical" href="https://archive.li/2025.08.24-182243/https://x.com/Jpvel/status/982371956428800"/><link rel="bookmark" href="http://archive.today/20250824182243/https://x.com/Jpvel/status/982371956428800"/><title>Juan Velasco on X: &quot;A los collas hay q matarlos a todoooosss!!&quot; / X</title><style type="text/css">/* declared */

El de Dora Medina que él mismo pone de ejemplo nos muestra lo siguiente:

<!DOCTYPE html><html style="background-color:#EEEEEE" prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#" itemscope itemtype="http://schema.org/Article"><head><!--                         c5f76e564d60406988e1fed8fc19eccc
                         Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36
--><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/><meta name="referrer" content="no-referrer-when-downgrade"/><meta name="robots" content="nocache,noarchive"/><meta property="twitter:card" content="summary_large_image"/><meta property="twitter:site" content="@archiveis"/><meta property="twitter:title" content="Samuel Doria Medina on X: &quot;* Entrevista Inédita con Samuel Doria Medi&#x2026;"/><meta property="twitter:url" content="https://archive.li/o85pD"/><meta property="twitter:domain" content="archive.li"/><meta property="og:type" content="article"/><meta property="og:site_name" content="archive.li"/><meta property="og:url" content="https://archive.li/o85pD" itemprop="url"/><meta property="og:title" content="Samuel Doria Medina on X: &quot;* Entrevista Inédita con Samuel Doria Medi&#x2026;"/><meta property="twitter:title" content="Samuel Doria Medina on X: &quot;* Entrevista Inédita con Samuel Doria Medi&#x2026;"/><meta property="twitter:description" content="archived 14 Oct 2025 17:50:01 UTC" itemprop="description"/><meta property="article:published_time" content="2025-10-14T17:50:01Z" itemprop="dateCreated"/><meta property="article:modified_time" content="2025-10-14T17:50:01Z" itemprop="dateModified"/><link rel='dns-prefetch' href='//ddqbfwx4p74185.archive.li'/><base href='//ddqbfwx4p74185.archive.li'/><link rel="image_src" href="/o85pD/509bc89ccf0bab708437b34e0f7eabd162b1cffb/scr.png"/><meta property="og:image" content="/o85pD/509bc89ccf0bab708437b34e0f7eabd162b1cffb/scr.png" itemprop="image"/><meta property="twitter:image" content="/o85pD/509bc89ccf0bab708437b34e0f7eabd162b1cffb/scr.png"/><meta property="twitter:image:src" content="/o85pD/509bc89ccf0bab708437b34e0f7eabd162b1cffb/scr.png"/><meta property="twitter:image:width" content="1024"/><meta property="twitter:image:height" content="768"/><link rel="icon" href="https://www.google.com/s2/favicons?domain=x.com"/><link rel="canonical" href="https://archive.li/2025.10.14-175001/https://x.com/SDoriaMedina/status/625330125537280"/><link rel="bookmark" href="http://archive.today/20251014175001/https://x.com/SDoriaMedina/status/625330125537280"/><title>Samuel Doria Medina on X: &quot;* Entrevista Inédita con Samuel Doria Medina: Los países están tomando conciencia de la importancia de definir c... http://bit.ly/aGwX65&quot; / X</title><style type="text/css">/* declared */

Y si ponemos un tercer tweet que también todavía existe en X podemos ver:


<!DOCTYPE html><html style="background-color:#EEEEEE" prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#" itemscope itemtype="http://schema.org/Article"><head><!--                         e9251d0da490c6a30af511f34554b7b6
                         Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36
--><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/><meta name="referrer" content="no-referrer-when-downgrade"/><meta name="robots" content="nocache,noarchive"/><meta property="twitter:card" content="summary_large_image"/><meta property="twitter:site" content="@archiveis"/><meta property="twitter:title" content="&#x1F9E1; deimidis &#x1F49A; on X: &quot;Último día en Barcelona, casi todo un día en Ma&#x2026;"/><meta property="twitter:url" content="https://archive.li/xc0Sq"/><meta property="twitter:domain" content="archive.li"/><meta property="og:type" content="article"/><meta property="og:site_name" content="archive.li"/><meta property="og:url" content="https://archive.li/xc0Sq" itemprop="url"/><meta property="og:title" content="&#x1F9E1; deimidis &#x1F49A; on X: &quot;Último día en Barcelona, casi todo un día en Ma&#x2026;"/><meta property="twitter:title" content="&#x1F9E1; deimidis &#x1F49A; on X: &quot;Último día en Barcelona, casi todo un día en Ma&#x2026;"/><meta property="twitter:description" content="archived 14 Oct 2025 15:01:52 UTC" itemprop="description"/><meta property="article:published_time" content="2025-10-14T15:01:52Z" itemprop="dateCreated"/><meta property="article:modified_time" content="2025-10-14T15:01:52Z" itemprop="dateModified"/><link rel='dns-prefetch' href='//ddfp7yp5fhdvs4.archive.li'/><base href='//ddfp7yp5fhdvs4.archive.li'/><link rel="image_src" href="/xc0Sq/dc6b2ae5fd45e2b1b6318d77c1b0f29db834684e/scr.png"/><meta property="og:image" content="/xc0Sq/dc6b2ae5fd45e2b1b6318d77c1b0f29db834684e/scr.png" itemprop="image"/><meta property="twitter:image" content="/xc0Sq/dc6b2ae5fd45e2b1b6318d77c1b0f29db834684e/scr.png"/><meta property="twitter:image:src" content="/xc0Sq/dc6b2ae5fd45e2b1b6318d77c1b0f29db834684e/scr.png"/><meta property="twitter:image:width" content="1024"/><meta property="twitter:image:height" content="768"/><link rel="icon" href="https://www.google.com/s2/favicons?domain=x.com"/><link rel="canonical" href="https://archive.li/2025.10.14-150152/https://x.com/deimidis/status/862119335567360"/><link rel="bookmark" href="http://archive.today/20251014150152/https://x.com/deimidis/status/862119335567360"/><title>&#x1F9E1; deimidis &#x1F49A; on X: &quot;Último día en Barcelona, casi todo un día en Madrid y después nuevamente a América del sur #drumbeat&quot; / X</title><style type="text/css">/* declared */

Como puede verse la estructura es similar entre las aún existentes en X y el supuesto tweet guardado de JPVel. De nuevo, lo más llamativo es que él dice que esta información no existe, cuando cualquiera puede encontrarla. Además tenemos la fecha en la que fue capturado el tweet <meta property="article:published_time" content="2025-08-24T18:22:43Z" itemprop="dateCreated"/> (24 de agosto de este año) que es un poco antes de que se viralizara el tema. Aunque recordemos que esta es la fecha en que fue guardado el tweet, no se relaciona de ninguna forma con el tweet original. Eso nos lleva al tercer punto, ¿cómo funciona archive.li?

Archive.li sirve para guardar copias de páginas web en caso de que desaparezcan posteriormente. Escribimos una url en su formulario y su navegador se dirige a esa página y copia el código, además de tomar una captura de pantalla. Esto se puede ver cuando le pedimos que nos haga una captura:

Así guarda archive.li una página web

Como se ve en este ejemplo, archive.li no confía en lo que yo escriba (como dice el Ingeniero Montes y repiten otros en las diferentes discusiones), si no que va a buscar el sitio al que yo lo envié y desde ahí descarga la copia. Por lo tanto, para engañar a archive.li, deberían haberle hecho creer que x.com estaba en otro servidor, para lo que deberían cambiarle los DNS o inyectarle código (como le dejan escrito en los comentarios antes de la actualización). El uso de aplicaciones como Tampermonkey no lo hacen posible, ya que estas herramientas modifican nuestra copia local de la página (es decir lo que ve nuestro navegador) pero no el sitio real.

Tampermonkey se menciona en todos los casos porque el navegador que mostraba el streamer argentino lo tenía instalado, lo cual lleva a la sospecha de que haya modificado las páginas para mostrar tweets falsos. Hay otra investigación que llevó adelante el usuario kaydo en youtube que hace mayor foco en el funcionamiento de Tampermonkey para simular tweets mientras se está navegando, haciendo parecer que ciertos tweets existen. Sin embargo, todos esos cambios se realizan en el navegador, no en archive.li.

El video se divide en dos demostraciones. La primera tiene por objetivo mostrar que con Tampermonkey se podría haber modificado X para que en el vivo aparecieran tweets que no existen y en la segunda intenta demostrar cómo utilizando tweets viejos de otra cuenta, se podría haber simulado que los publicó JPvel.

Para toda la primera parte, el streamer argentino debería haber sido parte conciente del engaño, ya que como dijimos Tampemonkey no modifica cómo otros ven la página, si no como la muestra nuestro navegador. Por lo tanto, él debería estar ejecutando el código que imprimiera los tweets falsos en su navegador. Aunque esto no es descabellado, igualmente no explicaría la existencia del supuesto tweet de JP Velasco en archive.li.

Eso es lo que intenta demostrar en la segunda parte. Pero como le escribí en el comentario (y él aceptó), para eso deberían haberle hackeado la cuenta de twiiter/X a Jp Velasco y cambiado los handlers (es decir el arroba del usuario), lo que le hubiera hecho perder el tilde de verificación al menos por 48 horas (además de que su cuenta hubiera publicado con otro nombre durante esas 48 horas). Y este cambio debería haber sucedido el 24 de agosto, porque ahí es donde se capturó el supuesto tweet, o sea en plena campaña, lo que dificultaría mucho que nadie se diera cuenta de que hubieran perdido acceso a la cuenta o hayan perdido el signo de verificación.

Por lo tanto, aunque Kaydo muestra una forma posible de falsificar el tweet, suena muy difícil que con todo lo que debería haber pasado para que eso sucediera no se hubieran dado cuenta desde su equipo de campaña. Según cuenta Joaquín Martela ellos cerraron la cuenta ante innumerables intentos de hackeo (una excusa por demás ridícula, teniendo en cuenta que existen buenas prácticas para proteger la cuenta). Si hubiera sido un hackeo de esa forma, podrían haberlo demostrado de mejor forma que cerrando la cuenta, algo bastante extremo para hacer en medio de la campaña electoral.

Por todo esto, yo creo que el tweet es verdadero. No lo podemos afirmar porque borraron la cuenta, pero hasta ahora nadie demostró que puedan haber engañado a archive.li de una forma en la que no se hubieran dado cuenta quienes administraban las cuentas sociales del candidato. Además, todo el accionar posterior del candidato y su campaña hace todo más sospechoso, por lo tanto creo que la solución más simple es que esta persona twiteó eso hace 15 años cuando no imaginaba que iba a ser candidato y posteriormente no se sentó a revisar si había algo que se le pudiera volver en contra.


  1. Estos tweets fueron recopilados por Joaquín Martela ↩︎

  2. No puedo no mencionar que el Ingeniero Bryan Montes, cuando en el video habla en contra de las verificadoras y los medios de comunicación que dieron el tweet como verdadero, toma a ChatGPT como una fuente confiable que puede decirnos si archive.today o archive.li son sitios confiables, cuando los modelos de lenguaje son, justamente, herramientas poco confiables para basar un análisis. Como comentario personal, creo que muchas partes de su investigación las realizó con ayuda de estas herramientas, y ahí están los resultados. ↩︎

  3. Entiendo que pudiera ser para no parecer demasiado técnico, pero toda la parte estadística tiene ese tono, asi que podría haber incluído ejemplos del código. ↩︎

  4. Estas capturas del HTML se hicieron con el navegador Brave haciendo clic con el botón derecho en cada una de las páginas. Sin embargo, al código fuente de la página se puede acceder desde cualquier navegador de forma similar. No se necesitan herramientas forenses para hacerlo. ↩︎

  5. Extrañamente él menciona en el video la opción de mirar el código, algo que parece que no ha hecho. ↩︎