Compare commits

...
Author SHA1 Message Date
devops 5bcacdf09d chore: promote v1.0.275 to production [skip ci] 2026-09-20 20:22:40 +00:00
devops 3e5e18c14f chore: release v1.0.275 [skip ci] 2026-09-20 20:22:36 +00:00
devops e75a11d554 Merge branch 'fix/gallery-zoom-url-spaces-2026-09-20'
Build and Push Frontend / Escaneo de Secretos (Gitleaks) (push) Successful in 39s
Build and Push Frontend / Construir y Subir Imagen (push) Successful in 13m30s
2026-09-20 20:07:58 +00:00
devops 0fd05dab2a fix(ecommerce): comillas en url() del zoom, rompia con espacios/parentesis en el nombre de archivo 2026-09-20 20:07:32 +00:00
gitea-actions 5fe18ce3d4 chore(gitops): deploy Docs Portal v1.0.274 [skip ci] 2026-09-20 19:25:20 +00:00
devops 2318e1da7d Merge branch 'docs/adr-0010-cierre-bugs-mobile-imagenes-2026-09-20'
Build and Push Docs Portal / Escaneo de Secretos (Gitleaks) (push) Successful in 31s
Build and Push Docs Portal / Construir y publicar Docs Portal (push) Successful in 6m18s
2026-09-20 19:18:22 +00:00
devops b6b2f15c12 docs(adr-0010): cerrar bug de overflow mobile 320px, actualizar estado de imagenes 2026-09-20 19:17:55 +00:00
devops 7658b9879a chore: promote v1.0.273 to production [skip ci] 2026-09-20 19:10:43 +00:00
devops a1dc145528 chore: release v1.0.273 [skip ci] 2026-09-20 19:10:41 +00:00
devops 4f5a715812 Merge branch 'fix/navbar-departamentos-overflow-320-2026-09-20'
Build and Push Frontend / Escaneo de Secretos (Gitleaks) (push) Successful in 31s
Build and Push Frontend / Construir y Subir Imagen (push) Successful in 11m57s
2026-09-20 18:58:13 +00:00
5 changed files with 66 additions and 31 deletions

No files matched your search

