01 · Resumen ejecutivo

Paraguas QA sobre toda la cadena operativa FARO

FARO Connect no es una landing. Es una cadena operativa que va de datos a Score a reportes pasando por reglas, tensiones, acciones, evidencia, workflow, timeline, alertas e IA. La estrategia QA del MVP cubre cada eslabón y todos los eslabones funcionando juntos.

Este documento es el paraguas estratégico de calidad que se apoya en tres patas:

  • FARO-TEST-002 · Reglas YAML: validación del DSL, parser y motor evaluador. Define cómo se prueban las reglas que disparan tensiones.
  • FARO-TEST-002.1 · Catálogos canónicos: tests que verifican que toda regla apunte a un tension_code, action_code y evidence_code presentes en los catálogos MVP.
  • FARO-QA-001 (este documento): estrategia integral E2E del MVP, pirámide, gates, CI/CD, smoke, regression y release. El paraguas que asegura que cualquier cambio no rompa lo esencial.

La regla ejecutiva es directa: cada cambio debe demostrar que no rompió lo esencial. Cuando se toca Score y se rompen reportes, cuando se toca evidencia y no cierra una acción, cuando se toca RLS y se cruzan empresas, no hay diseño premium que lo salve. Se arregla con bisturí o se previene con QA.

Dataset oficial: Empresa Demo Cuyo S.A. Es la empresa de referencia para todos los tests de integración, smoke pre-demo y demo-check. Score esperado del período: 66 (deterioro vs. 74 del período anterior, delta -8). Tensiones esperadas detectadas: TNS-001, TNS-004 y derivadas. Si una corrida produce un Score lejos de 66, algo se rompió en la cadena.

Sello de gobierno: main no recibe código que rompa gates críticos. Si rompe, se corrige. No se ve después. “Después” en software es ese cementerio donde van a morir las promesas técnicas.

02 · Pirámide de testing FARO

Distribución 35 / 30 / 20 / 10 / 5

Una pirámide práctica, no aspiracional. No conviene arrancar con 200 tests E2E lentos: queda muy lindo hasta que el pipeline tarda 45 minutos y todos lo saltean. La herramienta de calidad no debe volverse enemiga de la calidad.

35%
Base
Tests unitarios
Lógica pura: scoreStatus, clamp, normalización KPI, penalty de tensión, helpers de evidencia, validadores AI.
Vitest
30%
Capa 2
SQL · RLS · API
Migraciones, constraints, funciones SQL, aislamiento por company_id, contratos API y permisos.
Vitest+pg
20%
Capa 3
Integration tests
Pipeline completo: datos → KPI → reglas → tensiones → acciones → evidencia → Score → reporte.
DB+jobs
10%
Capa 4
UI components
React Testing Library sobre FaroScoreCard, TensionInbox, WeeklyReportPage, AccessDenied.
RTL
5%
Cúspide
E2E críticos
Playwright sobre los 10 flujos clave: login, evidencia, cierre, Score, reporte semanal, IA, viewer 403.
Playwright

Lectura ejecutiva: el 65% del esfuerzo de tests vive en la base (unit + SQL/RLS/API). Ahí está la velocidad de feedback y la cobertura real de los motores críticos (Score, reglas, workflow). El 5% de E2E está reservado para los flujos que un socio técnico, un inversor o un director van a ver corriendo en vivo. Esa proporción protege el pipeline rápido y mantiene la verdad ejecutiva.

03 · 12 capas obligatorias de validación

Cada capa cubre un eslabón de la cadena

Cualquier release del MVP debe ejecutar las 12 capas. No están ordenadas por prioridad sino por orden lógico de ejecución dentro del pipeline: lo rápido y barato primero (typecheck, lint, unit) y lo lento o frágil al final (smoke pre-demo).

Capa 01

Typecheck

tsc --noEmit sobre todo el monorepo. Detecta firmas rotas antes de cualquier test.

< 30sPR + main
Capa 02

Lint

eslint . con reglas críticas para FARO: no any en motores, no console.log en código de producción.

< 20sPR + main
Capa 03

