Responder a Comentario de Revisión en PR
Responde a un comentario de revisión de código en un PR de GitHub y resuelve el hilo de discusión.
Entradas
Infiere todas las entradas del contexto de la conversación. Pregunta solo si es ambiguo.
Entrada 1 — Número o URL del PR. El pull request sobre el que actuar. Inferir del contexto (por ejemplo, una URL de PR mostrada previamente o el nombre de la rama). Si es realmente ambiguo, ejecuta:
gh pr list --head "$(git rev-parse --abbrev-ref HEAD)" --json number,url --jq '.[0]'
Entrada 2 — El comentario a responder.
Una observación específica del revisor; generalmente identificada por número (#2), archivo+línea, o texto citado de la tabla de comentarios mostrada anteriormente en la conversación.
Si no hay una tabla de comentarios en la conversación y el skill dakubo-display-pr-remarks está disponible, úsalo para mostrar la tabla. Si no, pregunta al usuario por el comentario.
Entrada 3 — La respuesta. La respuesta a publicar: una explicación, un agradecimiento o un resumen de la corrección. Derivar del contexto (por ejemplo, lo que se acaba de corregir o discutir). Preguntar si no está claro.
Proceso
1. Resolver el ID del comentario
Obtener los comentarios de revisión en línea del PR:
gh api repos/:owner/:repo/pulls/<PR>/comments --paginate \
--jq '.[] | {id, path, line: (.line // .original_line), body: .body[0:120]}'
Coincidir el comentario objetivo por número de línea, ruta de archivo o fragmento del cuerpo. Anotar su id.
2. Publicar la respuesta
gh api repos/:owner/:repo/pulls/<PR>/comments \
--method POST \
--field body="<answer>" \
--field in_reply_to=<comment_id>
3. Resolver el hilo
Encontrar el hilo de revisión que contiene este comentario:
gh api graphql -f query='
{
repository(owner: "<owner>", name: "<repo>") {
pullRequest(number: <PR>) {
reviewThreads(first: 100) {
nodes {
id
isResolved
comments(first: 1) { nodes { databaseId } }
}
}
}
}
}'
Coincidir el hilo cuyo comments.nodes[0].databaseId sea igual al id del comentario original (no la respuesta). Luego resolverlo:
gh api graphql -f query='
mutation {
resolveReviewThread(input: { threadId: "<thread_node_id>" }) {
thread { isResolved }
}
}'
Salida
Confirmación: respuesta publicada al comentario <id> en <file>:<line>, hilo resuelto. Una sola frase.
Qué NO hacer
- No inventar una respuesta — derivarla del contexto o preguntar.
- No resolver un hilo sin publicar primero la respuesta.
- No adivinar el PR si hay varios abiertos en esta rama; preguntar.