Skip to content

Commit d694e0e

Browse files
committed
Protocolo de trabajo en remoto v3
Merge normal, nunca squash. Solo documentacion: el workflow build-apk lleva paths-ignore '**/*.md', asi que no dispara pipeline ni OTA.
2 parents 84553f2 + 960473c commit d694e0e

1 file changed

Lines changed: 176 additions & 35 deletions

File tree

Lines changed: 176 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,196 @@
1-
# Protocolo 15 días — Julio en portátil
1+
# Folvy — PROTOCOLO DE TRABAJO EN REMOTO (15 días sin el PC principal)
22

3-
**Creado:** 17/08/2026. **Vigente:** mientras Julio esté fuera de su PC habitual.
3+
> **17/08/2026 · v3.** Julio trabaja desde un portátil ~15 días. Objetivo: **que no se pierda nada y
4+
> que no se duplique nada.** Este documento manda mientras dure.
5+
>
6+
> ⚠️ **v1** partía de una premisa falsa —que Code corría en el PC de Julio— y se preocupaba del
7+
> riesgo equivocado. Corregida el 17/08 con la comprobación de entorno.
8+
> ⚠️ **v2** llevaba una ventana de despliegue inventada (11:00). Corregida en la v3 con datos.
49
5-
> **Nota de procedencia.** Este fichero **no existía en el repo** cuando se pidió
6-
> actualizarlo: vivía como documento de claude.ai, que Claude Code no puede leer.
7-
> Se crea aquí con lo único que consta verificado — la ventana de despliegue y su
8-
> evidencia. Si el original tenía más apartados, faltan y hay que traerlos.
10+
---
11+
12+
## 0. Dónde corre Code — el dato que lo cambia todo
13+
14+
**Code NO corre en el PC ni en el portátil de Julio.** Corre en un **contenedor Linux efímero en la
15+
nube**, que **clona el repo de cero al arrancar cada sesión** y **se recicla tras un rato de
16+
inactividad**.
17+
18+
1. **Dónde esté Julio da igual.** El repo de trabajo es **GitHub**.
19+
2. **El riesgo real no es el viaje: es el contenedor.** Ese disco desaparece y no vuelve. **Todo se
20+
empuja a `origin` en cuanto existe.** Nada se acumula en local "para el final".
21+
3. **`node_modules` no sobrevive.** Cada sesión nueva necesita `npm install` antes de `tsc -b` o
22+
`vite build`. Está **permitido** y no hay que consultarlo.
23+
24+
---
25+
26+
## 1. El puente: el repo es lo único que Code ve
27+
28+
**Los documentos del proyecto de claude.ai son INVISIBLES para Code.** Entre el 16 y el 17/08 esto
29+
bloqueó el trabajo **cinco veces**.
30+
31+
> **Regla, endurecida el 17/08: ningún encargo declara «contexto obligatorio» un documento de
32+
> claude.ai.** O el contenido va dentro del encargo, o no se cita. Si un documento debe persistir,
33+
> se le pasa el contenido y **Code lo commitea él mismo en `claude/` del repo**.
34+
35+
| Artefacto | Canónico | Copia |
36+
|---|---|---|
37+
| Decisiones, diseños, encargos, hallazgos | **Proyecto claude.ai** | `claude/` del repo, **con fecha en cabecera** |
38+
| Código, migraciones, tipos | **Repo** ||
39+
| Verdad viva del sistema | `folvy_mapa_sistema.md` (**repo**) | resumen en el proyecto al cerrar |
40+
41+
**Si difieren, manda el proyecto para decisiones y el repo para código.** Sin fecha no se sabe cuál
42+
es la vieja — eso costó ocho horas el 15/08 con la paleta archivada.
943

1044
---
1145

12-
## 1. Ventana de despliegue
46+
## 2. Ritual de arranque (cada sesión, sin excepción)
1347

14-
**Se despliega hasta las 12:15. Prohibido entre las 12:15 y las 23:45.**
48+
1. Leer `claude/folvy_arranque_prompt.md` y `claude/folvy_indice.md`.
49+
2. Leer el registro de frentes (§4).
50+
3. **No dar nada por vigente de memoria.** Comprobar contra el proyecto, el repo o la BBDD.
51+
4. Si hay que compilar: `npm install` primero.
1552

