Planos · agentic-dev-boilerplate
00 · revisión entre pares

Feedback con evidencia, no con opinión.

/pr-review-lead hace de Tech Lead sobre el pull request de un compañero, en este repo o en otro que le señales. Lee la doctrina que ese código realmente documenta, lee el diff, y cada hallazgo apunta a una línea de código, a una sección de doctrina, o dice en voz alta que es una opinión. Nada sale a GitHub sin tu OK explícito sobre el borrador final.

para quien lidera y quien desarrolla el rigor lo eliges antes de leer nunca postea sin tu OK
Pasos 0-1

Rigor y doctrina

Flexible, Standard o Strict. Después, la doctrina del repo destino.

→
Pasos 2-3

Diff y evidencia

El diff real, no la descripción. Cada hallazgo con su cita.

→
Pasos 4-5

Checkpoint y triage

Tabla, puntos fuertes y puntaje. Tú reclasificas lo que haga falta.

→
Pasos 6-7

Borrador y OK

Sándwich de feedback. Se postea solo cuando dices que sí, a ESE borrador.

01 · cuándo sí, cuándo no

Revisar el trabajo de otro, no el tuyo

La skill tiene vecinos que también "revisan". Cada uno responde a alguien distinto, y tiene su propia puerta.

Necesitas Usa
Feedback sobre el PR terminado de un compañero (de este repo o de otro), con puntaje y evidencia, posteado solo después de tu OK /pr-review-lead
La pasada de review dentro del pipeline de una historia: un agente adversarial independiente, hallazgos adjudicados por el orquestador, vuelta a la etapa 2 /sprint-development etapa 3, references/review-pr.md
Revisar tus propios cambios sin commitear antes de abrir el PR El flujo de code review del harness
Abrir el PR, resolver conflictos, manejar ramas, mergear /git-flow-master
Lo que comparten

Un checklist y una escala

  • Las dos leen el mismo review-pr.md §"CHECKLIST DE REVIEW". Esta skill lo usa por referencia y nunca lo copia: un cambio al checklist se hace ahí, una sola vez.
  • Las dos hablan la misma escala de severidad, la de §"Adjudication contract": BLOCKER, MAJOR, MINOR, NIT. Un hallazgo significa lo mismo lo levante quien lo levante.
Lo que las separa

A quién le responden

  • La etapa 3 le responde al orquestador de UNA historia y nunca postea nada.
  • Esta skill le responde a una persona que revisa el PR de OTRO: suma el lente de rigor y el puntaje, y postea solo con un OK explícito.
02 · el mapa

Ocho pasos, y lo externo pasa en el último

No tiene modos: una sola corrida, del paso 0 al 7. Hasta el paso 6 todo queda en la conversación. Recién el paso 7 escribe algo que otros ven.

Paso La IA hace Tú decides Sale
0 · Rigor Pregunta una vez, con el prompt del harness, y confirma el alcance Flexible, Standard o Strict; qué PR; si es de este repo o de otro El lente para todo lo que sigue
1 · Doctrina Carga la doctrina del repo destino, o avisa que usa la de este Si aceptas un chequeo que el repo destino no documenta El estándar contra el que se mide
2 · Leer el PR Lee los diffs reales; separa ruido de trabajo Nada: te avisa qué es ruido Los parches que importan
3 · Analizar Recorre el checklist y cita cada hallazgo Nada todavía Hallazgos en Real, Pattern o Positive
4 · Checkpoint Presenta tabla, puntos fuertes y puntaje sobre 10 Lees antes de que salga algo Una tabla en la conversación
5 · Triage Re-clasifica exactamente como le pides, sin defender la primera pasada Qué hallazgos van, con qué severidad, qué puntaje aceptas El conjunto que se redacta
6 · Borrador Redacta el comentario en forma de sándwich El tono, si no hay preferencia previa Un borrador en inglés
7 · Postear Postea con gh y lee el comentario de vuelta El OK explícito sobre este borrador Un comentario en el PR, con su URL
03 · paso 0, el preflight

