@bacano/sdk 1.0.1 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +439 -18
  2. package/STOREFRONT_CLARITY.md +140 -0
  3. package/STOREFRONT_CONSTRUCTION.md +105 -0
  4. package/STOREFRONT_LEADS.md +130 -0
  5. package/STOREFRONT_LEGAL.md +66 -0
  6. package/STOREFRONT_MARKETING.md +291 -0
  7. package/STOREFRONT_PERFORMANCE.md +304 -0
  8. package/STOREFRONT_PREVIEW.md +499 -0
  9. package/STOREFRONT_PRODUCT_SPECIFICATIONS.md +127 -0
  10. package/STOREFRONT_VOLUME_PRICING.md +131 -0
  11. package/client.d.ts +8 -1
  12. package/errors.d.ts +9 -1
  13. package/graphql.cjs +266 -3
  14. package/graphql.d.ts +2 -2
  15. package/graphql.js +266 -3
  16. package/index.cjs +2035 -255
  17. package/index.d.ts +8 -6
  18. package/index.js +2035 -255
  19. package/marketing/attribution.d.ts +53 -0
  20. package/marketing/clarity.d.ts +3 -0
  21. package/marketing/domain.d.ts +1 -0
  22. package/marketing/ga4.d.ts +2 -0
  23. package/marketing/index.d.ts +5 -0
  24. package/marketing/runtime.d.ts +2 -0
  25. package/marketing/sanitize.d.ts +2 -0
  26. package/marketing/types.d.ts +111 -0
  27. package/media.d.ts +45 -2
  28. package/modules/auth.d.ts +3 -2
  29. package/modules/availability.d.ts +2 -2
  30. package/modules/cart-errors.d.ts +2 -0
  31. package/modules/cart-session.d.ts +2 -2
  32. package/modules/cart.d.ts +4 -3
  33. package/modules/catalog.d.ts +15 -3
  34. package/modules/content.d.ts +2 -2
  35. package/modules/marketing.d.ts +5 -0
  36. package/modules/orders.d.ts +2 -2
  37. package/modules/profile.d.ts +1 -1
  38. package/modules/static-catalog.d.ts +13 -0
  39. package/modules/website.d.ts +7 -1
  40. package/package.json +14 -3
  41. package/react/context-registry.d.ts +9 -0
  42. package/react/context.d.ts +1 -1
  43. package/react/hooks.d.ts +24 -2
  44. package/react/marketing-context.d.ts +3 -0
  45. package/react/marketing-provider.d.ts +10 -0
  46. package/react/preview/cache.d.ts +23 -0
  47. package/react/preview/context.d.ts +5 -0
  48. package/react/preview/navigation.d.ts +9 -0
  49. package/react/preview/provider.d.ts +3 -0
  50. package/react/preview/shell.d.ts +3 -0
  51. package/react/preview/toolbar.d.ts +3 -0
  52. package/react/preview/types.d.ts +60 -0
  53. package/react/preview.cjs +742 -0
  54. package/react/preview.d.ts +14 -0
  55. package/react/preview.js +730 -0
  56. package/react/website-gate.d.ts +22 -0
  57. package/react.cjs +3893 -1795
  58. package/react.d.ts +8 -4
  59. package/react.js +3891 -1789
  60. package/skills/bacano-web/SKILL.md +116 -0
  61. package/skills/bacano-web/agents/openai.yaml +4 -0
  62. package/skills/bacano-web/references/architecture-runtime.md +109 -0
  63. package/skills/bacano-web/references/common.md +92 -0
  64. package/skills/bacano-web/references/informational.md +39 -0
  65. package/skills/bacano-web/references/report.md +70 -0
  66. package/skills/bacano-web/references/storefront.md +116 -0
  67. package/skills/bacano-web/scripts/audit-http.mjs +284 -0
  68. package/skills/bacano-web/scripts/cli.mjs +222 -0
  69. package/skills/bacano-web/scripts/postinstall.mjs +8 -0
  70. package/transport/documents.d.ts +23 -18
  71. package/transport/graphql.d.ts +13 -1
  72. package/types.d.ts +338 -0
