Volver a la wiki

Decisión: Barra de Integridad nace APAGADA en v1.60.0

Contexto

La v1.59.0 (2026-07-17) introdujo el Motor de Integridad F1: la lógica que detecta divergencias plano↔realidad. Hoy entra F2: la página radar (/integrity/) + API + modelos de veredictos.

Pregunta: ¿La activamos ya en CreaRack Pro y en clientes, o esperamos?

Decisión

Nace APAGADO en v1.60.0. El módulo integrity existe en la BD pero NO se asigna a ningún Plan ni a ninguna organización. Solo con org.extra_modules.add(integrity_module) (vía shell post-deploy) aparece la página, el menú y la API.


Razón 1: Calibración del motor

El detector de divergencias (F1) tiene precisión limitada inicialmente:

Sin feedback humano, el motor es un ruido generator.

Con F2 (veredictos), cada click del usuario es un datapoint de calibración:

La métrica de calibración es signal_pct = signal / (signal + noise) * 100. Objetivo: > 85% señal antes de Go/NoGo.

Ejemplo:


Razón 2: Impacto usuario (por ahora: cero)

El motor F1 corre “silenciosamente” en el backend. Las métricas de integridad se almacenan (snapshots). Pero sin UI visible, el usuario no sabe que el motor existe ni cómo usarlo.

Si activamos F2 ahora sin tuning:

Mejor: Activar primero en beta org (CreaRack interna), calibrar con nuestros propios racks, y luego lanzar a clientes como “garantizado calibrado”.


Razón 3: Garantía de “todo nace apagado”

CreaRack Pro tiene un principio: nuevas features => opt-in primero. Reduce riesgo de regresiones u incompatibilidades.

El patrón es el módulo SaaS + gating:

  1. Módulo se registra (BD) pero sin asignación.
  2. Prefijos gateados en module_registry.
  3. Activación manual post-deploy.

Cumplir ese principio aquí := nada automático, decisión consciente.


Implementación

En v1.60.0 (hoy, 2026-07-17)

# core/migrations/0030_integrity_module.py
SaaSModule.objects.get_or_create(
    slug="integrity",
    defaults={"is_core": False, ...}
)
# NO se asigna a ningún Plan

Resultado: Módulo existe, pero:

Post-deploy (mismo día, manual)

# Shell Django
from core.models import Organization, SaaSModule
org_beta = Organization.objects.get(pk=1)  # Beta org (CreaRack)
integrity_mod = SaaSModule.objects.get(slug="integrity")
org_beta.extra_modules.add(integrity_mod)

Resultado:

Activación clientes (post-gate decision, ej. 2026-08-30)

Gate #202 confirma signal_pct > 85%. Marketing/Product decide lanzar.

# Opción A: Añadir a Plan 4+ automáticamente (no hacer esto sin legal review)
# Opción B: Activar manualmente en clientes Pilot (ej. orgs IDs 10, 20, 30)
for org_id in [10, 20, 30]:
    org = Organization.objects.get(pk=org_id)
    org.extra_modules.add(integrity_mod)

O desde admin:


Rollback (si falla)

Si durante calibración descubrimos un bug grave en el motor:

org_beta.extra_modules.remove(integrity_mod)
# Siguiente request → 403 de nuevo.
# Datos históricos (IntegrityAck, snapshots) se preservan.

Sin breaking changes, sin migrations de reversión.


Métricas de éxito (gate #202)

A monitorear durante las 4-6 semanas de beta:

MétricaObjetivoNuestro target
Veredictos totales> 100Nuestro org opera 500 racks → ~150-200 veredictos esperados
Signal %> 85%Si cae < 85%, ajustar heurísticas
Falso positivos< 15%Typo, conflictos IP por DHCP, etc.
Feedback frequency1 veredicto/díaNuestro ops team activo

Criterio de Go: signal_pct > 85% SOSTENIDO por 2 semanas (no puntual).


Alternativas consideradas

Alt A: Activar globalmente en v1.60.0 (rechazada)

❌ Riesgo: motor sin calibrar → ruido → desconfianza usuario.

Alt B: Ocultar totalmente en v1.60.0, lanzar en v1.61.0 solo (rechazada)

❌ Ineficiente: duplica work si tuning requiere cambios en motor.

Alt C: Flag de feature por org (aceptada, implementada)

✅ Módulo SaaS opt-in = feature flag nativo. Seguro, reversible, controllable.


Referencias


Aprobación

ADR: Edu (CreaRack) · 2026-07-17
Estado: Implementado
Próximo hito: Gate #202 decision ~ 2026-08-30

Véase también

Subir