feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje #3

Merged
julio.caicedo merged 2 commits from feat/revisor-contra-taskview into main 2026-10-16 05:57:33 +00:00

La ficha salía de un archivo del repositorio que se revisaba. Ahora sale de TaskView por su número, que el PR nombra con una línea Tarea: #48.

En docs/ quedan los requisitos y las decisiones, que son las reglas contra las que se juzga el código y por eso sí tienen que viajar con el commit.

Qué entra

  • cmd/reviewer/taskview.go: pide GET /module/tasks/<n> al tablero y devuelve la tarea como Card. Sin dependencias nuevas: sigue siendo biblioteca estándar.
  • FindCard y el archivo del plan se van. La entrada plan de la plantilla la reemplaza goal.
  • conventions/go.md: las convenciones del lenguaje, nuevas entradas conventions de la plantilla.

Lo que decide el diseño

La tarea se comprueba contra el proyecto del repositorio. El número lo escribe quien abre el PR; sin esa comprobación podría apuntar a una tarea de otro proyecto y hacer que el revisor exija criterios ajenos. Del cuerpo del PR sólo se acepta un número, porque entra como argumento del programa.

Las convenciones entran al material, no a la instrucción. Así un hallazgo sobre nombres o estructura queda sujeto a la misma regla que el resto: tiene que citar una frase textual de esa sección. Sin eso, la única defensa contra la alucinación —quoteSupported— no cubriría justo los hallazgos más opinables.

El archivo de convenciones sale del árbol del revisor, nunca del PR, y se arma desde una lista cerrada en vez de recibirse como ruta. Si saliera del PR, cualquiera reescribiría las convenciones en el mismo commit que quiere que le aprueben; si fuera una ruta libre, se podría leer cualquier archivo del árbol confiable y meterlo en el prompt.

El precio, dicho de frente

El criterio deja de estar clavado al commit: quien edite la tarea después del PR cambia contra qué se juzgó. El borrador imprime la revisión de la tarea (historyId) para que la desincronización se vea.

Además, la importación al tablero aplastó cada ficha en un solo <p>, sin saltos de línea y con el markdown literal. textOf recupera lo que se pueda y citedRequirements ahora acepta la línea con · y con -, y corta en el primer elemento que no es un código —si no, se tragaba todo lo que la línea dijera después—. Lo que no se recupera es la separación entre Qué construir, Pruebas y Hecho cuando, que es justo contra lo que el modelo juzga. Vale la pena reimportar las 50 tareas con formato rico.

Verificado

  • gofmt, go vet, go test -race en verde. Pruebas nuevas: payload real del tablero, rechazo de una tarea de otro proyecto, y que el error de un 401 no filtre el cuerpo de la respuesta.
  • La plantilla valida como YAML.
  • Sin probar contra el tablero real: hace falta el token tvk_ en los secretos.

🤖 Generated with Claude Code

https://claude.ai/code/session_012oVizRo2WB4FeZVRnHr9Ye

