Descripción
El módulo integrity es un módulo SaaS opt-in (no asignado a ningún Plan, solo activable vía extra_modules de una organización). Activa la Barra de Integridad F2: página radar /integrity/ + API de cómputo y veredictos.
Versión introducida: v1.60.0 (2026-07-17)
Estado: Beta — apagado por defecto en todas las orgs. Activación manual post-deploy en beta org 1.
Modelo de datos
Tabla: core_saasmodule
SaaSModule.objects.get_or_create(
slug="integrity",
defaults={
"name": "Integrity",
"is_core": False,
"sort_order": 8,
"url_prefixes": ["/integrity/", "/api/racks/integrity"],
},
)
Campos:
slug:"integrity"— identificador único.name:"Integrity"— etiqueta legible.is_core:False— no es obligatorio.sort_order:8— posición en menú (si estuviese visible).url_prefixes: Lista de prefixes gateados. Sin el módulo activo, acceso → 403.
Gating
El gating se implementa en dos niveles:
1. Module Registry (core/module_registry.py)
MODULE_PREFIXES = {
"/integrity/": "integrity",
"/api/racks/integrity": "integrity",
}
Antes de que una request llegue a una vista o endpoint en estos prefixes, el middleware check_module_access() valida que la org del usuario tenga el módulo en extra_modules.
2. Permiso en BD (Organization.extra_modules)
org.extra_modules.add(integrity_module) # Activa el módulo
org.extra_modules.remove(integrity_module) # Lo desactiva
Relación M2M: Organization ←→ SaaSModule.
Activación (post-deploy)
# Shell Django
from core.models import Organization, SaaSModule
org_beta = Organization.objects.get(pk=1) # Beta org
integrity_mod = SaaSModule.objects.get(slug="integrity")
org_beta.extra_modules.add(integrity_mod)
Tras esto:
- Menú muestra
/integrity/si hay permisoifmoduleen el template. - GET
/integrity/→ 200 (render página). - GET
/api/racks/integrity/overview→ 200 (JSON). - POST
/api/racks/integrity/ack→ 200 siracks:edit.
Rutas gateadas
| Ruta | Método | Permiso | Módulo |
|---|---|---|---|
/integrity/ | GET | Miembro org | integrity |
/api/racks/integrity/overview | GET | Miembro org | integrity |
/api/racks/integrity/ack | POST | racks:edit | integrity |
Flujo de activación y desactivación
Activación (manual via shell o admin):
- Admin ejecuta
org.extra_modules.add(integrity_mod). - BD: relación creada en
core_organization_extra_modules. - Siguiente request con esa org → middleware permite acceso a
/integrity/. - Usuario ve menú + página (si racks:edit, puede hacer clicks POST).
Desactivación (rollback):
org_beta.extra_modules.remove(integrity_mod)
- Siguiente request → 403 Forbidden.
- Datos históricos (IntegrityAck, RackIntegritySnapshot) se preservan (no se borran).
Decisión de Go/NoGo (gate #202)
La métrica que decidirá si subir de beta a producción es gate_stats(org):
{
"signal": 45, # plan_updated + real_change
"noise": 8, # false_alarm
"total": 53,
"signal_pct": 84.9
}
Umbral de confianza: > 85% de los veredictos son señal.
Una vez alcanzado, se evalúa:
- Subir a Plan 4 (Professional, ej.) → para que los clientes de ese tier lo vean.
- O mantener en beta en la propia org de CreaRack.
Véase también
- [[feature—racks—integridad-f2-radar-interno]]
- [[entity—racks—service—integrity-motor]]
- [[entity—racks—model—integrity-ack]]
- [[concept—saas—multi-tenancy]]
- [[concept—core—module-registry]]