Práctica focalizada · Bloque 3 · Unidad 3.2
EX-B3-03
Construir y observar un árbol de dependencias
Dos ramas de una consulta de informes repiten headers y normalización de correlación. El contrato funciona, pero no permite observar ni reutilizar el requisito común.
Cómo abordarla
Haz visible el árbol y el ciclo de vida
Ejecuta primero el baseline. Después modifica la frontera indicada, escribe una regresión positiva y otra negativa y conserva la salida real.
Evidencia objetivo: OpenAPI conserva sus parámetros, la configuración falla pronto y el recurso se libera tanto en éxito como en error.
Abrir laboratorio de código
1. Descarga y arranca
- Starter del árbol de dependenciasAPI con entradas repetidas, tests verdes y plantilla de traza; sin proveedores extraídos.
2. Escribe y prueba
- Ejecuta el baseline, inspecciona OpenAPI y dibuja el árbol que esperas.
- Extrae una hoja de correlación y dos proveedores que la compartan; inyecta sus valores de forma explícita.
- Añade una traza controlada y un test que pruebe una ejecución de la hoja en una petición y otra ejecución en la siguiente.
- Repite la regresión y compara los parámetros públicos antes y después.
3. Demuestra el comportamiento
- Código refactorizado y tests añadidos.
- Árbol previsto frente a traza observada.
- Fingerprint de parámetros OpenAPI y salida de pytest antes/después.
La respuesta principal es tu código y sus pruebas. Usa este espacio solo para anotar la predicción inicial y el resultado observado.
Predicción breve antes de ejecutar
¿Qué nodo debe ser común a ambas ramas, qué valor entrega cada proveedor y qué evidencia distingue la caché de una ejecución accidental?
Contrato que el árbol no debe ocultar
Baseline: GET /reports exige X-Correlation-Id y X-Organization-Id, acepta page_size entre 1 y 100 y devuelve la misma representación pública.Comprueba estas tres cosas
- ¿Qué header y query deben seguir apareciendo en OpenAPI?
- ¿Qué hoja comparten el contexto de consulta y el de auditoría?
- ¿Qué cambia al enviar una segunda petición?
Anota predicción, comando ejecutado y diferencia observada; el código vive en tu workspace.
Sin respuesta guardada.
Pistas opcionales
Pista 1 · Empieza por la hoja
- Las dos ramas necesitan el mismo valor de correlación ya validado.
- El resultado de una dependencia puede alimentar otra dependencia igual que alimenta una operación.
Pista 2 · Prueba dos escalas
- Una aserción dentro de una petición prueba reutilización.
- Otra petición debe probar que la caché anterior ya no existe.
Profundización opcional
Extraer un árbol pequeño con una subdependencia compartida y demostrar su caché por petición sin alterar el contrato HTTP u OpenAPI.
Contexto adicional
- Conserva status, body, nombres de parámetros y validaciones públicas.
- Usa Annotated para declarar valores concretos; no inyectes un diccionario contenedor.
- No uses use_cache=False: la capacidad objetivo es observar el comportamiento por defecto.
Decisiones abiertas
- Puedes ubicar los proveedores junto al router o en un módulo propio; justifica la dirección de imports.
- Puedes trazar con una lista, un contador o un fake, siempre que la prueba restaure su estado.
Cómo revisar tu respuesta
- El header X-Correlation-Id, X-Organization-Id y page_size conservan nombre, obligatoriedad y límites.
- La hoja compartida se ejecuta una vez dentro de una petición aunque dos ramas la necesiten.
- Una segunda petición produce una nueva ejecución; no existe caché entre peticiones.
- La operación recibe valores tipados y no busca nombres dentro de un contenedor genérico.
- Todos los tests de contrato permanecen verdes.
Evidencia, revisión y reinicio
- Árbol previsto y traza real de resolución para dos peticiones.
- OpenAPI y tests HTTP antes y después de extraer los proveedores.
- Test que demuestra una sola ejecución de la subdependencia compartida por petición.
Revisión: con Codex, utilizando la evidencia y los criterios anteriores; no se publica una solución oficial.
Reinicio: Volver a descomprimir ex-b3-03-dependency-tree.zip; el paquete no usa red, base de datos ni estado externo.