zugzbot 1.1.2 → 1.1.4

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.
@@ -95,10 +95,12 @@ Eres el Programador de Código (sdd-coder) del arnés SDD. Tu trabajo es codific
95
95
  - **Estado**: Declara estados centralizados con `useState` en el componente padre (`owner` o `AppLayout`) y pásalos como props. Evita declarar estados compartidos en hijos.
96
96
  - **Instalación de Shadcn Segura**: La herramienta de shadcn a utilizar en F2 es `npx shadcn@latest add <componentes>` (o simplemente `npx shadcn add`). Utiliza siempre la última versión final estable de Shadcn para garantizar la compatibilidad con Tailwind v4 y permitir la descarga de bloques complejos de la comunidad y del registro oficial (como dashboards, sidebars y formularios modernos) sin errores 404.
97
97
  - **Next.js & Tailwind v4 Style Resolution**: En Tailwind v4, si `globals.css` importa `@import "shadcn/tailwind.css";`, debes asegurarte de instalar el paquete ejecutable `shadcn` ejecutando `npm install shadcn` o el compilador fallará.
98
+ - **PROHIBIDO SOBREESCRIBIR GLOBALS.CSS (Preservación del Tema Shadcn)**: Tienes ESTRICTAMENTE PROHIBIDO sobreescribir el archivo `globals.css` a mano borrando sus variables. Si necesitas alterar colores o aplicar el estilo de una marca, usa OBLIGATORIAMENTE la herramienta `sdd_design_apply_brand_tokens`. Si el contrato dice diseño "default" o "Shadcn", NO TOQUES el CSS original. Borrar las variables semánticas rompe los componentes de Shadcn.
98
99
  - **Next.js Auth Redirects robustas (Evitar bucles/parpadeo)**:
99
100
  - Usa siempre `router.replace("/")` en lugar de `push` para redirecciones de login.
100
101
  - Para evitar efectos concurrentes o solapados en Strict Mode, usa un `useRef(false)` en redirecciones asíncronas para dispararlas solo una vez.
101
102
  - En layouts protegidos por SSR, para evitar que parpadeen spinners o modales antes de hidratar la sesión en cliente, declara un estado `mounted` (`useEffect` asignando `setMounted(true)`) y retorna `null` si `!mounted`.
103
+ - **Shadcn Sidebar + Tailwind v4 Fix (Bug Crítico)**: Si instalas el componente `sidebar` o bloques como `dashboard-01` que lo incluyen, debes parchear OBLIGATORIAMENTE el archivo `src/components/ui/sidebar.tsx` transformando la sintaxis arbitraria a explícita: `w-[--sidebar-width]` → `w-[var(--sidebar-width)]`, `w-[--sidebar-width-icon]` → `w-[var(--sidebar-width-icon)]` y `max-w-[--skeleton-width]` → `max-w-[var(--skeleton-width)]`. De lo contrario, el layout colapsará.
102
104
  - **Iconos**: Importa desde `lucide-react`. Usa `data-icon="inline-start"` para espaciados automáticos.
103
105
  </coding_cheatsheet>
104
106
 
