Repository navigation
fix: [TESIS-159] say a tenant is unknown only when the API answers 404 - #73
Conversation
… 404 The startup gate showed "No encontramos esta empresa" for any failure of /tenant-config: a 500 while the API restarted, a network cut or a response that does not validate covered the whole app, even with a valid config rehydrated from localStorage, and with no way to retry since the query never retried and never went stale. Only a 404 now means the slug is not a company. With a config already in the store the app keeps running; without one, a failure shows a "could not connect" screen with a retry button. The config query retries once on anything but a 404. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Revisado. Lo veo bien para implementar.
Lo que verifiqué
|
TomasMartin2004
left a comment
There was a problem hiding this comment.
Revisión del diff completo. El código es idéntico al que leí cuando los PRs estaban en draft —ningún commit nuevo—, así que lo que sigue es el veredicto formal.
✅ Aprobado
TenantGate mostraba «No encontramos esta empresa» ante cualquier falla de GET /tenant-config, y encima tapaba la app entera aunque hubiera una config válida rehidratada de localStorage. El contrato de tenant (TESIS-121, §3/§5) reserva esa pantalla para el 404.
Con el sistema desplegado en la VPS, un 500 mientras la API reinicia o un corte de red son los modos de falla más probables en vivo, y los dos terminaban diciéndole al usuario que su empresa no existe. Es el peor mensaje posible: manda a buscar un problema que no está.
Lo que verifiqué
- Ahora distingue por status y sólo el 404 dice «no encontramos esta empresa». Confirmé que el cliente HTTP efectivamente expone
statusen el error (client.test.tslo afirma conrejects.toMatchObject({ status: 401 })), así que la comprobación es contra algo que existe y no contra la forma que asume el mock. - Una falla sin status —red, respuesta que no pasa el schema— cae también en «No pudimos conectarnos», que es correcto: no se sabe nada sobre si la empresa existe.
- Con una config ya rehidratada, la app sigue andando en vez de taparse. Ese es el caso que más vale en una demo.
- «Reintentar» llama a
refetchde verdad, con test. Antes el botón existía y no podía cambiar nada.
#73) The startup gate showed "No encontramos esta empresa" for any failure of /tenant-config: a 500 while the API restarted, a network cut or a response that does not validate covered the whole app, even with a valid config rehydrated from localStorage, and with no way to retry since the query never retried and never went stale. Only a 404 now means the slug is not a company. With a config already in the store the app keeps running; without one, a failure shows a "could not connect" screen with a retry button. The config query retries once on anything but a 404. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Ticket de Jira
https://proyectofinalfrlp.atlassian.net/browse/TESIS-159
Descripción
El gate de arranque (
TenantGate) mostraba «No encontramos esta empresa» ante cualquier falla deGET /tenant-config(if (slug === null || isError)). El contrato de tenant (TESIS-121, §3/§5) reserva esa pantalla para el 404, pero también la disparaban un 500 mientras la API se reinicia, un corte de red o una respuesta que no pasa el schema. Y tapaba la app entera aunque hubiera una config válida rehidratada delocalStorage, sin forma de reintentar: la query tieneretry: falseystaleTime: Infinity.Repro en
master: con la sesión abierta, recargar mientras la API se reinicia (o cerrar sesión:queryClient.clear()vuelve a pedir la config) → «La dirección desde la que entraste no corresponde a ninguna empresa configurada» hasta recargar a mano.refetch).useTenantConfigreintenta una vez cualquier falla que no sea 404 (el 404 sigue sin reintento: no cambia el desenlace).Evidencia visual
Pendiente de captura.
Cómo probar
?tenant=ninguna→ «No encontramos esta empresa», como siempre.Verificación:
npm run test(679 tests, 0 fallas),npm run lint,npm run format:checkynpm run buildlimpios.Impacto y consideraciones
¿Introduce breaking changes?
No
¿Requiere nuevas variables de entorno?
No
¿Afecta la arquitectura o genera un nuevo patrón?
No. Ajusta el gate a lo que ya decía el contrato de tenant.
🤖 Generated with Claude Code