La ficha salía de un archivo del repositorio que se revisaba. Ahora sale de **TaskView** por su número, que el PR nombra con una línea `Tarea: #48`. En `docs/` quedan los requisitos y las decisiones, que son las reglas contra las que se juzga el código y por eso sí tienen que viajar con el commit. ## Qué entra - `cmd/reviewer/taskview.go`: pide `GET /module/tasks/<n>` al tablero y devuelve la tarea como `Card`. Sin dependencias nuevas: sigue siendo biblioteca estándar. - `FindCard` y el archivo del plan se van. La entrada `plan` de la plantilla la reemplaza `goal`. - `conventions/go.md`: las convenciones del lenguaje, nuevas entradas `conventions` de la plantilla. ## Lo que decide el diseño **La tarea se comprueba contra el proyecto del repositorio.** El número lo escribe quien abre el PR; sin esa comprobación podría apuntar a una tarea de otro proyecto y hacer que el revisor exija criterios ajenos. Del cuerpo del PR sólo se acepta un número, porque entra como argumento del programa. **Las convenciones entran al material, no a la instrucción.** Así un hallazgo sobre nombres o estructura queda sujeto a la misma regla que el resto: tiene que citar una frase textual de esa sección. Sin eso, la única defensa contra la alucinación —`quoteSupported`— no cubriría justo los hallazgos más opinables. **El archivo de convenciones sale del árbol del revisor, nunca del PR**, y se arma desde una lista cerrada en vez de recibirse como ruta. Si saliera del PR, cualquiera reescribiría las convenciones en el mismo commit que quiere que le aprueben; si fuera una ruta libre, se podría leer cualquier archivo del árbol confiable y meterlo en el prompt. ## El precio, dicho de frente El criterio deja de estar clavado al commit: quien edite la tarea después del PR cambia contra qué se juzgó. El borrador imprime la revisión de la tarea (`historyId`) para que la desincronización se vea. Además, la importación al tablero aplastó cada ficha en un solo `<p>`, sin saltos de línea y con el markdown literal. `textOf` recupera lo que se pueda y `citedRequirements` ahora acepta la línea con `·` y con `-`, y corta en el primer elemento que no es un código —si no, se tragaba todo lo que la línea dijera después—. Lo que no se recupera es la separación entre *Qué construir*, *Pruebas* y *Hecho cuando*, que es justo contra lo que el modelo juzga. Vale la pena reimportar las 50 tareas con formato rico. ## Verificado - `gofmt`, `go vet`, `go test -race` en verde. Pruebas nuevas: payload real del tablero, rechazo de una tarea de otro proyecto, y que el error de un 401 no filtre el cuerpo de la respuesta. - La plantilla valida como YAML. - **Sin probar contra el tablero real**: hace falta el token `tvk_` en los secretos. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_012oVizRo2WB4FeZVRnHr9Ye
feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje
Some checks failed
_analytics.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (push) Failing after 0s
_build-docker.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (push) Failing after 0s
_deploy-k8s.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (push) Failing after 0s
_go-analytics.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (push) Failing after 0s
_go-build.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (push) Failing after 0s
_go-deploy.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (push) Failing after 0s
_go-test.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (push) Failing after 0s
_test.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (push) Failing after 0s
_analytics.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (pull_request) Failing after 0s
_build-docker.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (pull_request) Failing after 0s
_deploy-k8s.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (pull_request) Failing after 0s
_go-analytics.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (pull_request) Failing after 0s
_go-build.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (pull_request) Failing after 0s
_go-deploy.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (pull_request) Failing after 0s
_go-test.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (pull_request) Failing after 0s
_test.yaml / feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje (pull_request) Failing after 0s
Go / Test (pull_request) Successful in 35s
d65499c9dc
La ficha salía de un archivo del repositorio. Ahora sale de TaskView por su
número, que el PR nombra con una línea "Tarea: #48". En docs/ quedan los
requisitos y las decisiones, que son las reglas contra las que se juzga el
código y por eso sí tienen que viajar con el commit.

El precio es que el criterio deja de estar clavado al commit: quien edite la
tarea después del PR cambia contra qué se juzgó. El borrador imprime la
revisión de la tarea (historyId) para que la desincronización se vea.

La plantilla comprueba que la tarea sea del proyecto del repositorio. El
número lo escribe quien abre el PR, y sin esa comprobación podría apuntar a
una tarea de otro proyecto y hacer que el revisor exija criterios ajenos. Del
cuerpo del PR solo se acepta un número, porque entra como argumento.

El tablero aplastó cada ficha en un solo párrafo HTML, así que citedRequirements
acepta la línea con "·" y con "-", y corta en el primer elemento que no es un
código: si no, se tragaba todo lo que la línea dijera después.

