@bacano/sdk 1.1.10 → 1.1.13

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.
@@ -13,7 +13,9 @@ autenticación, marketing o Content por fuera de `@bacano/sdk`.
13
13
 
14
14
  Antes de extraer el diseño, identificar:
15
15
 
16
- - Web informativa o tienda virtual.
16
+ - Web informativa, tienda virtual o sitio híbrido. Si permite una compra
17
+ completa, aplicar también los contratos de tienda a su superficie
18
+ transaccional.
17
19
  - Enlace al archivo, página, sección o frame de Figma.
18
20
  - Rutas que se implementarán y sus frames desktop/mobile.
19
21
  - Repositorio y cascarón Bacano que se reutilizarán.
@@ -74,11 +76,12 @@ pnpm exec bacano-figma-web validate-snapshot .bacano/designs/<proyecto>/manifest
74
76
 
75
77
  ## 4. Mapear a Bacano antes de programar
76
78
 
77
- Leer [references/bacano-mapping.md](references/bacano-mapping.md) y
78
- [references/content-workflow.md](references/content-workflow.md). Preparar una
79
- matriz ruta → frame → componente → fuente de datos → estado responsive y
80
- determinar si el trabajo comienza desde Figma, desde Bacano Content o desde
81
- ambas fuentes.
79
+ Leer [references/bacano-mapping.md](references/bacano-mapping.md),
80
+ [references/content-workflow.md](references/content-workflow.md) y
81
+ [references/implementation-quality.md](references/implementation-quality.md).
82
+ Preparar una matriz ruta → frame → componente → fuente de datos → Content →
83
+ responsive → preview → estado, y determinar si el trabajo comienza desde
84
+ Figma, desde Bacano Content o desde ambas fuentes.
82
85
 
83
86
  - Reutilizar el starter, tokens y componentes existentes.
84
87
  - Consumir Bacano y Content mediante `@bacano/sdk`.
@@ -93,9 +96,19 @@ Si Content todavía no existe, generar un blueprint de entrega y fixtures
93
96
  temporales fieles al contenido visible de Figma. Los fixtures deben usar el
94
97
  mismo view model que consumen los componentes y entrar por un único adaptador;
95
98
  nunca repartir datos de prueba dentro de la UI. Si Content ya existe, mapearlo
96
- sin sobrescribir estructuras o entradas. En esta versión la skill no crea ni
97
- modifica contenido en Bacano: esas acciones permanecen en el backoffice y
98
- requieren autorización independiente.
99
+ sin sobrescribir estructuras o entradas. Si el usuario pide materializar el
100
+ blueprint, leer la sección de automatización de
101
+ [references/content-workflow.md](references/content-workflow.md) y el contrato
102
+ `CONTENT_TYPE_MANAGEMENT.md` incluido en `@bacano/sdk`. Crear o modificar tipos,
103
+ componentes, grupos, listas y entradas únicamente mediante el acceso temporal
104
+ y los scopes oficiales. Inventariar esos recursos antes de crear otros y
105
+ preparar entradas en borrador por defecto; la media permanece en el
106
+ backoffice y publicar requiere permiso y aprobación explícitos.
107
+
108
+ Al proponer keys nuevas, resolver primero el idioma según
109
+ `CONTENT_TYPE_MANAGEMENT.md`: instrucción explícita, convención existente y
110
+ después idioma principal del website. No traducir ni renombrar contratos ya
111
+ utilizados por el storefront.
99
112
 
100
113
  Antes de modificar código, indicar brevemente qué rutas y componentes se
101
114
  implementarán y qué decisiones de diseño son inferidas.
@@ -110,6 +123,10 @@ Trabajar por página o conjunto pequeño de secciones:
110
123
  4. Integración Bacano real.
111
124
  5. Comparación visual y correcciones.
112
125
 
126
+ No dar una página por validada únicamente porque compila. Comparar estructura,
127
+ contenido, responsive e interacciones del corte antes de continuar y registrar
128
+ lo pendiente cuando la revisión visual quede a cargo del usuario.
129
+
113
130
  No añadir paquetes, fuentes, iconos o assets si el proyecto ya ofrece un
114
131
  equivalente. Descargar assets mediante la fuente Figma autorizada; no incrustar
115
132
  URLs temporales ni construir transformaciones de Storage manualmente.
@@ -7,9 +7,9 @@ negocio.
7
7
 
8
8
  Antes de programar, registrar por ruta:
