PLAN PREVIO.md

Plan previo: intervalo del conjunto escrito de estados

RETP-161. Cortes: Lenguaje 0ef4330b9bb18b09f5a386784d7d3baa559624b2; laboratorio 605de268874621538489554a3f1be0b83f1f4a1f, rama lab/playground-sv-permanente. Se continúa en las ramas existentes, sin apertura, fusión, limpieza ni renumeración de ramas o registros históricos. Base experimental: 77 archivos de RETP-160, expediente cotejado en ambos árboles.

Objeto único del paso 6: dar intervalo al rechazo actual states.len() != 3. Esta comprobación cuenta las etiquetas escritas, incluidas repeticiones; no calcula el número de valores distintos. Se preserva exactamente esa condición. El intervalo comienza en el byte de la llave de apertura y termina inmediatamente después de la llave de cierre, incluidas ambas llaves, espacios y comentarios interiores; excluye comentarios exteriores, separador posterior y campo rule. No se atribuye a una etiqueta individual un error de longitud de la colección escrita.

El emisor conservará los dos índices de token antes de consumir las llaves. El registro interno de localización se extenderá a primero/último, inclusivos; los emisores de un elemento registrarán el mismo índice en ambos extremos. La conversión a bytes utilizará los intervalos léxicos originales. El rechazo permanece después de comprobar la llave de cierre y el punto y coma, antes de rule. EOF, etiquetas inválidas y fallos de separador conservan su precedencia. La tokenización completa y sus rechazos léxicos mantienen prioridad.

Contrato observable: cobertura ampliada de COMPILER-DIAGNOSTICS/2, sin nueva causa, mensaje, variante pública, regla de admisión ni cambio IR. Dos esperados de rango ausente de RETP-160 son sucedidos expresamente, preservando el documento anterior; otros 92 esperados sin cambios. Los nuevos casos y rangos se fijan antes de cambiar la candidata, a partir de fragmentos originales seleccionados, sin leer su salida. Incluyen ES/EN, longitudes 1/2/4/6, seis permutaciones válidas por idioma, CRLF, acentos, comentarios con llaves y errores simultáneos para verificar precedencia. El conjunto vacío y la coma final conservan su rechazo sintáctico previo; no se crea una nueva forma gramatical.

Se comparan decisiones y errores heredados entre base y candidata, monofuente y ensamblaje mixto en ambas posiciones con nombre de archivo repetido. Se comprueban huella SHA-256, bytes y perfil de origen. Corpus canónico 14 válidas/106 inválidas, 239 unitarios por modo, focales y relación previos. Rust nativo debug/release y tres repeticiones focales; Python observa y recupera, nunca actúa como autoridad semántica.

Sensibilidad prevista, con código de salida 101: base sin intervalo detectada en COUNT_ONE_en; mutante que excluye la llave de cierre detectado en COUNT_ONE_en; mutante que adelanta el rechazo antes del separador detectado en SEMICOLON_PRECEDENCE_en. Catálogo 13 causas/26 mensajes intacto; cuatro clientes negativos con seis rechazos de acceso. Límites: 120 segundos por proceso y 2 MiB por flujo, comandos, identidad, salidas, tiempo, CPU y máximo acumulado RSS de hijos. La memoria incluye compilador y no acredita consumo incremental o por caso; no se constituye comparación de rendimiento, dinero ni inferencia. Reproducción sin red en directorio nuevo antes de publicación.

Rectoras consultadas en esta continuidad y cotejadas: AGENTS, Pilares completos, perfiles/ensamblaje, transición y relevos; contrato diagnóstico RETP-109/110, workflow V2, plan RETP-147. Referencia conceptual mantenida: LEAME_PRIMERO del frame, significado humano y fidelidad, adenda visual y trazabilidad/auditoría/reproducción. Localizar fielmente un error no prueba fidelidad del conocimiento presentado.

Se mantiene el paso 6, fila 9 y prioridades del relevo; no se cierra P6, DG global, DFL-001/011 ni otras deudas. Reserva P3 cerrada; P4/P5 con sus compuertas. Fuera: conversiones defensivas restantes y su alcanzabilidad, validadores y subcausas, presentación/serialización, WASI/navegador y recepción profesional. Sin ejecución externa ni promoción al núcleo productivo. El encargo común sigue pendiente.