Sistemas · SYS-L-102 · Laboratorio · ET
Componer un pipeline sin ocultar fallos
Un productor emite registros normalizados por stdout, diagnósticos por stderr y un estado no cero cuando encuentra una fila inválida. Debes filtrar avisos sin mezclar ni perder esas señales.
Contenido de la actividad
ET · Directorio temporal de usuario con fixture Bash determinista; sin red, servicios ni privilegios.
Capacidad
Diseñar y explicar un pipeline corto que preserve datos, diagnósticos y estado de salida como evidencias independientes.
Enunciado
Trabaja con el fixture preparado, predice el recorrido de los tres flujos y construye una composición que permita diferenciar una ejecución limpia, una ausencia de coincidencias y un error del productor.
Estado inicial
- Cuatro archivos descargables: productor, datos, marcador y reset acotado.
- El productor solo lee el archivo indicado y escribe en stdout/stderr; no modifica el sistema.
- El archivo de datos incluye una ejecución válida y una variante de error seleccionable mediante argumento.
- No se proporciona una línea final de solución ni un check que revele la respuesta.
Límites del sandbox
- Crea un directorio temporal fuera del repositorio y copia allí los materiales.
- No uses sudo, no instales paquetes y no sustituyas el fixture por archivos del sistema.
- Inspecciona los scripts antes de conceder permiso de ejecución.
- No uses `eval` ni construyas comandos concatenando datos del fixture.
- El reset solo es válido si el marcador exacto está presente en el directorio actual.
Fases de trabajo
1. Preparar e inspeccionar
Establecer un entorno desechable y comprender el contrato del fixture.
- Crea un directorio temporal y mueve o copia allí los cuatro materiales.
- Lee el productor y el reset antes de ejecutarlos.
- Renombra `sys-l-102-fixture.txt` como `.sys-l-102-fixture`.
- Concede permiso de ejecución solo a esos dos scripts.
attempt_dir="$(mktemp -d -t sys-l-102.XXXXXX)"
printf "intento=%s\n" "$attempt_dir"
cd "$attempt_dir"
mv -- ./sys-l-102-fixture.txt ./.sys-l-102-fixture
chmod u+x ./sys-l-102-producer.sh ./sys-l-102-reset.sh2. Predecir y observar por separado
Conocer el comportamiento base antes de componer.
- Escribe qué esperas en stdout, stderr y estado para cada modo.
- Ejecuta primero sin pipe y captura el estado inmediatamente.
- Repite redirigiendo stdout y stderr a archivos distintos.
./sys-l-102-producer.sh ./sys-l-102-events.tsv clean
status=$?
printf "estado=%s\n" "$status"
./sys-l-102-producer.sh ./sys-l-102-events.tsv invalid > producer.out 2> producer.err
status=$?3. Componer sin ocultar
Filtrar datos y conservar el fallo del productor.
- Construye un pipeline que seleccione `level=WARN` sin introducir stderr en los datos.
- Comprueba qué estado entrega la shell por defecto.
- Activa `pipefail` en el intento, repite y captura el estado de inmediato.
- Explica la diferencia; no la reduzcas a «funciona/no funciona».
4. Reiniciar el intento
Probar que la limpieza conserva un alcance exacto.
- Revisa la lista de archivos que creó tu ejecución.
- Ejecuta el reset incluido desde el directorio marcado.
- Comprueba que los materiales originales siguen presentes y las salidas generadas no.
./sys-l-102-reset.sh
find . -maxdepth 1 -type f -printEvidencia que debes conservar
- Predicción inicial para los modos clean e invalid.
- Comando final del pipeline y versión de shell utilizada.
- Fragmentos mínimos de stdout, stderr y estados capturados.
- Explicación de la diferencia con y sin pipefail.
- Evidencia del reset y una limitación del pipeline propuesto.
Criterios de aceptación
- El fixture se ejecuta en un directorio temporal fuera del checkout y sin sudo.
- La solución conserva stdout de datos y stderr de diagnóstico en destinos identificables.
- El estado se captura antes de ejecutar otro comando.
- Un fallo del productor no queda oculto por el último filtro del pipeline.
- Las variables de ruta se expanden con quoting y los comandos documentan el uso de `--` cuando corresponde.
- La interpretación explica el contrato asumido por cada estado y no depende solo de que exista un archivo de salida.
- El reset actúa únicamente sobre los archivos generados por el fixture marcado.
Decisiones abiertas
- Elegir `grep`, `awk` u otra utilidad documentada para el filtro.
- Guardar diagnósticos en archivo o duplicarlos deliberadamente a terminal y archivo.
- Añadir una comprobación de salida vacía sin confundirla con error.
Materiales
- Productor determinista SYS-L-102Fixture Bash que separa datos, diagnóstico y estado; no contiene el pipeline de solución.
- Datos SYS-L-102Entradas pequeñas y reproducibles para los dos modos.
- Marcador del fixtureDebe guardarse con el nombre `.sys-l-102-fixture` dentro del intento.
- Reset acotado SYS-L-102Limpia solo producer.out, producer.err y warnings.out tras validar el marcador.
- Expediente SYS-L-102Plantilla para predicción, comandos, flujos, estados, interpretación y reset.
Se guarda solo en este navegador. Puedes descargarlo para enviarlo a Codex junto con los materiales que hayas completado.
Sin borrador guardado.
Revisión y reinicio
Revisión: Codex debe comparar la evidencia con estos criterios, señalar primero el supuesto no demostrado y proponer una sola comprobación siguiente. No hay una solución oficial publicada.
Reinicio: Ejecutar `./sys-l-102-reset.sh` dentro del directorio que contiene `.sys-l-102-fixture`; el script rechaza cualquier otro directorio y solo borra tres salidas nombradas.
Pistas graduadas
Pista 1 · No mezcles los diagnósticos
- El pipe ordinario recibe stdout.
- Decide explícitamente dónde debe quedar stderr antes de añadir el filtro.
Pista 2 · Captura inmediatamente
- Cualquier comando posterior sustituye `$?`.
- El estado por defecto de un pipeline no resume necesariamente al productor.
Pista 3 · Compara contratos
- Una ausencia de coincidencias puede tener un estado distinto de un error.
- Consulta el manual del filtro antes de etiquetar ambos resultados.