Cuán estricto ser se decide antes de leer una línea

Es obligatorio en cada corrida. Se saltea solo cuando el pedido ya lo dijo ("revísalo estricto", "sé flexible con los patrones"), y nunca se vuelve a preguntar lo que ya se dio.

Nivel Qué se reporta Hallazgos Pattern Peso de un Pattern en el puntaje
Flexible Solo lo evidentemente roto o lo que pone en riesgo corrección, seguridad o datos No aparecen, salvo que también sean un riesgo de corrección o seguridad Ninguno
Standard (recomendado) La misma vara de Flexible, más las desviaciones de patrón Observaciones livianas, como comparación: "el patrón documentado hace X, este PR hace Y" Ninguno: son informativos, nunca restan
Strict Pasada literal contra cada archivo de doctrina que aplique Hallazgo etiquetado, aunque funcione bien Chico, con tope: nunca domina como un Real
Strict ensancha qué cuenta como hallazgo, no baja la vara de la prueba. Un Pattern sigue siendo un Pattern en cualquier nivel: el rigor nunca convierte una nota de patrón en un error.

Por qué existe el lente

Viene de una sesión real en el boilerplate hermano de QA: una desviación de arquitectura que no rompía nada se puntuó con la severidad máxima, y el usuario la corrigió. Casi nadie implementa una arquitectura al pie de la letra, y una desviación que no rompe nada no es un error como lo es un bug.

Pattern, en Standard

La página consulta Supabase directo

  • review-pr.md §"Architecture & Structure" documenta la separación: el acceso a datos va en lib/api/. Esta página lo salta, y funciona igual.
  • Se dice como comparación, con la cita, sin dramatizar y sin tocar el puntaje.
Real, en cualquier nivel

La RPC confía en p_user_id

  • Una función nueva filtra por el id que le pasa el que llama, sin atarlo a auth.uid() (rpc-authorization.md): cualquier usuario autenticado lee filas ajenas.
  • Es BLOCKER aunque hayas pedido suavidad con los patrones.
04 · paso 1, cargar la doctrina

Primero se lee, después se opina

Nunca se revisa contra convenciones recordadas ni contra "buenas prácticas" genéricas que no se verificaron documentadas. La doctrina se lee fresca en cada corrida, nunca de memoria de una sesión anterior.

PR de este repo

AGENTS.md más lo que el PR toca

  • §1 Critical Rules y §2 SIMPLICITY FIRST y SURGICAL CHANGES de AGENTS.md, más las secciones que su router nombra, por ejemplo agent-code-quickref.md (§10, referencia rápida del stack).
  • Si la rama nombra una historia, sus criterios de aceptación y su plan vía bun run jira:sync-issues get <KEY>: "hace lo que pidió la historia?" es el primer ítem del checklist.
PR de otro repo

Se sondea antes de asumir

  • Tiene su propio AGENTS.md, .agents/skills/ o .context/? Si sí, esa doctrina manda y se citan SUS rutas.
  • Haber nacido de este boilerplate es una señal, no una prueba: el fork pudo divergir. Si no tiene doctrina, se usa la de este repo y se avisa una vez, arriba de todo.
# el sondeo (references/evidence-and-doctrine-lookup.md §"External repo")
gh api "repos/<owner>/<repo>/contents/AGENTS.md" -q '.content' | base64 -d
gh api "repos/<owner>/<repo>/contents/.agents/skills" -q '.[].name'
gh api "repos/<owner>/<repo>/contents/.context" -q '.[].name'

El mapa de doctrina se ensancha o se achica por PR

Para un arreglo de tres líneas no se carga todo. La tabla completa vive en references/evidence-and-doctrine-lookup.md §"Doctrine map".