Las convenciones del lenguaje entran al material, no a la instrucción, y por eso
un hallazgo sobre nombres o estructura queda sujeto a la misma regla que el
resto: tiene que citar una frase textual de esa sección. El archivo se arma
desde una lista cerrada y sale del árbol del revisor, nunca del pull request:
si saliera del PR, cualquiera reescribiría las convenciones en el mismo commit
que quiere que le aprueben.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012oVizRo2WB4FeZVRnHr9Ye
fix: leer REVISOR_MODELS del canal de secretos
Some checks failed
_analytics.yaml / fix: leer REVISOR_MODELS del canal de secretos (push) Failing after 0s
_build-docker.yaml / fix: leer REVISOR_MODELS del canal de secretos (push) Failing after 0s
_deploy-k8s.yaml / fix: leer REVISOR_MODELS del canal de secretos (push) Failing after 0s
_go-analytics.yaml / fix: leer REVISOR_MODELS del canal de secretos (push) Failing after 0s
_go-build.yaml / fix: leer REVISOR_MODELS del canal de secretos (push) Failing after 0s
_go-deploy.yaml / fix: leer REVISOR_MODELS del canal de secretos (push) Failing after 0s
_go-test.yaml / fix: leer REVISOR_MODELS del canal de secretos (push) Failing after 0s
_test.yaml / fix: leer REVISOR_MODELS del canal de secretos (push) Failing after 0s
_analytics.yaml / fix: leer REVISOR_MODELS del canal de secretos (pull_request) Failing after 0s
_build-docker.yaml / fix: leer REVISOR_MODELS del canal de secretos (pull_request) Failing after 0s
_deploy-k8s.yaml / fix: leer REVISOR_MODELS del canal de secretos (pull_request) Failing after 0s
_go-analytics.yaml / fix: leer REVISOR_MODELS del canal de secretos (pull_request) Failing after 0s
_go-build.yaml / fix: leer REVISOR_MODELS del canal de secretos (pull_request) Failing after 0s
_go-deploy.yaml / fix: leer REVISOR_MODELS del canal de secretos (pull_request) Failing after 0s
_go-test.yaml / fix: leer REVISOR_MODELS del canal de secretos (pull_request) Failing after 0s
_test.yaml / fix: leer REVISOR_MODELS del canal de secretos (pull_request) Failing after 0s
_analytics.yaml / Merge pull request 'feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje' (#3) from feat/revisor-contra-taskview into main (pull_request) Failing after 0s
_build-docker.yaml / Merge pull request 'feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje' (#3) from feat/revisor-contra-taskview into main (pull_request) Failing after 0s
_deploy-k8s.yaml / Merge pull request 'feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje' (#3) from feat/revisor-contra-taskview into main (pull_request) Failing after 0s
Go / Test (pull_request) Successful in 43s
_go-analytics.yaml / Merge pull request 'feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje' (#3) from feat/revisor-contra-taskview into main (pull_request) Failing after 0s
_go-build.yaml / Merge pull request 'feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje' (#3) from feat/revisor-contra-taskview into main (pull_request) Failing after 0s
_go-deploy.yaml / Merge pull request 'feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje' (#3) from feat/revisor-contra-taskview into main (pull_request) Failing after 0s
_go-test.yaml / Merge pull request 'feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje' (#3) from feat/revisor-contra-taskview into main (pull_request) Failing after 0s
_test.yaml / Merge pull request 'feat: leer la tarea del tablero y revisar contra las convenciones del lenguaje' (#3) from feat/revisor-contra-taskview into main (pull_request) Failing after 0s
3b98c31b97
El llamador la pasaba como entrada desde vars.REVISOR_MODELS, pero en este
despliegue toda la configuración vive como secreto de organización: no existe
ninguna variable con ese nombre. vars. resolvía a cadena vacía y el revisor
cortaba en el primer chequeo, sin llegar a llamar a ningún modelo.

Deja de ser una entrada de la plantilla y pasa por secrets, igual que
OPENROUTER_API_KEY, TASKVIEW_URL y TASKVIEW_TOKEN. No es un secreto por su
contenido —es una lista de modelos de OpenRouter—, pero es donde este
despliegue guarda su configuración.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012oVizRo2WB4FeZVRnHr9Ye
julio.caicedo deleted branch feat/revisor-contra-taskview 2026-10-16 05:57:33 +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!3
No description provided.