16-
Se aplica a: merges a `main` (disparan `build-apk` → bundle OTA a las tablets),
17-
despliegues de Edge Functions, y migraciones.
53+
## 3. Ritual de cierre (obligatorio aunque la sesión dure diez minutos)
1854

19-
### Por qué esas horas, y por qué NO son las 11:00
55+
1. **Qué se hizo**, con su verificación — o declarando explícitamente lo NO verificado.
56+
2. **Qué queda abierto**, y quién lo desbloquea.
57+
3. **Qué se decidió y por qué** — para no re-litigarlo.
58+
4. **Deudas nuevas**, cada una con su **disparador**.
2059

21-
La ventana anterior decía «nunca entre las 11:00 y las 23:45». **Ese 11:00 era una
22-
estimación que nadie comprobó.** El dato real de 30 días de Foodint lo desmiente:
60+
---
61+
62+
## 4. Registro de frentes — estado al cierre del 17/08
63+
64+
### Cerrado y verificado
65+
66+
- Módulo HubRise, backend completo (F1 + 2.0–2.7), certificado en laboratorio y producción.
67+
- Pre-audit de HubRise **cerrado por Antoine el 05/08**. No se le debe respuesta. Tope: **5 locales vivos**; el nº 6 dispara auditoría.
68+
- **PR #81 mergeada a `main`** el 17/08 (`14a9f73`, merge normal). Pipeline verde (run 141).
69+
- **Carabanchel conectado a HubRise** el 17/08 a las 09:12 — paso 0, con el módulo `kind='location'`. Verificado: `external_location_id=1b6p8-2`, `location_id=92d7656e…`, `ei.location_id` **no NULL** (el trigger quedó esquivado), token presente. **La identidad de `1b6p8-2` quedó confirmada por la API de HubRise**, no por captura.
70+
- **Rediseño de `EditPricesModal`** + **pantalla de reconciliación de marcas** + **panel de catálogos**, mergeados a `main` el 17/08 (`84553f2`). **Pipeline verde (run 142, 10:55), OTA publicada** — dentro de ventana.
71+
- `hubrise-catalog-create` **v1 desplegada** (crea y mapea, **sin publicar**).
72+
73+
### El hallazgo que salvó a Alcalá
74+
75+
`hubrise-catalog-publish` **sólo acepta `brand_id`** y selecciona `brand_hubrise_catalog` **sin
76+
filtro de local**; `hubrise-brand-connect` la llama así. Reutilizarla para Carabanchel **habría
77+
republicado el catálogo `j99jm` de Alcalá en producción**. Por eso existe una función nueva y
78+
estrecha. Verificado leyendo el código desplegado.
2379

24-
| Hora | Ventas en 30 días |
80+
### Carabanchel — dónde está de verdad
81+
82+
| Capa | Estado |
2583
|---|---|
26-
| 11:00 | **0** |
27-
| 12:00 | 3 sueltas, en 2 días de 30 |
28-
| 13:00 | **266** — los 30 días de 30 |
84+
| Conexión Folvy ↔ HubRise | ✅ hecha y verificada |
85+
| Bridges en HubRise |**15 creados** (6 marcas propias × plataformas con escaparate), nombres corregidos |
86+
| Activación de los bridges |**ninguna** — requiere trámite con soporte |
87+
| Catálogos por marca | ❌ 0 |
88+
| Mapeos de marca | ❌ 0 |
89+
| Pedidos recibidos | 0 |
90+
91+
**Las 15 conexiones apuntan al catálogo genérico `Foodint · bnnpd`.** El bridge **también empuja el
92+
menú hacia la plataforma**: activar una así puede publicar el menú equivocado en un escaparate vivo.
93+
**Ninguna se activa antes de tener su catálogo y estar reapuntada.**
94+
95+
**Un bridge no se crea: se solicita.** Uber es autoservicio; Glovo y Just Eat van por correo
96+
(Janaina / `support@hubrise.com`), con plazo de terceros.
97+
98+
### 🔴 La decisión que gobierna todo y sigue sin tomarse
99+
100+
El formulario de activación avisa: **Glovo rechaza la conexión si la tienda sigue en otro TPV o
101+
middleware.** Los escaparates de Foodint están en **Last.app** (Alcalá, 14 días: **597 ventas por
102+
Last.app frente a 84 por HubRise**).
29103