Unit tests

Lógica pura sin DB: helpers de Score, clamp, status, confidence, normalización KPI, penalty de tensión.

≥ 70% coveragePR + main
Capa 04

SQL migrations

V001..V109 aplican en DB vacía y sobre seed previo. Funciones faro.score_status() y vistas críticas compilan.

IdempotentePR + main
Capa 05

Seeds demo

Empresa Demo Cuyo S.A. carga con UUIDs determinísticos. ON CONFLICT DO NOTHING garantiza idempotencia.

DeterminísticoPR + main
Capa 06

RLS dos tenants

Tests cross-company con Empresa A y Empresa B simuladas. Lectura cruzada devuelve 0 rows; insert cruzado lanza error.

CríticoPR + main
Capa 07

API contract

Response shape { ok, data } y { error: { code, category, message, request_id } } validado en endpoints críticos.

SchemaPR + main
Capa 08

UI components

React Testing Library sobre componentes críticos: render, empty state, error state, props mínimas.

60-70%PR + main
Capa 09

Integration end-to-end

Pipeline completo con seed: KPI → reglas → tensiones → acciones → evidencia → Score → reporte semanal.

Pipelinemain
Capa 10

Score formula

Caso esperado Cuyo: Score 74 → 66 (delta -8) con drivers TNS-001, TNS-004, ACTION_EXPIRED, EVIDENCE_MISSING.

Determinístico ± 2main
Capa 11

AI guardrails

Source refs válidos, números no inventados, prompt injection detectado, fallback activo si provider falla. IA nunca crea, cierra ni aprueba.

Anti-alucinaciónmain
Capa 12

Smoke E2E pre-demo

10 flujos críticos en Playwright sobre staging. Si alguno cae, no se muestra al socio técnico. Tradicional, aburrido, efectivo.

Bloqueantestaging
04 · 13 quality gates

Lo que bloquea merge a main

Cada gate es una condición binaria: pasa o no pasa. Los 11 bloqueantes impiden merge si fallan; los 2 de advertencia son ruido controlado que se revisa por humano. Política sin excepciones: main no recibe código que rompa gates críticos.

GATE-01 Bloqueante

typecheck-pass

tsc --noEmit sale sin errores. Firmas rotas no entran a main.

GATE-02 Bloqueante

lint-pass

eslint . sin errores. Warnings se permiten pero deben justificarse en PR.

GATE-03 Bloqueante

unit-coverage >= 70

Cobertura global de unit tests mayor o igual a 70%. Helpers críticos (Score, AI validators) mayor o igual a 90%.

GATE-04 Bloqueante

migrations-idempotent

Las V001..V109 aplican en DB vacía y sobre seed previo sin error. Re-aplicación es no-op.

GATE-05 Bloqueante

seeds-deterministic

Seeds de Empresa Demo Cuyo usan UUIDs fijos. Dos corridas producen el mismo dataset bit a bit.

GATE-06 Bloqueante

RLS-isolation

Empresa A no puede leer ni escribir datos de Empresa B. Tests cross-company en todas las tablas company_id.

GATE-07 Bloqueante

API-schema-valid

Todos los endpoints críticos responden con el response shape canónico, incluyendo request_id en errores.

GATE-08 Bloqueante

score-formula-correct

Cuyo S.A. produce Score 66 ± 2 con drivers esperados. Cualquier deriva activa investigación de motor.

GATE-09 Bloqueante

workflow-transitions-valid

Transiciones de acción siguen máquina de estados: new → in_progress → blocked → resolved → closed. Estados ilegales son rechazados.

GATE-10 Bloqueante

evidence-closure-rules

Acción crítica no cierra sin evidencia aprobada. Cierre sin evidencia devuelve EVIDENCE_REQUIRED.

GATE-11 Bloqueante

report-snapshot-stable

El reporte semanal sobre Cuyo produce un snapshot estable: mismo Score, mismas tensiones, misma tabla de acciones vencidas.

GATE-12 Bloqueante

AI-no-hallucination

Source refs inventadas (TNS-999) son rechazadas. Números fuera del payload se marcan. Prompt injection detectado y bloqueado.