9
9
 
10
- | Ruta | Frame | Componente | Fuente | Responsive | Estado |
11
- | --- | --- | --- | --- | --- | --- |
12
- | `/` | Home desktop/mobile | `Hero` | Content | 2 frames | pendiente |
10
+ | Ruta | Frame | Componente | Fuente | Content | Responsive | Preview | Estado |
11
+ | --- | --- | --- | --- | --- | --- | --- | --- |
12
+ | `/` | Home desktop/mobile | `Hero` | Content | `hero_inicio` | 2 frames | activa | pendiente |
13
13
 
14
14
  Fuentes posibles: Content, catálogo estático, live state, public config,
15
15
  checkout, auth u otra operación documentada del SDK.
@@ -19,12 +19,30 @@ Antes de crear campos o fixtures, asignar cada valor a una fuente:
19
19
  No duplicar en Content información que ya tiene una fuente funcional. Un valor
20
20
  visible en Figma no implica que sea editorial.
21
21
 
22
+ ## Modelar sin extremos
23
+
24
+ No convertir una página extensa en un único tipo gigante ni crear un componente
25
+ para cada bloque visual. Separar una sección cuando tenga ciclo editorial,
26
+ responsable, reutilización o repetición propios. Crear un componente compartido
27
+ solo cuando coincidan tanto la estructura como el significado y la abstracción
28
+ reduzca duplicación real.
29
+
30
+ - Usar grupos para organizar entradas relacionadas por dominio o página.
31
+ - Usar repetibles para pasos, integrantes, preguntas, tarjetas y otras
32
+ colecciones homogéneas.
33
+ - Mantener directamente en el tipo los campos de un bloque exclusivo y simple.
34
+ - Crear primero listas y componentes realmente compartidos; después los tipos
35
+ consumidores.
36
+ - No hacer depender la UI del shape crudo de Content: fixture y mapper real
37
+ deben converger en el mismo view model.
38
+
22
39
  ## 2. Elegir el punto de partida
23
40
 
24
41
  ### Figma primero
25
42
 
26
43
  1. Extraer el contenido público visible y sus assets autorizados.
27
- 2. Proponer tipos, keys, campos y entradas en `content-blueprint.json`.
44
+ 2. Resolver el idioma y proponer tipos, keys, campos y entradas en
45
+ `content-blueprint.json` siguiendo `CONTENT_TYPE_MANAGEMENT.md`.
28
46
  3. Crear fixtures locales que implementen el view model de la página.
29
47
  4. Implementar y validar el diseño contra esos fixtures.
30
48
  5. Entregar el blueprint al equipo de Content para crearlo en Bacano.
@@ -66,22 +84,22 @@ Estructura recomendada:
66
84
  "route": "/",
67
85
  "sections": [
68
86
  {
69
- "sectionKey": "home-hero",
87
+ "sectionKey": "hero-inicio",
70
88
  "figmaNodeId": "1:20",
71
89
  "component": "HomeHero",
72
90
  "ownership": "content",
73
- "contentTypeKey": "home_hero",
74
- "entryKey": "home-main-hero",
91
+ "contentTypeKey": "hero_inicio",
92
+ "entryKey": "hero-principal-inicio",
75
93
  "status": "missing",
76
94
  "fields": [
77
95
  {
78
- "key": "title",
96
+ "key": "titulo",
79
97
  "type": "text",
80
98
  "required": true,
81
99
  "sampleValue": "Compra para cada etapa"
82
100
  }
83
101
  ],
84
- "fixture": "fixtures/home-hero.json"
102
+ "fixture": "fixtures/hero-inicio.json"
85
103
  }
86
104
  ]
87
105
  }
@@ -92,7 +110,9 @@ Estructura recomendada:
92
110
  El blueprint es una propuesta y una evidencia de coordinación, no una orden de
93
111
  escritura. No incluir IDs internos innecesarios, secretos, datos personales ni
94
112
  respuestas crudas de GraphQL. Mantener keys estables y registrar cambios que
95
- rompan el contrato.
113
+ rompan el contrato. Las propiedades técnicas del formato del blueprint
114
+ permanecen en inglés; los valores que representan tipos, componentes, campos y
115
+ entradas definidos por la empresa siguen el idioma resuelto para el proyecto.
96
116
 
97
117
  ## 4. Fixtures temporales
98
118
 
