# Fermenty — El cierre del lazo y la calibración

> Nota de diseño, en parte YA CONSTRUIDA. **Hecho:** el cierre del lazo (§2, cruzando
> corte × valoración) y el bucle 1 (acompañar durante la tanda). **Pendiente:** la
> DECISIÓN de §3 (¿la calibración mueve la predicción o el destino?) y el bucle 2 entero.
> El estado de cada pieza está en su sección.
>
> Referencias: `docs/Lexico.md` (§5 El aprendizaje), `docs/Matematica_Motor.md`.
>
> Destino sugerido: `docs/Cierre_del_lazo.md` · reconciliado 2026-07-25

---

## 1. Dos bucles, y conviene no confundirlos

| | Qué es | Cuándo | Estado |
|---|---|---|---|
| **Bucle 1** | Catas, dices cómo está, la predicción se mueve y la ventana se ajusta | Horas o días, dentro de la tanda | ✅ **Construido** (`App\Mentor\BucleUno`, `batches.forecast`) |
| **Bucle 2** | Cierras, valoras, y las predicciones futuras se estrechan para ti | Meses, entre tandas | 🔜 **No construido** |

Valorar al terminar es **bucle 2**. `flavor_results` recoge seis ejes sensoriales; el cierre del lazo (§2) ya la LEE para explicar cómo salió, pero **no aprende de ella**: el almacén de calibración por usuario × guía sigue sin existir.

---

## 2. El cierre del lazo — ✅ CONSTRUIDO

**No es calibración. Es aritmética con voz.** Las tres piezas ya estaban, y ahora el
motor las cruza (`App\Mentor\CierreLazo` · `BatchService::cerrarLazo` → un `insight`):

- **Lo que pediste** — el `perfil_defecto` o el override, en `batches.formulacion`
- **Lo que hiciste** — el día real de corte, en la reformulación y los eventos
- **Cómo salió** — tu valoración, en `flavor_results`

Con eso el sistema puede explicar la diferencia sin aprender nada:

> «Cortaste el día 9 y yo calculaba el 7 u 8. Por eso salió más ácida de lo que pediste. La próxima, si la quieres como la pediste, córtala antes; si te gustó así, guardo esto como tu punto.»

Eso da la sensación de mentor **sin fingir que ha aprendido**. Y es honesto: con una tanda no hay nada que aprender.

### Los casos — dos ejes, no una lista

La voz **no** sale de parchear casos con condiciones de rating. Sale de cruzar dos
preguntas independientes:

- **Corte** — qué pasó: a tiempo · a tiempo pero distinta · tarde · fuera de ventana · con desviaciones
- **Valoración** — si importó: gustó (≥3★) · no gustó (<3★ o sin valorar)

Cuando el corte salió **mal**, el corte manda; cuando salió **bien**, manda la valoración:

| corte | gustó (≥3★) | no gustó (<3★ / sin valorar) |
|---|---|---|
| a tiempo, como pidió | `a_tiempo_como_pidio` (redonda) | `a_tiempo_no_gusto` |
| a tiempo, distinta | `a_tiempo_mejor` | `a_tiempo_no_gusto` |
| tarde, más ácida | `tarde_mas_acida` | `tarde_mas_acida_no_gusto` |
| fuera de ventana | `fuera_ventana` | `fuera_ventana` |
| desviaciones | `desviaciones` | `desviaciones` |

Dos cosas simplifican la matriz a **siete voces**, no diez:

- **`a_tiempo_no_gusto` absorbe dos filas.** «Como pidió» y «distinta», si no gustó, van al
  mismo sitio: cuando el corte fue correcto y aun así no gustó, el corte no explica nada —
  que es la definición del caso difícil.
- **`fuera_ventana` y `desviaciones` no se desdoblan.** Ahí el corte ya explica tanto que la
  valoración no cambia el mensaje.

### 2.1 · El caso difícil (`a_tiempo_no_gusto`), en tres movimientos

Cortó a tiempo y aun así no gustó es el que más fácil se implementa mal. No es «no sé por
qué» a secas —eso se lee como lavarse las manos—, son **tres movimientos**:

1. **Quitar la culpa** — que una fermentación no salga como se esperaba es lo más normal, no un fallo de nadie.
2. **Decir lo que SÍ se sabe** — «no fue por el corte, eso lo hiciste bien». Descartar una causa demuestra que ha mirado.
3. **La comunidad, solo cuando el patrón se repite** — a la primera es ruido.

Y su reverso, que se separa por la **valoración**: cortó a tiempo, salió distinta, **pero le
gustó** (≥3★). Decirle «salió distinta» a secas sobre una maravilla suena a fallo. Merece su
propia voz —`a_tiempo_mejor`—, que celebra el regalo y abre la puerta a guardarla («si
quieres volver a buscar esta, dímelo y la guardo» — umbral del bucle 2, para después).

**Dos condiciones de honestidad:** (1) el mensaje no inventa la causa del disgusto —reconoce
que no gustó, no dice por qué salvo cuando el corte lo explique; (2) «tarde + gustó» es señal
valiosa (su punto es más ácido que el que pidió) pero **solo se ofrece guardarla, no se
aprende de ella** — eso es la §3 y necesita varias tandas.