GATE-13 Bloqueante

smoke-pre-demo-green

Los 10 flujos críticos de Playwright sobre staging pasan. Sin smoke verde, no se enseña a Horacio, socio técnico ni inversor.

GATE-W1 Advertencia

coverage-soft-modules

Coverage bajo en módulos no críticos (UI decorativa, helpers de presentación). No bloquea pero queda anotado en el PR.

GATE-W2 Advertencia

visual-diff-minor

Diferencias visuales menores (< 1% pixels) en screenshots Playwright. Revisión humana antes de merge.

05 · Ambientes de validación

Cinco ambientes, una matriz clara

Cada ambiente tiene un propósito específico y un subconjunto de capas que corre. Lo que se muestra a un socio técnico debe correr en staging o local reproducible. Screenshots sirven; sistema corriendo convence.

Capa / Ambiente Local Test CI Staging Production
Typecheck
Lint
Unit tests
SQL migrations
Seeds demo
RLS testsOpt
API contractOpt
UI componentsOpt
Integration E2E
Score formulaOpt
AI guardrails
Smoke E2EOpt
Health check

Leyenda: obligatorio en ese ambiente · Opt opcional, recomendado para desarrolladores · no se ejecuta. Local prioriza velocidad de feedback; Test es el ambiente automático con DB temporal por suite; CI ejecuta el pipeline completo en cada PR; Staging valida la integración E2E pre-demo/pre-release; Production solo recibe código aprobado y ejecuta smoke + health.

06 · Dataset demo oficial Cuyo S.A.

Base QA reproducible y deterministic

Sin dataset demo controlado no hay QA serio. Datos sueltos no alcanzan: hace falta datos con resultado esperado. Cuyo S.A. cumple ese papel para todo el MVP.

Empresa Demo Cuyo S.A. es la empresa de referencia: una compañía argentina del interior con sucursales múltiples, áreas comercial / finanzas / stock / compras, datos realistas de seis meses y todas las tensiones MVP relevantes ya disparándose por construcción. No es una empresa real; es un instrumento de calidad.

CÓMO SE SIEMBRA

Seeds idempotentes

pnpm db:seed:test ejecuta los archivos V025..V050 con UUIDs determinísticos. Empresa Cuyo recibe el ID 10000000-0000-0000-0000-000000000001. Re-ejecutar no duplica filas: ON CONFLICT DO NOTHING en todas las inserts.

QUÉ DEBE PRODUCIR

Expected outputs canónicos