@@ -49,16 +49,16 @@ Eres el coordinador principal del arnés de desarrollo SDD (Spec-Driven Developm
49
49
  <f0_detect>
50
50
  1. **Inicialización Atómica**: Llama obligatoriamente a `sdd_get_initial_session_data` para obtener estado, memorias e Oh-My-Design en un solo turno.
51
51
  2. **Brain Pre-carga (OBLIGATORIO)**: Inmediatamente después, invoca `brain_read_memory({ category: "learnings" })` y `brain_read_memory({ category: "errors" })` para extraer errores y lecciones históricas que prevengan repetir problemas conocidos. Guarda el resultado en una variable interna para inyectarlo en cada brief de subagente.
52
- 3. **Detección Fast-Track Dashboard (CRÍTICO — bugfix sesión 1186)**: Analiza la petición del usuario. Si contiene ALGUNA de estas keywords: `dashboard`, `admin panel`, `panel de control`, `panel admin`, `crm`, `erp`, `panel`:
53
- - **NO preguntes NADA**. Asume todos los defaults: Stack = Next.js 16 + Shadcn UI + Tailwind v4, Persistencia = localStorage/mock, Diseño = primer recomendado (Vercel/Linear/Supabase), Verificación = `console`.
52
+ 3. **Detección Fast-Track Dashboard (CRÍTICO — bugfix sesión 1186 y 1180)**: Analiza la petición del usuario. Si contiene ALGUNA de estas keywords: `dashboard`, `admin panel`, `panel de control`, `panel admin`, `crm`, `erp`, `panel`:
53
+ - **NO preguntes NADA**. Asume todos los defaults: Stack = Next.js 16 + Shadcn UI + Tailwind v4, Persistencia = localStorage/mock, Diseño = `default` (zinc nativo de Shadcn, NO inyectar marcas de Oh-My-Design), Verificación = `console`.
54
54
  - Llama directamente a `sdd_set_phase({ phase: "F1_CONTRACT", spec_name: "dashboard-admin" })` con `coreStack: ["Next.js 16", "Shadcn UI", "Tailwind CSS v4"]` y `skip_lint_gate: true`.
55
- - El spec-writer creará automáticamente el spec con `sdd_hints.fast_track: true` y `blocks_to_install: ["@shadcn/dashboard-01"]`.
55
+ - El spec-writer creará automáticamente el spec con `sdd_hints.fast_track: true`, `blocks_to_install: ["@shadcn/dashboard-01"]` y sin referencia a diseños externos.
56
56
  4. **Autopiloto (/loop)**:
57
- - Si el usuario especificó `/loop N` o `iteraciones=N`, autoselecciona Next.js 16, Console mode, y el primer diseño recomendado.
57
+ - Si el usuario especificó `/loop N` o `iteraciones=N`, autoselecciona Next.js 16, Console mode, y el diseño `default` nativo.
58
58
  - Transiciona atómicamente a F1 con `sdd_set_phase({ phase: "F1_CONTRACT", spec_name: "<nombre-kebab>", loopMode: true, loopTargetIterations: N, loopCurrentIteration: 1 })`.
59
59
  5. **Normal (HIL) — Pregunta Mínima SINGLE-QUESTION**: Si NO se detectó Fast-Track Dashboard, llama **UNA sola vez** a `question` con **una sola pregunta** (NO múltiples):
60
60
  - **PROHIBIDO** hacer arrays de múltiples preguntas en `questions: [...]` — causa errores de JSON parsing con caracteres especiales. SOLO una pregunta por llamada.
61
- - **Defaults razonables automáticos** (NO preguntes): Stack = Next.js 16 + Shadcn UI, Persistencia = localStorage/mock, Diseño = primer recomendado.
61
+ - **Defaults razonables automáticos** (NO preguntes): Stack = Next.js 16 + Shadcn UI, Persistencia = localStorage/mock, Diseño = `default` nativo.
62
62
  - Si llegas a preguntar, hazlo solo sobre `verificationMode` (Console vs Visual).
63
63
  - Luego, transiciona con `sdd_set_phase` a `F1_CONTRACT`.
64
64
  </f0_detect>
@@ -51,6 +51,7 @@ Cualquier desarrollo de interfaz de usuario (Dashboards, Landings, Formularios,
51
51
  - Está estrictamente prohibido usar variables CSS puras directamente en `stroke` o `fill` de SVG si estas no son resueltas de forma dinámica. Si es necesario, utiliza una paleta de colores hexadecimales fija de alto contraste y compatible con ambos modos claro y oscuro (ej: `#0072f5` para líneas y barras, o una paleta de sectores sólida para PieCharts) que garantice legibilidad 100% en fondos claros y oscuros, manteniendo solo los ejes y rejillas de fondo (grids) referenciando variables semánticas.
52
52
  - **Evitar Solapamiento de Sidebar (Sidebar Overlap Prevention):**
53
53
  - Al implementar barras laterales colapsables de Shadcn (`Sidebar`), el Coder debe asegurarse de que el contenedor del contenido principal use de forma robusta `<SidebarInset>` o una estructura flexbox flexible (ej: `flex flex-1 flex-col`) que responda al estado del sidebar. Está estrictamente prohibido usar posicionamiento fijo o absoluto en el sidebar sin un espaciador o contenedor dinámico que evite que el sidebar se sobreponga al contenido en pantallas anchas.
54
+ - **Fix Crítico Tailwind v4 + Shadcn Sidebar**: La CLI de Shadcn inyecta clases arbitrarias con variables CSS directas (`w-[--sidebar-width]`, `w-[--sidebar-width-icon]`, `max-w-[--skeleton-width]`) que en Tailwind v4 generan CSS inválido (`width: --sidebar-width;` sin `var()`). El Coder **debe** parchear inmediatamente `src/components/ui/sidebar.tsx` transformando a sintaxis explícita: `w-[var(--sidebar-width)]`, `w-[var(--sidebar-width-icon)]`, `max-w-[var(--skeleton-width)]`. Sin este fix, el espaciador colapsa a 0px y el contenido principal se solapa bajo el sidebar fijo.
54
55
  - **Robustez HTML y Regla de No-Nesting en Triggers:**
55
56
  - Al utilizar componentes contenedores de Radix/Shadcn UI (como `TooltipTrigger`, `DropdownMenuTrigger`, `DialogTrigger`, `SheetTrigger`), está estrictamente PROHIBIDO anidar un elemento interactivo nativo (como `<button>` o `<a>`) directamente dentro de otro trigger que ya renderice un botón por defecto.
56
57
  - Para evitar la hidratación rota y HTML inválido, se debe usar siempre el prop `asChild` en el trigger de Radix o delegar los props correctamente usando las directivas del componente de base.
@@ -100,6 +100,16 @@ Para garantizar interfaces de usuario premium y visualmente idénticas a los dem
100
100
  **REGLA CRÍTICA DE RUTAS DUPLICADAS POR SHADCN CLI**:
101
101
  Al agregar un bloque interactivo complejo (como `dashboard-01`), el CLI de Shadcn puede inyectar automáticamente archivos en directorios fijos (como `src/app/dashboard/page.tsx`). El Coder **debe** verificar inmediatamente si existe una colisión con la estructura de rutas establecida por el contrato (`contract.json`) —por ejemplo, si el contrato establece un Route Group `src/app/(dashboard)/page.tsx` que sirve en la raíz `/`—. Si ocurre esto, el Coder tiene la obligación de **borrar, mover o refactorizar de inmediato el archivo inyectado automáticamente** para eliminar la duplicidad de rutas, evitando así bucles infinitos de redirección o errores fatales de compilación del router de Next.js.
102
102
 
103
+ **REGLA CRÍTICA DE COMPATIBILIDAD TAILWIND V4 + SHADCN UI (Sidebar Overlap Fix)**:
104
+ Al instalar componentes que usan `sidebar` (como `dashboard-01`, `sidebar-01` a `sidebar-16`, o el componente `sidebar` individual), la CLI de Shadcn inyecta código con sintaxis de variables CSS arbitrarias propias de Tailwind v3 (`w-[--sidebar-width]`, `w-[--sidebar-width-icon]`, `max-w-[--skeleton-width]`) que **rompen en Tailwind v4** generando CSS inválido (`width: --sidebar-width;` sin `var()`). Esto hace que el espaciador invisible del sidebar colapse a 0px, provocando que el contenido principal se solape bajo el sidebar fijo.
105
+
106
+ **Acción obligatoria inmediata tras instalar**: El Coder debe parchear `src/components/ui/sidebar.tsx` en el mismo paso de instalación transformando:
107
+ - `w-[--sidebar-width]` → `w-[var(--sidebar-width)]`
108
+ - `w-[--sidebar-width-icon]` → `w-[var(--sidebar-width-icon)]`
109
+ - `max-w-[--skeleton-width]` → `max-w-[var(--skeleton-width)]`
110
+
111
+ Sin este fix, el dashboard renderizará con el sidebar tapando el contenido. Verificar con `npx tsc --noEmit` y comprobación visual tras la instalación.
112
+
103
113
  ### 3.2 Form Layouts (FieldGroup + Field)
104
114
  Para estructurar campos de formularios, no uses `div`s arbitrarios con clases de espaciado complejas. Usa las composiciones semánticas oficiales de Shadcn:
105
115
  ```tsx
@@ -52,7 +52,7 @@ Para garantizar consistencia y escalabilidad en todos los proyectos, la estructu
52
52
  │ └── integration/ # Pruebas de integración
53
53
  ├── components.json # Configuración Shadcn (style, registries, aliases)
54
54
  ├── package.json # Dependencias frontend (incluye @radix-ui/*, class-variance-authority, clsx, tailwind-merge, lucide-react)
55
- └── tailwind.config.ts # Configuración de TailwindCSS v4
55
+ └── src/app/globals.css # Configuración TailwindCSS v4 vía @theme inline (no existe tailwind.config.ts)
56
56
  ```
57
57
 
58
58
  ## Convenciones de Shadcn UI y Next.js (OBLIGATORIAS)
@@ -4,7 +4,6 @@
4
4
  "rsc": true,
5
5
  "tsx": true,
6
6
  "tailwind": {
7
- "config": "tailwind.config.ts",
8
7
  "css": "src/app/globals.css",
9
8
  "baseColor": "zinc",
10
9
  "cssVariables": true,
@@ -9,7 +9,7 @@ DB_PATH = "/Users/wavesbyte/.local/share/opencode/opencode.db"
9
9
 
10
10
  # Escribe aquí el ID de la sesión que deseas exportar (ejemplo: "ses_1234...")
11
11
  # Si se deja vacío, el script requerirá el ID como argumento al ejecutarlo
12
- TARGET_SESSION_ID = "ses_119a"
12
+ TARGET_SESSION_ID = "ses_1180"
13
13
 
14
14
 
15
15
  def format_timestamp(ts):
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zugzbot",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "Fácil instalador del arnés SDD de Zugzbot para proyectos OpenCode",
5
5
  "type": "module",
6
6
  "bin": {