---
title: "Comentarios residuo del prompt"
type: "ai-smell"
slug: "prompt-residue-comments"
url: "http://localhost:3000/es/ai-smells/prompt-residue-comments.md"
category: "Claridad"
description: "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."
---
# 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.

## Signs and Symptoms

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 llamada `add`.
* **Narración de pasos**: relato línea a línea de operaciones obvias (`// Step 1: loop over the array`, `// increment i by 1` encima de `i++`).
* **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 handling` dejados en el código fuente confirmado.

```ts
// 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" en el **90–100 %** del código generado por IA en su estudio de más de 300 repositorios, describiéndolos como marcadores que "parecen útiles pero sobre todo sirven a la propia IA, abarrotando los repositorios".

## Reasons for the Problem

**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. OX caracteriza los comentarios como "marcadores internos para navegar los límites de contexto… dependencia de la memoria a corto plazo más que de la comprensión real".

**Por qué resulta perjudicial**

* **Carga de revisión.** Cada línea de narración es ruido que un humano debe leer por encima. El planteamiento de OX: la IA "programa como un desarrollador júnior" a velocidad de máquina, y la revisión humana "no puede escalar para igualar la producción de la IA": 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 la intención del código en prosa; la prosa se desvía a medida que el código cambia, dejando documentación activamente engañosa: el clásico olor de Fowler de los _Comentarios_ como desodorante.
* **Incompletitud oculta.** `// TODO: implement error handling` es 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 key` normalmente 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).

## Treatment

**Tácticas de prompting / de generación**

* Restringe el registro: _"Genera el archivo completo. Nunca abrevies con `// ...`, `// rest of the code` o `// 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-comments` con términos personalizados) e informe del resultado: cerrar el bucle de _"validar con el linter"_ detecta automáticamente el residuo de marcador/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 los apartes de chat y la narración sin más. Cuando un comentario simplemente reformula _qué_ hace el código, esa es la señal para hacer el código autodocumentado: aplica **Extraer función** y **Renombrar** para que el nombre cargue con la intención, y conserva solo los comentarios que expliquen un _porqué_ no obvio (Fowler: _Elimina los comentarios que son desodorante para malos nombres_).

```ts
// 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);
}

```

```ts
// 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.

## Detected by

- **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" (https://eslint.org/docs/latest/rules/no-warning-comments)
- **SonarQube / SonarSource** `S125` — Las secciones de código no deben estar comentadas — señala bloques comentados elididos/sobrantes (https://rules.sonarsource.com/javascript/RSPEC-125/)
- **SonarQube / SonarSource** `S1135` — Rastrea el uso de etiquetas "TODO" — saca a la luz residuos de marcador TODO entregados como código (https://rules.sonarsource.com/javascript/RSPEC-1135/)
- **SonarQube / SonarSource** `S1134` — Rastrea el uso de etiquetas "FIXME" (https://rules.sonarsource.com/javascript/RSPEC-1134/)
