Volver a la wiki

Módulo SaaS: integrity (Barra de Integridad)

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:


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:


Rutas gateadas

RutaMétodoPermisoMódulo
/integrity/GETMiembro orgintegrity
/api/racks/integrity/overviewGETMiembro orgintegrity
/api/racks/integrity/ackPOSTracks:editintegrity

Flujo de activación y desactivación

Activación (manual via shell o admin):

  1. Admin ejecuta org.extra_modules.add(integrity_mod).
  2. BD: relación creada en core_organization_extra_modules.
  3. Siguiente request con esa org → middleware permite acceso a /integrity/.
  4. Usuario ve menú + página (si racks:edit, puede hacer clicks POST).

Desactivación (rollback):

org_beta.extra_modules.remove(integrity_mod)
  1. Siguiente request → 403 Forbidden.
  2. 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:


Véase también

Subir