@@ -0,0 +1,116 @@
1
+ ---
2
+ name: bacano-web
3
+ description: Audita y prepara sitios construidos con @bacano/sdk antes de publicarlos o después de un despliegue. Usar cuando se solicite evaluar una web Bacano, revisar si está lista para producción, investigar errores página por página, validar SEO, rendimiento, seguridad, legal, medición, Content, autenticación o, en tiendas virtuales, catálogo, carrito, checkout, pagos y pedidos.
4
+ ---
5
+
6
+ # Bacano Web
7
+
8
+ Evaluar el sitio con evidencia del repositorio, del build y, cuando exista, del
9
+ dominio desplegado. No declarar el sitio listo basándose únicamente en una
10
+ revisión visual.
11
+
12
+ ## 1. Confirmar el tipo de sitio
13
+
14
+ Antes de auditar, confirmar uno de estos alcances:
15
+
16
+ - **Web informativa**: contenido, formularios y contacto, sin compra completa.
17
+ - **Tienda virtual**: catálogo vendible y flujo de carrito/checkout/pago.
18
+
19
+ Si el usuario no lo indicó expresamente, preguntar exactamente una pregunta
20
+ corta y esperar: **“¿Esta web será informativa o una tienda virtual?”**
21
+
22
+ No aplicar la lista transaccional a una web informativa. Si un sitio híbrido
23
+ permite comprar, clasificarlo como tienda virtual.
24
+
25
+ Después construir primero la matriz arquitectónica definida en
26
+ [references/architecture-runtime.md](references/architecture-runtime.md):
27
+ catálogo estático, estado dinámico de productos, configuración pública, vista
28
+ previa editorial, marketing/analítica y funciones transaccionales. Clasificar
29
+ cada capacidad como `ACTIVA`, `INACTIVA` o `BLOQUEADA` con evidencia del código,
30
+ build y configuración pública. Añadir debajo las capacidades específicas como
31
+ autenticación, formularios, GA4, Meta, Clarity, catálogo publicitario, cupones,
32
+ pagos y entregas.
33
+
34
+ Una capacidad inactiva no bloquea la salida y sus pruebas son `NO APLICA`, no
35
+ `NO VERIFICADO`. Una capacidad activa y visible debe probarse en proporción a
36
+ su riesgo.
37
+
38
+ ## 2. Leer los contratos aplicables
39
+
40
+ Leer siempre [references/common.md](references/common.md) y
41
+ [references/architecture-runtime.md](references/architecture-runtime.md).
42
+ Después leer solo:
43
+
44
+ - [references/informational.md](references/informational.md) para web informativa.
45
+ - [references/storefront.md](references/storefront.md) para tienda virtual.
46
+
47
+ Si `@bacano/sdk` está disponible, leer sus contratos canónicos aplicables antes
48
+ de proponer cambios. Como mínimo revisar `STOREFRONT_LEGAL.md`,
49
+ `STOREFRONT_MARKETING.md`, `STOREFRONT_PERFORMANCE.md` y
50
+ `STOREFRONT_PREVIEW.md`; añadir
51
+ `AUTHENTICATION.md`, `STOREFRONT_LEADS.md`, `STOREFRONT_CLARITY.md` y
52
+ otros contratos únicamente cuando esas capacidades existan. Leer
53
+ `STOREFRONT_CONSTRUCTION.md` cuando el website permita ocultarse temporalmente.
54
+
55
+ ## 3. Auditar sin alterar el sistema
56
+
57
+ Por defecto realizar una auditoría de solo lectura. No editar código, cambiar
58
+ configuración externa, publicar, crear cuentas, enviar formularios reales ni
59
+ ejecutar compras/pagos sin autorización explícita.
60
+
61
+ 1. Inspeccionar stack, scripts, rutas, variables públicas esperadas y versión
62
+ efectiva de `@bacano/sdk`.
63
+ 2. Registrar la matriz de capacidades y cuáles son críticas para el
64
+ lanzamiento actual.
65
+ 3. Identificar una sola fuente para Bacano, Content, legal, marketing y auth.
66
+ 4. Ejecutar typecheck, lint, pruebas y build usando los comandos del proyecto.
67
+ 5. Comparar router, salida del build y sitemap; ninguna ruta pública debe
68
+ omitirse silenciosamente.
69
+ 6. Inspeccionar HTML generado, metadata, JSON-LD, media y enlaces internos.
70
+ 7. Si existe un dominio o una aplicación ejecutable, auditar sus rutas reales,
71
+ la consola y un trace de red con nombres y conteos de operaciones GraphQL.
72
+ 8. Probar vistas representativas desktop y mobile.
73
+ 9. Retestar individualmente cada hallazgo antes de considerarlo real.
74
+
75
+ Para una comprobación HTTP inicial puede ejecutarse:
76
+
77
+ ```bash
78
+ node <skill-dir>/scripts/audit-http.mjs https://ejemplo.com --max 500 --preview /vista-previa/
79
+ ```
80
+
81
+ El script no reemplaza pruebas de navegador, accesibilidad, interacción ni
82
+ flujos autenticados.
83
+
84
+ Si esta skill se leyó directamente dentro de `node_modules` y aún no está
85
+ instalada en el proyecto, ejecutar `pnpm exec bacano-web install` antes de
86
+ continuar. Verificar después con `pnpm exec bacano-web check`.
87
+
88
+ ## 4. Evitar falsos positivos
89
+
90
+ - Limitar una auditoría masiva a dos navegadores concurrentes y espaciar las
91
+ rutas. Un `429` provocado por el auditor no es un defecto del storefront.
92
+ - Repetir después de la ventana de rate limit cualquier `429`, recurso
93
+ cross-origin o fallo transitorio.
94
+ - No reportar `net::ERR_ABORTED` aislado como error si corresponde a beacons
95
+ cancelados al cerrar o navegar la página.
96
+ - Distinguir “no verificado” de “falló”. Login, pago, correo y webhooks no se
97
+ consideran aprobados si no se ejecutó el flujo real.
98
+ - No recomendar comodines amplios en CSP para silenciar la consola.
99
+
100
+ ## 5. Entregar un cierre verificable
101
+
102
+ Usar [references/report.md](references/report.md). Cada control debe quedar como
103
+ `✅ APROBADO`, `⚠️ ADVERTENCIA`, `❌ FALLÓ`, `➖ NO APLICA` o
104
+ `🧪 NO VERIFICADO`, con evidencia concreta. Mantener siempre la palabra del
105
+ estado junto al emoji para que el informe siga siendo buscable y procesable.
106
+
107
+ Clasificar controles por su efecto en la salida:
108
+
109
+ 1. `P0 · Gate`: bloquea publicación si falla; si no se pudo verificar, el
110
+ dictamen queda incompleto.
111
+ 2. `P1 · Calidad`: requisito profesional que permite salir solo con riesgo
112
+ explícito y responsable.
113
+ 3. `P2 · Mejora`: evolución deseable que nunca cambia por sí sola el dictamen.
114
+
115
+ No decir “listo para producción” mientras exista un `❌ FALLÓ` P0 o una
116
+ capacidad esencial activa permanezca `🧪 NO VERIFICADO`.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Bacano Web"
3
+ short_description: "Audita sitios Bacano antes de producción"
4
+ default_prompt: "Usa $bacano-web para evaluar si este sitio Bacano está listo para producción."
@@ -0,0 +1,109 @@
1
+ # Arquitectura SDK y tráfico runtime
2
+
3
+ Usar este control en toda web construida con `@bacano/sdk`. Clasificar primero
4
+ estas seis capacidades, antes de evaluar si su implementación es correcta:
5
+
6
+ | Capacidad | Estado permitido |
7
+ | --- | --- |
8
+ | Catálogo estático | `ACTIVA`, `INACTIVA` o `BLOQUEADA` |
9
+ | Precio y disponibilidad dinámicos | `ACTIVA`, `INACTIVA` o `BLOQUEADA` |
10
+ | Configuración pública del website | `ACTIVA`, `INACTIVA` o `BLOQUEADA` |
11
+ | Vista previa editorial | `ACTIVA`, `INACTIVA` o `BLOQUEADA` |
12
+ | Marketing y analítica | `ACTIVA`, `INACTIVA` o `BLOQUEADA` |
13
+ | Funciones transaccionales | `ACTIVA`, `INACTIVA` o `BLOQUEADA` |
14
+
15
+ `INACTIVA` significa que la capacidad está apagada intencionalmente y no hace
16
+ parte del lanzamiento. `BLOQUEADA` significa que el sitio pretende usarla, pero
17
+ falta contrato, configuración o una dependencia necesaria. El resultado de una
18
+ prueba se informa aparte como aprobado, fallido o no verificado.
19
+
20
+ ## Static First
21
+
22
+ Contrastar siempre con `STOREFRONT_PERFORMANCE.md`.
23
+
24
+ - Inventariar qué datos nacen en build/servidor y cuáles cambian en runtime.
25
+ - Verificar que catálogo, Content, metadata, rutas, sitemap y JSON-LD se
26
+ materialicen estáticamente cuando corresponda.
27
+ - Inspeccionar el HTML exportado directamente. No aceptar una página que solo
28
+ obtiene contenido después de hidratar.
29
+ - Confirmar un único `BacanoProvider` y un único `BacanoClient` por árbol de
30
+ ejecución. No crear clientes por módulo, hook, ruta o vista previa.
31
+ - Si `public-config` se obtuvo en servidor o build, derivar el contexto con
32
+ `getWebsiteContextFromPublicConfig()` y entregarlo como `initialContext`.
33
+ - No resolver repetidamente el website ni descargar en el navegador productos
34
+ completos que ya están en el snapshot.
35
+ - Actualizar en runtime solo datos volátiles mediante el contrato oficial:
36
+ precio, disponibilidad y `maxPurchasableQuantity`.
37
+ - Agrupar IDs, eliminar duplicados y usar caché/debounce razonables. Respetar el
38
+ máximo documentado por solicitud y conservar el snapshot si falla el refresh.
39
+ - Filtros o paginación dinámicos pueden consultar estructura únicamente cuando
40
+ el diseño publicado lo requiere. Deben usar el SDK y no repetir la descarga
41
+ inicial sin una interacción que lo justifique.
42
+ - No aceptar GraphQL directo, endpoints internos, clientes paralelos ni reglas
43
+ locales que reconstruyan catálogo, inventario o precios.
44
+
45
+ ## Trace real del navegador
46
+
47
+ Cuando exista una aplicación ejecutable o un dominio, capturar la red en un
48
+ contexto limpio y registrar por fase:
49
+
50
+ 1. carga inicial directa;
51
+ 2. navegación interna;
52
+ 3. filtro, orden o paginación;
53
+ 4. apertura de un detalle representativo.
54
+
55
+ Para cada operación GraphQL registrar `operationName`, cantidad, fase,
56
+ iniciador, código HTTP y tipo de datos solicitado. Comparar payloads para
57
+ detectar la misma operación con las mismas variables. Una repetición sin nueva
58
+ interacción, invalidación o cambio de datos es un duplicado; una revalidación
59
+ documentada no lo es.
60
+
61
+ El informe debe indicar:
62
+
63
+ - número de instancias del cliente;
64
+ - cantidad y nombres de operaciones en la carga inicial;
65
+ - operaciones duplicadas y causa;
66
+ - datos provenientes del HTML/snapshot;
67
+ - datos actualizados en runtime;
68
+ - conclusión explícita sobre Static First.
69
+
70
+ Si no hay navegador disponible, marcar el trace `🧪 NO VERIFICADO`; no inferir
71
+ la ausencia de tráfico solo desde el código.
72
+
73
+ ## Vista previa editorial
74
+
75
+ Contrastar siempre con `STOREFRONT_PREVIEW.md`. Si está activa, validar:
76
+
77
+ - una única ruta pública, preferiblemente `/vista-previa/`;
78
+ - `BacanoPreviewShell` desde `@bacano/sdk/react/preview`;
79
+ - el mismo provider y cliente global del storefront;
80
+ - una allowlist finita de rutas editoriales;
81
+ - exclusión de checkout, pagos, cuenta, pedidos y demás rutas transaccionales;
82
+ - los mismos componentes y mappers usados en producción;
83
+ - `noindex, nofollow` y ausencia total del sitemap;
84
+ - carrito, popups, chat y elementos comerciales globales ocultos;
85
+ - ausencia de scripts y requests efectivos de GA4, Meta, Clarity u otros
86
+ proveedores al cargar directamente preview;
87
+ - cero eventos de marketing durante navegación, refresh y errores de preview;
88
+ - estados SDK `idle`, `loading`, `ready` y `error`;
89
+ - resultados visuales `missing` y `unsupported` definidos por el storefront;
90
+ - reintento, refresh forzado, caché y navegación interna;
91
+ - contenido publicado únicamente, mientras el SDK no soporte borradores.
92
+
93
+ Activar preview no puede volver dinámica toda la web pública.
94
+
95
+ ## Verificaciones automatizables
96
+
97
+ Automatizar cuando sea razonable:
98
+
99
+ - HTML estático con contenido y enlaces reales;
100
+ - conteo de providers/clientes mediante pruebas de integración;
101
+ - inventario de requests GraphQL sin duplicados;
102
+ - batching, caché y error del estado vivo;
103
+ - `noindex, nofollow` y exclusión del sitemap;
104
+ - ausencia de marketing en preview;
105
+ - allowlist y bloqueo de rutas transaccionales;
106
+ - estados, refresh y caché de preview.
107
+
108
+ No reemplazar un contrato faltante con GraphQL o API directa. Registrarlo como
109
+ brecha del SDK, con evidencia y prueba de aceptación propuesta.
@@ -0,0 +1,92 @@
1
+ # Controles comunes
2
+
3
+ Aplicar `P0` solo a capacidades publicadas o comprometidas para el lanzamiento.
4
+ Usar `P1` para calidad profesional y `P2` para evolución. No convertir una
5
+ función apagada en un bloqueo artificial.
6
+
7
+ ## Repositorio y arquitectura
8
+
9
+ - Confirmar rama, estado de Git, lockfile y versión instalada del SDK.
10
+ - Identificar framework, modo estático/híbrido/SSR, hosting y dominio canónico.
11
+ - Verificar un único cliente/provider de Bacano y ausencia de GraphQL directo.
12
+ - Si el sitio admite modo construcción, verificar `BacanoWebsiteGate` por fuera
13
+ de auth y marketing, fallback estático `<noscript>`, actualización en runtime
14
+ y vista previa temporal.
15
+ - Confirmar que fallos de Content, marketing o servicios externos degradan sin
16
+ vaciar la página ni bloquear navegación.
17
+ - Ejecutar los controles definidos por el proyecto: instalación reproducible,
18
+ typecheck, lint, pruebas, E2E disponibles y build de producción.
19
+
20
+ ## Rutas y contenido
21
+
22
+ - Inventariar rutas desde sitemap, export estático y router; no depender de una
23
+ muestra manual arbitraria.
24
+ - Comparar rutas declaradas, páginas generadas y URLs del sitemap. Explicar
25
+ cualquier diferencia y fallar si el build omite contenido público de forma
26
+ silenciosa.
27
+ - Verificar HTTP, errores de consola, excepciones, recursos fallidos, enlaces
28
+ internos, 404, redirecciones y canonical.
29
+ - Comprobar que preview, callbacks, cuenta, checkout y respuestas de pago no se
30
+ indexen cuando corresponda.
31
+ - Validar estados vacío, loading, error y ausencia de Content opcional.
32
+
33
+ ## SEO y compartición
34
+
35
+ - Título, descripción, canonical, robots, Open Graph y Twitter por ruta.
36
+ - `robots.txt`, sitemap con URLs canónicas y ausencia de rutas privadas.
37
+ - Jerarquía de encabezados, idioma, texto alternativo, enlaces internos y
38
+ JSON-LD coherente con el contenido visible.
39
+ - Confirmar 404 real, canonical único, ausencia de slugs/URLs duplicadas y
40
+ redirección consistente entre `www`, dominio raíz y HTTP/HTTPS.
41
+ - Usar `hreflang` solo cuando existan versiones regionales o de idioma reales.
42
+ - Favicon, iconos, manifest y vista previa al compartir.
43
+
44
+ ## Rendimiento y media
45
+
46
+ - HTML inicial útil; no publicar únicamente skeletons.
47
+ - Imágenes con dimensiones, `srcset`, `sizes`, formatos optimizados y lazy load
48
+ bajo el pliegue. No construir transformaciones de Storage manualmente.
49
+ - Revisar desktop y mobile, DPR 1/2, CLS, LCP, fuentes y JavaScript inicial.
50
+ Tratar una medición sintética aislada como diagnóstico, no como verdad de
51
+ campo; repetir y distinguir regresión sostenida de ruido.
52
+ - Confirmar caché y CORS/CORP de media pública sin proxies locales.
53
+
54
+ ## Accesibilidad y experiencia
55
+
56
+ - Navegación por teclado, foco visible, landmarks, labels, contraste y zoom.
57
+ - Formularios con errores específicos, estados de envío y prevención de doble
58
+ envío. No usar solo color para comunicar estado.
59
+ - Probar anchos móviles, tablet y escritorio sin scroll interno accidental.
60
+
61
+ ## Legal y privacidad
62
+
63
+ - Consumir términos, envíos, cambios/devoluciones, privacidad y cookies desde
64
+ `publicConfig.legal`, manejando documentos nulos.
65
+ - No duplicar documentos legales en Content o en constantes del storefront.
66
+ - Mostrar el aviso informativo solo si Bacano lo activa y no presentarlo como
67
+ gestor de consentimiento.
68
+ - No exponer PII, tokens, secretos ni identificadores internos en URL, HTML,
69
+ logs, eventos o almacenamiento inseguro.
70
+ - Detectar placeholders visibles, texto de ejemplo y datos legales incompletos.
71
+ Un documento publicado con marcadores como `[RAZÓN SOCIAL]` es un `P0`.
72
+
73
+ ## Seguridad y terceros
74
+
75
+ - HTTPS, HSTS cuando aplique, `X-Content-Type-Options`, `Referrer-Policy`,
76
+ `Permissions-Policy` y CSP efectiva.
77
+ - Construir CSP solo con proveedores realmente activos. Revisar la matriz
78
+ canónica de `STOREFRONT_MARKETING.md`.
79
+ - No usar `unsafe-eval`, comodines arbitrarios ni secretos públicos.
80
+ - Confirmar que CSP no bloquee Clerk, pagos, GA4, Meta o Clarity habilitados.
81
+ - Confirmar que la pantalla de construcción no se presente como seguridad ni
82
+ permita que contenido privado forme parte del export estático.
83
+
84
+ ## Operación
85
+
86
+ - Validar dominio canónico, redirects, DNS, SSL, variables de producción y
87
+ rollback.
88
+ - Confirmar monitoreo de errores y logs sin datos personales.
89
+ - Registrar fecha, ambiente, versión/commit y qué pruebas requieren cuentas o
90
+ acciones externas para completarse.
91
+ - Verificar que el equipo conoce qué cambios requieren rebuild/despliegue y que
92
+ existe un mecanismo reproducible para ejecutarlo y revertirlo.
@@ -0,0 +1,39 @@
1
+ # Checklist de web informativa
2
+
3
+ Aplicar además de los controles comunes.
4
+
5
+ ## Contenido y navegación
6
+
7
+ - Home, páginas institucionales, servicios, blog, contacto y legales cargan
8
+ contenido real y conservan rutas estables.
9
+ - Menú, footer, breadcrumbs y enlaces de Content no apuntan a borradores o 404.
10
+ - Preview usa `@bacano/sdk/react/preview`, muestra solo contenido publicado,
11
+ permanece `noindex` y no dispara marketing.
12
+
13
+ ## Formularios y contacto
14
+
15
+ - Distinguir formularios informativos/PQRS de capturas comerciales.
16
+ - Newsletter, cupón o interés comercial usan
17
+ `client.marketing.captureLead()` y el texto vigente de autorización.
18
+ - Formularios generales tienen destino, antispam/rate limit, idempotencia y
19
+ mensaje de recepción sin promesas falsas.
20
+ - WhatsApp, teléfono y email emiten `contact` con ubicación canónica cuando
21
+ marketing está activo.
22
+
23
+ ## Medición
24
+
25
+ - Una sola fuente de `page_view` para navegación inicial y SPA.
26
+ - Medir contacto, formularios y navegación relevante sin inventar ecommerce.
27
+ - GA4, Meta y Clarity cargan solo en dominio canónico y nunca en preview/local.
28
+ - No exigir catálogo, carrito, checkout, métodos de entrega, pagos ni eventos
29
+ ecommerce a esta clase de sitio.
30
+
31
+ ## Cierre mínimo
32
+
33
+ - Probar cada formulario sin crear registros duplicados.
34
+ - Verificar entrega o persistencia real cuando el formulario sea esencial.
35
+ - Comprobar páginas principales y legales en desktop/mobile.
36
+ - Validar indexación, performance y consola en todas las rutas publicadas.
37
+ - Marcar autenticación, leads o medición como `➖ NO APLICA` cuando estén
38
+ realmente apagados; si están visibles, aplicar sus contratos y pruebas de
39
+ cierre.
@@ -0,0 +1,70 @@
1
+ # Formato del informe
2
+
3
+ ## Contexto
4
+
5
+ - Tipo: web informativa o tienda virtual.
6
+ - Repositorio, rama y commit.
7
+ - Ambiente y dominio.
8
+ - Framework, hosting y versión efectiva de `@bacano/sdk`.
9
+ - Fecha de revisión.
10
+
11
+ ## Alcance detectado
12
+
13
+ Antes del dictamen incluir una tabla corta:
14
+
15
+ | Capacidad | Estado | ¿Bloquea este lanzamiento? | Evidencia |
16
+ | --- | --- | --- | --- |
17
+ | Catálogo estático, estado vivo, public-config, preview, marketing, transacciones | ACTIVA/INACTIVA/BLOQUEADA | Sí/No | configuración, código o prueba |
18
+
19
+ No exigir pruebas a una capacidad `INACTIVA`. Una capacidad `BLOQUEADA` debe
20
+ explicar la dependencia ausente y su impacto.
21
+
22
+ ## Resultado ejecutivo
23
+
24
+ Indicar una sola conclusión:
25
+
26
+ - `🟢 LISTO`: sin fallos P0 y con flujos esenciales verificados.
27
+ - `🟡 LISTO CON ADVERTENCIAS`: sin bloqueos P0, con riesgos P1 aceptables.
28
+ - `🔴 NO LISTO`: existe al menos un `❌ FALLÓ` P0 confirmado.
29
+ - `🟠 INCOMPLETO`: falta verificar al menos un P0 activo y no hay evidencia
30
+ suficiente para declararlo fallido.
31
+
32
+ No usar `NO LISTO` únicamente porque una función apagada no se probó. Si
33
+ coexisten un fallo P0 y pruebas pendientes, prevalece `🔴 NO LISTO`.
34
+
35
+ ## Evidencia
36
+
37
+ | Prioridad | Estado | Área | Control | Evidencia | Acción |
38
+ | --------- | ------------------------------------------------------------------------- | ---- | ------- | ------------------------ | ------ |
39
+ | P0/P1/P2 | ✅ APROBADO / ⚠️ ADVERTENCIA / ❌ FALLÓ / ➖ NO APLICA / 🧪 NO VERIFICADO | ... | ... | comando, URL o resultado | ... |
40
+
41
+ Usar siempre emoji y palabra. Los emojis solos no son suficientemente claros
42
+ ni procesables.
43
+
44
+ ## Pruebas ejecutadas
45
+
46
+ Listar comandos y sus resultados, rutas auditadas, navegadores/viewports y
47
+ flujos externos realmente ejecutados. Separar pruebas locales de producción.
48
+
49
+ ## Arquitectura SDK y tráfico runtime
50
+
51
+ Incluir siempre esta sección:
52
+
53
+ | Control | Resultado | Evidencia |
54
+ | --- | --- | --- |
55
+ | Instancias de `BacanoClient` y `BacanoProvider` | cantidad | archivos o prueba |
56
+ | Operaciones GraphQL en carga inicial | cantidad y nombres | trace/HAR |
57
+ | Operaciones duplicadas | cantidad, nombres y causa | variables y fase |
58
+ | Datos estáticos | inventario | HTML, snapshot o build |
59
+ | Datos actualizados en runtime | inventario | requests observados |
60
+ | Static First | cumple/no cumple/no verificado | conclusión |
61
+ | Preview | cumple/no cumple/no aplica/no verificado | conclusión |
62
+
63
+ Para cada incumplimiento indicar severidad, efecto y recomendación. No afirmar
64
+ que no hubo requests cuando no se capturó un trace real.
65
+
66
+ ## Riesgos y próximos pasos
67
+
68
+ Ordenar por severidad. Cada hallazgo debe incluir alcance, causa confirmada o
69
+ hipótesis explícita, corrección propuesta y prueba de cierre. No mezclar
70
+ mejoras opcionales con bloqueos de salida.
@@ -0,0 +1,116 @@
1
+ # Checklist de tienda virtual
2
+
3
+ Aplicar además de los controles comunes.
4
+
5
+ ## P0 · Publicación y cobertura del catálogo
6
+
7
+ - Generar rutas, HTML, metadata, sitemap y JSON-LD desde un único
8
+ `getStaticCatalogBootstrap()`; no consultar un producto por ruta durante el
9
+ mismo build.
10
+ - Comparar `bootstrap.total`, productos únicos del snapshot, rutas de producto
11
+ generadas, URLs de producto del sitemap y páginas del export. Toda diferencia
12
+ debe ser intencional y explicable; el límite configurado no puede truncar el
13
+ catálogo silenciosamente.
14
+ - Hacer fallar el build de producción si el snapshot está vacío, incompleto o
15
+ no corresponde al website esperado. Los placeholders solo sirven en local.
16
+ - Usar `/producto/{slug}` como ruta canónica cuando el proyecto adopte ese
17
+ contrato; la variante publicitaria usa `?variant={product_variant_id}` sin
18
+ alterar canonical.
19
+ - Precio, SKU, stock, variante seleccionada, JSON-LD, carrito, WhatsApp y
20
+ eventos deben referirse a la misma variante.
21
+ - El HTML inicial debe contener producto, precio y enlaces reales sin depender
22
+ de JavaScript. Después de hidratar, refrescar únicamente estado volátil por
23
+ lotes con `getProductLiveState()` y respetar `maxPurchasableQuantity`.
24
+ - Si el refresh vivo falla, conservar el snapshot sin vaciar ni bloquear la
25
+ página. Al mismo tiempo, checkout debe revalidar autoritativamente precio y
26
+ stock ante concurrencia.
27
+ - Verificar el comportamiento cuando una variante queda agotada, cambia de
28
+ precio o limita cantidad entre build y compra.
29
+ - Definir cómo se dispara un rebuild al publicar, retirar, renombrar o cambiar
30
+ imágenes/descripción. El refresh vivo no reemplaza esa actualización
31
+ editorial del snapshot.
32
+ - Recomendaciones y relacionados no bloquean el contenido principal.
33
+
34
+ ## P0 · SEO comercial
35
+
36
+ - Cada producto público tiene título, descripción, canonical, Open Graph,
37
+ imagen compartible y JSON-LD `Product` coherente con la variante visible.
38
+ - Sitemap contiene cada slug canónico una sola vez y excluye UUID, query de
39
+ variante, preview, checkout, cuenta, pedido y respuesta de pago.
40
+ - La ruta elegida desde feed, anuncio, tarjeta, relacionado y carrito resuelve
41
+ el mismo producto; URLs antiguas importantes redirigen o se documentan.
42
+ - Producto retirado responde 404/410 o se reconstruye dentro del SLA definido;
43
+ nunca queda comprable solo por existir en un export viejo.
44
+
45
+ ## Carrito y checkout
46
+
47
+ - Carrito invitado persiste y sincroniza sin duplicar líneas.
48
+ - Probar alta, baja, cambios de cantidad, límites de stock, cupón, envío gratis,
49
+ impuestos, moneda y redondeo.
50
+ - Probar solo los modos activos entre COUNTER, PICKUP y SHIPPING; propia y
51
+ transportadora cuando apliquen, incluyendo contraentrega y pagos parciales.
52
+ - Verificar errores accionables, idempotencia y doble clic/reintento.
53
+ - Nunca inventar reglas de ventas o estados en el storefront.
54
+
55
+ ## Pagos y pedidos
56
+
57
+ - Ejecutar al menos un happy path real o sandbox por cada método crítico
58
+ publicado. Probar pago inmediato, transferencia, Wompi y contraentrega solo
59
+ si están activos; los estados alternos de cada proveedor quedan en su matriz
60
+ de riesgo.
61
+ - La página de respuesta no emite `purchase`; Bacano lo hace desde hechos
62
+ autoritativos. Repetir webhook/conciliación no duplica conversiones.
63
+ - Pedido, pago, entrega y desembolso permanecen conceptos separados.
64
+ - Probar consulta pública segura y cuenta autenticada sin filtrar pedidos de
65
+ otra persona, website o canal.
66
+
67
+ ## Autenticación
68
+
69
+ - Clerk posee registro, inicio de sesión, recuperación, verificación y sesión.
70
+ - Una aplicación Clerk por website; solo publishable key en navegador.
71
+ - Un `BacanoProvider` recibe `getAccessToken`; no se captura ni guarda el token.
72
+ - Si las cuentas están activas o se anuncian, probar registro/inicio y el flujo
73
+ principal autenticado; recuperación, verificación, perfil, direcciones y
74
+ pedidos se clasifican según lo publicado. Clerk no rompe checkout invitado.
75
+ - Si las cuentas están apagadas, todas estas pruebas son `➖ NO APLICA`.
76
+
77
+ ## Marketing y catálogos publicitarios
78
+
79
+ - Instrumentar únicamente con `useMarketing().track()` después del éxito.
80
+ - `product_variant_id` es `itemId`; `order_id` es `transaction_id`.
81
+ - Auditar `view_item_list`, `select_item`, `view_item`, carrito, checkout y
82
+ contactos; conversiones autoritativas nunca salen del navegador.
83
+ - Primera y última fuente no directa sobreviven navegación interna y quedan
84
+ congeladas en el pedido.
85
+ - Feeds Meta/Google usan la misma variante, ruta, precio y disponibilidad que
86
+ la landing. Probar URLs del feed y productos omitidos.
87
+ - GA4, Meta, Clarity, leads y feeds se auditan únicamente si están activos.
88
+ Cada proveedor activo debe demostrar al menos una recepción real antes de
89
+ declarar esa capacidad lista, sin convertir su caída en bloqueo de compra.
90
+
91
+ ## P1 · Calidad profesional
92
+
93
+ - Media responsive con dimensiones, `srcset`, `sizes`, carga prioritaria solo
94
+ para LCP y lazy loading bajo el pliegue; sin transformaciones manuales.
95
+ - Catálogo, filtros y carrito conservan contenido útil durante errores
96
+ transitorios y no producen saltos de layout evitables.
97
+ - JSON-LD, feed publicitario y estado vivo no contradicen precio, moneda,
98
+ disponibilidad ni variante mostrados.
99
+ - La generación es reproducible con lockfile y deja evidencia de conteos,
100
+ snapshot, duración y artefacto.
101
+
102
+ ## P2 · Evolución
103
+
104
+ - Datos de campo de Core Web Vitals, pruebas sintéticas periódicas, monitoreo de
105
+ enlaces rotos y alertas de divergencia entre feed, sitemap y catálogo.
106
+ - Matrices exhaustivas de estados no críticos, navegadores adicionales y
107
+ automatización de rebuild según el hosting.
108
+
109
+ ## Cierre transaccional
110
+
111
+ - Ejecutar al menos una compra real o sandbox por método crítico activo.
112
+ - Confirmar pedido en Bacano, estado económico, inventario, envío y correo.
113
+ - Confirmar GA4/Meta del embudo y conversión sin duplicados.
114
+ - Si un flujo activo esencial no se ejecutó, marcarlo `🧪 NO VERIFICADO`, no
115
+ `APROBADO`; el dictamen es `🟠 INCOMPLETO` salvo que exista además un fallo
116
+ probado.