Si el PR toca Se lee
Cualquier código typescript-patterns.md, code-standards.md, el checklist de review-pr.md
Rutas de error, handlers de API error-handling.md
Estructura de backend, módulos nuevos project-bootstrap, regla B1 (capas api/ / schemas/ / db/)
Funciones de Postgres, RLS, migraciones rpc-authorization.md; el mapa de datos (bun run context:map business-data-context) si existe
UI DESIGN.md, .context/design/master-design-plan.md, Critical Rule #14, data-testid-standards.md
Una decisión de arquitectura Los ADR Accepted de .context/ADR/, adr-doctrine.md
Tests unitarios unit-testing, su ## Compact Rules
Deploy, entorno, CI pre-deploy-checklist.md, environment-config.md, ci-cd-setup.md
Cuando al repo destino le falta un archivo que esperarías, la skill lo dice en vez de sustituirlo en silencio: "su repo no tiene rpc-authorization.md, así que mido la función contra la versión de este boilerplate; avísame si prefieres que salte ese chequeo".
05 · paso 2, juntar el PR

Se lee el diff, nunca la descripción

Un diff grande a veces es casi todo ruido. La skill lo separa antes de leer línea por línea, y te avisa qué apartó.

Ruido contra trabajo

Primero los titulares de los commits: un lockfile, tipos de Supabase regenerados, una sincronización de tipos de OpenAPI o un commit de sync del template no se revisan línea por línea. Se nombran.

Lo generado se chequea igual

Por una sola cosa: que coincida con lo que lo generó. Un archivo generado editado a mano es un hallazgo.

PR demasiado grande

gh pr diff falla con PullRequest.diff too_large. La salida es paginar los parches por archivo, nunca hojear la descripción.

Muchos archivos

No se traen todos los diffs al contexto propio: se despacha por archivo o por grupo (UI, API, DB, tests) con un briefing de 7 componentes. Pocos archivos se leen en línea.

Un claim no es evidencia. "Pasan todos los tests", "verificado en staging", "CI en verde": se anotan como claims salvo que se pueda señalar la corrida, el deploy o la salida. Uno bien respaldado gana un Positive; uno sin verificar nunca se presenta como hallazgo propio.
06 · paso 3, analizar

Cada hallazgo responde "de dónde sale esto?"

Apunta a una línea de código, apunta a una línea de doctrina, o se rotula como opinión. No hay cuarta opción.

Evidencia de código

<file>:<line> del diff, con la línea citada.

Sin checkout local, se cita tal como aparece en el parche.

Evidencia de doctrina

<archivo> §<Sección> o Critical Rule #N, con la oración que respalda el claim.

