Repository navigation
feat(frontend): interfaz de documentos, listado y chat con citas clicables - #20
Merged
Merged
Conversation
…ables (RF-02, RF-04, RF-05, RF-06, RF-08, RF-09) Construye la interfaz completa sobre el frontend vacio: login/registro, subida de PDF, listado de documentos con estado, creacion de conversaciones sobre uno o todos los documentos propios, envio de preguntas con estado optimista que sobrevive a la navegacion (vive en la cache de mutaciones de TanStack Query, no en estado local de componente), citas clicables que muestran el fragmento citado, y renderizado de markdown seguro (react-markdown sin rehype-raw, sin dangerouslySetInnerHTML) para el contenido del LLM que RNF-05 trata como dato no confiable. Incluye un mutex real de un solo vuelo para la rotacion de refresh tokens (Web Locks API entre pestanas, coalescing de promesa en memoria como fallback) para evitar que peticiones concurrentes disparen una revocacion de familia en el backend. Diseño y plan revisados adversarialmente por Gemini 3.1 Pro via agy en varias rondas hasta quedar aprobado salvo un ultimo gap preciso (el fallback del mutex era un passthrough sin bloqueo real); corregido de raiz antes de implementar, no como parche. Implementacion delegada a agy (Gemini 3.7 Flash medium), orquestado y verificado por Claude Code: lint, typecheck, test (45/45) y build en verde. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BoVKssKAe1Z1vGJAEBEzvy
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumen
Construye la interfaz completa de DocQA sobre un frontend hasta ahora vacío (RF-02, RF-04, RF-05, RF-06, RF-08, RF-09):
%PDF-).processing).GET /chunks/:id).react-markdownsinrehype-raw, sindangerouslySetInnerHTMLen ningún componente — el contenido del LLM se trata como dato no confiable, RNF-05).Cómo se construyó
Plan revisado adversarialmente por Gemini 3.1 Pro (vía
agy, modo solo lectura) durante varias rondas de corrección de raíz, hasta quedar aprobado salvo un último gap preciso: el fallback del mutex de refresh (fallbackSingleTabLock) estaba descrito como un mutex pero implementado como un passthrough sin bloqueo real. Se corrigió esa causa de raíz (mutex real por coalescing de promesa) antes de implementar — no un workaround.Implementación delegada a Gemini 3.7 Flash (medium) vía
agy, orquestado por Claude Code. Verificación propia además de la del agente: lint, typecheck, test y build en verde, y revisión manual de que no exista ningúndangerouslySetInnerHTMLnirehype-rawen el árbol de componentes.Test plan
pnpm --filter frontend lint(0 errores, 5 warnings preexistentes de fast-refresh en archivos con exports mixtos)pnpm --filter frontend typecheckpnpm --filter frontend test(12/12 archivos, 45/45 tests)pnpm --filter frontend build(build de producción de Vite exitoso)dangerouslySetInnerHTMLnirehype-rawen ningún componente🤖 Generated with Claude Code
https://claude.ai/code/session_01BoVKssKAe1Z1vGJAEBEzvy