Invoca el escenario SIP hasta awaiting_approval, descarta el TestClient (y las
caches DI) y crea otro sobre el mismo DATA_DIR; el /approve posterior reanuda
hasta completed gracias a execution_index.json + checkpoints.sqlite.
Desviación del plan: el Task 29 Step 2 ("persistir índice de ejecuciones") ya
se implementó en el Task 24 (api/executions.py: _record_execution/_load_index/
_resolve sobre data_dir/execution_index.json), así que este commit solo añade
el test.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- test_invoke_hitl: escenario SIP real → awaiting_approval; approve devuelve
status=completed con approved_actions; reject deja status=failed con
error=rejected_by_human.
- test_invoke_pii_block: input con NIF español y email → status=blocked_by_guardrail
y violación DetectPII con blocked=True.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Invoca el agente real incident_analyzer (assets del repo, LLM mock) vía
TestClient y comprueba status=completed, final_output y que el decision_path
recorre los seis nodos del grafo. Añade conftest con la fixture
integration_client (env apuntando a agents/ y policies/ del repo, caches DI
limpiadas).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>