# E-004 — Una ronda aprobada puede seguir teniendo una frontera fuera de scope

- Fecha: 2026-08-02
- Estado: observado durante dogfooding; limitación de sensibilidad confirmada, no falso negativo de una regla declarada.

## Jerarquía de objetivos

- Objetivo principal: detectar tempranamente errores deterministas y deriva de objetivo con evidencia trazable.
- Objetivo de ronda: entregar sesiones tipadas, planificación determinista y cobertura explícita al cierre.
- Contribución concreta: separar `fast` y `final`, registrar alcance del veredicto y conservar un replay versionado.

## Trayectoria observada

La ronda modificó código, pruebas, contrato documental y el escenario reproducible `synthetic/scenarios/e009-fast-final-modes.json`. El contrato vigente declara `src/**`, `test/**`, `docs/**` y escenarios sintéticos anteriores, pero no ese nuevo escenario.

`oguard align --json` informó una superficie material de 15 archivos y un archivo fuera de scope. También atribuyó siete coincidencias de path a KRs de sesión, planner y veredicto; por esa evidencia candidata no emitió `goal-substitution`. `oguard round-end` devolvió `PASS` con verificación completa.

## Comportamiento esperado y real

El comportamiento esperado de la versión actual era exactamente ese: `goal-substitution` requiere simultáneamente superficie material, cero evidencia candidata para los KRs objetivo y desviación declarada. El archivo fuera de scope quedó visible como hecho, no como alerta.

El resultado real confirma un límite estratégico: `PASS` significa que los checks y la política actual no encontraron una violación bloqueante. No significa que toda la trayectoria estuviera dentro del plan congelado ni que la evidencia por path sea semántica.

## Evidencia

- salida de `oguard align --json`: `outside_scope_files = ["synthetic/scenarios/e009-fast-final-modes.json"]`, `warnings = []`;
- salida de `npm run round:end`: `PASS`, 15 archivos, 131 de churn, 1 archivo fuera de scope;
- `evidence/runs/dogfood.json`: evento reproducible de la ronda;
- `test/portable-alpha.test.mjs` y `synthetic/scenarios/e009-fast-final-modes.json`: prueba de que el cambio sí contribuye a la capacidad declarada de modos.

## Clasificación y límites

No es un falso negativo de `goal-substitution`: esa regla no promete alertar ante toda salida individual de scope cuando existe evidencia candidata para un KR. Es una observación orgánica de baja sensibilidad de la política compuesta y respalda la cautela de E-003: ausencia de warning no es certificado de fidelidad estratégica.

Tampoco prueba que hubiera desvío real. El escenario fuera de scope es un artefacto de regresión coherente con la implementación. La conclusión válida es más acotada: el guard exhibió la discrepancia pero no la elevó a señal accionable.

## Corrección de dirección

No se amplía retrospectivamente `expected_paths` para acomodar trabajo ya realizado: hacerlo borraría la observación que la ronda debía preservar. La evolución futura debe comparar contra baseline congelado y distinguir:

1. una excepción o cambio de contrato explícito y justificado antes del trabajo;
2. evidencia reproducible de criterio;
3. evidencia candidata por path;
4. una frontera fuera de scope visible aunque otros KRs tengan coincidencias.

## Impacto sobre la tesis y seguimiento

El episodio respalda la tesis negativa: un guard de paths y checks puede ser útil sin ser un árbitro suficiente de dirección. Para reclamar utilidad estratégica deberá acumular casos etiquetados donde una señal temprana cambie una trayectoria, y medir falsos positivos cuando se endurece la interacción entre scope y evidencia.

Como regresión, el reporte pasivo ya conserva `mode`, `scope`, superficie, criterios y checks. Falta una política explícita, calibrada y evaluada fuera de muestra que decida cuándo la combinación de frontera fuera de scope y evidencia insuficiente merece advertencia.
