Skip to content

Latest commit

 

History

History
1316 lines (978 loc) · 67.1 KB

File metadata and controls

1316 lines (978 loc) · 67.1 KB

Paquete de publicación — Videos y Shorts SignsOfAI

Assets en Docs/Blog/video/out/ (videos) y Docs/Blog/shorts/out/ (shorts). Cada MP4 trae su .srt — súbelo como pista de subtítulos. Enlaces fijos: Demo https://peopleworks.github.io/SignsofAI/ · Repo https://github.com/peopleworks/SignsofAI


1. VIDEO GRANDE — Español (signsofai-explainer-es.mp4 · 2:09 · 1280×720 · voz Marcela)

PUBLICADO: https://youtu.be/7Rp3dlX_iig — enlazado desde el README. El enlace canónico es ese, sin el ?si=… que YouTube añade al compartir: es un parámetro de rastreo de la sesión de quien copió el link, no forma parte de la dirección del vídeo.

Título:

Detector de IA que MUESTRA la evidencia (y habla español) | SignsOfAI — gratis y en tu navegador

Descripción (pegar tal cual):

La mayoría de los detectores de IA son cajas negras: te dan un número ("87% IA") y ya. Un profesor no puede acusar con eso; un escritor no puede aprender de eso. Y si escribiste en español, el número suele fallar.

Construí lo contrario. SignsOfAI marca las pistas de la escritura con IA —vocabulario sobreusado, muletillas retóricas y el ritmo robótico de las frases (burstiness)— y por cada una te dice cómo arreglarla. Es bilingüe (el pack de español está derivado desde cero, no traducido), corre 100% en tu navegador —tus documentos nunca salen de tu equipo— e incluye un comparador de originalidad que resalta pasajes compartidos, incluso paráfrasis entre idiomas, como evidencia que juzga un humano.

Gratis y de código abierto (MIT). Hecho con .NET 10 y Blazor WebAssembly.

▶ Pruébalo: https://peopleworks.github.io/SignsofAI/
⭐ Código: https://github.com/peopleworks/SignsofAI

No vendo nada — es un proyecto educativo, por y para la comunidad educativa.

CAPÍTULOS
00:00  El problema del "87%"
00:17  Dos problemas de los detectores
00:30  Qué hace SignsOfAI
00:42  Vocabulario que la IA sobreusa
00:55  Burstiness: el ritmo delata a la máquina
01:15  100% en tu navegador (privado)
01:30  El español, ciudadano de primera
01:41  Originalidad: ¿lo escribió o lo copió?
01:56  Pruébalo

#IA #DetectorDeIA #IntegridadAcadémica #DotNet #Blazor #OpenSource

Hashtags: #IA #InteligenciaArtificial #DetectorDeIA #IntegridadAcadémica #Plagio #DotNet #Blazor #OpenSource #EdTech #ChatGPT

Etiquetas / Tags (bloque para el campo de YouTube):

signsofai, detector de ia, detector de inteligencia artificial, texto generado por ia, como detectar texto de ia, integridad academica, plagio, comparador de originalidad, burstiness, humanizar texto ia, detector chatgpt, escritura con ia, blazor, dotnet, .net 10, webassembly, open source, herramienta educativa, deteccion de ia en español

2. BIG VIDEO — English (signsofai-explainer-en.mp4 · 2:07 · 1280×720 · voice Rachel)

PUBLISHED: https://youtu.be/pKkMRAku7ZQ — linked from the README.

Title:

The AI Writing Detector That Shows Its Work (and speaks Spanish) | SignsOfAI — free, in your browser

Description (paste as-is):

Most AI detectors are black boxes: they hand you a number ("87% AI") and that's it. A teacher can't accuse on that; a writer can't learn from it. And if you wrote in Spanish, the number is often worse than a coin flip.

I built the opposite. SignsOfAI flags the tells of AI writing —overused vocabulary, rhetorical crutches, and statistical sentence-rhythm "burstiness"— and for every one it tells you how to fix it. It's bilingual (the Spanish rule-pack is derived from scratch, not translated), runs 100% in your browser —your documents never leave your device— and includes an originality checker that highlights shared passages, even paraphrases across languages, as evidence a human judges.

Free and open source (MIT). Built with .NET 10 and Blazor WebAssembly.

▶ Try it: https://peopleworks.github.io/SignsofAI/
⭐ Code: https://github.com/peopleworks/SignsofAI

I'm not selling anything — it's an education-first project.

CHAPTERS
00:00  The "87%" problem
00:17  Two problems with detectors
00:30  What SignsOfAI does
00:42  Vocabulary AI overuses
00:55  Burstiness: rhythm gives the machine away
01:15  100% in your browser (private)
01:30  Spanish as a first-class citizen
01:41  Originality: did they write it or copy it?
01:56  Try it

#AI #AIDetection #AcademicIntegrity #dotnet #Blazor #OpenSource

Hashtags: #AI #AIDetection #AcademicIntegrity #Plagiarism #dotnet #Blazor #OpenSource #EdTech #ChatGPT #WritingTools

Tags (YouTube field block):

signsofai, ai detector, ai writing detector, ai text detector, how to detect ai writing, academic integrity, plagiarism checker, originality checker, burstiness, humanize ai text, chatgpt detector, ai writing, blazor, dotnet, .net 10, webassembly, open source, education tool, bilingual ai detection

2b. VIDEO BIENVENIDA A PROFESORES — Español (signsofai-profesores-es.mp4 · 3:03 · 1280×720 · voz Marcela)

El video evergreen para profesores: sirve como bienvenida en presentaciones, en la cabecera de los artículos nuevos, y como respuesta fija a "¿y esto qué hace por mí?". Miniatura: video/thumb/thumb-profesores-es.png. Números verificados contra Docs/CALIBRATION.md (motor 0.4.0): si la calibración se re-corre, revisar la escena p06 antes de re-publicar.

Título:

Profesor: usted no puede actuar sobre un porcentaje. Esto es lo que sí puede hacer | SignsOfAI

Descripción (pegar tal cual):

Cuarenta ensayos, un domingo, y un detector que solo dice "87% IA". Con eso usted no puede acusar, ni sancionar, ni siquiera abrir la conversación.

SignsOfAI no le entrega un veredicto: le entrega evidencia que usted puede comprobar sin confiar en nadie. Una bibliografía que se contradice sola (autores citados que no están en la lista, el mismo DOI en dos artículos, fuentes con fecha imposible). Caracteres que no se producen escribiendo, con línea y columna exactas. Y la línea base del propio estudiante: cada entrega comparada con su propia forma de escribir, no con una población — la mayoría de las veces, el resultado es tranquilidad.

Y la pregunta que ningún detector contesta —"¿cuántas veces te equivocas?"— aquí está publicada, con su intervalo y con la regla nuestra que más se equivoca.

Todo corre en su máquina: navegador o app de escritorio (lee PDF y Word, escanea carpetas completas). Sin servidor, sin cuenta, sin telemetría. Gratis, código abierto, en español e inglés.

▶ Pruébelo: https://peopleworks.github.io/SignsofAI/
⭐ Código: https://github.com/peopleworks/SignsofAI

No vendo nada — es un proyecto educativo, por y para la comunidad educativa.

CAPÍTULOS
00:00  Bienvenida
00:03  Un profesor no puede actuar sobre un porcentaje
00:21  Evidencia, no veredicto
00:38  La bibliografía se contradice sola
01:03  Un carácter está o no está
01:28  La línea base del propio estudiante
01:51  ¿Cuántas veces nos equivocamos? — publicado
02:17  Nada sale de su laptop
02:41  El paquete del profesor

#IA #IntegridadAcadémica #Profesores #DetectorDeIA #EdTech #OpenSource

Hashtags: #IA #IntegridadAcadémica #Profesores #DocenciaUniversitaria #DetectorDeIA #EdTech #OpenSource #EvaluaciónAcadémica

Etiquetas / Tags (bloque para el campo de YouTube):

signsofai, detector de ia para profesores, integridad academica, como detectar ia en ensayos, evidencia no veredicto, falsos positivos detector ia, bibliografia inventada, referencias alucinadas, linea base estilometrica, calibracion detector ia, herramienta para docentes, evaluacion academica, open source, deteccion de ia en español

2c. TEACHER WELCOME VIDEO — English (signsofai-profesores-en.mp4 · 2:51 · 1280×720 · voice Rachel)

