Comentarios residuo del prompt.
Comentarios que son artefactos de la conversación de generación —prompts reformulados, narración paso a paso, apartes de chat y elisiones de marcador como `// ... rest of the code here`— confirmados en el código fuente en lugar de documentación real.
##Signos y síntomas
Un revisor detecta los comentarios residuo del prompt cuando los comentarios documentan la conversación que produjo el código en lugar del código en sí. Cuatro indicios, que a menudo coinciden:
- Prompt reformulado: un comentario que parafrasea la petición textualmente (
// Function to add two numbers) encima de una función literalmente llamadaadd. - Narración de pasos: relato línea a línea de operaciones obvias (
// Step 1: loop over the array,// increment i by 1encima dei++). - Apartes de chat: comentarios en segunda persona y tiempo presente dirigidos a ti, quien hace el prompt (
// As requested, here is the updated handler,// Sure! Here's the fix,// Note: replace with your actual API key). - Residuo de elisión / marcador:
// ... rest of the code here,// keep your existing logic,// your code here,// TODO: implement error handlingdejados en el código fuente confirmado.
// Function to add two numbers and return the result <- reformula el prompt
function add(a: number, b: number): number {
// Step 1: add the two numbers <- narra lo obvio
const sum = a + b;
return sum; // return the sum
}
// As requested, here is the updated handler <- aparte de chat dirigido a "ti"
export async function handler(req: Req, res: Res) {
// ... keep your existing validation logic here ... <- elisión: código real descartado
// TODO: implement error handling <- marcador entregado tal cual
const user = await db.users.find(req.params.id);
res.json(user);
}
La línea de elisión es la peligrosa: se lee como documentación pero en realidad es una instrucción para que un humano pegue código que el modelo omitió: aplica el bloque al pie de la letra y la validación existente desaparece en silencio. OX Security encontró "comentarios por todas partes" (Comments Everywhere) —"comentarios en línea excesivos que aumentan drásticamente la carga computacional … y hacen el código más difícil de revisar y mantener"— en el 90–100 % del código generado por IA de su estudio de más de 300 repositorios.
##Causas del problema
Por qué los modelos lo emiten
- Mimetismo del siguiente token de los corpus de tutoriales. La mezcla de entrenamiento está saturada de entradas de blog, respuestas de StackOverflow y documentación donde cada línea se explica para un aprendiz. El modelo reproduce ese registro didáctico —narración e intención reformulada— porque es la continuación estadísticamente probable, no porque el repositorio circundante lo necesite.
- Filtración del registro de chat / adulación. El RLHF afina a los asistentes para ser explicativos y complacientes en el canal de chat. Ese tono conversacional en segunda persona se filtra al canal de código, produciendo apartes de tipo "Como se solicitó…" y "Nota: deberías…" que carecen de sentido una vez que el código se separa de la conversación.
- Razonamiento narrado como comentarios. Los modelos externalizan su plan ("Paso 1… Paso 2…") como comentarios en línea: filtración de la cadena de pensamiento congelada en el archivo.
- La elisión es una comodidad del chat, mal aplicada. En una respuesta de chat,
// ... rest unchanged ...es una forma educada de evitar reimprimir un archivo. Cuando esa respuesta se pega o se aplica automáticamente a un archivo real, la comodidad se convierte en residuo literal, y en pérdida de datos literal. - Sin contexto del repositorio, reformula el prompt. A falta del ticket, el dominio y el verdadero "porqué", el modelo no tiene nada cierto que decir en un comentario, así que recurre a parafrasear lo único que tiene: tu prompt.
Por qué resulta perjudicial
- Carga de revisión. Cada línea de narración es ruido que una persona tiene que saltarse. El planteamiento de OX: la IA trabaja como "un ejército de desarrolladores júnior con talento pero sin experiencia", y "una revisión de código adecuada simplemente no puede escalar al ritmo de la nueva velocidad de producción"; los comentarios residuo encarecen cada diff justo cuando hay más diffs.
- Corrección / pérdida de datos. Los marcadores de elisión (
// ...existing code...) provocan que se descarte código real cuando los bloques se aplican a ciegas. - Putrefacción de comentarios. Los comentarios que reformulan el prompt duplican en prosa la intención del código; la prosa se desvía a medida que el código cambia y deja documentación activamente engañosa: el clásico olor Comentarios de Fowler, en el que los comentarios hacen de desodorante.
- Incompletitud oculta.
// TODO: implement error handlinges el modelo señalando que trabajó al borde de su competencia; entregado tal cual, es lógica sin terminar disfrazada de tarea rastreada. - Indicios de seguridad.
// replace with your actual API keynormalmente se sitúa junto a una credencial de marcador codificada: el residuo marca exactamente la línea que le importa a un escáner (y a un atacante).
##Tratamiento
Tácticas de prompting / de generación
- Restringe el registro: "Genera el archivo completo. Nunca abrevies con
// ...,// rest of the codeo// existing code. No narres pasos: comenta solo la justificación no obvia (el porqué). Sin apartes conversacionales; esto va directo a un repositorio." - Pide un diff unificado en lugar de un fragmento envuelto en prosa, para que las omisiones sean explícitas y aplicables en lugar de esquivadas con un comentario de elisión.
- Exige que el modelo ejecute el formateador y tu configuración de lint (p. ej.
no-warning-commentscon términos personalizados) e informe del resultado: cerrar el ciclo de lint y corrección detecta automáticamente el residuo de marcadores y TODO. - Añade una barrera de grep en pre-commit / CI para los marcadores de residuo (
rest of the code,your code here,existing code,As requested,Step \d) y trata los marcadores de elisión como un bloqueo duro, ya que a menudo significan que se descartó código en silencio.
La refactorización
Elimina sin más los apartes de chat y la narración. Cuando un comentario solo reformula qué hace el código, esa es la señal para hacerlo autodocumentado: aplica Extraer método y Renombrar método (o Extraer Variable para una sola expresión) para que el nombre lleve la intención, y conserva solo los comentarios que expliquen un porqué no obvio. Es el consejo de Fowler para el olor Comentarios: cuando sientas la necesidad de escribir un comentario, intenta primero refactorizar para que el comentario sobre.
// antes — residuo del prompt
// Create a function that validates an email address using a regex
function validateEmail(input) {
// check if the input matches the email pattern
const re = /^[^@]+@[^@]+\.[^@]+$/;
// return true or false
return re.test(input);
}
// después — el nombre carga con la intención; el único comentario explica el porqué no obvio
const EMAIL_RE = /^[^@]+@[^@]+\.[^@]+$/; // deliberadamente laxo: solo detectamos erratas antes del envío, no RFC 5322
const isValidEmail = (input: string): boolean => EMAIL_RE.test(input);
Para el residuo de elisión, nunca apliques el bloque tal cual: compáralo (diff) con el archivo actual y restaura lo que el modelo descartó. Para // TODO: implement …, o bien termina la lógica, o conviértelo en una incidencia rastreada y haz que la compilación falle ante el término de marcador para que no pueda entregarse tal cual.
##Detectado por
- ESLint no-warning-comments — Señala TODO/FIXME/XXX y términos personalizables configurables — configura `terms` para detectar residuos de marcador como "your code here" o "rest of the code"
- SonarQube / SonarSource S125 — Las secciones de código no deben estar comentadas — detecta código comentado que quedó olvidado, no elisiones en prosa como "// ... rest of the code" (para esas usa términos de no-warning-comments o un filtro con grep)
- SonarQube / SonarSource S1135 — Rastrea el uso de etiquetas "TODO" — saca a la luz residuos de marcador TODO entregados como código
- SonarQube / SonarSource S1134 — Rastrea el uso de etiquetas "FIXME"