### 2.2 · La señal agregada (bucle 2 a nivel de CATÁLOGO) — por encargar

Si **varias personas** obtienen sistemáticamente otro resultado con la **misma receta**, el problema es de la receta, no de ellas. Detecta una receta **mal calibrada antes de que nadie se queje** — y conecta directo con `factorAcido`, que ya tiene dos indicios de que está bajo (§Backtest §6.1).

Es bucle 2 a nivel de **catálogo**, no de usuario: convierte los cierres de lazo en **herramienta de producto**, no cortesía al usuario.

**Condición de honestidad:** solo agregar tandas **completadas y sin desviaciones**. Una que se cortó tarde no dice nada de la receta, dice de esa tanda.

Pieza aparte, **por encargar** (necesita su briefing, como §3).

---

## 3. 🔴 La decisión que hay que tomar antes de construir la calibración

**Lo que el sistema aprende, ¿mueve la predicción o mueve el destino?**

Con la misma señal —«cortó el día 9 y le gustó»— caben dos lecturas:

- **Su cocina va más lenta** → la predicción se corrige: la próxima vez el mentor le dirá 9 días en vez de 7
- **Su «equilibrada» es más ácida que la mía** → el destino se corrige: el mentor apunta a un corte más tardío para lo que esa persona llama equilibrada

Son **dos aprendizajes distintos con la misma evidencia**, y si se aplican los dos a la vez **se corrigen mutuamente**: el sistema alarga la predicción *y* mueve el objetivo, y acaba prediciendo bien un destino equivocado.

El Léxico ya nombra los dos como las dos mitades de la calibración —**«su sitio»** y **«su lengua»**— pero no dice cómo se separan.

**Lo que los distingue es qué se midió:**

- Si hay **temperatura registrada**, la velocidad de su cocina es medible y va a «su sitio»
- Si cortó **dentro de la ventana** y aun así no le gustó, es «su lengua»
- Si cortó **fuera** de la ventana, no se aprende nada de paladar — solo se sabe que se desvió

Sin esa separación, la calibración es ruido con aspecto de aprendizaje.

---

## 4. Reglas que ya están decididas y aplican aquí

**Una tanda descartada no calibra.** Moho o accidente no es señal de paladar ni de velocidad. Ya está en el modelo (`Batch::scopeCalibratable()` = solo `completed`).

**Solo lo medido calibra.** La reformulación ya distingue residual medido de calculado, precisamente para que el sistema no aprenda de sus propias predicciones y converja hacia sus errores.

**El estrechamiento tiene que ser visible.** Del hueco 17 de la simulación de UI: si solo se muestra al cerrar, se lee como un cierre bonito. Si reaparece al formular la siguiente —*«antes te habría dicho 6-9 porque es lo general; contigo digo 6-7 porque es tu cocina»*— se convierte en el motivo de volver.

Es una línea de texto y es media retención. Y encaja con el mecanismo de herencia con sobreescritura: la calibración no activa nada nuevo, solo pone un valor más específico donde antes se heredaba el general.

---

## 5. Por qué la calibración no se puede hacer con una tanda

Hacen falta varias para separar las dos causas. Con una sola:

- No se distingue si la cocina va lenta o si el paladar es distinto
- No se separa la señal del ruido — una tanda con la ventana abierta en verano no dice nada del invierno
- Ajustar con un dato es peor que no ajustar: mueve el modelo hacia un caso particular

**El orden correcto:** primero el cierre del lazo (§2), que funciona desde la primera tanda; la calibración cuando haya historial y la decisión de §3 esté tomada.

---

## 6. Lo que haría falta construir

**Para el cierre del lazo — ✅ HECHO:**
- ~~Leer `flavor_results` al cerrar y compararlo con lo formulado~~ (`cerrarLazo`)
- ~~Un puñado de plantillas de voz~~ — siete, cruzando corte × valoración (`lang · cierre`)
- ~~Escribir en `insights`~~ — un insight «Cómo salió» por tanda

**Para la calibración (después de §3) — 🔜 pendiente:**
- El almacén por usuario × guía
- La resolución por herencia: sin calibración propia, coeficientes generales. **No hay arranque en frío**
- El estrechamiento visible en la formulación siguiente

---

## 7. El bucle 1 — ✅ CONSTRUIDO

Cerrar el lazo al terminar no sustituía a acompañar durante. El bucle 1 —catas, la
predicción se ajusta, la ventana se mueve— ya está: cualquier `daily_log` despierta al
mentor, la cata manda sobre el cálculo (mueve por criterio, no por coeficiente), el
pH/temp lo corrigen, y un aviso relativo a la ventana dice cuándo catar.

Con él, el mentor **acompaña** —no solo formula y explica al final—. Lo que sigue
faltando es el bucle 2 (aprender entre tandas), que espera la decisión de §3.

---

*Nota viva. Cuando se decida §3, esto se convierte en briefing.*