30-
Nadie usa la app antes de las **12:45**, salvo los **fichajes de las 12:30**.
104+
**Activar un bridge no añade un canal: sustituye al que hay.** Es una migración de producción, marca
105+
por marca, con facturación viva. **Decisión de negocio de Julio, sin marcha atrás barata.**
31106

32-
Esa es la frontera dura: **12:30, por los fichajes.** La ventana se cierra a las
33-
**12:15** para dejar quince minutos de margen — el pipeline tarda, y un despliegue
34-
que empieza a tiempo puede terminar tarde.
107+
### Espera a Julio (sólo él puede)
35108

36-
### Cómo se lee esto
109+
- **La decisión de migración desde Last.app** (arriba). Bloquea todo lo demás de Carabanchel.
110+
- **Captura desaturada de los tres estados** del modal de precios — la primera mirada humana al rediseño ya desplegado.
111+
- **Ensayo del panel de catálogos** en `/_admin/hubrise` (laboratorio) y el `dry_run` de scope sobre Alcalá.
112+
- Email de **Janaina** sobre pausa por marca virtual.
113+
- Banner de **VAT intracomunitario** de la cuenta HubRise.
114+
- Los **9 turnos de Marlón Mafla** dentro de su semana de vacaciones (3–9 ago).
37115

38-
El límite no es «la hora a la que se puede pulsar»: es **la hora a la que tiene que
39-
estar terminado**. Si el pipeline no acaba antes de las 12:15, **no se fuerza**: el
40-
trabajo se queda en la rama y sale esa noche después de las 23:45.
116+
### Deudas declaradas el 17/08
117+
118+
| Deuda | Disparador |
119+
|---|---|
120+
| **Folvy no puede operar sobre la cuenta de un cliente.** Ningún usuario pertenece a dos cuentas; el único platform admin sólo está en el laboratorio; la RLS sigue siendo por cuenta. | **Cliente 2.** Es Fase 0. |
121+
| **449 ventas sin marca atribuida en Kitchen Grill LstQ** (6 claves, una viva el 16/08). La rentabilidad por marca de esa cuenta está incompleta. | Triaje con la pantalla de reconciliación. |
122+
| **Bandas de salud del margen** sin definir. `foodCostStatus === 'over'` es un sustituto interino; el ámbar no aparecerá hasta que haya escandallos. | Cuando haya escandallos. |
123+
| **`sales_channel.color` a NULL** en las 3 cuentas. Fallback por nombre ya puesto; poblar la columna lo convierte en dato. | Cuando se quiera; ya no bloquea. |
124+
| **`sw.js:62`**`event.respondWith(fetch(req))` sin `.catch()`: no-op que sólo añade un modo de fallo. Ruido de consola, no fallo funcional. | Cuando Julio pueda mirar una tablet. **No se toca en remoto.** |
125+
| **`hubrise-catalog-create` desplegada no es byte a byte lo del repo** (cabecera y acentos), por falta de `SUPABASE_ACCESS_TOKEN` en el contenedor. | El v2 se despliega desde el repo. |
126+
| **El traductor del navegador traduce los nombres de las conexiones de HubRise** («Bendito Burrito» → «Burrito Bendito»). El nombre es clave de mapeo. | Desactivar traducción en `manager.hubrise.com`. **Hecho.** |
127+
128+
---
129+
130+
## 5. Ramas: no dejar crecer la pila
131+
132+
- **Merge normal, nunca squash.** El squash rompe la línea y fabrica el conflicto que evitamos.
133+
- Lo certificado por captura se mergea. **Lo no verificado no se mergea ni se apila más.**
134+
- Una rama por encargo. Nunca empujar a una ya mergeada.
41135

42136
---
43137