The evergreen teacher video: use it in presentations, atop new articles, and as the standing answer to "what does this do for me?". Thumbnail: video/thumb/thumb-profesores-en.png. Numbers verified against Docs/CALIBRATION.md (engine 0.4.0): if calibration is re-run, review scene p06 before republishing.

Title:

Professor: you can't act on a percentage. Here's what you CAN do | SignsOfAI

Description (paste as-is):

Forty essays, one Sunday, and a detector that only says "87% AI". You can't accuse on that, can't sanction on that — can't even open the conversation with it.

SignsOfAI doesn't hand you a verdict: it hands you evidence you can verify without trusting anyone. A bibliography that contradicts itself (authors cited who aren't in the list, the same DOI on two papers, sources dated in the future). Characters that typing doesn't produce, with exact line and column. And the student's own baseline: each submission compared with their own writing, not with a population — most of the time, the answer is relief.

And the question no detector answers —"how often are you wrong?"— is published here, with its interval, and with the one rule of ours that misfires most.

Everything runs on your machine: browser or desktop app (reads PDF and Word, scans whole folders). No server, no account, no telemetry. Free, open source, in English and Spanish.

▶ Try it: https://peopleworks.github.io/SignsofAI/
⭐ Code: https://github.com/peopleworks/SignsofAI

I'm not selling anything — it's an education-first project.

CHAPTERS
00:00  Welcome
00:03  A teacher can't act on a percentage
00:18  Evidence, not a verdict
00:36  The bibliography contradicts itself
01:01  A character is there or it isn't
01:25  The student's own baseline
01:44  How often are you wrong? — published
02:08  Nothing leaves your laptop
02:31  The teacher package

Hashtags: #AI #AcademicIntegrity #Teachers #HigherEd #AIDetection #EdTech #OpenSource #Assessment

Tags (YouTube field block):

signsofai, ai detector for teachers, academic integrity, how to detect ai in essays, evidence not verdict, ai detector false positives, hallucinated references, invented bibliography, stylometric baseline, ai detector calibration, teacher tools, assessment, open source, bilingual ai detection

3. SHORTS — Español (9:16, 1080×1920, voz Marcela)

Formato corto: título con #Shorts, descripción de 1–2 líneas + hashtags. Suben a YouTube Shorts, Reels y TikTok (el .srt da los subtítulos para verlos sin sonido).

Short 1 — El gancho (short1-gancho-es.mp4 · 26s)

Título: 87% IA… ¿y ahora qué? Un número no es evidencia #Shorts Descripción:

Los detectores de IA te dan un porcentaje, no una prueba. SignsOfAI te muestra CADA pista y cómo arreglarla — gratis y en tu navegador.
▶ https://peopleworks.github.io/SignsofAI/
#IA #DetectorDeIA #IntegridadAcadémica #OpenSource #EdTech #Shorts

Short 2 — Burstiness (short2-burstiness-es.mp4 · 30s)

Título: El truco que delata a la IA: el ritmo (burstiness) #Shorts Descripción:

¿IA o humano? Míralo en el ritmo: las máquinas hacen frases todas del mismo largo; los humanos varían. Eso se mide, y SignsOfAI te lo muestra.
▶ https://peopleworks.github.io/SignsofAI/
#IA #Burstiness #DetectorDeIA #Escritura #OpenSource #Shorts

Short 3 — La cuña en español (short3-espanol-es.mp4 · 28s)

Título: Los detectores de IA no hablan español #Shorts Descripción:

Casi todos piensan en inglés y traducen mal el español. SignsOfAI trae un pack de español derivado desde cero. Detecta la IA en tu idioma — gratis y abierto.
▶ https://peopleworks.github.io/SignsofAI/
#IA #Español #DetectorDeIA #IntegridadAcadémica #OpenSource #Shorts

3b. SHORTS — English (9:16, 1080×1920, voice Rachel)