@@ -129,10 +149,13 @@ Entregar una tabla legible con:
129
149
  - Estado y responsable.
130
150
  - Dependencias entre componentes, listas y entradas.
131
151
 
132
- El equipo de Content crea o ajusta la estructura desde Bacano. En esta versión
133
- la skill no ejecuta escrituras, importaciones ni cargas de media en Bacano. Si
134
- la creación real es necesaria para continuar, solicitar confirmación al usuario
135
- en vez de simular que ocurrió.
152
+ El equipo de Content puede crear o ajustar la estructura desde Bacano. Si el
153
+ usuario autoriza que el agente materialice el blueprint, usar exclusivamente
154
+ `@bacano/sdk/content-management` y el token temporal generado desde **Conectar
155
+ agente**. Confirmar la empresa y los scopes, inventariar primero, crear
156
+ componentes antes de sus consumidores y trabajar inicialmente en borrador. La
157
+ skill puede preparar entradas cuando el usuario conceda
158
+ `content_entries:manage`; no carga media ni publica sin el scope específico.
136
159
 
137
160
  ## 6. Cambio a Bacano real
138
161
 
@@ -149,10 +172,31 @@ depende de contenido temporal, reportar `❌ NO LISTO` con las rutas y secciones
149
172
  afectadas. Los fixtures pueden conservarse como datos de pruebas unitarias o
150
173
  visuales siempre que no entren en el bundle o loader de producción.
151
174
 
152
- ## 7. Automatización futura
153
-
154
- La creación automática debe pertenecer a una herramienta administrativa
155
- separada del SDK público del storefront. Requiere autenticación con alcance por
156
- empresa/website, previsualización de cambios, idempotencia, auditoría y
157
- confirmación antes de escribir. Nunca exponer esas credenciales en el navegador
158
- ni convertir el blueprint en una importación implícita.
175
+ ## 7. Automatización administrativa
176
+
177
+ La gestión de tipos pertenece al entrypoint separado
178
+ `@bacano/sdk/content-management`, no al cliente público del storefront. Antes de
179
+ escribir:
180
+
181
+ 1. Pedir al usuario que genere un acceso temporal de 15, 30 o 60 minutos.
182
+ 2. Guardarlo solo en el entorno local del proceso del agente.
183
+ 3. Ejecutar `getContext()`, comprobar sus `scopes`, y después `listTypes()`,
184
+ `listGroups()`, `listOptionLists()` y `getReferences()`.
185
+ 4. Mostrar el plan y esperar aprobación cuando altere estructuras existentes.
186
+ 5. Crear primero listas y componentes, luego tipos consumidores, y mantener las
187
+ estructuras nuevas en borrador hasta validarlas.
188
+ 6. Si se concedió `content_entries:manage`, inventariar entradas por tipo, key y
189
+ locale; crear las faltantes en borrador y actualizar únicamente con
190
+ `expectedUpdatedAt`.
191
+ 7. No fusionar por nombres, no usar HTML crudo y no relacionar URLs remotas. La
192
+ media debe existir en Bacano y pertenecer a la empresa autorizada.
193
+ 8. Para archivar o eliminar tipos, entradas, grupos o listas, inspeccionar
194
+ dependencias y confirmar nuevamente. Una actualización de lista debe enviar
195
+ todos los elementos que deben permanecer, incluidos sus IDs existentes.
196
+ 9. Publicar o modificar una entrada publicada solo con
197
+ `content_entries:publish` y una aprobación humana explícita.
198
+
199
+ Nunca exponer el token en el navegador, commit, blueprint, salida de consola o
200
+ chat. Nunca convertir el blueprint en una importación implícita ni usar GraphQL
201
+ directo. La carga de media permanece bajo gestión editorial en Bacano hasta que
202
+ exista el scope y endpoint administrativo oficial.
@@ -87,6 +87,9 @@ Estado de página: `pending`, `extracted`, `implemented` o `validated`.
87
87
 
88
88
  Cada página requiere `route`, `name`, `status` y al menos un frame desktop o
89
89
  mobile con `nodeId` o `url`. No guardar secretos ni respuestas MCP completas.
90
+ Antes de implementar, comprobar que las rutas no apuntan accidentalmente al
91
+ mismo frame o `nodeId`. Una reutilización intencional debe quedar registrada en
92
+ `assumptions`.
90
93
 
91
94
  ## Estrategia de consultas
92
95
 