Por cada motor hay un archivo expected/*.json: kpi_expected.json, tensions_expected.json, actions_expected.json, score_expected.json (Score actual 66, previous 74), report_expected.json. Los tests comparan output real contra estos archivos.

CÓMO SE VALIDA

demo-check script

pnpm qa:demo-check resetea DB, aplica migraciones, siembra Cuyo, corre KPI engine, rules engine, workflow checker y score engine, genera reporte semanal y valida cada output contra el expected JSON. Termina con Result: PASS o Result: FAIL con el primer driver que no cuadra.

Ver score_expected.json oficial Cuyo
tests/fixtures/demo-company/expected/score_expected.json
{
  "company_code": "EMP-DEMO-CUYO",
  "company_name": "Empresa Demo Cuyo S.A.",
  "period": "2026-05",
  "score": {
    "current": 66,
    "previous": 74,
    "delta": -8,
    "status": "warning",
    "confidence_min": 80
  },
  "components": {
    "kpi_health": 20,
    "tension_health": 14,
    "execution_health": 12,
    "evidence_health": 10,
    "governance_health": 10
  },
  "required_drivers": [
    "TNS-001",
    "TNS-004",
    "ACTION_EXPIRED",
    "EVIDENCE_MISSING"
  ]
}

Decisión aplicada: el caso oficial es Score 74 → 66 (delta -8). Los tests usan tolerance ± 2 sobre el valor actual. Si una corrida produce 64 o 68 el test pasa; si produce 72 o 60 el test falla y se investiga qué cambió en el motor de Score, las reglas o las penalizaciones de tensión. La frase fundacional: “mejor 80% en lo crítico que 100% en funciones decorativas”.

07 · CI/CD pipeline

GitHub Actions · cuatro workflows en cadena

El pipeline se divide en cuatro workflows: lint, test, build y deploy. En cada PR corre el bloque hasta build; en merge a main se suma integration + E2E + deploy a staging; en release production se ejecuta el flujo completo con backup pre-release y monitoreo post-deploy.

7.1 · Workflow CI principal

.github/workflows/ci.yml
name: FARO CI

on:
  pull_request:
    branches: [main]
  push:
    branches: [main]

jobs:
  quality:
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:16
        env:
          POSTGRES_USER: faro
          POSTGRES_PASSWORD: faro
          POSTGRES_DB: faro_test
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

      redis:
        image: redis:7
        ports:
          - 6379:6379

    env:
      DATABASE_URL: postgresql://faro:faro@localhost:5432/faro_test
      REDIS_URL: redis://localhost:6379
      NODE_ENV: test

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Enable pnpm
        run: corepack enable

      - name: Install dependencies
        run: pnpm install --frozen-lockfile

      - name: Lint
        run: pnpm lint

      - name: Typecheck
        run: pnpm typecheck

      - name: Run migrations
        run: pnpm db:migrate:test

      - name: Seed Cuyo S.A.
        run: pnpm db:seed:test

      - name: Unit tests
        run: pnpm test:unit

      - name: SQL and RLS tests
        run: pnpm test:sql

      - name: API tests
        run: pnpm test:api

      - name: UI tests
        run: pnpm test:ui

      - name: Build
        run: pnpm build

7.2 · Workflow staging + E2E

.github/workflows/staging-e2e.yml
name: FARO Staging E2E

on:
  workflow_dispatch:
  push:
    branches: [main]

jobs:
  e2e:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - run: corepack enable
      - run: pnpm install --frozen-lockfile

      - name: Install Playwright
        run: pnpm playwright install --with-deps

      - name: Run E2E smoke (10 flujos críticos)
        env:
          BASE_URL: https://staging.faro-connect.example
        run: pnpm test:e2e:smoke

      - name: Demo-check sobre Cuyo
        env:
          DATABASE_URL: ${{ secrets.STAGING_DATABASE_URL }}
        run: pnpm qa:demo-check

7.3 · Scripts package.json

package.json
{
  "scripts": {
    "lint": "eslint .",
    "typecheck": "tsc --noEmit",
    "test": "vitest run",
    "test:unit": "vitest run tests/unit",
    "test:sql": "vitest run tests/sql",
    "test:api": "vitest run tests/api",
    "test:integration": "vitest run tests/integration",
    "test:ui": "vitest run tests/ui",
    "test:e2e": "playwright test",
    "test:e2e:smoke": "playwright test tests/e2e/smoke",
    "test:ci": "pnpm lint && pnpm typecheck && pnpm test:unit && pnpm test:sql && pnpm test:api && pnpm test:ui && pnpm build",
    "db:migrate:test": "node scripts/db/migrate-test.ts",
    "db:seed:test": "node scripts/db/seed-test.ts",
    "db:reset:test": "node scripts/db/reset-test.ts",
    "qa:demo-check": "node scripts/qa/demo-check.ts"
  }
}

Política de pipeline: en PR corre install → lint → typecheck → unit → SQL/RLS → API → UI → build. En merge a main se agregan integration → E2E smoke → docker image → deploy staging → staging smoke. En release production: staging aprobado → backup pre-release → migrations production → deploy → smoke production → health check → monitoreo 30-60 min. Sin esos pasos en ese orden, no hay release.

08 · Smoke tests pre-demo

30 items que valen oro

Antes de mostrar FARO a Horacio, socio técnico, inversor o director, recorrer este checklist completo. La demo siempre falla donde uno dijo “eso no hace falta probarlo”. Ley de Murphy, pero con JavaScript.

01Login funciona con usuario director@empresa-demo.com.
02Dashboard ejecutivo carga en menos de 1.5 s.
03FARO Score visible: 66, delta -8, status warning.
04Bandeja de tensiones muestra TNS-001 Crecimiento no rentable.
05Bandeja muestra TNS-004 Venta sin conversión a caja.
06Acción ACT-COM-001 abre y muestra workflow completo.
07Acción muestra responsable, fecha límite y aprobador.
08Timeline de ejecución carga con al menos 5 eventos.
09Evidencia demo (PDF política descuentos) visible y descargable.
10Reporte semanal abre con Score, tensiones críticas y acciones vencidas.
11Reporte exporta a PDF sin errores.
12IA explica Score con source refs válidas (TNS-001, TNS-004).
13Si provider IA falla, fallback determinístico activa sin error visible.
14Notificaciones bell muestra contador y abre panel.
15Health check responde OK en menos de 200 ms.
16No hay errores rojos en consola del navegador.
17No hay datos hardcodeados evidentes (todo viene de la DB).
18Dashboard responsable carga KPIs personalizados por rol.
19Viewer intenta cerrar acción y recibe 403 con mensaje claro.
20Recalcular Score actualiza valor y registra entrada en timeline.
21Cargar evidencia desde rol responsable funciona end-to-end.
22Aprobador aprueba evidencia y acción queda habilitada para cierre.
23Cierre con evidencia aprobada genera eventos de auditoría.
24Mobile: bandeja de tensiones legible en 375 px de ancho.
25Mobile: dashboard responde sin romper layout.
26Empresa B no aparece en ninguna vista de Empresa A.
27Operación: /ops/health muestra DB, Redis, jobs y dead letters.
28Jobs runs tabla muestra última corrida exitosa de cada job crítico.
29Audit log accesible para rol admin con filtros básicos.
30Frase ancla visible en footer: FARO está en construcción, validación y pilotos estratégicos.

Reglas del smoke: los 30 items deben pasar antes de exhibir FARO. Si uno de los críticos (borde rojo) falla, se cancela la demo. Si fallan ítems importantes (borde ámbar) se acota la demo a las áreas verdes. La trampa clásica: mostrar lo que no se probó. Esa trampa termina en “acá normalmente funciona”, frase prohibida en presentaciones FARO.

09 · Bug severity y SLA

Cinco niveles con respuesta y resolución medibles

Cada bug tiene severidad asignada en el momento del triage. La severidad determina SLA de respuesta y SLA de resolución objetivo. No es burocracia: es lo que evita que un P0 quede en el backlog mientras se discute un P3.

SEV-0 / P0 Inmediata

Bloquea sistema o seguridad

Empresa ve datos de otra. Login completamente roto. Pérdida de datos. Vulnerabilidad crítica RLS.

RespuestaInmediata
ResoluciónMismo día
RollbackSi aplica
SEV-1 / P1 Mismo día

Rompe flujo crítico

No recalcula Score. No genera reporte semanal. Cierre de acción no funciona. Notificaciones no se envían.

RespuestaMismo día
Resolución24-48 h
Hotfix
SEV-2 / P2 48 h

Función importante degradada

Reporte no exporta PDF. IA falla parcial pero fallback corre. Timeline muestra eventos desordenados.

Respuesta48 h
Resolución1 semana
WorkaroundDocumentado
SEV-3 / P3 Semana

Bug menor

Badge visual incorrecto. Texto desalineado. Tooltip sin contenido. Ordenamiento de tabla menor.

RespuestaSemana
ResoluciónBacklog
DemoNo bloquea
SEV-4 / P4 Backlog

Mejora

Texto o microcopy. Iconografía secundaria. Optimización de query no crítica. Mejora de mensaje de error.

RespuestaBacklog
ResoluciónSegún prioridad
DemoNo bloquea

9.1 · Workflow de bug fix

Paso Acción Responsable Output
01Triage de severidadQA LeadEtiqueta SEV-0..4 en issue
02Reproducir con seed CuyoDev asignadoTest que falla en CI
03Fix con test de regresiónDev asignadoPR con test verde
04Code review obligatorioReviewerApproval o cambios
05Merge a main + deploy stagingCI/CDStaging actualizado
06Smoke stagingQASmoke verde
07Release production (si SEV-0/1)LeadProduction actualizado
08Post-mortem (solo SEV-0)EquipoDocumento de aprendizaje
10 · Regression suite

Casos que nunca se pueden romper

La regression suite ejecuta automáticamente en cada release. Es la red de seguridad: si un cambio rompe alguno de estos casos, el release se cancela. Son los casos cuya rotura humilla en una demo.

Caso Esperado Capa Estado
TNS-001 Crecimiento no rentable detectadaSí en CuyoIntegrationGreen
TNS-001 crea / recomienda ACT-COM-001IntegrationGreen
TNS-004 Venta sin conversión a caja detectadaSí en CuyoIntegrationGreen
Acción crítica vencida pasa a expired + escala L3WorkflowGreen
Evidencia aprobada habilita cierreWorkflowGreen
Acción sin evidencia no cierra (devuelve EVIDENCE_REQUIRED)APIGreen
Score demo queda en 66 ± 2Score formulaGreen
Reporte semanal incluye Score, tensiones críticas y acciones vencidasIntegrationGreen
IA no inventa TNS-999 ni números fuera de payloadAI guardrailGreen
Viewer no cierra acción (devuelve 403 con PERMISSION_DENIED)APIGreen
Empresa A no ve datos de Empresa B (RLS dos tenants)0 rowsSQL/RLSGreen
Job fallido va a retry y luego a dead letterJobsGreen
Notificación vencida se genera y dispatcher la envíaNotificationsGreen
Snapshot Score guarda componentes y driversScore formulaGreen
Migraciones aplican sobre seed Cuyo previo sin errorSQL migrationsGreen
Visual: FaroScoreCard no oculta el delta en mobileUIWatch

Cómo se mantiene la suite: cada bug SEV-0/SEV-1 cerrado agrega al menos un test de regresión a esta lista. Esa es la regla. No se cierra un P0 sin test; sin test, el bug vuelve. Esa fila al final con estado Watch es un caso en observación: pasó dos veces pero no es lo suficientemente estable para promoverlo a Green todavía.

11 · Release checklist

Pre-release · release · post-release

Tres bloques secuenciales que protegen cada publicación. Las casillas se completan en orden; ningún bloque arranca hasta que el anterior está en verde.

Bloque 1 · Pre-release

Antes de publicar

  • CI completo en verde sobre la rama de release.
  • Migraciones probadas en staging sin errores.
  • Seeds de Cuyo no rompen sobre datos previos.
  • Smoke E2E (10 flujos) pasa en staging.
  • pnpm qa:demo-check termina con PASS.
  • Health staging marca healthy en todos los componentes.
  • No hay dead letters críticos pendientes.
  • Backups verificados (DB + storage signed URLs).
  • Release notes redactadas y revisadas.
  • Rollback plan definido por escrito.
Bloque 2 · Release

Ejecución de publicación

  • Backup pre-release ejecutado y validado.
  • Migraciones aplicadas en production.
  • Deploy de imagen Docker etiquetada.
  • Smoke production (subset de 10 items críticos).
  • Health check production responde OK.
  • Versión registrada: release, commit, migrations, score_model, ai_prompts.
  • Notificación interna al equipo enviada.
Bloque 3 · Post-release

Después de publicar

  • Monitor activo 30-60 min sobre logs, errors y latencias.
  • Verificar primer demo-check sobre Cuyo en production.
  • Confirmar primer Score recalculado en production.
  • Revisar dead letters generados post-release.
  • Si métricas degradan, ejecutar rollback documentado.
  • Si todo verde, archivar el release en la tabla qa.test_runs.
  • Comunicar release notes a stakeholders.
Ver release versioning ejemplo
release-manifest.json
{
  "release": "0.3.0-mvp",
  "commit": "abc123def456",
  "migrations": "V001-V109",
  "seed_version": "EMP-DEMO-CUYO v1.2",
  "score_model": "FARO_SCORE_MVP v1",
  "ai_prompts": [
    "AI-EXPLAIN-SCORE v1",
    "AI-EXPLAIN-TENSION v1",
    "AI-EXPLAIN-ACTION v1"
  ],
  "demo_dataset": "EMP-DEMO-CUYO v1",
  "rollback_to": "0.2.7-mvp",
  "released_at": "2026-05-31T18:00:00-03:00"
}
12 · Mapa de docs QA

Qué cubre cada documento del paraguas

Tres documentos componen la estrategia QA del MVP. Saber qué cubre cada uno evita duplicar cobertura y evita huecos donde nadie probó nada.

FARO-TEST-002

Tests de reglas YAML

Valida la integridad del DSL: estructura de regla, scope, operadores, KPIs disponibles, conjunción y disyunción. Cada regla YAML cargada por el parser pasa por este suite antes de llegar al motor evaluador.

Cubre: parser + DSL + reglas individuales
FARO-TEST-002.1

Tests de catálogos canónicos

Verifica que toda regla apunte a un tension_code presente en faro.tension_definitions, a action_code en action_definitions y a evidence_code en evidence_definitions. Bloquea cualquier código huérfano.

Cubre: integridad referencial regla ↔ catálogo
FARO-QA-001

Estrategia QA paraguas (este doc)

Estrategia integral: pirámide, 12 capas, 13 gates, ambientes, dataset demo, CI/CD, smoke pre-demo, severity, regression y release. Es el sistema operativo de calidad sobre el que viven los dos anteriores.

Cubre: estrategia E2E del MVP

Regla de tres: si un bug se encuentra en TEST-002 → corregir regla YAML. Si se encuentra en TEST-002.1 → corregir catálogo canónico o referencia rota. Si se encuentra en QA-001 → revisar la cadena completa (pipeline, integración, ambiente o gate). Cada nivel tiene su responsable de fix; ningún nivel se salta porque “el siguiente lo va a atrapar”.

13 · Cross-references

Dónde se cruza esta estrategia con el resto del pack

La estrategia QA no vive sola. Consume catálogos canónicos, valida motores y se apoya en piezas de gobierno, observabilidad y deploy. Las marcadas PENDIENTE aún están en construcción.

CONSUME
catalogo-tensiones-mvp.html

30 tensiones canónicas TNS-001..TNS-030. Base de los tests de integración: cada tensión esperada de Cuyo se valida contra este catálogo.

VALIDA
motor-score-mvp.html

Fórmula y componentes del FARO Score. GATE-08 (score-formula-correct) ejecuta sobre este motor con tolerancia ± 2 sobre Cuyo.

VALIDA
workflow-escalamiento-mvp.html

Máquina de estados de acciones y escalamiento L1/L2/L3. GATE-09 y GATE-10 ejecutan sobre este workflow.

IMPLEMENTA
modelo-sql.html

DDL completo del sistema. Las capas 04 (migrations) y 06 (RLS) testean directamente las migraciones V001..V109 y la política RLS por company_id.

REPORTA
estado-implementacion.html

Matriz visual del estado del MVP. La estrategia QA alimenta esta vista con los resultados de demo-check y smoke staging.

PENDIENTE FARO-TEST-002.1
tests-canonicos.html

Tests de integridad referencial entre reglas y catálogos canónicos. Documento técnico en construcción.

PENDIENTE FARO-DEPLOY-001
deploy-ambientes-mvp.html

Especificación de deploy, ambientes (local / test / CI / staging / production) y release management. En construcción.

PENDIENTE FARO-OPS-001
observabilidad-ops-mvp.html

Observabilidad técnica: jobs, errors, dead letters, health, métricas. Alimenta el GATE-13 (smoke pre-demo).

PENDIENTE FARO-AI-001
ai-gateway-mvp.html

Gateway IA con guardrails, source refs y validación anti-alucinación. Base de la capa 11 (AI guardrails) y GATE-12.

PENDIENTE FARO-GOV-001
gobierno-seguridad-mvp.html

Gobierno, seguridad, auditoría y permisos. Base de la capa 06 (RLS dos tenants) y GATE-06.