Same three beats as the Spanish set, with English scenes (shorts/en/*.html) and English narration.

Short 1 — The hook (short1-gancho-en.mp4 · 26s)

Title: 87% AI… so what now? A number is not evidence #Shorts Description:

AI detectors hand you a percentage, not proof. SignsOfAI shows you EVERY tell and how to fix it — free, in your browser.
▶ https://peopleworks.github.io/SignsofAI/
#AI #AIDetection #AcademicIntegrity #OpenSource #EdTech #Shorts

Short 2 — Burstiness (short2-burstiness-en.mp4 · 30s)

Title: The tell that gives AI away: rhythm (burstiness) #Shorts Description:

AI or human? Look at the rhythm: machines write every sentence the same length; humans vary. That's measurable, and SignsOfAI charts it for you.
▶ https://peopleworks.github.io/SignsofAI/
#AI #Burstiness #AIDetection #Writing #OpenSource #Shorts

Short 3 — The Spanish wedge (short3-espanol-en.mp4 · 28s)

Title: AI detectors don't speak Spanish #Shorts Description:

Almost every detector thinks in English and translates Spanish badly. SignsOfAI ships a Spanish rule pack derived from scratch. Detect AI in your language — free and open source.
▶ https://peopleworks.github.io/SignsofAI/
#AI #Spanish #AIDetection #AcademicIntegrity #OpenSource #Shorts


3c. SHORTS NUEVOS — Español (tanda 2: traducción, dos idiomas, reescritura, escritorio)

Short 4 — Traducción de la comunidad (short4-traduccion-es.mp4 · 26s)

Título: Tu idioma, en un archivo JSON (sin saber programar) #Shorts Descripción:

Las traducciones de SignsOfAI no están compiladas: son un JSON. Copias, traduces, mandas un pull request. Si falta una clave, cae al inglés — una traducción a medias ya sirve.
▶ https://github.com/peopleworks/SignsofAI
#OpenSource #Traducción #i18n #DotNet #Comunidad #Shorts

Short 5 — Dos idiomas independientes (short5-dos-idiomas-es.mp4 · 25s)

Título: Interfaz en español, consejo en inglés: no es un fallo #Shorts Descripción:

El idioma de la app y el del texto que analizas son independientes, a propósito: el consejo habla de palabras inglesas, así que se queda en inglés.
▶ https://peopleworks.github.io/SignsofAI/
#IA #DetectorDeIA #Español #UX #OpenSource #Shorts

Short 6 — La reescritura que se niega (short6-reescritura-es.mp4 · 25s)

Título: Baja el score mientras escribes — y sabe cuándo NO tocar #Shorts Descripción:

Reescribe las señales de IA en tu dispositivo: sin nube, sin clave, sin esperar. Y cuando cambiar una palabra rompería la frase, no la cambia.
▶ https://peopleworks.github.io/SignsofAI/
#IA #Escritura #Humanizar #OpenSource #DotNet #Shorts

Short 7 — La app de escritorio (short7-escritorio-es.mp4 · 25s)

Título: Mide la previsibilidad SIN conexión y sin subir tu texto #Shorts Descripción:

La app de escritorio corre el modelo dentro: sin servidor, sin conexión, y tu texto no sale de la máquina. Además lee una carpeta entera de documentos.
▶ https://github.com/peopleworks/SignsofAI/releases
#IA #Privacidad #Windows #OpenSource #DotNet #Shorts

3d. NEW SHORTS — English

Short 4 — Community translation (short4-traduccion-en.mp4 · 29s)

Title: Your language, in one JSON file (no coding) #Shorts Description:

SignsOfAI's translations aren't compiled — they're a JSON file. Copy, translate, open a pull request. Miss a key and it falls back to English, so a half-finished translation still ships.
▶ https://github.com/peopleworks/SignsofAI
#OpenSource #Translation #i18n #dotnet #Community #Shorts

Short 5 — Two independent languages (short5-dos-idiomas-en.mp4 · 26s)

Title: Spanish interface, English advice — and that's not a bug #Shorts Description:

The app's language and your text's language are separate on purpose: the advice is about English words, so it stays in English.
▶ https://peopleworks.github.io/SignsofAI/
#AI #AIDetection #UX #OpenSource #Shorts

Short 6 — The rewrite that refuses (short6-reescritura-en.mp4 · 23s)

Title: Watch the score fall as you type — and see it refuse #Shorts Description:

It rewrites AI tells on your device: no cloud, no key, no waiting. And when changing a word would break the sentence, it doesn't change it.
▶ https://peopleworks.github.io/SignsofAI/
#AI #Writing #Humanizer #OpenSource #dotnet #Shorts

Short 7 — The desktop app (short7-escritorio-en.mp4 · 23s)

Title: Measure predictability OFFLINE, with nothing uploaded #Shorts Description:

The desktop app runs the model inside it: no server, offline, and your text never leaves the machine. It also reads a whole folder of documents.
▶ https://github.com/peopleworks/SignsofAI/releases
#AI #Privacy #Windows #OpenSource #dotnet #Shorts

Cómo se hicieron. Distinto del primer lote: la voz se genera antes que el HTML, porque los retardos de las animaciones son tiempos absolutos y hay que colocarlos donde la voz llega a lo que enseñan. El orden es:

node narrate-all.mjs                      # genera las 8 voces y mide su duración
node cue-times.mjs <id> "un trozo" ...     # dice en qué segundo cae cada frase
   … se escribe el HTML con esos retardos …
node make-scenes.mjs                       # escribe los scenes/*.json desde los mismos guiones
node build-short.mjs scenes/<id>.json      # renderiza

build-short.mjs ahora reutiliza el voz.mp3 ya generado; cuadrar animaciones con narración es iterativo y sin eso cada ajuste volvía a llamar a ElevenLabs y a pagar por un audio idéntico. Con --revoice se fuerza a regenerarla, que es lo que hay que hacer si cambia el texto del guion.

Los guiones viven sólo en narrate-all.mjs; cue-times.mjs y make-scenes.mjs los leen de ahí. El .srt se genera del texto de la escena, así que dos copias del guion terminan en subtítulos que no coinciden con la voz.

4. Miniaturas (thumbnails 1280×720) — LISTAS

  • ES: video/thumb/thumb-es.png — "¿IA o HUMANO?" + sello "87% IA" agrietado ("un número no es evidencia") → "Te muestra LA EVIDENCIA" con chips de colores + "Gratis · Explicable y bilingüe · En tu navegador".
  • EN: video/thumb/thumb-en.png — "AI or HUMAN?" + "87% AI" → "It shows you THE EVIDENCE" + "Free · Explainable & bilingual · In your browser".

Fuentes editables: video/thumb/thumb-{es,en}.html. Re-renderizar con snap.mjs <html> <out.png> 1 1280 720.

5. Cómo re-renderizar

cd Docs/Blog/video   && node build-video.mjs guion.video.es.json     # (o .en.json)
cd Docs/Blog/shorts  && node build-short.mjs scenes/short1-gancho-en.json

Requiere ffmpeg/ffprobe en PATH y la key de ElevenLabs. Dos trampas conocidas:

  • La voz inglesa hay que fijarla por ID. "Rachel" no está en la lista de voces de la cuenta (es una voz por defecto de ElevenLabs), así que buscarla por nombre falla. Renderizar los assets EN con ELEVENLABS_VOICE_ID=21m00Tcm4TlvDq8ikWAM delante del comando. El español usa Marcela por nombre.
  • La red de Waubonsee bloquea api.elevenlabs.io (su appliance de SSL-decrypt sustituye el certificado). Desde ahí el render muere con UNABLE_TO_GET_ISSUER_CERT_LOCALLY; hay que salir de esa red. GitHub y el resto pasan sin problema — el filtro es específico de IA.

Cuadra el guion con la animación. El largo del video lo manda max(minSeconds, voz + cola), pero las animaciones del HTML tienen tiempos fijos. Si la narración queda corta, el short termina en silencio mirando una pantalla quieta; si queda larga, la voz sigue sobre la tarjeta final. Referencia de los seis (video / voz / cola en segundos):

Short ES EN
1 — gancho 26.0 / 19.9 / 6.1 25.7 / 20.7 / 5.0
2 — burstiness 30.0 / 23.1 / 6.9 30.0 / 23.7 / 6.3
3 — español 28.0 / 24.3 / 3.7 28.0 / 26.5 / 1.5

6. ARTÍCULOS — dónde va cada archivo

Archivo Plataforma
signsofai-maker-story.{en,es}.md dev.to · Hashnode · Medium (importa el Markdown)
signsofai-maker-story.{en,es}.html WordPress (bloque HTML) · Blogger (vista HTML)
signsofai-desktop-story.{en,es}.md dev.to · Hashnode · Medium — segundo artículo, sin publicar
signsofai-desktop-story.{en,es}.html WordPress · Blogger — generados, no escritos a mano
signsofai-artifacts-story.{en,es}.md dev.to · Hashnode · Medium — tercer artículo, sin publicar
signsofai-artifacts-story.{en,es}.html WordPress · Blogger — generados
signsofai-citations-story.{en,es}.md dev.to · Hashnode · Medium — cuarto artículo, sin publicar
signsofai-citations-story.{en,es}.html WordPress · Blogger — generados
signsofai-baseline-story.{en,es}.md dev.to · Hashnode · Medium — quinto artículo, sin publicar
signsofai-baseline-story.{en,es}.html WordPress · Blogger — generados
signsofai-calibration-story.{en,es}.md dev.to · Hashnode · Medium — sexto artículo, sin publicar
signsofai-calibration-story.{en,es}.html WordPress · Blogger — generados
signsofai-verdict-story.{en,es}.md dev.to · Hashnode · Medium — séptimo artículo, sin publicar
signsofai-verdict-story.{en,es}.html WordPress · Blogger — generados

Generar el HTML. Los dos primeros artículos se escribieron como HTML a mano. Transcribir 1.500 palabras dos veces más, en dos idiomas, es la forma segura de corregir un párrafo en una copia y no en la otra:

cd Docs/Blog && node build-article.mjs signsofai-desktop-story.en.md

Escribe el .html al lado del .md. El estilo sale de article.css, extraído del primer artículo para que las páginas mantengan un solo aspecto; ahí se añadieron los estilos de tabla, que el primer artículo no necesitaba. El conversor cubre solo lo que estos artículos usan (encabezados, párrafos, listas, código, tablas, citas, imágenes) y no debe convertirse en un Markdown general: si un artículo nuevo trae algo que no entiende, mejor que se note al revisar la página que arrastrar un intérprete entero.

Segundo artículo — el port a escritorio. Público distinto del primero: desarrolladores .NET sopesando un port a Blazor Híbrido, no docentes sopesando un detector. Por eso es una pieza aparte y no un capítulo añadido: lo añadido no lo ve quien ya leyó el original, y republicar en cinco sitios sale igual de caro que publicar uno nuevo. Enlaza al primero, no lo reemplaza.

Puntajes declarados en su propio pie: EN 5/100 · variabilidad 0.70 · 2 señales, ES 5/100 · variabilidad 0.70 · 2 señales. Las dos señales de cada uno son el mismo falso positivo (lee "PDF, ODT, EPUB y RTF" como regla de tres siendo cuatro) y se dejan a propósito, dicho en el pie. Falta el .html de los dos para WordPress/Blogger.

Las imágenes van embebidas por URL de GitHub, así que no hay que subir nada en cada plataforma.

Tercer artículo — los artefactos de caracteres. Público mixto: desarrolladores por el lado Unicode y docentes por el lado del argumento. El gancho es una confesión — el ataque que hunde a siete detectores publicados también funcionaba con el mío — y el cierre es la decisión de diseño: el reporte de artefactos no toca la puntuación, porque un porcentaje se discute y un carácter en una línea y una columna no.

Puntajes en su propio pie: EN 14/100 · variabilidad 0.70 · 13 señales, ES 11/100 · variabilidad 0.68 · 13 señales. Y hay un detalle que no se podía planear: los dos artículos disparan su propia comprobación nueva, porque llevan letras cirílicas de verdad en los ejemplos (EN 4, ES 3, agrupadas en dos sitios → presentes, sin repartirse). Está dicho en el pie y no hay que quitarlas: borrarlas para sacar un reporte limpio sería justo la jugada que el artículo critica.

Cuarto artículo — las fuentes. El de público más docente de los cuatro, y el que mejor funciona en una sala: abre con salida real de la herramienta diciendo 0/100, cero señales, y sigue con las cinco contradicciones que ese mismo reporte encontró en la bibliografía del mismo ensayo. El argumento no es "mi detector es mejor" sino "un profesor no puede actuar sobre un porcentaje, y sí puede preguntar por un artículo que no está en su propia lista de referencias".

Puntajes en su propio pie: EN 5/100 · variabilidad 0.69 · 3 señales, ES 5/100 · variabilidad 0.69 · 3 señales. El reporte de ejemplo es salida real, no una maqueta — está dicho en el pie, y conviene que siga siendo verdad si se edita el artículo.

Media sección va dedicada a los falsos positivos que hubo que arreglar (acentos, bibliografías envueltas por un PDF, años escondidos dentro de un DOI). Eso es deliberado: en esta categoría, contar los errores propios es la única credibilidad disponible.

Quinto artículo — la línea base del estudiante. El más argumentativo de los cinco y el que mejor defiende el proyecto entero. Abre con 61% —la proporción de ensayos de escritores en segunda lengua que los detectores marcan como IA— y sostiene que eso no se arregla con mejor clasificador sino con otra pregunta.

Dos secciones cuentan errores propios, a propósito: el sesgo que hubo que quitar (medir cada trabajo contra estadísticas que lo incluían, lo que estrechaba el rango de la persona y perjudicaba siempre a quien se pregunta) y el umbral que se borró (un número elegido mirando cinco documentos; en un proyecto que se niega a inventar umbrales, inventar uno aquí habría sido lo peor posible). Ese segundo apartado es el corazón del texto y no conviene suavizarlo al editarlo.

Puntajes en su propio pie: EN 8/100 · variabilidad 0.63 · 9 señales, ES 7/100 · variabilidad 0.67 · 7 señales. La comparación citada dentro del artículo es real: son los propios artículos de este blog medidos unos contra otros, y el 0.654 es el primer artículo del proyecto.

Sexto artículo — la calibración. El de mayor alcance fuera del nicho, porque contesta la pregunta que todo docente hace en el primer minuto y que ninguna herramienta de la categoría publica: ¿cuántas veces te equivocas? Noventa textos anteriores a los modelos generativos, cero marcados a 25/100, con el intervalo de Wilson (0–4,1%) en vez de la estimación puntual.

Dos cosas lo hacen distinto de un comunicado de resultados. La primera: la recomendación sale del extremo superior del intervalo, así que un corpus pequeño produce un umbral prudente y solo se estrecha al crecer — leer la estimación puntual permitiría afirmar «0% de falsos positivos» con noventa documentos. La segunda: el artículo publica la lista de reglas propias que se disparan sobre escritura humana, encabezada por rhet.rule-of-three en el 50% de los artículos académicos. Esa sección es el motivo de publicar en vez de comprobarlo en privado, y no conviene recortarla al editar.

Puntajes en su propio pie: EN 10/100 · variabilidad 0.56 · ~1.470 palabras, ES 8/100 · variabilidad 0.58 · ~1.530 palabras. El pie corrige además una afirmación que llegué a escribir y resultó falsa al comprobarla antes de publicar (la regla de tres no disparó aquí; sí lex.moreover y lex.furthermore). Esa corrección se queda: es el artículo entero en miniatura.

Y trae una petición concreta que conviene repetir en cada plataforma: escritura académica en español. SciELO y Redalyc no eran alcanzables, así que el lado español descansa hoy solo en prosa enciclopédica.

Publicado hasta ahora

Artículo Dónde URL
1º — maker story (ES) Blog propio https://peopleworks.com.do/2026/07/24/detector-de-escritura-con-ia/
1º — maker story (EN) Blog propio https://peopleworksgpt.com/i-built-an-ai-writing-detector-that-shows-its-work/
1º — maker story (EN) Medium https://medium.com/@peopleworks/i-built-an-ai-writing-detector-that-shows-its-work-and-speaks-spanish-2d7d5ae71b1a
2º — desktop story (ES) Blog propio https://peopleworks.com.do/2026/08/04/un-desconocido-me-pidio-una-app-de-escritorio-y-crei-haber-construido-lo-que-no-era/
2º — desktop story (EN) Blog propio https://peopleworksgpt.com/a-stranger-asked-for-a-desktop-app-and-i-thought-id-built-the-wrong-thing/

El canonical_url de los dos primeros artículos ya apunta al blog en los dos idiomas, no al demo.

peopleworksgpt.com no emite etiquetas Open Graph. Comprobado el 4/08/2026 en el HTML del segundo artículo: ni og:image, ni og:title, ni og:description, ni las de Twitter. La imagen está en el cuerpo, pero al compartir ese enlace en X, LinkedIn o Slack no sale tarjeta — solo una URL pelada, que en un lanzamiento es la diferencia entre que alguien haga clic y que no. peopleworks.com.do sí las emite (tiene plugin de SEO), y su og:image apunta a la portada. Arreglo: instalar Yoast o Rank Math en el sitio en inglés, o añadir las etiquetas a la cabecera del tema. Hágalo antes de publicar el copy de redes en inglés.

La copia de Medium se pegó, no se importó — y hay que arreglarlo. Comprobado en el HTML de la página: su <link rel="canonical"> apunta a sí misma. Eso le dice a Google que el original es Medium, así que peopleworksgpt.com compite contra usted por su propio texto, y Medium suele ganar por autoridad de dominio. Medium no permite cambiar el canonical de una historia ya publicada: la única vía es borrar esa historia y volver a meterla con Import a story pegando la URL del blog, que fija el canonical al importar. Cuanto antes, menos tráfico e historial se pierde. De aquí en adelante, cualquier artículo va primero al blog y a Medium solo por importación.

Ojo con canonical_url. En el front-matter apunta al demo. Eso está bien si el artículo solo vive en dev.to/Medium, pero si lo publicas primero en tu blog, cambia canonical_url a la URL de tu blog en las copias de dev.to / Hashnode / Medium. Si no, le estás diciendo a Google que la versión original de tu artículo es la página del demo, y tu propio blog compite consigo mismo.

Los artículos se auditan a sí mismos. Cada uno declara su propio puntaje: EN 35/100 · burstiness 0.83, ES 33/100 · burstiness 0.86. Si editas el texto, vuelve a correr dotnet run --project src/SignsOfAI.Cli -- check Docs/Blog/signsofai-maker-story.en.md y ajusta las cifras del párrafo, porque cambiar el artículo cambia su medición. Alguien va a pegar el artículo en la herramienta; que los números cuadren es media credibilidad.

7. REDES — copy para acompañar el lanzamiento

X / Twitter (EN)

Every AI detector I could point students at gives you one number: "87% AI".

A teacher can't accuse on that. A student can't appeal it. A writer can't learn from it.

So I built one that shows the evidence instead. Every tell highlighted, with the fix.
English + Spanish. Runs in your browser. MIT.

https://peopleworks.github.io/SignsofAI/

X / Twitter (ES)

Todos los detectores de IA te dan un número: "87% IA".

Con eso un profesor no puede acusar, un estudiante no puede apelar, y quien escribe no aprende nada.

Construí uno que muestra la evidencia: cada pista resaltada, con su arreglo.
Inglés y español. En tu navegador. MIT.

https://peopleworks.github.io/SignsofAI/

LinkedIn (EN)

"87% AI."

That's what the detectors give a teacher who suspects a student used ChatGPT. It's a number with no
argument attached — you can't defend it, appeal it, or learn from it. And if the essay was written in
Spanish, it's often worse than a coin flip, because almost every one of these tools thinks in English
and translates the rest.

I built the opposite, and I'm giving it away.

Signs of AI Writing highlights the specific tells in a text — overused vocabulary, rhetorical
crutches, syntactic patterns, and the statistical rhythm of sentence lengths — and for every single
one it tells you how to fix it. The Spanish rule pack is derived from scratch, not machine-translated.
It runs 100% in the browser: no account, no upload, documents never leave the device. It also compares
documents against each other and highlights the passages they share, as evidence a human judges.

Free and open source (MIT), built with .NET 10 and Blazor WebAssembly.

Try it: https://peopleworks.github.io/SignsofAI/
Code: https://github.com/peopleworks/SignsofAI

It is a heuristic linter, not a verdict machine. That's deliberate. I'd rather be wrong in a way you
can see than right in a way you can't.

#AI #AcademicIntegrity #EdTech #dotnet #Blazor #OpenSource

LinkedIn (ES)

"87% IA."

Eso es lo que un detector le da a un profesor que sospecha que un estudiante usó ChatGPT. Un número
sin argumento: no se puede defender, ni apelar, ni aprender de él. Y si el ensayo se escribió en
español, muchas veces acierta menos que lanzar una moneda, porque casi todas esas herramientas piensan
en inglés y traducen el resto.

Construí lo contrario, y lo regalo.

Signs of AI Writing resalta las pistas concretas de un texto —vocabulario sobreusado, muletillas
retóricas, patrones sintácticos y el ritmo estadístico del largo de las frases— y por cada una te dice
cómo arreglarla. El pack de reglas en español está derivado desde cero, no traducido a máquina. Corre
100% en el navegador: sin cuenta, sin subir nada, los documentos nunca salen del equipo. Además compara
documentos entre sí y resalta los pasajes que comparten, como evidencia que juzga una persona.

Gratis y de código abierto (MIT), hecho con .NET 10 y Blazor WebAssembly.

Pruébalo: https://peopleworks.github.io/SignsofAI/
Código: https://github.com/peopleworks/SignsofAI

Es un linter heurístico, no una máquina de veredictos. Es a propósito: prefiero equivocarme de una
forma que puedas ver, a acertar de una forma que no puedas revisar.

#IA #IntegridadAcadémica #EdTech #DotNet #Blazor #OpenSource

X / Twitter — segundo artículo (EN)

A stranger on Reddit asked for a desktop version of my Blazor WebAssembly app.

My first reaction was not excitement. It was the sinking feeling that I had picked the wrong
architecture months ago.

I was wrong. The port took a day, and exactly one thing broke.

The reason was a rule I set early and then forgot I had set: the analysis engine has no package
references. Not one. No browser, no I/O, no dependencies. By the time the question arrived it was
already feeding a web app, a CLI and an MCP server. A fourth host was not an architectural change.

The decision that saved me was made months before the problem existed, and nothing was visibly
better the day I made it.

https://github.com/peopleworks/SignsofAI

X / Twitter — segundo artículo (ES)

Un desconocido en Reddit me pidió una versión de escritorio de mi aplicación Blazor WebAssembly.

Mi primera reacción no fue ilusión. Fue la sensación de haber elegido mal la arquitectura hace
meses.

Me equivocaba. El port llevó un día, y se rompió exactamente una cosa.

El motivo fue una regla que puse pronto y olvidé que había puesto: el motor de análisis no tiene
ni una referencia a paquetes. Ninguna. Sin navegador, sin E/S, sin dependencias. Cuando llegó la
pregunta ya alimentaba una web, una CLI y un servidor MCP. Un cuarto consumidor no era un cambio
de arquitectura.

La decisión que me salvó se tomó meses antes de que existiera el problema, y el día que la tomé no
se veía mejor nada.

https://github.com/peopleworks/SignsofAI

LinkedIn — segundo artículo (EN)

Someone on Reddit was hunting for a cracked copy of a paid "AI humanizer". I pointed him at mine,
which is free and open source. He asked how to install it. I said it runs in a browser and asked
whether he wanted a desktop version.

"Yes app."

My first reaction was not excitement. It was the sinking feeling that I had picked the wrong
architecture months ago. SignsOfAI is Blazor WebAssembly. It runs in a tab. Turning that into
something you download and double-click sounded like starting over.

It took a day, and the reason is the only part worth writing down.

Before touching anything I opened the project file for the analysis engine. It has no package
references. Not one. That was not luck — it was a rule I set early and then forgot I had set: the
engine stays pure .NET. No browser, no I/O, no dependencies. Rule packs are embedded resources.
By the time the Reddit question arrived, that engine was already feeding three front ends: a web
app, a CLI, and an MCP server. A fourth was not an architectural change. It was another consumer.

So the port was an extraction, not a rewrite: move the pages and components into a Razor class
library and let a second host render them.

Exactly one thing genuinely broke, and it is worth knowing if you ever do this. A .NET HttpClient
cannot reach the WebView's virtual host. In the browser, fetching your own wwwroot through an
HttpClient bound to the base address is ordinary; in a WebView the app is served from a virtual
origin only the page can talk to, so native HTTP goes out to the network and finds nothing. In my
case that was one line — the loader for the interface translations. My instinct was an interface
with two implementations, one per host. Then I noticed the browser's own fetch works in both
places, so the fix deleted code instead of adding it.

The second surprise cost more time: the app compiled, launched, and died at first render with a
missing Microsoft.Windows.SDK.NET. BlazorWebView reaches for the Windows SDK WinRT projections,
and net10.0-windows does not bring them in — you need net10.0-windows10.0.19041.0. It builds
either way, which is exactly what makes it annoying to diagnose.

I also ran the work as three coding agents in parallel, one git worktree each, split by file rather
than by topic. All three branches merged with no conflicts. Sharing one working tree would have had
the second agent's checkout rewriting the first one's files mid-edit, and it would have looked like
my own mistake.

MIT and free, web and Windows: https://github.com/peopleworks/SignsofAI

#dotnet #Blazor #WebAssembly #SoftwareArchitecture #OpenSource

LinkedIn — segundo artículo (ES)

Alguien en Reddit buscaba una copia pirata de un "humanizador de IA" de pago. Le pasé el mío, que
es gratis y de código abierto. Me preguntó cómo se instala. Le dije que corre en el navegador y le
pregunté si quería una versión de escritorio.

"Yes app."

Mi primera reacción no fue ilusión. Fue la sensación de haber elegido mal la arquitectura hacía
meses. SignsOfAI es Blazor WebAssembly. Vive en una pestaña. Convertir eso en algo que se descarga
y se abre con doble clic sonaba a empezar de cero.

Llevó un día, y el motivo es lo único que merece escribirse.

Antes de tocar nada abrí el fichero de proyecto del motor de análisis. No tiene ni una referencia a
paquetes. Ninguna. Eso no fue suerte: fue una regla que puse pronto y olvidé que había puesto. El
motor se queda en .NET puro. Sin navegador, sin E/S, sin dependencias. Los packs de reglas son
recursos incrustados. Cuando llegó la pregunta de Reddit, ese motor ya alimentaba tres frentes: la
web, una herramienta de línea de comandos y un servidor MCP. Un cuarto no era un cambio de
arquitectura. Era otro consumidor.

Así que el port fue una extracción, no una reescritura: sacar las páginas y los componentes a una
biblioteca de clases Razor y dejar que un segundo anfitrión los renderice.

Se rompió exactamente una cosa, y conviene saberla si alguna vez hace esto. Un HttpClient de .NET
no puede alcanzar el host virtual del WebView. En el navegador, pedir tu propio wwwroot con un
HttpClient apuntando a la dirección base es lo normal; en un WebView la aplicación se sirve desde
un origen virtual con el que solo habla la propia página, así que el HTTP nativo sale a la red y no
encuentra nada. En mi caso era una línea: el cargador de las traducciones de la interfaz. Mi
instinto fue una interfaz con dos implementaciones, una por anfitrión. Luego vi que el fetch del
propio navegador funciona en los dos sitios, así que el arreglo borró código en vez de añadirlo.

La segunda sorpresa costó más tiempo: compilaba, arrancaba y moría en el primer render por un
Microsoft.Windows.SDK.NET que faltaba. BlazorWebView tira de las proyecciones WinRT del SDK de
Windows, y net10.0-windows no las trae — hace falta net10.0-windows10.0.19041.0. Compila igual de
las dos formas, que es justo lo que lo hace molesto de diagnosticar.

Además repartí el trabajo entre tres agentes en paralelo, un worktree de git para cada uno y la
división por ficheros, no por temas. Las tres ramas se fusionaron sin un solo conflicto. Con un
único directorio de trabajo, el checkout del segundo agente habría reescrito los ficheros del
primero a media edición, y habría parecido un error mío.

MIT y gratis, web y Windows: https://github.com/peopleworks/SignsofAI

#dotnet #Blazor #WebAssembly #Arquitectura #OpenSource

X / Twitter — tercer artículo (EN)

You can switch off almost any AI detector with find-and-replace.

Swap the Latin "e" for the Cyrillic "e". Identical on screen. The rule that was looking for the word
no longer finds it. A COLING 2025 paper does this to seven detectors and takes them from MCC 0.64 to
-0.01 — worse than a coin.

It worked on mine too. On one paragraph: 17 signals → 6.

The fix is ~200 lines and no model, and it does something I want to argue for: it reports the
codepoint, line and column of every character — and it contributes ZERO to the score.

A score is a judgement you can argue with. A character at line 14, column 3 is not.

https://github.com/peopleworks/SignsofAI

X / Twitter — tercer artículo (ES)

Cualquiera podía apagar mi detector de IA con buscar y reemplazar.

Cambias la "e" latina por la "e" cirílica. Idénticas en pantalla. La regla que buscaba esa palabra
ya no la encuentra. Un paper de COLING 2025 hunde así a siete detectores: de MCC 0.64 a -0.01, peor
que una moneda.

Con el mío también funcionaba. En un párrafo: 17 señales → 6.

El arreglo son ~200 líneas sin modelo, y hace algo que quiero defender: te da el código, la línea
y la columna de cada carácter — y aporta CERO a la puntuación.

Una puntuación se discute. Un carácter en la línea 14, columna 3, no.

https://github.com/peopleworks/SignsofAI

LinkedIn — tercer artículo (EN)

I found out this week that anyone could switch off my AI detector with find-and-replace.

Swap the Latin "e" in a flagged word for the Cyrillic "e" (U+0435). They render identically. Nothing
changes on screen. But the rule looking for that word sees a word it has never heard of.

This is published, not theoretical: a COLING 2025 paper takes seven detectors from a Matthews
correlation of 0.64 to -0.01 this way — worse than a coin. On one paragraph, mine went from 17
signals to 6.

The fix is about 200 lines, no model, no dependencies, no network. It walks the text by Unicode
scalar, normalizes the impostor letters back before analysing, and reports the codepoint, line and
column of everything it found. It never cleans silently.

And it makes one decision I would defend anywhere: the artifact report contributes ZERO to the
0-100 score. There is a test whose only job is to fail if that ever changes.

A score is a judgement, and a judgement is arguable — as it should be. A character at line 14,
column 3 is not. You can open the file in any editor and look. Fold one into the other and you have
turned the only checkable thing in the product back into an opinion.

Free and MIT: https://github.com/peopleworks/SignsofAI

#AI #Unicode #AcademicIntegrity #dotnet #OpenSource

LinkedIn — tercer artículo (ES)

Esta semana descubrí que cualquiera podía apagar mi detector de IA con buscar y reemplazar.

Cambia la "e" latina de una palabra marcada por la "e" cirílica (U+0435). Se dibujan igual. En
pantalla no cambia nada. Pero la regla que buscaba esa palabra ve una palabra que no conoce.

No es teórico, está publicado: un paper de COLING 2025 lleva así a siete detectores de una
correlación de Matthews de 0.64 a -0.01, peor que lanzar una moneda. En un párrafo, el mío pasó de
17 señales a 6.

El arreglo son unas 200 líneas: sin modelo, sin dependencias, sin red. Recorre el texto por escalar
Unicode, normaliza las letras impostoras antes de analizar, y reporta el código, la línea y la
columna de todo lo que encontró. Nunca limpia en silencio.

Y toma una decisión que defiendo en cualquier parte: el reporte de artefactos aporta CERO a la
puntuación de 0 a 100. Hay una prueba cuyo único trabajo es fallar si eso cambia.

Una puntuación es un juicio, y un juicio se discute — como debe ser. Un carácter en la línea 14,
columna 3, no. Usted abre el archivo en cualquier editor y mira. Si mezcla lo uno con lo otro,
convirtió lo único comprobable del producto otra vez en una opinión.

Gratis y MIT: https://github.com/peopleworks/SignsofAI

#IA #Unicode #IntegridadAcadémica #DotNet #OpenSource

X / Twitter — cuarto artículo (EN)

My AI detector scored this essay 0/100. Zero signals. Good vocabulary, human sentence rhythm.

Its bibliography was invented.

Two authors cited that appear nowhere in its own reference list. The same DOI on two different
papers. A source published in 2027.

None of that needs the internet. An invented bibliography contradicts itself before anyone gets
round to asking whether the papers exist.

And it turns a confrontation into a question: "can you send me the paper?"

https://github.com/peopleworks/SignsofAI

X / Twitter — cuarto artículo (ES)

Mi detector de IA le puso 0/100 a este ensayo. Cero señales. Vocabulario bien, ritmo humano.

La bibliografía era inventada.

Dos autores citados que no aparecen en su propia lista de referencias. El mismo DOI en dos
artículos distintos. Una fuente publicada en 2027.

Nada de eso necesita internet. Una bibliografía inventada se contradice a sí misma antes de que a
nadie le dé tiempo de preguntar si los artículos existen.

Y convierte una confrontación en una pregunta: «¿me manda el artículo?»

https://github.com/peopleworks/SignsofAI

LinkedIn — cuarto artículo (EN)

A teacher cannot act on a percentage.

Picture the meeting. "The software said 87%." Said what, exactly? Based on what? Show me the part
that is AI. You cannot. You have a number and a bad feeling, and the student has a career.

Now picture the other meeting. "You cite Adeyemi 2023 three times. There is no Adeyemi in your
reference list. Can you send me the paper?"

That is not an accusation. It is a question, and it takes one sentence to answer.

I shipped that check this week. On a test essay my own stylometric score rated 0/100 — zero
signals, good vocabulary, human sentence rhythm — it found five contradictions: two cited authors
missing from the document's own bibliography, one DOI on two different papers, a malformed
identifier, and a source published in 2027.

The surprise was that it needs no internet at all. I had assumed I would have to send every
reference to Crossref, which sits badly with a tool whose whole promise is that nothing leaves your
machine. But an invented bibliography contradicts *itself* long before you get to whether the
papers are real. Offline, in the browser, nothing sent anywhere.

Most of the work went into not accusing anyone. Accented surnames cited without their accents.
Bibliographies wrapped by a PDF, where my first splitter promoted a journal name to a reference and
then complained nobody had cited it. Years hiding inside DOIs — "10.1080/aie.2022.4471" carries a
2022 that means nothing, and on a DOI ending .2027. it would have reported an ordinary reference as
published in the future. An accusation assembled entirely out of an identifier.

And it contributes zero to the score, with a test whose only job is to fail if that changes.

MIT and free: https://github.com/peopleworks/SignsofAI

#AcademicIntegrity #AI #EdTech #dotnet #OpenSource

LinkedIn — cuarto artículo (ES)

Un profesor no puede actuar sobre un porcentaje.

Imagine la reunión. «El software dijo 87%.» ¿Dijo qué, exactamente? ¿Basándose en qué? Enséñeme la
parte que es IA. No puede. Usted tiene un número y una mala sensación, y el estudiante tiene una
carrera.

Ahora imagine la otra reunión. «Usted cita a Adeyemi 2023 tres veces. En su lista de referencias no
hay ningún Adeyemi. ¿Me manda el artículo?»

Eso no es una acusación. Es una pregunta, y se contesta en una frase.

Esta semana publiqué esa comprobación. Sobre un ensayo de prueba al que mi propia puntuación
estilométrica le dio 0/100 —cero señales, vocabulario correcto, ritmo humano— encontró cinco
contradicciones: dos autores citados que faltaban en la bibliografía del propio documento, un DOI en
dos artículos distintos, un identificador mal formado y una fuente publicada en 2027.

La sorpresa fue que no necesita internet. Yo daba por hecho que tendría que mandar cada referencia a
Crossref, lo que encaja mal con una herramienta cuya promesa entera es que nada sale de su equipo.
Pero una bibliografía inventada se contradice a sí misma mucho antes de que uno llegue a si los
artículos son reales. Sin conexión, en el navegador, sin enviar nada.

Casi todo el trabajo fue en no acusar a nadie. Apellidos con tilde citados sin ella. Bibliografías
envueltas por un PDF, donde mi primer separador ascendió el nombre de una revista a referencia y
luego se quejó de que nadie la citaba. Años escondidos dentro de un DOI — «10.1080/aie.2022.4471»
lleva un 2022 que no significa nada, y con un DOI terminado en .2027. habría reportado una
referencia normal como publicada en el futuro. Una acusación montada enteramente a partir de un
identificador.

Y aporta cero a la puntuación, con una prueba cuyo único trabajo es fallar si eso cambia.

MIT y gratis: https://github.com/peopleworks/SignsofAI

#IntegridadAcadémica #IA #EdTech #DotNet #OpenSource

X / Twitter — quinto artículo (EN)

AI detectors flag 61% of essays by non-native English speakers as machine-written.

Not 61% of the cheats. 61% of the essays.

They learned that formal, careful prose looks like a language model. That is also exactly how you
write in a language you learned second. The tool is detecting a second language and reporting it
as dishonesty.

You cannot fix that with a better classifier. You fix it with a different question:

not "does this look like a machine"
but "does this look like the person who wrote the others"

If you write formally, your own baseline is already formal.

https://github.com/peopleworks/SignsofAI

X / Twitter — quinto artículo (ES)

Los detectores de IA marcan como escritos por máquina el 61% de los ensayos de quienes no tienen
el inglés como lengua materna.

No el 61% de los tramposos. El 61% de los ensayos.

Aprendieron que la prosa formal y cuidada se parece a un modelo. Y así es exactamente como se
escribe en un idioma que aprendiste después. La herramienta detecta una segunda lengua y la
reporta como deshonestidad.

Eso no se arregla con mejor clasificador. Se arregla con otra pregunta:

no «¿se parece a una máquina?»
sino «¿se parece a quien escribió los otros?»

Si escribes formal, tu propia línea base ya es formal.

https://github.com/peopleworks/SignsofAI

LinkedIn — quinto artículo (EN)

61% of essays by non-native English speakers get flagged as AI-written.

Not 61% of the ones that were. 61% of the essays.

The mechanism is not mysterious: these tools learned that formal, careful, slightly stiff prose
looks like a language model, and formal, careful, slightly stiff prose is exactly what you write in
a language you learned second. The tool is not detecting AI. It is detecting a second language, and
reporting it as dishonesty.

You cannot fix that with a better classifier, because the classifier is answering the question it
was asked. So I asked a different one: not "does this look like a machine" but "does this look like
the person who wrote the others". A student whose ordinary register is formal has a formal
baseline. Measured against themselves, formal is not a red flag.

Two things I want to be honest about, because both are in the article:

The first version measured each of a writer's pieces against statistics that included that piece.
That pulls it toward the centre, makes their range look tighter than it is, and pushes the
questioned text further outside it — a bias running against the person being asked about, in every
case, silently. Leave-one-out fixes it and costs a loop.

And I wrote a threshold, then deleted it. A count separated my own writing from a radically
different voice cleanly, and I wanted to wire it into the verdict at "a quarter of the words". But
that quarter came from me looking at five documents and picking a number. That is not calibration.
It is exactly the move this project refuses everywhere else. The count is reported; a person reads
it; the verdict stays on one rule anyone can restate.

There is no result meaning "someone else wrote this". The enumeration has four values and none of
them is that one, and a test asserts the list.

MIT and free: https://github.com/peopleworks/SignsofAI

#AcademicIntegrity #AI #Stylometry #EdTech #dotnet

LinkedIn — quinto artículo (ES)

El 61% de los ensayos de quienes no tienen el inglés como lengua materna se marcan como escritos
por IA.

No el 61% de los que sí lo estaban. El 61% de los ensayos.

El mecanismo no tiene misterio: estas herramientas aprendieron que la prosa formal, cuidada y un
poco rígida se parece a un modelo de lenguaje, y la prosa formal, cuidada y un poco rígida es
exactamente lo que uno escribe en un idioma que aprendió después. La herramienta no detecta IA.
Detecta una segunda lengua, y la reporta como deshonestidad.

Eso no se arregla con un clasificador mejor, porque el clasificador contesta la pregunta que le
hicieron. Así que hice otra: no «¿se parece a una máquina?» sino «¿se parece a quien escribió los
otros?». Un estudiante cuyo registro habitual es formal tiene una línea base formal. Medido contra
sí mismo, lo formal no es una alarma.

Dos cosas sobre las que quiero ser honesto, porque las dos están en el artículo:

La primera versión medía cada trabajo de una persona contra estadísticas que incluían ese trabajo.
Eso lo arrastra al centro, estrecha artificialmente su rango y empuja el texto revisado más afuera
— un sesgo que va contra la persona por la que se pregunta, siempre, en silencio. Dejar uno fuera
lo arregla y cuesta un bucle.

Y escribí un umbral, y lo borré. Un conteo separaba limpiamente mi propia escritura de una voz
radicalmente distinta, y quise meterlo en el veredicto con «un cuarto de las palabras». Pero ese
cuarto salió de mí mirando cinco documentos y eligiendo un número. Eso no es calibrar. Es justo la
jugada que este proyecto se niega a hacer en todo lo demás. El conteo se reporta, lo lee una
persona, y el veredicto se queda en una sola regla que cualquiera puede repetir.

No hay ningún resultado que signifique «lo escribió otra persona». La enumeración tiene cuatro
valores y ninguno es ese, y hay una prueba que verifica la lista.

MIT y gratis: https://github.com/peopleworks/SignsofAI

#IntegridadAcadémica #IA #Estilometría #EdTech #DotNet

X / Twitter — sexto artículo (EN)

Every teacher who picks up an AI detector asks the same question within a minute: how often are you
wrong?

Nobody answers it. Not Turnitin, not GPTZero, not Originality.ai. The one number that would let you
judge them is the one number none of them publish.

So I measured mine and put it in the repo.

90 texts published before generative models existed. At 25/100 it flagged zero of them — a rate
between 0% and 4.1%, because ninety texts cannot promise anything narrower.

And the part that stung: my own rule-of-three detector fires on half of all human academic writing.
That is published too, right next to the good number.

https://github.com/peopleworks/SignsofAI

X / Twitter — sexto artículo (ES)

Todo profesor que agarra un detector de IA hace la misma pregunta al minuto: ¿cuántas veces te
equivocas?

Nadie la contesta. Ni Turnitin, ni GPTZero, ni Originality.ai. El único número que permitiría
juzgarlas es justo el que ninguna publica.

Así que medí el mío y lo puse en el repositorio.

90 textos publicados antes de que existieran los modelos generativos. A 25/100 no marcó ninguno —
una tasa entre 0% y 4,1%, porque noventa textos no pueden prometer nada más estrecho.

Y la parte que escoció: mi propio detector de regla de tres se dispara en la mitad de toda la
escritura académica humana. Eso también está publicado, al lado del número bueno.

https://github.com/peopleworks/SignsofAI

LinkedIn — sexto artículo (EN)

I measured how often my own AI detector is wrong, and published the result.

Not accuracy. Accuracy needs a pile of machine-written text, and any pile I assemble is a sample of
whichever models were convenient that month — it ages badly and it flatters whoever assembled it. It
is also the wrong number: a detector that is 95% accurate by flagging everyone who writes formally
has done more damage than one that catches less and accuses nobody.

What I measured is the false-positive rate: how often it flags writing no machine produced. That
needs only human text, which does not go stale.

And you do not establish the text is human by reading it. Reading it is the thing being measured; it
cannot also be the thing doing the measuring. You establish it by date — open-access papers from
2018–2020 and Wikipedia revisions as they stood in 2020 and 2021, pulled from the revision history.
A paper with a 2019 DOI was not written by something that did not exist yet.

Ninety texts, about 380,000 words. At a threshold of 25/100 it flagged none of them.

Read that as 0% and you have been misled — including by me. Zero out of ninety is a rate somewhere
between 0% and 4.1%, and the recommendation comes from the upper end. With nothing flagged at all it
still takes about seventy-five texts before the interval alone gets under 5%. That is what "enough
corpus" means, and it is far more than anyone assembles by accident.

The most useful thing it produced is the part I liked least. The report lists which of my own rules
fired on that human writing, and every hit is a false positive by construction. Top of the list: my
rule-of-three detector, firing on 50% of human academic papers. Then "moreover" and "furthermore",
in a quarter of the texts — ordinary academic connectives that scholars were writing long before
anyone trained a transformer. A rule that fires on half of everything is measuring the genre, not
the machine. I would not have known which ones without doing this.

The corpus is a JSON manifest anyone can extend. Add texts and the published number changes — that
is the point. A number that can go up when the corpus grows is a measurement. One that could only
ever go down would be marketing.

What I most want is Spanish academic writing. SciELO and Redalyc were not reachable from where I
assembled this, so the Spanish side currently rests on encyclopedia prose alone — and Spanish is the
half of this problem nobody else measures at all.

MIT and free: https://github.com/peopleworks/SignsofAI

#AcademicIntegrity #AI #EdTech #Statistics #dotnet

LinkedIn — sexto artículo (ES)

Medí cuántas veces se equivoca mi propio detector de IA, y publiqué el resultado.

Exactitud no. La exactitud necesita un montón de texto escrito por máquina, y cualquier montón que
yo arme es una muestra de los modelos que me vinieran bien ese mes: envejece mal y favorece a quien
lo armó. Además es el número equivocado: un detector con 95% de exactitud que lo consigue marcando a
todo el que escribe formal ha hecho más daño que uno que caza menos y no acusa a nadie.

Lo que medí es la tasa de falsos positivos: cuántas veces marca escritura que ninguna máquina
produjo. Eso solo necesita texto humano, que no caduca.

Y que el texto es humano no se establece leyéndolo. Leerlo es lo que se está midiendo; no puede ser
además lo que mide. Se establece por su fecha — artículos de acceso abierto de 2018 a 2020 y
revisiones de Wikipedia tal como estaban en 2020 y 2021, sacadas del historial. Un artículo con un
DOI de 2019 no lo escribió algo que todavía no existía.

Noventa textos, unas 380.000 palabras. A un umbral de 25 sobre 100 no marcó ninguno.

Si lee eso como 0%, le han engañado — yo incluido. Cero de noventa es una tasa entre 0% y 4,1%, y la
recomendación se hace desde el extremo superior. Sin marcar absolutamente nada, todavía hacen falta
unos setenta y cinco textos para que el intervalo por sí solo baje del 5%. Eso es lo que significa
«corpus suficiente», y es bastante más de lo que nadie reúne por accidente.

Lo más útil que produjo es la parte que menos me gustó. El reporte lista cuáles de mis propias reglas
se dispararon sobre esa escritura humana, y cada acierto es un falso positivo por construcción. En lo
alto: mi detector de regla de tres, disparando en el 50% de los artículos académicos humanos. Después
«moreover» y «furthermore», en la cuarta parte de los textos — conectores académicos normales que los
investigadores llevan escribiendo desde mucho antes de que nadie entrenara un transformer. Una regla
que dispara en la mitad de todo está midiendo el género, no la máquina. Sin hacer esto no habría
sabido cuáles.

El corpus es un manifiesto JSON que cualquiera puede ampliar. Añada textos y el número publicado
cambia; de eso se trata. Un número que puede subir cuando el corpus crece es una medición. Uno que
solo pudiera bajar sería publicidad.

Lo que más quiero es escritura académica en español. SciELO y Redalyc no eran alcanzables desde donde
armé esto, así que el lado español descansa hoy solo en prosa enciclopédica — y el español es la
mitad de este problema que nadie más mide.

MIT y gratis: https://github.com/peopleworks/SignsofAI

#IntegridadAcadémica #IA #EdTech #Estadística #DotNet

X / Twitter — séptimo artículo (EN)

My AI detector never once gave a verdict. Not one, in any language, since the feature shipped.

The report gated the verdict behind the threshold measured for that specific language. My corpus has
65 English texts and 25 Spanish; bounding a rate under 5% takes ~75. So the threshold was null for
both, and the condition after it was false. Always.

Meanwhile the CLI printed "Strong signs of AI writing" on the same text, in the same run.

340 tests. Not one compared the two.

https://github.com/peopleworks/SignsofAI

X / Twitter — séptimo artículo (ES)

Mi detector de IA no emitió un veredicto ni una sola vez. Ninguno, en ningún idioma, desde que existe
la función.

El informe exigía el umbral medido para ese idioma concreto. Mi corpus tiene 65 textos en inglés y 25
en español; acotar una tasa por debajo del 5% pide unos 75. El umbral era null en los dos, y la
condición siguiente, falsa. Siempre.

Mientras tanto el CLI decía "Señales fuertes de escritura con IA" del mismo texto, en la misma
ejecución.

340 pruebas. Ninguna comparaba las dos.

https://github.com/peopleworks/SignsofAI

LinkedIn — séptimo artículo (EN)

The same text, the same build of my own tool, the same minute.

Command line: 90/100, "Strong signs of AI writing".
The exported report — the document a teacher prints and carries to an integrity meeting: no verdict
at all.

The report withheld its verdict below the threshold measured for the language it was reading. That
rule is right. But my corpus holds 65 English texts and 25 Spanish, and bounding a false-positive
rate under 5% needs roughly 75 in a group. Neither group qualifies. The threshold was null for both
languages, so the condition was false for every document ever analysed.

Two things let it live there:

The bands were written out in nine places, kept in step by a comment. They had already drifted — one
page cut at 40 where the rest cut at 45.

And nothing compared the surfaces. I had 340 tests, each checking one face against its own
expectations. None asked whether the three faces agreed about the same text.

Underneath sat something worse. This project publishes a measured threshold of 25/100. The product
drew its line at 20 and called it "light signs of AI writing" — five points below the number on my
own calibration page, and below the highest-scoring human text in the corpus.

Publishing a calibrated figure and shipping an uncalibrated one is exactly what I criticise other
detectors for.

Two independent reviewers found the always-false condition before I wrote a line of code. Then they
disagreed about the fix, which was more useful than agreement.

Four bands are now two. Above the measured line: "Signs of AI writing". Below it: "No signs above the
measured boundary" — a statement about the tool, not about the person. That was the last place the
product said anything about a human being rather than about my own instrument.

Full write-up, and the command that regenerates every number in it:
https://github.com/peopleworks/SignsofAI

LinkedIn — séptimo artículo (ES)

El mismo texto, la misma compilación de mi herramienta, el mismo minuto.

Línea de comandos: 90/100, "Señales fuertes de escritura con IA".
El informe exportado — el documento que un profesor imprime y lleva a una comisión de integridad:
ningún veredicto.

El informe retenía el veredicto por debajo del umbral medido para el idioma que estaba leyendo. Esa
regla está bien. Pero mi corpus tiene 65 textos en inglés y 25 en español, y acotar una tasa de
falsos positivos por debajo del 5% pide unos 75 por grupo. Ninguno llega. El umbral era null en los
dos idiomas, así que la condición era falsa para todos los documentos analizados.

Dos cosas le permitieron vivir ahí:

Las bandas estaban escritas en nueve sitios, sincronizadas por un comentario. Ya se habían desviado:
una página cortaba en 40 donde el resto cortaba en 45.

Y nada comparaba las caras entre sí. Tenía 340 pruebas, cada una comprobando una superficie contra
sus propias expectativas. Ninguna preguntaba si las tres coincidían sobre el mismo texto.

Debajo había algo peor. Este proyecto publica un umbral medido de 25/100. El producto trazaba su
línea en 20 y lo llamaba "señales leves de escritura con IA": cinco puntos por debajo de la cifra de
mi propia página de calibración, y por debajo del texto humano más alto del corpus.

Publicar una cifra calibrada y entregar otra sin calibrar es exactamente lo que le critico a otros
detectores.

Dos revisores independientes encontraron la condición siempre falsa antes de que yo escribiera una
línea de código. Luego discreparon sobre el arreglo, que fue más útil que si hubieran coincidido.

Cuatro bandas son ahora dos. Por encima de la línea medida: "Señales de escritura con IA". Por
debajo: "Sin señales por encima del umbral medido" — una afirmación sobre la herramienta, no sobre
la persona. Era el último sitio donde el producto decía algo sobre un ser humano en vez de sobre mi
propio instrumento.

El artículo completo, y el comando que regenera cada número que contiene:
https://github.com/peopleworks/SignsofAI

8. Notas de publicación

  • Sube el .srt de cada video como subtítulos (clave para reproducción sin sonido en Shorts/Reels/TikTok).
  • Cruza los enlaces: el video enlaza al artículo del blog y viceversa; ambos enlazan al demo.
  • YouTube normaliza el audio a ~−14 LUFS; no hace falta retocar niveles.
  • Antes de compartir cualquier link del repo, sube la tarjeta social (Settings → Social preview, Docs/Blog/social/social-preview.png). Si no, X/LinkedIn/Slack muestran la tarjeta gris genérica.
  • Orden sugerido de lanzamiento: artículo del blog → redes (arriba) → shorts (goteo diario) → video grande → Show HN / Reddit con las señales ya acumuladas.