44-
## 2. Persistencia
138+
## 6. Qué se puede hacer, y qué no
139+
140+
**Sí, todo desde el navegador:** verificar en previews de Vercel por captura · panel de Supabase ·
141+
consola de HubRise · correo · diseñar, decidir, escribir encargos y maquetas.
142+
143+
**No, o con extremo cuidado:**
144+
145+
- **Regla de las 5 etapas intacta**: commit → push → PR/merge → deploy → **verificado en vivo**.
146+
- **Ningún despliegue de `hubrise-webhook`** — camino vivo de pedidos de Alcalá.
147+
- **Nada que exija estar delante de una tablet o del local.**
148+
149+
### 🕐 Ventana de despliegue — corregida el 17/08 con datos
150+
151+
> **Los despliegues tienen que estar TERMINADOS a las 12:15.**
152+
> **Prohibido 12:15 → 23:45.**
153+
154+
El límite **no es la hora de pulsar, es la hora a la que tiene que estar acabado** — pipeline y OTA
155+
incluidos.
156+
157+
Evidencia (30 días de Foodint, hora local):
158+
159+
| Hora | Ventas | Días con venta |
160+
|---|---|---|
161+
| 11 | 0 | 0 de 30 |
162+
| 12 | 3 | 2 de 30 |
163+
| **13** | **266** | **30 de 30** |
164+
| 21 | 455 | 30 de 30 |
165+
166+
Entre las 03:00 y las 12:00 no hay prácticamente nada. **La restricción no son las ventas: son los
167+
fichajes de las 12:30.** Julio confirma que nadie usa la app antes de las 12:45, salvo fichajes.
168+
169+
⚠️ La v2 de este protocolo decía «11:00 → 23:45». **Ese 11:00 no salía de ningún dato** — era un
170+
colchón inventado que se coló como regla. Corregido.
171+
172+
---
173+
174+
## 7. Reglas que no se relajan
175+
176+
- **Inventario antes de construir.** Ninguna tarea empieza escribiendo código.
177+
- **Verificar, no deducir** — contra BBDD, código desplegado o doc oficial.
178+
- **Distinguir lo verificado de lo no verificado** en cada informe. `NO_RESUELTO` es salida legítima.
179+
- **Un `location_id` o un `brand_id` nunca se identifica por su nombre.** El laboratorio replica los
180+
nombres de producción: hay dos «Foodint Carabanchel» y dos «Bendito Burrito». Siempre por UUID.
181+
- **El silencio sólo es resultado** si antes se ha provocado el ruido y se ha visto llegar.
182+
- **Todo andamiaje temporal nace con su disparador de borrado escrito.**
183+
- **Nada es HECHO** hasta verificado en vivo.
184+
- **Toda pantalla nueva de cara al cliente se maqueta y se aprueba antes de construirse.**
185+
- **Empujar a `origin` en cuanto exista.** El contenedor de Code es efímero.
186+
- **Nada que Julio tenga que hacer por consola del navegador es producto.** Si hace falta una acción,
187+
se construye un botón.
188+
189+
---
45190

46-
Claude Code corre en un **contenedor efímero** que se recicla por inactividad. La
47-
ubicación de Julio es irrelevante para eso; el riesgo es el contenedor.
191+
## 8. Al volver
48192

49-
- **GitHub es la única persistencia.** Todo se empuja a `origin` en cuanto existe.
50-
Nada se queda «para el commit final».
51-
- Los documentos del proyecto de claude.ai **son invisibles** para Claude Code. O el
52-
contenido va dentro del encargo, o vive en el repo. Ha bloqueado el trabajo cuatro
53-
veces (regla fijada el 17/08).
54-
- Un despliegue programado para después de las 23:45 **no puede darse por hecho**: el
55-
contenedor puede no seguir vivo. Se confirma explícitamente antes de contar con él.
193+
1. Repasar este registro contra la realidad — **no fiarse de él**, comprobar.
194+
2. Fusionar lo que quede apilado, en orden.
195+
3. Tomar la decisión de Last.app antes de tocar un solo bridge más.
196+
4. Retomar lo que exigía presencia física.

0 commit comments

Comments
 (0)