@@ -0,0 +1,67 @@
1
+ # Calidad de implementación desde Figma
2
+
3
+ Aplicar estas reglas al construir la interfaz. Son criterios de resultado, no
4
+ una obligación de usar una librería concreta.
5
+
6
+ ## Responsive e inferencias
7
+
8
+ Si Figma no incluye un frame móvil, construir una adaptación mobile first y
9
+ registrarla como inferencia. Conservar jerarquía, contenido, orden semántico y
10
+ acciones principales; apilar columnas cuando corresponda y evitar overflow
11
+ horizontal. Verificar al menos móvil, tablet y escritorio.
12
+
13
+ No convertir automáticamente toda colección en carrusel. Usarlo únicamente
14
+ cuando mejore la exploración y asegurar scroll táctil, teclado, controles
15
+ accesibles, dimensiones estables y pausa durante la interacción. Respetar
16
+ `prefers-reduced-motion` cuando exista autoplay o movimiento.
17
+
18
+ ## Componentes e interacción
19
+
20
+ Inspeccionar dependencias y componentes del proyecto antes de añadir paquetes.
21
+ No imponer HeroUI, Embla, Motion, CSS Modules u otra librería; reutilizar el
22
+ sistema existente y pedir autorización antes de introducir una dependencia
23
+ visual relevante.
24
+
25
+ Todo control interactivo necesita estado de hover cuando aplique,
26
+ `focus-visible`, teclado, contraste y área táctil suficiente. Usar
27
+ `aria-current="page"` en la navegación activa y no comunicar estados solo con
28
+ color. Las animaciones no deben cambiar el layout final, dejar contenido útil
29
+ oculto sin JavaScript ni ejecutarse contra la preferencia de movimiento
30
+ reducido.
31
+
32
+ ## Perfil de exportación estática
33
+
34
+ Cuando el hosting y el proyecto estén definidos como export estático, comprobar
35
+ la configuración efectiva del framework. En Next.js suele incluir
36
+ `output: "export"`, `trailingSlash: true` y una estrategia de imágenes
37
+ compatible con exportación estática.
38
+
39
+ Materializar durante el build contenido, rutas, metadata, sitemap y JSON-LD.
40
+ Las rutas dinámicas editoriales deben enumerar todas las entradas publicadas y
41
+ fallar de forma explícita si el snapshot esperado está vacío o incompleto.
42
+
43
+ No introducir Route Handlers, API Routes, Server Actions, middleware, ISR,
44
+ `force-dynamic` ni secretos de servidor en un proyecto que debe producir solo
45
+ archivos estáticos. Esta prohibición no aplica automáticamente a un storefront
46
+ híbrido o SSR: primero clasificar su arquitectura.
47
+
48
+ Mantener un único bootstrap de configuración pública y un cliente Bacano por
49
+ worker o árbol. Reutilizar esa misma información para páginas, metadata,
50
+ sitemap, JSON-LD y provider; no consultar cada ruta por separado si existe un
51
+ snapshot oficial compartido.
52
+
53
+ ## Preview y rutas editoriales
54
+
55
+ Mantener una allowlist finita de patrones editoriales. Los índices pueden ser
56
+ explícitos y los slugs de detalle pueden derivarse de las entradas publicadas;
57
+ no aceptar una ruta arbitraria solo porque coincide con una cadena. Preview
58
+ reutiliza componentes y mappers de producción, permanece fuera del sitemap y
59
+ no habilita funciones transaccionales o marketing.
60
+
61
+ ## Diagnóstico antes de cambiar código
62
+
63
+ Un `ORIGIN_NOT_ALLOWED` o un `403` al resolver la configuración durante el
64
+ build suele indicar que el origen utilizado no está autorizado para el website.
65
+ Verificar dominio canónico, orígenes permitidos y ambiente antes de alterar el
66
+ cliente SDK. Una advertencia aislada sobre ausencia de caché del build no prueba
67
+ por sí sola que el storefront esté defectuoso.
@@ -2,6 +2,10 @@
2
2
 
3
3
  Validar por cortes para evitar corregir 70 secciones al final.
4
4
 
5
+ Para cada corte, distinguir `implementado`, `validado`, `pendiente de revisión
6
+ humana`, `no aplica` y `bloqueado`. Si el usuario conserva la validación visual,
7
+ no convertir su ausencia en una aprobación automática.
8
+
5
9
  ## Evidencia mínima por página
6
10
 
7
11
  - URL/ruta implementada.