codex-diff-develop — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited codex-diff-develop (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Primera línea del informe generado: "Español confirmado."
1. Leer references/metodologia-codex-completa.md (~70 líneas, completo)
2. Leer references/plantillas-hallazgos.md (~230 líneas, completo)
3. cd a drupal/ si existe, si no raíz del workspace
4. git rev-parse --abbrev-ref HEAD → guardar como <rama>
5. git fetch origin develop (silencioso)
6. git diff --name-only origin/develop...HEAD → lista de archivos
7. Aplicar Decision tree para elegir puntos Codex prioritarios
8. Aplicar las 5 preguntas del framework Codex (sección siguiente)
9. Revisar archivo por archivo, anotando hallazgos con Severidad
10. Detectar IDE: leer CLAUDE_CODE_ENTRYPOINT (claude-vscode/claude-cursor/claude-antigravity).
Solo si no es concluyente, caer a detección por carpeta existente.
11. Escribir informe en <carpeta-IDE>/Revisiones diff/lint-review-diff-develop-<rama>.md
11. Auto-verificar contra el Checklist de auto-verificación (final del documento)Si cualquier paso falla, detente y consulta la sección "Edge cases del propio flujo".
Si no puedes responder a las cinco con confianza, lee el código circundante antes de emitir el informe.
Diff: añade mymodule_node_update() que calcula un score y lo guarda en una tabla custom vía db_query("INSERT ... VALUES ('" . $title . "')").
$title viene de input + nodos nuevos sin score (falta _insert).Resultado: 4 hallazgos (3 Alta + 1 Media), ninguno fuera del alcance del diff.
drupal/ en el workspace, los git se ejecutan dentro de `drupal/`. Si no, raíz del workspace.Paso 1 — detectar el IDE por variable de entorno (PRIORITARIO). Ejecuta printenv CLAUDE_CODE_ENTRYPOINT (o equivalente) y aplica:
CLAUDE_CODE_ENTRYPOINT | Carpeta a usar |
|---|---|
claude-antigravity | .antigravity/Revisiones diff/ |
claude-cursor | .cursor/Revisiones diff/ |
claude-vscode | .vscode/Revisiones diff/ |
otros (cli, vacío, etc.) | continuar al Paso 2 |
Señales secundarias si CLAUDE_CODE_ENTRYPOINT no es concluyente: __CFBundleIdentifier (com.microsoft.VSCode → VS Code, com.todesktop.* → Cursor, com.google.Antigravity → Antigravity), o VSCODE_PID/CURSOR_*/ANTIGRAVITY_* cuando existan.
Si el IDE se identificó por env, crea la carpeta correspondiente aunque no exista todavía. NUNCA caigas a detección por carpeta cuando el env var es claro — eso causa el bug de elegir .cursor/ solo porque sobrevive de un uso anterior del IDE.
Paso 2 — fallback por existencia de carpeta (solo si no hay señal de env):
.antigravity/ en la raíz del workspace → .antigravity/Revisiones diff/.cursor/ (y no .antigravity/) → .cursor/Revisiones diff/.vscode/ (y no las anteriores) → .vscode/Revisiones diff/docs/revisiones-diff/lint-review-diff-develop-<rama>.md. Crear la carpeta si no existe. Un archivo por rama (no sobrescribir entre ramas).git rev-parse --abbrev-ref HEAD → rama actual.git fetch origin develop (silencioso, ignorar fallo de red).git diff --name-only origin/develop...HEAD → lista de archivos.| Contenido del diff | Puntos Codex prioritarios | Foco extra |
|---|---|---|
.module / .php (hooks, services, controllers) | 1, 2, 3, 4, 5, 6, 7, 9, 11, 13 | DI, access, transactions |
.twig solo | 8, 14 | XSS, cache metadata, i18n |
.yml config (*.schema.yml, *.routing.yml, *.services.yml) | 11, 15, 18 | Schema completo, overrides |
*.install / update hooks | 1, 5, 9, 17 | Idempotencia, rollback |
Migrations (migrate_plus.migration.*) | 16 | id_map, file usage |
.scss / .js solo | — | Linters, A11y, BigPipe |
| Diff vacío | Reportar "sin cambios respecto a develop" y salir | |
| HEAD == develop | Abortar: "Estás en develop, no hay diff que revisar" | |
| Sin `origin/develop` | Pedir confirmación antes de continuar | |
| >200 archivos cambiados | Avisar al usuario y pedir confirmación | |
| Solo `composer.lock` | Revisar deps añadidas/eliminadas, no líneas |
Esta skill tiene dos archivos en references/. Reglas de carga:
references/metodologia-codex-completa.md (~70 líneas, 18 puntos con el PORQUÉ). NUNCA parafrasees los puntos sin haberlo leído. NUNCA uses range limits al leerlo.references/plantillas-hallazgos.md (~230 líneas, 14 plantillas con código real). Adapta los snippets al diff real, no inventes código.\Drupal::service() en clases nuevas con el argumento "ya había antes". Por qué: perpetúa deuda y bloquea testing.accessCheck(FALSE) sin comentario // accessCheck OK porque... en la línea siguiente. Por qué: bypass silencioso de permisos.id_map y file_usage (si maneja media). Por qué: rollbacks rotos.|raw en Twig sin verificar que el origen es 100% controlado por el sistema. Por qué: XSS persistente.$query->execute() dentro de hook_*_alter sin cache. Por qué: N+1 en cada render.dependencies: en *.info.yml sin verificar que el módulo está en composer.json. Por qué: deploy roto en CI.references/metodologia-codex-completa.md en esta sesión.EntityFieldManagerInterface::getFieldStorageDefinitions() sin verificar que el field exists primero. Por qué: tras eliminar un field y antes de cron/field_purge_batch, el storage queda zombi y revienta queries.finished callback que maneje $success === FALSE. Por qué: batches que fallan en mitad dejan datos a medias y nadie se entera.entityTypeManager->getStorage()->loadMultiple() sin array vacío como guarda. Por qué: loadMultiple([]) devuelve TODAS las entidades — bug clásico de fuga de memoria.| Severidad | Criterio |
|---|---|
| Alta | Seguridad explotable, data loss, rompe producción, bloquea deploy |
| Media | Bug funcional, incumple estándar del proyecto, deuda inmediata |
| Baja | Estilo, micro-optimización, mejora opcional |
Si dudas entre dos niveles, baja uno. Las Altas deben ser realmente Altas.
Español confirmado.
# Revisión de código — Diff develop (rama actual: <rama>)
## Resumen ejecutivo
<2-4 frases: alcance del diff, conteo por severidad, veredicto>
## Hallazgos por categoría
### Seguridad
### Lógica de negocio / Codex
### Estándares / DI
### Performance / Cache
### Accesibilidad / i18n
### Tests / CI
## Riesgos (tabla)
| Área | Riesgo | Severidad | Mitigación |
## Sugerencias accionables
1. ...
## Checklist final
- [ ] Hallazgos Alta resueltos
- [ ] Tests pasan
- [ ] Schema config actualizado
- [ ] Update hooks idempotentesCada hallazgo va con Problema (Severidad), Riesgo y Solución (con código). Adapta las plantillas de references/plantillas-hallazgos.md.
Antes de dar por cerrado el informe, comprueba uno por uno:
Español confirmado..cursor/Revisiones diff/lint-review-diff-develop-<rama>.mdreferences/metodologia-codex-completa.md en esta sesiónreferences/plantillas-hallazgos.md en esta sesiónSi alguna casilla queda sin marcar, vuelve atrás y arregla antes de entregar.
| Síntoma | Acción |
|---|---|
references/metodologia-codex-completa.md no existe | Avisar al usuario, no inventar puntos Codex |
references/plantillas-hallazgos.md no existe | Generar hallazgos sin plantilla pero con misma estructura |
git fetch falla por red | Continuar con develop local + nota en informe |
.cursor/ no se puede crear | Pedir al usuario que cree la carpeta y reintentar |
| Diff demasiado grande (>200 archivos) | Pedir confirmación antes de continuar |
El usuario está en develop | Abortar con mensaje claro, no generar informe vacío |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.