@@ -425,27 +425,49 @@ Resultados reales, uno por uno (código de cada prueba en
un dispositivo real. un dispositivo real.
21b. **Accesibilidad del checkout completo** por teclado (no solo el 21b. **Accesibilidad del checkout completo** por teclado (no solo el
buscador) — tab order y foco visible en los 3 pasos. buscador) — tab order y foco visible en los 3 pasos.
22. **Importación manual de imágenes no se refleja en el storefront** 22. **Importación manual de imágenes no se reflejaba en el storefront**
(reportado por el usuario 2026-09-20): subir/editar imágenes de un (reportado por el usuario 2026-09-20) — **causa raíz encontrada y
producto a mano (vs. importación por CSV, que sí funciona) no arreglada en código (2026-09-20), pendiente confirmar con una
aparece del lado del storefront. Falta reproducir contra el flujo edición real.** `medusaFetch()` en `lib/headless/providers/medusa.ts`
real de importación manual del admin de Medusa (ver usaba `next:{revalidate:60,tags:["medusa-products"]}`, caché en
`temp-admin`/`ari-shopping-tienda` en memoria) y confirmar si es memoria por-pod que sobrevivía a `force-dynamic`. Con
caché (ISR de Next, `force-dynamic` ya está en la página de `frontend-deploy` en 2 réplicas sin cacheHandler compartido, el POST
producto — ver más arriba), staleness de Meilisearch (ver memoria de `/api/revalidate` del subscriber de Medusa solo llegaba a uno de
`search-inventory-staleness`, mismo síntoma de "el catálogo directo los dos pods — el otro seguía sirviendo datos viejos hasta que el
sí, la búsqueda no") o algo específico del pipeline de importación TTL expirara solo. Una edición puntual + revisar al toque tenía
en `commerce-backend`. ~50% de chance de pegarle al pod stale; una importación CSV (mucho
23. **En mobile, la visualización de imágenes de producto se corta y más lenta) le daba tiempo de sobra al TTL para expirar en ambos.
obliga a scrollear** (reportado por el usuario 2026-09-20, con **Fix:** se sacó el `next.revalidate`/`tags` del fetch — ya en
captura real de `shop.cruzcloud.net` en un producto con múltiples producción. Falta la prueba con una edición manual real (vía
fotos). Toda la clase de bug de overflow por falta de `min-w-0` ya `temp-admin`/`ari-shopping-tienda` en memoria) para confirmar que
se revisó en vivo en esta sesión y sigue presente en el síntoma original desapareció, no solo que la causa técnica tiene
`product-gallery.tsx` y `app/product/[slug]/page.tsx` — sospecha sentido.
sin confirmar: el modal "Zoom interactivo" 23. **En mobile (viewport real de 320px), la página se cortaba y
(`ProductGallery`/`DialogContent`, `min-h-[70vh]` + obligaba a scrollear horizontalmente — RESUELTO 2026-09-20.**
`overflow-hidden`) en viewport móvil real, donde la barra de Reportado por el usuario con captura real de `shop.cruzcloud.net`.
direcciones de Chrome/Safari hace que `100vh` mida más que el área **No era la galería de imágenes** (esa clase de bug con `min-w-0`
visible real. Pendiente reproducir con un dispositivo real o ya estaba corregida desde la sesión anterior, confirmado en vivo
emulación de `visualViewport` (Playwright con viewport móvil no que seguía sana). Dos causas reales encontradas por separado,
replica el comportamiento dinámico de la barra de direcciones). reproducidas con Playwright contra un viewport de 320×480 real:
- **Footer, bloque "Newsletter"** (`components/layout/footer.tsx`):
el párrafo de texto, sin `min-w-0`, le pedía al grid item su
ancho de una sola línea sin wrappear (~335px, medido en vivo)
en vez de dejarse achicar — forzaba la única columna del grid
(`sm:grid-cols-2 lg:grid-cols-4`, sin `grid-cols-1` propio pero
con auto-stacking correcto por debajo de `sm`) a 335px de ancho,
arrastrando la página entera. Mismo bug de fondo que el ya
documentado en la galería, en un grid en vez de un
`overflow-x-auto`.
- **Navbar, fila de "Departamentos"/"Todo"** (`components/layout/navbar.tsx`):
los 3 items de esa fila (botón de menú, "Departamentos", "Todo")
tenían los tres `shrink-0` — ninguno podía achicarse, así que si
los tres no entraban en 320px, desbordaban sí o sí (`min-w-0` no
aplica cuando el ítem no está pensado para achicarse). Fix:
ocultar el texto "Departamentos" en mobile (queda ícono + flecha,
con `aria-label` agregado para no perder accesibilidad), libera
espacio suficiente para que quepan los tres.
Verificado en vivo con Playwright (viewport 320×480 real, no
emulación de dispositivo con DPR) contra staging y producción
después del deploy: `document.documentElement.scrollWidth ===
clientWidth` en home y en página de producto, en ambos ambientes —
sin overflow.
@@ -25,7 +25,7 @@ spec:
runAsNonRoot: false runAsNonRoot: false
containers: containers:
- name: app - name: app
image: gitea.cruzcloud.net/devops/docs-portal:v1.0.269 image: gitea.cruzcloud.net/devops/docs-portal:v1.0.274
# El base saca TODAS las capabilities. Probado en vivo y # El base saca TODAS las capabilities. Probado en vivo y
# revertido: con drop: ALL (aunque se agregue NET_BIND_SERVICE # revertido: con drop: ALL (aunque se agregue NET_BIND_SERVICE
# de vuelta) el propio entrypoint de nginx:1.27-alpine falla al # de vuelta) el propio entrypoint de nginx:1.27-alpine falla al
@@ -26,11 +26,11 @@ spec:
runAsUser: 1001 runAsUser: 1001
containers: containers:
- name: app - name: app
image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.272 image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.275
env: env:
# Ver comentario en workloads/ecommerce/frontend/patches/deployment.yaml # Ver comentario en workloads/ecommerce/frontend/patches/deployment.yaml
- name: APP_VERSION - name: APP_VERSION
value: v1.0.272 value: v1.0.275
- name: HEADLESS_PROVIDER - name: HEADLESS_PROVIDER
value: medusa value: medusa
# Backend COMPARTIDO con Producción a propósito (decisión del # Backend COMPARTIDO con Producción a propósito (decisión del
@@ -179,7 +179,18 @@ export function ProductGallery({ images, name }: { images: string[]; name: strin
className="pointer-events-none absolute inset-0 bg-slate-50 transition-opacity duration-150 ease-out" className="pointer-events-none absolute inset-0 bg-slate-50 transition-opacity duration-150 ease-out"
style={{ style={{
opacity: hoverZoom && !hoverZoom.showPanel ? 1 : 0, opacity: hoverZoom && !hoverZoom.showPanel ? 1 : 0,
backgroundImage: `url(${selected})`, // Comillas dentro de url() a proposito: sin ellas, un
// espacio o parentesis literal en el nombre de archivo
// (ej. "descarga (4)-xxx.png", el patron por defecto de
// Chrome al descargar una imagen sin renombrarla -- asi
// quedan las subidas manuales, a diferencia de las
// importadas por CSV) rompe la sintaxis de url() sin
// comillas -- el navegador descarta el valor completo en
// silencio (backgroundImage queda "none"). Confirmado en
// vivo 2026-09-20: reportado por el usuario como "el zoom
// interactivo no se visualiza" solo en fotos subidas a
// mano por el admin, nunca en las de CSV.
backgroundImage: `url("${selected}")`,
backgroundRepeat: "no-repeat", backgroundRepeat: "no-repeat",
backgroundSize: `${HOVER_ZOOM_SCALE * 100}%`, backgroundSize: `${HOVER_ZOOM_SCALE * 100}%`,
backgroundPosition: hoverZoom ? `${hoverZoom.bgX}% ${hoverZoom.bgY}%` : "center", backgroundPosition: hoverZoom ? `${hoverZoom.bgX}% ${hoverZoom.bgY}%` : "center",
@@ -217,7 +228,9 @@ export function ProductGallery({ images, name }: { images: string[]; name: strin
top: hoverZoom.panelTop, top: hoverZoom.panelTop,
width: hoverZoom.panelSize, width: hoverZoom.panelSize,
height: hoverZoom.panelSize, height: hoverZoom.panelSize,
backgroundImage: `url(${selected})`, // Ver el comentario en el overlay in-place de arriba -- mismo
// fix, mismo motivo (comillas necesarias dentro de url()).
backgroundImage: `url("${selected}")`,
backgroundRepeat: "no-repeat", backgroundRepeat: "no-repeat",
backgroundSize: `${HOVER_ZOOM_SCALE * 100}%`, backgroundSize: `${HOVER_ZOOM_SCALE * 100}%`,
backgroundPosition: `${hoverZoom.bgX}% ${hoverZoom.bgY}%`, backgroundPosition: `${hoverZoom.bgX}% ${hoverZoom.bgY}%`,
@@ -25,14 +25,14 @@ spec:
runAsUser: 1001 runAsUser: 1001
containers: containers:
- name: app - name: app
image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.272 image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.275
env: env:
# La actualiza el mismo paso del CD (.gitea/workflows/build.yaml) # La actualiza el mismo paso del CD (.gitea/workflows/build.yaml)
# que bumpea el tag de la imagen -- el footer la lee # que bumpea el tag de la imagen -- el footer la lee
# (process.env.APP_VERSION) para mostrar la versión real # (process.env.APP_VERSION) para mostrar la versión real
# desplegada en vez de un "v4.1" fijo. # desplegada en vez de un "v4.1" fijo.
- name: APP_VERSION - name: APP_VERSION
value: v1.0.272 value: v1.0.275
- name: HEADLESS_PROVIDER - name: HEADLESS_PROVIDER
value: medusa value: medusa
- name: MEDUSA_BACKEND_URL - name: MEDUSA_BACKEND_URL