Siempre un título de sección, nunca un número de línea: los números se mueven con cada edición (Critical Rule #17).

Opinión

Dicha con esas palabras: "esto es una opinión general de buenas prácticas, no está en la documentación de este repo".

Disfrazarla de regla erosiona la confianza en todas las demás citas.

El checklist, más tres áreas del revisor de PRs ajenos

Recorre review-pr.md §"CHECKLIST DE REVIEW" en su orden (criterios de aceptación primero) y suma tres frentes que un revisor de historia puede no alcanzar.

Límites de capa

api/ / schemas/ / db/ en el backend y la estructura del design system en el frontend son arquitectura del framework (project-bootstrap B1). Colapsarlas es un hallazgo, no una simplificación.

Fidelidad de UI · Rule #14

La referencia es la UI viva actual más los tokens de DESIGN.md; el mockup es inspiración. Es defecto un cambio que no coincide ni con la UI viva ni con el design system y no tiene ratificación spec-only en §5 de master-design-plan.md.

Seguir la UI viva mejorada donde el mockup difiere no es un hallazgo.

ADRs

Una elección difícil de revertir (modelo de auth, de acceso a datos o de tenancy, lock-in de framework) sin ADR, o que contradice uno Accepted en .context/ADR/, es un hallazgo.

Tres baldes, y cada hallazgo cae en uno solo

El balde, no la etiqueta de severidad, es lo que mueve el puntaje. Dentro de Real y Pattern la severidad usa la escala compartida, en tu idioma en la conversación (Bloqueante, Mayor, Menor, Nit) y en inglés en lo posteado.

Balde Qué es Ejemplos
Real Algo evidentemente mal, o un riesgo para corrección, seguridad o datos, más allá del gusto arquitectónico de nadie. Pesa en todos los niveles Criterio no cumplido, credencial hardcodeada (Rule #1), RPC que confía en la identidad que le pasan, migración destructiva sin camino de vuelta, divergencia de UI sin ratificar
Pattern Funciona, no rompe nada, pero se aparta de una convención documentada. Es una comparación, no un veredicto. Su peso depende del paso 0 Más de dos parámetros posicionales, un import relativo profundo, lógica de dominio en una utilidad compartida, un desliz de nombres
Positive Lo bien hecho, con la misma vara de evidencia. No es opcional ni una cortesía: se llena siempre Tests que fijan comportamiento y no implementación, una migración con su down path, un ADR limpio, un componente reutilizado, evidencia de UI viva adjunta
07 · pasos 4 y 5, checkpoint y triage

Primero una tabla para ti, todavía nada para el autor

La tabla agrupa por balde y severidad, siempre con la columna de evidencia, y cierra con los puntos fuertes y un puntaje sobre 10 con su razón en una línea.

# forma del checkpoint (references/output-and-posting-flow.md, paso 4)
| # | Bucket  | Severidad | Ubicación     | Observación (con evidencia)              |
| 1 | Real    | BLOCKER   | <file>:<line> | ... rpc-authorization.md §"Actor bind"   |
| 2 | Pattern | MINOR     | <file>:<line> | ... comparación, no error. review-pr.md  |

Puntos fuertes:
- <positive con su propia evidencia>

Score: X.X / 10: <razón atada a los baldes que lo movieron>

Cómo se arma el puntaje

Arranca en 10 y resta. La rúbrica completa está en references/severity-and-scoring.md §"Scoring rubric".

Hallazgo Resta
Real BLOCKER De 1.5 a 2.5, según el radio de impacto: una anon key filtrada en un demo pesa menos que una lectura entre tenants con datos reales
Real MAJOR De 0.5 a 1
Real MINOR De 0.1 a 0.3
NIT Nada
Pattern Nada en Flexible y Standard. En Strict, de 0.1 a 0.2 cada uno, con tope: diez nitpicks de patrón sobre un PR sin defectos reales lo dejan holgado arriba de la mitad
Positive No suma. Un PR con un bloqueante y positivos excelentes sigue siendo un PR con un bloqueante: se dicen las dos cosas

El triage es tuyo

Tu contexto (las normas del equipo, lo que consideras que vale la pena levantar) decide qué sale. La skill re-clasifica como le pides y no defiende la primera pasada.

"Solo los bloqueantes y mayores"Filtra lo que va al borrador. No re-analiza: solo re-acota.
"Ese no es un error, es un patrón"Lo pasa de Real a Pattern, recalcula el puntaje con el nuevo peso y te pregunta si lo aceptas antes de seguir.
"No seamos tan duros con los patrones"Es un cambio de rigor a mitad de camino: re-recorre cada Pattern con el nuevo nivel y te vuelve a mostrar la tabla antes de redactar nada.
Gate sabes qué hallazgos van y aceptaste un puntaje. Antes de eso no se redacta: un borrador que nadie pidió es un borrador que se rehace.
08 · pasos 6 y 7, borrador y OK

Un sándwich honesto, y después tu sí

Elogio, constructivo, elogio. Con una fortaleza real en cada punta, no un cumplido de relleno envolviendo una lista de quejas.

La IA hace

Redacta en inglés (Critical Rule #12), salvo que pidas otro idioma para ESE comentario. Cada punto constructivo lleva la cita de la tabla.

Pasa la prosa por la skill humanizer si está instalada: lo va a leer una persona. Código, rutas y citas quedan intactos.

Tú decides

El tono, si no hay una preferencia ya establecida.

El OK, sobre este borrador. "Se ve bien" mientras todavía se discute la severidad no es "postéalo" cuando se muestra el final.

Sale

Un comentario simple en el PR, posteado desde un archivo temporal.

Su URL, confirmada leyendo el PR de vuelta.

# el borrador confirmado, a un archivo del scratch de la sesión
gh pr comment <N> [--repo <owner>/<repo>] --body-file <scratch>/pr<N>_review.md

# leerlo de vuelta: el comentario tiene que estar en el PR
gh pr view <N> [--repo <owner>/<repo>] --json comments -q '.comments[-1].url'
Gate la URL que devuelve gh pr comment coincide con la lectura de vuelta (Critical Rule #16: el exit code no es el resultado). Después se borra el archivo temporal.
Un lote, aprobado a medias. "Postea el #1, retén el #2" postea exactamente ese subconjunto y dice qué quedó pendiente y por qué. Un sí para un PR nunca es consentimiento para un hermano que todavía está en triage.
09 · reglas duras

Las barandas que no se negocian

Viven en ## Compact Rules y en ## Rules de la skill; las compactas viajan a los subagentes por .agents/skills/REGISTRY.md.

Nunca postea sin el OK del paso 7. Sin excepciones. Un OK para otro PR no se traslada, y el silencio no es aprobación.
Redactar y postear no se delegan. Son decisiones de tono y una acción que otros ven: quedan en el orquestador, nunca en un subagente.
Revisar no es arreglar. Nunca empuja commits al PR que revisa. Un arreglo que quieras va por el autor, o por una rama aparte vía /git-flow-master.
Sin review formal no pedido. No aprueba ni pide cambios en GitHub salvo que pidas esa acción puntual: el artefacto por defecto es un comentario.
Ninguna "buena práctica" se presenta como regla del repo sin su archivo §sección. Cuando es opinión, lo dice.
Siempre hay puntos fuertes. Cero positivos en un PR que los tiene no es rigor, es falta de calibración.
/git-flow-master se carga antes del primer gh (.agents/instructions/agent-tool-resolution.md §6.5).
10 · qué le dices a la IA

Invocarla en las tres terminales

No tiene modos. Alcanza con nombrarla y el PR, o con frases como "revisa este PR", "actúa de tech lead" o "review this PR". Si ya dices el rigor ("revísalo estricto"), el paso 0 no pregunta.

Claude Code

/pr-review-lead owner/repo#123

La barra de la skill, con el PR que quieres revisar.

OpenCode

carga la skill pr-review-lead

Sin barra: nombras la skill y el PR en la frase.

Codex

carga la skill pr-review-lead

Mismo patrón que OpenCode, CLI o Desktop.

El PR se puede dar de varias formas: owner/repo#N, la URL del PR, "el PR de la rama actual" o un diff crudo.
11 · alrededor de esta skill

Con quién trabaja

Es chica a propósito: el checklist y la escala son de sprint-development, y el transporte de gh es de git-flow-master.

Comparte · checklist y escala

/sprint-development

Su etapa 3 es el revisor dentro del pipeline de una historia. Es dueña de review-pr.md, que esta skill lee por referencia.

Antes del primer gh · y para arreglar

/git-flow-master

Se carga antes de cualquier llamada a gh. Abrir, mergear o arreglar el PR es trabajo suyo, nunca de esta skill.

La base · cómo se habla

Capa comportamental

Cómo se le pregunta al humano y cómo se reporta. El paso 0 es una pregunta de tres opciones por el prompt del harness, como pide AGENTS.md §2.

Para leer más: .agents/skills/pr-review-lead/SKILL.md y sus referencias en references/ (rigor y puntaje, evidencia y doctrina, borrador y posteo). El checklist compartido: sprint-development/references/review-pr.md.